tensorflow-serving - tensorFlow服务批处理配置无效
问题描述
码头工人运行命令
docker run -t --rm -p 8500:8500 -p 8501:8501
-v /home/zhi.wang/tensorflow-serving/model:/models
-e MODEL_NAME=beidian_cart_ctr_wdl_model tensorflow/serving:1.12.0
--enable_batching=true --batching_parameters_file=/models/batching_parameters.txt &
批处理参数.txt
num_batch_threads { value: 40 }
batch_timeout_micros { value: 5000}
max_batch_size {value: 20000000}
服务器配置
40 CPU和64G内存
测试结果
1 线程预测成本 30ms
40 线程预测 1 预测成本 300ms
CPU使用率
docker 中的 cpu 使用率只能达到 300% 并且主机 cpu 使用率很低
java测试脚本
TensorProto.Builder tensor = TensorProto.newBuilder();
tensor.setTensorShape(shapeProto);
tensor.setDtype(DataType.DT_STRING);
// batch set 200
for (int i=0; i<200; i++) {
tensor.addStringVal(example.toByteString());
}
解决方案
我也面临同样的问题,我发现这可能是网络 io 问题,你可以使用 dstat 来监控你的网络接口。
我找到 example.toByteString() 也花费了很多时间
推荐阅读
- mockito - 如何使用 Mockito 测试这种类型的方法?
- json - 交换键和值并累积值
- windows - gradle在Windows上没有构建输出
- ios - 如何在给定 rowid 列表的情况下快速查询 SQLite?
- msmq - Hangfire MSMQ 在服务器 1 中处理但卡在服务器 2 中
- javascript - jquery 1.4.2.min.js 和 jquery 1.11.0.js 一起使用时发生冲突
- wordpress - WordPress 节奏主题社交图标样式更改为标题
- python - 获取PDF图像Python的DPI信息
- corda - 在corda中的非参与者页面上显示信息
- maven - maven 是否可以仅对父级执行插件的一个目标,而对所有子级执行另一个目标?