VS Codeのエージェントモードを拡張するには、を試してください!

モデルをファインチューニングする

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 をプロビジョニングすることをサポートするようになりました。

クラウド環境をセットアップする

  1. リモート Azure Container Apps 環境でモデルのファインチューニングと推論を実行するには、サブスクリプションに十分な GPU 容量があることを確認してください。アプリケーションに必要な容量を要求するには、サポートチケットを送信してください。GPU 容量の詳細はこちら

  2. HuggingFace でプライベートデータセットを使用している場合、またはベースモデルでアクセス制御が必要な場合は、HuggingFace アカウントがあること、およびアクセス トークンを生成していることを確認してください。

  3. Mistral または Llama をファインチューニングする場合は、HuggingFace で LICENSE を承認してください。

  4. VS Code 用 AI Toolkit でリモート ファインチューニングと推論の機能フラグを有効にする

    1. ファイル -> 設定 -> 設定を選択して、VS Code の設定を開きます。
    2. 拡張機能に移動し、AI Toolkitを選択します。
    3. 「Azure Container Apps でファインチューニングと推論を実行することを有効にする」オプションを選択します。

    AI Toolkit Settings

    1. 変更を適用するために VS Code を再ロードします。

ファインチューニング プロジェクトをスキャフォールドする

  1. コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) でAI Toolkit: ツール ビューにフォーカスを実行します。
  2. ファインチューニングに移動して、モデル カタログにアクセスします。ファインチューニングするモデルを選択します。プロジェクトに名前を割り当て、マシン上の場所を選択します。次に、「プロジェクトの構成」ボタンをクリックします。パネル: モデルの選択
  3. プロジェクトの構成
    1. 「ローカルでファインチューニング」オプションは有効にしないでください。
    2. Olive の構成設定が、事前設定されたデフォルト値とともに表示されます。必要に応じて、これらの構成を調整し、入力してください。
    3. プロジェクトの生成に進みます。このステージでは WSL を利用し、新しい Conda 環境を設定し、Dev Container を含む将来の更新に備えます。パネル: モデルの構成
    4. 「ワークスペースでウィンドウを再起動」を選択して、ファインチューニング プロジェクトを開きます。パネル: プロジェクトの生成

プロジェクトは現在、VS Code 用 AI Toolkit 内でローカルまたはリモートで動作します。プロジェクト作成時に「ローカルでファインチューニング」を選択した場合、クラウド リソースなしで WSL 内でのみ実行されます。それ以外の場合、プロジェクトはリモート Azure Container App 環境での実行に制限されます。

Azure リソースのプロビジョニング

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

Provision Fine-Tuning

出力チャネルに表示されるリンクからプロビジョニングの進行状況を監視します。プロビジョニングの進行状況

ファインチューニングを実行する

リモート ファインチューニング ジョブを開始するには、コマンド パレットでAI Toolkit: ファインチューニングを実行コマンドを実行します。

Run Fine-tuning

拡張機能は以下の操作を実行します。

  1. ワークスペースを Azure Files と同期する。

  2. ./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という名前のファイル共有を見つけることもできます。

file-share

ログを表示する

ファインチューニング ジョブが開始されたら、Azure ポータルにアクセスしてシステムログとコンソールログにアクセスできます。

または、VSCode の出力パネルでコンソールログを直接表示することもできます。

log-button

ジョブが開始されるまでに数分かかる場合があります。すでに実行中のジョブがある場合、現在のジョブは後で開始するためにキューに入れられる可能性があります。

Azure でログを表示およびクエリする

ファインチューニング ジョブがトリガーされたら、VSCode の通知から「Azure ポータルでログを開く」ボタンを選択して Azure でログを表示できます。

または、すでに Azure ポータルを開いている場合は、「実行履歴」パネルから Azure Container Apps ジョブのジョブ履歴を見つけます。

Job Execution History

ログには「コンソール」と「システム」の 2 種類があります。

  • コンソールログは、stderrおよびstdoutメッセージを含む、アプリからのメッセージです。これは、ストリーミングログのセクションですでに確認したものです。
  • システムログは、サービスレベルイベントのステータスを含む、Azure Container Apps サービスからのメッセージです。

ログを表示およびクエリするには、「コンソール」ボタンを選択し、Log Analytics ページに移動して、すべてのログを表示し、クエリを作成できます。

Job Log Analytics

Azure Container Apps Logs の詳細については、Azure Container Apps のアプリケーション ロギングを参照してください。

VSCode でストリーミングログを表示する

ファインチューニング ジョブを開始した後、VSCode の通知で「VS Code でストリーミング ログを表示」ボタンを選択して Azure でログを表示することもできます。

または、コマンド パレットでAI Toolkit: 実行中のファインチューニング ジョブのストリーミング ログを表示コマンドを実行することもできます。

Streaming Log Command

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

Streaming Log Output

リソース不足によりジョブがキューに入れられる場合があります。ログが表示されない場合は、しばらく待ってからコマンドを実行してストリーミング ログに再接続してください。ストリーミング ログはタイムアウトして切断される場合があります。ただし、コマンドを再度実行することで再接続できます。

ファインチューニングされたモデルでの推論

アダプターがリモート環境でトレーニングされたら、シンプルな Gradio アプリケーションを使用してモデルと対話します。

Fine-tune complete

Azure リソースのプロビジョニング

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

Provision Inference Resource

デフォルトでは、推論用のサブスクリプションとリソース グループは、ファインチューニングに使用されたものと一致する必要があります。推論は同じ Azure Container App 環境を使用し、ファインチューニング手順中に生成された Azure Files に保存されているモデルとモデルアダプターにアクセスします。

推論のためのデプロイ

推論コードを修正したり、推論モデルを再ロードしたりする場合は、AI Toolkit: 推論のためにデプロイコマンドを実行してください。これにより、最新のコードが ACA と同期され、レプリカが再起動されます。

Deploy for inference

デプロイが正常に完了したら、モデルはこのエンドポイントを使用して評価する準備が整いました。VSCode の通知に表示される「推論エンドポイントに移動」ボタンを選択すると、推論 API にアクセスできます。または、Web API エンドポイントは、./infra/inference.config.jsonおよび出力パネルのACA_APP_ENDPOINTの下にあります。

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に保存) にシークレットを入力できます。これらのシークレットは、すべてのコンテナで環境変数として設定されます。

手順

  1. コマンド パレットで、AI Toolkit: ファインチューニング用の Azure Container Apps ジョブ シークレットを追加と入力して選択します。

    Add secret

  2. シークレット名と値を入力します。シークレットの名前と値を入力するように求められます。シークレット名を入力 シークレットを入力 たとえば、プライベートな 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 リソースのプロビジョニング、ファインチューニング ジョブの実行、推論のためのモデルのデプロイなど、ファインチューニング プロジェクトを管理する。