LitGPT模型实现与微调技能Skill implementing-llms-litgpt

这个技能专注于使用 Lightning AI 的 LitGPT 工具来实现和训练大型语言模型(LLM),支持 20 多种预训练架构(如 Llama、Gemma、Phi 等)。适用于教育目的、生产级微调(使用 LoRA/QLoRA)、单文件实现等场景。关键词包括:LitGPT、LLM、微调、LoRA、QLoRA、模型训练、Lightning AI。

大模型微调 0 次安装 0 次浏览 更新于 3/21/2026

名称: implementing-llms-litgpt 描述: 使用 Lightning AI 的 LitGPT 实现和训练大型语言模型,包含 20 多种预训练架构(如 Llama、Gemma、Phi、Qwen、Mistral)。适用于需要干净的模型实现、教育理解架构,或使用 LoRA/QLoRA 进行生产级微调的场景。单文件实现,无抽象层。 版本: 1.0.0 作者: Orchestra Research 许可证: MIT 标签: [模型架构, LitGPT, Lightning AI, LLM 实现, LoRA, QLoRA, 微调, Llama, Gemma, Phi, Mistral, 教育] 依赖项: [litgpt, torch, transformers]

LitGPT - 干净的 LLM 实现

快速开始

LitGPT 提供了 20 多种预训练 LLM 实现,代码干净、可读,并包含生产就绪的训练工作流。

安装:

pip install 'litgpt[extra]'

加载和使用任何模型:

from litgpt import LLM

# 加载预训练模型
llm = LLM.load("microsoft/phi-2")

# 生成文本
result = llm.generate(
    "法国的首都是什么?",
    max_new_tokens=50,
    temperature=0.7
)
print(result)

列出可用模型:

litgpt download list

常见工作流

工作流 1: 在自定义数据集上微调

复制此清单:

微调设置:
- [ ] 步骤 1: 下载预训练模型
- [ ] 步骤 2: 准备数据集
- [ ] 步骤 3: 配置训练
- [ ] 步骤 4: 运行微调

步骤 1: 下载预训练模型

# 下载 Llama 3 8B
litgpt download meta-llama/Meta-Llama-3-8B

# 下载 Phi-2(更小、更快)
litgpt download microsoft/phi-2

# 下载 Gemma 2B
litgpt download google/gemma-2b

模型保存到 checkpoints/ 目录。

步骤 2: 准备数据集

LitGPT 支持多种格式:

Alpaca 格式(指令-响应):

[
  {
    "instruction": "法国的首都是什么?",
    "input": "",
    "output": "法国的首都是巴黎。"
  },
  {
    "instruction": "翻译成西班牙语:你好,你好吗?",
    "input": "",
    "output": "Hola, ¿cómo estás?"
  }
]

保存为 data/my_dataset.json

步骤 3: 配置训练

# 完整微调(7B 模型需要 40GB+ GPU)
litgpt finetune \
  meta-llama/Meta-Llama-3-8B \
  --data JSON \
  --data.json_path data/my_dataset.json \
  --train.max_steps 1000 \
  --train.learning_rate 2e-5 \
  --train.micro_batch_size 1 \
  --train.global_batch_size 16

# LoRA 微调(高效,16GB GPU)
litgpt finetune_lora \
  microsoft/phi-2 \
  --data JSON \
  --data.json_path data/my_dataset.json \
  --lora_r 16 \
  --lora_alpha 32 \
  --lora_dropout 0.05 \
  --train.max_steps 1000 \
  --train.learning_rate 1e-4

步骤 4: 运行微调

训练自动保存检查点到 out/finetune/

监控训练:

# 查看日志
tail -f out/finetune/logs.txt

# TensorBoard(如果使用 --train.logger_name tensorboard)
tensorboard --logdir out/finetune/lightning_logs

工作流 2: 在单 GPU 上进行 LoRA 微调

最内存高效的选项。

LoRA 训练:
- [ ] 步骤 1: 选择基础模型
- [ ] 步骤 2: 配置 LoRA 参数
- [ ] 步骤 3: 使用 LoRA 训练
- [ ] 步骤 4: 合并 LoRA 权重(可选)

