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 API | LLM.load("模型路径") |
| GitHub | https://github.com/Lightning-AI/litgpt |