モデル概要
モデル特徴
モデル能力
使用事例
🚀 Phi-3 Mini-4K-Instruct ONNXモデル
このリポジトリは、Phi-3-mini-4k-instruct の最適化バージョンをホストしており、ONNX Runtimeを通じた推論の高速化を目的としています。
Phi-3 Miniは、軽量で最先端のオープンソースモデルです。Phi-2で使用されたデータセットを基に構築されており、合成データと選別されたウェブサイトデータが含まれ、特に高品質で推論に富むデータに重点が置かれています。このモデルはPhi-3モデルファミリーに属し、そのminiバージョンには4Kと128Kの2つのバリエーションがあり、これはサポートできるコンテキスト長(トークン単位)を表しています。このモデルは、厳格な強化プロセスを経ており、教師付き微調整(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モデルをさまざまなデバイスやプラットフォームの異なる実行プロバイダーバックエンドで実行できるようにするため、生成型AI推論のさまざまな側面をカプセル化する新しいAPIを導入しました。この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モデルです。遅延と精度のバランスを取るために2つのバージョンをアップロードしています。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の場合は最大10倍速く動作します。大きなバッチサイズでは、Llama.cppよりも最大3倍速くなります。
以下の表は、1 A100 80GB GPU, SKU: Standard_ND96amsr_A100_v4 で測定された、CUDA上のFP16とINT4精度で生成された最初の256トークンの平均スループット(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トークンの平均スループット(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



