共用方式為


使用 Azure AI Foundry 中的標準部署來微調模型

這很重要

本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

Azure AI Foundry 可讓您透過稱為微調的程式,將大型語言模型自定義至特定數據集。 此程式藉由允許針對特定工作和應用程式量身打造的自定義和優化,提供顯著的優點。 優點包括改善的效能、成本效益、降低延遲,以及量身打造的輸出。

成本效益:Azure AI Foundry 的微調可能會更符合成本效益,特別是針對大規模部署,這要歸功於標準定價。

模型多樣性:Azure AI Foundry 的標準部署微調提供專屬和開放原始碼模型的支援,讓使用者能夠彈性地選取最符合其需求的模型,而不受限制為單一類型。

自定義與控制:Azure AI Foundry 提供更精細的自定義和控制,讓使用者更精確地根據其特定需求量身打造模型。

在本文中,您將瞭解如何微調在 Azure AI Foundry 中使用標準部署所部署的模型。

先決條件

  • 具有有效付款方式的 Azure 訂用帳戶。 免費版或試用版 Azure 訂用帳戶將無法運作。 如果您沒有 Azure 訂用帳戶,請建立付費 Azure 帳戶以開始。

  • Azure 入口網站的存取權。

  • Azure AI Foundry 專案

  • Azure 角色型訪問控制 (Azure RBAC) 可用來授與 Azure AI Foundry 入口網站中作業的存取權。 若要執行本文中的步驟,您的使用者帳戶必須獲指派 Azure 訂用帳戶的擁有者參與者角色。 如需許可權的詳細資訊,請參閱 Azure AI Foundry 入口網站中的角色型訪問控制。

確認訂用帳戶提供者的註冊

確認訂用帳戶已註冊至 Microsoft.Network 資源提供者。

  1. 登入 Azure 入口網站
  2. 從左側功能表中選取 [訂用帳戶]
  3. 選取您要使用的訂用帳戶。
  4. 從左側功能表中選取 [設定]>[資源提供者]
  5. 如果資源提供者不在清單中,請將 Microsoft.Network 新增至資源提供者清單。

尋找具有微調支援的模型

AI Foundry 模型目錄提供多種模型類型的微調支援,包括聊天完成和文字產生。 如需支援微調的模型清單,以及支援微調的 Azure 區域,請參閱 模型的區域可用性作為標準部署。 微調工作僅適用於 Azure 訂用帳戶屬於模型提供者已提供供應專案的國家/地區的計費帳戶的使用者。 如果供應專案可在相關區域中使用,則用戶必須在 Azure 區域中擁有項目資源,模型可供部署或微調,如適用。

您也可以移至 Azure AI Foundry 入口網站,檢視包含微調支援的所有模型:

  1. 登入 Azure AI Foundry

  2. 如果您尚未在專案中,請選取它。

  3. 流覽至模型目錄。

  4. 選取 [ 微調工作 篩選]。

    模型目錄微調篩選選項的螢幕快照。

  5. 選取 [全部 ] 或選取特定工作。

準備微調資料

準備定型和驗證資料,以微調您的模型。 您的訓練和驗證數據由輸入和輸出範例組成,這些範例定義了您希望模型的執行方式。

請確定所有定型範例都遵循預期的推斷格式。 若要有效地微調模型,請藉由維護數據平衡來確保不同的數據集,包括各種案例,並定期調整定型數據以符合真實世界的期望。 這些動作最終會導致更精確且平衡的模型回應。

小提示

不同的模型類型需要不同格式的定型資料。

範例檔案格式

支援的檔案類型為 JSON Lines。 檔案會上傳至預設資料存放區,並在您的專案中提供。

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

使用微調模型精靈

Azure AI Foundry 入口網站提供建立自定義模型精靈,讓您以互動方式建立和定型 Azure 資源的微調模型。

選取基底模型

  1. 從 Azure AI Foundry 模型目錄選擇您想要微調的模型。
  2. 在模型的 [詳細數據] 頁面上,選取 [微調]。 有些基礎模型同時支持標準部署管理計算,而其他模型則只支持其中一種。
  3. 如果您看到 標準部署受控計算的選項,請選取 [標準部署 ] 以進行微調。 此動作會開啟精靈,顯示模型 的標準 微調相關信息。

