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

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

クラウド環境のセットアップ

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

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

  3. Mistral または Llama をファインチューニングする場合は、HuggingFace でライセンス(LICENSE)に同意してください。

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

    1. ファイル -> ユーザー設定 -> 設定を選択して、VS Code の設定を開きます。
    2. 拡張機能に移動し、Foundry Toolkit を選択します。
    3. "Enable to run fine-tuning and inference on Azure Container Apps" オプションを選択します。

    Foundry Toolkit Settings

    1. 変更を有効にするために VS Code を再読み込みします。

ファインチューニングプロジェクトの作成

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

Provision Fine-Tuning

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

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

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

Run Fine-tuning

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

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

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

file-share

ログの表示

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

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

log-button

注意

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

Azure でのログの表示とクエリ

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

または、すでに Azure ポータルを開いている場合は、Azure Container Apps ジョブの "実行履歴" (Execution history) パネルからジョブ履歴を確認できます。

Job Execution History

ログには、"Console" (コンソール) と "System" (システム) の 2 種類があります。

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

ログを表示してクエリを実行するには、"Console" ボタンを選択して Log Analytics ページに移動します。そこですべてのログを表示し、クエリを記述できます。

Job 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 コマンドを実行することもできます。

Streaming Log Command

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

Streaming Log Output

注意

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

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

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

Fine-tune complete

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

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

Provision Inference Resource

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

推論用のデプロイ

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

Deploy for inference

デプロイが正常に完了すると、モデルはこのエンドポイントを使用して評価できるようになります。VSCode の通知に表示される "Go to Inference Endpoint" ボタンを選択すると、推論 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 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 に保存されているもの)にシークレットを入力できます。これらのシークレットは、すべてのコンテナーで環境変数として設定されます。

手順

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

    Add secret

  2. シークレットの名前と値を指定します。

    Input secret name

    Input secret

    たとえば、プライベートな 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 リソースのプロビジョニング、ファインチューニングジョブの実行、推論用のモデルのデプロイなど、ファインチューニングプロジェクトを管理します。
© . This site is unofficial and not affiliated with Microsoft.