ModelArts在线服务时延测试

苏道 发表于 2021/11/26 17:09:54 2021/11/26
【摘要】 在线推理,往往会关注整个端到端链路的时延,本文保姆级带你测试ModelArts在线服务的时延。

前言

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

获取端到端时延

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

print(r.elapsed.total_seconds())

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

haoshi.PNG

从结果可以看到,传输一个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的时间,如下图所示:

rongqishijian.png

链路耗时

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。