選擇定型資料

下一個步驟是選擇現有的備妥定型資料,或上傳自訂模型時要使用的新備妥定型資料。 [定型資料] 窗格會顯示任何現有、先前上傳的資料集,也會提供上傳新定型資料的選項。

  • 如果您的訓練數據已上傳至服務,請從 Azure AI Foundry 中選取 [檔案]。
    • 從顯示的下拉式清單中選取檔案。
  • 若要上傳新的訓練數據,請使用下列一個選項:
    • 選取 [本機檔案 ] 以從本機檔案上傳訓練數據。
    • 選取 [Azure Blob] 或其他共用 Web 位置 ,以從 Azure Blob 或其他共用 Web 位置匯入訓練數據。

若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 如需 Azure Blob 儲存體的詳細資訊,請參閱什麼是 Azure Blob 儲存體?

從本機檔案上傳定型資料

您可以使用下列其中一種方法,將新的定型資料集從本機檔案上傳至服務:

  • 將檔案拖放到 定型數據窗格的用戶區域,然後選取 上傳檔案
  • 從 [訓練數據] 窗格的工作區選取 [瀏覽檔案],從 [開啟] 對話框選擇要上傳的檔案,然後選取 [上傳檔案]。 選取並上傳定型資料集之後,請選取 [下一步] 以繼續。

選擇您的驗證資料

下一步提供設定模型以在定型流程中使用驗證資料的選項。 如果您不想要使用驗證資料,可以選擇 [下一步] 前往模型的進階選項。 否則,如果您具有驗證資料集,您可以選擇現有的備妥驗證資料,或上傳自訂模型時要使用的新備妥驗證資料。 [驗證資料] 窗格會顯示任何現有、先前上傳的定型和驗證資料集,並提供您可以上傳新驗證資料的選項。

分割訓練數據

您可以自動劃分訓練資料以生成驗證資料集。 選取 [自動分割定型數據] 之後,請選取 [ 下一步 ] 繼續。

在 Azure AI Foundry 中使用現有的數據

  • 如果您的驗證資料已上傳至服務,請選取 [選擇資料集]
    • 從 [驗證資料] 窗格所顯示的清單中選取檔案。
  • 若要上傳新的驗證數據,請使用下列其中一個選項:
    • 選取 [本機檔案 ] 以從本機檔案上傳驗證數據。
    • 選取 [Azure Blob] 或其他共用 Web 位置 ,以從 Azure Blob 或其他共用 Web 位置匯入驗證數據。 若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。

備註

  • 與定型數據檔類似,驗證數據文件必須格式化為 JSONL 檔案,
  • 編碼為帶有位元組順序標記(BOM)的UTF-8。 檔案大小必須小於 512 MB。

從本機檔案上傳驗證資料

您可以使用下列其中一種方法,將新的驗證資料集從本機檔案上傳至服務:

  • 將檔案拖放至 [驗證資料] 窗格的工作區,然後選取 [上傳檔案]
  • [驗證數據] 窗格的工作區選取 [瀏覽檔案],從 [Open] 對話框中選擇要上傳的檔案,然後選取 [上傳檔案]。 選取並上傳驗證資料集之後,請選取 [下一步] 以繼續。

設定工作參數

微調模型精靈會在 [工作參數] 窗格中顯示定型微調模型所需的參數。 可用的參數如下:

名稱 型別 說明
batch_size 整數 用於訓練的批次大小。 批次大小是用來訓練單一向前和向後傳遞的訓練範例數目。 一般而言,我們發現較大的批次大小通常較適合較大的資料集。 此屬性的預設值和最大值是基底模型所特有的。 批次大小越大,表示模型參數的更新頻率越低,而變異數越少。
learning_rate_multiplier 數字 用於訓練的學習速率乘數。 微調學習速率是預先定型所用原始學習速率乘以此值。 學習速率越大,通常在越大的批次大小下擁有更佳效能。 建議您試驗 0.02 到 0.2 這個範圍內的值,看看哪些值會產生最佳結果。 較小的學習速率可能有助於避免過度學習。
n_epochs 整數 訓練模型的週期數目。 Epoch 是指透過訓練資料集的一個完整週期。

