查看原文
其他

一招带你轻松实现MM系列模型的一键转换与高效部署!

李剑锋 OpenMMLab 2024-04-23



本文入选【技术写作训练营】优秀结营作品,作者:李剑锋,公众号名称:熏与公生owo


模型转换一直以来都是在实际应用中很让人头疼的问题。在使用 OpenMMLab 等算法框架训练完模型后,我们通常得到模型的配置和权重文件。这些文件可以与待测数据一同加载到 image_demo.py 脚本中,从而观察模型预测效果。


但在训练初期,我们的主要关注点常在模型性能上,而对参数大小和计算效率关注较少。因此,直接利用这些配置和权重文件进行图像检测可能耗时较长。解决这个问题有两种思路。一是采用轻量级模型,减少参数,加快预测速度。二是在不牺牲模型精度的前提下,利用模型轻量化技术优化模型,使其适应各种终端设备的计算能力。而这,就是模型部署的核心内容。


具体来说,模型轻量化的实现流程如下:首先,我们在 PyTorch 或其他深度学习框架下训练出参数量大的模型;接着,我们将模型转化为 ONNX 这样的中间格式;最后,我们再将 ONNX 与相应的推理框架(如推理引擎或推理后端)结合,满足边缘计算需求。


但这一过程并不简单。中间格式的转换相对直接,但不同的硬件、芯片和平台都有自己的数据标准。对于兼容性好的框架来说,这不算问题。但对于兼容性较差的推理框架,定制其推理引擎可能要花费大量时间。我一个在百度工作的朋友也和我说,平时的模型训练工作都是比较简单很轻松的,唯独只有在模型的部署阶段,需要加班加点的奋战才能最终顺利地部署到特定的硬件终端上。因此,模型的部署一直以来都是工业界乃至学术界非常头疼的问题。



幸运的是,针对通过 OpenMMLab 这一开源平台训练生成的模型,OpenMMLab 官方推出了一个专门的部署平台,名为 MMDeploy。尽管该平台还未覆盖 OpenMMLab 上的所有算法库,但它已经支持了多个流行的算法库,例如 MMDetection 和 MMSegmentation。更重要的是,MMDeploy 还兼容多种推理框架(如 Onnxruntime、TensorRT 等)以及中间层模型格式(如 ONNX 和 TorchScript)。


这意味着我们无需复杂的设置和转换,仅需在本地安装 MMDeploy 就能轻松进行模型部署。不仅如此,我们还可以直接在 OpenMMLab 官方网站上利用上海人工智能实验室提供的计算资源,实现在线模型转换,并且无需支付额外费用。


接下来,就让我来详细介绍一下模型部署中的一些基础知识以及如何通过 OpenMMLab 官方网站,一键转换并部署 MM 系列模型。




进入 OpenMMLab 网站


