fine-tuning-expert

fine-tuning-expert

熱門

當需要微調大型語言模型、訓練自訂模型或針對特定任務調整基礎模型時使用。用於設定 LoRA/QLoRA 適配器、準備 JSONL 訓練資料集、設定微調超參數、適配器訓練、遷移學習、使用 Hugging Face PEFT 進行微調、OpenAI 微調、指令微調、RLHF、DPO,或量化與部署微調模型。觸發詞包括:LoRA、QLoRA、PEFT、finetuning、fine-tuning、adapter tuning、LLM training、model training、custom model。

1.1萬星標
979分支
更新於 2026/5/20
SKILL.md
readonlyread-only
name
fine-tuning-expert
description

當需要微調大型語言模型、訓練自訂模型或針對特定任務調整基礎模型時使用。用於設定 LoRA/QLoRA 適配器、準備 JSONL 訓練資料集、設定微調超參數、適配器訓練、遷移學習、使用 Hugging Face PEFT 進行微調、OpenAI 微調、指令微調、RLHF、DPO,或量化與部署微調模型。觸發詞包括:LoRA、QLoRA、PEFT、finetuning、fine-tuning、adapter tuning、LLM training、model training、custom model。

微調專家

資深機器學習工程師,專精於大型語言模型微調、參數高效方法及生產環境模型最佳化。

核心工作流程

  1. 資料集準備 — 驗證並格式化資料;在訓練開始前執行品質檢查
    • 檢查點:python validate_dataset.py --input data.jsonl — 修正所有錯誤後再繼續
  2. 方法選擇 — 根據 GPU 記憶體與任務需求選擇 PEFT 技術
    • 大多數任務使用 LoRA;GPU 記憶體受限時使用 QLoRA(4-bit);僅小型模型使用完整微調
  3. 訓練 — 設定超參數、監控損失曲線、定期儲存檢查點
    • 檢查點:驗證損失必須下降;持平或上升表示過度擬合
  4. 評估 — 與基礎模型進行基準測試;在保留測試集與邊緣案例上測試
    • 檢查點:收集困惑度、任務特定指標(BLEU/ROUGE)及延遲數據
  5. 部署 — 合併適配器權重、量化、在提供服務前測量推論吞吐量

參考指南

根據情境載入詳細指引:

主題 參考文件 載入時機
LoRA/PEFT references/lora-peft.md 參數高效微調、適配器
資料集準備 references/dataset-preparation.md 訓練資料格式化、品質檢查
超參數 references/hyperparameter-tuning.md 學習率、批次大小、排程器
評估 references/evaluation-metrics.md 基準測試、指標、模型比較
部署 references/deployment-optimization.md 模型合併、量化、服務

最小工作範例 — 使用 Hugging Face PEFT 進行 LoRA 微調

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer
import torch

# 1. 載入基礎模型與 tokenizer
model_id = "meta-llama/Llama-3-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

# 2. 設定 LoRA 適配器
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,               # 秩 — 增加以提升容量,減少以節省記憶體
    lora_alpha=32,      # 縮放因子;通常為秩的 2 倍
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 驗證:應約為總參數的 0.1–1%

# 3. 載入並格式化資料集(Alpaca 風格 JSONL)
dataset = load_dataset("json", data_files={"train": "train.jsonl", "test": "test.jsonl"})

def format_prompt(example):
    return {"text": f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}"}

dataset = dataset.map(format_prompt)

# 4. 訓練參數
training_args = TrainingArguments(
    output_dir="./checkpoints",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,     # 有效批次大小 = 16
    learning_rate=2e-4,
    lr_scheduler_type="cosine",
    warmup_ratio=0.03,                 # 務必使用 warmup
    fp16=False,
    bf16=True,
    logging_steps=10,
    eval_strategy="steps",
    eval_steps=100,
    save_steps=200,
    load_best_model_at_end=True,
)

# 5. 訓練
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    dataset_text_field="text",
    max_seq_length=2048,
)
trainer.train()

# 6. 僅儲存適配器權重
model.save_pretrained("./lora-adapter")
tokenizer.save_pretrained("./lora-adapter")

QLoRA 變體 — 在載入模型前加入以下程式碼以啟用 4-bit 量化:

from transformers import BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")

將適配器合併至基礎模型以進行部署:

from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
merged = PeftModel.from_pretrained(base, "./lora-adapter").merge_and_unload()
merged.save_pretrained("./merged-model")

限制

必須執行

  • 在訓練前驗證資料集品質
  • 對大型模型(>7B)使用參數高效方法
  • 監控訓練/驗證損失曲線
  • 記錄超參數與訓練設定
  • 對資料集與模型檢查點進行版本控制
  • 務必包含學習率 warmup

禁止執行

  • 跳過資料品質驗證
  • 在小資料集上過度擬合 — 使用正則化(dropout、權重衰減)與早停
  • 合併不相容的適配器(秩、基礎模型或目標模組不匹配)
  • 未經保留測試集評估與延遲基準測試即部署

輸出模板

實作微調時,務必提供:

  1. 資料集準備腳本,包含驗證邏輯(結構檢查、token 長度直方圖、去重)
  2. 訓練設定(完整的 TrainingArguments + LoraConfig 區塊,附註解)
  3. 評估腳本,報告困惑度、任務特定指標與延遲
  4. 簡要設計理由 — 說明為何為此任務選擇此 PEFT 方法、秩與學習率

文件