モデルのファインチューニング
AI モデルのファインチューニングは、GPU を備えた計算環境で事前学習済みモデルに対してカスタムデータセットを使用してファインチューニングジョブを実行できるようにする一般的な手法です。Foundry Toolkit は現在、GPU を搭載したローカルマシン、または GPU を搭載したクラウド (Azure Container App) での SLM のファインチューニングをサポートしています。
ファインチューニングされたモデルは、ローカルにダウンロードして GPU で推論テストを行ったり、量子化して CPU 上でローカルに実行したりできます。また、ファインチューニングされたモデルは、リモートモデルとしてクラウド環境にデプロイすることもできます。
Foundry Toolkit for VS Code (プレビュー) を使用して Azure で AI モデルをファインチューニングする
Foundry Toolkit for VS Code は、モデルのファインチューニングを実行し、クラウドで推論エンドポイントをホストするための Azure Container App のプロビジョニングをサポートするようになりました。
クラウド環境のセットアップ
-
リモートの Azure Container Apps 環境でモデルのファインチューニングと推論を実行するには、サブスクリプションに十分な GPU 容量があることを確認してください。アプリケーションに必要な容量をリクエストするには、サポートチケットを送信してください。GPU 容量の詳細情報はこちら
-
HuggingFace のプライベートデータセットを使用している場合、またはベースモデルにアクセス制御が必要な場合は、HuggingFace アカウントを所有しており、アクセストークンを生成していることを確認してください。
-
Mistral または Llama をファインチューニングする場合は、HuggingFace でライセンス(LICENSE)に同意してください。
-
Foundry Toolkit for VS Code でリモートファインチューニングと推論の機能フラグを有効にする
- ファイル -> ユーザー設定 -> 設定を選択して、VS Code の設定を開きます。
- 拡張機能に移動し、Foundry Toolkit を選択します。
- "Enable to run fine-tuning and inference on Azure Container Apps" オプションを選択します。

- 変更を有効にするために VS Code を再読み込みします。
ファインチューニングプロジェクトの作成
- コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) で
Foundry Toolkit: Focus on Tools Viewを実行します。 Fine-tuningに移動してモデルカタログにアクセスします。ファインチューニングを行うモデルを選択します。プロジェクトに名前を割り当て、マシン上の場所を選択します。次に、"Configure Project" ボタンを押します。
- プロジェクトの構成
- "Fine-tune locally" オプションを有効にしないようにしてください。
- あらかじめ設定されたデフォルト値とともに Olive の構成設定が表示されます。必要に応じて、これらの構成を調整および入力してください。
- Generate Project に進みます。この段階では WSL を活用し、新しい Conda 環境のセットアップが含まれます。これは Dev Containers を含む将来のアップデートへの準備となります。

- "Relaunch Window In Workspace" を選択して、ファインチューニングプロジェクトを開きます。

プロジェクトは現在、Foundry Toolkit for VS Code 内でローカルまたはリモートのいずれかで動作します。プロジェクト作成時に "Fine-tune locally" を選択した場合、クラウド資源を使用せずに WSL 内でのみ実行されます。そうでない場合、プロジェクトはリモートの Azure Container App 環境でのみ実行されるように制限されます。
Azure リソースのプロビジョニング
開始するには、リモートファインチューニング用の Azure リソースをプロビジョニングする必要があります。コマンドパレットから Foundry Toolkit: Provision Azure Container Apps job for fine-tuning を見つけて実行します。このプロセスの実行中に、Azure サブスクリプションとリソースグループを選択するよう求められます。

出力チャネルに表示されるリンクからプロビジョニングの進行状況を監視します。
ファインチューニングの実行
リモートファインチューニングジョブを開始するには、コマンドパレットで Foundry Toolkit: Run fine-tuning コマンドを実行します。

その後、拡張機能は以下の操作を実行します。
-
ワークスペースを Azure Files と同期します。
-
./infra/fintuning.config.jsonで指定されたコマンドを使用して、Azure Container App ジョブをトリガーします。
ファインチューニングには QLoRA が使用され、ファインチューニングプロセスではモデルが推論中に使用するための LoRA アダプターが作成されます。
ファインチューニングの結果は Azure Files に保存されます。Azure ファイル共有内の出力ファイルを探索するには、出力パネルに表示されるリンクを使用して Azure ポータルに移動します。または、Azure ポータルに直接アクセスして、./infra/fintuning.config.json で定義されている STORAGE_ACCOUNT_NAME という名前のストレージアカウントと、./infra/fintuning.config.json で定義されている FILE_SHARE_NAME という名前のファイル共有を探すこともできます。

