分享方式:


使用微調自訂模型

Azure OpenAI 服務可讓您使用名為「微調」的程序,為個人資料集量身打造模型。 藉由提供下列內容,此自訂步驟可讓您來獲得更多服務:

  • 相較於直接從提示工程獲得的結果,可將品質提升至更高層次
  • 能夠針對超出模型最大要求內容限制的範例進行定型。
  • 由於提示較短而節省權杖
  • 低延遲要求,尤其是使用較小模型時。

相較於小樣本學習,微調會針對遠超出提示容納量的範例進行定型來改善模型,讓您在大量工作中取得更好的結果。 由於微調會調整基底模型的權數,以提升特定工作的效能,因此您不必在提示中盡可能包含更多範例或說明。 這表示每次 API 呼叫時傳送的文字和處理的權杖更少,從而可能節省成本並改善要求延遲。

我們會使用 LoRA (即低秩近似) 微調模型,以降低其複雜性而不會大幅影響效能。 此方法的運作原理是將較低秩的矩陣逼近原始的高秩矩陣,因此在受監督定型階段僅微調「重要」參數的較小子集,從而使模型更易於管理且更有效率。 對於使用者來說,這可讓定型比其他技術更快且價格更合理。

注意

Azure OpenAI 目前僅支援所有支援模型的文字到文字微調,包括 GPT-4o 迷你。

必要條件

模型

下列模型支援微調:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2024-07-18)

* 此模型的微調目前為公開預覽狀態。

或者,您可以對先前微調的模型再次微調,其格式為 base-model.ft-{jobid}。

請參閱模型頁面 (機器翻譯),查看目前支援微調的區域。

檢閱 Azure OpenAI Studio 的工作流程

請花一點時間檢閱使用 Azure OpenAI Studio 的微調工作流程:

  1. 準備您的定型和驗證資料。
  2. 使用 Azure OpenAI Studio 中的 [建立自訂模型] 精靈來定型您的自訂模型。
    1. 選取基底模型
    2. 選擇定型資料
    3. (選擇性) 選擇您的驗證資料
    4. 或者, 為微調作業設定工作參數
    5. 檢閱您的選擇,並定型新的自訂模型
  3. 檢查自訂微調模型的狀態。
  4. 部署自訂模型以供使用。
  5. 使用您的自訂模型。
  6. (選擇性) 分析自訂模型以取得效能並加以調整。

準備您的定型和驗證資料

您的定型資料和驗證資料集包含您想要執行模型之方式的輸入和輸出範例。

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

您使用的定型和驗證資料必須格式化為 JSON Lines (JSONL) 文件。 針對 gpt-35-turbo (所有版本)、gpt-4gpt-4ogpt-4o-mini,微調資料集必須採用聊天完成 API 使用的交談格式。

如需微調 gpt-4o-mini (2024-07-18) 模型的逐步解說,請參閱 Azure OpenAI 微調教學課程 (機器翻譯)。

範例檔案格式

{"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?"}]}

多回合聊天檔案格式

在 jsonl 定型檔案的單行中進行多回合交談亦受支援。 若要跳過對特定助理訊息的微調,請新增選擇性 weight 索引鍵值組。 目前 weight 可設定為 0 或 1。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

除了 JSONL 格式之外,定型和驗證資料檔案還必須以 UTF-8 進行編碼,並包含位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

建立您的定型和驗證資料集

您擁有的定型範例越多越好。 微調作業不會繼續執行至少10個定型範例,但如此少量不足以明顯影響模型回應。 如果無法提供數千個定型範例,起碼須提供數百個定型範例,才是順利完成作業的最佳做法。

一般而言,資料集大小加倍會導致模型品質呈線性增加。 但請記住,低品質範例則可能會對效能造成負面影響。 如果您透過大量內部資料定型模型,而未事先剪除資料集以留下最高品質的範例,則最終可能會得到一個效能比預期更差的模型。

使用 [建立自訂模型] 精靈

Azure OpenAI Studio 提供 [建立自訂模型] 精靈,因此您可以互動方式為 Azure 資源建立和定型微調模型。

  1. https://oai.azure.com/ 開啟 Azure OpenAI Studio,並使用可存取 Azure OpenAI 資源的認證來登入。 在登入工作流程期間,選取適當的目錄、Azure 訂用帳戶和 Azure OpenAI 資源。

  2. 在 Azure OpenAI Studio 中,流覽至 [ 工具 > 微調] 窗格,然後選取 [ 微調模型]。

    螢幕擷取畫面顯示如何在 Azure OpenAI Studio 中存取 [建立自訂模型] 精靈。

[建立自訂模型] 精靈隨即開啟。

選取基底模型

建立自訂模型的第一個步驟為選擇基底模型。 [基底模型] 窗格可讓您選擇要用於自訂模型的基底模型。 您的選擇會影響模型的效能和成本。

從 [基底模型類型] 下拉式清單中選取基底模型,然後選取 [下一步] 以繼續。

您可以從下列其中一個可用的基底模型建立自訂模型:

  • babbage-002

  • davinci-002

  • gpt-35-turbo (0613)

  • gpt-35-turbo (1106)

  • gpt-35-turbo (0125)

  • gpt-4 (0613)

  • 或者,您可以對先前微調的模型再次微調,其格式為 base-model.ft-{jobid}。

螢幕擷取畫面顯示具有自訂微調模型的模型選項。

如需可以微調的基底模型之詳細資訊,請參閱模型

選擇定型資料

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

Azure OpenAI Studio 中 [建立自訂模型] 精靈的 [定型資料] 窗格螢幕擷取畫面。

若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。 如需 Azure Blob 儲存體的詳細資訊,請參閱什麼是 Azure Blob 儲存體?

注意

定型資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

從本機檔案上傳定型資料

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

  • 將檔案拖放至 [定型資料] 窗格的工作區,然後選取 [上傳檔案]

  • 從 [定型資料] 窗格的工作區選取 [瀏覽檔案],從 [開啟] 對話方塊選擇要上傳的檔案,然後選取 [上傳檔案]

選取並上傳定型資料集之後,請選取 [下一步] 以繼續。

[建立自訂模型] 精靈的 [定型資料] 窗格螢幕擷取畫面,其中包含本機檔案選項。

從 Azure Blob 存放區匯入定型資料

您可以藉由提供檔案的名稱和位置,從 Azure Blob 或其他共用 Web 位置匯入定型資料集。

  1. 針對檔案輸入 [檔案名稱]

  2. 針對 [檔案位置],請提供 Azure Blob URL、Azure 儲存體共用存取簽章 (SAS) 或其他可存取共用 Web 位置的連結。

  3. 選取 [ 入] 將定型數據集匯入服務。

選取並上傳定型資料集之後,請選取 [下一步] 以繼續。

[建立自訂模型] 精靈的 [定型資料] 窗格螢幕擷取畫面,其中包含 Azure Blob 和共用 Web 位置選項。

選擇您的驗證資料

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

[驗證資料] 窗格會顯示任何現有、先前上傳的定型和驗證資料集,並提供您可以上傳新驗證資料的選項。

Azure OpenAI Studio 中 [建立自訂模型] 精靈的 [驗證資料] 窗格螢幕擷取畫面。

若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。

注意

類似於定型資料檔案,驗證資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

從本機檔案上傳驗證資料

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

  • 將檔案拖放至 [驗證資料] 窗格的工作區,然後選取 [上傳檔案]

  • 從 [驗證資料] 窗格的工作區選取 [瀏覽檔案],從 [開啟] 對話方塊選擇要上傳的檔案,然後選取 [上傳檔案]

選取並上傳驗證資料集之後,請選取 [下一步] 以繼續。

[建立自訂模型] 精靈的 [驗證資料] 窗格螢幕擷取畫面,其中包含本機檔案選項。

從 Azure Blob 存放區匯入驗證資料

您可以藉由提供檔案的名稱和位置,從 Azure Blob 或其他共用 Web 位置匯入驗證資料集。

  1. 針對檔案輸入 [檔案名稱]

  2. 針對 [檔案位置],請提供 Azure Blob URL、Azure 儲存體共用存取簽章 (SAS) 或其他可存取共用 Web 位置的連結。

  3. 選取 [ 入] 將定型數據集匯入服務。

