Cpu下不同环境部署Tensorflow模型性能测试(tf-serving、FastApi和Java)

Cpu下不同环境部署Tensorflow模型性能测试(tf-serving、FastApi和Java),第1张

前言与观点

本文主要是在cpu环境(不是gpu)下对tensorflow模型的不同部署方法进行简要的性能测试,寻求一个较好的部署方案。


涉及的部署方法:

  • FastApi部署
  • tf-serving部署
  • Java部署

本测试观点:(仅仅是本次测试的观点,不代表本人观点啊,满满的求生欲)

  • 三种方案中,总体来看无论从并发量还是吞吐量,tf-serving都略胜一筹
  • 当并发量小于500时,结合并发量和吞吐量Java和tf-serving难分胜负,且Java有超越的潜在可能
  • FastApi部署时并发量超过500数据已经不能看了,错误率飙升

测试环境与测试方法
  • 硬件环境
  • 工具:JMeter
  • 测试环境:i7-9700 3.0GHz 8核 32G内存
  • 模型
input = layers.Input(shape=(46,),name='x')
out = layers.Embedding(len(word_tokenizer.index_word) + 1, 50, input_length=46)(input)
out = layers.Bidirectional(layers.LSTM(50))(out)
out = layers.Dropout(0.2)(out)
out = layers.Flatten()(out)
out = layers.Dense(12, activation='softmax',name='y')(out)
model = tf.keras.Model(inputs=input,outputs=out)
  • 测试方法
  1. 导出训练好的saved_model
  2. 本地拉一个tensorflow/serving进行启动提供接口
  3. 本地使用Python的FastApi框架加载模型提供接口
  4. 本地使用Java的Springboot框架加载模型提供接口
  5. 本地部署JMeter、并发量从1-10-100-500-1000-5000逐步增加测试

性能分析 平均响应

通过对比三种部署方案下的平均响应,得到下图:

说明:FastApi部署时并发量超过500错误率已达到55+%,响应数据已不准确,故丢弃

可以看到:

  • FastApi部署方式平均响应较为突出,是不行的那种突出
  • 在10个并发内,三种方式无明显差异(如果你看出来了细微差异,请你忽略)
  • 当并发量小于1000时,Java部署和tf-serving的平均响应无明显差异
  • 当并发量大于1000时,Java部署的平均响应较于tf-serving开始飙升,到5000个并发时已达到两倍左右

吞吐量

通过对比三种部署方案下的吞吐量,得到下图:

说明:FastApi部署时并发量超过500错误率已达到55+%,响应数据已不准确,故丢弃

可以看到:

  • 吞吐量的走势与平均响应的趋势并无二致
  • 差距在于Java部署和tf-serving的分界点有并发量1000变为了500

`

总结
  • 总体来看,部署的首选应该是tf-serving,而且据tf-serving的开源地址所述,自行编译tf-serving还可以有优化的空间
  • 如果并发量不高的情况下java也是一个优选之策
  • 需要特别注意的是,由于条件局限,本次测试尚缺乏很多对比因素,比如测试环境单

    一、Java和FastApi部署代码无优化标准、未使用rpc调用方式、模型单

    一、模型输入类型单一等等,所以仅仅只能作为一个参考,不能直接定论!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存