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


2024年4月22日

得益于 ONNX Runtime 和 DirectML,您现在可以在广泛的设备和平台上运行 Microsoft 最新的自家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 令牌长上下文的模型。要了解更多关于 Microsoft 如何通过战略性数据整理和创新扩展实现这些卓越成果的信息,请参阅此处

您可以使用我们新推出的 ONNX Runtime Generate() API 轻松开始使用 Phi-3,该 API 位于此处

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

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

使用激活感知量化 (AWQ) 量化 Phi-3 Mini 让我们能够从量化中获得内存节省,同时对精度影响最小。AWQ 通过识别保持模型精度所需的最高 1% 显着权重,并量化其余 99% 的权重来实现这一点。这导致使用 AWQ 进行量化时,精度损失比许多其他量化技术要小得多。有关 AWQ 的更多信息,请参阅此处

无论您的 GPU 是 AMD、Intel 还是 NVIDIA,只要支持 DirectX 12,都可以在 Windows 上运行 DirectML。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。对于所有批处理大小、提示长度组合,ONNX Runtime 与 CUDA 运行 Phi-3 Mini-128K-Instruct 的性能优于 PyTorch。

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

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

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

尝试 ONNX Runtime Generate() API

我们很高兴地宣布推出新的 Generate() API,该 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 上,ONNX Runtime + DirectML 运行通过 AWQ 量化且块大小为 128 的 Phi-3 Mini(4k 序列长度)的性能。我们的测试机器配备了 NVIDIA GeForce RTX 4090 GPU 和 Intel Core i9-13900K CPU。如表中所示,即使在较长的提示和生成长度下,DirectML 也能提供高令牌吞吐量。

DirectML 不仅能让开发人员实现出色的性能,还能在 AMD、Intel 和 NVIDIA 的支持下,将模型部署到整个 Windows 生态系统。最棒的是,AWQ 意味着开发人员在获得这种规模的同时,还能保持高模型精度。

敬请期待未来几周的更多性能改进,这得益于我们的硬件合作伙伴优化的驱动程序以及 ONNX Generate() API 的额外更新。
结果以批次大小 = 1 计算
提示长度生成长度实际每秒令牌数
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 个令牌的平均吞吐量(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 个令牌的平均吞吐量(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 模型保持一致。有关更多详情,请参阅此处

为 Phi3 尝试 ONNX Runtime

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

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