步骤 1: 选择基础模型

对于有限 GPU 内存(12-16GB):

  • Phi-2(2.7B) - 最佳质量/尺寸权衡
  • Llama 3 1B - 最小、最快
  • Gemma 2B - 良好推理能力

步骤 2: 配置 LoRA 参数

litgpt finetune_lora \
  microsoft/phi-2 \
  --data JSON \
  --data.json_path data/my_dataset.json \
  --lora_r 16 \          # LoRA 秩(8-64,越高容量越大)
  --lora_alpha 32 \      # LoRA 缩放(通常为 2×r)
  --lora_dropout 0.05 \  # 防止过拟合
  --lora_query true \    # 对查询投影应用 LoRA
  --lora_key false \     # 通常不需要
  --lora_value true \    # 对值投影应用 LoRA
  --lora_projection true \  # 对输出投影应用 LoRA
  --lora_mlp false \     # 通常不需要
  --lora_head false      # 通常不需要

LoRA 秩指南:

  • r=8: 轻量级,2-4MB 适配器
  • r=16: 标准,良好质量
  • r=32: 高容量,适用于复杂任务
  • r=64: 最大质量,适配器大 4 倍

步骤 3: 使用 LoRA 训练

litgpt finetune_lora \
  microsoft/phi-2 \
  --data JSON \
  --data.json_path data/my_dataset.json \
  --lora_r 16 \
  --train.epochs 3 \
  --train.learning_rate 1e-4 \
  --train.micro_batch_size 4 \
  --train.global_batch_size 32 \
  --out_dir out/phi2-lora

# 内存使用:Phi-2 与 LoRA 约 8-12GB

步骤 4: 合并 LoRA 权重(可选)

将 LoRA 适配器合并到基础模型中以进行部署:

litgpt merge_lora \
  out/phi2-lora/final \
  --out_dir out/phi2-merged

现在使用合并后的模型:

from litgpt import LLM
llm = LLM.load("out/phi2-merged")

工作流 3: 从头开始预训练

在您的领域数据上训练新模型。

预训练:
- [ ] 步骤 1: 准备预训练数据集
- [ ] 步骤 2: 配置模型架构
- [ ] 步骤 3: 设置多 GPU 训练
- [ ] 步骤 4: 启动预训练

步骤 1: 准备预训练数据集

LitGPT 期望标记化数据。使用 prepare_dataset.py

python scripts/prepare_dataset.py \
  --source_path data/my_corpus.txt \
  --checkpoint_dir checkpoints/tokenizer \
  --destination_path data/pretrain \
  --split train,val

步骤 2: 配置模型架构

编辑配置文件或使用现有:

# config/pythia-160m.yaml
model_name: pythia-160m
block_size: 2048
vocab_size: 50304
n_layer: 12
n_head: 12
n_embd: 768
rotary_percentage: 0.25
parallel_residual: true
bias: true

步骤 3: 设置多 GPU 训练

# 单 GPU
litgpt pretrain \
  --config config/pythia-160m.yaml \
  --data.data_dir data/pretrain \
  --train.max_tokens 10_000_000_000

# 多 GPU 与 FSDP
litgpt pretrain \
  --config config/pythia-1b.yaml \
  --data.data_dir data/pretrain \
  --devices 8 \
  --train.max_tokens 100_000_000_000

步骤 4: 启动预训练

对于集群上的大规模预训练:

# 使用 SLURM
sbatch --nodes=8 --gpus-per-node=8 \
  pretrain_script.sh

# pretrain_script.sh 内容:
litgpt pretrain \
  --config config/pythia-1b.yaml \
  --data.data_dir /shared/data/pretrain \
  --devices 8 \
  --num_nodes 8 \
  --train.global_batch_size 512 \
  --train.max_tokens 300_000_000_000

工作流 4: 转换和部署模型

导出 LitGPT 模型用于生产。

模型部署:
- [ ] 步骤 1: 本地测试推理
- [ ] 步骤 2: 量化模型(可选)
- [ ] 步骤 3: 转换为 GGUF(用于 llama.cpp)
- [ ] 步骤 4: 使用 API 部署

步骤 1: 本地测试推理

