使用偏好調整功能調整 Gemini 模型

本文說明如何對 Gemini 模型執行偏好調整。

事前準備

開始之前,請按照「準備 Gemini 模型的偏好調整資料」一文中的操作說明準備資料集。

建立調整工作

控制台

如要使用 Google Cloud 控制台設定偏好設定調整,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台 Gemini Enterprise Agent Platform 專區的「Tuning」(調整) 頁面。

    前往「Tuning」(調整)

  2. 按一下「Create tuned model」(建立調整後的模型)。

  3. 選取「Preference tuning」(偏好設定調整)。

  4. 在「Model details」(模型詳細資料)下方,設定下列項目:

    1. 在「Tuned model name」(調整後模型名稱) 欄位中,輸入新調整後模型的名稱,最多 128 個半形字元。
    2. 在「Base model」(基礎模型) 欄位中,選取要調整的基礎模型。
    3. 在「Region」(區域) 下拉式欄位中,選取管道調整工作執行的區域,以及調整後模型的部署位置。
  5. 在「Tuning setting」(調整設定) 下方,進行下列設定:

    1. 在「Number of epochs」(訓練週期數) 欄位,輸入模型調整作業要執行的步數。
    2. 在「Adapter Size」(轉接器大小) 欄位中,輸入要用於調整模型的轉接器大小。
    3. 選用:在「Beta」欄位中輸入所需 Beta 值。Beta 是控制調整後模型與基準模型對齊程度的係數。
    4. 在「Learning rate multiplier」(學習率調節係數) 欄位中,輸入每次疊代的步距。預設值為 1。。
  6. 選用:如要停用中繼查核點,只使用最新查核點,請按一下「Export last checkpoint only」(僅匯出最後一個查核點) 切換鈕。

  7. 按一下「繼續」。

    「Tuning dataset」(調整資料集) 頁面隨即開啟。

  8. 如要上傳資料集檔案,請選取下列其中一項:

    1. 如果您尚未上傳資料集,請選取「Upload file to Cloud Storage」(將檔案上傳至 Cloud Storage) 的圓形按鈕。
    2. 在「Select JSONL file」(選取 JSONL 檔案) 欄位中,按一下「Browse」(瀏覽),然後選取資料集檔案。
    3. 在「Dataset location」(資料集位置) 欄位中,按一下「Browse」(瀏覽),然後選取要儲存資料集檔案的 Cloud Storage bucket。
    4. 如果資料集檔案已在 Cloud Storage bucket 中,請選取「Existing file on Cloud Storage」(Cloud Storage 中的現有檔案) 的圓形按鈕。
    5. 在「Cloud Storage file path」(Cloud Storage 檔案路徑) 欄位中,按一下「Browse」(瀏覽),然後選取資料集檔案所在的 Cloud Storage bucket。
  9. (選用) 如要在訓練期間取得驗證指標,請按一下「Enable model validation」(啟用模型驗證) 切換鈕。

    1. 在「Validation dataset」(驗證資料集) 檔案中,輸入驗證資料集的 Cloud Storage 路徑。
  10. 按一下「Start Tuning」(開始調整)。

    新模型會顯示在「Tune and Distill」(調整及精煉) 頁面的「Managed tuning」(代管調整) 部分下方。模型調整完畢後,「Status」(狀態) 會顯示「Succeeded」(成功)。

REST

如要建立模型微調工作,請使用 tuningJobs.create 方法傳送 POST 要求。部分參數不適用於所有模型。請務必只加入適用於調整模型的參數。

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID。
  • TUNING_JOB_REGION:執行調整工作的區域。這也是上傳調整後模型的預設區域。
  • BASE_MODEL:要調整的基礎模型名稱。
  • TRAINING_DATASET_URI:訓練資料集的 Cloud Storage URI。資料集必須採用 JSONL 檔案格式。為達最佳效果,請提供至少 100 到 500 個樣本。詳情請參閱「關於監督式調整資料集 」。
  • VALIDATION_DATASET_URI選用:驗證資料集檔案的 Cloud Storage URI。
  • EPOCH_COUNT選用:模型在訓練期間完整通過整個訓練資料集的次數。如要使用預先填入的建議值,請保留未設定狀態。
  • BETA選用:控制微調模型與基準模型對齊程度的係數。
  • ADAPTER_SIZE選用:調整工作要使用的轉接器大小。轉接器大小會影響調整工作的可訓練參數數量。轉接器越大,模型可學習更複雜的工作,但需要更大的訓練資料集和更長的訓練時間。
  • LEARNING_RATE_MULTIPLIER:選用。要套用至建議學習率的調節係數。如要使用建議值,請留空。
  • EXPORT_LAST_CHECKPOINT_ONLY選用:設為 true,只使用最新的檢查點。
  • TUNED_MODEL_DISPLAYNAME選用:調整後模型的顯示名稱。如未設定,系統會產生隨機名稱。
  • KMS_KEY_NAME選用:用於保護資源的客戶自行管理加密金鑰,其 Cloud Key Management Service 資源 ID。金鑰格式為 projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key。金鑰必須與運算資源位於相同區域。詳情請參閱「客戶自行管理的加密金鑰 (CMEK)」。
  • SERVICE_ACCOUNT選用:執行 tuningJob 工作負載的服務帳戶。如未指定,則會使用專案中的 Agent Platform Secure Fine-Tuning 服務代理。請參閱「調整服務代理」。如果打算使用客戶自行管理的服務帳戶,請務必將 roles/aiplatform.tuningServiceAgent 角色授予服務帳戶。此外,請將調整服務代理 roles/iam.serviceAccountTokenCreator 角色授予客戶自行管理的服務帳戶。

