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

モデルのファインチューニング

AI モデルのファインチューニングは、独自のデータセットを使用して、GPU を備えたコンピューティング環境で事前学習済みモデルに対して**ファインチューニング**ジョブを実行できる一般的な手法です。AI Toolkit は現在、GPU を備えたローカルマシンまたはクラウド (Azure Container App) での 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 でライセンスに同意してください。

  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: Focus on Tools View を実行します。
  2. モデル カタログにアクセスするには Fine-tuning に移動します。ファインチューニングするモデルを選択します。プロジェクトに名前を割り当て、マシン上の場所を選択します。次に、「プロジェクトの構成」ボタンをクリックします。 パネル: モデルの選択
  3. プロジェクトの構成
    1. 「ローカルでファインチューニング」オプションを有効にしないでください。
    2. Olive の構成設定が、事前設定されたデフォルト値とともに表示されます。必要に応じて、これらの構成を調整して入力してください。
    3. [プロジェクトの生成] に進みます。この段階では WSL が活用され、新しい Conda 環境のセットアップが行われ、Dev Containers を含む将来の更新に備えます。 パネル: モデルの構成
    4. 「ワークスペースでウィンドウを再起動」を選択して、ファインチューニング プロジェクトを開きます。 パネル: プロジェクトの生成

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

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

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

Provision Fine-Tuning

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

ファインチューニングの実行

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

Run Fine-tuning

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

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

  2. ./infra/fintuning.config.json で指定されたコマンドを使用して Azure Container App ジョブをトリガーします。

ファインチューニングには QLoRA が使用され、ファインチューニング プロセスでは、推論中にモデルが使用する LoRA アダプターが作成されます。

ファインチューニングの結果は Azure Files に保存されます。Azure File share の出力ファイルを探索するには、出力パネルに表示されているリンクを使用して Azure portal に移動します。または、直接 Azure portal にアクセスし、./infra/fintuning.config.json で定義されている STORAGE_ACCOUNT_NAME という名前のストレージアカウントと、./infra/fintuning.config.json で定義されている FILE_SHARE_NAME という名前のファイル共有を探すこともできます。

file-share

ログの表示

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

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

log-button

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

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

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

または、すでに Azure Portal を開いている場合は、「実行履歴」パネルから Azure Container Apps ジョブのジョブ履歴を検索してください。

Job Execution History

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

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

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

Job Log Analytics

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

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

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

または、コマンドパレットで AI Toolkit: Show the running fine-tuning job streaming logs コマンドを実行することもできます。

Streaming Log Command

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

Streaming Log Output

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

ファインチューニング済みモデルでの推論

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

Fine-tune complete

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

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

Provision Inference Resource

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

推論のためのデプロイ

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

Deploy for inference

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

App Endpoint

推論エンドポイントが完全に機能するまでには数分かかる場合があります。

高度な使用法

ファインチューニング プロジェクトのコンポーネント

フォルダー 内容
infra リモート操作に必要なすべての構成が含まれています。
infra/provision/finetuning.parameters.json ファインチューニング用の Azure リソースをプロビジョニングするために使用される bicep テンプレートのパラメーターを保持します。
infra/provision/finetuning.bicep ファインチューニング用の Azure リソースをプロビジョニングするためのテンプレートが含まれています。
infra/finetuning.config.json AI Toolkit: Provision Azure Container Apps job for fine-tuning コマンドによって生成される構成ファイルです。他のリモート コマンドパレットの入力として使用されます。

Azure Container Apps でファインチューニング用のシークレットを構成する

Azure Container App シークレットは、HuggingFace トークンや Weights & Biases API キーなど、Azure Container Apps 内の機密データを安全に保存および管理するための方法を提供します。AI toolkit のコマンドパレットを使用すると、プロビジョニングされた Azure コンテナーアプリ ジョブ (./finetuning.config.json に保存されている) にシークレットを入力できます。これらのシークレットは、すべてのコンテナーで**環境変数**として設定されます。

手順

  1. コマンドパレットで、AI Toolkit: Add Azure Container Apps Job secret for fine-tuning と入力して選択します。

    Add secret

  2. シークレット名と値を入力してください。シークレットの名前と値の入力を求められます。 シークレット名の入力 シークレットの入力 たとえば、プライベートな HuggingFace データセットまたは Hugging Face アクセス制御が必要なモデルを使用している場合は、Hugging Face Hub での手動ログインが不要になるように、HuggingFace トークンを環境変数 HF_TOKEN として設定してください。

シークレットを設定すると、Azure Container App で使用できるようになります。シークレットはコンテナーアプリの環境変数に設定されます。

ファインチューニングのための Azure リソース プロビジョニングの構成

このガイドは、AI 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 リソースを使用する

ファインチューニング用に構成する必要がある既存の Azure リソースがある場合は、./infra/provision/finetuning.parameters.json ファイルでその名前を指定し、コマンドパレットから AI 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 ファイルを使用できます。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: Provision Azure Container Apps for inference コマンドによって生成される構成ファイルです。他のリモート コマンドパレットの入力として使用されます。

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

このガイドは、AI 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 リソースを使用する

デフォルトでは、推論プロビジョニングは、ファインチューニングに使用されたものと同じ Azure Container App 環境、ストレージアカウント、Azure ファイル共有、および Azure Log Analytics を使用します。推論 API のためだけに、個別の Azure Container App が作成されます。

ファインチューニング手順中に Azure リソースをカスタマイズしたか、推論に独自の既存の Azure リソースを使用したい場合は、./infra/inference.parameters.json ファイルでそれらの名前を指定します。その後、コマンドパレットから AI 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 ファイルを使用できます。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>"
}