選取 [預設值 ] 以使用微調作業的預設值,或選取 [ 自定義 ] 以顯示和編輯超參數值。 選取預設值時,我們會根據您的定型資料透過演算法判斷正確的值。 設定進階選項之後,請選取 [下一步]檢閱您的選擇,並定型微調模型

檢閱選擇並定型模型

精靈的 [檢閱] 窗格會顯示設定選項的相關資訊。

如果您已準備好定型模型,請選取 [ 開始訓練作業 ] 以啟動微調作業,然後返回 [ 模型] 索引標籤。

檢查自訂模型的狀態

微調 索引標籤會顯示自訂模型的相關資訊。 分頁包含自定義模型微調工作的狀態和工作識別碼相關信息。 作業完成時,索引標籤會顯示結果檔案的檔案識別碼。 請選取 [重新整理],以查看模型定型作業的更新狀態。

執行中項目儀錶板的螢幕快照。

啟動微調作業之後,可能需要一些時間才能完成。 您的作業可能會排入系統中其他作業後方的佇列。 視模型和資料集大小而定,定型模型可能需要幾分鐘或幾小時的時間。 以下是您可以在 [ 模型 ] 索引標籤上執行的一些工作:

  • 在 [自定義模型] 索引標籤的 [狀態] 資料行中,檢查自定義模型的微調作業狀態。
  • 在 [模型名稱] 數據行中,選取模型的名稱,以檢視自定義模型的詳細資訊。 您可以查看微調作業的狀態、定型結果、定型事件和作業中使用的超參數。
  • 選取 [重新整理] 以更新頁面上的資訊。

微調細節儀表板的螢幕快照。

支援微調的企業情境

標準部署微調支持數個企業案例。 下表概述使用者記憶體網路和驗證的支援組態,以確保企業案例內的順利運作:

備註

  • 您可以按下儲存資料集的數據存放區連線,並流覽至 [存取詳細>數據驗證方法] 設定,透過 AI Foundry 變更數據連線驗證。
  • 您可以在 Azure 儲存體 [設定組態] 頁面>] 中變更記憶體驗證。>
  • 您可以在 [Azure 儲存體 >網络] 頁面中變更記憶體網路功能。
記憶體網路 記憶體驗證 數據聯機驗證 支援
公用網路存取 = 已啟用 已啟用帳戶金鑰 SAS/帳戶金鑰 是,UX 和 SDK
公用網路存取 = 已啟用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK

注意: 針對 UX,您可能需要為記憶體帳戶上的使用者標識元新增記憶體 Blob 數據讀取器或記憶體 Blob 資料參與者,或變更連線的驗證以使用帳戶密鑰/SAS 令牌
已從選取的虛擬網路和 IP 位址啟用 已啟用帳戶金鑰 帳戶金鑰 是,UX 和 SDK

注意: 對於 UX,執行瀏覽器之計算的 IP 必須位於選取的清單中
已從選取的虛擬網路和 IP 位址啟用 已啟用帳戶金鑰 SAS 是,UX 和 SDK

注意: 對於 UX,執行瀏覽器之計算的 IP 必須位於選取的清單中
已從選取的虛擬網路和 IP 位址啟用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK。

注意: 針對 UX,您可能需要為記憶體帳戶上的使用者標識元新增記憶體 Blob 數據讀取器或記憶體 Blob 資料參與者,或變更連線的驗證以使用帳戶密鑰/SAS 令牌。 也請確定執行瀏覽器之計算的IP必須位於選取的清單中
公用網路存取 = 已停用 已啟用帳戶金鑰 SAS/帳戶金鑰 是,UX 和 SDK。

注意:若要讓 UX 數據上傳和提交能夠運作,您必須從具有適當記憶體存取權的 Vnet 中存取工作區
公用網路存取 = 已停用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK。

注意:若要讓 UX 數據上傳和提交能夠運作,您必須從具有適當記憶體存取權的 Vnet 中存取工作區

