Phi-3-Mini-128K-Instructモデルの概要
Phi-3-Mini-128K-Instructは、38億のパラメータを持つ軽量な最先端のオープンモデルです。Phi-3データセットを用いてトレーニングされており、合成データと高品質でリーズニングに特化した公開ウェブサイトのフィルタリングされたデータの両方を含んでいます。このモデルはPhi-3ファミリーに属し、Mini版では4Kと128Kの2つのバリエーションがあります。これはモデルがサポートできるコンテキストの長さ(トークン数)を表しています。
モデルは、指示に従うことと安全性を考慮した監視付きファインチューニングと直接の選好最適化を組み合わせた後処理を経ています。常識、言語理解、数学、コード、長いコンテキスト、論理的推論をテストするベンチマークで評価した結果、Phi-3 Mini-4K-Instructは130億未満のパラメータを持つモデルの中で頑健で最先端の性能を示しました。
こちらの記事もおすすめ
リソースと技術文書
使用目的
主な使用例
このモデルは英語での商用および研究用途を想定しています。以下のようなアプリケーションに適しています。
- メモリやコンピュートリソースが制約された環境
- レイテンシが重要なシナリオ
- 強力な推論能力(特にコード、数学、論理)が必要な場合
このモデルは、言語およびマルチモーダルモデルの研究を加速し、生成AIを用いた機能のビルディングブロックとしての使用を目的としています。
使用上の考慮点
モデルはすべてのダウンストリームの目的に特化して設計・評価されているわけではありません。開発者は言語モデルの一般的な制限を考慮し、特にリスクの高いシナリオでは、特定のダウンストリームでの使用前に精度、安全性、公平性を評価し、緩和策を講じる必要があります。開発者は、使用事例に関連する適用法令(プライバシー、貿易コンプライアンス法など)を認識し、遵守する必要があります。
本モデルカードに記載された内容は、モデルがリリースされたライセンスの制限や変更として解釈されるべきではありません。
使用方法
Phi-3 Mini-128K-Instructは、開発版(4.40.0)のtransformersに統合されています。公式版がpipでリリースされるまでは、以下のいずれかを確実に行ってください。
- モデルをロードする際、from_pretrained()関数の引数としてtrust_remote_code=Trueを渡す。
- ローカルのtransformersを開発版に更新する:
pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers
。前のコマンドは、ソースからクローンしてインストールする代わりの方法です。
現在のtransformersのバージョンは、pip list | grep transformers
で確認できます。
チャット形式
トレーニングデータの性質上、Phi-3 Mini-128K-Instructモデルは以下のようなチャット形式のプロンプトに最も適しています。プロンプトは質問として提供し、一般的なテンプレートを使用できます。
<|user|>
質問<|end|>
<|assistant|>
例えば:
<|system|>
あなたは役立つAIアシスタントです。<|end|>
<|user|>
中世の騎士にインターネットを説明するにはどうすればよいですか?<|end|>
<|assistant|>
モデルは<|assistant|>
の後にテキストを生成します。few-shotプロンプトの場合、プロンプトは以下のようにフォーマットできます。
<|system|>
あなたは役立つAIアシスタントです。<|end|>
<|user|>
パリに行くのですが、何を見るべきでしょうか?<|end|>
<|assistant|>
フランスの首都パリは、印象的な建築、美術館、歴史的ランドマーク、ロマンチックな雰囲気で知られています。パリで見るべき主な観光スポットは以下の通りです。
1. エッフェル塔: 世界で最も有名なランドマークの1つであり、市内の息をのむような景色を楽しめます。
2. ルーヴル美術館: 世界最大かつ最も有名な美術館の1つで、モナリザを含む印象的なアートと工芸品のコレクションを所蔵しています。
3. ノートルダム大聖堂: このゴシック様式の美しい大聖堂は、パリで最も有名なランドマークの1つで、見事なステンドグラスの窓で知られています。
パリにはこれ以外にも多くの魅力があります。見所が多く、やることが尽きないので、パリが世界で最も人気のある観光地の1つであるのも不思議ではありません。<|end|>
<|user|>
1番のスポットの素晴らしさを教えてください。<|end|>
<|assistant|>
サンプル推論コード
このコードスニペットは、GPUでモデルを実行するためのクイックスタートを示しています。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3-mini-128k-instruct",
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-128k-instruct")
messages = [
{"role": "system", "content": "あなたは役立つデジタルアシスタントです。ユーザーに安全で倫理的かつ正確な情報を提供してください。"},
{"role": "user", "content": "バナナとドラゴンフルーツを組み合わせて食べる方法を教えてください。"},
{"role": "assistant", "content": "はい、バナナとドラゴンフルーツを一緒に食べるいくつかの方法をご紹介します。\n1. バナナとドラゴンフルーツのスムージー: バナナとドラゴンフルーツをミルクとハチミツと一緒にブレンドします。\n2. バナナとドラゴンフルーツのサラダ: スライスしたバナナとドラゴンフルーツにレモン汁とハチミツを混ぜ合わせます。"},
{"role": "user", "content": "2x + 3 = 7 の方程式を解くにはどうすればよいですか?"},
]
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
generation_args = {
"max_new_tokens": 500,
"return_full_text": False,
"temperature": 0.0,
"do_sample": False,
}
output = pipe(messages, **generation_args)
print(output[0]['generated_text'])
責任あるAIの考慮事項
他の言語モデルと同様に、Phiシリーズのモデルは不公平、信頼性が低い、攻撃的な振る舞いをする可能性があります。注意すべき制限的な動作には以下のようなものがあります。
- サービスの質: Phiモデルは主に英語のテキストでトレーニングされています。英語以外の言語ではパフォーマンスが低下します。トレーニングデータに十分表現されていない英語のバリエーションでは、標準的なアメリカ英語よりもパフォーマンスが低下する可能性があります。
- 危害の表現とステレオタイプの永続化: これらのモデルは、人々のグループを過剰に、または過小に表現したり、一部のグループの表現を消去したり、侮辱的または否定的なステレオタイプを強化したりする可能性があります。安全性に関する事後トレーニングにもかかわらず、トレーニングデータにおける異なるグループの表現レベルの違いや、現実世界のパターンと社会的バイアスを反映した否定的なステレオタイプの例の普及により、これらの制限が依然として存在する可能性があります。
- 不適切または攻撃的なコンテンツ: これらのモデルは、他の種類の不適切または攻撃的なコンテンツを生成する可能性があり、繊細なコンテキストでは、使用事例に特化した追加の緩和策なしにデプロイするのは不適切な場合があります。
- 情報の信頼性: 言語モデルはナンセンスなコンテンツを生成したり、もっともらしく聞こえるが不正確または古いコンテンツを作り出したりする可能性があります。
- コードの限定的な範囲: Phi-3のトレーニングデータの大部分は、Python と "typing, math, random, collections, datetime, itertools"のような一般的なパッケージに基づいています。モデルが他のパッケージを利用するPythonスクリプトや他の言語のスクリプトを生成する場合、すべてのAPIの使用を手動で検証することを強くお勧めします。
開発者は責任あるAIのベストプラクティスを適用し、特定の使用事例が関連する法律や規制(プライバシー、貿易など)に準拠していることを確認する責任があります。考慮すべき重要な分野は以下の通りです。
- 割り当て: モデルは、さらなる評価と追加の偏向除去手法なしには、法的地位やリソースまたは人生の機会(住宅、雇用、信用など)の割り当てに重大な影響を与える可能性のあるシナリオには適さない場合があります。
- 高リスクなシナリオ: 開発者は、不公平、信頼性が低い、または攻撃的な出力が非常にコストがかかったり、害につながったりする可能性のある高リスクなシナリオでのモデルの使用の適合性を評価する必要があります。これには、正確性と信頼性が重要な繊細または専門家の領域(法律または健康に関するアドバイスなど)でのアドバイスの提供が含まれます。デプロイメントの状況に応じて、アプリケーションレベルで追加のセーフガードを実装する必要があります。
- 誤情報: モデルは不正確な情報を生成する可能性があります。開発者は透明性のベストプラクティスに従い、エンドユーザーにAIシステムとやり取りしていることを通知する必要があります。アプリケーションレベルでは、開発者はフィードバックメカニズムとパイプラインを構築し、使用事例に特化した文脈情報に基づいて応答を行うことができます。この手法は、検索による拡張生成(RAG)として知られています。
- 有害なコンテンツの生成: 開発者は、コンテキストに応じた出力を評価し、使用可能な安全性分類器や使用事例に適したカスタムソリューションを使用する必要があります。
- 悪用: 詐欺、スパム、マルウェア生成などの他の形態の悪用が可能である可能性があり、開発者はアプリケーションが適用法令に違反しないようにする必要があります。
トレーニング
モデル
- アーキテクチャ: Phi-3 Mini-128K-Instructは38億のパラメータを持ち、密なデコーダーのみのTransformerモデルです。モデルは、人間の嗜好と安全指針に沿うように、監視付きファインチューニング(SFT)と直接選好最適化(DPO)を用いてファインチューニングされています。
- 入力: テキスト。チャット形式のプロンプトに最も適しています。
- コンテキスト長: 128Kトークン
- GPU: 512 H100-80G
- トレーニング時間: 7日間
- トレーニングデータ: 3.3兆トークン
- 出力: 入力に対する応答として生成されたテキスト
- 日付: モデルは2024年2月から4月の間にトレーニングされました。
- ステータス: これは、2023年10月のカットオフ日付でオフラインデータセットでトレーニングされた静的モデルです。モデルの改善に伴い、チューニングされたモデルの将来のバージョンがリリースされる可能性があります。
データセット
トレーニングデータには幅広いソースが含まれており、合計3.3兆トークンになります。内訳は以下の通りです。
- 品質に関して厳しくフィルタリングされた公開文書、選択された高品質の教育データ、コード
- 数学、コーディング、常識推論、世界に関する一般知識(科学、日常活動、心の理論など)を教えることを目的として新たに作成された合成の「教科書のような」データ
- 指示に従うこと、真実性、正直さ、有用性など、さまざまな側面に関する人間の嗜好を反映した、高品質なチャット形式の監視データ
ファインチューニング
TRLとAccelerateモジュールを使用したマルチGPUの監視付きファインチューニング(SFT)の基本的な例はこちらで提供されています。
ベンチマーク
モデルの推論能力(常識推論と論理的推論の両方)を測定する標準的なオープンソースのベンチマークに対するPhi-3-Mini-128K-Instructの結果を報告します。比較対象はPhi-2、Mistral-7b-v0.1、Mixtral-8x7b、Gemma 7B、Llama-3-8B-Instruct、GPT-3.5です。
報告されている数値はすべて、まったく同じパイプラインを使用して生成されており、数値が比較可能であることを保証しています。これらの数値は、評価における選択の違いにより、他の公開された数値とは異なる場合があります。
標準的になりつつあるように、few-shotプロンプトを使用してモデルを評価し、temperature 0で行います。プロンプトとショット数は、言語モデルを評価するためのMicrosoft社内ツールの一部であり、特にPhi-3用にパイプラインを最適化することはありません。具体的には、プロンプトの変更、異なるfew-shotの例の選択、プロンプト形式の変更、その他の形式の最適化は行いません。
k-shotの例の数は、ベンチマークごとに記載されています。
(ベンチマーク結果の表は省略)
ソフトウェア
- PyTorch
- DeepSpeed
- Transformers
- Flash-Attention
ハードウェア
Phi-3-miniモデルはデフォルトでflash attentionを使用しており、実行には特定のタイプのGPUハードウェアが必要です。以下のGPUタイプでテストを行っています。
- NVIDIA A100
- NVIDIA A6000
- NVIDIA H100
以下で実行する場合:
- NVIDIA V100またはそれ以前の世代のGPU:
attn_implementation="eager"
を指定してAutoModelForCausalLM.from_pretrained()
を呼び出します。 - GPU、CPU、モバイルでの最適化された推論: ONNX models 128Kを使用します。
クロスプラットフォームのサポート
ONNX RuntimeエコシステムはPhi-3 Miniモデルをプラットフォームやハードウェアを問わずサポートしています。最適化されたPhi-3 Mini-128K-Instruct ONNXモデルはこちらで入手できます。
最適化されたPhi-3モデルもONNX形式でこちらに公開されており、サーバープラットフォーム、Windows、Linux、Macデスクトップ、モバイルCPUなど、各ターゲットに最適な精度でONNX RuntimeでCPUとGPUにまたがって実行できます。DirectMLのサポートにより、開発者はAMD、Intel、NVIDIAのGPUにまたがってWindowsデバイスにハードウェアアクセラレーションを大規模にもたらすことができます。DirectMLとともに、ONNX Runtimeは、CPU、GPU、モバイルなど、さまざまなデバイスにまたがってPhi-3のクロスプラットフォームサポートを提供します。
追加した最適化設定の一部は以下の通りです。
- int4 DML用のONNXモデル: AWQによりint4に量子化
- fp16 CUDA用のONNXモデル
- int4 CUDA用のONNXモデル: RTNによりint4に量子化
- int4 CPUおよびモバイル用のONNXモデル: RTNによりint4に量子化
ノートブック
ライセンス
このモデルはMITライセンスの下でライセンスされています。
商標
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれている場合があります。Microsoftの商標またはロゴの許可された使用は、Microsoftの商標およびブランドのガイドラインに従う必要があります。このプロジェクトの変更されたバージョンでMicrosoftの商標またはロゴを使用する場合、混乱を引き起こしたり、Microsoftのスポンサーシップを意味したりしてはいけません。サードパーティの商標またはロゴを使用する場合は、それらのサードパーティのポリシーに従う必要があります。
コメント