HTTP 方法和網址:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

JSON 要求主體:

{
  "baseModel": "BASE_MODEL",
  "preferenceOptimizationSpec" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
      "hyperParameters": {
          "epochCount": "EPOCH_COUNT",
          "beta": "BETA",
          "adapterSize": "ADAPTER_SIZE",
          "learningRateMultiplier": "LEARNING_RATE_MULTIPLIER"
      },
      "exportLastCheckpointOnly": EXPORT_LAST_CHECKPOINT_ONLY,
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME",
  "encryptionSpec": {
    "kmsKeyName": "KMS_KEY_NAME"
  },
  "serviceAccount": "SERVICE_ACCOUNT"
}

請展開以下其中一個選項,以傳送要求:

cURL 指令範例

PROJECT_ID=myproject
LOCATION=global
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "baseModel": "${BASE_MODEL}",
   "preferenceOptimizationSpec" : {
      "trainingDatasetUri": "gs://mybucket/preference_tuning/data/train_data.jsonl",
      "validationDatasetUri": "gs://mybucket/preference_tuning/data/validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini"
}'

Google Gen AI SDK

import time

from google import genai
from google.genai.types import CreateTuningJobConfig, HttpOptions, TuningDataset

client = genai.Client(http_options=HttpOptions(api_version="v1"))

training_dataset = TuningDataset(
    gcs_uri="gs://mybucket/preference_tuning/data/train_data.jsonl",
)
validation_dataset = TuningDataset(
    gcs_uri="gs://mybucket/preference_tuning/data/validation_data.jsonl",
)

# Refer to https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini-use-continuous-tuning#google-gen-ai-sdk
# for example to continuous tune from SFT tuned model.
tuning_job = client.tunings.tune(
    base_model="gemini-3.5-flash",
    training_dataset=training_dataset,
    config=CreateTuningJobConfig(
        tuned_model_display_name="Example tuning job",
        method="PREFERENCE_TUNING",
        validation_dataset=validation_dataset,
    ),
)

running_states = set([
    "JOB_STATE_PENDING",
    "JOB_STATE_RUNNING",
])

while tuning_job.state in running_states:
    print(tuning_job.state)
    tuning_job = client.tunings.get(name=tuning_job.name)
    time.sleep(60)

print(tuning_job.tuned_model.model)
print(tuning_job.tuned_model.endpoint)
print(tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# projects/123456789012/locations/us-central1/metadataStores/default/contexts/tuning-experiment-2025010112345678

if tuning_job.tuned_model.checkpoints:
    for i, checkpoint in enumerate(tuning_job.tuned_model.checkpoints):
        print(f"Checkpoint {i + 1}: ", checkpoint)
    # Example response:
    # Checkpoint 1:  checkpoint_id='1' epoch=1 step=10 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789000000'
    # Checkpoint 2:  checkpoint_id='2' epoch=2 step=20 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789012345'

調整超參數

建議您在不變更超參數的情況下,提交第一項微調工作。預設值是根據基準測試結果建議的值,可產生最佳模型輸出品質。

  • 訓練週期:模型在訓練期間,完整通過整個訓練資料集的次數。Gemini Enterprise Agent Platform 會根據訓練資料集大小自動調整預設值。這個值是根據基準測試結果設定,可確保模型輸出內容品質最佳。
  • Beta:控制調整後模型與基準模型相符程度的係數。Beta 值越低,更新幅度越大,越傾向偏好的回覆。建議範圍為 0.01 至 0.5 (含)。如果 Beta 值為 0,模型會停止學習。
  • 轉接器大小:用於調整工作的轉接器大小。轉接器大小會影響調整工作的可訓練參數數量。轉接器越大,模型就能學習更複雜的工作,但需要更大的訓練資料集和更長的訓練時間。
  • 學習率調節係數:要套用至建議學習率的調節係數。您可以提高這個值來加快收斂速度,或降低這個值來避免過度配適。

查看或取消調整工作

如要列出調整工作、查看調整工作詳細資料、取消調整工作,或刪除調整後的模型,請參閱監督式微調說明文件的下列章節:

模型調整指標

模型微調工作會自動收集下列微調指標:

  • /preference_optimization_train_loss:訓練步驟中調整資料集的偏好損失。

模型驗證指標

提供驗證資料後,模型調整工作會自動收集下列驗證指標:

  • /eval_total_loss:驗證步驟中驗證資料集的偏好損失。

調整工作開始執行後,即可查看指標圖表。這些指標會隨著調整進度即時更新。如果在建立調整工作時未指定驗證資料集,則只能查看調整指標的圖表。

後續步驟