如下图所示,当我们进入 OpenMMLab 的官网后(https://openmmlab.com/),点击【算法应用】中的【硬件模型库】我们就进入了硬件模型库的界面。



在左边的标签中,我们可以看到目前 OpenMMLab 里已经适配好的 ONNX 通用模型、设备的专用模型以及已有的设备(欢迎各位大佬把自己吃灰的设备贡献给大家使用~)。除此之外,在左下方的位置,有着我们今天要重点讲解的工具:模型转换以及模型测速工具。



模型转换


在点击进入模型转换界面后,我们需要点击右上角的新建转换任务来开始转换。



进入后则到了如图的界面。我们首先要去选择 OpenMMLab 的算法,目前已支持包括 MMPretrain,MMDetection, MMYoLo, MMSegementation, MMRotate, MMAction,MMDetection3D,MMPose,MMOCR 和 MMagic 这九类算法。


选定后,我们要载入自己已经使用的配置文件(正常情况下是存放在 work_dirs 下的 .py 文件)以及模型权重文件(也在 work_dir s的 .pth 文件)。



在部署参数方面,我们需要选择自己需要的目标 runtime,如表所示,目前 OpenMMLab 主要支持的有 5 种不同的 runtime。我们需要在其中选择自己适配的框架进行使用。在 MMDeploy 的 GitHub 主页中我们可以看到这些 runtime 在不同设备的支持情况,大部分都是用在 linux 或者 windows 主机上,少部分则用在移动端上。

   


我们还需要考虑是否打开动态 shape 以及生成 SDK 包,这里不详细叙述了,有想了解的可以点击旁边的感叹号进入文档查看。最后我们可以上传自己的测试数据给 OpenMMLab 的工作人员来确定效果。在这一切准备就绪后,就能够查看部署配置并提交任务了。一般而言,只需要等待五六分钟就能够完成转换工作。


在完成模型转换后我们能够在图中的界面找到转化好的模型,并找到对应的编号下载模型。假如我们在线转换过程中遇到任何的问题,我们都可以拿着编号信息到 MMDeploy 的官方群中找到大佬进行询问,并且假如我们不清楚哪个是我们想要的模型,我们还可以点击“查看参数”的按钮来确定是否是我们所需要的模型。



如图所示,在“查看参数”里我们可以看到这个是什么算法的模型以及对应转换完的框架是什么。由于看不到具体的配置和权重文件的名字,所以建议大家在模型转化后第一时间下载模型到本地并备注好相对应的信息。












模型测速


在将模型下载到本地后,我们可以对其进行实际的测速看是否满足我们项目实际落地要求。从图中可以看到,在 OpenMMLab 已有的 12 个硬件设备中,有六个是可用于模型测速的,但是只对 onnx、onnxruntime、ncnn、tensorrt、openvino以及jetson+orin+jetpack5.0.1 这 6 个推理框架进行测试。



另外,在模型测速界面,我们同样需要在右上角新建测速任务。进入后,如图所示,我们要选择自己的任务类型,一般来说,除了 ncnn 格式的,假如是在网站上转的模型用的几乎都是 “mmxxx@mmdeploy” 这个任务类型。从下面模型的上传和介绍也可以看出,@mmdeploy 的是 .zip 文件名为后缀,onnx 文件是以 .onnx 为后缀,而 ncnn 是以 .param 为后缀,所以我们在测速前需要注意自己的格式选择问题,不然很容易出现测速失败的情况发生。


除了上传模型以外,我们还可以上传自己的一张真实使用的图片作为测试数据,以测试在部署的环境下的运行速度。另外,由于每个设备都是只能对特定的框架进行测试,因此在选择设备的过程中还需要对应的设备,不然就会出现图中的报错。配置完成后我们就能够提交任务并等待测速的完成。




大概等待几分钟后,如图所示,我们就能够获得最终的测试结果。我们可以看到在各个部分的运行速度和结果。根据测试结果,该深度学习模型在 Intel Sky Lake 架构的 CPU 上运行,整体 Pipeline 的平均运行时间为 420.602 毫秒,其中 depthwiseseparableaspp 环节占用了大部分时间,达到 414.917 毫秒。所以根据这个分析的结果我们也可以对该模型进行针对性的调整和提升。




注意事项


在线平台的模型转换遇到有任何的问题,都可以去 MMDeploy 的官方群里询问,里面有大佬进行详细的答疑解惑(尤其是焕军大佬~)。


一些没有支持的算法,比如说 MMTracking,则需要自己使用 torch.onnx.export 将模型转换为 ONNX 格式,然后使用 pytorch2tensorrt 将其转换为 TensorRT 格式,或者使用 pnnx 进行其他处理。


更多详情信息请参考 MMDeploy 的官方文档,里面有关于各个模型的支持情况、速度精度的测试结果、相关算子的信息、SDK 使用说明以及开发者指南等介绍的内容。(https://mmdeploy.readthedocs.io/zh_CN/latest/get_started.html)



总结


以上就是关于如何在 OpenMMLab 网页版实现模型部署以及测速的全过程。主要就是将自己已有的配置文件和权重文件上传并选定合适的部署框架就可以白嫖上海人工智能实验室的算力资源和专业的大佬服务啦。


模型部署其实是在所有流程中最难也最复杂的,因为其中要考虑的要素太多,尤其是商业化的落地部署,不仅仅要考虑部署的硬件,还要考虑对应的芯片和系统本身的环境。因此 MMDeploy 的推出,无论是对于学生完成课程作业来说,还是对于商业化应用来说,这方便的功能无疑是简化了整体流程,并让越来越多的人或者公司都能很好的使用上人工智能来解决学术或者实际的问题。感谢上海人工智能实验室对这方面的付出和努力!


星语天文大模型,科普与科学领域的多模态、智能体探索

2023-11-13

00后大学生勇闯AI赛道,年度布道师梁明健的焦虑与探索

2023-11-10

MMYOLO一站式上手指南,从安装、训练到模型优化全面覆盖

2023-11-09

点击下方“阅读原文”直达【硬件模型库】页面

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存