🚀 VS Code でで入手!

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

AI モデルのファインチューンは、カスタムデータセットを使用して、GPU を備えたコンピューティング環境で事前トレーニング済みモデルに対してファインチューンジョブを実行できるようにする一般的な手法です。AI Toolkit は現在、GPU を搭載したローカルマシンまたは 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: ツールビューにフォーカス を実行します。
  2. ファインチューン に移動して、モデルカタログにアクセスします。ファインチューンするモデルを選択します。プロジェクトの名前を割り当て、マシン上の場所を選択します。次に、「プロジェクトの構成」 ボタンをクリックします。パネル: モデルの選択
  3. プロジェクト構成
    1. 「ローカルでファインチューン」 オプションを有効にすることは避けてください。
    2. Olive 構成設定がプリセットのデフォルト値で表示されます。必要に応じて、これらの構成を調整して入力してください。
    3. プロジェクトの生成 に進みます。この段階では WSL を活用し、Dev Container を含む将来のアップデートに備えて新しい Conda 環境をセットアップします。パネル: モデルの構成
    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 ファイル共有内の出力ファイルを確認するには、出力パネルに表示されるリンクを使用して 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: 実行中のファインチューンジョブのストリーミングログを表示 コマンドを実行することもできます。

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

手順

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

    Add secret

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

シークレットを設定したら、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 リソースがプロビジョニングされる場所です。デフォルト値は、選択したリソースグループの場所と同じです。
storageAccountNamefileShareNameacaEnvironmentNameacaEnvironmentStorageNameacaJobNameacaLogAnalyticsName これらのパラメーターは、プロビジョニング用の Azure リソースに名前を付けるために使用されます。新しい未使用のリソース名を入力して、独自のカスタム名前付きリソースを作成するか、既存の 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 リソースがプロビジョニングされる場所です。デフォルト値は、選択したリソースグループの場所と同じです。
storageAccountNamefileShareNameacaEnvironmentNameacaEnvironmentStorageNameacaAppNameacaLogAnalyticsName これらのパラメーターは、プロビジョニング用の Azure リソースに名前を付けるために使用されます。デフォルトでは、ファインチューンリソース名と同じになります。新しい未使用のリソース名を入力して、独自のカスタム名前付きリソースを作成するか、既存の Azure リソースを使用する場合は、既存の Azure リソースの名前を入力できます。詳細については、「既存の Azure リソースの使用」セクションを参照してください。

既存の Azure リソースの使用

デフォルトでは、推論プロビジョニングは、ファインチューンに使用されたものと同じ Azure Container App 環境、ストレージアカウント、Azure ファイル共有、および 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>"
}