from litgpt import LLM

llm = LLM.load("out/phi2-lora/final")

# 单次生成
print(llm.generate("什么是机器学习?"))

# 流式生成
for token in llm.generate("解释量子计算", stream=True):
    print(token, end="", flush=True)

# 批量推理
prompts = ["你好", "再见", "谢谢"]
results = [llm.generate(p) for p in prompts]

步骤 2: 量化模型(可选)

以最小质量损失减少模型大小:

# 8 位量化(尺寸减少 50%)
litgpt convert_lit_checkpoint \
  out/phi2-lora/final \
  --dtype bfloat16 \
  --quantize bnb.nf4

# 4 位量化(尺寸减少 75%)
litgpt convert_lit_checkpoint \
  out/phi2-lora/final \
  --quantize bnb.nf4-dq  # 双量化

步骤 3: 转换为 GGUF(用于 llama.cpp)

python scripts/convert_lit_checkpoint.py \
  --checkpoint_path out/phi2-lora/final \
  --output_path models/phi2.gguf \
  --model_name microsoft/phi-2

步骤 4: 使用 API 部署

from fastapi import FastAPI
from litgpt import LLM

app = FastAPI()
llm = LLM.load("out/phi2-lora/final")

@app.post("/generate")
def generate(prompt: str, max_tokens: int = 100):
    result = llm.generate(
        prompt,
        max_new_tokens=max_tokens,
        temperature=0.7
    )
    return {"response": result}

# 运行:uvicorn api:app --host 0.0.0.0 --port 8000

何时使用 vs 替代方案

使用 LitGPT 当:

  • 想理解 LLM 架构(干净、可读的代码)
  • 需要生产就绪的训练配方
  • 教育目的或研究
  • 原型新模型想法
  • Lightning 生态系统用户

使用替代方案代替:

  • Axolotl/TRL: 更多微调功能,YAML 配置
  • Megatron-Core: 对于 >70B 模型的最大性能
  • HuggingFace Transformers: 最广泛的模型支持
  • vLLM: 仅推理(无训练)

常见问题

问题:微调时内存不足

使用 LoRA 代替完整微调:

# 代替 litgpt finetune(需要 40GB+)
litgpt finetune_lora  # 仅需要 12-16GB

或启用梯度检查点:

litgpt finetune_lora \
  ... \
  --train.gradient_accumulation_iters 4  # 累积梯度

问题:训练太慢

启用 Flash Attention(内置,在兼容硬件上自动):

# 在 Ampere+ GPU(A100、RTX 30/40 系列)上默认已启用
# 无需配置

使用较小的微批次并累积:

--train.micro_batch_size 1 \
--train.global_batch_size 32 \
--train.gradient_accumulation_iters 32  # 有效批次=32

问题:模型无法加载

检查模型名称:

# 列出所有可用模型
litgpt download list

# 如果不存在则下载
litgpt download meta-llama/Meta-Llama-3-8B

验证检查点目录:

ls checkpoints/
# 应该看到:meta-llama/Meta-Llama-3-8B/

问题:LoRA 适配器太大

降低 LoRA 秩:

--lora_r 8  # 代替 16 或 32

对更少的层应用 LoRA:

--lora_query true \
--lora_value true \
--lora_projection false \  # 禁用此
--lora_mlp false  # 和此

高级主题

支持的架构: 参见 references/supported-models.md 获取 20 多种模型系列、大小和能力的完整列表。

训练配方: 参见 references/training-recipes.md 获取预训练和微调的已验证超参数配置。

FSDP 配置: 参见 references/distributed-training.md 获取使用 Fully Sharded Data Parallel 进行多 GPU 训练。

自定义架构: 参见 references/custom-models.md 获取以 LitGPT 风格实现新模型架构。

硬件要求

  • GPU: NVIDIA(CUDA 11.8+)、AMD(ROCm)、Apple Silicon(MPS)
  • 内存:
    • 推理(Phi-2):6GB
    • LoRA 微调(7B):16GB
    • 完整微调(7B):40GB+
    • 预训练(1B):24GB
  • 存储: 每个模型 5-50GB(取决于大小)

资源