ONNX Runtime 1.17:支持 CUDA 12、Phi-2 优化、WebGPU 等!
作者:
Sophie Schoenmeyer, Parinita Rahi, Kshama Pawar, Caroline Zhu, Chad Pralle, Emma Ning, Natalie Kershaw, Jian Chen2024年2月28日
最近,我们发布了 ONNX Runtime 1.17,其中包含一系列新功能,可进一步简化在各种平台上进行机器学习模型推理和训练的过程,速度比以往更快。此版本包括对某些现有功能的改进,以及一些令人兴奋的新功能,例如 Phi-2 优化、通过端侧训练在浏览器中训练模型、支持 WebGPU 的 ONNX Runtime Web 等。
有关新功能的完整列表以及各种资源,请查看 GitHub 上的 1.17 版本以及我们最近发布的 1.17.1 补丁版本。
模型优化
ONNX Runtime (ORT) 1.17 版本通过采用最先进的融合和内核优化,并支持 float16 和 int4 量化,为多个模型(例如 Phi-2、Mistral、CodeLlama、Google 的 Gemma、SDXL-Turbo 等)提供了改进的推理性能。此版本中添加的具体 ORT 优化包括:注意力机制(Attention)、多头注意力(Multi-Head Attention)、分组查询注意力(Grouped-Query Attention)和旋转位置编码(Rotary Embedding)的 ORT 内核更改。在提示词和词元(token)生成吞吐量方面,ORT 的表现优于 PyTorch、DeepSpeed 和 Llama.cpp 等其他框架,速度提升高达 20 倍。特别是,我们观察到 Phi-2 性能提升高达 20.5 倍、Orca-2 提升 16.0 倍、Gemma 提升 19.8 倍(有关每个模型的更多详细信息,请参阅下方链接的博客)。由于采用了特殊的 GemV 内核实现,带有 int4 量化的 ONNX Runtime 在批量大小(batch size)为 1 时性能最佳。总体而言,ONNX Runtime 在多种批量大小和提示词长度下都表现出显著的性能提升。
ONNX Runtime 在大语言模型(LLM)训练方面也显示出显著优势,并且这些收益通常会随着批量大小的增加而增加。例如,在 2 个 A100 GPU 上,对于采用 LoRA 的 Phi-2,ORT 比 PyTorch Eager 模式快 1.2 倍,比 torch.compile 快 1.5 倍。对于结合了 LoRA 或 QLoRA 的其他大语言模型(如 Llama、Mistral 和 Orca-2),ORT 也展现出了优势。
要详细了解如何使用 ONNX Runtime 1.17 提高生成式 AI 模型的性能,请查看我们最近在 ONNX Runtime 博客上发布的文章:使用 ONNX Runtime 加速 Phi-2、CodeLlama、Gemma 及其他生成式 AI 模型。

浏览器内训练
端侧训练允许您利用设备数据来改善开发者应用程序的用户体验。它支持诸如联邦学习之类的场景,即使用设备上的数据训练全局模型。随着 1.17 版本的发布,ORT 现在将支持通过端侧训练在浏览器中训练机器学习模型。
要详细了解如何通过端侧训练在浏览器中训练模型,请查看微软开源博客上的这篇最新文章:端侧训练:在浏览器中训练模型。
DirectML NPU 支持
随着 DirectML 1.13.1 和 ONNX Runtime 1.17 的发布,Windows 机器学习平台 API DirectML 现已提供对神经网络处理单元 (NPU) 加速的开发者预览版支持。此开发者预览版支持在配备英特尔® 酷睿™ Ultra 处理器和英特尔® AI boost 的全新 Windows 11 设备上运行一部分模型。
要详细了解 DirectML 中的 NPU 支持,请查看 Windows 开发者博客上的这篇最新文章:在 DirectML 中引入神经网络处理单元 (NPU) 支持(开发者预览版)。
ONNX Runtime Web 的 WebGPU 支持
WebGPU 使 Web 开发者能够利用 GPU 硬件进行高性能计算。ONNX Runtime 1.17 版本正式推出了 ONNX Runtime Web 中的 WebGPU 执行提供程序(execution provider),允许复杂的模型完全且高效地在浏览器内运行(请参阅 WebGPU 浏览器兼容性列表)。这一进展通过高效执行 SD-Turbo 等模型得到了证明,为基于 CPU 的浏览器内机器学习在满足性能标准方面面临挑战的场景开启了新的可能性。
要详细了解 ONNX Runtime Web 如何通过 WebGPU 进一步加速浏览器内机器学习,请查看微软开源博客上的这篇最新文章:ONNX Runtime Web 利用 WebGPU 在浏览器中释放生成式 AI 的潜能。
使用 ONNX Runtime Mobile 的 YOLOv8 姿态估计场景
此版本增加了对运行 YOLOv8 模型进行姿态估计的支持。姿态估计包括处理图像中检测到的物体,并识别图像中人物的位置和方向。核心的 YOLOv8 模型返回一组关键点,表示检测到的人体特定部位,例如关节和其他特征。在 ONNX 模型中包含前处理和后处理,使开发者能够直接提供常见图像格式或原始 RGB 值的输入图像,并输出带有边界框和关键点的图像。
To learn more about how to build and run ONNX models on mobile with built-in pre and post processing for object detection and pose estimation, check out our recent tutorial in the ONNX Runtime documentation: Object detection and pose estimation with YOLOv8.
CUDA 12 软件包
作为 1.17 版本的一部分,ONNX Runtime 现在通过为 Python 和 NuGet 引入 CUDA 12 软件包,确保了 Nvidia CUDA 执行提供程序多个版本之间的兼容性。借助这种更灵活的方法,用户现在可以同时使用 CUDA 11 和 CUDA 12,从而更无缝地集成尖端的硬件加速技术。
要为 ONNX Runtime GPU 安装 CUDA 12,请参考 ONNX Runtime 文档中的说明:安装 ONNX Runtime GPU (CUDA 12.X)。