性能测试(tf"/>
Cpu下不同环境部署Tensorflow模型性能测试(tf
前言与观点
本文主要是在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)
- 测试方法
- 导出训练好的saved_model
- 本地拉一个tensorflow/serving进行启动提供接口
- 本地使用Python的FastApi框架加载模型提供接口
- 本地使用Java的Springboot框架加载模型提供接口
- 本地部署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调用方式、模型单一、模型输入类型单一等等,所以仅仅只能作为一个参考,不能直接定论!
更多推荐
Cpu下不同环境部署Tensorflow模型性能测试(tf
发布评论