
在上一篇文章《用 Microsoft Olive 微调 SLM》中,我们通过 Microsoft Olive 整合了全部 SLMOps 流程。开发团队可以通过 Olive.config 对数据、微调、格式转换、部署等一切进行配置。在这一篇文章中,我将从模型引用和模型评估两个维度进行进一步研究。

01
在 Olive.config 中将微调后的模型转换为 ONNX。我们希望模型能以统一的格式部署在不同的边缘设备上,通过简单的部署获得一致的开发体验,从而扩大模型的可用性。
了解 ONNX 和 ONNX Runtime
ONNX
Open Neural Network Exchange (ONNX)是一个开放的生态系统,专为机器学习设计,用于存储训练好的模型。它允许不同的人工智能框架(如 Pytorch、MXNet)以相同的格式存储模型数据,并进行不同的交互。ONNX 模型具有很强的通用性和可扩展性,开发人员可以轻松地将 PyTorch 训练的模型转换为 ONNX。ONNX 提供了统一的模型格式标准,降低了部署和维护的门槛。
ONNX 在硬件兼容性和部署场景方面都有很好的支持。经过优化的模型允许我们部署到云端、边缘设备以及嵌入式设备中。这也恰好满足了将小语言模型部署到不同设备的要求。
ONNX Runtime
ONNX Runtime 是微软维护的推理框架,可与 ONNX (.onnx) 文件结合直接执行模型推理。您可以将 ONNX Runtime 与不同的编程语言相结合实现模型推理,此外,它还支持不同的硬件加速环境,其中包括 CPU Nvidia CUDA Nvidia TensorRT Intel OpenVINO AMD RoCm 等。
模型精度
在部署和引用模型时,我们需要考虑精度问题,因为我们需要根据模型的使用场景进行权衡。目前常用的精度包括半精度 FP16、单精度 FP32 和量化精度 INT 4。因为大语言模型/小语言模型训练中可能需要精度保障,我们一般使用 FP32 的单精度计算。在推理场景中,一般使用半精度 FP16,这样可以节省更多的 GPU 计算能力,并获得相同的结果。当然,如果想进一步降低 GPU 的消耗,也可以使用 INT4 进行量化。在 Microsoft Olive 配置上,我们可以轻松地将微调后的模型进行转换。以下是微调后模型的精度转换过程。
"convert": {"type": "OnnxConversion","config": {"use_dynamo_exporter": true,"torch_dtype": "float32","target_opset": 18,"save_as_external_data": true,"all_tensors_to_one_file": true}},"optimize_cuda": {"type": "OrtTransformersOptimization","config": {"model_type": "phi","use_gpu": true,"keep_io_types": false,"num_heads": 32,"hidden_size": 2560,"opt_level": 0,"optimization_options": {"attention_op_type": "GroupQueryAttention"},"save_as_external_data": true,"all_tensors_to_one_file": true,"float16": true}},"blockwise_quant_int4": {"type": "OnnxMatMul4Quantizer","config": {"save_as_external_data": true,"all_tensors_to_one_file": true,"block_size": 16,"is_symmetric": true}}
运行
现在我尝试运行它,可以看到在 FP16 和 INT 4 的精度下都可以得到⼀致的结果。

02
我们已经完成了对模型的引用。此时,我们需要考虑一个更深层次的问题,即如何对模型进行评估。对于大语言模型/小语言模型,我们有一个非常完整的提示流开源工具。不仅可以结合提示词查看模型在解决问题过程中的实际结果,还可以评估模型的执行时间和不同硬件之间的性能。而且这个工具不仅支持 Azure,还可以在本地实现。这在不同硬件的模型评估方面也非常有效。
以下是我在 Microsoft Azure 中使用 Notebook 调用并运行提示流评估微调后的实施情况:

03
在人工智能 2.0 的加持下,我们不仅要追求应用层面,还要关注使用场景和模式的可用性。此时,更多的边缘设备需要兼容。微软 Olive 和 ONNX 模型的整合将是非常重要的一步。感谢您关注本系列,也欢迎在下方评论区与我留言交流。
# 更多资源
⇲ 了解更多 ONNX
https://onnx.ai/
⇲ 了解更多 ONNX Runtime
https://onnxruntime.ai/
⇲ 了解提示流
https://github.com/microsoft/promptflow
# 关联阅读
🔗点击标题即可阅读
本文作者|卢建晖
微软高级云技术布道师