選取並上傳驗證資料集之後,請選取 [下一步] 以繼續。

[建立自訂模型] 精靈的 [驗證資料] 窗格螢幕擷取畫面,其中包含 Azure Blob 和共用 Web 位置選項。

設定工作參數

[ 建立自定義模型精靈 ] 會顯示在 [工作參數] 窗格上 定型微調模型的參數 。 可用的參數如下:

名稱 類型 說明
batch_size 整數 用於定型的批次大小。 批次大小是用來訓練單一向前和向後傳遞的訓練範例數目。 一般而言,我們發現較大的批次大小通常較適合較大的資料集。 此屬性的預設值和最大值是基底模型所特有的。 批次大小越大,表示模型參數的更新頻率越低,而變異數越少。
learning_rate_multiplier 數值 用於定型的學習速率乘數。 微調學習速率是預先定型所用原始學習速率乘以此值。 學習速率越大,通常在越大的批次大小下擁有更佳效能。 建議您試驗 0.02 到 0.2 這個範圍內的值,看看哪些值會產生最佳結果。 較小的學習速率可能有助於避免過度學習。
n_epochs 整數 定型模型的 Epoch 數目。 Epoch 是指透過定型資料集的完整循環。
seed 整數 種子會控制作業的重現性。 傳入相同的種子和作業參數應該會產生相同的結果,但在罕見的情況下可能會有所不同。 如果未指定種子,則系統會為您產生一個種子

[建立自訂模型] 精靈的 [進階選項] 窗格螢幕擷取畫面,其中已選取預設選項。

選取 [預設值 ] 以使用微調作業的預設值,或選取 [ 自定義 ] 以顯示和編輯超參數值。 選取預設值時,我們會根據您的定型資料透過演算法判斷正確的值。

設定進階選項之後,請選取 [下一步]檢閱您的選擇,並定型微調模型

檢閱選擇並定型模型

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

Azure OpenAI Studio 中 [建立自訂模型] 精靈的 [檢閱] 窗格螢幕擷取畫面。

如果您準備好定型模型,請選取 [開始定型作業] 以啟動微調作業並返回 [模型] 窗格。

檢查自訂模型的狀態

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

Azure OpenAI Studio 中 [模型] 窗格的螢幕擷取畫面,其中顯示自訂模型。

啟動微調作業之後,可能需要一些時間才能完成。 您的作業可能會排入系統中其他作業後方的佇列。 視模型和資料集大小而定,定型模型可能需要幾分鐘或幾小時的時間。

以下是您可以在 [模型] 窗格中執行的工作:

  • 在 [自訂模型] 索引標籤的 [狀態] 資料行中,檢查自訂模型的微調作業狀態。

  • 在 [模型名稱] 資料行中,選取模型名稱以檢視自訂模型的詳細資訊。 您可以查看微調作業的狀態、定型結果、定型事件和作業中使用的超參數。

  • 選取 [下載定型檔案],以下載模型所使用的定型資料。

  • 選取 [下載結果],以下載附加至模型微調作業的結果檔案,並分析自訂模型的定型和驗證效能。

  • 選取 [重新整理] 以更新頁面上的資訊。

Azure OpenAI Studio 中 [模型] 窗格的螢幕擷取畫面,其中顯示自訂模型。

檢查點

當每個定型 Epoch 完成時,就會產生檢查點。 檢查點是模型的完整功能版本,可以部署為並用作後續微調作業的目標模型。 檢查點特別有用,因為其可以在過度學習發生之前提供模型的快照集。 微調作業完成時,您將有三個最新版本的模型可供部署。

GPT-4、GPT-4o 和 GPT-4o-mini 微調的安全評估 - 公開預覽

GPT-4o、GPT-4o-mini 和 GPT-4 是我們最進階的模型,可根據您的需求進行微調。 與 Azure OpenAI 模型的一般情況相同,微調模型的進階功能也帶來了與有害內容、操縱、類似人為行為、隱私權問題等相關的負責任 AI 挑戰。 深入了解負責任 AI 做法概觀 (英文) 和透明度資訊 (英文) 中有關的風險、功能和限制。 為有效降低進階微調模型的相關風險,我們實作了額外的評估步驟,以利偵測和防止微調模型定型和輸出中的有害內容。 這些步驟基於 Microsoft 負責任 AI 標準Azure OpenAI 服務內容篩選

  • 評估是在專用、客戶專屬、私人工作區中進行;
  • 評估端點位於與 Azure OpenAI 資源相同的地理位置;
  • 訓練資料的儲存與評估無關;系統僅會將最終模型評估 (可部署或不可部署) 留存;並且

GPT-4o、GPT-4o-mini 和 GPT-4 微調的模型評估篩選條件設定為預先定義的閾值,無法由客戶修改,且不會繫結至您已建立的任何自訂內容篩選設定。

資料評估

訓練開始之前,會針對您的資料進行評估,以確定是否存在潛在有害內容 (暴力、性、仇恨和公平性、自我傷害–請參閱這裡的類別定義)。 如果偵測到超出指定嚴重性層級的有害內容,則您的訓練作業將會失敗,而且您會收到訊息,通知您失敗類別。

範例訊息:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

訓練資料會在資料匯入作業內自動評估,作為提供微調功能的一部分。

如果微調工作因在訓練資料中偵測到有害內容而失敗,則不會向您收費。

模型評估

訓練完成之後,但在微調的模型可供部署之前,產生的模型會使用 Azure 的內建風險和安全計量來評估潛在的有害回應。 使用與基礎大型語言模型相同的測試方法,我們的評估功能會模擬與微調模型的交談,以評估輸出有害內容的可能性,同樣使用指定的有害內容類別 (暴力、性、仇恨和公平性、自我傷害)。

如果系統發現某個產生的輸出包含檢測為有害的內容,且超出可接受的比率,則會通知您該模型無法部署,並提供您所偵測到具體有害類別的資訊:

範例訊息

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

因安全評估而微調作業失敗的螢幕擷取畫面

如同資料評估,模型會在微調作業內自動評估,作為提供微調功能的一部分。 服務只會記錄評量結果 (可部署或不可部署)。 如果微調的模型部署失敗,是因為偵測到模型輸出中的有害內容,您就不需支付訓練執行的費用。

部署微調模型

微調作業成功時,您可以從 [模型] 窗格部署自訂模型。 您必須部署自訂模型,以使其可用於完成呼叫。

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

注意

自訂模型僅允許一個部署。 如果您選取已部署的自訂模型,則會顯示錯誤訊息。

若要部署自訂模型,請選取要部署的自訂模型,然後選取 [部署模型]

螢幕擷取畫面顯示如何在 Azure OpenAI Studio 中部署自訂模型。

[部署模型] 對話方塊隨即開啟。 在對話方塊中,輸入 [部署名稱],然後選取 [建立] 以開始部署自訂模型。

Azure OpenAI Studio 中 [部署模型] 對話方塊的螢幕擷取畫面。

您可以在 Azure OpenAI Studio 的 [部署] 窗格中監視部署進度。

跨區域部署

微調支援將微調的模型部署至與最初微調模型時的不同區域。 您也可以部署至不同的訂閱/區域。

唯一的限制在於新區域也必須支援微調,且在跨訂閱部署時,產生部署授權權杖的帳戶必須同時具有來源和目的地訂閱的存取權。

跨訂閱/區域部署可以透過 PythonREST 完成。

使用已部署的自訂模型

部署自訂模型後,您就能如同使用其他部署模型般使用該模型。 您可以使用 Azure OpenAI Studio 中的 [遊樂場] 對新部署進行實驗。 您可以繼續對自訂模型使用相同的參數,例如 temperaturemax_tokens,如同對其他部署模型一樣。 針對微調的 babbage-002davinci-002 模型,您會使用 [完成遊樂場] 和 [完成 API]。 針對微調的 gpt-35-turbo-0613 模型,您會使用 [聊天遊樂場] 和 [聊天完成 API]。

Azure OpenAI Studio 中 [遊樂場] 窗格的螢幕擷取畫面,其中已醒目提示各個區段。

分析您的自訂模型

