AI部署之路 | 模型选型、本地部署、服务器部署、模型转换全栈打通!( 五 )


比如英伟达的显卡,有限的显存和计算资源(SM、 core、DLA);比如高通的AI处理器,有限的计算资源(HVX、HMX、NPU);
这个在服务器级别和嵌入式级别都会有需求 。一般来说,提供加速卡的厂商也会提供相应的工具供你搜索多模型部署的最优配置,这种在实际场景中经常会用到,因为不大可能就一个模型在跑 。比如自动驾驶场景中,多路摄像头每路摄像头接一个模型去跑,比如检测红绿灯的、检测行人的,而这些模型一般都会在一个加速卡上跑,
如何合理分配这些资源,或者说如何使多个模型比较好的运行在这些资源上也是需要考虑的 。简单预估可以,比如一个模型单张卡压测,另一个模型,可以简单预估两个模型一起qps各缩减一半 。不过其实最好的是有工具可以实际压测,通过排列组合各种配置去实际压测这些模型的各种配置,选择一个最大化两个模型QPS或者的方法 。当然也可以通过硬件划分资源来执行每个模型能获取到的实际算力,再细致层面你可以通过控制每个op->执行发到内核通过内核进行控制每个的执行优先级来控制模型 。
先回来最简单的在一张卡上或者有限资源内如何搜寻最优配置,最好还是有工具,没有工具只能自己造了 。
闭源的在你使用硬件厂商提供的工具中就知道了,比如你使用高通的板子,高通会提供你很多软件库,其中有一个可以分析多个模型或者一个模型在特定资源下的最高qps以及最低供你参考 。同理其他硬件厂商也是一样的 。
开源的可以看看的:
模型加密
先说模型加密有没有这个需求,如果没有这个需求就没必要哈,模型加密主要看竞对的能力以及有多大意愿破解你的模型hh 。
我知道的模型加密的几个方式:
很多推理框架也提供了方便模型加密的接口:
PS:加密模型无非就是想让破解方花点功夫去破解你的模型,花多少功夫取决你花多少功夫去加密你的模型;照这样说修改模型结构也可以达到加密模型的目的,比如模型融合,天然会实现对模型的op融合、权重合并,很多op(conv+bn+relu)转成之后结构已经面目全非了,权重也融合的融合、去除的去除,想要把模型权重提取出来也是挺难得
模型转换那些事儿
模型转换是很常见的事情,因为训练平台和部署平台大概率是不一样的,比如你用训练,但是用去部署 。两者模型结构实现方式不一样,肯定会涉及到模型移植的问题,模型转换,又或是模型移植,都是苦力活 。又或者你不训练模型,拿到的是别人训练的模型,如果想在自己的平台部署,你的平台和人家的模型不在一个平台,那就得模型转换了,因为你拿到的模型可能是各种格式的:
还是可以参考,看下有多少模型列表,之前有提到过:
不过如果不换平台的话,可以不考虑模型转换 。
【AI部署之路 | 模型选型、本地部署、服务器部署、模型转换全栈打通!】模型转换是个经验活,见得模型多了,就知道每个模型结构的特点以及转换特点 。转换起来也就得心应手,少踩很多坑了 。
常干的事儿
首先是看模型结构,在上文中“自己造模型”这一节中已有提及 。不论是什么样的模型结构,模型肯定都是按照一定的规则组织的,模型结构和模型权重都在里头,怎么看各凭本事了 。
总结一些和模型相关的例子,有更新会放这里:
排查各种问题
转模型和开盲盒一样,不能保证模型转完精度一定没问题,要做很多检查 。
模型转换后一般要做的事儿常见的问题模型优化那些事儿
模型优化也是老生常谈的事情,小到优化一个op,大概优化整个推理,可以干的事情很多 。