ModelArts在线服务时延测试
前言
当一个模型部署成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
测试命令:
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,最后结果如下图所示:
- 点赞
- 收藏
- 关注作者
评论(0)