ONNX Runtime 1.17:支持 CUDA 12、Phi-2 优化、WebGPU 及更多功能!

作者

Sophie Schoenmeyer, Parinita Rahi, Kshama Pawar, Caroline Zhu, Chad Pralle, Emma Ning, Natalie Kershaw, Jian Chen

2024 年 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-2MistralCodeLlamaGoogle 的 GemmaSDXL-Turbo 等。此版本新增的 ORT 具体优化包括 Attention、Multi-Head Attention、Grouped-Query Attention 和 Rotary Embedding ORT 内核更改。ORT 在提示和 token 生成吞吐量方面优于 PyTorch、DeepSpeed 和 Llama.cpp 等其他框架,加速比高达 20 倍。特别是,我们观察到以下模型的性能提升:Phi-2 高达 20.5 倍Orca-2 高达 16.0 倍Gemma 高达 19.8 倍(有关每个模型的更多详细信息,请参阅下面链接的博客)。带有 int4 量化的 ONNX Runtime 在批量大小为 1 时表现最佳,这得益于特殊的 GemV 内核实现。总体而言,ONNX Runtime 在多种批量大小和提示长度下均表现出显著的性能提升。

ONNX Runtime 在训练大型语言模型 (LLM) 方面也展现出显著优势,且这些优势通常随批量大小的增加而提高。例如,在 2 个 A100 GPU 上使用 LoRA 训练 Phi-2 时,ORT 比 PyTorch Eager 模式快 1.2 倍,比 torch.compile 快 1.5 倍。ORT 对于其他 LLM(如 Llama、Mistral 和 Orca-2)结合 LoRA 或 QLoRA 的训练也显示出优势。

要详细了解如何使用 ONNX Runtime 1.17 提高生成式 AI 模型的性能,请查看我们在 ONNX Runtime 博客上最近发布的文章:使用 ONNX Runtime 加速 Phi-2、CodeLlama、Gemma 及其他生成式 AI 模型

Phi-2 int4 token generation throughput comparison Orca-2 int4 token generation throughput comparison CodeLlama int4 token generation throughput comparison Gemma int4 token generation throughput comparison

浏览器内训练

设备端训练允许您利用设备数据改进开发者应用程序的用户体验。它支持诸如联邦学习等场景,联邦学习利用设备上的数据训练全局模型。通过 1.17 版本,ORT 现在将支持在浏览器中使用设备端训练来训练机器学习模型。

要详细了解如何在浏览器中进行设备端模型训练,请查看 Microsoft 开源博客上最近发布的这篇文章:设备端训练:在浏览器中训练模型

Diagram of the components of the onnxruntime-web JS package

DirectML NPU 支持

随着 DirectML 1.13.1 和 ONNX Runtime 1.17 版本的发布,DirectML(Windows 机器学习平台 API)现在提供神经处理单元 (NPU) 加速的开发者预览支持。此开发者预览版支持在配备 Intel® AI Boost 的英特尔®酷睿™Ultra 处理器的新款 Windows 11 设备上运行部分模型。

要详细了解 DirectML 中的 NPU 支持,请查看 Windows 开发者博客上最近发布的这篇文章:DirectML 中的神经处理单元 (NPU) 支持介绍(开发者预览版)

结合 WebGPU 的 ONNX Runtime Web

WebGPU 使 Web 开发者能够利用 GPU 硬件进行高性能计算。ONNX Runtime 1.17 版本正式推出了 ONNX Runtime Web 中的 WebGPU 执行提供程序,使得复杂的模型可以在浏览器中完全且高效地运行(请参阅 WebGPU 浏览器兼容性列表)。这项由 SD-Turbo 等模型的有效执行所证明的进步,在基于 CPU 的浏览器内机器学习难以满足性能标准的场景中,开辟了新的可能性。

要详细了解 ONNX Runtime Web 如何利用 WebGPU 进一步加速浏览器内机器学习,请查看 Microsoft 开源博客上最近发布的文章:ONNX Runtime Web 利用 WebGPU 在浏览器中释放生成式 AI 的强大能力

ONNX Runtime Mobile 中的 YOLOv8 姿态估计场景

此版本新增了对运行 YOLOv8 模型进行姿态估计的支持。姿态估计包括处理图像中检测到的对象并识别人在图像中的位置和方向。核心 YOLOv8 模型返回一组关键点,代表检测到的人体特定部位,例如关节和其他显著特征。将预处理和后处理包含在 ONNX 模型中,开发者可以直接提供输入图像(无论是常见图像格式还是原始 RGB 值),并输出带有边界框和关键点的图像。

要详细了解如何在移动设备上构建和运行带有内置对象检测和姿态估计预处理和后处理的 ONNX 模型,请查看 ONNX Runtime 文档中我们最近发布的教程:使用 YOLOv8 进行对象检测和姿态估计

Person with pose drawn

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)