每個微調作業完成後,Azure OpenAI 都會將名為 results.csv 的結果檔案附加至其中。 您可以使用結果檔案來分析自訂模型的定型和驗證效能。 Azure OpenAI Studio [模型] 窗格上的 [結果檔案識別碼] 資料行中,會列出每個自訂模型結果檔案的檔案識別碼。 您可以使用檔案識別碼,從 Azure OpenAI Studio 的 [資料檔案] 窗格識別並下載結果檔案。

結果檔案為 CSV 檔案,其中包含標頭資料列,以及微調作業所執行每個定型步驟的資料列。 該結果檔案包含下列資料行:

資料行名稱 描述
step 定型步驟的數目。 定型步驟代表對一批定型資料的單次向前和向後傳遞。
train_loss 定型批次的遺失。
train_mean_token_accuracy 模型正確預測定型批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
valid_loss 驗證批次的遺失。
validation_mean_token_accuracy 模型正確預測驗證批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
full_valid_loss 在每個 Epoch 結尾計算的驗證遺失。 訓練順利時,損失應該會減少。
full_valid_mean_token_accuracy 在每個 Epoch 結尾計算的有效平均權杖正確性。 當訓練順利進行時,權杖正確性應該會增加。

您也可以在 Azure OpenAI Studio 中以繪圖形式檢視 results.csv 檔案中的資料。 選取已定型模型的連結,您會看到三個圖表:遺失、平均權杖正確性和權杖正確性。 如果您已提供驗證資料,則兩個資料集都會出現在同一繪圖上。

隨著時間推移,您的損失會減少,而正確性會增加。 如果您發現定型資料和驗證資料之間存在差異,則可能表示您過度學習。 嘗試使用較少的 Epoch 或較小的學習速率乘數進行定型。

清除部署、自訂模型和定型檔案

當您完成自訂模型時,可刪除部署和模型。 您也可以刪除上傳至服務的定型和驗證檔案 (如需要)。

刪除模型部署

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

您可以在 Azure OpenAI Studio 的 [部署] 窗格中刪除自訂模型的部署。 選取要刪除的部署,然後選取 [刪除] 以刪除部署。

刪除您的自訂模型

您可以在 Azure OpenAI Studio 的 [模型] 窗格中刪除自訂模型。 從 [自訂模型] 索引標籤中選取要刪除的自訂模型,然後選取 [刪除] 以刪除自訂模型。

注意

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

刪除定型檔案

您可以在 Azure OpenAI Studio 的 [管理] > [資料檔案] 窗格中,選擇性刪除為定型而上傳的定型和驗證檔案,以及在定型期間產生的結果檔案。 選取要刪除的檔案,然後選取 [刪除] 以刪除檔案。

持續微調

建立微調模型之後,建議您透過進一步微調繼續精簡模型。 持續微調是選取已微調模型作為基底模型,並在新的定型範例集中進一步微調的反覆程序。

若要對先前微調的模型執行微調,您可以使用建立自訂模型中所述的相同流程,但請指定已微調的模型,而不是指定一般基底模型的名稱。 自訂微調模型看起來會像 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

[建立自訂模型] UI 的螢幕擷取畫面,其中已醒目提示微調模型。

我們也建議您加入 suffix 參數,以便更輕鬆區分微調模型的不同反覆項目。 suffix 會接受字串,並設定用於識別微調模型。 OpenAI Python API 支援最多 18 個字元的字串,該字串會新增至微調的模型名稱中。

重要

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

必要條件

模型

下列模型支援微調:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2024-07-18)

* 此模型的微調目前為公開預覽狀態。

或者,您可以對先前微調的模型再次微調,其格式為 base-model.ft-{jobid}。

請參閱模型頁面 (機器翻譯),查看目前支援微調的區域。

檢閱 Azure AI Studio 的工作流程

請花一點時間檢閱使用 Azure AI Studio 的微調工作流程:

  1. 準備您的定型和驗證資料。
  2. 使用 Azure AI Studio 中的 [微調模型] 精靈來定型您的自訂模型。
    1. 選取模型
    2. 選擇定型資料
    3. (選擇性) 選擇您的驗證資料
    4. (選擇性) 針對微調作業設定參數
    5. 檢閱您的選擇,並定型新的自訂模型
  3. 檢查微調模型的狀態。
  4. (選擇性) 分析微調模型以取得效能並加以調整。
  5. 部署微調模型以供使用。
  6. 使用微調模型。

準備您的定型和驗證資料

您的定型資料和驗證資料集包含您想要執行模型之方式的輸入和輸出範例。

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

您使用的定型和驗證資料必須格式化為 JSON Lines (JSONL) 文件。 針對 gpt-35-turbo-0613,微調資料集必須採用聊天完成 API 使用的交談格式。

如需微調 gpt-35-turbo-0613 模型的逐步解說,請參閱 Azure OpenAI 微調教學課程 (機器翻譯)

範例檔案格式

{"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?"}]}

多回合聊天檔案格式

在 jsonl 定型檔案的單行中進行多回合交談亦受支援。 若要跳過對特定助理訊息的微調,請新增選擇性 weight 索引鍵值組。 目前 weight 可設定為 0 或 1。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

除了 JSONL 格式之外,定型和驗證資料檔案還必須以 UTF-8 進行編碼,並包含位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

建立您的定型和驗證資料集

您擁有的定型範例越多越好。 微調工作不會繼續至少 10 個定型範例,但如此少量不足以明顯影響模型回應。 如果無法提供數千個定型範例,起碼須提供數百個定型範例,才是順利完成作業的最佳做法。

一般而言,資料集大小加倍會導致模型品質呈線性增加。 但請記住,低品質範例則可能會對效能造成負面影響。 如果您透過大量內部資料定型模型,而未事先剪除資料集以留下最高品質的範例,則最終可能會得到一個效能比預期更差的模型。

建立微調模型

若要微調現有 Azure AI Studio 專案中的 Azure OpenAI 模型,請遵循下列步驟:

  1. 登入 Azure AI Studio,然後選取您的專案。 如果您還沒有專案,請先建立專案

  2. 從可折疊的左側功能表中,選取 [微調] > [+ 微調模型]

    螢幕擷取畫面顯示開始建立新微調模型的選項。

選取基底模型

  1. 選取要微調的基底模型。 您的選擇會影響模型的效能和成本。 在此範例中,我們會選擇 gpt-35-turbo 模型。 然後,選取 [確認]

    螢幕擷取畫面顯示選取要微調的模型選項。

  2. 針對 gpt-35-turbo,我們有不同的版本可供微調,因此請選擇您要微調的版本。 我們會選擇 (0301)。

  3. 我們也建議您加入 suffix 參數,以便更輕鬆區分微調模型的不同反覆項目。 suffix 會接受字串,並設定用於識別微調模型。 OpenAI Python API 支援最多 18 個字元的字串,該字串會新增至微調的模型名稱中。

如果您已啟用多個 Azure OpenAI 連線進行微調,請選擇要使用的資源。 請注意,所有具有 Azure OpenAI 資源存取權的使用者,都能存取此微調模型。

  1. 然後選取下一步

    螢幕擷取畫面顯示用於微調模型的基本設定。

選擇定型資料

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

Azure AI Studio 中 [微調模型] 精靈的 [定型資料] 窗格螢幕擷取畫面。

  • 如果專案中已有定型資料,請選取 [Data in Azure AI Studio] \(Azure AI Studio 中的資料\)

    • 從 [定型資料] 窗格所顯示的清單中選取檔案。
  • 如果定型資料已上傳至 Azure OpenAI 服務,請在 [Azure OpenAI 連線] 底下選取您的 Azure OpenAI 連線。

  • 若要上傳定型資料以微調模型,請選取 [上傳資料],然後選取 [上傳檔案]

    • 請確定所有定型範例都遵循預期的推斷格式。 若要有效地微調模型,請確定平衡且多樣化的資料集。 這涉及維護資料平衡,包括各種案例,並定期精簡定型資料以符合真實世界的期望,最終導致更精確且平衡的模型回應。 如需詳細資訊,請參閱資料準備
    • 若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。 如需 Azure Blob 儲存體的詳細資訊,請參閱什麼是 Azure Blob 儲存體?

