SuperAPI AI 工具集

llm-fine-tuning

智能体与模型

查看项目

更新于 10-23 02:19

技能介绍

用途

该技能面向大语言模型(LLM)的微调基础设施搭建,目标是在开源模型上高效完成训练与微调——从单张 GPU 上的 LoRA,到跨多节点集群的分布式全量微调。

适用场景

  • 在领域特定数据(法律、医疗、代码、客服)上微调 LLM
  • 使用 QLoRA 在消费级 GPU 上微调 70B 模型
  • 使用 DeepSpeed 或 FSDP 搭建分布式训练
  • 导出微调后的适配器用于生产推理服务
  • 实现 RLHF、DPO 或指令微调流水线

前置条件

  • NVIDIA GPU,显存 24GB 以上(RTX 4090 / A100 / H100)
  • CUDA 12.1+,且 nvidia-smi 可正常工作
  • Python 3.10+ 与 pip
  • Hugging Face 账号及 HF_TOKEN(用于受限模型)
  • 500GB 以上磁盘空间,用于存放模型权重与训练数据

主要能力与使用方式

QLoRA 快速上手

安装依赖:

pip install transformers datasets trl peft bitsandbytes accelerate

核心流程包括:使用 BitsAndBytesConfig 进行 4-bit 量化(nf4、bfloat16 计算、双重量化),加载 AutoModelForCausalLM 与分词器,配置 LoraConfig(rank、lora_alpha、target_modules、lora_dropout、bias、task_type),加载数据集,并使用 TRL 的 SFTTrainer 与 SFTConfig 进行训练(可设置 epoch 数、批大小、梯度累积、学习率、bf16、日志与保存策略、wandb 上报),最后保存模型。

Axolotl 生产级微调框架

通过 YAML 配置定义基础模型、模型类型、分词器类型、4-bit 加载、qlora 适配器、LoRA 参数与目标模块、数据集路径与类型(如 alpaca、sharegpt、chat_template)、验证集比例、输出目录、序列长度、sample_packing、微批大小、梯度累积、epoch 数、学习率、优化器(adamw_bnb_8bit)、学习率调度(cosine)、warmup 比例、bf16、flash_attention、日志/评估/保存步数、wandb 项目等。

运行方式:

pip install axolotl[flash-attn,deepspeed]
accelerate launch -m axolotl.cli.train config.yaml

DeepSpeed 分布式训练

提供 ZeRO Stage 3 配置示例,包含优化器、参数与梯度的 CPU offload、通信重叠、连续梯度、bucket 大小与参数持久化阈值等设置,并启用 bf16 与梯度裁剪。启动方式:

deepspeed --num_gpus=4 train.py \
  --deepspeed deepspeed_zero3.json \
  --model_name meta-llama/Llama-3.1-70B-Instruct \
  --output_dir ./output

DPO / RLHF 对齐

使用 TRL 的 DPOTrainer 与 DPOConfig,数据集格式为 {"prompt": ..., "chosen": ..., "rejected": ...}。可设置 beta(KL 散度权重)、epoch 数、批大小、梯度累积、学习率、bf16,并配合 peft_config 使用隐式参考模型。

合并 LoRA 适配器用于部署

以全精度加载基础模型,通过 PeftModel 加载适配器并调用 merge_and_unload 合并,保存合并后的模型(safe_serialization),可推送至 Hugging Face Hub,供 vLLM 等服务使用。

Kubernetes 训练任务

提供 batch/v1 Job 示例,包含节点选择(如 A100-SXM4-80GB)、容器镜像、启动命令、GPU 与内存资源限制、配置/模型缓存/输出卷挂载,以及通过 Secret 注入 HF_TOKEN 与 WANDB_API_KEY。

常见问题与修复

  • CUDA 显存不足:批过大,降低 micro_batch_size,增大 gradient_accumulation_steps
  • 训练损失 NaN:学习率过高,降至 1e-4 或 5e-5,并加入 warmup
  • 训练缓慢:未启用 Flash Attention,安装 flash-attn 并开启 flash_attention
  • 微调质量差:数据格式不佳,校验数据集格式与 sample_packing 兼容性
  • 适配器合并错误:量化方式混用,应在 CPU 上以 bf16 合并,而非 4-bit

最佳实践

  • 使用 Flash Attention 2,速度提升 2–4 倍且更省显存
  • 通过 W&B 或 MLflow 监控训练/评估损失;过拟合时增加 dropout 或减少数据
  • 使用 5–10% 的留出评估集验证,可用 MMLU 或自定义评估作为质量门禁
  • 从 LoRA r=16 起步再逐步提高;更高 rank 意味着更多参数,收益递减
  • 在 Axolotl 中使用 sample_packing,提升短序列下的 GPU 利用率

相关技能

  • vllm-server:服务微调后的模型
  • gpu-server-management:GPU 环境搭建
  • llm-inference-scaling:规模化部署
  • ai-pipeline-orchestration:训练流水线

限制

  • 基础设施命令可能中断服务:变更状态前需确认目标主机与范围,并准备备份或快照。
  • 仅文档导入:上游脚本与模板未随附打包。