ONNX Runtime 支持跨平台和设备的 Phi-3 mini 模型
2024年4月22日
借助 ONNX Runtime 和 DirectML,您现在可以在范围广泛的设备和平台上运行微软最新自主研发的 Phi-3 模型。今天,我们很自豪地宣布在第一天(day 1)就对 Phi-3 的两个版本提供支持,即 phi3-mini-4k-instruct 和 phi3-mini-128k-instruct。优化后的 ONNX 模型可在 phi3-mini-4k-instruct-onnx 和 phi3-mini-128k-instruct-onnx 获取。
许多语言模型由于体量太大,无法在大多数设备上本地运行,但 Phi-3 是这一规则的一个重要例外:这套“小而强大”的模型实现了与体量大其 10 倍的模型相媲美的性能!Phi-3 Mini 也是其权重级别中第一个支持高达 128K token 长上下文的模型。要深入了解微软的战略数据管理和创新扩展是如何取得这些显著成果的,请参阅此处。
您可以使用我们新推出的 ONNX Runtime Generate() API 轻松上手 Phi-3,详情请参见此处!
DirectML 和 ONNX Runtime 在 Windows 上扩展 Phi-3 Mini
就其本身而言,Phi-3 已经足够小,可以在许多 Windows 设备上运行,但为什么止步于此呢?通过量化使 Phi-3 更小将极大地扩展该模型在 Windows 上的覆盖范围,但并非所有量化技术都是生而平等的。我们希望在确保可扩展性的同时,也能保持模型的准确性。
使用激活感知量化(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!
我们正在与硬件供应商合作伙伴合作,在未来几周内提供进一步提升性能的驱动程序更新。
请参阅下文了解具体的性能数据。
面向移动端的 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。对于所有批次大小(batch size)和提示长度(prompt length)的组合,Phi-3 Mini-128K-Instruct 在带 CUDA 的 ONNX Runtime 上的表现均优于 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 的其他优化信息。
性能指标
DirectML
DirectML 不仅能让开发人员获得出色的性能,还能在得到 AMD、Intel 和 NVIDIA 支持的整个 Windows 生态系统中部署模型。最棒的是,AWQ 意味着开发人员在获得这种规模的同时,还能保持较高的模型准确性。
感谢我们的硬件合作伙伴提供的优化驱动程序以及 ONNX Generate() API 的进一步更新,敬请期待未来几周内更多的性能提升。
| 提示长度 | 生成长度 | Wall Clock tokens/s |
|---|---|---|
| 16 | 256 | 266.65 |
| 16 | 512 | 251.63 |
| 16 | 1024 | 238.87 |
| 16 | 2048 | 217.5 |
| 32 | 256 | 278.53 |
| 32 | 512 | 259.73 |
| 32 | 1024 | 241.72 |
| 32 | 2048 | 219.3 |
| 64 | 256 | 308.26 |
| 64 | 512 | 272.47 |
| 64 | 1024 | 245.67 |
| 64 | 2048 | 220.55 |
CUDA
下表显示了 Phi-3 Mini 128K Instruct ONNX 模型前 256 个生成 token 的平均吞吐量(tps)的提升情况。比较对象为 CUDA 上的 FP16 和 INT4 精度,在 1 个 A100 80GB GPU(SKU: Standard_ND96amsr_A100_v4)上测得。
注:PyTorch Compile 和 Llama.cpp 目前不支持 Phi-3 Mini 128K instruct 模型。下表显示了 Phi-3 Mini 4K Instruct ONNX 模型前 256 个生成 token 的平均吞吐量(tps)的提升情况。比较对象为 CUDA 上的 FP16 和 INT4 精度,在 1 个 A100 80GB GPU(SKU: Standard_ND96amsr_A100_v4)上测得。

CPU 及其他设备的性能也得到了提升。
安全性
安全指标和 RAI 与基础 Phi-3 模型保持一致。有关更多详情,请参阅此处。
试用面向 Phi3 的 ONNX Runtime
本博客文章介绍了 ONNX Runtime 和 DirectML 如何优化 Phi-3 模型。我们提供了在 Windows 和其他平台上运行 Phi-3 的说明,以及早期基准测试结果。进一步的改进和性能优化正在进行中,敬请期待 5 月初发布的 ONNX Runtime 1.18 版本!
我们鼓励您试用 Phi-3,并在 ONNX Runtime GitHub 仓库中分享您的反馈!