微調模型
微調 AI 模型是一種常見的做法,可讓您在具有 GPU 的運算環境中,使用自訂資料集在預先訓練的模型上執行微調工作。AI Toolkit 目前支援在本機電腦上使用 GPU 或在雲端 (Azure Container App) 中使用 GPU 微調 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 上的授權。
-
在適用於 VS Code 的 AI Toolkit 中啟用「遠端微調和推論」功能旗標
- 依序選取 [檔案] -> [喜好設定] -> [設定],開啟 VS Code 設定。
- 導覽至 [擴充功能],然後選取 [AI Toolkit]。
- 選取 [啟用在 Azure Container Apps 上執行微調和推論] 選項。
- 重新載入 VS Code 以使變更生效。
建立微調專案的骨架
- 在命令選擇區中執行
AI Toolkit: 焦點在工具檢視
(⇧⌘P (Windows、Linux Ctrl+Shift+P)) - 導覽至 [微調] 以存取模型目錄。選取要微調的模型。為您的專案指派名稱,並選取其在本機上的位置。然後,按一下 [設定專案] 按鈕。
- 專案設定
- 避免啟用 [在本機微調] 選項。
- Olive 設定會顯示預先設定的預設值。請根據需要調整和填寫這些設定。
- 繼續前往 [產生專案]。此階段會利用 WSL,並涉及設定新的 Conda 環境,為未來包含開發容器的更新做準備。
- 選取 [在工作區中重新啟動視窗] 以開啟您的微調專案。
專案目前可在適用於 VS Code 的 AI Toolkit 中在本機或遠端運作。如果您在專案建立期間選擇 [在本機微調],則專案將完全在 WSL 中執行,而不會使用雲端資源。否則,專案將限制在遠端 Azure Container App 環境中執行。
佈建 Azure 資源
若要開始使用,您需要佈建 Azure 資源以進行遠端微調。從命令選擇區中尋找並執行 AI Toolkit: 佈建 Azure Container Apps 工作以進行微調
。在此過程中,系統會提示您選取您的 Azure 訂用帳戶和資源群組。
透過輸出通道中顯示的連結監控佈建進度。
執行微調
若要啟動遠端微調工作,請在命令選擇區中執行 AI Toolkit: 執行微調
命令。
接著,擴充功能會執行下列作業
-
將您的工作區與 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: 顯示正在執行的微調工作串流記錄
。
正在執行的微調工作的串流記錄將顯示在 [輸出] 面板中。
工作可能會因為資源不足而排隊。如果未顯示記錄,請稍候片刻,然後執行命令以重新連線至串流記錄。串流記錄可能會逾時並中斷連線。不過,可以再次執行命令來重新連線。
使用微調模型的推論
在遠端環境中訓練配接器後,請使用簡單的 Gradio 應用程式與模型互動。
佈建 Azure 資源
類似於微調程序,您需要從命令選擇區執行 AI Toolkit: 佈建 Azure Container Apps 以進行推論
,以設定 Azure 資源以進行遠端推論。在此設定期間,系統會要求您選取您的 Azure 訂用帳戶和資源群組。
預設情況下,推論的訂用帳戶和資源群組應與微調所用的訂用帳戶和資源群組相符。推論將使用相同的 Azure Container App 環境,並存取儲存在 Azure Files 中的模型和模型配接器,這些模型和模型配接器是在微調步驟期間產生的。
推論部署
如果您想要修訂推論程式碼或重新載入推論模型,請執行 AI Toolkit: 部署以進行推論
命令。這會將您的最新程式碼與 ACA 同步,並重新啟動複本。
成功完成部署後,模型現在已準備好使用此端點進行評估。您可以選取 VSCode 通知中顯示的 [前往推論端點] 按鈕,以存取推論 API。或者,您可以在 ./infra/inference.config.json
中的 ACA_APP_ENDPOINT
和 [輸出] 面板下找到 Web API 端點。
推論端點可能需要幾分鐘才能完全運作。
進階用法
微調專案元件
資料夾 | 內容 |
---|---|
infra |
包含遠端作業的所有必要設定。 |
infra/provision/finetuning.parameters.json |
保留 bicep 範本的參數,用於佈建 Azure 資源以進行微調。 |
infra/provision/finetuning.bicep |
包含用於佈建 Azure 資源以進行微調的範本。 |
infra/finetuning.config.json |
組態檔,由 AI Toolkit: 佈建 Azure Container Apps 工作以進行微調 命令產生。它用作其他遠端命令選擇區的輸入。 |
在 Azure Container Apps 中設定微調的秘密
Azure Container App 秘密提供安全的方式,可在 Azure Container Apps 內儲存和管理敏感性資料,例如 HuggingFace 權杖和 Weights & Biases API 金鑰。使用 AI toolkit 的命令選擇區,您可以將秘密輸入已佈建的 Azure Container App 工作 (如 ./finetuning.config.json
中所儲存)。然後,這些秘密會設定為所有容器中的環境變數。
步驟
-
在命令選擇區中,輸入並選取
AI Toolkit: 新增 Azure Container Apps 工作秘密以進行微調
-
輸入秘密名稱和值:系統會提示您輸入秘密的名稱和值。
例如,如果您使用的是需要 Hugging Face 存取控制的私人 HuggingFace 資料集或模型,請將您的 HuggingFace 權杖設定為環境變數
HF_TOKEN
,以避免需要在 Hugging Face Hub 上手動登入。
設定秘密後,您現在可以在您的 Azure Container App 中使用它。秘密將設定在您的 Container App 的環境變數中。
設定 Azure 資源佈建以進行微調
本指南將協助您設定 AI Toolkit: 佈建 Azure Container Apps 工作以進行微調
命令。
您可以在 ./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 資源>章節。 |
使用現有 Azure 資源
如果您有需要設定以進行微調的現有 Azure 資源,您可以在 ./infra/provision/finetuning.parameters.json
檔案中指定其名稱,然後從命令選擇區執行 AI Toolkit: 佈建 Azure Container Apps 工作以進行微調
。這會更新您指定的資源,並建立任何遺失的資源。
例如,如果您有現有的 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: 佈建 Azure Container Apps 以進行推論 命令產生。它用作其他遠端命令選擇區的輸入。 |
設定 Azure 資源佈建
本指南將協助您設定 AI Toolkit: 佈建 Azure Container Apps 以進行推論
命令。
您可以在 ./infra/provision/inference.parameters.json
檔案中找到組態參數。以下是詳細資訊
參數 | 描述 |
---|---|
defaultCommands |
這是啟動 Web API 的命令。 |
maximumInstanceCount |
此參數設定 GPU 執行個體的最大容量。 |
location |
這是佈建 Azure 資源的位置。預設值與選取的資源群組的位置相同。 |
storageAccountName 、fileShareName acaEnvironmentName 、acaEnvironmentStorageName 、acaAppName 、acaLogAnalyticsName |
這些參數用於命名佈建的 Azure 資源。預設情況下,它們會與微調資源名稱相同。您可以輸入新的未使用資源名稱來建立您自己的自訂名稱資源,或者如果您想要使用現有的 Azure 資源,您可以輸入現有 Azure 資源的名稱。如需詳細資訊,請參閱<使用現有 Azure 資源>章節。 |
使用現有 Azure 資源
預設情況下,推論佈建會使用與微調相同的 Azure Container App 環境、儲存體帳戶、Azure 檔案共用和 Azure Log Analytics。系統會建立個別的 Azure Container App 僅用於推論 API。
如果您在微調步驟期間自訂了 Azure 資源,或想要使用您自己的現有 Azure 資源進行推論,請在 ./infra/inference.parameters.json
檔案中指定其名稱。然後,從命令選擇區執行 AI Toolkit: 佈建 Azure Container Apps 以進行推論
命令。這會更新任何指定的資源,並建立任何遺失的資源。
例如,如果您有現有的 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>"
}