注意

定型資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

螢幕擷取畫面顯示從本機上傳定型資料的選項。

上傳檔案之後,您會看到定型資料的預覽。 選取下一步以繼續。

定型資料預覽的螢幕擷取畫面。

選擇您的驗證資料

您也可以選擇提供驗證資料來微調模型。 如果您不想要使用驗證資料,可以選取 [無],然後選取 [下一步] 前往模型的進階選項。

否則,如果您具有驗證資料集,則可以從先前上傳的資料中加以選擇,或上傳新備妥驗證資料以供用於微調模型。

注意

類似於定型資料檔案,驗證資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

設定參數

(選擇性) 針對微調作業設定參數。 下列項目可供使用:

名稱 類型 說明
batch_size 整數 用於定型的批次大小。 批次大小是用來訓練單一向前和向後傳遞的訓練範例數目。 一般而言,我們發現較大的批次大小通常較適合較大的資料集。 此屬性的預設值和最大值是基底模型所特有的。 批次大小越大,表示模型參數的更新頻率越低,而變異數越少。 當設定為 -1 時,batch_size 會計算為訓練集中範例的 0.2%,最大值為 256。
learning_rate_multiplier 數值 用於定型的學習速率乘數。 微調學習速率是預先定型所用原始學習速率乘以此值。 學習速率越大,通常在越大的批次大小下擁有更佳效能。 建議您試驗 0.02 到 0.2 這個範圍內的值,看看哪些值會產生最佳結果。 較小的學習速率可能有助於避免過度學習。
n_epochs 整數 定型模型的 Epoch 數目。 Epoch 是指透過定型資料集的完整循環。 如果設定為 -1,則會根據輸入資料動態決定 Epoch 數目。
seed 整數 種子會控制作業的重現性。 傳入相同的種子和作業參數應該會產生相同的結果,但在罕見的情況下可能會有所不同。 如果未指定種子,將會為您產生一個種子。

您可以選擇保留預設設定,或根據喜好設定自訂值。 完成設定之後,請選取 [下一步]

檢閱選擇並定型模型

檢閱您的選擇,然後選取 [提交] 以開始定型新的微調模型。

檢查微調模型的狀態

提交微調作業之後,您會看到包含微調模型詳細資料的頁面。 在 Azure AI Studio 的 [微調] > [模型] 頁面中,您可以找到微調模型的狀態和詳細資訊。

您的作業可能會排入系統中其他作業後方的佇列。 視模型和資料集大小而定,定型模型可能需要幾分鐘或幾小時的時間。

分析微調模型

成功完成微調之後,您可以從微調模型頁面的 [詳細資料] 索引標籤中下載名為 results.csv 的結果檔案。您可以使用結果檔案來分析自訂模型的定型和驗證效能。

結果檔案為 CSV 檔案,其中包含標頭資料列,以及微調作業所執行每個定型步驟的資料列。 該結果檔案包含下列資料行:

資料行名稱 描述
step 定型步驟的數目。 定型步驟代表對一批定型資料的單次向前和向後傳遞。
train_loss 定型批次的遺失。
train_mean_token_accuracy 模型正確預測定型批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
valid_loss 驗證批次的遺失。
validation_mean_token_accuracy 模型正確預測驗證批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
full_valid_loss 在每個 Epoch 結尾計算的驗證遺失。 訓練順利時,損失應該會減少。
full_valid_mean_token_accuracy 在每個 Epoch 結尾計算的有效平均權杖正確性。 當訓練順利進行時,權杖正確性應該會增加。

您也可以在 Azure AI Studio 中微調模型的 [計量] 索引標籤下,以繪圖形式檢視 results.csv 檔案中的資料。 選取已定型模型的連結,您會看到兩張圖表:遺失和權杖正確性。 如果您已提供驗證資料,則兩個資料集都會出現在同一繪圖上。

[計量] 頁面的螢幕擷取畫面。

隨著時間推移,您的損失會減少,而正確性會增加。 如果您發現定型資料和驗證資料之間存在差異,則可能表示您過度學習。 嘗試使用較少的 Epoch 或較小的學習速率乘數進行定型。

檢查點

當每個定型 Epoch 完成時,就會產生檢查點。 檢查點是模型的完整功能版本,可以部署為並用作後續微調作業的目標模型。 檢查點特別有用,因為其可以在過度學習發生之前提供模型的快照集。 微調作業完成時,您將有三個最新版本的模型可供部署。

檢查點 UI 的螢幕擷取畫面。

GPT-4、GPT-4o、GPT-4o-mini 微調的安全評估 - 公開預覽

GPT-4o、GPT-4o-mini 和 GPT-4 是我們最進階的模型,可根據您的需求進行微調。 與 Azure OpenAI 模型的一般情況相同,微調模型的進階功能也帶來了與有害內容、操縱、類似人為行為、隱私權問題等相關的負責任 AI 挑戰。 深入了解負責任 AI 做法概觀 (英文) 和透明度資訊 (英文) 中有關的風險、功能和限制。 為有效降低進階微調模型的相關風險,我們實作了額外的評估步驟,以利偵測和防止微調模型定型和輸出中的有害內容。 這些步驟基於 Microsoft 負責任 AI 標準Azure OpenAI 服務內容篩選

  • 評估是在專用、客戶專屬、私人工作區中進行;
  • 評估端點位於與 Azure OpenAI 資源相同的地理位置;
  • 訓練資料的儲存與評估無關;系統僅會將最終模型評估 (可部署或不可部署) 留存;並且

GPT-4o、GPT-4o-mini 和 GPT-4 微調的模型評估篩選條件設定為預先定義的閾值,無法由客戶修改,且不會繫結至您已建立的任何自訂內容篩選設定。

資料評估

訓練開始之前,會針對您的資料進行評估,以確定是否存在潛在有害內容 (暴力、性、仇恨和公平性、自我傷害–請參閱這裡的類別定義)。 如果偵測到超出指定嚴重性層級的有害內容,則您的訓練作業將會失敗,而且您會收到訊息,通知您失敗類別。

範例訊息:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

訓練資料會在資料匯入作業內自動評估,作為提供微調功能的一部分。

如果微調工作因在訓練資料中偵測到有害內容而失敗,則不會向您收費。

模型評估

訓練完成之後,但在微調的模型可供部署之前,產生的模型會使用 Azure 的內建風險和安全計量來評估潛在的有害回應。 使用與基礎大型語言模型相同的測試方法,我們的評估功能會模擬與微調模型的交談,以評估輸出有害內容的可能性,同樣使用指定的有害內容類別 (暴力、性、仇恨和公平性、自我傷害)。

如果系統發現某個產生的輸出包含檢測為有害的內容,且超出可接受的比率,則會通知您該模型無法部署,並提供您所偵測到具體有害類別的資訊:

範例訊息

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

因安全評估而微調作業失敗的螢幕擷取畫面

如同資料評估,模型會在微調作業內自動評估,作為提供微調功能的一部分。 服務只會記錄評量結果 (可部署或不可部署)。 如果微調的模型部署失敗,是因為偵測到模型輸出中的有害內容,您就不需支付訓練執行的費用。

部署微調模型

微調模型之後,您就可以部署模型,並在自己的應用程式中使用。 您無法從 Azure AI Studio 的部署頁面或遊樂場頁面中部署微調模型。 目前,若要部署微調模型,唯一方法便是透過該模型的模型詳細資料頁面。

當您部署模型時,會讓模型可供推斷使用,因而產生每小時裝載費用。 如果是微調模型,則在您準備好使用這些模型之前,都能免費儲存於 Azure AI Studio 中。

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

注意

微調模型僅允許一個部署。 如果您選取已部署的微調模型,則會顯示錯誤訊息。

您可以在 Azure AI Studio 的 [部署] 頁面中監視部署進度。

使用已部署的微調模型

部署微調模型後,您就能如同使用其他部署模型般使用該模型。 您可以使用 Azure AI Studio 中的 [遊樂場] 對新部署進行實驗。 您也可以使用 REST API,從自己的應用程式呼叫微調模型。 您甚至可以開始在提示流程中使用此新微調模型,以建置生成式 AI 應用程式。

