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

前言与观点

本文主要是在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调用方式、模型单一、模型输入类型单一等等,所以仅仅只能作为一个参考,不能直接定论!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大Huoyo

提醒博主一下,该起来写文章了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值