🚀 Phi-3 Mini-128K-Instruct ONNX模型
本仓库托管了 Phi-3-mini-128k-instruct 的优化版本,旨在使用ONNX Runtime加速推理。
Phi-3 Mini是一个轻量级、最先进的开放模型,它基于Phi-2所使用的数据集构建,包括合成数据和经过筛选的网站数据,尤其侧重于高质量、富含推理的数据。该模型属于Phi-3模型家族,其迷你版本有两种变体:4K和128K,这代表了它所能支持的上下文长度(以标记为单位)。该模型经过了严格的增强过程,包括监督微调(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让你可以轻松地将大语言模型直接集成到你的应用程序中。要使用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” 可以表示编造或说谎,因此产生了幽默效果。
✨ 主要特性
- 多设备支持:可在CPU和GPU上跨设备运行,包括服务器平台、Windows、Linux和Mac桌面,以及移动CPU。
- 硬件加速:支持DirectML,可在AMD、Intel和NVIDIA GPU的Windows设备上实现硬件加速。
- 新API支持:引入ONNX Runtime Generate() API,方便用户使用。
- 性能优越:在ONNX Runtime中的性能优于PyTorch。
📦 安装指南
文档未提及具体安装步骤,可参考 此处 运行模型的相关步骤。
💻 使用示例
基础用法
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模型:适用于CPU和移动设备的ONNX模型,通过RTN使用int4量化。上传了两个版本以平衡延迟和准确性。Acc=1版本旨在提高准确性,而Acc=4版本则侧重于提高性能。对于移动设备,我们建议使用acc-level-4的模型。
更多关于AMD的更新以及对CPU和移动设备的额外优化将在5月初的官方ORT 1.18版本发布时添加,敬请关注!
硬件支持
这些模型在以下设备上进行了测试:
- GPU型号:RTX 4090 (DirectML)
- GPU型号:1 A100 80GB GPU,型号:Standard_ND96amsr_A100_v4 (CUDA)
- CPU型号:Standard F64s v2(64个虚拟CPU,128 GiB内存)
- 移动设备型号:Samsung Galaxy S21
所需的最低配置:
模型描述
属性 |
详情 |
开发方 |
Microsoft |
模型类型 |
ONNX |
语言(NLP) |
Python、C、C++ |
许可证 |
MIT |
模型描述 |
这是Phi-3 Mini-4K-Instruct模型为ONNX Runtime推理进行的转换版本。 |
附加详情
性能指标
Phi-3 Mini-128K-Instruct在ONNX Runtime中的所有批量大小和提示长度组合下的性能均优于PyTorch。对于FP16 CUDA,ORT的速度比PyTorch快达5倍,而对于INT4 CUDA,速度比PyTorch快达9倍。
下表显示了在 1 A100 80GB GPU,型号:Standard_ND96amsr_A100_v4 上测量的FP16和INT4精度在CUDA上生成的前256个标记的平均吞吐量(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的更多信息,请参阅 此处。
📄 许可证
本模型采用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