注意

對於聊天模型,您用於引導微調模型的系統訊息 (無論是否已部署或可在遊樂場中進行測試),必須與用於定型的系統訊息相同。 如果您使用不同的系統訊息,模型可能無法如預期般執行。

清除部署、微調模型和定型檔案

當您完成微調模型時,可刪除部署和模型。 您也可以刪除上傳至服務的定型和驗證檔案 (如需要)。

刪除微調模型部署

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

您可以在 Azure AI Studio 的 [部署] 頁面中刪除微調模型的部署。 選取要刪除的部署,然後選取 [刪除] 以刪除部署。

刪除微調模型

您可以在 Azure AI Studio 的 [微調] 頁面中刪除微調模型。 選取要刪除的微調模型,然後選取 [刪除] 以刪除微調模型。

注意

如果微調模型具有現有部署,則無法刪除微調模型。 您必須先刪除模型部署,才能刪除微調模型。

刪除定型檔案

您可以選擇刪除為定型而上傳的定型和驗證檔案,以及在定型期間產生的結果檔案。 為此,您必須移至 Azure OpenAI Studio,然後瀏覽至 [管理] > [資料檔案] 窗格。 選取要刪除的檔案,然後選取 [刪除] 以刪除檔案。

必要條件

模型

下列模型支援微調:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2024-07-18)

* 此模型的微調目前為公開預覽狀態。

或者,您可以對先前微調的模型再次進行微調,格式為 base-model.ft-{jobid}

螢幕擷取畫面顯示具有自訂微調模型的模型選項。

請參閱模型頁面 (機器翻譯),查看目前支援微調的區域。

檢閱 Python SDK 的工作流程

請花一點時間檢閱搭配 Azure OpenAI 使用 Python SDK 的微調工作流程:

  1. 準備您的定型和驗證資料。
  2. 選取基底模型。
  3. 上傳定型資料。
  4. 定型新的自訂模型。
  5. 檢查自訂模型的狀態。
  6. 部署自訂模型以供使用。
  7. 使用自訂模型。
  8. (選擇性) 分析自訂模型以取得效能並加以調整。

準備您的定型和驗證資料

您的定型資料和驗證資料集包含您想要執行模型之方式的輸入和輸出範例。

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

您使用的定型和驗證資料必須格式化為 JSON Lines (JSONL) 文件。 針對 gpt-35-turbo-0613,微調資料集必須採用聊天完成 API 使用的交談格式。

如需微調 gpt-35-turbo-0613 的逐步解說,請參閱 Azure OpenAI 微調教學課程 (機器翻譯)

範例檔案格式

{"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?"}]}

多回合聊天檔案格式

在 jsonl 定型檔案的單行中進行多回合交談亦受支援。 若要跳過對特定助理訊息的微調,請新增選擇性 weight 索引鍵值組。 目前 weight 可設定為 0 或 1。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

除了 JSONL 格式之外,定型和驗證資料檔案還必須以 UTF-8 進行編碼,並包含位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

建立您的定型和驗證資料集

您擁有的定型範例越多越好。 微調作業需要至少 10 個定型範例才能進行,但如此如此少量的範例不足以顯著影響模型回應。 如果無法提供數千個定型範例,起碼須提供數百個定型範例,才是順利完成作業的最佳做法。

一般而言,資料集大小加倍會導致模型品質呈線性增加。 但請記住,低品質範例則可能會對效能造成負面影響。 如果您透過大量內部資料定型模型,而未事先剪除資料集以留下最高品質的範例,則最終可能會得到一個效能比預期更差的模型。

上傳定型資料集

下一個步驟是選擇現有的備妥定型資料,或上傳自訂模型時要使用的新備妥定型資料。 備妥定型資料後,您可以將檔案上傳至服務。 上傳定型資料有兩種方式:

若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。 如需 Azure Blob 儲存體的詳細資訊,請參閱什麼是 Azure Blob 儲存體?

注意

定型資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

下列 Python 範例會使用 Python SDK 上傳本機定型和驗證檔案,並擷取傳回的檔案識別碼。

# Upload fine-tuning files

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-05-01-preview"  # This API version or later is required to access seed/events/checkpoint capabilities
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

建立自訂模型

上傳定型和驗證檔案之後,您就可以開始微調作業。

下列 Python 程式碼示範如何使用 Python SDK 建立新的微調作業範例:

在此範例中,我們也會傳遞種子參數。 種子會控制作業的重現性。 傳入相同的種子和作業參數應該會產生相同的結果,但在罕見的情況下可能會有所不同。 如果未指定種子,將會為您產生一個種子。

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
    seed = 105  # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

您也可以傳遞其他選擇性參數 (例如超參數),以進一步控制微調流程。 針對初始定型,建議您使用已存在的自動預設值,而非指定這些參數。

目前支援用於微調的超參數如下:

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

若要使用 1.x 版的 OpenAI Python API 來設定自訂超參數:

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

檢查微調作業狀態

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

列出微調事件

若要檢查訓練期間產生的個別微調事件:

您可能需要使用 pip install openai --upgrade 將 OpenAI 用戶端程式庫升級至最新版本,才能執行此命令。

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

檢查點

當每個定型 Epoch 完成時,就會產生檢查點。 檢查點是模型的完整功能版本,可以部署為並用作後續微調作業的目標模型。 檢查點特別有用,因為其可以在過度學習發生之前提供模型的快照集。 微調作業完成時,您將有三個最新版本的模型可供部署。 最終 Epoch 將會以微調模型來表示,而前兩個 Epoch 將做為檢查點使用。

您可以執行清單檢查點命令來擷取與個別微調作業相關聯的檢查點清單:

您可能需要使用 pip install openai --upgrade 將 OpenAI 用戶端程式庫升級至最新版本,才能執行此命令。

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

GPT-4、GPT-4o、GPT-4o-mini 微調的安全評估 - 公開預覽

GPT-4o、GPT-4o-mini 和 GPT-4 是我們最進階的模型,可根據您的需求進行微調。 與 Azure OpenAI 模型的一般情況相同,微調模型的進階功能也帶來了與有害內容、操縱、類似人為行為、隱私權問題等相關的負責任 AI 挑戰。 深入了解負責任 AI 做法概觀 (英文) 和透明度資訊 (英文) 中有關的風險、功能和限制。 為有效降低進階微調模型的相關風險,我們實作了額外的評估步驟,以利偵測和防止微調模型定型和輸出中的有害內容。 這些步驟基於 Microsoft 負責任 AI 標準Azure OpenAI 服務內容篩選

  • 評估是在專用、客戶專屬、私人工作區中進行;
  • 評估端點位於與 Azure OpenAI 資源相同的地理位置;
  • 訓練資料的儲存與評估無關;系統僅會將最終模型評估 (可部署或不可部署) 留存;並且

GPT-4o、GPT-4o-mini 和 GPT-4 微調的模型評估篩選條件設定為預先定義的閾值,無法由客戶修改,且不會繫結至您已建立的任何自訂內容篩選設定。

資料評估

訓練開始之前,會針對您的資料進行評估,以確定是否存在潛在有害內容 (暴力、性、仇恨和公平性、自我傷害–請參閱這裡的類別定義)。 如果偵測到超出指定嚴重性層級的有害內容,則您的訓練作業將會失敗,而且您會收到訊息,通知您失敗類別。

範例訊息:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

訓練資料會在資料匯入作業內自動評估,作為提供微調功能的一部分。

如果微調工作因在訓練資料中偵測到有害內容而失敗,則不會向您收費。

模型評估

訓練完成之後,但在微調的模型可供部署之前,產生的模型會使用 Azure 的內建風險和安全計量來評估潛在的有害回應。 使用與基礎大型語言模型相同的測試方法,我們的評估功能會模擬與微調模型的交談,以評估輸出有害內容的可能性,同樣使用指定的有害內容類別 (暴力、性、仇恨和公平性、自我傷害)。

如果系統發現某個產生的輸出包含檢測為有害的內容,且超出可接受的比率,則會通知您該模型無法部署,並提供您所偵測到具體有害類別的資訊:

範例訊息

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

因安全評估而微調作業失敗的螢幕擷取畫面

