知游问:我现在只懂Python,日常工作就是写脚本处理数据和训练模型,但我没有工程技能。想往模型部署优化和算法实现方向发展。我应该如何学习和规划?模型部署优化的方向其实还是挺广的。从完成模型训练到最终将模型部署到实际硬件上,整个过程涉及很多不同层次的工作,每个环节对技术点的要求也不尽相同。部署过程大致可以分为以下几个步骤:1.模型转换从训练框架中获取模型后,根据需求将其转换为相应的模型格式。模型格式的选择通常根据公司业务端SDK的要求,一般是caffe模型或者onnx模型,方便不同框架之间的模型适配。这个环节的工作需要了解caffe/onnx等相应的训练框架和模型格式。Pytorch、TensorFlow等常用框架都有非常成熟的社区和相应的博客或教程;caffe和onnx模型格式也有很多公开文档可供参考和学习。就算没有文章可以参考,好在两者都是开源的,阅读源码和示例代码还是可以找到答案的。2.模型优化这里的模型优化是指与后端无关的通用优化,如常量折叠、算术优化、依赖优化、函数优化、算子融合、模型信息简化等。有些训练框架在训练模型导出的时候,会包含上述部分优化过程。同时,如果转换模型格式,不同IR表示之间的差异可能会引入一些冗余或优化的计算。因此,模型转换后通常还会进行部分模型优化操作。这个环节的工作需要对计算图的执行流程、各个op的计算定义、程序运行性能模型有一定的了解,才能知道如果模型是如何保证优化后的模型有更好的性能优化。理解越深,模型的潜在性能就越能被挖掘出来。3.模型压缩广义上讲,模型压缩也是模型优化的一部分。模型压缩本身也包括很多方法,比如剪枝、蒸馏、量化等等。模型压缩的根本目的是为了获得更小的模型,降低存储需求,减少计算量,从而达到加速的目的。该环节的工作需要对压缩算法本身、模型涉及的算法任务、模型结构设计、硬件平台的计算过程三个方面有一定的了解。当由于模型压缩操作导致模型精度下降时,通过对模型算法的理解以及模型在硬件上的计算细节,足以分析造成精度下降的原因,并给出有针对性的解决方案。模型压缩更重要的往往是工程经验,因为当同一个模型部署在不同的硬件后端时,由于硬件计算的差异,对精度的影响往往是不一样的。这只能通过积累工程经验来实现。不断改进。OpenPPL也在逐步开源自己的模型压缩工具链,引入上述模型算法、压缩算法、硬件平台适配等知识。4.模型部署模型部署是整个过程中最复杂的环节。从工程角度来说,主要核心工作是模型打包、模型加密、SDK打包。在实际产品中,往往会使用多个模型。模型打包是指将模型中涉及的前处理和后处理,以及多个模型的整合,加上一些其他的描述文件。模型打包的格式和模型加密的方式与具体的SDK相关。该环节主要涉及的技能与SDK开发关系比较密切。从功能上看,对部署最终性能影响最大的肯定是SDK中包含的后端库,也就是真正运行模型的推理库。开发高性能推理库所需的技能点更加广泛和专业。并行计算的编程思想在不同平台上是通用的,但是不同的硬件架构各有特点,推理库的开发思路也不同,需要对开发后端架构体系有一定的了解。具体到不同架构的编程学习,建议参考目前各大厂商的开源推理库进一步学习。
