Open wangzeyao opened 4 years ago
推断时有用显卡么?还是纯cpu?seq2seq的解码本身是慢一些。
推断时有用显卡么?还是纯cpu?seq2seq的解码本身是慢一些。
你好,推断的时候用了V100的显卡。我的理解是beam search解码是在得到模型的输出后进行的。但是得到模型输出这个过程(通过向tf serving容器发送请求)就需要两秒多。比如说自动摘要的例子中,AutoTitle类里的predict函数:
start = time.time()
r = requests.post('url地址',data=test_data_json,headers=headers) # 向部署了模型的tf serving发送请求以获得模型输出,
end = time.time()
print(end-start)
out = np.array(json.loads(r.text)['outputs']) # 这里的out就等于原来的 model.predict([token_ids, segment_ids])
return out[:,1]
最终打印出来的时间基本在两秒左右
那你测过直接预测时需要多长时间么?就是不包装为tf serving,直接在模型脚本那里预测。
测过,模型输入到输出大概是0.02秒
测过,模型输入到输出大概是0.02秒
这也太快了吧,我用RTX测,平均也要500ms左右~
如果你原来的预测没问题,那么tf serving我也帮不了你了,因为我也没搞过tf serving,不熟悉相关内容~
推断时有用显卡么?还是纯cpu?seq2seq的解码本身是慢一些。
你好,推断的时候用了V100的显卡。我的理解是beam search解码是在得到模型的输出后进行的。但是得到模型输出这个过程(通过向tf serving容器发送请求)就需要两秒多。比如说自动摘要的例子中,AutoTitle类里的predict函数:
start = time.time() r = requests.post('url地址',data=test_data_json,headers=headers) # 向部署了模型的tf serving发送请求以获得模型输出, end = time.time() print(end-start) out = np.array(json.loads(r.text)['outputs']) # 这里的out就等于原来的 model.predict([token_ids, segment_ids]) return out[:,1]
最终打印出来的时间基本在两秒左右
tf serving
第一次启动的话, 需要warm up, 所以第一次预测会很慢, 但是接下来应该会比较快。
第二条是你确定你tf serving docker container是用上了gpu吗? 是不是按照官方的GPU教程pull的镜像, 且安装了 nvdia-docker?https://www.tensorflow.org/tfx/serving/docker
docker pull tensorflow/serving:latest-gpu
docker run --runtime=nvidia -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
我记得以前尝试的时候, 使用nvdia-docker 就没有办法使用docker-compose, 你可以试试跑推断的时候
watch -n0.1 nvidia-smi
看看你的GPU usage
请问, 模型是怎么转换成pb+variable的格式 ?
请问, 模型是怎么转换成pb+variable的格式 ?
model.save(base + '/150k/1',save_format='tf')
请问, 模型是怎么转换成pb+variable的格式 ?
model.save(base + '/150k/1',save_format='tf')
谢谢, 我已经找到了, 这是我的用法 https://github.com/ZhuiyiTechnology/pretrained-models/issues/5#issuecomment-667067036
推断时有用显卡么?还是纯cpu?seq2seq的解码本身是慢一些。
你好,推断的时候用了V100的显卡。我的理解是beam search解码是在得到模型的输出后进行的。但是得到模型输出这个过程(通过向tf serving容器发送请求)就需要两秒多。比如说自动摘要的例子中,AutoTitle类里的predict函数:
start = time.time() r = requests.post('url地址',data=test_data_json,headers=headers) # 向部署了模型的tf serving发送请求以获得模型输出, end = time.time() print(end-start) out = np.array(json.loads(r.text)['outputs']) # 这里的out就等于原来的 model.predict([token_ids, segment_ids]) return out[:,1]
最终打印出来的时间基本在两秒左右
tf serving
第一次启动的话, 需要warm up, 所以第一次预测会很慢, 但是接下来应该会比较快。 第二条是你确定你tf serving docker container是用上了gpu吗? 是不是按照官方的GPU教程pull的镜像, 且安装了 nvdia-docker?https://www.tensorflow.org/tfx/serving/dockerdocker pull tensorflow/serving:latest-gpu docker run --runtime=nvidia -p 8501:8501 \ --mount type=bind,\ source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\ target=/models/half_plus_two \ -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
我记得以前尝试的时候, 使用nvdia-docker 就没有办法使用docker-compose, 你可以试试跑推断的时候
watch -n0.1 nvidia-smi
看看你的GPU usage
前段时间按照链接里的步骤试了一下,在容器里能看到GPU被占用,进程也能查到但推断速度依然很慢,后面改用抽取式了,效果还好一点,谢谢回复
@wangzeyao 时间是不是主要花费在tensor数据的传输上面了?可以通过修改一下模型的输出,保证数据的传输是beam_search函数所必要的就足够了。
我用bert+crf在tf2.2和tf1.14上做过测试。 tf1.14版本模型在tf serving上慢了1倍,tf2.2的慢了3倍。
原因不太好分析,但感觉用原生tf1重构一下模型,然后把参数迁移过来应该可以解决。
我用bert+crf在tf2.2和tf1.14上做过测试。 tf1.14版本模型在tf serving上慢了1倍,tf2.2的慢了3倍。
原因不太好分析,但感觉用原生tf1重构一下模型,然后把参数迁移过来应该可以解决。
请问tf1.14是怎么把模型存为pb格式的?
我用bert+crf在tf2.2和tf1.14上做过测试。 tf1.14版本模型在tf serving上慢了1倍,tf2.2的慢了3倍。 原因不太好分析,但感觉用原生tf1重构一下模型,然后把参数迁移过来应该可以解决。
请问tf1.14是怎么把模型存为pb格式的?
tf1.15的tf.keras有内置的保存.pb的方法;我部署的模型在跑批处理的时候推理速度奇慢,看了资源管理发现容器占用的CPU和内存都很低,CPU在10%几,内存占用1G,请问有大神遇到过这种问题么
请问, 模型是怎么转换成pb+variable的格式 ?
model.save(base + '/150k/1',save_format='tf')
谢谢, 我已经找到了, 这是我的用法 ZhuiyiTechnology/pretrained-models#5 (comment)
请问一下, 你在用这种方法生成pb模型之后, 通过tf serving部署, 有没有遇到 Input to reshape is a tensor with XXX values, but the requested shape has XX 的问题。
@wangzeyao 请问最后解决了挂载到tf-serving后推理速度较长的原因了吗?
提问时请尽可能提供如下信息:
基本信息
核心代码
使用example 里的 autotile_csl
自我尝试
模型保存后转换成pb+variable的格式部署到tf serving容器,GPU是V100,请求一次tf serving服务的时间为两秒多,请问是跟模型有关系吗?