ONNX Runtime 支持跨平台和设备的 Phi-3 mini 模型


2024 年 4 月 22 日

借助 ONNX Runtime 和 DirectML,您现在可以在各种设备和平台上运行微软最新的自研 Phi-3 模型。今天,我们很自豪地宣布对 Phi-3 的两种版本提供首日支持,分别是 phi3-mini-4k-instructphi3-mini-128k-instruct。优化的 ONNX 模型可在 phi3-mini-4k-instruct-onnxphi3-mini-128k-instruct-onnx 获取。

许多语言模型都过于庞大,无法在大多数设备上本地运行,但 Phi-3 代表了这一规则的一个显著例外:这套小型但功能强大的模型实现了与比它大 10 倍的模型相媲美的性能!Phi-3 Mini 也是同等规模模型中首个支持高达 128K tokens 长上下文的模型。要了解更多关于微软的战略数据管理和创新扩展如何实现这些卓越成果的信息,请参阅此处

通过我们新推出的 ONNX 运行时 Generate() API,您可以轻松开始使用 Phi-3,此处 提供了相关信息!

DirectML 和 ONNX Runtime 在 Windows 上扩展 Phi-3 Mini

Phi-3 本身已经足够小,可以在许多 Windows 设备上运行,但为什么止步于此呢?通过量化使 Phi-3 变得更小将大大扩展模型在 Windows 上的应用范围,但并非所有量化技术都是相同的。我们希望确保可扩展性的同时,也保持模型的准确性。

激活感知量化 (Activation-Aware Quantization, AWQ) 量化 Phi-3 Mini 使我们能够从量化中获得内存节省,而对准确性的影响极小。AWQ 通过识别对于保持模型准确性至关重要的前 1% 的显著权重,并量化剩余 99% 的权重来实现这一点。与许多其他量化技术相比,AWQ 带来的准确性损失要小得多。有关 AWQ 的更多信息,请参阅此处

Windows 上每个支持 DirectX 12 的 GPU 都可以运行 DirectML,无论它是 AMD、Intel 还是 NVIDIA GPU。DirectML 和 ONNX Runtime 现在支持 INT4 AWQ,这意味着开发人员现在可以在数亿台 Windows 设备上运行和部署此量化版本的 Phi-3!

我们正在与我们的硬件供应商合作伙伴合作,以提供驱动程序更新,这将进一步提高未来几周的性能。参加我们在五月下旬的 Build 大会演讲,了解更多信息!

请参阅下文了解专门的性能数据。

用于移动设备的 ONNX Runtime

除了在 Windows 上支持两种 Phi-3 Mini 模型外,ONNX Runtime 还可以帮助在包括移动设备和 Mac CPU 在内的其他客户端设备上运行这些模型,使其成为真正的跨平台框架。ONNX Runtime 还支持 RTN 等量化技术,使这些模型能够在许多不同类型的硬件上运行。

ONNX Runtime Mobile 使开发人员能够在移动和边缘设备上使用 AI 模型执行设备端推理。通过消除客户端-服务器通信,ORT Mobile 提供了隐私保护并且零成本。使用 RTN INT4 量化,我们显著减小了最先进的 Phi-3 Mini 模型的大小,并且可以在三星 Galaxy S21 上以适中的速度运行这两种模型。当应用 RTN INT4 量化时,INT4 精度级别有一个调整参数。此参数指定了 int4 量化中 MatMul 激活所需的最低精度级别,从而平衡了性能和准确性之间的权衡。已发布两个版本的 RTN 量化模型,其中 int4_accuracy_level=1 版本针对准确性进行了优化,而 int4_accuracy_level=4 版本针对性能进行了优化。如果您希望获得更好的性能,并略微牺牲一些准确性,我们建议使用 int4_accuracy_level=4 的模型。

用于服务器场景的 ONNX Runtime

对于 Linux 开发人员以及其他用户,带有 CUDA 的 ONNX Runtime 是一个很好的解决方案,它支持各种 NVIDIA GPU,包括消费级和数据中心 GPU。对于所有批处理大小、提示长度组合,带有 CUDA 的 ONNX Runtime 的 Phi-3 Mini-128K-Instruct 性能优于 PyTorch。

对于 FP16 CUDA 和 INT4 CUDA,带有 ORT 的 Phi-3 Mini-128K-Instruct 的性能分别比 PyTorch 快高达 5 倍和 9 倍。Llama.cpp 当前不支持 Phi-3 Mini-128K-Instruct。