上述案例也應該在受控 Vnet 工作區中運作。 有關受控虛擬網路 (Vnet) 的 AI Foundry 中樞設定,請參閱:如何設定 Azure AI Foundry 中樞的受控網路

Customer-Managed 金鑰 (CMK) 不是 標準部署微調支援的企業案例。

在工作區和儲存空間上使用特殊的網路設定進行微調時,通常會指向網路設定問題。


部署已優化的模型

微調作業成功時,您可以從 [ 微調 ] 索引標籤部署自定義模型。您必須部署自定義模型,使其可用於完成呼叫。

這很重要

部署自定義模型並完成端點之後,請記得清除任何非作用中的端點。 刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 根據 Azure AI Foundry 定價中所述,每個已部署的自定義(微調)模型無論是否有執行完成或聊天完成呼叫,都會產生每小時的託管成本。 若要深入瞭解如何使用 Azure AI Foundry 規劃和管理成本,請參閱 規劃管理 Azure AI Foundry 服務成本中的指引。

備註

自訂模型僅允許一個部署。 如果您選取已部署的自訂模型,則會顯示錯誤訊息。 若要部署自定義模型,請選取要部署的自定義模型,然後選取 [部署模型]。

[部署模型] 對話方塊隨即開啟。 在對話框中,輸入您的 部署名稱 ,然後選取 [ 部署 ] 以開始部署自定義模型。

您也可以透過 [ 模型 + 端點] 索引 卷標來部署微調模型,方法是選取 [ 部署模型 ] 按鈕,然後從下拉式清單中選取 [ 部署微調的模型 ]

微調部署管理儀錶板的螢幕截圖。

接下來,選取您想要部署的微調模型,然後選取 [ 部署]。

跨區域部署

微調支援將微調的模型部署至與最初微調模型時的不同區域。 您也可以部署至不同的訂閱/區域。 唯一的限制是,新區域也必須支援微調,而且在部署跨訂用帳戶時,產生部署授權令牌的帳戶必須同時具有來源和目的地訂用帳戶的存取權。 您可以透過 Python 完成跨訂用帳戶/區域部署

使用已部署的自訂模型

部署自訂模型後,您就能如同使用其他部署模型般使用該模型。 您可以使用 Azure AI Foundry 入口網站中的遊樂場來實驗您的新部署。 您可以繼續使用與自定義模型相同的參數,例如溫度和max_tokens,就像您可以搭配其他已部署的模型一樣。

清除微調的模型

您可以從 Azure AI Foundry 中的微調模型清單,或從模型詳細數據頁面刪除微調模型。 若要從微調頁面刪除微調的模型,

  1. 從 Azure AI Foundry 專案的左側導覽中選取 [微調 ]。
  2. 選取 [ 刪除] 按鈕以刪除微調的模型。

備註

如果自訂模型具有現有部署,則無法刪除自訂模型。 您必須先刪除模型部署,才能刪除自定義模型。

建立用戶端以取用模型

下列各節將逐步引導您微調 Python 中的模型。 若要尋找此程式碼的筆記本範例,請參閱 使用模型即服務微調 LLM

  1. 請務必安裝相依性,以開始微調您的模型。
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. 建立用戶端以取用模型。 下列程式碼會使用儲存在環境變數中的端點 URL 和金鑰。
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()

try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group_name="<RESOURCE_GROUP_NAME>",
        workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
    )

# the models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")

# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id

尋找具有微調支援的模型

AI Foundry 模型目錄提供多種模型類型的微調支援,包括聊天完成和文字產生。 如需支援微調的模型清單,以及支援微調的 Azure 區域,請參閱 標準部署中模型的區域可用性。 微調工作僅適用於 Azure 訂用帳戶屬於模型提供者已提供供應專案的國家/地區的計費帳戶的使用者。 如果供應專案可在相關區域中使用,則用戶必須在 Azure 區域中擁有項目資源,模型可供部署或微調,如適用。

在此範例中,我們使用 Phi-4-mini-instruct 模型。 在此程式碼片段中,模型的模型 ID 屬性將作為輸入傳遞至微調任務。 您也可以在 Azure AI Foundry 模型目錄的 [模型詳細資料頁面] 上,作為 [資產標識符] 字段觀看。

