微調模型
微調 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,用於執行模型微調和託管推理終結點。
設定您的雲環境
-
要在遠端 Azure Container Apps 環境中執行模型微調和推理,請確保您的訂閱具有足夠的 GPU 容量。提交 支援票證 以請求您的應用程式所需的容量。 獲取有關 GPU 容量的更多資訊
-
如果您使用的是 HuggingFace 上的私有資料集,或者基礎模型需要訪問控制,請確保您擁有一個 HuggingFace 帳戶 並 生成訪問令牌。
-
如果您正在微調 Mistral 或 Llama,請在 HuggingFace 上接受 LICENSE。
-
在 VS Code 的 AI Toolkit 中啟用遠端微調和推理功能標誌
- 選擇 檔案 -> 首選項 -> 設定 開啟 VS Code 設定。
- 導航到 擴充套件 並選擇 AI Toolkit。
- 選擇 “啟用以在 Azure Container Apps 上執行微調和推理” 選項。

- 重新載入 VS Code 以使更改生效。
腳手架一個微調專案
- 在命令面板 (Command Palette) 中執行
AI Toolkit: Focus on Tools View(命令面板: ⇧⌘P (Windows, Linux Ctrl+Shift+P)) - 導航到
Fine-tuning以訪問模型目錄。選擇一個模型進行微調。為您的專案指定一個名稱,並選擇其在計算機上的位置。然後,點選 “配置專案” 按鈕。
- 專案配置
- 避免啟用 “本地微調” 選項。
- Olive 配置設定將出現,並帶有預設的預設值。請根據需要調整和填寫這些配置。
- 繼續 生成專案。此階段利用 WSL 並涉及設定一個新的 Conda 環境,為包含 Dev Containers 的未來更新做準備。

- 選擇 “在工作區中重新啟動視窗” 以開啟您的微調專案。

該專案當前可以在 VS Code 的 AI Toolkit 中本地或遠端執行。如果您在專案建立過程中選擇 “本地微調”,它將僅在 WSL 中執行,不使用雲資源。否則,專案將僅限於在遠端 Azure Container App 環境中執行。
預配 Azure 資源
要開始,您需要預配 Azure 資源以進行遠端微調。從命令面板查詢並執行 AI Toolkit: Provision Azure Container Apps job for fine-tuning。在此過程中,系統將提示您選擇 Azure 訂閱和資源組。

透過輸出通道中顯示的連結監視預配進度。 
執行微調
要啟動遠端微調作業,請在命令面板中執行 AI Toolkit: Run fine-tuning 命令。

然後,擴充套件程式將執行以下操作
-
將您的工作區同步到 Azure Files。
-
使用
./infra/fintuning.config.json中指定的命令觸發 Azure Container App 作業。
將使用 QLoRA 進行微調,並且微調過程將建立 LoRA 介面卡供模型在推理時使用。
微調的結果將儲存在 Azure Files 中。要探索 Azure 檔案共享中的輸出檔案,您可以訪問 Azure 門戶,使用輸出面板中提供的連結。或者,您可以直接訪問 Azure 門戶,找到名為 STORAGE_ACCOUNT_NAME(在 ./infra/fintuning.config.json 中定義)的儲存帳戶,以及名為 FILE_SHARE_NAME(在 ./infra/fintuning.config.json 中定義)的檔案共享。

檢視日誌
微調作業啟動後,您可以訪問 Azure 門戶檢視系統和控制檯日誌。 
或者,您也可以直接在 VSCode 的輸出面板中檢視控制檯日誌。

作業可能需要幾分鐘才能啟動。如果已有正在執行的作業,當前作業可能會排隊等待稍後啟動。
在 Azure 上檢視和查詢日誌
觸發微調作業後,您可以透過 VSCode 通知中的“在 Azure 門戶中開啟日誌”按鈕檢視 Azure 上的日誌。
或者,如果您已開啟 Azure 門戶,請在 Azure Container Apps 作業的“執行歷史記錄”面板中查詢作業歷史記錄。

