モデルをファインチューニングする
AI モデルのファインチューニングは、カスタムデータセットを使用して、GPU を備えた計算環境で事前学習済みモデルに対してファインチューニングジョブを実行する一般的な方法です。AI Toolkit は現在、GPU を使用してローカルマシンで、またはクラウド (Azure Container App) で GPU を使用して SLM をファインチューニングすることをサポートしています。
ファインチューニングされたモデルは、ローカルにダウンロードして GPU で推論テストを実行することも、ローカルで CPU で実行するために量子化することもできます。ファインチューニングされたモデルは、リモートモデルとしてクラウド環境にデプロイすることもできます。
VS Code (プレビュー) 用 AI Toolkit を使用して Azure で AI モデルをファインチューニングする
VS Code 用 AI Toolkit は、モデルのファインチューニングを実行し、クラウドで推論エンドポイントをホストするために Azure Container App をプロビジョニングすることをサポートするようになりました。
クラウド環境をセットアップする
-
リモート Azure Container Apps 環境でモデルのファインチューニングと推論を実行するには、サブスクリプションに十分な GPU 容量があることを確認してください。アプリケーションに必要な容量を要求するには、サポートチケットを送信してください。GPU 容量の詳細はこちら
-
HuggingFace でプライベートデータセットを使用している場合、またはベースモデルでアクセス制御が必要な場合は、HuggingFace アカウントがあること、およびアクセス トークンを生成していることを確認してください。
-
Mistral または Llama をファインチューニングする場合は、HuggingFace で LICENSE を承認してください。
-
VS Code 用 AI Toolkit でリモート ファインチューニングと推論の機能フラグを有効にする
- ファイル -> 設定 -> 設定を選択して、VS Code の設定を開きます。
- 拡張機能に移動し、AI Toolkitを選択します。
- 「Azure Container Apps でファインチューニングと推論を実行することを有効にする」オプションを選択します。
- 変更を適用するために VS Code を再ロードします。
ファインチューニング プロジェクトをスキャフォールドする
- コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) で
AI Toolkit: ツール ビューにフォーカス
を実行します。 ファインチューニング
に移動して、モデル カタログにアクセスします。ファインチューニングするモデルを選択します。プロジェクトに名前を割り当て、マシン上の場所を選択します。次に、「プロジェクトの構成」ボタンをクリックします。- プロジェクトの構成
- 「ローカルでファインチューニング」オプションは有効にしないでください。
- Olive の構成設定が、事前設定されたデフォルト値とともに表示されます。必要に応じて、これらの構成を調整し、入力してください。
- プロジェクトの生成に進みます。このステージでは WSL を利用し、新しい Conda 環境を設定し、Dev Container を含む将来の更新に備えます。
- 「ワークスペースでウィンドウを再起動」を選択して、ファインチューニング プロジェクトを開きます。
プロジェクトは現在、VS Code 用 AI Toolkit 内でローカルまたはリモートで動作します。プロジェクト作成時に「ローカルでファインチューニング」を選択した場合、クラウド リソースなしで WSL 内でのみ実行されます。それ以外の場合、プロジェクトはリモート Azure Container App 環境での実行に制限されます。
Azure リソースのプロビジョニング
まず、リモート ファインチューニング用の Azure リソースをプロビジョニングする必要があります。コマンド パレットからAI Toolkit: ファインチューニング用の Azure Container Apps ジョブをプロビジョニング
を見つけて実行します。このプロセス中に、Azure サブスクリプションとリソース グループを選択するように求められます。
出力チャネルに表示されるリンクからプロビジョニングの進行状況を監視します。
ファインチューニングを実行する
リモート ファインチューニング ジョブを開始するには、コマンド パレットでAI Toolkit: ファインチューニングを実行
コマンドを実行します。
拡張機能は以下の操作を実行します。
-
ワークスペースを Azure Files と同期する。
-
./infra/fintuning.config.json
で指定されたコマンドを使用して Azure Container App ジョブをトリガーする。
QLoRA がファインチューニングに使用され、ファインチューニング プロセスは推論中にモデルが使用する LoRA アダプターを作成します。
ファインチューニングの結果は Azure Files に保存されます。Azure File Share の出力ファイルを確認するには、出力パネルに表示されるリンクを使用して Azure ポータルに移動します。または、直接 Azure ポータルにアクセスし、./infra/fintuning.config.json
で定義されているSTORAGE_ACCOUNT_NAME
という名前のストレージ アカウントと、./infra/fintuning.config.json
で定義されているFILE_SHARE_NAME
という名前のファイル共有を見つけることもできます。
ログを表示する
ファインチューニング ジョブが開始されたら、Azure ポータルにアクセスしてシステムログとコンソールログにアクセスできます。
または、VSCode の出力パネルでコンソールログを直接表示することもできます。
ジョブが開始されるまでに数分かかる場合があります。すでに実行中のジョブがある場合、現在のジョブは後で開始するためにキューに入れられる可能性があります。
Azure でログを表示およびクエリする
ファインチューニング ジョブがトリガーされたら、VSCode の通知から「Azure ポータルでログを開く」ボタンを選択して Azure でログを表示できます。
または、すでに Azure ポータルを開いている場合は、「実行履歴」パネルから Azure Container Apps ジョブのジョブ履歴を見つけます。
ログには「コンソール」と「システム」の 2 種類があります。
- コンソールログは、
stderr
およびstdout
メッセージを含む、アプリからのメッセージです。これは、ストリーミングログのセクションですでに確認したものです。 - システムログは、サービスレベルイベントのステータスを含む、Azure Container Apps サービスからのメッセージです。
ログを表示およびクエリするには、「コンソール」ボタンを選択し、Log Analytics ページに移動して、すべてのログを表示し、クエリを作成できます。
Azure Container Apps Logs の詳細については、Azure Container Apps のアプリケーション ロギングを参照してください。
VSCode でストリーミングログを表示する
ファインチューニング ジョブを開始した後、VSCode の通知で「VS Code でストリーミング ログを表示」ボタンを選択して Azure でログを表示することもできます。
または、コマンド パレットでAI Toolkit: 実行中のファインチューニング ジョブのストリーミング ログを表示
コマンドを実行することもできます。
実行中のファインチューニング ジョブのストリーミング ログは、出力パネルに表示されます。
リソース不足によりジョブがキューに入れられる場合があります。ログが表示されない場合は、しばらく待ってからコマンドを実行してストリーミング ログに再接続してください。ストリーミング ログはタイムアウトして切断される場合があります。ただし、コマンドを再度実行することで再接続できます。
ファインチューニングされたモデルでの推論
アダプターがリモート環境でトレーニングされたら、シンプルな Gradio アプリケーションを使用してモデルと対話します。
Azure リソースのプロビジョニング
ファインチューニング プロセスと同様に、コマンド パレットからAI Toolkit: 推論用に Azure Container Apps をプロビジョニング
を実行して、リモート推論用の Azure リソースを設定する必要があります。この設定中に、Azure サブスクリプションとリソース グループを選択するように求められます。
デフォルトでは、推論用のサブスクリプションとリソース グループは、ファインチューニングに使用されたものと一致する必要があります。推論は同じ Azure Container App 環境を使用し、ファインチューニング手順中に生成された Azure Files に保存されているモデルとモデルアダプターにアクセスします。
推論のためのデプロイ
推論コードを修正したり、推論モデルを再ロードしたりする場合は、AI Toolkit: 推論のためにデプロイ
コマンドを実行してください。これにより、最新のコードが ACA と同期され、レプリカが再起動されます。
デプロイが正常に完了したら、モデルはこのエンドポイントを使用して評価する準備が整いました。VSCode の通知に表示される「推論エンドポイントに移動」ボタンを選択すると、推論 API にアクセスできます。または、Web API エンドポイントは、./infra/inference.config.json
および出力パネルのACA_APP_ENDPOINT
の下にあります。
推論エンドポイントが完全に動作するまでに数分かかる場合があります。
高度な使用法
ファインチューニング プロジェクト コンポーネント
フォルダー | 内容 |
---|---|
infra |
リモート操作に必要なすべての構成が含まれています。 |
infra/provision/finetuning.parameters.json |
ファインチューニング用の Azure リソースのプロビジョニングに使用される bicep テンプレートのパラメーターを保持します。 |
infra/provision/finetuning.bicep |
ファインチューニング用の Azure リソースをプロビジョニングするためのテンプレートが含まれています。 |
infra/finetuning.config.json |
AI Toolkit: ファインチューニング用の Azure Container Apps ジョブをプロビジョニング コマンドによって生成された構成ファイルです。他のリモート コマンド パレットへの入力として使用されます。 |
Azure Container Apps でファインチューニング用のシークレットを構成する
Azure Container App Secrets は、HuggingFace トークンや Weights & Biases API キーなどの機密データを Azure Container Apps 内で安全に保存および管理する方法を提供します。AI ツールキットのコマンド パレットを使用すると、プロビジョニングされた Azure コンテナ アプリ ジョブ (./finetuning.config.json
に保存) にシークレットを入力できます。これらのシークレットは、すべてのコンテナで環境変数として設定されます。
手順
-
コマンド パレットで、
AI Toolkit: ファインチューニング用の Azure Container Apps ジョブ シークレットを追加
と入力して選択します。 -
シークレット名と値を入力します。シークレットの名前と値を入力するように求められます。
たとえば、プライベートな HuggingFace データセットまたは Hugging Face アクセス制御が必要なモデルを使用している場合は、Hugging Face Hub での手動ログインを避けるために、HuggingFace トークンを環境変数
HF_TOKEN
として設定します。
シークレットを設定したら、Azure Container App で使用できるようになります。シークレットは、コンテナ アプリの環境変数に設定されます。
ファインチューニング用の Azure リソース プロビジョニングを構成する
このガイドは、AI Toolkit: ファインチューニング用の Azure Container Apps ジョブをプロビジョニング
コマンドを構成するのに役立ちます。
./infra/provision/finetuning.parameters.json
ファイルで構成パラメーターを見つけることができます。詳細は次のとおりです。
パラメーター | 説明 |
---|---|
defaultCommands |
これは、ファインチューニング ジョブを開始するためのデフォルト コマンドです。./infra/finetuning.config.json で上書きできます。 |
maximumInstanceCount |
このパラメーターは、GPU インスタンスの最大容量を設定します。 |
timeout |
これは、Azure Container App のファインチューニング ジョブのタイムアウトを秒単位で設定します。デフォルト値は 10800 で、3 時間に相当します。Azure Container App ジョブがこのタイムアウトに達すると、ファインチューニング プロセスは停止します。ただし、チェックポイントはデフォルトで保存されるため、再度実行された場合、ファインチューニング プロセスは最初からではなく、最後のチェックポイントから再開できます。 |
location |
これは、Azure リソースがプロビジョニングされる場所です。デフォルト値は、選択したリソース グループの場所と同じです。 |
storageAccountName , fileShareName acaEnvironmentName , acaEnvironmentStorageName , acaJobName , acaLogAnalyticsName |
これらのパラメーターは、プロビジョニング用の Azure リソースに名前を付けるために使用されます。新しく未使用のリソース名を入力して独自のカスタム名のリソースを作成することも、既存の Azure リソースの名前を入力してそれを使用することもできます。詳細については、「既存の Azure リソースの使用」セクションを参照してください。 |
既存の Azure リソースを使用する
ファインチューニング用に構成する必要がある既存の Azure リソースがある場合は、./infra/provision/finetuning.parameters.json
ファイルでそれらの名前を指定し、コマンド パレットからAI Toolkit: ファインチューニング用の Azure Container Apps ジョブをプロビジョニング
を実行します。これにより、指定したリソースが更新され、不足しているリソースが作成されます。
たとえば、既存の Azure コンテナ環境がある場合、./infra/finetuning.parameters.json
は次のようになります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
...
"acaEnvironmentName": {
"value": "<your-aca-env-name>"
},
"acaEnvironmentStorageName": {
"value": null
},
...
}
}
手動プロビジョニング
Azure リソースを手動で設定する場合は、./infra/provision
フォルダーにある bicep ファイルを使用できます。AI Toolkit コマンド パレットを使用せずにすべての Azure リソースをすでに設定および構成している場合は、finetune.config.json
ファイルにリソース名を簡単に入力できます。
例
{
"SUBSCRIPTION_ID": "<your-subscription-id>",
"RESOURCE_GROUP_NAME": "<your-resource-group-name>",
"STORAGE_ACCOUNT_NAME": "<your-storage-account-name>",
"FILE_SHARE_NAME": "<your-file-share-name>",
"ACA_JOB_NAME": "<your-aca-job-name>",
"COMMANDS": [
"cd /mount",
"pip install huggingface-hub==0.22.2",
"huggingface-cli download <your-model-name> --local-dir ./model-cache/<your-model-name> --local-dir-use-symlinks False",
"pip install -r ./setup/requirements.txt",
"python3 ./finetuning/invoke_olive.py && find models/ -print | grep adapter/adapter"
]
}
テンプレートに含まれる推論コンポーネント
フォルダー | 内容 |
---|---|
infra |
リモート操作に必要なすべての構成が含まれています。 |
infra/provision/inference.parameters.json |
推論用の Azure リソースのプロビジョニングに使用される bicep テンプレートのパラメーターを保持します。 |
infra/provision/inference.bicep |
推論用の Azure リソースをプロビジョニングするためのテンプレートが含まれています。 |
infra/inference.config.json |
AI Toolkit: 推論用に Azure Container Apps をプロビジョニング コマンドによって生成された構成ファイルです。他のリモート コマンド パレットへの入力として使用されます。 |
Azure リソース プロビジョニングの構成
このガイドは、AI Toolkit: 推論用に Azure Container Apps をプロビジョニング
コマンドを構成するのに役立ちます。
./infra/provision/inference.parameters.json
ファイルで構成パラメーターを見つけることができます。詳細は次のとおりです。
パラメーター | 説明 |
---|---|
defaultCommands |
これは、Web API を初期化するコマンドです。 |
maximumInstanceCount |
このパラメーターは、GPU インスタンスの最大容量を設定します。 |
location |
これは、Azure リソースがプロビジョニングされる場所です。デフォルト値は、選択したリソース グループの場所と同じです。 |
storageAccountName , fileShareName acaEnvironmentName , acaEnvironmentStorageName , acaAppName , acaLogAnalyticsName |
これらのパラメーターは、プロビジョニング用の Azure リソースに名前を付けるために使用されます。デフォルトでは、ファインチューニング リソース名と同じになります。新しく未使用のリソース名を入力して独自のカスタム名のリソースを作成することも、既存の Azure リソースの名前を入力してそれを使用することもできます。詳細については、「既存の Azure リソースの使用」セクションを参照してください。 |
既存の Azure リソースを使用する
デフォルトでは、推論プロビジョニングは、ファインチューニングに使用されたものと同じ Azure Container App Environment、Storage Account、Azure File Share、および Azure Log Analytics を使用します。推論 API のためだけに別の Azure Container App が作成されます。
ファインチューニング ステップ中に Azure リソースをカスタマイズした場合、または推論に独自の既存の Azure リソースを使用したい場合は、./infra/inference.parameters.json
ファイルでそれらの名前を指定します。次に、コマンド パレットからAI Toolkit: 推論用に Azure Container Apps をプロビジョニング
コマンドを実行します。これにより、指定されたリソースが更新され、不足しているリソースが作成されます。
たとえば、既存の Azure コンテナ環境がある場合、./infra/finetuning.parameters.json
は次のようになります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
...
"acaEnvironmentName": {
"value": "<your-aca-env-name>"
},
"acaEnvironmentStorageName": {
"value": null
},
...
}
}
手動プロビジョニング
Azure リソースを手動で構成する場合は、./infra/provision
フォルダーにある bicep ファイルを使用できます。AI Toolkit コマンド パレットを使用せずにすべての Azure リソースをすでに設定および構成している場合は、inference.config.json
ファイルにリソース名を簡単に入力できます。
例
{
"SUBSCRIPTION_ID": "<your-subscription-id>",
"RESOURCE_GROUP_NAME": "<your-resource-group-name>",
"STORAGE_ACCOUNT_NAME": "<your-storage-account-name>",
"FILE_SHARE_NAME": "<your-file-share-name>",
"ACA_APP_NAME": "<your-aca-name>",
"ACA_APP_ENDPOINT": "<your-aca-endpoint>"
}
学んだこと
この記事では、以下の方法を学びました。
- Azure Container Apps でのファインチューニングと推論をサポートするように VS Code 用 AI Toolkit を設定する。
- VS Code 用 AI Toolkit でファインチューニング プロジェクトを作成する。
- データセットの選択やトレーニング パラメーターなど、ファインチューニング ワークフローを構成する。
- ファインチューニング ワークフローを実行して、事前学習済みモデルを特定のデータセットに適応させる。
- メトリックやログを含む、ファインチューニング プロセスの結果を表示する。
- モデル推論とテストにサンプル ノートブックを使用する。
- ファインチューニング プロジェクトをエクスポートして他のユーザーと共有する。
- 異なるデータセットまたはトレーニング パラメーターを使用してモデルを再評価する。
- 失敗したジョブを処理し、再実行のために構成を調整する。
- サポートされているモデルとそのファインチューニングの要件を理解する。
- VS Code 用 AI Toolkit を使用して、Azure リソースのプロビジョニング、ファインチューニング ジョブの実行、推論のためのモデルのデプロイなど、ファインチューニング プロジェクトを管理する。