如同資料評估,模型會在微調作業內自動評估,作為提供微調功能的一部分。 服務只會記錄評量結果 (可部署或不可部署)。 如果微調的模型部署失敗,是因為偵測到模型輸出中的有害內容,您就不需支付訓練執行的費用。

部署微調模型

當微調作業成功時,回應主體中 fine_tuned_model 變數的值將設定為自訂模型的名稱。 您的模型現在也可供從清單模型 API 進行探索。 然而,在部署自訂模型之前,您無法對自訂模型發出完成呼叫。 您必須部署自訂模型,以使其可用於完成呼叫。

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

您也可以使用 Azure AI StudioAzure CLI 來部署您的自定義模型。

注意

自訂模型僅允許一個部署。 如果您選取已部署的自訂模型,則會發生錯誤。

有別於先前的 SDK 命令,您必須使用控制平面 API 來完成部署,而這需要個別的授權、不同的 API 路徑和不同的 API 版本。

variable 定義
token 有多種方式可以產生授權權杖。 初始測試最簡單的方法是從 Azure 入口網站啟動Cloud Shell。 接著,執行 az account get-access-token。 您可以使用此權杖作為 API 測試的暫時授權權杖。 建議您將此儲存在新的環境變數中。
訂用帳戶 相關聯 Azure OpenAI 資源的訂閱識別碼。
resource_group Azure OpenAI 資源的資源群組名稱。
resource_name Azure OpenAI 資源名稱。
model_deployment_name 新微調模型部署的自訂名稱。 這是執行聊天完成呼叫時,在程式碼中參考的名稱。
fine_tuned_model 從上一個步驟的微調作業結果中擷取此值。 其將會如 gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83 所示。 您必須將此值新增至 deploy_data json。 或者,您也可以透過傳遞檢查點識別碼 (格式為 ftchkpt-e559c011ecc04fc68eaa339d8227d02d) 來部署檢查點
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

跨區域部署

微調支援將微調的模型部署至與最初微調模型時的不同區域。 您也可以部署至不同的訂閱/區域。

唯一的限制在於新區域也必須支援微調,且在跨訂閱部署時,產生部署授權權杖的帳戶必須同時具有來源和目的地訂閱的存取權。

以下是將某個訂閱/區域中微調的模型部署至另一個訂閱/區域的範例。

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}



deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

若要在同一訂閱但不同區域之間進行部署,您只需讓來源變數與目的地變數的訂閱和資源群組相同,而且只有來源和目的地資源名稱必須是唯一的。

使用 Azure CLI 部署模型

下列範例示範如何使用 Azure CLI 來部署自訂模型。 使用 Azure CLI,您必須指定自訂模型部署的名稱。 如需如何使用 Azure CLI 部署自訂模型的詳細資訊,請參閱 az cognitiveservices account deployment

若要在主控台視窗中執行此 Azure CLI 命令,您必須使用自訂模型的對應值取代下列<預留位置>

預留位置
<YOUR_AZURE_SUBSCRIPTION> 您 Azure 訂用帳戶的名稱或識別碼。
<YOUR_RESOURCE_GROUP> Azure 資源群組的名稱。
<YOUR_RESOURCE_NAME> 您 Azure OpenAI 資源的名稱。
<YOUR_DEPLOYMENT_NAME> 您要用於模型部署的名稱。
<YOUR_FINE_TUNED_MODEL_ID> 您自訂模型的名稱。
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

使用已部署的自訂模型

部署自訂模型後,您就能如同使用其他部署模型般使用該模型。 您可以使用 Azure AI Studio 中的遊樂場來實驗您的新部署。 您可以繼續對自訂模型使用相同的參數,例如 temperaturemax_tokens,如同對其他部署模型一樣。 針對微調的 babbage-002davinci-002 模型,您會使用 [完成遊樂場] 和 [完成 API]。 針對微調的 gpt-35-turbo-0613 模型,您會使用 [聊天遊樂場] 和 [聊天完成 API]。

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

print(response.choices[0].message.content)

分析自訂模型

每個微調作業完成後,Azure OpenAI 都會將名為 results.csv 的結果檔案附加至其中。 您可以使用結果檔案來分析自訂模型的定型和驗證效能。 結果檔案的檔案識別碼會針對每個自訂模型列出,並且您可以使用 Python SDK 來擷取檔案識別碼和下載結果檔案進行分析。

下列 Python 範例會擷取附加至自訂模型微調作業中第一個結果檔案的檔案識別碼,然後使用 Python SDK 將檔案下載至工作目錄進行分析。

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

結果檔案為 CSV 檔案,其中包含標頭資料列,以及微調作業所執行每個定型步驟的資料列。 該結果檔案包含下列資料行:

資料行名稱 描述
step 定型步驟的數目。 定型步驟代表對一批定型資料的單次向前和向後傳遞。
train_loss 定型批次的遺失。
train_mean_token_accuracy 模型正確預測定型批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
valid_loss 驗證批次的遺失。
validation_mean_token_accuracy 模型正確預測驗證批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
full_valid_loss 在每個 Epoch 結尾計算的驗證遺失。 訓練順利時,損失應該會減少。
full_valid_mean_token_accuracy 在每個 Epoch 結尾計算的有效平均權杖正確性。 當訓練順利進行時,權杖正確性應該會增加。

您也可以將results.csv檔案中的數據檢視為 Azure AI Studio 中的繪圖。 選取已定型模型的連結,您會看到三個圖表:遺失、平均權杖正確性和權杖正確性。 如果您已提供驗證資料,則兩個資料集都會出現在同一繪圖上。

隨著時間推移,您的損失會減少,而正確性會增加。 如果您發現定型資料和驗證資料之間存在差異,則可能表示您過度學習。 嘗試使用較少的 Epoch 或較小的學習速率乘數進行定型。

清除部署、自訂模型和定型檔案

當您完成自訂模型時,可刪除部署和模型。 您也可以刪除上傳至服務的定型和驗證檔案 (如需要)。

刪除模型部署

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

您可以使用各種方法來刪除自訂模型的部署:

刪除自訂模型

同樣地,您可以使用各種方法來刪除自訂模型:

注意

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

刪除定型檔案

您可以選擇從 Azure OpenAI 訂閱中刪除為定型而上傳的定型和驗證檔案,以及在定型期間產生的結果檔案。 您可以使用下列方法來刪除定型、驗證和結果檔案:

下列 Python 範例會使用 Python SDK 來刪除自訂模型的定型、驗證和結果檔案:

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

持續微調

建立微調模型之後,建議您透過進一步微調繼續精簡模型。 持續微調是選取已微調模型作為基底模型,並在新的定型範例集中進一步微調的反覆程序。

若要對先前微調的模型執行微調,您可以使用建立自訂模型中所述的相同流程,但請指定已微調模型的識別碼,而不是指定一般基底模型的名稱。 微調模型的識別碼看起來像 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  
)

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

我們也建議您加入 suffix 參數,以便更輕鬆區分微調模型的不同反覆項目。 suffix 會接受字串,並設定用於識別微調模型。 OpenAI Python API 支援最多 18 個字元的字串,該字串會新增至微調的模型名稱中。

如果您不確定現有微調模型的標識符,您可以在 Azure AI Studio 的 [模型] 頁面中找到這項資訊,或者您可以使用 REST API 為指定的 Azure OpenAI 資源產生模型清單。

必要條件

模型

下列模型支援微調:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2024-07-18)

* 此模型的微調目前為公開預覽狀態。

或者,您可以對先前微調的模型再次微調,其格式為 base-model.ft-{jobid}。

請參閱模型頁面 (機器翻譯),查看目前支援微調的區域。

檢閱 REST API 的工作流程

請花一點時間檢閱搭配 Azure OpenAI 使用 REST API 和 Python 的微調工作流程:

  1. 準備您的定型和驗證資料。
  2. 選取基底模型。
  3. 上傳定型資料。
  4. 定型新的自訂模型。
  5. 檢查自訂模型的狀態。
  6. 部署自訂模型以供使用。
  7. 使用自訂模型。
  8. (選擇性) 分析自訂模型以取得效能並加以調整。

準備您的定型和驗證資料