model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
    "\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
        model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
    )
)

準備微調資料

準備定型和驗證資料,以微調您的模型。 您的訓練和驗證數據由輸入和輸出範例組成,這些範例定義了您希望模型的執行方式。

請確定所有定型範例都遵循預期的推斷格式。 若要有效地微調模型,請藉由維護數據平衡來確保不同的數據集,包括各種案例,並定期調整定型數據以符合真實世界的期望。 這些動作最終會導致更精確且平衡的模型回應。

小提示

不同的模型類型需要不同格式的定型資料。

範例檔案格式

支援的檔案類型為 JSON Lines。 檔案會上傳至預設資料存放區,並在您的專案中提供。

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

建立訓練數據輸入

此程式碼片段會示範如何定義訓練數據集。

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data

dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
    train_data_asset = workspace_ml_client.data.get(
        train_dataset_name, version=dataset_version
    )
    print(f"Dataset {train_dataset_name} already exists")
except:
    print("creating dataset")
    train_data = Data(
        path=f"./train.jsonl",
        type=AssetTypes.URI_FILE,
        description="Training dataset",
        name=train_dataset_name,
        version="1",
    )
    train_data_asset = workspace_ml_client.data.create_or_update(train_data)

建立驗證數據

下一步提供設定模型以在定型流程中使用驗證資料的選項。 如果您不想使用驗證數據,您可以選擇略過此步驟以繼續進行下一節。 否則,如果您具有驗證資料集,您可以選擇現有的備妥驗證資料,或上傳自訂模型時要使用的新備妥驗證資料。

from azure.ai.ml.entities import Data

dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
    validation_data_asset = workspace_ml_client.data.get(
        validation_dataset_name, version=dataset_version
    )
    print(f"Dataset {validation_dataset_name} already exists")
except:
    print("creating dataset")
    validation_data = Data(
        path=f"./validation.jsonl",
        type=AssetTypes.URI_FILE,
        description="Validation dataset",
        name=validation_dataset_name,
        version="1",
    )
    validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)

建立第三方模型的 Marketplace 訂用帳戶

所有非Microsoft模型都需要此步驟。 Microsoft模型的範例是 Phi 系列的模型。

model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)

normalized_model_name = model_name.replace(".", "-")

from azure.ai.ml.entities import MarketplaceSubscription


subscription_name = f"{normalized_model_name}-sub"

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id_to_subscribe,
    name=subscription_name,
)

# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
    marketplace_subscription = (
        workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
            marketplace_subscription
        ).result()
    )
except Exception as ex:
    print(ex)

提交微調作業時,使用該模型和數據作為輸入

需要下列一組參數,才能微調您的模型。 每個參數都定義於下列各項:

  • 用來進行微調的基礎模型。
  • 訓練資料:用於微調基本模型的訓練資料。
  • validation_data:微調基底模型的驗證數據。
  • 任務:微調要執行的工作。 例如 CHAT_COMPLETION 用於聊天完成的微調作業。
  • outputs:輸出已註冊的模型名稱。

下列參數為選擇性參數:

  • 超參數:控制運行時間微調行為的參數。
  • name:微調任務名稱
  • experiment_name:微調作業的實驗名稱。
  • display_name:微調任務顯示名稱。
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid

guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"

finetuning_job = create_finetuning_job(
    task=FineTuningTaskType.CHAT_COMPLETION,
    training_data=train_data_asset.id,
    validation_data=validation_data_asset.id,
    hyperparameters={
        "per_device_train_batch_size": "1",
        "learning_rate": "0.00002",
        "num_train_epochs": "1",
    },
    model=model_to_finetune.id,
    display_name=display_name,
    name=name,
    experiment_name=experiment_name,
    tags={"foo_tag": "bar"},
    properties={"my_property": "my_value"},
    output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)

status = workspace_ml_client.jobs.get(created_job.name).status

import time

