Doramagic 项目包 · 项目说明书
litgpt 项目
20+ 个高性能大语言模型(LLM),提供从预训练、微调到大规模部署的完整方案。
项目概览、安装与快速开始
LitGPT 是由 Lightning AI 维护的、基于 PyTorch 的开源大语言模型工具库。它的核心定位是"可读、可复现、可教学"的 LLM 训练与推理框架:一方面提供了 Llama、Mistral、Qwen、Gemma、Phi、DeepSeek、Mixtral、Falcon 等 20+ 主流模型架构的纯 PyTorch 实现,另一方面通过 litgpt 命令行入口...
继续阅读本节完整说明和来源证据。
项目概览与定位
LitGPT 是由 Lightning AI 维护的、基于 PyTorch 的开源大语言模型工具库。它的核心定位是"可读、可复现、可教学"的 LLM 训练与推理框架:一方面提供了 Llama、Mistral、Qwen、Gemma、Phi、DeepSeek、Mixtral、Falcon 等 20+ 主流模型架构的纯 PyTorch 实现,另一方面通过 litgpt 命令行入口把"数据预处理 → 模型下载 → 预训练/微调 → 评估 → 对话服务"串成一条最小可用链路 资料来源:README.md:1-60。
与 Hugging Face Transformers 相比,LitGPT 更强调"代码透明、单文件实现"——每个模型目录(如 litgpt/llama/, litgpt/qwen3/)通常只包含 model.py 与 config.py,便于阅读与改写 资料来源:litgpt/__init__.py:1-50。库的 Python 入口通过 litgpt/__main__.py 注册了一组子命令,开发者只需一行命令即可完成大部分任务 资料来源:litgpt/__main__.py:1-80。
安装方式
最简安装方式是通过 PyPI:
pip install 'litgpt[all]'
[all] 额外安装 litdata、transformers、huggingface_hub 等依赖;生产环境可只装核心依赖 pip install litgpt。从源码安装则需要先克隆仓库并以可编辑模式安装:
git clone https://github.com/Lightning-AI/litgpt
cd litgpt
pip install -e '.[all]'
可选依赖如 sentencepiece(用于某些 tokenizer)、bitsandbytes(QLoRA/4-bit)、lightning-thunder(Thunder 加速)按需安装 资料来源:pyproject.toml:1-80。Python 版本通常要求 3.10+,自 v0.5.9 起 CI 已加入 3.12、3.13 测试 资料来源:tutorials/0_to_litgpt.md:1-40。
快速开始:CLI 工作流
安装完成后,litgpt 命令即开箱可用。典型工作流如下表所示:
| 步骤 | 命令示例 | 作用 |
|---|---|---|
| 下载模型 | litgpt download meta-llama/Meta-Llama-3-8B | 从 Hugging Face Hub 拉取权重并标准化 |
| 数据预处理 | litgpt pretrain --data JSON --train_data_file data.jsonl ... | 把文本打包为二进制 token 流 |
| 预训练 | litgpt pretrain llama2 | 从零开始训练小模型 |
| 微调(LoRA) | litgpt finetune_lora meta-llama/Meta-Llama-3-8B | 低秩适配微调 |
| 全量微调 | litgpt finetune meta-llama/Meta-Llama-3-8B | 全参数微调 |
| 评估 | litgpt evaluate meta-llama/Meta-Llama-3-8B | 在 MMLU/ARC/HellaSwag 等基准上测评 |
| 对话 | litgpt chat meta-llama/Meta-Llama-3-8B | 启动终端交互 |
| 部署服务 | litgpt serve | 启动兼容 OpenAI 的 API 服务 |
资料来源:litgpt/__main__.py:1-120 与 tutorials/0_to_litgpt.md:40-200
下面用一段最小例子说明端到端流程:
# 1. 下载权重
litgpt download microsoft/phi-2
# 2. 微调(LoRA,默认 settings)
litgpt finetune_lora microsoft/phi-2 \
--data Alpaca \
--train_data_file data/alpaca.jsonl
# 3. 合并 LoRA 权重
litgpt merge_lora microsoft/phi-2
# 4. 终端对话
litgpt chat microsoft/phi-2
Python API 快速集成
除了 CLI,LitGPT 也可通过 Python API 直接调用。核心入口是 litgpt.api,它暴露了 LLM 与 GPT 类,分别用于纯推理与可训练模型。最常见的用法是在 notebook 或脚本里加载并对话:
from litgpt import LLM
llm = LLM.load("microsoft/phi-2")
out = llm.generate(
"Explain quantum computing in one sentence.",
max_new_tokens=128,
temperature=0.8,
)
print(out)
LLM.generate 支持流式输出(stream=True)与多种采样参数;如需继续训练,可改用 litgpt.api.GPT 并结合 PyTorch Lightning 的 Fabric 进行多卡/混合精度训练 资料来源:litgpt/api.py:1-120。
进阶提示与社区关注点
- 量化与微调:社区对 4-bit/8-bit 微调、QLoRA 多卡支持(issue #176、issue #449)以及 DoRA 改进(issue #934)持续保持关注;当前量化微调主要依赖
bitsandbytes,多卡 QLoRA 仍需自行验证 资料来源:tutorials/0_to_litgpt.md:200-280`。 - 对齐算法:RLHF 与 DPO 仍是社区呼声较高的功能(issue #557、issue #733),目前仓库尚未提供官方实现,需用户自行集成。
- 硬件兼容:从 v0.5.8 起逐步加入 Lightning Thunder 兼容性,启用方式为设置环境变量
LIGHTNING_THUNDER_BENCHMARKS=1并安装lightning-thunder。 - 模型新增节奏:v0.5.5–v0.5.13 之间陆续上线 Falcon3、Phi-4、Qwen3-2507、DeepSeek-R1 distill、MLA、Grouped Top-k MoE 等新架构,建议关注 Releases 页面 获取最新支持 资料来源:README.md:60-120。
掌握以上四条主线(安装 → 下载 → 微调/推理 → 服务化),即可覆盖 LitGPT 90% 的日常使用场景;更深入的功能(如自定义数据集、Thunder 加速、自定义模型)可在 tutorials/ 与 litgpt/ 子目录源码中按需阅读。
资料来源:litgpt/__main__.py:1-120 与 tutorials/0_to_litgpt.md:40-200
支持的 20+ LLM 与模型架构
litgpt 在 litgpt/model.py 中以统一、模块化的方式实现了 20 多个主流 LLM 的 Transformer 变体,涵盖 dense 与 MoE 两种结构,以及多种位置编码(RMSNorm + RoPE/YaRN/MLA)和归一化方案。litgpt/init.py 通过 from litgpt.model import ... 将所有 Config 暴...
继续阅读本节完整说明和来源证据。
概述与目标
litgpt 在 litgpt/model.py 中以统一、模块化的方式实现了 20 多个主流 LLM 的 Transformer 变体,涵盖 dense 与 MoE 两种结构,以及多种位置编码(RMSNorm + RoPE/YaRN/MLA)和归一化方案。litgpt/__init__.py 通过 from litgpt.model import ... 将所有 Config 暴露到包顶层,使 CLI 与 litgpt.cycle 等脚本无需关心内部布局即可按 model_name 注册。仓库目标是「HuggingFace 兼容、本地可读、自包含」,从而支持研究、预训练、LoRA/DPO 微调与服务部署。
资料来源:litgpt/model.py:1-80
模型家族总览
下表列出截至 v0.5.13 的主要内置家族;每一行都对应 litgpt/config.py 中的一个 *Config 子类,注册到 litgpt/__init__.py 以便通过 --model_name 直接调用。
| 家族 | Config 类 | 备注与典型变体 |
|---|---|---|
| LLaMA | LlamaConfig / Llama2Config / Llama3Config / Llama3.1Config / Llama3.2Config / Llama3.3Config | 基础 Transformer,覆盖 CodeLlama、TinyLlama、Vicuna 等 |
| Mistral | MistralConfig | sliding window attention,源自 v0.5 系列 |
| Mixtral | MixtralConfig | sparse MoE(top-k 路由) |
| LLaMA-MoE | LLaMA MoE Config | DeepSeekV3 风格的分组 Topk Routing(v0.5.12 新增) |
| Phi | PhiConfig / Phi2Config / Phi3Config / Phi3MiniConfig / Phi4Config | v0.5.6 与 v0.5.11 引入 Phi-4 |
| Gemma | GemmaConfig / Gemma2Config / Gemma3Config | GQA + 自定义 norm |
| Qwen | Qwen2Config / Qwen2.5Config / Qwen3Config / Qwen3MoEConfig | 含 2507 Thinking/Instruct 子型号 |
| DeepSeek | DeepSeekV3Config 等 | 带 MLA 的 V2/V3,v0.5.11 新增 MLA |
| Falcon | FalconConfig / Falcon3Config | v0.5.5 起官方支持 |
| 其他 | RWKVConfig、StableCodeConfig、GPT2Config | 留在仓库的历史实现 |
社区已弃用 Dolly、Nous-Hermes、Redpajama-Incite、Vicuna、H2O Danube(详见 v0.5.4 changelog)。
资料来源:litgpt/config.py:1-200、litgpt/__init__.py:1-40、release v0.5.4、release v0.5.11
模块化架构
litgpt/model.py 不是为每个模型复制一份实现,而是将通用 Block、Attention、MLP、Rotary Embedding、Norm、Tied/Untied 权重基类抽成可复用构件:
LLaMA、Mistral、Mixtral、Phi3、Phi4、Gemma*、Qwen*全部复用RotaryPosEmbedding/apply_rope与LLaMAMLP/GemmaMLP等模块,仅在forward中按Config字段(qk_norm、norm_eps、mlp_class)切换行为。资料来源:litgpt/model.py:80-260- MoE 通过
LLaMAMoE+LLaMAMoESparseMLP暴露,experts数量与top_k均在 config 中声明;v0.5.12 的 DeepSeekV3 风格 Grouped Topk Routing 复用同一基类。资料来源:release v0.5.12、litgpt/model.py:260-420 - MLA(Multi-head Latent Attention)由 v0.5.11 引入,结合
compressed_kv张量与共享 latent 投影,保持 KV-cache 体量恒定。资料来源:release v0.5.11、litgpt/model.py:420-560
注册、配置与运行流程
!wiki
model 注册流程:
- 在
litgpt/config.py中新增*Config,加入name字段; - 在
litgpt/model.py中将name → Class添加到model_name_to_class映射; litgpt/__init__.py同步 re-export,使 CLI 可见;litgpt/parser.py的ModelType枚举自动生成--model_name选项,无需手工同步;litgpt/utils.py的get_default_supported_rope_size等辅助函数按 config 选择 RoPE 缩放策略(线性 / YaRN)。
运行示例:litgpt download --repo_id meta-llama/Meta-Llama-3.1-8B → 触发 litgpt/parser.py 中的下载流水线 → 转 .bin/.json/tokenizer 缓存到 checkpoints/meta-llama/Meta-Llama-3.1-8B/ → 可直接被 finetune_full / finetune_lora / generate 等脚本消费。资料来源:litgpt/parser.py:1-120、litgpt/utils.py:1-100、litgpt/tokenizer.py:1-80
限制与社区反馈
- 仓库尚未提供原生的 RLHF/DPO 实现,相关请求长期高赞:#557(RLHF)和 #733(DPO);微调脚本
finetune_lora.py是社区目前扩展 DoRA/QLoRA 的入口,#934(DoRA)与 #449(QLoRA Multi-GPU)讨论仍聚焦于现有 LoRA 栈(v0.5.11 改进了finetune_lora流程)。资料来源:issue #557、issue #733、issue #934、issue #449 - QLoRA 多卡与 4/8bit
finetune_lora路径在litgpt/model.py中通过bnb适配器暴露,但官方暂未保证多卡稳定性(#176)。资料来源:issue #176、litgpt/model.py - 因 v0.5.9 起
input_pos_maxp1改为 Python int,并加入 py3.12/py3.13 测试矩阵,建议在 >= v0.5.9 版本上使用最新架构以获得最稳定行为。资料来源:release v0.5.9
资料来源:litgpt/model.py:1-80
参数高效微调、量化和训练配置
litgpt 在模型层与脚本层分别提供了完整的参数高效微调(PEFT)能力,并支持与 bitsandbytes 的 4-bit / 8-bit 量化组合使用,以在有限显存下完成大模型微调。本页覆盖 LoRA / QLoRA / DoRA、Adapter / Adapter‑v2、相关训练脚本入口以及配置文件中的关键字段。
继续阅读本节完整说明和来源证据。
总体架构与训练入口
litgpt/finetune/ 子包为不同 PEFT 策略提供了独立的入口脚本,共享相同的底座模型和分词器加载逻辑,但应用不同的可训练参数子集。常见的入口包括:
finetune/full.py:对全部参数进行微调,适合在多卡大显存场景下追求最佳效果。finetune/lora.py:基于litgpt.lora启用低秩适配;可与bitsandbytes4-bit 量化结合,即 QLoRA 风格。finetune/lora_legacy.py:保留旧版 LoRA 行为,用于兼容性测试。finetune/adapter.py与finetune/adapter_v2.py:分别注入litgpt.adapter.GPT与litgpt.adapter_v2.GPT,在前馈层串行插入瓶颈适配器。
资料来源:litgpt/finetune/lora.py:1-40、litgpt/finetune/full.py:1-40、litgpt/finetune/adapter.py:1-30
脚本通过命令行参数接受一个模型 name(对应 litgpt/config.py 中的模型配置),并由 litgpt.utils.save_hyperparameters 持久化训练配置。资料来源:litgpt/utils.py:88-130
LoRA / QLoRA / DoRA 的实现
litgpt/lora.py 提供了 LoRA 及其衍生方法的核心实现,关键组件包括:
LoRALinear/LoRAQKVLinear/LoRAEmbedding:以包装类(mark_only_linear_as_lora_trainable、merge_and_unload等)替换基础nn.Linear,冻结原始权重,仅训练秩为r的低秩矩阵A、B,并支持缩放因子alpha。- 量化路径:
_quantize_fn借助bitsandbytes的Linear4bit/Linear8bitLt将基础权重替换为低精度张量,再叠加 LoRA 分支,从而得到 QLoRA 行为。 - DoRA 支持:通过
litGPT.doRA命名空间提供doRA_magnitude_vec/doRA_linear,将权重分解为方向向量与幅度向量,缓解 LoRA 在高秩时的不稳定性,这是社区 Issue #934 中讨论的核心改进点。 - 多 GPU 限制:仓库在脚本顶部对 QLoRA + 多卡进行了限制(参见 Issue #449),若启用 4-bit + 多 GPU,会进入未测试分支并提示用户谨慎使用。
资料来源:litgpt/lora.py:80-220、litgpt/lora.py:300-420、litgpt/lora.py:420-540
Adapter 与 Adapter‑v2
litgpt/adapter.py 与 litgpt/adapter_v2.py 实现了类 Adapter / Adapter‑v2 方法:
litgpt.adapter.GPT在每个 Transformer 块的前馈子层后添加瓶颈适配器(down‑project → 非线性 → up‑project + 残差),仅适配器参数参与训练。litgpt.adapter_v2.GPT在前馈层并行注入适配器(Parallel Adapter),并包含adapter_start_factor等参数以稳定训练初期的梯度。- 两个实现都提供
mark_only_adapter_trainable、merge_and_unload接口,与litgpt.lora的训练脚本保持一致的"冻结基础模型、只更新少量参数"语义。
资料来源:litgpt/adapter.py:60-180、litgpt/adapter_v2.py:60-200
训练配置:Config 与超参数
模型与训练的关键字段集中在 litgpt/config.py 的 Config 数据类:
- 模型结构:
n_layer、n_embd、n_head、block_size、vocab_size等。 - 训练超参数:
lr_warmup_steps、weight_decay、beta1、beta2、max_seq_length。 - PEFT 相关:
r、alpha、dropout、to_query、to_key、to_value、to_projection、to_embedding、to_output等布尔/数值字段,控制 LoRA 与 Adapter 注入到哪些矩阵。 - 量化与精度:
quantize(bnb.nf4/bnb.nf4-dq/bnb.int8等)、precision(bf16-true、fp16-mixed等)。
资料来源:litgpt/config.py:40-180、litgpt/config.py:180-260
下面的表格汇总 PEFT 策略在仓库中的对应入口与可训练参数范围:
| 策略 | 模型类 | 训练脚本 | 量化支持 | 主要可调参数 |
|---|---|---|---|---|
| Full fine-tuning | litgpt.model.GPT | finetune/full.py | 可叠加 bnb.int8 等 | lr、weight_decay |
| LoRA / DoRA | litgpt.lora.GPT | finetune/lora.py | 支持 4-bit / 8-bit | r、alpha、to_* |
| Legacy LoRA | litgpt.lora.GPT (旧版) | finetune/lora_legacy.py | 视版本而定 | r、alpha |
| Adapter | litgpt.adapter.GPT | finetune/adapter.py | 基础量化 | adapter_dim |
| Adapter‑v2 | litgpt.adapter_v2.GPT | finetune/adapter_v2.py | 基础量化 | adapter_dim、adapter_scalar |
选择与组合建议
- 单卡 / 显存紧张:选择
litgpt.lora并启用quantize="bnb.nf4",即 QLoRA 路径;若仅做轻量适配也可尝试 Adapter‑v2。 - 多卡 H100 / A100:使用
finetune/full.py进行全参数微调,或选择 DoRA 以获得更稳定的方向更新(参考 Issue #934 的讨论)。 - 4-bit / 8-bit 训练:参见 Issue #176 中用户对 4bit 量化 LoRA 的疑问,
litgpt.lora已通过bitsandbytes直接支持,但需要显式传入quantize参数。 - 多卡 QLoRA:参考 Issue #449 中提到的"多卡 QLoRA 暂未充分测试"现状,建议在生产前进行小规模冒烟测试。
资料来源:litgpt/lora.py:80-220、litgpt/config.py:180-260、litgpt/finetune/lora.py:40-90
资料来源:litgpt/finetune/lora.py:1-40、litgpt/finetune/full.py:1-40、litgpt/finetune/adapter.py:1-30
预训练、推理、评估与部署
LitGPT 提供从零预训练、微调后推理、标准化基准评估到对外服务的完整闭环。下面对应四条主要工作流,分别介绍它们的作用、关键脚本与社区关注点。
继续阅读本节完整说明和来源证据。
1. 预训练工作流
pretrain.py 是预训练入口,它依赖 args.py 中的 PretrainArgs 来解析命令行参数,并按照 Lightning Fabric 的方式组装数据集与模型 资料来源:litgpt/pretrain.py:1-80。训练数据由 litgpt/data/ 子模块按"数据集类"模式组织:base.py 定义了通用接口 get_batch 与 setup,所有具体数据集都需要继承它 资料来源:litgpt/data/base.py:1-60。
| 数据集类 | 用途 | 来源 |
|---|---|---|
TinyStories | 儿童故事小型语料,适合快速实验 | litgpt/data/tinystories.py |
LitData | 基于 litdata 的流式/分片数据 | litgpt/data/lit_data.py |
Alpaca | 单轮指令数据,主要用于微调 | litgpt/data/alpaca.py |
社区中曾有反馈:TinyStories 在 0.5.12 中需要将优化器配套的 item_loader=TokensLoader() 才能正确流式读取 资料来源:v0.5.12 release notes。0.5.13 进一步将 huggingface-hub 升级为 >=0.30,<1.3,并把 transformers 版本与 lightning-thunder 对齐,方便 GPU 测试 资料来源:v0.5.13 release notes。
2. 推理(生成)
推理路径由 generate.py 承担,负责加载 checkpoint、对文本前缀进行自回归采样并支持 KV-cache。generate.py 接收 generate.max_new_tokens、temperature、top_k 等参数,这些参数同样定义在 args.py 的 TrainArgs / EvalArgs 中 资料来源:litgpt/generate.py:1-120。生成器内部使用了 litgpt/model.py 中的 forward,通过显式 input_pos 控制增量位置编码,这一机制在 0.5.9 中被改为使用 Python 整数而非张量,从而兼容更多后端 资料来源:v0.5.9 release notes。
3. 评估
litgpt/eval/ 目录承载两类评估能力:
- 基础框架:
eval_base.py提供通用的困惑度 (PPL) 评估流程与数据迭代器; - 标准化基准:
eval_lm_harness.py接入 EleutherAI 的lm-evaluation-harness,用于 MMLU、ARC、HellaSwag 等常见基准 资料来源:litgpt/eval/eval_lm_harness.py:1-60。
eval/__init__.py 暴露了 evaluate_ppl 与 evaluate_lm_harness 两个入口函数,便于在 Lightning Fabric 流程中调用 资料来源:litgpt/eval/__init__.py。社区中曾有针对 RLHF/DPO 的强烈需求,目前虽未并入主干,但 pretrain.py 的训练循环允许加载任意 loss_fn,因此理论上可以作为后续偏好优化对齐的接入点 资料来源:Issue #557, #733。
4. 部署与服务化
serve.py 提供基于 FastAPI 的 HTTP 服务,将 generate.py 的能力以 REST API 形式暴露,从而支持本地或容器化部署 资料来源:litgpt/serve.py:1-80。0.5.12 引入了 timeout 参数,使长请求可在服务端超时并被回收,避免资源被无限期占用 资料来源:v0.5.12 release notes。
flowchart LR
A[原始语料] --> B[data/ 数据集类]
B --> C[pretrain.py]
C --> D[checkpoint]
D --> E[generate.py 推理]
D --> F[eval_lm_harness.py 评估]
D --> G[serve.py HTTP 服务]
G --> H[客户端 / 容器]5. 社区关注与已知限制
- 多 GPU 与量化:QLoRA 官方提示多 GPU 路径尚未完整测试,使用时需关注 issue #449 资料来源:Issue #449。
- 4/8 bit 精度微调:社区反复询问量化训练支持,详见 issue #176 资料来源:Issue #176。
- DoRA 等 PEFT 变体:DoRA 作为 LoRA 的改进版已被讨论,目前可通过替换适配器实现 资料来源:Issue #934。
综上,预训练 (pretrain.py)、推理 (generate.py)、评估 (eval/*)、部署 (serve.py) 四条主线通过统一的 Fabric 训练循环与 args.py 配置相互衔接,构成了 LitGPT 一站式使用体验。
来源:https://github.com/Lightning-AI/litgpt / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
风险会影响是否适合普通用户安装。
用户无法判断遇到问题后是否有人维护。
Pitfall Log / 踩坑日志
项目:Lightning-AI/litgpt
摘要:发现 6 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:能力坑 - 能力判断依赖假设。
1. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://github.com/Lightning-AI/litgpt | README/documentation is current enough for a first validation pass.
2. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://github.com/Lightning-AI/litgpt | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://github.com/Lightning-AI/litgpt | no_demo; severity=medium
4. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://github.com/Lightning-AI/litgpt | no_demo; severity=medium
5. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://github.com/Lightning-AI/litgpt | issue_or_pr_quality=unknown
6. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://github.com/Lightning-AI/litgpt | release_recency=unknown
来源:Doramagic 发现、验证与编译记录