ModelArts在线服务时延测试

网友投稿 593 2022-05-30

前言

当一个模型部署成ModelArts的在线服务在本地调用,用户往往会关注整个端到端的时延,本文将科学的带大家了解和测试整个端到端各个阶段的耗时。

获取端到端时延

获取单次请求的端到端时延,非常简单,首先根据我之前写的教程:https://bbs.huaweicloud.com/blogs/313145   部署好模型,然后通过:https://bbs.huaweicloud.com/blogs/313762  本地通过代码调用在线服务,然后再main.py函数加一句:

print(r.elapsed.total_seconds())

即可获取整个端到端的时间。但是整个时延其实后置很多的方法,如下图所示,首先是本地请求所在的区域,如果模型在线服务部署在北京,而用户在华南地区,那这个地域的距离需要非常多跳,才能跳到北京那,非常需要时间,一个理想的做法,申请一个也在北京的ECS[在线虚拟机、带宽足够],用同区域的ECS去调用在线服务来推理,可以减小时延,下图所示是整个链接的大体耗时:

从结果可以看到,传输一个600k的json到在线服务去推理,总时长来回大概是100ms,而其中推理的时间大概是只有6~8ms[数据前处理+推理+后处理],这是通过在模型部署中的customize_service.py打点打印出来获取的时间,真实有效哈哈。而大部分的时间都花在网络上,接下来详细分析这100ms到底花在了哪里。

curl测试方法

通过curl命令可以测的更详细的网络耗时,具体指令教程可以参考华为云官方文档:https://support.huaweicloud.com/inference-modelarts/inference-modelarts-0023.html

测试命令:

ModelArts在线服务时延测试

curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} -H 'X-Auth-Token:xxxxxxxxxxxxxxxxxxxxx' -H 'Content-type: application/json' -d '{"type":"string"}' -X POST https://xxxxxxxxxxxxxx.apig.cn-north-4.huaweicloudapis.com/v1/infers/xxxx-xxxx-xxxxx-xxxxx-xxxxx

其中:

http_code http状态码,如200成功,301转向,404未找到,500服务器错误等

http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request

time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间。

time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。

time_pretransfer 从开始到准备传输的时间。

time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。

以上解释来源于:https://blog.csdn.net/firehive/article/details/81706741,更丰富的命令可以参考其中。

结果:

http状态码: 200

DNS解析时间: 0.000629s

redirect重定向时间: 0.000000s

连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间time_connect: 0.001102s

连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间time_appconnect: 0.008809s

从开始到准备传输的时间time_pretransfer: 0.008964s

开始传输时间。在client发出请求之后,Web 服务器返回数据的第一个字节所用的时间time_starttransfer: 0.008965s

size_download: 22074bytes

speed_download: 214310.000B/s

----------

time_total: 0.103954s

以上结果值得关注的是,和在线服务建立连接的时间都需要花接近10ms,这个时间是跑不掉了。

在线服务里的时间

模型部署成在线服务,相当于有个容器,把模型塞进容器里跑,里面是一个serving层暴露API让外部调用,一个是内在的tensorflow推理,我通过在模型部署上线的customize_service.py通过同样的request请求,请求容器内的serving[剔除了网络时延],得到的时间是27ms,而推理的时间是7ms,也就是在600k的数据在serving处理需要20ms的时间,如下图所示:

链路耗时

通过crul命令传送空,得到的时间就是建立连接的时间+dispatcher时间+APIG时间+容器里的时间,同过上传一个新的模型在线服务,让customize_service.py的前处理推理后处理不做任何操作,直接return结果,可以剔除推理的时间,而我通过专属dispatcher【花钱】的方法,绕开了APIG的验证,又去除了APIG验证的时间,而后通过一些方法测试到ECS到专属dispatcher时间为2ms,最后结果如下图所示:

AI AI开发平台ModelArts 机器学习 深度学习 神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SAP云平台和第三方CRM解决方案(火锅)互联
下一篇:TensorFlow在windows 下的安装
相关文章