以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技术更新、最佳实践及相关资讯!
飙酷车神2开发者或将于21公布续作消息自从象牙塔工作室发行飙酷车神2以来已经过去了将近5年,这款游戏在发行后的更新,赛季和外观装扮方面获得了广泛的支持。开发商现在将于北京时间2月1日凌晨1点公布一些新内容,以回应之前预
传奇M国际服正式上线时间,传奇M国际服公测传奇M是以战斗为主要玩法的mmorpg游戏,有很多玩家询问传奇M国际服正式上线时间,以及传奇M国际服公测什么时候开始,想等到开测后第一时间去游玩,抢占搬砖的先机,下面小编为大家带来
信号两位独立游戏人花了八年时间打造的一场复古盛宴前不久,一款名为信号的独立游戏获得了很多玩家的好评赞誉。这款游戏最大的特色就是复古,高度还原了过去老生化危机系列和寂静岭系列的那种风格。从操作到谜题再到音乐,游戏中处处可以感受到9
瓦朗谢纳VS拉瓦勒拉瓦尔将迎战瓦朗谢纳。自从输给圣艾蒂安后,他们的状态一直很好,比瓦伦西安更接近积分榜的上半区。在这场比赛中,支持客场球队至少拿到一分是最好的选择。拉瓦尔在联赛中取得了几个不错的成绩
这类家庭,通过第三代试管婴儿有多大概率能得到健康宝宝?有任何疑问批评及指导,请毫不犹豫地私信作者!相互易位相互易位(reciprocaltranslocation)是一种常见的染色体结构异常,最先由Sturtevant于1921年描述
国乒3消息蒯曼参加wtt支线赛,许昕惹争议,世青赛冠军一轮游最近国乒整体大队伍忙个不断,一部分主力在国内参加集训以更好的状态迎接后续的世乒赛。另外一部分年轻的主力则是被教练组安排到国外参加WTT的常规挑战赛,通过以赛代练提升他们的水平。在这
聊城籍轮椅网球运动员朱珍珍再创佳绩收获第二个大满贯双打亚军来源聊城日报聊城新闻网朱珍珍在比赛中。受访者供图本报讯(记者马永伟)春节期间,聊城籍轮椅网球运动员朱珍珍在澳网赛场再创佳绩。在1月27日结束的澳网轮椅网球女双决赛中,朱珍珍和搭档日
海港选帅已有心仪人选!梅州有意引进廖力生,能否成行看泰山态度2023赛季中超转会窗口将在2月1日开启,部分球队已经开始了引援调整工作。媒体人透露,梅州客家有意引进廖力生,山东泰山正在考虑放行。此外,海港外援恩迪亚耶正式租借加盟土超球队代米尔
我的王子来了,给我去除你不够的魔咒自我评判的女巫给我施了你不够魔咒你不够好你不够努力你不够精进你不够坚持你不够聪明你不够成熟你不够有才华长长一串的你不够无穷无尽盘旋缠绕变成一个大锅盖落在我的头顶我一天24小时顶着它
狂飙全身而退的真正大佬其实狂飙里面真正的隐藏大佬是黄老。最后还能全身而退让人细思极恐。无论是与赵立冬,高启强还有孟德海都有千丝万缕的联系。1。赵立冬的老领导2。高启强真正的靠山3。孟德海的舅舅以及靠山下
狂飙中未填的5个大坑狂飙这部剧可谓打败了所有春节档,从小孩到老人都爱看的一部剧,也让很多有演技的好演员有了一个展示自己的机会,可是编剧还有5个坑没有填。安长林被谁打了黑枪?安长林曾经提到,自己身上有两