模型概述
模型特點
模型能力
使用案例
🚀 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



