模型简介
模型特点
模型能力
使用案例
🚀 Phi-3 Mini-4K-Instruct ONNX模型
本仓库托管了 Phi-3-mini-4k-instruct 的优化版本,旨在通过ONNX Runtime加速推理。
Phi-3 Mini是一款轻量级、最先进的开源模型,它基于Phi-2使用的数据集构建,包括合成数据和经过筛选的网站数据,特别注重高质量、富含推理的数据。该模型属于Phi-3模型家族,其mini版本有两种变体:4K和128K,代表其可以支持的上下文长度(以token为单位)。该模型经过了严格的增强过程,结合了监督微调(supervised fine-tuning)和直接偏好优化(direct preference optimization),以确保精确遵循指令并具备强大的安全措施。
优化后的Phi-3 Mini模型以 ONNX 格式发布,可通过 ONNX Runtime 在CPU和GPU上跨设备运行,包括服务器平台、Windows、Linux和Mac桌面,以及移动CPU,并针对每个目标采用最合适的精度。
DirectML 支持让开发者能够在AMD、Intel和NVIDIA GPU的Windows设备上大规模实现硬件加速。除了DirectML,ONNX Runtime还为Phi-3 Mini在一系列CPU、GPU和移动设备上提供跨平台支持。
要轻松开始使用Phi-3,你可以使用我们新推出的ONNX Runtime Generate() API。有关如何运行它的说明,请参阅 此处。
🚀 快速开始
为了使Phi-3模型能够在各种设备和平台上的不同执行提供程序后端上运行,我们引入了一个新的API,用于封装生成式AI推理的多个方面。这个API让你可以轻松地将大语言模型(LLMs)集成到你的应用程序中。要使用ONNX Runtime运行这些模型的早期版本,请按照 此处 的步骤操作。
例如:
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
*输入:* <|user|>Tell me a joke<|end|><|assistant|>
*输出:* Why don't scientists trust atoms?
Because they make up everything!
这个笑话利用了 “make up” 的双重含义。在科学领域,原子是物质的基本组成部分,确实构成了一切。然而,在口语中,“to make up” 可以表示编造或说谎,因此产生了幽默效果。
✨ 主要特性
- 提供多种优化配置的ONNX模型,支持不同的硬件和精度需求。
- 支持DirectML,可在Windows设备上实现硬件加速。
- 引入新的ONNX Runtime Generate() API,方便模型的集成和使用。
📦 安装指南
文档未提及具体安装步骤,可参考 ONNX Runtime官方文档 进行安装。
💻 使用示例
基础用法
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
*输入:* <|user|>Tell me a joke<|end|><|assistant|>
*输出:* Why don't scientists trust atoms?
Because they make up everything!
这个笑话利用了 “make up” 的双重含义。在科学领域,原子是物质的基本组成部分,确实构成了一切。然而,在口语中,“to make up” 可以表示编造或说谎,因此产生了幽默效果。
📚 详细文档
ONNX模型
以下是我们添加的一些优化配置:
- int4 DML的ONNX模型:适用于Windows上的AMD、Intel和NVIDIA GPU的ONNX模型,使用 AWQ 量化为int4。
- fp16 CUDA的ONNX模型:可用于运行NVIDIA GPU的ONNX模型。
- int4 CUDA的ONNX模型:通过RTN使用int4量化的NVIDIA GPU的ONNX模型。
- int4 CPU和移动设备的ONNX模型:通过RTN使用int4量化的CPU和移动设备的ONNX模型。上传了两个版本以平衡延迟和准确性。Acc=1 旨在提高准确性,而Acc=4 则用于提高性能。对于移动设备,我们建议使用acc-level-4的模型。
随着5月初官方ORT 1.18版本的发布,将添加更多关于AMD的更新,以及对CPU和移动设备的额外优化。请继续关注!
支持的硬件
这些模型在以下设备上进行了测试:
- 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:Samsung Galaxy S21
所需的最低配置:
- Windows:支持DirectX 12的GPU,以及至少4GB的组合RAM
- CUDA:具有 计算能力 >= 7.0的NVIDIA GPU
模型描述
属性 | 详情 |
---|---|
开发者 | Microsoft |
模型类型 | ONNX |
语言 (NLP) | Python, C, C++ |
许可证 | MIT |
模型描述 | 这是Phi-3 Mini-4K-Instruct模型为ONNX Runtime推理进行的转换版本。 |
附加详情
性能指标
Windows上的DirectML
我们使用通过激活感知量化(AWQ)量化的Phi-3 Mini,测量了DirectML和ONNX Runtime的新Generate() API的性能,测试机器配备了NVIDIA GeForce RTX 4090 GPU和Intel Core i9-13900K CPU。DirectML不仅让开发者能够实现出色的性能,还能让开发者在AMD、Intel和NVIDIA支持的整个Windows生态系统中部署模型。最重要的是,AWQ意味着开发者在实现大规模部署的同时,还能保持较高的模型准确性。
由于我们硬件合作伙伴的优化驱动程序,以及ONNX Runtime Generate() API的额外更新,未来几周内性能还将进一步提升,请持续关注!
批次大小, 提示长度 | 生成长度 | 实际吞吐量 (tps) |
---|---|---|
1, 16 | 256 | 266.65 |
1, 16 | 512 | 251.63 |
1, 16 | 1024 | 238.87 |
1, 16 | 2048 | 217.5 |
1, 32 | 256 | 278.53 |
1, 32 | 512 | 259.73 |
1, 32 | 1024 | 241.72 |
1, 32 | 2048 | 219.3 |
1, 64 | 256 | 308.26 |
1, 64 | 512 | 272.47 |
1, 64 | 1024 | 245.67 |
CUDA
在所有批次大小和提示长度组合下,Phi-3 Mini-4K-Instruct在ONNX Runtime中的性能都优于PyTorch。对于FP16 CUDA,ORT的速度比PyTorch快达5倍,而对于INT4 CUDA,速度比PyTorch快达10倍。在大批次大小下,它也比Llama.cpp快达3倍。
下表显示了在 1 A100 80GB GPU, SKU: Standard_ND96amsr_A100_v4 上测量的CUDA上FP16和INT4精度下生成的前256个token的平均吞吐量(tps)。
批次大小, 提示长度 | ORT FP16 CUDA | PyTorch Compile FP16 CUDA | Llama.cpp | ORT/PyTorch加速比 | ORT/Llama.cpp加速比 |
---|---|---|---|---|---|
1, 16 | 124.74 | 23.95 | 109.47 | 5.21 | 1.14 |
1, 64 | 123.38 | 26.66 | 110.26 | 4.63 | 1.12 |
1, 256 | 116.17 | 29.66 | 109.42 | 3.92 | 1.06 |
1, 1024 | 103.27 | 29.67 | 105.60 | 3.48 | 0.98 |
1, 2048 | 92.11 | 27.74 | 102.00 | 3.32 | 0.90 |
1, 4096 | 83.24 | 27.71 | 95.17 | 3.00 | 0.87 |
4, 16 | 507.16 | 113.82 | 349.56 | 4.46 | 1.45 |
4, 64 | 492.15 | 111.63 | 342.45 | 4.41 | 1.44 |
4, 256 | 446.25 | 112.85 | 317.02 | 3.95 | 1.41 |
4, 1024 | 338.82 | 114.57 | 246.32 | 2.96 | 1.38 |
4, 2048 | 262.85 | 105.71 | 189.34 | 2.49 | 1.39 |
4, 4096 | 200.46 | 81.36 | 131.16 | 2.46 | 1.53 |
16, 16 | 1648.33 | 481.10 | 893.34 | 3.43 | 1.85 |
16, 64 | 1533.04 | 470.57 | 802.73 | 3.26 | 1.91 |
16, 256 | 1206.64 | 482.87 | 575.24 | 2.50 | 2.10 |
16, 1024 | 672.45 | 342.86 | 262.41 | 1.96 | 2.56 |
16, 2048 | 437.28 | 156.48 | 148.79 | 2.79 | 2.94 |
16, 4096 | 291.14 | OOM | 79.72 | 3.65 |
批次大小, 提示长度 | ORT INT4 CUDA | PyTorch Eager INT4 CUDA | Llama.cpp INT4 CUDA | ORT/PyTorch加速比 | ORT/Llama.cpp加速比 |
---|---|---|---|---|---|
1, 16 | 218.43 | 20.85 | 146.84 | 10.48 | 1.49 |
1, 64 | 213.41 | 20.86 | 149.35 | 10.23 | 1.43 |
1, 256 | 192.29 | 20.90 | 147.82 | 9.20 | 1.30 |
1, 1024 | 158.60 | 20.86 | 141.03 | 7.60 | 1.12 |
1, 2048 | 132.74 | 19.99 | 135.32 | 6.64 | 0.98 |
1, 4096 | 115.44 | 18.34 | 123.29 | 6.30 | 0.94 |
4, 16 | 291.75 | 68.45 | 378.89 | 4.26 | 0.77 |
4, 64 | 286.83 | 68.63 | 370.86 | 4.18 | 0.77 |
4, 256 | 269.77 | 68.27 | 341.23 | 3.95 | 0.79 |
4, 1024 | 224.34 | 68.47 | 260.11 | 3.28 | 0.86 |
4, 2048 | 187.09 | 65.53 | 196.91 | 2.86 | 0.95 |
4, 4096 | 153.44 | 54.88 | 134.73 | 2.80 | 1.14 |
16, 16 | 1030.87 | 272.84 | 648.29 | 3.78 | 1.59 |
16, 64 | 982.78 | 272.66 | 598.96 | 3.60 | 1.64 |
16, 256 | 835.82 | 273.95 | 461.85 | 3.05 | 1.81 |
16, 1024 | 540.11 | 226.96 | 235.99 | 2.38 | 2.29 |
16, 2048 | 377.84 | 127.05 | 139.97 | 2.97 | 2.70 |
16, 4096 | 263.52 | OOM | 77.11 | 3.42 |
CPU
下表显示了在 Standard F64s v2 (64 vcpus, 128 GiB内存) 上测量的CPU上INT4精度下生成的前256个token的平均吞吐量(tps)。
批次大小, 提示长度 | ORT INT4 CPU | Llama.cpp | ORT/Llama.cpp加速比 |
---|---|---|---|
1, 16 | 14.97 | 13.57 | 1.10 |
1, 64 | 14.47 | 10.39 | 1.39 |
1, 256 | 13.32 | 10.31 | 1.29 |
1, 1024 | 10.14 | 9.83 | 1.03 |
1, 2048 | 7.58 | 9.11 | 0.83 |
包版本
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的更多信息,请参阅 此处。
📄 许可证
本项目采用MIT许可证。
模型卡片联系人
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



