
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。
微調專家
資深機器學習工程師,專精於大型語言模型微調、參數高效方法及生產環境模型最佳化。
核心工作流程
- 資料集準備 — 驗證並格式化資料;在訓練開始前執行品質檢查
- 檢查點:
python validate_dataset.py --input data.jsonl— 修正所有錯誤後再繼續
- 檢查點:
- 方法選擇 — 根據 GPU 記憶體與任務需求選擇 PEFT 技術
- 大多數任務使用 LoRA;GPU 記憶體受限時使用 QLoRA(4-bit);僅小型模型使用完整微調
- 訓練 — 設定超參數、監控損失曲線、定期儲存檢查點
- 檢查點:驗證損失必須下降;持平或上升表示過度擬合
- 評估 — 與基礎模型進行基準測試;在保留測試集與邊緣案例上測試
- 檢查點:收集困惑度、任務特定指標(BLEU/ROUGE)及延遲數據
- 部署 — 合併適配器權重、量化、在提供服務前測量推論吞吐量
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| 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、權重衰減)與早停
- 合併不相容的適配器(秩、基礎模型或目標模組不匹配)
- 未經保留測試集評估與延遲基準測試即部署
輸出模板
實作微調時,務必提供:
- 資料集準備腳本,包含驗證邏輯(結構檢查、token 長度直方圖、去重)
- 訓練設定(完整的
TrainingArguments+LoraConfig區塊,附註解) - 評估腳本,報告困惑度、任務特定指標與延遲
- 簡要設計理由 — 說明為何為此任務選擇此 PEFT 方法、秩與學習率





