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

1. 簡介

微調的重要性

基礎模型專為一般用途而訓練,有時執行任務的成效不如預期。這可能是因為您希望模型執行的工作屬於專業任務,單靠設計提示詞很難教導模型。在這種情況下,您可以使用模型調整功能,提升模型在特定工作上的成效。模型微調也有助於在指令不夠充分時,符合特定的輸出需求。大型語言模型 (LLM) 雖然能處理大量資訊並執行許多工作,但只有經過專業訓練,才能發揮最大效用。微調可訓練 LLM,讓您根據特定需求調整經預訓練的 LLM。

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

透過監督式調整,模型能學會新技能並增進效能。含數百個有標籤樣本的資料會用於指導模型,讓模型可以模仿所需行為或工作。我們會提供輸入文字 (提示詞) 和輸出文字 (回覆) 的標籤資料集,教導模型如何根據特定用途自訂回覆。

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

建構項目

用途:為新聞文章產生標題

假設您想為新聞文章自動產生標題,您可以使用 Vertex AI 微調 LLM,以特定風格生成合適的摘要標題,並根據新聞頻道的規範自訂標題。

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

  • 使用 BBC FULLTEXT DATA (由 BigQuery 公開資料集 bigquery-public-data.bbc_news.fulltext 提供)。
  • 將 LLM (text-bison@002) 微調為名為「bbc-news-summary-tuned」的新微調模型,並比較結果與基礎模型的回覆。本程式碼研究室的 存放區提供 JSONL 範例檔案。您可以將檔案上傳至 Cloud Storage Bucket,然後執行下列微調步驟:
  • 準備資料:從新聞文章及其對應標題的資料集開始,例如範例程式碼中使用的 BBC 新聞資料集。
  • 微調預先訓練模型:選擇「text-bison@002」等基礎模型,然後使用 Vertex AI SDK for Python,以新聞資料微調模型。
  • 評估結果:比較微調後模型與基礎模型的成效,瞭解標題生成品質的提升程度。
  • 部署及使用模型:透過 API 端點提供微調模型,並開始自動產生新文章的標題。

2. 事前準備

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確保您的 Google Cloud 雲端專案有啟用計費服務。瞭解如何檢查專案是否已啟用計費功能
  3. 開啟 Colab 筆記本,並登入與目前有效 Google Cloud 帳戶相同的帳戶。

3. 微調大型語言模型

本程式碼研究室會使用 Python 適用的 Vertex AI SDK 微調模型。您也可以使用其他選項 (HTTP、CURL 指令、Java SDK、控制台) 進行微調。

您可以透過 5 個步驟微調及評估模型,取得自訂回覆。如需完整程式碼,請參閱存放區中的 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 替換為您的 bucket,並將範例 TRAIN.jsonl 訓練資料檔案上傳至該 bucket。上述連結中已為這個用途提供範例資料。

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,它是在程式碼本身的範圍內叫用,因此仍會在 tuned_model 變數中保留微調模型。但如果想叫用先前調整過的模型,該怎麼做?

如要執行這項操作,請使用 Vertex AI Model Registry 中已部署的微調模型完整 ENDPOINT URL,在 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. 載入評估資料集
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 微調 LLM 模型。微調是強大的技術,可讓您根據自己的領域和工作自訂 LLM。Vertex AI 提供各種工具和資源,協助您有效率地微調模型。

您可以瀏覽 GitHub 存放區,並試用程式碼範例,親身體驗微調評估功能。從生成目標行銷文案、歸納複雜文件重點,到翻譯帶有文化細微差異的語言,微調後的大型語言模型都能滿足您的特定需求。運用 Vertex AI 提供的全方位工具和服務套件,輕鬆建構、訓練、評估及部署微調模型。