ログの表示
ファインチューニングジョブが開始されると、Azure ポータルにアクセスしてシステムログとコンソールログを確認できます。
または、VSCode の出力パネルでコンソールログを直接表示することもできます。

ジョブの開始には数分かかる場合があります。すでに実行中のジョブがある場合、現在のジョブは後で開始されるようにキューに入れられることがあります。
Azure でのログの表示とクエリ
ファインチューニングジョブがトリガーされた後、VSCode の通知から "Open Logs in Azure Portal" ボタンを選択して、Azure でログを表示できます。
または、すでに Azure ポータルを開いている場合は、Azure Container Apps ジョブの "実行履歴" (Execution history) パネルからジョブ履歴を確認できます。

ログには、"Console" (コンソール) と "System" (システム) の 2 種類があります。
- コンソールログは、
stderrおよびstdoutメッセージを含む、アプリからのメッセージです。これは、ストリーミングログセクションで既に表示されているものです。 - システムログは、サービスレベルのイベントのステータスを含む、Azure Container Apps サービスからのメッセージです。
ログを表示してクエリを実行するには、"Console" ボタンを選択して Log Analytics ページに移動します。そこですべてのログを表示し、クエリを記述できます。

Azure Container Apps ログの詳細については、Azure Container Apps でのアプリケーションのログ記録を参照してください。
VSCode でのストリーミングログの表示
ファインチューニングジョブを開始した後、VSCode の通知にある "Show Streaming Logs in VS Code" ボタンを選択して、Azure 上のログを表示することもできます。
または、コマンドパレットで Foundry Toolkit: Show the running fine-tuning job streaming logs コマンドを実行することもできます。

実行中のファインチューニングジョブのストリーミングログが出力パネルに表示されます。

リソース不足によりジョブがキューに入れられる場合があります。ログが表示されない場合は、しばらく待ってからコマンドを実行し、ストリーミングログに再接続してください。ストリーミングログはタイムアウトして切断されることがあります。ただし、コマンドを再実行することで再接続できます。
ファインチューニングされたモデルでの推論
リモート環境でアダプターがトレーニングされた後、シンプルな Gradio アプリケーションを使用してモデルと対話します。

Azure リソースのプロビジョニング
ファインチューニングプロセスと同様に、コマンドパレットから Foundry Toolkit: Provision Azure Container Apps for inference を実行して、リモート推論用の Azure リソースをセットアップする必要があります。このセットアップ中に、Azure サブスクリプションとリソースグループを選択するよう求められます。

デフォルトでは、推論用のサブスクリプションとリソースグループはファインチューニングで使用したものと一致する必要があります。推論では同じ Azure Container App 環境を使用し、ファインチューニングステップで生成され Azure Files に保存されたモデルとモデルアダプターにアクセスします。
推論用のデプロイ
推論コードを修正するか、推論モデルを再ロードする場合は、Foundry Toolkit: Deploy for inference コマンドを実行してください。これにより、最新のコードが ACA と同期され、レプリカが再起動されます。

デプロイが正常に完了すると、モデルはこのエンドポイントを使用して評価できるようになります。VSCode の通知に表示される "Go to Inference Endpoint" ボタンを選択すると、推論 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 |
Foundry Toolkit: Provision Azure Container Apps job for fine-tuning コマンドによって生成される構成ファイル。他のリモートコマンドパレットの入力として使用されます。 |
Azure Container Apps でのファインチューニング用シークレットの構成
Azure Container App のシークレットは、HuggingFace トークンや Weights & Biases API キーなどの機密データを Azure Container Apps 内で安全に保存および管理する方法を提供します。Foundry Toolkit のコマンドパレットを使用すると、プロビジョニングされた Azure Container App ジョブ(./finetuning.config.json に保存されているもの)にシークレットを入力できます。これらのシークレットは、すべてのコンテナーで環境変数として設定されます。
手順
-
コマンドパレットで、「
Foundry Toolkit: Add Azure Container Apps Job secret for fine-tuning」と入力して選択します。
-
シークレットの名前と値を指定します。


