跳转至

LitGPT 轻量训练 — Lightning AI 出品的极简 LLM 微调工具


一句话说明

LitGPT 是 Lightning AI 开源的高质量 LLM 训练代码库,代码极其简洁(每个模型都是独立的单文件),支持命令行一键微调 Llama 3、Gemma、Phi、Qwen 等主流模型,适合学习原理和快速实验。


安装与配置

# 安装 LitGPT
pip install 'litgpt[all]'                  # 安装所有可选依赖(推荐)
# 或者最小安装
pip install litgpt

# 从源码安装(可以看源码学习)
git clone https://github.com/Lightning-AI/litgpt
cd litgpt
pip install -e '.[all]'

# 验证
litgpt --help                              # 查看所有可用命令

核心用法

# 下载预训练模型
litgpt download meta-llama/Llama-3.2-8B-Instruct  # 下载到本地缓存

# 对话测试(下载完直接聊)
litgpt chat meta-llama/Llama-3.2-8B-Instruct

# 微调(LoRA 方式,最常用)
litgpt finetune_lora meta-llama/Llama-3.2-8B-Instruct \
    --data Alpaca \                                 # 使用内置 Alpaca 数据集
    --train.epochs 3 \                              # 训练 3 轮
    --train.learning_rate 0.0002 \
    --out_dir output/lora-llama

# 全量微调
litgpt finetune_full meta-llama/Llama-3.2-8B-Instruct \
    --data Alpaca \
    --out_dir output/full-llama

# 预训练(从头开始训练)
litgpt pretrain --config config.yaml

参数详解

# LitGPT 也支持 Python API 调用

from litgpt import LLM

# 加载模型(最简单的 API)
llm = LLM.load("meta-llama/Llama-3.2-8B-Instruct")

# 文本生成
output = llm.generate("解释什么是 LoRA 微调",
                       max_new_tokens=200)          # 生成最大 token 数
print(output)

# 流式输出
for chunk in llm.generate("讲一个故事",
                           stream=True,             # 启用流式输出
                           max_new_tokens=500):
    print(chunk, end="", flush=True)
# LoRA 微调配置(config.yaml)
# 通过命令行参数覆盖也可以

model_name: meta-llama/Llama-3.2-8B-Instruct

train:
  epochs: 3                                         # 训练轮数
  learning_rate: 0.0002                             # 学习率
  batch_size: 128                                   # 等效 batch 大小
  micro_batch_size: 2                               # 每步实际 batch
  max_seq_length: 512                               # 最大序列长度
  save_interval: 1000                               # 保存间隔步数

lora:
  r: 8                                              # LoRA 秩
  alpha: 16                                         # 缩放系数
  dropout: 0.05
  query: true                                       # 对 Query 层加 LoRA
  value: true                                       # 对 Value 层加 LoRA

data:
  val_split_fraction: 0.05                          # 5% 作为验证集

实战案例

# 案例1:用自定义数据微调 Phi-3.5-mini(显存只需 8GB)

# 准备数据(JSON 格式)
cat > data/my_data.json << 'EOF'
[
  {"instruction": "用简单语言解释 PCR 技术", "output": "PCR 就像复印机..."},
  {"instruction": "什么是 16S rRNA 基因测序", "output": "16S 是细菌的身份证..."}
]
EOF

# 下载模型
litgpt download microsoft/phi-3.5-mini-instruct

# 微调(指定本地数据文件)
litgpt finetune_lora microsoft/phi-3.5-mini-instruct \
    --data JSON \                                   # 使用 JSON 格式数据
    --data.json_path data/my_data.json \            # 数据文件路径
    --lora.r 16 \
    --lora.alpha 32 \
    --train.epochs 5 \
    --train.learning_rate 3e-4 \
    --out_dir output/phi-bioinformatics

# 测试微调后的模型
litgpt chat output/phi-bioinformatics/final/
# 案例2:Python 代码批量推理

from litgpt import LLM

llm = LLM.load("output/phi-bioinformatics/final/")  # 加载微调后的模型

# 批量处理生信问题
questions = [
    "解释宏基因组学的基本流程",
    "什么是 OTU 和 ASV 的区别",
    "如何判断测序质量好不好",
]

for q in questions:
    answer = llm.generate(q, max_new_tokens=300)   # 每个问题生成回答
    print(f"Q: {q}\nA: {answer}\n{'='*50}")

常见报错与解决

报错信息原因解决方法
Model not found模型未下载先运行 litgpt download <模型名>
下载速度慢网络问题设置 HuggingFace 镜像:export HF_ENDPOINT=https://hf-mirror.com
CUDA OOM显存不足减小 --train.micro_batch_size 或用更小的模型
JSON 格式错误数据文件问题确保是有效的 JSON 数组格式
LoRA 合并失败路径问题检查 out_dir 下是否有 final/ 目录

速查表

功能命令
下载模型litgpt download <模型名>
对话测试litgpt chat <模型路径>
LoRA 微调litgpt finetune_lora <模型名> --data Alpaca
全量微调litgpt finetune_full <模型名>
Python APILLM.load("模型路径")
GitHubhttps://github.com/Lightning-AI/litgpt