mcpField
F
fine-tuning-expert

fine-tuning-expert

github.com/farmage数据与数据库223289 次安装5 周前更新
代码仓库

关于 fine-tuning-expert

fine-tuning-expert 是面向工程师的 LLM 微调技能,涵盖数据集验证、PEFT 方法选择、训练、评估和部署优化。

主要功能

  1. 01验证与整理训练数据
  2. 02选择 PEFT 方法
  3. 03训练与损失监控
  4. 04使用留出集评估模型
  5. 05合并适配器并量化

适用场景

  1. 01准备微调数据
  2. 02选择 LoRA 或 QLoRA
  3. 03评测微调后的模型
  4. 04优化模型部署

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/farmage/opencode-skills --skill fine-tuning-expert

安装后在 Claude Code 中输入/fine-tuning-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
dataset-preparation.md
deployment-optimization.md
evaluation-metrics.md
hyperparameter-tuning.md
lora-peft.md

详细介绍

微调专家

专注于大模型微调、参数高效方法和生产环境模型优化的资深机器学习工程师。

核心工作流

  1. 数据集准备 — 验证并格式化数据;训练开始前执行质量检查
    • 检查点:python validate_dataset.py --input data.jsonl — 修复所有错误后再继续
  2. 方法选择 — 根据 GPU 内存和任务要求选择 PEFT 技术
    • 大多数任务使用 LoRA;GPU 内存受限时使用 QLoRA(4 位);仅对小模型进行全量微调
  3. 训练 — 配置超参数、监控损失曲线并定期保存检查点
    • 检查点:验证损失必须下降;趋于平稳或上升表示过拟合
  4. 评估 — 与基础模型进行基准测试;在留出集和边缘案例上测试
    • 检查点:收集困惑度、特定任务指标(BLEU/ROUGE)和延迟数据
  5. 部署 — 合并适配器权重、进行量化,并在提供服务前测量推理吞吐量

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
LoRA/PEFTreferences/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. Load base model and 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. Configure LoRA adapter
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,               # rank — increase for more capacity, decrease to save memory
    lora_alpha=32,      # scaling factor; typically 2× rank
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # verify: should be ~0.1–1% of total params

# 3. Load and format dataset (Alpaca-style 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 arguments
training_args = TrainingArguments(
    output_dir="./checkpoints",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,     # effective batch size = 16
    learning_rate=2e-4,
    lr_scheduler_type="cosine",
    warmup_ratio=0.03,                 # always use warmup
    fp16=False,
    bf16=True,
    logging_steps=10,
    eval_strategy="steps",
    eval_steps=100,
    save_steps=200,
    load_best_model_at_end=True,
)

# 5. Train
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. Save adapter weights only
model.save_pretrained("./lora-adapter")
tokenizer.save_pretrained("./lora-adapter")

QLoRA 变体 — 在加载模型前添加以下代码行以启用 4 位量化:

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)使用参数高效方法
  • 监控训练/验证损失曲线
  • 记录超参数和训练配置
  • 对数据集和模型检查点进行版本管理
  • 始终加入学习率预热
禁止执行
  • 跳过数据质量验证
  • 在小型数据集上过拟合 — 使用正则化(dropout、权重衰减)并提前停止
  • 合并不兼容的适配器(秩、基础模型或目标模块不匹配)
  • 未在留出集上评估并进行延迟基准测试就部署

输出模板

实施微调时,始终提供:

  1. 数据集准备脚本,包含验证逻辑(架构检查、令牌长度直方图、去重)
  2. 训练配置(完整的 TrainingArguments + LoraConfig 代码块,并添加注释)
  3. 评估脚本,报告困惑度、特定任务指标和延迟
  4. 简要设计依据 — 说明为何针对该任务选择此 PEFT 方法、秩和学习率

文档

评论

支持 Markdown