たとえば、プライベートな HuggingFace データセット、または Hugging Face のアクセス制御が必要なモデルを使用している場合は、Hugging Face Hub での手動ログインを不要にするために、HuggingFace トークンを環境変数
HF_TOKENとして設定します。
シークレットの設定が完了すると、Azure Container App 内で使用できるようになります。シークレットはコンテナーアプリの環境変数に設定されます。
ファインチューニング用の Azure リソースプロビジョニングの構成
このガイドでは、Foundry Toolkit: Provision Azure Container Apps job for fine-tuning コマンドの構成方法について説明します。
構成パラメーターは ./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 リソースがある場合は、./infra/provision/finetuning.parameters.json ファイルでそれらの名前を指定し、コマンドパレットから Foundry Toolkit: Provision Azure Container Apps job for fine-tuning を実行します。これにより、指定したリソースが更新され、不足しているリソースが作成されます。
たとえば、既存の 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 ファイルを使用できます。Foundry 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 |
Foundry Toolkit: Provision Azure Container Apps for inference コマンドによって生成される構成ファイル。他のリモートコマンドパレットの入力として使用されます。 |
Azure リソースプロビジョニングの構成
このガイドでは、Foundry Toolkit: Provision Azure Container Apps for inference コマンドの構成方法について説明します。
構成パラメーターは ./infra/provision/inference.parameters.json ファイルにあります。詳細は以下のとおりです。
| パラメーター | 説明 |
|---|---|
defaultCommands |
これは Web API を開始するためのコマンドです。 |
maximumInstanceCount |
このパラメーターは、GPU インスタンスの最大容量を設定します。 |
location |
これは Azure リソースがプロビジョニングされる場所(リージョン)です。デフォルト値は、選択されたリソースグループの場所と同じです。 |
storageAccountName, fileShareName acaEnvironmentName, acaEnvironmentStorageName, acaAppName, acaLogAnalyticsName |
これらのパラメーターは、プロビジョニングする Azure リソースに名前を付けるために使用されます。デフォルトでは、ファインチューニングリソース名と同じになります。新しく未使用のリソース名を入力して独自のカスタム名リソースを作成することも、すでに存在する Azure リソースの名前を入力してそれを使用することもできます。 |
既存の Azure リソースの使用
デフォルトでは、推論のプロビジョニングは、ファインチューニングで使用されたものと同じ Azure Container App 環境、ストレージアカウント、Azure ファイル共有、および Azure Log Analytics を使用します。推論 API 専用に、別の Azure Container App が作成されます。
ファインチューニングステップ中に Azure リソースをカスタマイズした場合、または推論に独自の既存の Azure リソースを使用したい場合は、./infra/inference.parameters.json ファイルでそれらの名前を指定します。その後、コマンドパレットから Foundry Toolkit: Provision Azure Container Apps for inference コマンドを実行します。これにより、指定したリソースが更新され、不足しているリソースが作成されます。
たとえば、既存の 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 ファイルを使用できます。Foundry 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 でのファインチューニングと推論をサポートするために、Foundry Toolkit for VS Code をセットアップします。
- Foundry Toolkit for VS Code でファインチューニングプロジェクトを作成します。
- データセットの選択やトレーニングパラメーターを含む、ファインチューニングのワークフローを構成します。
- ファインチューニングワークフローを実行して、事前学習済みモデルを特定のデータセットに適応させます。
- メトリクスやログを含む、ファインチューニングプロセスの結果を表示します。
- モデルの推論とテストにサンプルのノートブックを使用します。
- ファインチューニングプロジェクトをエクスポートして他の人と共有します。
- 異なるデータセットまたはトレーニングパラメーターを使用して、モデルを再評価します。
- 失敗したジョブに対処し、再実行のために構成を調整します。
- サポートされているモデルと、そのファインチューニングに必要な要件を理解します。
- Foundry Toolkit for VS Code を使用して、Azure リソースのプロビジョニング、ファインチューニングジョブの実行、推論用のモデルのデプロイなど、ファインチューニングプロジェクトを管理します。