许可证: mit
流水线标签: 文本生成
标签:
- ONNX
- DML
- ONNXRuntime
- phi3
- NLP
- 对话式
- 自定义代码
推理: false
Phi-3 Mini-128K-Instruct ONNX 模型
本仓库托管了 Phi-3-mini-128k-instruct 的优化版本,以加速 ONNX Runtime 的推理性能。
Phi-3 Mini 是一款轻量级、最先进的开源模型,基于 Phi-2 使用的数据集构建——包括合成数据和筛选后的网站数据——并专注于高质量、富含推理能力的数据。该模型属于 Phi-3 模型家族,迷你版本提供两种变体:4K 和 128K,分别表示其支持的上下文长度(以 token 计)。模型经过严格的增强流程,结合了监督微调和直接偏好优化,以确保精确的指令遵循和强大的安全措施。
优化后的 Phi-3 Mini 模型以 ONNX 格式发布,可在 ONNX Runtime 上运行,支持跨设备的 CPU 和 GPU,包括服务器平台、Windows、Linux 和 Mac 桌面设备,以及移动端 CPU,并为每个目标设备提供最适合的精度。
DirectML 支持让开发者能够为 Windows 设备带来跨 AMD、Intel 和 NVIDIA GPU 的硬件加速。结合 DirectML,ONNX Runtime 为 Phi-3 Mini 提供了跨平台支持,覆盖 CPU、GPU 和移动设备的多种设备。
要轻松开始使用 Phi-3,您可以使用我们新推出的 ONNX Runtime Generate() API。具体操作指南请参见此处。
ONNX 模型
我们添加了以下优化配置:
- int4 DML 的 ONNX 模型:适用于 Windows 上的 AMD、Intel 和 NVIDIA GPU,使用 AWQ 量化为 int4。
- fp16 CUDA 的 ONNX 模型:适用于 NVIDIA GPU 的 ONNX 模型。
- int4 CUDA 的 ONNX 模型:适用于 NVIDIA GPU,通过 RTN 量化为 int4。
- int4 CPU 和移动端的 ONNX 模型:适用于 CPU 和移动设备,通过 RTN 量化为 int4。上传了两个版本以平衡延迟与精度:
- Acc=1 针对更高的精度优化,而 Acc=4 针对更高的性能优化。对于移动设备,建议使用 acc-level-4 的模型。
更多关于 AMD 的更新以及 CPU 和移动端的额外优化将在 5 月初的官方 ORT 1.18 版本中发布。敬请期待!
支持的硬件
模型已在以下硬件上测试:
- GPU SKU:RTX 4090 (DirectML)
- GPU SKU:1 块 A100 80GB GPU,SKU: Standard_ND96amsr_A100_v4 (CUDA)
- CPU SKU:Standard F64s v2 (64 vCPUs, 128 GiB 内存)
- 移动端 SKU:三星 Galaxy S21
最低配置要求:
- Windows:支持 DirectX 12 的 GPU,至少 4GB 的共享内存
- CUDA:NVIDIA GPU,计算能力 >= 7.0
模型描述
- 开发者:Microsoft
- 模型类型:ONNX
- 支持的语言 (NLP):Python、C、C++
- 许可证:MIT
- 模型描述:这是为 ONNX Runtime 推理转换的 Phi-3 Mini-4K-Instruct 模型。
附加信息
如何开始使用模型
为了让 Phi-3 模型能够在多种设备和平台上运行,并支持不同的执行后端,我们引入了一个新的 API 来封装生成式 AI 推理的多个方面。该 API 使您能够轻松地将 LLM 直接集成到您的应用中。要运行这些模型的早期版本,请按照此处的步骤操作。
例如:
python model-qa.py -m /*{您的模型路径}*/onnx/cpu_and_mobile/phi-3-mini-4k-instruct-int4-cpu -k 40 -p 0.95 -t 0.8 -r 1.0
*输入:* <|user|>给我讲个笑话<|end|><|assistant|>
*输出:* 为什么科学家不相信原子?
因为它们构成了一切!
这个笑话利用了“构成”的双关含义。在科学中,原子是物质的基本组成部分,字面上“构成”了一切。但在口语中,“构成”也可以指编造或撒谎,因此产生了幽默效果。
性能指标
Phi-3 Mini-128K-Instruct 在 ONNX Runtime 中的表现优于 PyTorch,适用于所有批大小和提示长度的组合。对于 FP16 CUDA,ORT 的性能比 PyTorch 快达 5 倍,而对于 INT4 CUDA,性能比 PyTorch 快达 9 倍。
下表显示了在 1 块 A100 80GB GPU,SKU: Standard_ND96amsr_A100_v4 上测量的 FP16 和 INT4 精度下生成前 256 个 token 的平均吞吐量(tps)。
批大小, 提示长度 |
ORT FP16 CUDA |
PyTorch Eager FP16 CUDA |
FP16 CUDA 加速比 (ORT/PyTorch) |
1, 16 |
134.46 |
25.35 |
5.30 |
1, 64 |
132.21 |
25.69 |
5.15 |
1, 256 |
124.51 |
25.77 |
4.83 |
1, 1024 |
110.03 |
25.73 |
4.28 |
1, 2048 |
96.93 |
25.72 |
3.77 |
1, 4096 |
62.12 |
25.66 |
2.42 |
4, 16 |
521.10 |
101.31 |
5.14 |
4, 64 |
507.03 |
101.66 |
4.99 |
4, 256 |
459.47 |
101.15 |
4.54 |
4, 1024 |
343.60 |
101.09 |
3.40 |
4, 2048 |
264.81 |
100.78 |
2.63 |
4, 4096 |
158.00 |
77.98 |
2.03 |
16, 16 |
1689.08 |
394.19 |
4.28 |
16, 64 |
1567.13 |
394.29 |
3.97 |
16, 256 |
1232.10 |
405.30 |
3.04 |
16, 1024 |
680.61 |
294.79 |
2.31 |
16, 2048 |
350.77 |
203.02 |
1.73 |
16, 4096 |
192.36 |
OOM |
|
批大小, 提示长度 |
PyTorch Eager INT4 CUDA |
INT4 CUDA 加速比 (ORT/PyTorch) |
1, 16 |
25.35 |
8.89 |
1, 64 |
25.69 |
8.58 |
1, 256 |
25.77 |
7.69 |
1, 1024 |
25.73 |
6.34 |
1, 2048 |
25.72 |
5.24 |
1, 4096 |
25.66 |
2.97 |
4, 16 |
101.31 |
2.82 |
4, 64 |
101.66 |
2.77 |
4, 256 |
101.15 |
2.64 |
4, 1024 |
101.09 |
2.20 |
4, 2048 |
100.78 |
1.84 |
4, 4096 |
77.98 |
1.62 |
16, 16 |
394.19 |
2.52 |
16, 64 |
394.29 |
2.41 |
16, 256 |
405.30 |
2.00 |
16, 1024 |
294.79 |
1.79 |
16, 2048 |
203.02 |
1.81 |
16, 4096 |
OOM |
|
注意:PyTorch compile 和 Llama.cpp 目前不支持 Phi-3 Mini-128K-Instruct 模型。
软件包版本
Pip 包名称 |
版本 |
torch |
2.2.0 |
triton |
2.2.0 |
onnxruntime-gpu |
1.18.0 |
onnxruntime-genai |
0.2.0 |
onnxruntime-genai-cuda |
0.2.0 |
onnxruntime-genai-directml |
0.2.0 |
transformers |
4.39.0 |
bitsandbytes |
0.42.0 |
附录
激活感知量化
AWQ 通过识别对保持精度最重要的前 1% 权重并对剩余的 99% 权重进行量化来工作。与其他量化技术相比,这种方法减少了量化带来的精度损失。更多关于 AWQ 的信息,请参见此处。
模型卡片联系人
parinitarahi, kvaishnavi, natke
贡献者
Kunal Vaishnavi, Sunghoon Choi, Yufeng Li, Akshay Sonawane, Sheetal Arun Kadam, Rui Ren, Edward Chen, Scott McKay, Ryan Hill, Emma Ning, Natalie Kershaw, Parinita Rahi, Patrice Vignola, Chai Chaoweeraprasit, Logan Iyer, Vicente Rivera, Jacques Van Rhyn