暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面向 AI 2.0 的应用架构之旅Vol.03 ‣ 模型引用和评估模型

Azure云科技 2024-03-28
146


在上一篇文章《用 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 


    # 关联阅读

    🔗点击标题即可阅读

    [1]  面向 AI 2.0 的应用架构之旅Vol.01 ‣ 基础篇

    [2]  面向 AI 2.0 的应用架构之旅Vol.02‣ 用 Microsoft Olive 微调 SLM





    本文作者|卢建晖

    微软高级云技术布道师 


    文章转载自Azure云科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论