微調大型語言模型:Vertex AI 如何讓 LLM 更上一層樓

1. 簡介

微調功能的重要性

基礎模型受過一般用途訓練,有時無法按照您希望的方式執行。這可能是因為您希望模型執行的工作屬於特殊工作,這類工作只須使用提示設計,因此難以教導模型。在這些情況下,您可以進行模型調整,提高模型在特定工作的執行效能。如果操作說明不足,模型調整功能也能協助遵循特定輸出規定。大型語言模型 (LLM) 可以含有大量資訊,也能執行許多工作,但特別需要提供專屬訓練。微調功能可以訓練 LLM,您可以根據自身需求調整預先訓練的 LLM。

在本程式碼研究室中,您將瞭解如何在 LLM 模型中使用監督式調整方法執行微調作業。

監督式調整功能藉由教導新技能來提升模型的成效。包含數百個已加上標籤的範例的資料,用於訓練模型模擬所需行為或工作。我們將提供已加上標籤的資料集,用於輸入文字 (提示) 和輸出文字 (回應),訓練模型如何針對特定用途自訂回應。

如要進一步瞭解模型自訂功能,請參閱本文

建構項目

用途:產生新聞報導標題

假設您要自動產生新聞報導的頭條新聞,Vertex AI 可讓您微調大型語言模型,該語言模型以特定風格產生合適的摘要標題,並依據新聞頻道的規範自訂標題。

在本程式碼研究室中,您將執行以下操作:

  • 使用 BBC FULLTEXT DATA (由 BigQuery 公開資料集 bigquery-public-data.bbc_news.fulltext 提供)。
  • 微調大型語言模型 (text-bison@002),改為使用經過微調的新模型「bbc-news-summary-tuned」然後比較結果與基礎模型的回應您可以在存放區中找到這個程式碼研究室的範例 JSONL 檔案。您可以將檔案上傳到 Cloud Storage 值區,然後執行下列微調步驟:
  • 準備資料:請先建立包含新聞報導及對應頭條新聞的資料集,例如範例程式碼中使用的 BBC News 資料集。
  • 調整預先訓練模型:選擇基礎模型,例如「text-bison@002」並使用 Python 適用的 Vertex AI SDK 微調新聞資料
  • 評估成效:比較調整後模型與基礎模型的成效,看看廣告標題生成品質的改善情形。
  • 部署及使用模型:透過 API 端點提供經過微調的模型,並開始自動生成新報導的廣告標題。

2. 事前準備

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Google Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用帳單功能
  3. 開啟 Colab 筆記本,然後登入目前使用的 Google Cloud 帳戶。

3. 微調大型語言模型

這個程式碼研究室會使用 Python 適用的 Vertex AI SDK 微調模型。您也可以使用其他選項執行微調:HTTP、CURL 指令、Java SDK、主控台。

您可以按照 5 個步驟調整及評估模型,取得自訂回覆。您可以從 repository 中取得 llm_fine_tuning_supervised.ipynb 檔案的完整程式碼。

4. 步驟 1:安裝及匯入依附元件

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

按照存放區中 .ipynb 檔案所示的其餘步驟操作。請務必將 PROJECT_ID 和 BUCKET_NAME 替換為您的憑證。

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec

5. 步驟 2:準備及載入訓練資料

將 YOUR_BUCKET 替換為您的值區,並將 TRAIN.jsonl 訓練資料檔案範例上傳至該值區。已在上述連結中佈建範例資料。

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

這個步驟應可產生下列結果:

17274866af36a47c.png

6. 步驟 3:微調大型語言模型

此時,您可以調整任何大型語言模型 (根據支援服務可用性而定)。但在這個程式碼片段中,我們正在調整預先訓練模型「text-bison@002」其中包含我們在上一步中載入的訓練資料的資料框架:

model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)

這個步驟會在幾個小時內完成。您可以使用結果中的管道工作連結,追蹤微調的進度。

7. 步驟 4:使用經過微調的新模型進行預測

微調工作完成後,您就可以使用新模型進行預測。如要使用調整後的新模型進行預測,請按照下列步驟操作:

response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

畫面上應會顯示下列結果:

67061c36b7ba39b7.png

如要使用基礎模型 (text-bison@002) 進行預測,請執行下列指令:

base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

畫面上應會顯示下列結果:

22ec58e4261405d6.png

雖然這兩個生成的標題看起來都沒問題,但第一份標題 (使用經過調整的模型產生) 較能根據相關資料集使用的標題樣式進行調整。

載入經過微調的模型

載入經過微調的模型可能會比較簡單。但請記住,在步驟 3 中,是在程式碼本身的範圍內叫用,因此仍會在變數 train_model 中保留調整後的模型。但如果想叫用曾經調整的模型,該怎麼做?

方法是使用 Vertex AI Model Registry 中部署經過微調模型的完整 ENDPOINT 網址,在 LLM 上叫用 get_tuned_model() 方法。請注意,您要輸入的是 PROJECT_NUMBER 和 MODEL_NUMBER,而不是兩者的 ID。

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. 步驟 5:評估經過微調的新模型

評估是評估生成回覆品質和關聯性的關鍵要素。內容包括檢查生成式語言模型的輸出內容,判斷模型的連貫性、準確性和提供的提示是否一致。模型評估功能有助於找出有待改善之處、提升模型成效,並確認產生的文字符合品質和實用性所需的標準。詳情請參閱說明文件。目前,我們將瞭解如何在經過微調的模型取得一些評估指標,並與基礎模型比較。

  1. 載入 EVALUATION 資料集
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. 為經過調整的模型,為文字摘要工作定義評估規格。
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

這個步驟會在幾分鐘內完成。您可以使用結果中的管道工作連結追蹤進度。完成後,您應該會看到以下評估結果:

387843d6c970e02.png

評估結果中的 rougeLSum 指標可指定摘要的 ROUGE-L 分數。ROUGE-L 是一種喚回度指標,用於衡量摘要和參考摘要之間的重疊部分。計算方式是將兩則摘要之間最長的共同子序列 (LCS) 除以參考摘要的長度。

提供的運算式中的 rougeLSum 分數為 0.36600753600753694,這表示摘要與參考摘要重疊 36.6%。

如果在基準模型上執行評估步驟,會發現調整後模型的摘要分數「相對」較高。

您可以在建立評估工作時指定的 Cloud Storage 輸出目錄中,找到評估結果。檔案名稱為 evaluation_metrics.json。針對調整過的模型,您也可以在 Google Cloud 控制台的 Vertex AI「Model Registry」頁面查看評估結果。

9. 重要事項

  • 模型支援:請務必查看模型說明文件以瞭解最新相容性。
  • 快速開發:LLM 的領域迅速進步。較新的、更強大的模型,可能勝過以舊基礎建構而成的微調模型。好消息是,您可以在這項功能推出後,將這些微調技術套用至較新的模型。
  • LoRA:LoRA 是一種高效率的 LLM 技術。做法是將訓練性低階的分解矩陣導入現有預先訓練模型的層。詳情請參閱本文。LoRA 不會更新大型 LLM 的所有參數,而是學習將較小的矩陣加入原始模型的權重矩陣,或乘以原始模型的權重矩陣。這樣可大幅減少微調期間導入的額外參數數量。

10. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取這個程式碼研究室所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後點按「刪除」。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  4. 或者,您可以前往 Model Registry,前往模型「部署和測試」分頁,然後取消部署端點,並刪除部署後的模型。

11. 恭喜

恭喜!您已成功使用 Vertex AI 微調大型語言模型。微調是一項強大的技術,可讓您根據網域和工作自訂大型語言模型。有了 Vertex AI,您就能取得所需工具和資源,有效有效地微調模型。

探索 GitHub 存放區並試用程式碼範例,直接微調評估。您可以思考經過微調的大型大型語言模型如何滿足您的特定需求,例如:產生目標明確的行銷文案、總結複雜的文件內容,或是翻譯文化細微差異的語言。運用 Vertex AI 提供的全方位工具和服務套件,輕鬆建構、訓練、評估及部署經過微調的模型。