MegEngine 模型推理部署教程

Warning

这套教程正处于缓慢发布状态,你看到的非最终成品,欢迎参与讨论改进。

适用人群 & 前置知识要求

本套教程适合那些想要知道 “如何将深度学习模型部署到生产环境中” 的开发者:

  • 也许你刚学习完 《 MegEngine Deep Learning Getting Started Tutorial 》,已经能够开发出一些简单的模型了, 但对如何将模型部署到不同的平台和设备十分好奇,想要尝试一些具体的实践,这套教程将带你入门;

  • 如果你完全不关注模型开发的过程和细节,希望故事从已经拿到一个训练好的模型开始讲起。 不妨先试试看阅读用户指南中的 Model Deployment Overview and Process Recommendations 并进行实践,感到吃力的话再来阅读本系列教程。

你需要具备一定的 Python 开发经验,进阶主题中我们将会用到 C++ 与源码编译,以追求极致的性能。

内容安排与组织

这套 MegEngine 模型推理部署教程由多个章节组成:

在用户指南的 Model Deployment Overview and Process Recommendations 页面中,对常见情况进行了总结,并给出了最佳实践。 而本套教程将从最原始的情况 —— 即使用与模型训练完全一致环境的,向你演示模型部署的最简概念与形式。 接着与你一同去思考在生产情景下需要考虑的成本和效率问题,从而接触到不同的推理部署情景,并进行实战。

在此之前,如果你还不熟悉 MLOps 的整个流程,建议阅读下一小节的有关介绍:

真实世界的机器学习系统

ML Ops: Machine Learning Operations

在 Google 发布的《Hidden Technical Debt in Machine Learning Systems 1 》 论文中指出,机器学习的代码在整个机器学习项目中可能只是很小的一块比例(下图黑色块部分) ——

../../_images/real-world-ml-system.png

Only a small fraction of real-world ML systems is composed of the ML code, as shown by the small black box in the middle. The required surrounding infrastructure is vast and complex.

如果你已经成功地开发出一个机器学习模型 —— 给定输入 \(\mathcal{X}\), 能够如期预测输出 \(\mathcal{Y}\). 我们将这一步称为是模型开发中的概念验证(Proof of concept, POC). 但想要将训练完成的模型落地成生产环境中可用的项目,我们还需要经历其它的一些步骤。 实际上,一个完整的机器学习项目的生命周期将类似于:

flowchart LR Scoping --> Data --> Modeling --> Deployment

MLOps 基本环节:选定范围、数据获取与处理、模型开发、部署应用

  1. 选定范围:确定项目类型、关键的几个指标(精度、延迟、带宽等等)、预估资源量与排期…

  2. 数据:定义数据形式,建立相关的 Baseline, 采集和标注数据等等相关处理…

  3. 模型开发:设计出合适的模型结构、调整超参数、在给定数据集上训练并达标…

  4. 部署应用:在生产环境中部署模型进行推理,对指标进行监控,进行长期的维护…

通常整个流程不是线性的,而是会在各个环节之间根据结果循环进行调整,以整体达到更好的效果。

See also

../../_images/ml-iteration.png

模型部署与模型开发的过程类似,需要在流程中不断迭代调优。

Deeplearning.ai 团队的 《 Machine Learning Engineering for Production 》 课程对 MLOps 有着更加详细的解释和案例分析,本系列教程将基于 MegEngine, 专注向你展示部署(Deployment)的基本流程。

参考文献

1

David Sculley, Gary Holt, Daniel Golovin, Eugene Davydov, Todd Phillips, Dietmar Ebner, Vinay Chaudhary, Michael Young, Jean-Francois Crespo, and Dan Dennison. Hidden technical debt in machine learning systems. Advances in neural information processing systems, 2015.