重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
Azure AI Foundry を使用すると、微調整と呼ばれるプロセスを通じて、特定のデータセットに大きな言語モデルをカスタマイズできます。 このプロセスは、特定のタスクやアプリケーションに合わせたカスタマイズと最適化を可能にすることで、大きな利点を提供します。 この利点には、パフォーマンスの向上、コスト効率、待機時間の短縮、出力の調整などがあります。
コスト効率: Azure AI Foundry の微調整は、Standard 価格により、特に大規模なデプロイの場合、コスト効率が向上する可能性があります。
モデルの多様性: Azure AI Foundry の標準的なデプロイの微調整では、独自のモデルとオープン ソース モデルの両方がサポートされ、ユーザーは 1 つの種類に制限されることなく、ニーズに最も適したモデルを柔軟に選択できます。
カスタマイズと制御: Azure AI Foundry では、微調整プロセスのカスタマイズと制御が強化され、ユーザーは特定の要件に合わせてモデルをより正確に調整できます。
この記事では、 Azure AI Foundry の標準デプロイを使用してデプロイされたモデルを微調整する方法について説明します。
[前提条件]
有効な支払い方法を持つ Azure サブスクリプション。 無料または試用版の Azure サブスクリプションは機能しません。 Azure サブスクリプションを持っていない場合は、始めるために有料の Azure アカウントを作成してください。
Azure portal へのアクセス権限。
Azure AI Foundry ポータルでの操作に対するアクセス権を付与するには、Azure ロールベースのアクセス制御 (Azure RBAC) を使用します。 この記事の手順を実行するには、ユーザー アカウントに、Azure サブスクリプションの所有者か共同作成者ロールを割り当てる必要があります。 アクセス許可について詳しくは、「Azure AI Foundry ポータルでのロールベースのアクセス制御」をご覧ください。
サブスクリプション プロバイダーの登録を確認する
サブスクリプションが Microsoft.Network リソース プロバイダーに登録されていることを確認します。
- Azure portal にサインインします。
- 左側のメニューで、[サブスクリプション] を選択します。
- 使用するサブスクリプションを選択します。
- 左側のメニューから [設定]>[リソース プロバイダー] を選択します。
- リソース プロバイダーが一覧にない場合は、リソース プロバイダーの一覧に Microsoft.Network を追加します。
微調整がサポートされているモデルを特定する
AI Foundry モデル カタログは、チャットの完了やテキスト生成など、複数の種類のモデルの微調整をサポートしています。 微調整をサポートするモデルの一覧と、微調整のための Azure リージョンのサポートについては、 標準デプロイとしてのモデルのリージョンの可用性に関 するページを参照してください。微調整タスクは、モデル プロバイダーによってオファーが利用可能になった国/地域の課金アカウントに Azure サブスクリプションが属しているユーザーのみが使用できます。 関連するリージョンでオファーが利用可能な場合、ユーザーは該当するモデルのデプロイまたはファインチューニングが行える Azure リージョン内にプロジェクトリソースを所有している必要があります。
また、Azure AI Foundry ポータルに移動して、微調整をサポートしているすべてのモデルを表示することもできます:
Azure AI Foundry にサインインします。
まだプロジェクトを開いていない場合は選びます。
モデル カタログに移動します。
[微調整タスク] フィルターを選択します。
[すべて] を選択するか、特定のタスクを選択します。
微調整用にデータを準備する
トレーニングデータと検証データを準備して、モデルを微調整します。 トレーニングデータと検証データは、モデルの実行方法に関する入力と出力の例で構成されます。
すべてのトレーニング例が、推論に必要な形式に従っていることを確認します。 モデルを効果的に微調整するには、さまざまなシナリオを含むデータバランスを維持し、実際の期待に合わせてトレーニング データを定期的に調整することで、多様なデータセットを確保します。 これらは最終的に、より正確でバランスの取れたモデル応答につながります。
ヒント
モデルの種類が異なると、異なる形式のトレーニング データが必要になります。
ファイル形式の例
サポートされているファイルの種類は、JSON Lines です。 ファイルは既定のデータストアにアップロードされ、プロジェクトで使用できるようになります。
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
モデルの微調整ウィザードを使用する
Azure AI Foundry ポータルにはカスタム モデルの作成ウィザードが用意されているため、Azure リソース用に微調整されたモデルを対話形式で作成してトレーニングできます。
基本モデルを選択する
- Azure AI Foundry のモデル カタログから、微調整するモデルを選びます。
- モデルの [詳細] ページで、微調整を選択 します。 一部の基盤モデルでは 、標準デプロイ と マネージド コンピューティングの両方がサポートされ、一方または他方がサポートされている基盤モデルもあります。
- 標準デプロイとマネージド コンピューティングのオプションが表示されている場合は、微調整のために標準デプロイを選択します。 この操作により、モデルの Standard 微調整に関する情報を表示するウィザードが開きます。
トレーニング データを選択する
次の手順では、既存の準備済みトレーニング データを選択するか、モデルをカスタマイズするときに使用する新しい準備済みトレーニング データをアップロードします。 [トレーニング データ] ウィンドウには、以前にアップロードされた既存のデータセットが表示されるほか、新しいトレーニング データをアップロードできるオプションも表示されます。
- トレーニング データが既にサービスにアップロードされている場合は、 Azure AI Foundry から [ファイル] を選択します。
- 表示されたドロップダウン リストからファイルを選択します。
- 新しいトレーニング データをアップロードするには、次のいずれかのオプションを使用します。
- [ローカル ファイル] を選択して、ローカル ファイルからトレーニング データをアップロードします。
- Azure BLOB またはその他の共有 Web の場所を選択して、Azure BLOB または別の共有 Web の場所からトレーニング データをインポートします。
大きなデータ ファイルの場合は、Azure BLOB ストアからインポートすることをお勧めします。 Azure Blob Storage の詳細については、「Azure Blob Storage とは」を参照してください。
ローカル ファイルからトレーニング データをアップロードする
次のいずれかの方法を使用して、ローカル ファイルから新しいトレーニング データセットをサービスにアップロードできます。
- [トレーニング データ] ウィンドウのクライアント領域にファイルをドラッグ アンド ドロップし、[ファイルのアップロード] を選択します。
- [トレーニング データ] ウィンドウのクライアント領域からファイルを参照を選択し、[開く] ダイアログからアップロードするファイルを選択し、[ファイルのアップロード] を選択します。 トレーニング データセットを選択してアップロードしたら、[次へ] を選択して続行します。
検証データを選択する
次の手順では、トレーニング プロセスで検証データを使用するようにモデルを構成するためのオプションが提供されます。 検証データを使用しない場合は、[次へ] を選択してモデルの詳細オプションに進むことができます。 それ以外で、検証データセットがある場合は、既存の準備済みの検証データを選択するか、モデルをカスタマイズするときに使用する新しい準備済みの検証データをアップロードできます。 [検証データ] ウィンドウには、以前にアップロードされた既存のトレーニングおよび検証のデータセットが表示され、新しいトレーニング データをアップロードできるオプションが表示されます。
トレーニング データを分割する
トレーニング データを自動的に分割して、検証データセットを生成できます。 [トレーニング データの自動分割] を選択した後、[ 次へ ] を選択して続行します。
Azure AI Foundry で既存のデータを使用する
- 検証データが既にサービスにアップロードされている場合は、[データセットの選択] を選択します。
- [検証データ] ウィンドウに表示される一覧からファイルを選択します。
- 新しい検証データをアップロードするには、次のいずれかのオプションを使用します。
- ローカル ファイルから検証データをアップロードするには、[ローカル ファイル] を選択します。
- Azure BLOB またはその他の共有 Web の場所を選択して、Azure BLOB または別の共有 Web の場所から検証データをインポートします。 大きなデータ ファイルの場合は、Azure BLOB ストアからインポートすることをお勧めします。 大きなファイルは、マルチパート フォームを介してアップロードすると不安定になる場合があります。要求がアトミックであり、再試行または再開ができないためです。
注
- トレーニング データ ファイルと同様に、検証データ ファイルは JSONL ファイルとして書式設定する必要があります。
- バイトオーダー マーク (BOM) を使用して UTF-8 でエンコードされます。 ファイルは、512 MB 未満のサイズにする必要があります。
ローカル ファイルから検証データをアップロードする
次のいずれかの方法を使用して、ローカル ファイルから新しい検証データセットをサービスにアップロードできます。
- ファイルを [検証データ] ウィンドウのクライアント領域にドラッグ アンド ドロップし、[ファイルのアップロード] を選択します。
- [検証データ] ウィンドウのクライアント領域からファイルを参照を選択し、[Open] ダイアログからアップロードするファイルを選択し、[ファイルのアップロード] を選択します。 検証データセットを選択してアップロードしたら、[次へ] を選択して続行します。
タスク パラメーターを構成する
モデルの微調整ウィザードでは、微調整されたモデルをトレーニングするためのパラメーターが [タスク パラメーター] ウィンドウに表示されます。 次のパラメーターを使用できます。
名前 | タイプ | 説明 |
---|---|---|
batch_size |
整数 (integer) | トレーニングに使用するバッチ サイズ。 バッチ サイズは、単一のフォワード パスおよびバックワード パスのトレーニングに使用されるトレーニング例の数です。 一般に、大規模なデータセットでは、バッチ サイズが大きいほど適切に機能する傾向があることがわかりました。 既定値とこのプロパティの最大値は、基本モデルに固有です。 バッチ サイズが大きいほど、モデル パラメーターの更新頻度は低くなりますが、分散は小さくなります。 |
learning_rate_multiplier |
number | トレーニングに使用する学習率乗数。 微調整学習率は、事前トレーニングに使用された元の学習率にこの値を乗算した値です。 学習率が高いほど、大きいバッチ サイズでのパフォーマンスが向上する傾向があります。 0.02 から 0.2 の範囲の値を試して、最適な結果が得られるものを確認することをお勧めします。 学習率を小さくすると、オーバーフィットを避けるのに役立つ場合があります。 |
n_epochs |
整数 (integer) | モデルをトレーニングするエポックの数。 エポックとは、トレーニング データセット全体での 1 つの完全なサイクルを指します。 |
[既定値] を選択して微調整ジョブの既定値を使用するか、[カスタム] を選択してハイパーパラメーター値を表示して編集します。 既定値を選択すると、トレーニング データに基づいて正しい値がアルゴリズムによって決定されます。 高度なオプションを構成したら [次へ] を選択し、選択内容を確認して微調整したモデルをトレーニングします。
選択内容をレビューしてモデルをトレーニングする
ウィザードの [レビュー] ウィンドウには、構成の選択に関する情報が表示されます。
モデルをトレーニングする準備ができたら、[ トレーニング ジョブの開始 ] を選択して微調整ジョブを開始し、[ モデル ] タブに戻ります。
カスタム モデルの状態を確認する
[ 微調整] タブ には、カスタム モデルに関する情報が表示されます。 タブには、カスタム モデルの微調整ジョブの状態とジョブ ID に関する情報が含まれています。 ジョブが完了すると、タブに結果ファイルのファイル ID が表示されます。 モデル トレーニング ジョブの更新された状態を表示するには、[最新の情報に更新] を選択する必要がある場合があります。
微調整ジョブを開始した後、完了するまでに時間がかかる場合があります。 ジョブは、システム上の他のジョブの後にキューに入れられる場合があります。 モデルのトレーニングには、モデルおよびデータセットのサイズに応じて、数分または数時間かかる場合があります。 [ モデル ] タブで実行できるタスクの一部を次に示します。
- [カスタマイズされたモデル] タブの [状態] 列で、カスタム モデルの微調整ジョブの状態を確認します。
- [モデル名] 列で、モデルの名前を選択して、カスタム モデルに関する詳細情報を表示します。 微調整ジョブの状態、トレーニング結果、トレーニング イベント、ジョブで使用されているハイパーパラメーターを確認できます。
- [更新] を選んで、ページを最新の情報に更新します。
微調整でサポートされるエンタープライズ シナリオ
標準的な展開の微調整では、いくつかのエンタープライズ シナリオがサポートされています。 下の表は、エンタープライズ シナリオ内での円滑な運用を保証するために、ユーザー ストレージ のネットワークと認証でサポートされている構成の概要を示しています。
注
- データ接続の認証は、データセットが格納されているデータストア接続をクリックし、 アクセスの詳細>認証方法 の設定に移動することで、AI Foundry を介して変更できます。
- ストレージ認証は、Azure Storage >[設定]>[構成 ] ページ >[ストレージ アカウント キー アクセスを許可] で変更できます。
- ストレージ ネットワークは、Azure Storage >[ネットワーク] ページで変更できます。
ストレージ ネットワーク | ストレージ認証 | データ接続認証 | サポート |
---|---|---|---|
パブリック ネットワーク アクセス = 有効 | アカウント キーが有効 | SAS/アカウント キー | はい、UX と SDK |
パブリック ネットワーク アクセス = 有効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK 注: (UX の場合) ユーザー ID のストレージ BLOB データ 閲覧者またはストレージ BLOB データ共同作成者をストレージ アカウントで追加すること、または、アカウント キー/SAS トークンを使用するように接続の認証を変更することが必要な場合があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが有効 | アカウント キー | はい、UX と SDK 注: UX の場合、ブラウザーを実行しているコンピューティングの IP が選択された一覧に含まれている必要があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが有効 | SAS | はい、UX と SDK 注: UX の場合、ブラウザーを実行しているコンピューティングの IP が選択された一覧に含まれている必要があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK です。 注: (UX の場合) ユーザー ID のストレージ BLOB データ 閲覧者またはストレージ BLOB データ共同作成者をストレージ アカウントで追加すること、または、アカウント キー/SAS トークンを使用するように接続の認証を変更することが必要な場合があります。 また、ブラウザーを実行しているコンピューティングの IP は、選択された一覧に確実に含まれている必要があります |
公衆ネットワーク アクセス = 無効 | アカウント キーが有効 | SAS/アカウント キー | はい、UX と SDK です。 注: UX データのアップロードと送信が機能するためには、ワークスペースが、ストレージへの適切なアクセス権を持つ Vnet 内からアクセスされる必要があります |
公衆ネットワーク アクセス = 無効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK です。 注: UX データのアップロードと送信が機能するためには、ワークスペースが、ストレージへの適切なアクセス権を持つ Vnet 内からアクセスされる必要があります |
同時に、上記のシナリオが、マネージド VNET のワークスペースで機能することも必要です。 「マネージド Vnet AI Foundry ハブのセットアップ」を参照してください。 Azure AI Foundry ハブのマネージド ネットワークを構成する方法
カスタマー マネージド キー (CMK) は、標準の展開の微調整でサポートされるエンタープライズ シナリオではありません。
ワークスペースとストレージ上の一意のネットワークセットアップに関する微調整の問題は、通常、ネットワークセットアップの問題を指しています。
微調整されたモデルをデプロイする
微調整ジョブが成功したら、[ 微調整 ] タブからカスタム モデルをデプロイできます。完了呼び出しで使用できるようにするには、カスタム モデルをデプロイする必要があります。
重要
カスタマイズされたモデルをデプロイし、エンドポイントで終了したら、アクティブでないエンドポイントをクリーンアップすることを忘れないでください。 非アクティブなデプロイを削除しても、基になるカスタマイズされたモデルは削除されることも影響を受けることもなく、カスタマイズされたモデルはいつでも再デプロイできます。 Azure AI Foundry の価格で説明されているように、デプロイされるカスタマイズされた (微調整された) モデルごとに、完了またはチャット完了の呼び出しがモデルに対して行われているかどうかにかかわらず、1 時間ごとのホスティング コストが発生します。 Azure AI Foundry を使用したコストの計画と管理の詳細については、「 Azure AI Foundry Service のコストを管理する計画」のガイダンスを参照してください。
注
カスタム モデルに対して許可されるデプロイは 1 つだけです。 既にデプロイされているカスタム モデルを選択すると、エラー メッセージが表示されます。 カスタム モデルをデプロイするには、デプロイするカスタム モデルを選択し、[モデルのデプロイ] を選択します。
[モデルのデプロイ] ダイアログ ボックスが開きます。 ダイアログ ボックスで、 デプロイ名 を入力し、[ デプロイ ] を選択してカスタム モデルのデプロイを開始します。
[ モデルとエンドポイント ] タブで [モデルのデプロイ ] ボタンを 選択し、ドロップダウンから [微調整されたモデルのデプロイ] を選択して、微調整されたモデルをデプロイ することもできます。
次に、デプロイする微調整されたモデルを選択し、[デプロイ] を選択 します。
リージョン間でのデプロイ
微調整では、微調整されたモデルを、モデルが最初に微調整された場所とは異なるリージョンにデプロイすることがサポートされています。 別のサブスクリプション/リージョンにデプロイすることもできます。 唯一の制限事項は、新しいリージョンでも微調整をサポートする必要があり、クロス サブスクリプションをデプロイする場合、デプロイの承認トークンを生成するアカウントは、ソース サブスクリプションと移行先サブスクリプションの両方にアクセスできる必要があります。 サブスクリプション/リージョン間のデプロイは、Python を使用して実現できます
デプロイされたカスタム モデルを使用する
カスタム モデルは、デプロイ後、他のデプロイ済みモデルと同様に使用できます。 Azure AI Foundry ポータルの [プレイグラウンド] を使用して、新しいデプロイを試すことができます。 他のデプロイ済みモデルと同様に、温度やmax_tokensなどのカスタム モデルでも引き続き同じパラメーターを使用できます。
微調整されたモデルのクリーンアップ
微調整されたモデルは、Azure AI Foundry の微調整モデルの一覧、またはモデルの詳細ページから削除できます。 微調整したモデルを [微調整] ページから削除するには、
- Azure AI Foundry プロジェクトの左側のナビゲーションから、[微調整] を選択します。
- [削除] ボタンを選択して、微調整されたモデルを削除します。
注
既存のデプロイがある場合は、カスタム モデルを削除できません。 カスタム モデルを削除する前に、まずモデル デプロイを削除する必要があります。
モデルを実行するクライアントを作成する
次のセクションでは、Python でモデルを微調整する方法について説明します。 このコードのノートブックの例については、「サービスとしてのモデルを使用した LLM の微調整」を参照してください
- 依存関係をインストールして、モデルの微調整を開始します。
%pip install azure-ai-ml
%pip install azure-identity
%pip install mlflow
%pip install azureml-mlflow
- モデルを使用するクライアントを作成します。 次のコードでは、環境変数に格納されているエンドポイント URL とキーを使用しています。
from azure.ai.ml import MLClient
from azure.identity import (
DefaultAzureCredential,
InteractiveBrowserCredential,
)
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
credential = InteractiveBrowserCredential()
try:
workspace_ml_client = MLClient.from_config(credential=credential)
except:
workspace_ml_client = MLClient(
credential,
subscription_id="<SUBSCRIPTION_ID>",
resource_group_name="<RESOURCE_GROUP_NAME>",
workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
)
# the models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")
# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id
微調整がサポートされているモデルを特定する
AI Foundry モデル カタログは、チャットの完了やテキスト生成など、複数の種類のモデルの微調整をサポートしています。 微調整をサポートするモデルの一覧と、微調整のための Azure リージョンのサポートについては、 標準デプロイでのモデルのリージョンの可用性に関 するページを参照してください。微調整タスクは、モデル プロバイダーによってオファーが利用可能になった国/地域の課金アカウントに Azure サブスクリプションが属しているユーザーのみが使用できます。 関連するリージョンでオファーが利用可能な場合、ユーザーは該当するモデルのデプロイまたはファインチューニングが行える Azure リージョン内にプロジェクトリソースを所有している必要があります。
この例では、Phi-4-mini-instruct モデルを使用します。 このコード スニペットでは、モデルのモデル ID プロパティが微調整ジョブへの入力として渡されます。 これは、Azure AI Foundry モデル カタログのモデルの詳細ページの [資産 ID] フィールドとしても使用できます。
model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
"\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
)
)
微調整用にデータを準備する
トレーニングデータと検証データを準備して、モデルを微調整します。 トレーニングデータと検証データは、モデルの実行方法に関する入力と出力の例で構成されます。
すべてのトレーニング例が、推論に必要な形式に従っていることを確認します。 モデルを効果的に微調整するには、さまざまなシナリオを含むデータバランスを維持し、実際の期待に合わせてトレーニング データを定期的に調整することで、多様なデータセットを確保します。 これらは最終的に、より正確でバランスの取れたモデル応答につながります。
ヒント
モデルの種類が異なると、異なる形式のトレーニング データが必要になります。
ファイル形式の例
サポートされているファイルの種類は、JSON Lines です。 ファイルは既定のデータストアにアップロードされ、プロジェクトで使用できるようになります。
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
トレーニング用データ入力を作成する
このコード スニペットは、トレーニング データセットを定義する方法を示しています。
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data
dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
train_data_asset = workspace_ml_client.data.get(
train_dataset_name, version=dataset_version
)
print(f"Dataset {train_dataset_name} already exists")
except:
print("creating dataset")
train_data = Data(
path=f"./train.jsonl",
type=AssetTypes.URI_FILE,
description="Training dataset",
name=train_dataset_name,
version="1",
)
train_data_asset = workspace_ml_client.data.create_or_update(train_data)
検証データを作成する
次の手順では、トレーニング プロセスで検証データを使用するようにモデルを構成するためのオプションが提供されます。 検証データを使用しない場合は、この手順をスキップして次のセクションに進むことができます。 それ以外で、検証データセットがある場合は、既存の準備済みの検証データを選択するか、モデルをカスタマイズするときに使用する新しい準備済みの検証データをアップロードできます。
from azure.ai.ml.entities import Data
dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
validation_data_asset = workspace_ml_client.data.get(
validation_dataset_name, version=dataset_version
)
print(f"Dataset {validation_dataset_name} already exists")
except:
print("creating dataset")
validation_data = Data(
path=f"./validation.jsonl",
type=AssetTypes.URI_FILE,
description="Validation dataset",
name=validation_dataset_name,
version="1",
)
validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)
サードパーティ モデルのマーケットプレース サブスクリプションを作成する
この手順は、Microsoft 以外のすべてのモデルに必要です。 Microsoft モデルの例として、Phi ファミリのモデルがあります。
model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)
normalized_model_name = model_name.replace(".", "-")
from azure.ai.ml.entities import MarketplaceSubscription
subscription_name = f"{normalized_model_name}-sub"
marketplace_subscription = MarketplaceSubscription(
model_id=model_id_to_subscribe,
name=subscription_name,
)
# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
marketplace_subscription = (
workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
marketplace_subscription
).result()
)
except Exception as ex:
print(ex)
モデルとデータを入力として使用して微調整ジョブを送信する
モデルを微調整するために必要なパラメーターのセットは次のとおりです。 各パラメーターは、次のように定義されます。
- model: 微調整するためのベースモデル。
- training_data: 基本モデルを微調整するためのトレーニング データ。
- validation_data: 基本モデルを微調整するための検証データ。
- タスク: 実行するタスクを微調整します。 例えば。 chat-completion 微調整ジョブの CHAT_COMPLETION。
- outputs: 登録済みのモデル名を出力します。
次のパラメーターは省略可能です。
- ハイパーパラメーター: 実行時の微調整動作を制御するパラメーター。
- name: 微調整ジョブ名
- experiment_name: 微調整ジョブの実験名。
- display_name: ジョブの表示名を微調整します。
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid
guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"
finetuning_job = create_finetuning_job(
task=FineTuningTaskType.CHAT_COMPLETION,
training_data=train_data_asset.id,
validation_data=validation_data_asset.id,
hyperparameters={
"per_device_train_batch_size": "1",
"learning_rate": "0.00002",
"num_train_epochs": "1",
},
model=model_to_finetune.id,
display_name=display_name,
name=name,
experiment_name=experiment_name,
tags={"foo_tag": "bar"},
properties={"my_property": "my_value"},
output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)
status = workspace_ml_client.jobs.get(created_job.name).status
import time
while True:
status = workspace_ml_client.jobs.get(created_job.name).status
print(f"Current job status: {status}")
if status in ["Failed", "Completed", "Canceled"]:
print("Job has finished with status: {0}".format(status))
break
else:
print("Job is still running. Checking again in 30 seconds.")
time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name
微調整されたモデルをデプロイする
微調整ジョブが成功したら、カスタム モデルをデプロイできます。
重要
カスタマイズされたモデルをデプロイし、エンドポイントで終了したら、アクティブでないエンドポイントをクリーンアップすることを忘れないでください。 非アクティブなデプロイを削除しても、基になるカスタマイズされたモデルは削除されることも影響を受けることもなく、カスタマイズされたモデルはいつでも再デプロイできます。 Azure AI Foundry の価格で説明されているように、デプロイされるカスタマイズされた (微調整された) モデルごとに、完了またはチャット完了の呼び出しがモデルに対して行われているかどうかにかかわらず、1 時間ごとのホスティング コストが発生します。 Azure AI Foundry を使用したコストの計画と管理の詳細については、「 Azure AI Foundry Service のコストを管理する計画」のガイダンスを参照してください。
# Deploy the model as a serverless endpoint
endpoint_name = f"{normalized_model_name}-ft-{short_guid}" # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"
微調整でサポートされるエンタープライズ シナリオ
標準的な展開の微調整では、いくつかのエンタープライズ シナリオがサポートされています。 下の表は、エンタープライズ シナリオ内での円滑な運用を保証するために、ユーザー ストレージ のネットワークと認証でサポートされている構成の概要を示しています。
注
- データ接続の認証は、データセットが格納されているデータストア接続をクリックし、 アクセスの詳細>認証方法 の設定に移動することで、AI Foundry を介して変更できます。
- ストレージ認証は、Azure Storage >[設定]>[構成 ] ページ >[ストレージ アカウント キー アクセスを許可] で変更できます。
- ストレージ ネットワークは、Azure Storage >[ネットワーク] ページで変更できます。
ストレージ ネットワーク | ストレージ認証 | データ接続認証 | サポート |
---|---|---|---|
パブリック ネットワーク アクセス = 有効 | アカウント キーが有効 | SAS/アカウント キー | はい、UX と SDK |
パブリック ネットワーク アクセス = 有効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK 注: (UX の場合) ユーザー ID のストレージ BLOB データ 閲覧者またはストレージ BLOB データ共同作成者をストレージ アカウントで追加すること、または、アカウント キー/SAS トークンを使用するように接続の認証を変更することが必要な場合があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが有効 | アカウント キー | はい、UX と SDK 注: UX の場合、ブラウザーを実行しているコンピューティングの IP が選択された一覧に含まれている必要があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが有効 | SAS | はい、UX と SDK 注: UX の場合、ブラウザーを実行しているコンピューティングの IP が選択された一覧に含まれている必要があります |
選択した仮想ネットワークと IP アドレスから有効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK です。 注: (UX の場合) ユーザー ID のストレージ BLOB データ 閲覧者またはストレージ BLOB データ共同作成者をストレージ アカウントで追加すること、または、アカウント キー/SAS トークンを使用するように接続の認証を変更することが必要な場合があります。 また、ブラウザーを実行しているコンピューティングの IP は、選択された一覧に確実に含まれている必要があります |
公衆ネットワーク アクセス = 無効 | アカウント キーが有効 | SAS/アカウント キー | はい、UX と SDK です。 注: UX データのアップロードと送信が機能するためには、ワークスペースが、ストレージへの適切なアクセス権を持つ Vnet 内からアクセスされる必要があります |
公衆ネットワーク アクセス = 無効 | アカウント キーが無効 | Entra ベースの認証 (認証情報なし) | はい、UX と SDK です。 注: UX データのアップロードと送信が機能するためには、ワークスペースが、ストレージへの適切なアクセス権を持つ Vnet 内からアクセスされる必要があります |
同時に、上記のシナリオが、マネージド VNET のワークスペースで機能することも必要です。 「マネージド Vnet AI Foundry ハブのセットアップ」を参照してください。 Azure AI Foundry ハブのマネージド ネットワークを構成する方法
カスタマー マネージド キー (CMK) は、標準の展開の微調整でサポートされるエンタープライズ シナリオではありません。
ワークスペースとストレージ上の一意のネットワークセットアップに関する微調整の問題は、通常、ネットワークセットアップの問題を指しています。
リージョン間でのデプロイ
微調整では、微調整されたモデルを、モデルが最初に微調整された場所とは異なるリージョンにデプロイすることがサポートされています。 別のサブスクリプション/リージョンにデプロイすることもできます。 唯一の制限事項は、新しいリージョンでも微調整をサポートする必要があり、クロス サブスクリプションをデプロイする場合、デプロイの承認トークンを生成するアカウントは、ソース サブスクリプションと移行先サブスクリプションの両方にアクセスできる必要があります。 サブスクリプション/リージョン間のデプロイは、Python を使用して実現できます
# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
DefaultAzureCredential,
InteractiveBrowserCredential,
)
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
credential = InteractiveBrowserCredential()
try:
workspace_ml_client = MLClient.from_config(credential=credential)
except:
workspace_ml_client = MLClient(
credential,
subscription_id="<TARGET_SUBSCRIPTION_ID>",
resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
workspace_name="<TARGET_PROJECT_NAME>",
)
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
print(f"Creating endpoint in the region:{workspace_region}")
serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
serverless_endpoint
).result()
else:
raise ValueError(
f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
)
デプロイされたカスタム モデルを使用する
カスタム モデルは、デプロイ後、他のデプロイ済みモデルと同様に使用できます。 他のデプロイ済みモデルと同様に、温度やmax_tokensなどのカスタム モデルでも引き続き同じパラメーターを使用できます。
endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key
import requests
url = f"{endpoint.scoring_uri}/v1/chat/completions"
payload = {
"max_tokens": 1024,
"messages": [
{
"content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
"role": "user",
}
],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}
response = requests.post(url, json=payload, headers=headers)
response.json()
微調整されたモデルのクリーンアップ
モデルが完成したら、次のコードを実行して、微調整されたモデルをクリーンアップします。
workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()
標準デプロイとしてデプロイされるモデルのコストとクォータに関する考慮事項
クォータはデプロイごとに管理されます。 各デプロイのレート制限は、1 分あたり 200,000 トークン、1 分あたり 1,000 個の API 要求です。 ただし、現在、プロジェクトのモデルごとに 1 つのデプロイに制限しています。 現在のレート制限がシナリオに十分でない場合は、Microsoft Azure サポートにお問い合わせください。
Microsoft モデルのコスト
価格情報は、Microsoft モデル (Phi-3 モデルなど) を標準のデプロイとして展開するときに、展開ウィザードの [価格と用語 ] タブで確認できます。
Microsoft 以外のモデルのコスト
標準デプロイとしてデプロイされた Microsoft 以外のモデルは、Azure Marketplace を通じて提供され、使用するために Azure AI Foundry と統合されます。 これらのモデルをデプロイまたは微調整する場合は、Azure Marketplace の価格を確認できます。
プロジェクトで Azure Marketplace から特定のプランをサブスクライブするたびに、その消費に関連するコストを追跡するための新しいリソースが作成されます。 推論と微調整に関連するコストを追跡するために同じリソースが使用されますが、各シナリオを個別に追跡するために複数の測定値を使用できます。
コストを追跡する方法の詳細については、「Azure Marketplace を通じて提供されるモデルのコストを監視する」を参照してください。
サンプル ノートブック
このサンプル ノートブックを使ってスタンドアロンの微調整ジョブを作成すると、Samsum データセットを使って 2 人のユーザー間のやり取りを要約するモデルの機能を強化できます。 使用されるトレーニング データは、ultrachat_200k データセットです。これは、監視対象の微調整 (sft) と生成ランク付け (gen) に適した 4 つの分割に分かれています。 ノートブックでは、チャット完了タスクに使用できる Azure AI モデルが採用されています (ノートブックで使用されているものとは異なるモデルを使用する場合は、モデル名を置き換えることができます)。 ノートブックには、前提条件の設定、微調整するモデルの選択、トレーニングデータセットと検証データセットの作成、微調整ジョブの構成と送信、最後に、サンプル推論用に微調整されたモデルを使用したサーバーレスデプロイの作成が含まれます。
サンプル CLI
さらに、このサンプル CLI を使用してスタンドアロンの微調整ジョブを作成し、データセットを使用して 2 人のユーザー間のダイアログを集計するモデルの機能を強化できます。
type: finetuning
name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model:
path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
type: mlflow_model
training_data: train.jsonl
validation_data:
path: validation.jsonl
type: uri_file
hyperparameters:
num_train_epochs: "1"
per_device_train_batch_size: "1"
learning_rate: "0.00002"
properties:
my_property: "my_value"
tags:
foo_tag: "bar"
outputs:
registered_model:
name: "Phi-3-mini-4k-instruct-finetuned-model"
type: mlflow_model
使用されるトレーニング データは、SDK ノートブックで示されているものと同じです。 CLI では、チャット完了タスク用に使用可能な Azure AI モデルが採用されています。 CLI サンプルのモデルとは異なるモデルを使用する場合は、それに応じて、"model path" などの引数を更新できます。
コンテンツ フィルター
標準デプロイ モデルは、Azure AI Content Safety によって保護されます。 リアルタイム エンドポイントにデプロイするときは、この機能をオプトアウトできます。 Azure AI Content Safety を有効にすると、プロンプトと完了の両方が、有害なコンテンツの出力の検出と防止を目的とした分類モデルのアンサンブルを通過します。 コンテンツ フィルタリング システムは、入力プロンプトと出力入力候補の両方で、有害な可能性があるコンテンツの特定のカテゴリを検出してアクションを実行します。 Azure AI Content Safety の詳細を確認します。