while True:
    status = workspace_ml_client.jobs.get(created_job.name).status
    print(f"Current job status: {status}")
    if status in ["Failed", "Completed", "Canceled"]:
        print("Job has finished with status: {0}".format(status))
        break
    else:
        print("Job is still running. Checking again in 30 seconds.")
        time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name

部署已優化的模型

微調作業成功時,您可以部署自定義模型。

這很重要

部署自定義模型並完成端點之後,請記得清除任何非作用中的端點。 刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 根據 Azure AI Foundry 定價中所述,每個已部署的自定義(微調)模型無論是否有執行完成或聊天完成呼叫,都會產生每小時的託管成本。 若要深入瞭解如何使用 Azure AI Foundry 規劃和管理成本,請參閱 規劃管理 Azure AI Foundry 服務成本中的指引。

# Deploy the model as a serverless endpoint

endpoint_name = f"{normalized_model_name}-ft-{short_guid}"  # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"

支援微調的企業情境

標準部署微調支持數個企業案例。 下表概述使用者記憶體網路和驗證的支援組態,以確保企業案例內的順利運作:

備註

  • 您可以按下儲存資料集的數據存放區連線,並流覽至 [存取詳細>數據驗證方法] 設定,透過 AI Foundry 變更數據連線驗證。
  • 您可以在 Azure 儲存體 [設定組態] 頁面>] 中變更記憶體驗證。>
  • 您可以在 [Azure 儲存體 >網络] 頁面中變更記憶體網路功能。
記憶體網路 記憶體驗證 數據聯機驗證 支援
公用網路存取 = 已啟用 已啟用帳戶金鑰 SAS/帳戶金鑰 是,UX 和 SDK
公用網路存取 = 已啟用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK

注意: 針對 UX,您可能需要為記憶體帳戶上的使用者標識元新增記憶體 Blob 數據讀取器或記憶體 Blob 資料參與者,或變更連線的驗證以使用帳戶密鑰/SAS 令牌
已從選取的虛擬網路和 IP 位址啟用 已啟用帳戶金鑰 帳戶金鑰 是,UX 和 SDK

注意: 對於 UX,執行瀏覽器之計算的 IP 必須位於選取的清單中
已從選取的虛擬網路和 IP 位址啟用 已啟用帳戶金鑰 SAS 是,UX 和 SDK

注意: 對於 UX,執行瀏覽器之計算的 IP 必須位於選取的清單中
已從選取的虛擬網路和 IP 位址啟用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK。

注意: 針對 UX,您可能需要為記憶體帳戶上的使用者標識元新增記憶體 Blob 數據讀取器或記憶體 Blob 資料參與者,或變更連線的驗證以使用帳戶密鑰/SAS 令牌。 也請確定執行瀏覽器之計算的IP必須位於選取的清單中
公用網路存取 = 已停用 已啟用帳戶金鑰 SAS/帳戶金鑰 是,UX 和 SDK。

注意:若要讓 UX 數據上傳和提交能夠運作,您必須從具有適當記憶體存取權的 Vnet 中存取工作區
公用網路存取 = 已停用 帳戶金鑰已停用 以項目為基礎的驗證 (無認證) 是,UX 和 SDK。

注意:若要讓 UX 數據上傳和提交能夠運作,您必須從具有適當記憶體存取權的 Vnet 中存取工作區

上述案例也應該在受控 Vnet 工作區中運作。 有關受控虛擬網路 (Vnet) 的 AI Foundry 中樞設定,請參閱:如何設定 Azure AI Foundry 中樞的受控網路

Customer-Managed 金鑰 (CMK) 不是 標準部署微調支援的企業案例。

在工作區和儲存空間上使用特殊的網路設定進行微調時,通常會指向網路設定問題。

跨區域部署

微調支援將微調的模型部署至與最初微調模型時的不同區域。 您也可以部署至不同的訂閱/區域。 唯一的限制是,新區域也必須支援微調,而且在部署跨訂用帳戶時,產生部署授權令牌的帳戶必須同時具有來源和目的地訂用帳戶的存取權。 您可以透過 Python 完成跨訂用帳戶/區域部署


# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()
try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<TARGET_SUBSCRIPTION_ID>",
        resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
        workspace_name="<TARGET_PROJECT_NAME>",
    )

workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
    print(f"Creating endpoint in the region:{workspace_region}")
    serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
    created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
        serverless_endpoint
    ).result()
else:
    raise ValueError(
        f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
    )

使用已部署的自訂模型

部署自訂模型後,您就能如同使用其他部署模型般使用該模型。 您可以繼續使用與自定義模型相同的參數,例如溫度和max_tokens,就像您可以搭配其他已部署的模型一樣。

endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key

import requests

url = f"{endpoint.scoring_uri}/v1/chat/completions"

payload = {
    "max_tokens": 1024,
    "messages": [
        {
            "content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
            "role": "user",
        }
    ],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}

response = requests.post(url, json=payload, headers=headers)

response.json()

清除微調的模型

完成模型之後,您可以執行下列程式代碼來清除微調的模型。

workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()

作為標準部署的模型之成本和配額考量

配額會根據每個部署管理。 每個部署的速率限制為每分鐘 200,000 個 token,以及每分鐘 1,000 個 API 請求。 不過,目前我們限制每個專案只能為每個模型部署一次。 如果目前的速率限制無法滿足您的情節,請連絡 Microsoft Azure 支援。

Microsoft 模型的成本

當您將Microsoft模型(例如 Phi-3 模型)部署為標準部署時,您可以在部署精靈的 [ 定價和條款 ] 索引卷標中找到定價資訊。

非 Microsoft 模型的成本

部署為標準配置的非 Microsoft 模型是透過 Azure Marketplace 提供,並整合至 Azure AI Foundry 以供使用。 您可以在部署或微調這些模型時找到 Azure Marketplace 定價。

每次專案訂閱來自 Azure Marketplace 的指定供應專案時,都會建立新的資源來追蹤與其耗用量相關聯的成本。 會使用同一資源來追蹤與推斷和微調相關的成本;不過,可以使用多個計量來獨立追蹤每個場景。

如需如何追蹤成本的詳細資訊,請參閱 監視透過 Azure Marketplace 所提供的模型成本。

顯示對應至不同模型供應項目的資源及其相關聯計量之螢幕擷取畫面。

範例筆記本

您可以使用此 範例筆記本 來建立獨立微調作業,以增強模型使用 Samsum 數據集摘要兩人之間的對話的能力。 使用的定型數據是ultrachat_200k數據集,分為四個分割,適用於監督微調(sft)和產生排名(gen)。 筆記本會針對聊天完成工作採用可用的 Azure AI 模型(如果您想要使用與筆記本中使用的模型不同,您可以取代模型名稱)。 筆記本包括設定必要條件、選取要微調的模型、建立定型和驗證數據集、設定和提交微調作業,最後,使用微調的模型建立無伺服器部署以進行範例推斷。

範例 CLI

此外,您可以使用此範例 CLI 來建立獨立的微調工作,以增強模型使用數據集來摘要兩人之間的對話的能力。

type: finetuning

name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model: 
  path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
  type: mlflow_model
training_data: train.jsonl
validation_data:
  path: validation.jsonl
  type: uri_file
hyperparameters:
  num_train_epochs: "1"
  per_device_train_batch_size: "1"
  learning_rate: "0.00002"
properties:
  my_property: "my_value"
tags:
  foo_tag: "bar"
outputs:
  registered_model:
    name: "Phi-3-mini-4k-instruct-finetuned-model"
    type: mlflow_model 

所使用的定型數據與 SDK 筆記本中所示範的數據相同。 CLI 會針對聊天完成工作採用可用的 Azure AI 模型。 如果您想要使用與 CLI 範例中不同的模型,您可以據以更新自變數,例如「模型路徑」。

內容篩選

標準部署模型受到 Azure AI 內容安全性的保護。 部署至即時端點時,您可以選擇退出此功能。 啟用 Azure AI 內容安全性後,提示和完成都會通過一組分類模型,以偵測及防止有害內容的輸出。 內容篩選系統會偵測並針對輸入提示和輸出完成中潛在有害內容的特定類別採取動作。 深入了解 Azure AI 內容安全 (部分機器翻譯)。

後續步驟