您的定型資料和驗證資料集包含您想要執行模型之方式的輸入和輸出範例。

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

您使用的定型和驗證資料必須格式化為 JSON Lines (JSONL) 文件。 針對 gpt-35-turbo-0613 和其他相關模型,微調資料集必須採用聊天完成 API 使用的交談格式。

如需微調 gpt-35-turbo-0613 的逐步解說,請參閱 Azure OpenAI 微調教學課程 (機器翻譯)

範例檔案格式

{"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?"}]}

多回合聊天檔案格式

在 jsonl 定型檔案的單行中進行多回合交談亦受支援。 若要跳過對特定助理訊息的微調,請新增選擇性 weight 索引鍵值組。 目前 weight 可設定為 0 或 1。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

除了 JSONL 格式之外,定型和驗證資料檔案還必須以 UTF-8 進行編碼,並包含位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

建立您的定型和驗證資料集

您擁有的定型範例越多越好。 微調作業需要至少 10 個定型範例才能進行,但如此如此少量的範例不足以顯著影響模型回應。 如果無法提供數千個定型範例,起碼須提供數百個定型範例,才是順利完成作業的最佳做法。

一般而言,資料集大小加倍會導致模型品質呈線性增加。 但請記住,低品質範例則可能會對效能造成負面影響。 如果您透過大量內部資料定型模型,而未事先剪除資料集以留下最高品質的範例,則最終可能會得到一個效能比預期更差的模型。

選取基底模型

建立自訂模型的第一個步驟為選擇基底模型。 [基底模型] 窗格可讓您選擇要用於自訂模型的基底模型。 您的選擇會影響模型的效能和成本。

從 [基底模型類型] 下拉式清單中選取基底模型,然後選取 [下一步] 以繼續。

您可以從下列其中一個可用的基底模型建立自訂模型:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2023-07-18)

或者,您可以對先前微調的模型再次微調,其格式為 base-model.ft-{jobid}。

螢幕擷取畫面顯示具有自訂微調模型的模型選項。

如需可以微調的基底模型之詳細資訊,請參閱模型

上傳定型資料集

下一個步驟是選擇現有的備妥定型資料,或上傳微調模型時要使用的新備妥定型資料。 備妥定型資料後,您可以將檔案上傳至服務。 上傳定型資料有兩種方式:

若為大型資料檔案,建議您從 Azure Blob 存放區匯入。 透過多部分表單上傳大型檔案時會變得不穩定,因為這些要求不可部分完成,而且無法重試或繼續。 如需 Azure Blob 儲存體的詳細資訊,請參閱什麼是 Azure Blob 儲存體?

注意

定型資料檔案必須格式化為 JSONL 檔案、以 UTF-8 編碼,並以位元組順序標記 (BOM)。 檔案大小必須小於 512 MB。

上傳定型資料

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

上傳驗證資料

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

建立自訂模型

上傳定型和驗證檔案之後,您就可以開始微調作業。 下列程式碼示範如何使用 REST API 建立新微調作業 (部分機器翻譯) 的範例。

在此範例中,我們也會傳遞種子參數。 種子會控制作業的重現性。 傳入相同的種子和作業參數應該會產生相同的結果,但在罕見的情況下,可能會有所不同。 如果未指定種子,將會為您產生一個種子。

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

您也可以傳遞其他選擇性參數 (例如超參數),以進一步控制微調流程。 針對初始定型,建議您使用已存在的自動預設值,而非指定這些參數。

目前支援用於微調的超參數如下:

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

檢查自訂模型的狀態

啟動微調作業之後,可能需要一些時間才能完成。 您的作業可能會排入系統中其他作業後方的佇列。 視模型和資料集大小而定,定型模型可能需要幾分鐘或幾小時的時間。 下列範例會使用 REST API 來檢查微調作業的狀態。 此範例會使用上一個範例傳回的作業識別碼,擷取作業的相關資訊:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

列出微調事件

若要檢查訓練期間產生的個別微調事件:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

檢查點

當每個定型 Epoch 完成時,就會產生檢查點。 檢查點是模型的完整功能版本,可以部署為並用作後續微調作業的目標模型。 檢查點特別有用,因為其可以在過度學習發生之前提供模型的快照集。 微調作業完成時,您將有三個最新版本的模型可供部署。 最終 Epoch 將會以微調模型來表示,而前兩個 Epoch 將做為檢查點使用。

您可以執行清單檢查點命令來擷取與個別微調作業相關聯的檢查點清單:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

GPT-4、GPT-4o、GPT-4o-mini 微調的安全評估 - 公開預覽

GPT-4o、GPT-4o-mini 和 GPT-4 是我們最進階的模型,可根據您的需求進行微調。 與 Azure OpenAI 模型的一般情況相同,微調模型的進階功能也帶來了與有害內容、操縱、類似人為行為、隱私權問題等相關的負責任 AI 挑戰。 深入了解負責任 AI 做法概觀 (英文) 和透明度資訊 (英文) 中有關的風險、功能和限制。 為有效降低進階微調模型的相關風險,我們實作了額外的評估步驟,以利偵測和防止微調模型定型和輸出中的有害內容。 這些步驟基於 Microsoft 負責任 AI 標準Azure OpenAI 服務內容篩選

  • 評估是在專用、客戶專屬、私人工作區中進行;
  • 評估端點位於與 Azure OpenAI 資源相同的地理位置;
  • 訓練資料的儲存與評估無關;系統僅會將最終模型評估 (可部署或不可部署) 留存;並且

GPT-4o、GPT-4o-mini 和 GPT-4 微調的模型評估篩選條件設定為預先定義的閾值,無法由客戶修改,且不會繫結至您已建立的任何自訂內容篩選設定。

資料評估

訓練開始之前,會針對您的資料進行評估,以確定是否存在潛在有害內容 (暴力、性、仇恨和公平性、自我傷害–請參閱這裡的類別定義)。 如果偵測到超出指定嚴重性層級的有害內容,則您的訓練作業將會失敗,而且您會收到訊息,通知您失敗類別。

範例訊息:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

訓練資料會在資料匯入作業內自動評估,作為提供微調功能的一部分。

如果微調工作因在訓練資料中偵測到有害內容而失敗,則不會向您收費。

模型評估

訓練完成之後,但在微調的模型可供部署之前,產生的模型會使用 Azure 的內建風險和安全計量來評估潛在的有害回應。 使用與基礎大型語言模型相同的測試方法,我們的評估功能會模擬與微調模型的交談,以評估輸出有害內容的可能性,同樣使用指定的有害內容類別 (暴力、性、仇恨和公平性、自我傷害)。

如果系統發現某個產生的輸出包含檢測為有害的內容,且超出可接受的比率,則會通知您該模型無法部署,並提供您所偵測到具體有害類別的資訊:

範例訊息

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

因安全評估而微調作業失敗的螢幕擷取畫面

如同資料評估,模型會在微調作業內自動評估,作為提供微調功能的一部分。 服務只會記錄評量結果 (可部署或不可部署)。 如果微調的模型部署失敗,是因為偵測到模型輸出中的有害內容,您就不需支付訓練執行的費用。

部署微調模型

重要

部署自訂模型之後,如果在任何時候該部署處於非使用中的狀態超過十五 (15) 天,則系統會刪除該部署。 如果模型部署的時間超過十五 (15) 天,而且在連續 15 天內沒有針對模型進行完成或聊天完成呼叫,則自訂模型的部署為「非使用中」

刪除非使用中的部署不會刪除或影響基礎自訂模型,且自訂模型可以隨時進行重新部署。 如 Azure OpenAI 服務定價中所述,每個部署的自訂 (微調) 模型都會產生每小時裝載成本,無論是否要對模型進行完成或聊天完成呼叫。 若要深入了解使用 Azure OpenAI 規劃和管理成本,請參閱規劃管理 Azure OpenAI 服務的成本 (機器翻譯) 中的指引。

下列 Python 範例示範如何使用 REST API 為自訂模型建立模型部署。 REST API 會產生自訂模型部署的名稱。

