參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

模型微調

微調 AI 模型是一種常見做法,它允許您使用自定義資料集在配有 GPU 的計算環境中對預訓練模型執行微調作業。AI 工具包目前支援在配有 GPU 的本地計算機或雲端(Azure 容器應用)中微調 SLM。

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

使用適用於 VS Code 的 AI 工具包 (預覽版) 在 Azure 上微調 AI 模型

適用於 VS Code 的 AI 工具包現在支援預配 Azure 容器應用,以執行模型微調並在雲中託管推理終結點。

設定雲環境

  1. 若要在遠端 Azure 容器應用環境中執行模型微調和推理,請確保您的訂閱具有足夠的 GPU 容量。提交支援票證,以請求應用程式所需的容量。獲取有關 GPU 容量的更多資訊

  2. 如果您在 HuggingFace 上使用私有資料集或您的基礎模型需要訪問控制,請確保您擁有HuggingFace 帳戶生成訪問令牌

  3. 如果您正在微調 Mistral 或 Llama,請接受 HuggingFace 上的許可證。

  4. 在適用於 VS Code 的 AI 工具包中啟用遠端微調和推理功能標誌

    1. 透過選擇檔案 -> 首選項 -> 設定開啟 VS Code 設定。
    2. 導航到擴充套件並選擇AI 工具包
    3. 選擇“啟用在 Azure 容器應用上執行微調和推理”選項。

    AI Toolkit Settings

    1. 重新載入 VS Code 以使更改生效。

構建微調專案

  1. 在命令面板中執行AI Toolkit: Focus on Tools View (⇧⌘P (Windows, Linux Ctrl+Shift+P))
  2. 導航到微調以訪問模型目錄。選擇要進行微調的模型。為專案指定名稱並選擇其在計算機上的位置。然後,點選“配置專案”按鈕。面板:選擇模型
  3. 專案配置
    1. 避免啟用“在本地微調”選項。
    2. Olive 配置設定將以預設預設值顯示。請根據需要調整並填寫這些配置。
    3. 繼續到生成專案。此階段利用 WSL 並涉及設定新的 Conda 環境,為未來包括 Dev Containers 的更新做準備。面板:配置模型
    4. 選擇“在工作區中重新啟動視窗”以開啟您的微調專案。面板:生成專案
注意

該專案目前可以在 VS Code 的 AI 工具包中本地或遠端工作。如果您在專案建立期間選擇“在本地微調”,它將只在 WSL 中執行,不使用雲資源。否則,專案將僅限於在遠端 Azure 容器應用環境中執行。

預配 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 檔案同步。

  2. 使用./infra/fintuning.config.json中指定的命令觸發 Azure 容器應用作業。

QLoRA 將用於微調,微調過程將為模型建立 LoRA 介面卡,以便在推理期間使用。

微調結果將儲存在 Azure 檔案中。要瀏覽 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 容器應用作業的“執行歷史記錄”面板中查詢作業歷史記錄。

Job Execution History

有兩種型別的日誌,“控制檯”和“系統”。

  • 控制檯日誌是來自您應用程式的訊息,包括stderrstdout訊息。這正是您在流式日誌部分已經看到的內容。
  • 系統日誌是來自 Azure 容器應用服務的訊息,包括服務級別事件的狀態。

要檢視和查詢日誌,請選擇“控制檯”按鈕並導航到 Log Analytics 頁面,您可以在其中檢視所有日誌並編寫查詢。

Job Log Analytics

有關 Azure 容器應用日誌的更多資訊,請參閱Azure 容器應用中的應用程式日誌

在 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 容器應用環境,並訪問在微調步驟中生成的儲存在 Azure 檔案中的模型和模型介面卡。

用於推理的部署

如果您希望修改推理程式碼或重新載入推理模型,請執行AI Toolkit: Deploy for inference命令。這會將您的最新程式碼與 ACA 同步並重新啟動副本。

Deploy for inference

部署成功完成後,模型現在可以透過此終結點進行評估。您可以點選 VSCode 通知中顯示的“轉到推理終結點”按鈕來訪問推理 API。或者,可以在./infra/inference.config.json中的ACA_APP_ENDPOINT下以及在輸出面板中找到 Web API 終結點。

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 容器應用中配置微調機密

Azure 容器應用機密提供了一種安全儲存和管理 Azure 容器應用中敏感資料(例如 HuggingFace 令牌和 Weights & Biases API 金鑰)的方法。使用 AI 工具包的命令面板,您可以將機密輸入到已預配的 Azure 容器應用作業(如儲存在./finetuning.config.json中)。然後,這些機密將設定為所有容器中的環境變數

步驟

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

    Add secret

  2. 輸入機密名稱和值:系統將提示您輸入機密的名稱和值。輸入機密名稱 輸入機密 例如,如果您使用私有 HuggingFace 資料集或需要 Hugging Face 訪問控制的模型,請將您的 HuggingFace 令牌設定為環境變數HF_TOKEN,以避免在 Hugging Face Hub 上進行手動登入。

設定機密後,您現在可以在 Azure 容器應用中使用它。機密將設定在容器應用的環境變數中。

配置 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 容器應用微調作業的超時時間(以秒為單位)。預設值為 10800,等於 3 小時。如果 Azure 容器應用作業達到此超時時間,微調過程將停止。但是,預設情況下會儲存檢查點,允許微調過程在再次執行時從最後一個檢查點恢復,而不是重新開始。
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 工具包命令面板,您只需在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 資源的位置。預設值與所選資源組的位置相同。
storageAccountNamefileShareName acaEnvironmentNameacaEnvironmentStorageNameacaAppNameacaLogAnalyticsName 這些引數用於命名用於預配的 Azure 資源。預設情況下,它們將與微調資源名稱相同。您可以輸入新的、未使用的資源名稱來建立您自己的自定義命名資源,或者如果您更喜歡使用現有 Azure 資源,則可以輸入現有 Azure 資源的名稱。有關詳細資訊,請參閱使用現有 Azure 資源部分。

使用現有 Azure 資源

預設情況下,推理預配使用與微調相同的 Azure 容器應用環境、儲存帳戶、Azure 檔案共享和 Azure Log Analytics。單獨的 Azure 容器應用專門用於推理 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 工具包命令面板,您只需在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 工具包以支援 Azure 容器應用中的微調和推理。
  • 在適用於 VS Code 的 AI 工具包中建立微調專案。
  • 配置微調工作流,包括資料集選擇和訓練引數。
  • 執行微調工作流以使預訓練模型適應您的特定資料集。
  • 檢視微調過程的結果,包括指標和日誌。
  • 使用示例筆記本進行模型推理和測試。
  • 匯出並與他人共享微調專案。
  • 使用不同的資料集或訓練引數重新評估模型。
  • 處理失敗的作業並調整重新執行的配置。
  • 瞭解支援的模型及其微調要求。
  • 使用適用於 VS Code 的 AI 工具包管理微調專案,包括預配 Azure 資源、執行微調作業和部署模型以進行推理。