微調模型

微調 (Fine-tune) 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 上的私有資料集,或您的基礎模型需要存取控制,請務必產生存取權杖 (access token)

  3. 如果您要微調 Mistral 或 Llama 模型,請務必在 HuggingFace 上接受其授權協議 (LICENSE)。

  4. 在 VS Code 的 AI Toolkit 中啟用「遠端微調與推論」功能旗標

    1. 選取 File -> Preferences -> Settings 開啟 VS Code 設定。
    2. 導覽至 Extensions 並選取 AI Toolkit
    3. 選取 "Enable to run fine-tuning and inference on Azure Container Apps" 選項。

    AI Toolkit Settings

    1. 重新載入 VS Code 以套用變更。

建立微調專案架構

  1. 在命令面板中執行 AI Toolkit: Focus on Tools View (⇧⌘P (Windows, Linux Ctrl+Shift+P))
  2. 導覽至 Fine-tuning 以存取模型目錄。選取一個模型進行微調。為您的專案命名並選取其在本機電腦上的位置。接著,點擊 "Configure Project" 按鈕。 面板:選取模型
  3. 專案設定
    1. 請避免啟用 "Fine-tune locally" 選項。
    2. Olive 設定選項將會顯示並預設為初始值。請視需要調整並填寫這些設定。
    3. 進入 Generate Project。此階段會利用 WSL 並建立新的 Conda 環境,為未來包含 Dev Containers 的更新做準備。面板:設定模型
    4. 選取 "Relaunch Window In Workspace" 以開啟您的微調專案。面板:產生專案
注意

目前該專案可在 AI Toolkit for VS Code 中選擇本機或遠端運作。如果您在建立專案時選擇 "Fine-tune locally",它將僅在 WSL 中執行,而不使用雲端資源。否則,專案將限制在遠端 Azure Container App 環境中執行。

佈建 Azure 資源

若要開始,您需要為遠端微調佈建 Azure 資源。請在命令面板中找到並執行 AI Toolkit: Provision Azure Container Apps job for fine-tuning。在此過程中,系統會提示您選取 Azure 訂閱和資源群組。

Provision Fine-Tuning

透過輸出頻道 (Output channel) 中顯示的連結監控佈建進度。佈建進度

執行微調

若要啟動遠端微調工作,請在命令面板中執行 AI Toolkit: Run fine-tuning 指令。

Run Fine-tuning

擴充功能將執行下列操作

  1. 將您的工作區與 Azure Files 同步。

  2. 使用 ./infra/fintuning.config.json 中指定的指令觸發 Azure Container App 工作。

系統將使用 QLoRA 進行微調,微調程序會建立 LoRA 配接器 (adapters),供模型在推論時使用。

微調結果將儲存在 Azure Files 中。若要查看 Azure 檔案共用中的輸出檔案,您可以透過輸出面板中提供的連結導覽至 Azure 入口網站。或者,您可以直接進入 Azure 入口網站並找到名為 STORAGE_ACCOUNT_NAME 的儲存體帳戶(定義於 ./infra/fintuning.config.json)以及名為 FILE_SHARE_NAME 的檔案共用(定義於 ./infra/fintuning.config.json)。

file-share

檢視記錄

微調工作啟動後,您可以透過造訪 Azure 入口網站存取系統與主控台記錄。

或者,您也可以直接在 VS Code 輸出面板中檢視主控台記錄。

log-button

注意

工作啟動可能需要幾分鐘。若已有正在執行中的工作,當前工作可能會進入佇列等待執行。

在 Azure 上檢視並查詢記錄

觸發微調工作後,您可以透過選取 VS Code 通知中的 "Open Logs in Azure Portal" 按鈕,在 Azure 上檢視記錄。

或者,若您已開啟 Azure 入口網站,可從 Azure Container Apps 工作的 "Execution history" 面板中找到工作歷程記錄。

Job Execution History

記錄分為兩種:"Console" (主控台) 與 "System" (系統)。

  • 主控台記錄是來自您應用程式的訊息,包含 stderrstdout 訊息。這就是您在串流記錄區塊中看到的內容。
  • 系統記錄是來自 Azure Container Apps 服務的訊息,包含服務層級事件的狀態。

