以AnimatedDrawingsAPP为例,用TorchS
内容导读
上节介绍了TorchServe模型部署调优的5个步骤,本节以AnimatedDrawingsAPP为例,实际演示TorchServe的模型优化效果。
本文首发自微信公众号:PyTorch开发者社区
去年,Meta凭借AnimatedDrawings应用程序,用AI让儿童手工画动了起来,静态简笔画秒变动画
AnimatedDrawings制作流程
AnimatedDrawings动态效果
Demo传送门:
https:sketch。metademolab。com
这对于AI来说并不简单。AI的设计初衷是为了处理真实世界中的图像,儿童绘画与真实图像相比,形态和风格迥异,更具有复杂性及不可预测性,因此先前的AI系统可能并不适用于处理AnimatedDrawings类似的任务。
本文将以AnimatedDrawings为例,详细讲解如何借助TorchServe,对即将部署到生产环境中的模型进行调优。
4大因素影响生产环境中的模型调优
下面的工作流程展示用TorchServe在生产环境中进行模型部署的总体思路。
用TorchServe为生产环境中的模型调优的基本流程
大多数情况下,部署模型到生产环境中是基于吞吐量(throughput)或延迟(latency)服务级别协议(SLA)进行优化的。
通常实时应用程序(realtimeapplication)更关心延迟,而离线应用程序(offlineapplication)则更关心吞吐量。
对于部署到生产环境中的模型,影响性能的因素众多,本文重点介绍4个:
1。Modeloptimizations
这是将模型部署到生产环境的前置步骤,包括量化、剪枝、使用IRgraphs(PyTorch中的TorchScript)、融合内核及其他众多技术。目前,TorchPrep中提供很多类似技术作为CLI工具。
更多关于Torchprep的相关简介,请访问:
https:github。commsaroufimtorchprep
2。Batchinference
它是指将多个input输入到一个模型中,在训练过程中会频繁用到,对于在推理阶段控制成本也很有帮助。
硬件加速器对并行进行了优化,batching有助于充分利用计算能力,这经常导致更高的吞吐量。推理的主要区别在于无需等待太久,就能从客户端获得一个batch,也就是我们常说的动态批处理(dynamicbatching)。
3。NumbersofWorkers
TorchServe通过worker部署模型。TorchServe中的worker属于Python进程,拥有用于推理的模型权重副本。worker数量太少,无法从足够的并行性中受益;worker数量太多,又会导致workercontention及端到端性能降低。
4。Hardware
根据模型、应用程序及延迟、吞吐量预算,从TorchServe、CPU、GPU、AWSInferentia中选择一个合适的硬件。
有些硬件配置是为了获取最好的class性能,有些是为了更符合预期的成本管控。实验表明,batchsize较大时更适合选用GPU;batchsize较小或要求低延迟时,选用CPU和AWSInferentia则更具备成本优势。
Tips分享:TorchServe性能调优的注意事项
开始之前,我们先分享一些用TorchServe部署模型、获得最佳性能的Tips。
学习PyTorch官方教程:
https:pytorch。orgtutorials
硬件选择与模型优化选择也是紧密联系的。
模型部署的硬件选择,与延迟、吞吐量预期以及每次推理的成本密切相关。
由于模型大小和应用的不同,CPU的生产环境通常无法负担类似计算机视觉模型的部署,大家可以注册使用OpenBayes。com,注册即送3小时RTX3090,每周还赠送10小时RTX3090,满足一般的GPU需求。
此外,最近添加到TorchServe中的IPEX等优化,使得这类模型的部署成本更低、更能被CPU负担。
IPEX优化模型部署详见:
https:pytorch。orgtutorialsintermediatetorchservewithipex。html
TorchServe中的worker属于Python进程,可以提供并行,应谨慎设定worker数量。默认情况下TorchServe启动的worker数量等于主机上的VCPU或可用GPU数量,这可能会给TorchServe启动增加相当长的时间。
TorchServe公开了一个configproperty来设置worker的数量。为了让多个worker提供高效并行并避免它们竞争资源,建议在CPU和GPU上设置以下baseline:
CPU:在handler中设置torch。setnumthread(1)。然后将workers的数量设置成numphysicalcores2。但最好的线程配置可以通过利用IntelCPUlauncherscript来实现。
GPU:可用GPU的数量可以通过config。properties中的numbergpus进行设置。TorchServe使用循环分配worker到GPU。建议:Numberofworker(NumberofavailableGPUs)(NumberofUniqueModels)。注意,preAmpere的GPU不提供任何与MultiInstanceGPU的资源隔离。
Batchsize直接影响延迟和吞吐量。为了更好地利用计算资源,需要增加batchsize。在延迟和吞吐量之间存在tradeoff;较大的batchsize可以提高吞吐量,但也会导致较高的延迟。
TorchServe中有两种设置batchsize的方式,一种是通过config。properties中modelconfig进行,另一种使用ManagementAPI来registeringmodel。
下节展示如何用TorchServe的benchmarksuite来决定模型优化中硬件、worker和batchsize的最佳组合。
认识TorchServeBenchmarkSuite
要使用TorchServebenchmarksuite,首先需要一个archivedfile,即上文提过的。mar文件。该文件包含模型、handler和其他所有用来加载和运行推理的其他artifacts。AnimatedDrawingAPP使用Detectron2的MaskrCNN目标检测模型
运行benchmarksuite
TorchServe中的Automatedbenchmarksuite可以在不同batchsize和worker设置下,对多个模型进行基准测试,并输出报告。
了解Automatedbenchmarksuite:
https:github。compytorchservetreemasterbenchmarksautobenchmarkingwithapachebench
开始运行:gitclonehttps:github。compytorchserve。gitcdservebenchmarkspipinstallrrequirementsab。txtaptgetinstallapache2utils
在yaml文件中配置模型level设置:Modelname:eagermode:benchmarkengine:aburl:Pathto。marfileworkers:14batchdelay:100batchsize:1248requests:10000concurrency:10input:Pathtomodelinputbackendprofiling:Falseexecenv:localprocessors:cpugpus:all
这个yaml文件将被benchmarkconfigtemplate。yaml引用。Yaml文件中包括用于生成报告的其他设置,也可以用AWSCloud查看logs。pythonbenchmarksautobenchmark。pyinputbenchmarkconfigtemplate。yaml
运行benchmark,结果被保存在一个csv文件中,可以在tmpbenchmarkabreport。csv或完整报告tmptsbenchmarkreport。md中找到。
结果包括TorchServe平均延迟、模型P99延迟(modelP99latency)、吞吐量、并发(concurrency)、请求数、handlertime及其他metrics。
重点跟踪以下影响模型调优的因素:并发、模型P99延迟、吞吐量。
这些数字要与batchsize、使用的设备、worker数量以及是否做了模型优化结合起来看。
这个模型的latencySLA已经设置为100ms,这是个实时应用程序,延迟是很重要的问题,在不违反latencySLA的情况下,吞吐量最好尽可能高。
通过搜索空间,在不同的batchsize(132)、worker数量(116)和设备(CPU,GPU)上运行一系列实验,总结出最好的实验结果,见下表:
这个模型在CPU上的延迟、batchsize、并发和worker数量等方面进行的所尝试,都没有到SLA,实际上延迟降低了13倍。
将模型部署移动到GPU上,可以立即将延迟从305ms降到23。6ms。
可以为模型做的最简单的优化之一,就是把它的精度降低到fp16,一行代码(model。half()),可以减少32的模型P99延迟,并增加几乎相同数量的吞吐量。
模型优化方法还有将模型转化为TorchScript并使用optimationforinference或其他技巧(包括onnx或tensortruntimeoptimizations)进行优化,这些优化利用了aggressivefusions。
在CPU和GPU上,设置numberofworkers1对于本文的case效果最好。
将模型部署到GPU,设置numberofworkers1,batchsize1,吞吐量增加12倍相比于CPU上降低13倍延迟。
将模型部署到GPU,设置model。half()、numberofworkers1、batchsize8,可以获得吞吐量和可承受的延迟方面的最佳结果。与CPU相比,吞吐量增加25倍,延迟仍然满足SLA(94。4ms)。
注意:如果正在运行benchmarksuite,请确保设置了适当的batchdelay,将并发性的请求设置为与batchsize成比例的数字。这里的并发性是指发送到服务器的并发请求的数量。
总结
本文介绍了TorchServe在生产环境中调优模型的注意事项及性能优化方法TorchServebenchmarksuite,使用户对模型优化、硬件选择和总体成本的可能选择有了更深入的了解。
推荐用户:
获取13小时RTX3090算力资源:
https:openbayes。com
查看用PyTorch进行深度学习在线教程:
https:openbayes。comdocstutorialjupyterlabdeeplearningwithpytorch
关注PyTorch开发者社区公众号,获取更多PyTorch技术更新、最佳实践及相关资讯!
中汽协11月商用车低位徘徊,销量环比降7。5中新经纬12月19日电中汽协数据微信号19日发布2022年11月商用车产销情况简析。据中国汽车工业协会统计分析,2022年11月,经济下行压力不断加大、疫情影响,商用车依……
国家能源局截至2月底全国累计发电装机容量约26。0亿千瓦,同3月21日,国家能源局发布12月份全国电力工业统计数据。截至2月底,全国累计发电装机容量约26。0亿千瓦,同比增长8。5。其中,风电装机容量约3。7亿千瓦,同比增长11。……
安徽人游黄山免门票?官方平台回应日前朋友圈和各社交平台上流传着一则消息称黄山将对安徽人免门票这是真的吗?今天凌晨黄山旅游官方平台作出回应:近日多方渠道咨询黄山风景区春……
无论夫妻还是情人,能这样跟你说话的人,一定很爱你鲁思贝本梅尔在《语言是窗户》一诗中说:听了你的话,我仿佛受了审批,无比委屈,又无从分辨,在离开前,我想问,那真的是你的意思?良言一语三冬暖,恶语伤人六月寒。语言可以……
赚钱,但是累直播说了几天的中字头,全部都是底部信号的,不知道这3天兄弟们收获如何接下去的走法,复杂的很,这也是咋们累的原因但是应对策略却很简单,放量突破3310跟随,先权重,券……
1999元!我拿主播当朋友,把我当韭菜如果一款手机售价在8999元,然后怒减7000元,来到了1999元的价位和大家交朋友,你们会不会心动?那必须的啊,我相信这个优惠力度就是放眼整个手机圈都是相当炸裂的。昨天……
它被称为接骨草,却因臭味遭人嫌弃,健脾利湿,药用价值高春天就是吃野菜的季节,尤其是农村野菜丰富,种类繁多,最受人们欢迎的莫过于荠菜了,包着吃,蒸着吃,拌着吃都非常美味,但是在田野或者麦田里有一种野菜,和荠菜长的特别的像,但是它有一……
我就问你一句话,是自尊心重要呢还是馒头和学费重要?影视杂谈最近在追新剧《我们的日子》,剧中有这样一段情节:李小冉扮演的淑霞和李乃文扮演的宪平在时代变革中双双下岗,尴尬的是两个人都已步入中年。为了生活和一对儿女的大学学费,淑霞想……
亲子沟通有障碍?社区送上解压秘籍妈妈,我背着你就能绕过这些‘障碍’了一位6、7岁的小朋友正努力地背着蒙着眼睛的妈妈,绕过椅子组成障碍。而背着的母亲只是象征性地靠在孩子的后背上,努力配合着。2月11日,在西华门……
亚运队将开启热身模式,洋帅倡导的咬牙精神让队员印象深刻中国男足亚运队即将开启海外拉练。图中国足球队新京报讯(记者周萧)2月14日,中国男足亚运队将结束在佛山三水的集训,取道广州飞往迪拜,开启今年的海外拉练。在迪拜、新西兰拉练……
第八章我淳朴善良的娘头条创作挑战赛出狱了,随之而来的就是厄运。这年我二十岁。我走出了监狱门,看我的监狱长是位四十六七岁左右的中年人,他姓张我叫他老张。他非常照顾我,一直送我出了监狱,我们走了……
中国制造,从这里突围广东对于中国制造的重要性,怎么强调都不会错。近期欧盟委员会发布的《2022年欧盟工业研发投资记分牌》显示,中国的表现远超欧盟与日本,位居全球第二。每年,这份报告都会选取出……