🚀 在 VS Code 中取得

微調模型

微調 AI 模型是一種常見的做法,可讓您使用自訂資料集,在具有 GPU 的運算環境中,對預先訓練的模型執行 微調 作業。AI Toolkit 目前支援在本機具有 GPU 的機器上或在雲端 (Azure Container App) 中使用 GPU 微調 SLM。

微調模型可以下載到本機,並使用 GPU 進行推論測試,或進行量化以在本機 CPU 上執行。微調模型也可以部署到雲端環境作為遠端模型。

在 Azure 上使用 AI Toolkit for VS Code (預覽版) 微調 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 環境,為未來包含開發容器的更新做準備。面板:設定模型
    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 檔案共用中的輸出檔案,您可以使用輸出面板中提供的連結導覽至 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

記錄有兩種型別:「主控台」和「系統」。

  • 主控台記錄是來自您應用程式的訊息,包括 stderrstdout 訊息。這就是您已經在串流記錄區段中看到的內容。
  • 系統記錄是來自 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.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 中設定微調的密碼

Azure Container App 密碼提供安全的方式來儲存和管理 Azure Container Apps 內的敏感性資料,例如 HuggingFace 權杖和 Weights & Biases API 金鑰。使用 AI Toolkit 的命令選取區,您可以將密碼輸入到佈建的 Azure 容器應用程式作業中 (如儲存在 ./finetuning.config.json 中)。然後,這些密碼會設定為所有容器中的環境變數

步驟

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

    Add secret

  2. 輸入密碼名稱和值:系統會提示您輸入密碼的名稱和值。輸入密碼名稱 輸入密碼 例如,如果您使用需要 Hugging Face 存取控制的私人 HuggingFace 資料集或模型,請將您的 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 作業達到此逾時時間,微調程序會停止。但是,預設情況下會儲存檢查點,允許微調程序從上次檢查點繼續,而不是在再次執行時從頭開始。
location 這是佈建 Azure 資源的位置。預設值與選取的資源群組的位置相同。
storageAccountNamefileShareName acaEnvironmentNameacaEnvironmentStorageNameacaJobNameacaLogAnalyticsName 這些參數用於命名佈建的 Azure 資源。您可以輸入新的、未使用的資源名稱來建立您自己的自訂名稱資源,或者如果您想要使用已存在的 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 檔案。如果您已設定和組態所有 Azure 資源,而未使用 AI Toolkit 命令選取區,您可以直接在 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 資源的位置。預設值與選取的資源群組的位置相同。
storageAccountNamefileShareName acaEnvironmentNameacaEnvironmentStorageNameacaAppNameacaLogAnalyticsName 這些參數用於命名佈建的 Azure 資源。預設情況下,它們將與微調資源名稱相同。您可以輸入新的、未使用的資源名稱來建立您自己的自訂名稱資源,或者如果您想要使用已存在的 Azure 資源,您可以輸入已存在的 Azure 資源的名稱。如需詳細資訊,請參閱使用現有 Azure 資源章節。

使用現有 Azure 資源

預設情況下,推論佈建使用與微調相同的 Azure Container App 環境、儲存體帳戶、Azure 檔案共用和 Azure Log Analytics。會建立個別的 Azure Container App 專門用於推論 API。

如果您在微調步驟期間自訂了 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 檔案。如果您已設定和組態所有 Azure 資源,而未使用 AI Toolkit 命令選取區,您可以直接在 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>"
}