有兩種型別的日誌:“控制檯”和“系統”。
- 控制檯日誌是您的應用程式中的訊息,包括
stderr和stdout訊息。這正是您在流式日誌部分已經看到的內容。 - 系統日誌是 Azure Container Apps 服務中的訊息,包括服務級別事件的狀態。
要檢視和查詢您的日誌,請選擇“控制檯”按鈕,然後導航到 Log Analytics 頁面,您可以在其中檢視所有日誌並編寫查詢。

有關 Azure Container Apps 日誌的更多資訊,請參閱 Azure Container Apps 中的應用程式日誌。
在 VSCode 中檢視流式日誌
啟動微調作業後,您還可以透過 VSCode 通知中的“在 VS Code 中顯示流式日誌”按鈕在 Azure 上檢視日誌。
或者,您可以在命令面板中執行 AI Toolkit: Show the running fine-tuning job streaming logs 命令。

正在執行的微調作業的流式日誌將顯示在輸出面板中。

由於資源不足,作業可能會被排隊。如果日誌未顯示,請等待一段時間,然後執行命令重新連線到流式日誌。流式日誌可能會超時斷開連線。但是,可以透過再次執行命令來重新連線。
使用微調後的模型進行推理
在遠端環境中訓練好介面卡後,使用簡單的 Gradio 應用程式與模型進行互動。

預配 Azure 資源
與微調過程類似,您需要透過從命令面板執行 AI Toolkit: Provision Azure Container Apps for inference 來設定遠端推理的 Azure 資源。在此設定過程中,系統會要求您選擇 Azure 訂閱和資源組。

預設情況下,用於推理的訂閱和資源組應與用於微調的訂閱和資源組匹配。推理將使用相同的 Azure Container App 環境,並訪問在微調過程中生成的 Azure Files 中的模型和模型介面卡。
推理部署
如果您希望修改推理程式碼或重新載入推理模型,請執行 AI Toolkit: Deploy for inference 命令。這將把您最新的程式碼同步到 ACA 並重啟副本。

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

推理終結點可能需要幾分鐘才能完全執行。
高階用法
微調專案元件
| 資料夾 | 內容 |
|---|---|
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 Container Apps 中的微調配置機密
Azure Container App 機密提供了一種安全的方式來儲存和管理 Azure Container Apps 中的敏感資料,例如 HuggingFace 令牌和 Weights & Biases API 金鑰。使用 AI Toolkit 的命令面板,您可以將機密輸入到已預配的 Azure 容器應用作業中(如儲存在 ./finetuning.config.json 中)。這些機密隨後被設定為所有容器中的**環境變數**。
步驟
-
在命令面板中,鍵入並選擇
AI Toolkit: Add Azure Container Apps Job secret for fine-tuning
-
提供機密名稱和值


例如,如果您使用的是需要 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 資源的地點。預設值與所選資源組的地點相同。 |
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 檔案。如果您已經設定並配置了所有 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 |
包含用於預配推理 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 資源的地點。預設值與所選資源組的地點相同。 |
storageAccountName, fileShareName acaEnvironmentName, acaEnvironmentStorageName, acaAppName, acaLogAnalyticsName |
這些引數用於命名要預配的 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>"
}
您學到了什麼
在本文中,您學習瞭如何
- 設定 VS Code 的 AI Toolkit 以支援 Azure Container Apps 中的微調和推理。
- 在 VS Code 的 AI Toolkit 中建立一個微調專案。
- 配置微調工作流,包括資料集選擇和訓練引數。
- 執行微調工作流,將預訓練模型適配到您的特定資料集。
- 檢視微調過程的結果,包括指標和日誌。
- 使用示例 Notebook 進行模型推理和測試。
- 匯出並與他人共享微調專案。
- 使用不同的資料集或訓練引數重新評估模型。
- 處理失敗的作業並調整配置以重新執行。
- 瞭解支援的模型及其微調要求。
- 使用 VS Code 的 AI Toolkit 來管理微調專案,包括預配 Azure 資源、執行微調作業以及部署模型進行推理。