🚀 Phi-3 Mini-128K-Instruct ONNXモデル
このリポジトリは、Phi-3-mini-128k-instruct の最適化バージョンをホストしており、ONNX Runtimeを使用した推論を高速化します。
Phi-3 Miniは、軽量で最先端のオープンモデルで、Phi-2に使用されたデータセット(合成データとフィルタリングされたウェブサイト)を基に構築されています。特に、非常に高品質で推論に富んだデータに焦点を当てています。このモデルはPhi-3モデルファミリーに属し、ミニバージョンには4Kと128Kの2つのバリエーションがあり、これはサポートできるコンテキスト長(トークン単位)を表します。モデルは、厳格な強化プロセスを経ており、教師あり微調整と直接的な嗜好最適化の両方を組み込んで、正確な命令遵守と堅牢なセキュリティ対策を確保しています。
最適化されたPhi-3 Miniモデルは、ONNX 形式でここに公開されており、ONNX Runtime を使用して、サーバープラットフォーム、Windows、Linux、Macデスクトップ、およびモバイルCPUを含むさまざまなデバイスのCPUとGPUで実行できます。それぞれのターゲットに最適な精度で動作します。
DirectML のサポートにより、開発者はAMD、Intel、NVIDIAのGPUを搭載したWindowsデバイスに大規模にハードウェアアクセラレーションを導入できます。DirectMLとともに、ONNX Runtimeは、CPU、GPU、およびモバイルのさまざまなデバイスでPhi-3 Miniのクロスプラットフォームサポートを提供します。
Phi-3を簡単に始めるには、新しく導入されたONNX Runtime Generate() APIを使用できます。実行方法の説明は こちら を参照してください。
🚀 クイックスタート
Phi-3モデルをさまざまなデバイスやプラットフォーム、さまざまな実行プロバイダーバックエンドで実行できるように、生成AI推論のいくつかの側面をラップする新しいAPIを導入しました。このAPIにより、LLMをアプリに簡単にドラッグアンドドロップできます。これらのモデルの初期バージョンを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形式で最適化され、ONNX Runtimeでの推論が高速化されます。
- さまざまなデバイス(CPU、GPU、モバイル)でのクロスプラットフォームサポートがあります。
- DirectMLをサポートし、Windowsデバイスでのハードウェアアクセラレーションが可能です。
- 新しいONNX Runtime Generate() APIを使用して簡単に始めることができます。
📦 インストール
このREADMEには具体的なインストール手順が記載されていないため、このセクションは省略されます。
💻 使用例
基本的な使用法
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
高度な使用法
このREADMEに高度な使用法の具体的なコード例が記載されていないため、このサブセクションは省略されます。
📚 ドキュメント
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 memory)
- モバイルSKU: Samsung Galaxy S21
必要な最小構成:
モデルの説明
属性 |
詳情 |
開発元 |
Microsoft |
モデルタイプ |
ONNX |
言語 (NLP) |
Python, C, C++ |
ライセンス |
MIT |
モデルの説明 |
これは、ONNX Runtime推論用のPhi-3 Mini-4K-Instructモデルの変換版です。 |
追加情報
パフォーマンスメトリクス
Phi-3 Mini-128K-Instructは、すべてのバッチサイズとプロンプト長の組み合わせにおいて、ONNX RuntimeでPyTorchよりも優れたパフォーマンスを発揮します。FP16 CUDAの場合、ORTはPyTorchより最大5倍高速で、INT4 CUDAの場合は最大9倍高速です。
以下の表は、1 A100 80GB GPU, SKU: Standard_ND96amsr_A100_v4 で測定された、CUDA上のFP16とINT4精度における最初の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