对于 FP16 和 INT4 CUDA,带有 ORT 的 Phi-3 Mini-4K-Instruct 的性能分别比 PyTorch 快高达 5 倍和 10 倍。对于长序列长度,Phi-3 Mini-4K-Instruct 也比 Llama.cpp 快高达 3 倍。

无论是 Windows、Linux、Android 还是 Mac,都有使用 ONNX Runtime 高效推理模型的途径!

试用 ONNX Runtime Generate() API

我们很高兴地宣布推出新的 Generate() API,它通过封装生成式 AI 推理的多个方面,使跨各种设备、平台和 EP 后端运行 Phi-3 模型变得更加容易。Generate() API 可以轻松地将 LLM 直接拖放到您的应用程序中。要使用 ONNX 运行这些模型的早期版本,请按照此处的步骤操作。

示例


python model-qa.py -m /YourModelPath/onnx/cpu_and_mobile/phi-3-mini-4k-instruct-int4-cpu -k 40 -p 0.95 -t 0.8 -r 1.0

Input: <user> Tell me a joke <end>

Output: <assistant> Why don't scientists trust atoms?

Because they make up everything!

This joke plays on the double meaning of "make up." In science, atoms are the fundamental building blocks of matter,
literally making up everything. However, in a colloquial sense, "to make up" can mean to fabricate or lie, hence the humor. <end>

请关注此空间以获取有关 AMD 的更多更新,以及使用 ORT 1.18 进行的额外优化。此外,请查看我们在五月下旬的 Build 大会演讲,以了解有关此 API 的更多信息!

性能指标

DirectML

我们测量了在 Windows 上使用 AWQ 量化且块大小为 128 的 Phi-3 Mini (4k 序列长度) 的 ONNX Runtime + DirectML 性能。我们的测试机器配备了 NVIDIA GeForce RTX 4090 GPU 和 Intel Core i9-13900K CPU。如表中所示,即使在更长的提示和生成长度下,DirectML 也提供了高 token 吞吐量。

DirectML 使开发人员不仅可以获得出色的性能,还可以在整个 Windows 生态系统中部署模型,并获得 AMD、Intel 和 NVIDIA 的支持。最重要的是,AWQ 意味着开发人员可以在获得这种规模的同时,还能保持高模型准确性。

请继续关注未来几周内来自我们的硬件合作伙伴的优化驱动程序以及 ONNX Generate() API 的其他更新带来的额外性能改进。
结果计算时批处理大小 = 1
提示长度生成长度实际 tokens/秒
16256266.65
16512251.63
161024238.87
162048217.5
32256278.53
32512259.73
321024241.72
322048219.3
64256308.26
64512272.47
641024245.67
642048220.55

CUDA

下表显示了 Phi-3 Mini 128K Instruct ONNX 模型生成的首批 256 个 tokens 的平均吞吐量 (tps) 的改进。比较是在 CUDA 上的 FP16 和 INT4 精度下进行的,测量在一块 A100 80GB GPU 上进行 (SKU: Standard_ND96amsr_A100_v4)。

Phi-3 Mini 128K Instruct ONNX 模型的平均吞吐量。 注意:PyTorch Compile 和 Llama.cpp 当前不支持 Phi-3 Mini 128K instruct 模型。

下表显示了 Phi-3 Mini 4K Instruct ONNX 模型生成的首批 256 个 tokens 的平均吞吐量 (tps) 的改进。比较是在 CUDA 上的 FP16 和 INT4 精度下进行的,测量在一块 A100 80GB GPU 上进行 (SKU: Standard_ND96amsr_A100_v4)。

Average throughput of int4 Phi-3 Mini 4K Instruct ONNX model. Average throughput of fp16 Phi-3 Mini 4K Instruct ONNX model.
Pip 包:torch 2.2.0, triton 2.2.0, onnxruntime-gpu1.18.0, transformers 4.39.0, bitsandbytes 0.42.0

CPU 和其他设备的性能也得到了提升。

安全性

安全指标和 RAI 与基础 Phi-3 模型一致。有关更多详细信息,请参阅此处

试用 ONNX Runtime for Phi3

这篇博文介绍了 ONNX Runtime 和 DirectML 如何优化 Phi-3 模型。我们包含了在 Windows 和其他平台上运行 Phi-3 的说明,以及早期的基准测试结果。更多的改进和性能优化正在进行中,敬请关注 5 月初发布的 ONNX Runtime 1.18 版本

我们鼓励您试用 Phi-3,并在 ONNX Runtime GitHub 仓库中分享您的反馈!