variable 定義
token 有多種方式可以產生授權權杖。 初始測試最簡單的方法是從 Azure 入口網站啟動Cloud Shell。 接著,執行 az account get-access-token。 您可以使用此權杖作為 API 測試的暫時授權權杖。 建議您將此儲存在新的環境變數中。
訂用帳戶 相關聯 Azure OpenAI 資源的訂閱識別碼。
resource_group Azure OpenAI 資源的資源群組名稱。
resource_name Azure OpenAI 資源名稱。
model_deployment_name 新微調模型部署的自訂名稱。 這是執行聊天完成呼叫時,在程式碼中參考的名稱。
fine_tuned_model 從上一個步驟的微調作業結果中擷取此值。 其將會如 gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83 所示。 您必須將此值新增至 deploy_data json。 或者,您也可以透過傳遞檢查點識別碼 (格式為 ftchkpt-e559c011ecc04fc68eaa339d8227d02d) 來部署檢查點
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

跨區域部署

微調支援將微調的模型部署至與最初微調模型時的不同區域。 您也可以部署至不同的訂閱/區域。

唯一的限制在於新區域也必須支援微調,且在跨訂閱部署時,產生部署授權權杖的帳戶必須同時具有來源和目的地訂閱的存取權。

以下是將某個訂閱/區域中微調的模型部署至另一個訂閱/區域的範例。

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>", 
            "version": "1",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

若要在同一訂閱但不同區域之間進行部署,您只需讓來源變數與目的地變數的訂閱和資源群組相同,而且只有來源和目的地資源名稱必須是唯一的。

使用 Azure CLI 部署模型

下列範例示範如何使用 Azure CLI 來部署自訂模型。 使用 Azure CLI,您必須指定自訂模型部署的名稱。 如需如何使用 Azure CLI 部署自訂模型的詳細資訊,請參閱 az cognitiveservices account deployment

若要在主控台視窗中執行此 Azure CLI 命令,您必須使用自訂模型的對應值取代下列<預留位置>

預留位置
<YOUR_AZURE_SUBSCRIPTION> 您 Azure 訂用帳戶的名稱或識別碼。
<YOUR_RESOURCE_GROUP> Azure 資源群組的名稱。
<YOUR_RESOURCE_NAME> 您 Azure OpenAI 資源的名稱。
<YOUR_DEPLOYMENT_NAME> 您要用於模型部署的名稱。
<YOUR_FINE_TUNED_MODEL_ID> 您自訂模型的名稱。
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

使用已部署的自訂模型

部署自訂模型後,您就能如同使用其他部署模型般使用該模型。 您可以使用 Azure AI Studio 中的遊樂場來實驗您的新部署。 您可以繼續對自訂模型使用相同的參數,例如 temperaturemax_tokens,如同對其他部署模型一樣。 針對微調的 babbage-002davinci-002 模型,您會使用 [完成遊樂場] 和 [完成 API]。 針對微調的 gpt-35-turbo-0613 模型,您會使用 [聊天遊樂場] 和 [聊天完成 API]。

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'

分析自訂模型

每個微調作業完成後,Azure OpenAI 都會將名為 results.csv 的結果檔案附加至其中。 您可以使用結果檔案來分析自訂模型的定型和驗證效能。 結果檔案的檔案識別碼會針對每個自訂模型列出,並且您可以使用 REST API 來擷取檔案識別碼和下載結果檔案進行分析。

下列 Python 範例會使用 REST API 擷取附加至自訂模型微調作業中第一個結果檔案的檔案識別碼,然後將檔案下載至工作目錄進行分析。

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

結果檔案為 CSV 檔案,其中包含標頭資料列,以及微調作業所執行每個定型步驟的資料列。 該結果檔案包含下列資料行:

資料行名稱 描述
step 定型步驟的數目。 定型步驟代表對一批定型資料的單次向前和向後傳遞。
train_loss 定型批次的遺失。
train_mean_token_accuracy 模型正確預測定型批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
valid_loss 驗證批次的遺失。
validation_mean_token_accuracy 模型正確預測驗證批次中的權杖百分比。
例如,如果批次大小設定為 3,且您的資料包含完成 [[1, 2], [0, 5], [4, 2]],則如果模型預測 [[1, 1], [0, 5], [4, 2]],此值會設定為 0.83 (5 除以 6)。
full_valid_loss 在每個 Epoch 結尾計算的驗證遺失。 訓練順利時,損失應該會減少。
full_valid_mean_token_accuracy 在每個 Epoch 結尾計算的有效平均權杖正確性。 當訓練順利進行時,權杖正確性應該會增加。

您也可以將results.csv檔案中的數據檢視為 Azure AI Studio 中的繪圖。 選取已定型模型的連結,您會看到三個圖表:遺失、平均權杖正確性和權杖正確性。 如果您已提供驗證資料,則兩個資料集都會出現在同一繪圖上。

隨著時間推移,您的損失會減少,而正確性會增加。 如果您發現定型資料和驗證資料之間存在差異,則可能表示您過度學習。 嘗試使用較少的 Epoch 或較小的學習速率乘數進行定型。

清除部署、自訂模型和定型檔案

當您完成自訂模型時,可刪除部署和模型。 您也可以刪除上傳至服務的定型和驗證檔案 (如需要)。

刪除模型部署

您可以使用各種方法來刪除自訂模型的部署:

刪除自訂模型

同樣地,您可以使用各種方法來刪除自訂模型:

注意

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

刪除定型檔案

您可以選擇從 Azure OpenAI 訂閱中刪除為定型而上傳的定型和驗證檔案,以及在定型期間產生的結果檔案。 您可以使用下列方法來刪除定型、驗證和結果檔案:

持續微調

建立微調模型之後,建議您透過進一步微調繼續精簡模型。 持續微調是選取已微調模型作為基底模型,並在新的定型範例集中進一步微調的反覆程序。

若要對先前微調的模型執行微調,您可以使用建立自訂模型中所述的相同流程,但請指定已微調模型的識別碼,而不是指定一般基底模型的名稱。 微調模型的識別碼看起來像 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

我們也建議您加入 suffix 參數,以便更輕鬆區分微調模型的不同反覆項目。 suffix 會接受字串,並設定用於識別微調模型。 尾碼最多可包含 40 個字元 (a-z、A-Z、0-9 和 _),這些字元會新增至微調模型名稱中。

如果您不確定微調模型的標識符,您可以在 Azure AI Studio 的 [模型] 頁面中找到這項資訊,或者您可以使用 REST API 為指定的 Azure OpenAI 資源產生模型清單。

疑難排解

如何啟用微調? 在 Azure OpenAI Studio 中建立自訂模型呈現灰色?

為了成功存取微調,您需要指派認知服務 OpenAI 參與者。 即使是具有高階服務管理員權限的人員,仍然需要明確設定此帳戶才能存取微調。 如需詳細資訊,請參閱角色型存取控制指引 (機器翻譯)

為什麼會上傳失敗?

如果檔案在 Azure OpenAI Studio 中上傳失敗,您可以在 Azure OpenAI Studio 中的 [資料檔案] 下檢視錯誤訊息。 請將滑鼠停留在顯示「錯誤」的位置 (狀態資料行下方),有關失敗的說明隨即顯示。

微調錯誤訊息的螢幕擷取畫面。

我的微調模型似乎並未改善

  • 遺漏系統訊息:您必須在微調時提供系統訊息;當您使用微調模型時,建議提供相同的系統訊息。 如果您提供不同的系統訊息,則可能看到與微調結果不同的結果。

  • 資料不足:雖然管線運行的最小值為 10,但您需要數百到數千個資料點來教導模型新技能。 資料點太少,可能導致過度學習和一般化不佳。 您的微調模型可能在定型資料上表現良好,但在其他資料上表現不佳,因為該模型記住的是定型範例而非學習模式。 為了獲得最佳結果,請規劃準備具有數百個或數千個資料點的資料集。

  • 不正確的資料:策展不當或不具代表性的資料集會產生低品質的模型。 您的模型可能會從資料集學習不正確或有偏差的模式。 例如,如果您正在定型用於客戶服務的聊天機器人,但只提供一種案例 (例如商品退貨) 的定型資料,則該聊天機器人不會知道如何回應其他案例。 或者,如果您的定型資料不正確 (包含不正確的回應),則您的模型學會提供不正確的結果。

下一步