一、写在前面
公司正好有这个需求,故我这边简单接受进行模型的部署和demo程序的编写,顺便学习了解整个大模型的部署全流程。这篇博客会简单提到大模型部署的全流程,侧重点在推理这里。并且这篇博客也是结合之前的MNN部署流程来编写的,最好连下来一起看。
MNN框架在WIN10上的部署
MNN框架在Win10上的部署,支持OpenGL和Vulkan
关于MNN工程框架编译出来的静态库和动态库的使用
二、 大模型部署全流程概述
几乎全部的大模型部署流程都是一样的步骤(好吧是我了解的是这样的)
- 训练
- 转换
- 推理
- 训练:根据需要实现的目标获取数据集,对数据集预处理,利用不同的框架进行训练(TensorFlow、PyTorch、PaddlePaddle、MNN等等)
主流推荐:TensorFlow、PyTorch、PaddlePaddle,因为推行时间长,技术成熟,训练出来的效果也较好。并且其他的框架也同样有转换工具可以将模型转换为适合自身框架的模型格式,所以应该不用太担心这方面的使用和操作。
训练基本步骤:
(1)数据收集:(收集足够多的目标模型的功能数据,用于模型训练)
(2)数据预处理;(清洗、数据归一化、数据增强等等)
(3)选择模型架构(根据问题的性质选择合适的机器学习算法或神经网络架构)
(4)选择优化算法(选择一个算法来调整模型的参数,如梯度下降、Adam等)
(5)配置训练参数(设置学习率、批大小(batch size)、迭代次数(epochs)等)
(6)模型验证(使用数据当中的验证集评估模型)
(7)模型评估
对于MNN框架来说,虽然官方也提供了训练的工具链,不过最好还是使用较为成熟的框架。
- 转换:将目标模型转换为适合自身部署框架的模型结构,一般来说框架官方会提供相应源码来帮助用户实现模型的转换
一般来说包含:模型压缩、量化、裁剪等等,用于减小模型体积、提高推理速度等等。在使用模型转换工具的时候,会有相应的参数可以进行配置。
对于MNN框架来说,同样提供了转换工具(MNNConvert),以供用于将其他框架训练的模型转换为.mnn后缀的模型文件。
- 推理:是模型对新输入数据做出预测的过程,也是对大模型的应用。需要多个不同流程来帮助模型实现快速且准确的响应。
主要流程囊括:
- 前处理
在模型进行推理之前,需要对输入数据进行处理,以确保数据格式和范围与模型训练时一致。这可能包括数据清洗、归一化、编码等步骤 - 推理核心
是模型实际进行预测的部分。根据模型类型,这可能涉及到前向传播、特征提取等操作 - 后处理
推理完成后,输出的结果可能需要进一步的处理才能用于实际应用。例如,分类模型的输出可能是概率分布,需要转换为具体的类别标签
三、机器学习模型部署推理流程实例
这里将以我实际进行的一个小项目来进行讲解。模型目标是实现图片上二维码位置的框选检测
- 模型训练:
这里我是直接拿模型来使用的,模型支持灰度图像、320X256大小的图片输入的检测。故在模型推理阶段需要对输入图像预处理,使其符合模型输入数据的要求。
模型名称为:AI_ROI_Dete_NCHW_1x1x320x256_V4.0.0.0.onnx
后续会将工程和模型发布在GitHub上。 - 模型转换
- 模型推理