若要檢視與查詢您的記錄,請選取 "Console" 按鈕並導覽至 Log Analytics 頁面,您可以在該處檢視所有記錄並撰寫查詢。

Job Log Analytics

有關 Azure Container Apps 記錄的更多資訊,請參閱 Azure Container Apps 中的應用程式記錄

在 VS Code 中檢視串流記錄

啟動微調工作後,您也可以透過選取 VS Code 通知中的 "Show Streaming Logs in VS Code" 按鈕,在 VS Code 中檢視記錄。

或者,您可以在命令面板中執行指令 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 並重新啟動副本 (replica)。

Deploy for inference

部署成功完成後,模型即可使用此端點進行評估。您可以透過選取 VS Code 通知中顯示的 "Go to Inference Endpoint" 按鈕來存取推論 API。或者,Web API 端點位於 ./infra/inference.config.json 中的 ACA_APP_ENDPOINT,以及輸出面板中。

App Endpoint

注意

推論端點可能需要幾分鐘才能完全運作。

進階用法

微調專案元件

資料夾 內容
infra 包含所有遠端操作所需的設定。
infra/provision/finetuning.parameters.json 存放 Bicep 範本的參數,用於佈建微調所需的 Azure 資源。
infra/provision/finetuning.bicep 包含佈建微調 Azure 資源的範本。
infra/finetuning.config.json 設定檔案,由 AI Toolkit: Provision Azure Container Apps job for fine-tuning 指令生成。它被用作其他遠端指令面板的輸入。

為 Azure Container Apps 中的微調設定秘密 (secrets)

Azure Container App 秘密提供了一種安全的方式來儲存和管理 Azure Container Apps 中的敏感資料,例如 HuggingFace 權杖和 Weights & Biases API 金鑰。使用 AI Toolkit 的命令面板,您可以將秘密輸入到已佈建的 Azure Container App 工作中(儲存在 ./finetuning.config.json)。這些秘密隨後會被設定為所有容器中的環境變數

步驟

  1. 在命令面板中,輸入並選取 AI Toolkit: Add Azure Container Apps Job secret for fine-tuning

    Add secret

  2. 提供秘密名稱與值

    Input secret name

    Input secret

    例如,如果您使用私有的 HuggingFace 資料集或需要 Hugging Face 存取控制的模型,請將您的 HuggingFace 權杖設定為環境變數 HF_TOKEN,以避免需要手動登入 Hugging Face Hub。

設定秘密後,您現在可以在 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 工作達到此逾時,微調程序將會停止。然而,檢查點 (checkpoints) 預設會被儲存,這允許微調程序從最後一個檢查點恢復,而不是在重新執行時從頭開始。
location 這是佈建 Azure 資源的位置。預設值與所選資源群組的位置相同。
storageAccountName, fileShareName acaEnvironmentName, acaEnvironmentStorageName, acaJobName, acaLogAnalyticsName 這些參數用於命名要佈建的 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 存放 Bicep 範本的參數,用於佈建推論所需的 Azure 資源。
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 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>"
}

您所學到的內容

在本文章中,您學習了如何:

  • 設定 VS Code 的 AI Toolkit 以支援 Azure Container Apps 中的微調與推論。
  • 在 VS Code 的 AI Toolkit 中建立一個微調專案。
  • 設定微調工作流程,包括資料集選取與訓練參數。
  • 執行微調工作流程,使預訓練模型適應您的特定資料集。
  • 檢視微調程序的結果,包括指標與記錄。
  • 使用範例 Notebook 進行模型推論與測試。
  • 匯出微調專案並與他人分享。
  • 使用不同的資料集或訓練參數重新評估模型。
  • 處理失敗的工作並調整設定以重新執行。
  • 了解支援的模型及其微調要求。
  • 使用 VS Code 的 AI Toolkit 管理微調專案,包括佈建 Azure 資源、執行微調工作以及部署模型進行推論。
© . This site is unofficial and not affiliated with Microsoft.