C++ Serving vs TensorFlow Serving 性能对比

November 14, 2021 · View on GitHub

1. 测试环境和说明

  1. GPU型号:Tesla P4(7611 Mib)
  2. Cuda版本:11.0
  3. 模型:ResNet_v2_50
  4. 为了测试异步合并batch的效果,测试数据中batch=1
  5. 使用的测试代码和使用的数据集
  6. 下图中蓝色是C++ Serving,灰色为TF-Serving。
  7. 折线图为QPS,数值越大表示每秒钟处理的请求数量越大,性能就越好。
  8. 柱状图为平均处理时延,数值越大表示单个请求处理时间越长,性能就越差。

2. 同步模式

均使用同步模式,默认参数配置。

可以看出同步模型默认参数配置情况下,C++Serving QPS和平均时延指标均优于TF-Serving。



client_nummodel_nameqps(samples/s)mean(ms)model_nameqps(samples/s)mean(ms)
10pd-serving111.33689.787tf-serving84.632118.13
30pd-serving165.928180.761tf-serving106.572281.473
50pd-serving207.244241.211tf-serving80.002624.959
70pd-serving214.769325.894tf-serving105.17665.561
100pd-serving235.405424.759tf-serving93.6641067.619
150pd-serving239.114627.279tf-serving86.3121737.848

3. 异步模式

均使用异步模式,最大batch=32,异步线程数=2。

可以看出异步模式情况下,两者性能接近,但当Client端并发数达到70的时候,TF-Serving服务直接超时,而C++Serving能够正常返回结果。

同时,对比同步和异步模式可以看出,异步模式在请求batch数较小时,通过合并batch能够有效提高QPS和平均处理时延。



client_nummodel_nameqps(samples/s)mean(ms)model_nameqps(samples/s)mean(ms)
10pd-serving130.63176.502tf-serving172.6457.916
30pd-serving201.062149.168tf-serving241.669124.128
50pd-serving286.01174.764tf-serving278.744179.367
70pd-serving313.58223.187tf-serving298.241234.7
100pd-serving323.369309.208tf-serving0
150pd-serving328.248456.933tf-serving0