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.pyconfig.py,便于阅读与改写 资料来源:litgpt/__init__.py:1-50。库的 Python 入口通过 litgpt/__main__.py 注册了一组子命令,开发者只需一行命令即可完成大部分任务 资料来源:litgpt/__main__.py:1-80

安装方式

最简安装方式是通过 PyPI:

pip install 'litgpt[all]'

[all] 额外安装 litdatatransformershuggingface_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-120tutorials/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,它暴露了 LLMGPT 类,分别用于纯推理与可训练模型。最常见的用法是在 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 #176issue #449)以及 DoRA 改进(issue #934)持续保持关注;当前量化微调主要依赖 bitsandbytes,多卡 QLoRA 仍需自行验证 资料来源:tutorials/0_to_litgpt.md:200-280`。
  • 对齐算法:RLHF 与 DPO 仍是社区呼声较高的功能(issue #557issue #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-120tutorials/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 类备注与典型变体
LLaMALlamaConfig / Llama2Config / Llama3Config / Llama3.1Config / Llama3.2Config / Llama3.3Config基础 Transformer,覆盖 CodeLlama、TinyLlama、Vicuna 等
MistralMistralConfigsliding window attention,源自 v0.5 系列
MixtralMixtralConfigsparse MoE(top-k 路由)
LLaMA-MoELLaMA MoE ConfigDeepSeekV3 风格的分组 Topk Routing(v0.5.12 新增)
PhiPhiConfig / Phi2Config / Phi3Config / Phi3MiniConfig / Phi4Configv0.5.6 与 v0.5.11 引入 Phi-4
GemmaGemmaConfig / Gemma2Config / Gemma3ConfigGQA + 自定义 norm
QwenQwen2Config / Qwen2.5Config / Qwen3Config / Qwen3MoEConfig含 2507 Thinking/Instruct 子型号
DeepSeekDeepSeekV3Config带 MLA 的 V2/V3,v0.5.11 新增 MLA
FalconFalconConfig / Falcon3Configv0.5.5 起官方支持
其他RWKVConfigStableCodeConfigGPT2Config留在仓库的历史实现

社区已弃用 Dolly、Nous-Hermes、Redpajama-Incite、Vicuna、H2O Danube(详见 v0.5.4 changelog)。

资料来源:litgpt/config.py:1-200litgpt/__init__.py:1-40、release v0.5.4、release v0.5.11

模块化架构

litgpt/model.py 不是为每个模型复制一份实现,而是将通用 Block、Attention、MLP、Rotary Embedding、Norm、Tied/Untied 权重基类抽成可复用构件:

  • LLaMAMistralMixtralPhi3Phi4Gemma*Qwen* 全部复用 RotaryPosEmbedding / apply_ropeLLaMAMLP / GemmaMLP 等模块,仅在 forward 中按 Config 字段(qk_normnorm_epsmlp_class)切换行为。资料来源:litgpt/model.py:80-260
  • MoE 通过 LLaMAMoE + LLaMAMoESparseMLP 暴露,experts 数量与 top_k 均在 config 中声明;v0.5.12 的 DeepSeekV3 风格 Grouped Topk Routing 复用同一基类。资料来源:release v0.5.12litgpt/model.py:260-420
  • MLA(Multi-head Latent Attention)由 v0.5.11 引入,结合 compressed_kv 张量与共享 latent 投影,保持 KV-cache 体量恒定。资料来源:release v0.5.11litgpt/model.py:420-560

注册、配置与运行流程

!wiki

model 注册流程:

  1. litgpt/config.py 中新增 *Config,加入 name 字段;
  2. litgpt/model.py 中将 name → Class 添加到 model_name_to_class 映射;
  3. litgpt/__init__.py 同步 re-export,使 CLI 可见;
  4. litgpt/parser.pyModelType 枚举自动生成 --model_name 选项,无需手工同步;
  5. litgpt/utils.pyget_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-120litgpt/utils.py:1-100litgpt/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 #176litgpt/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 启用低秩适配;可与 bitsandbytes 4-bit 量化结合,即 QLoRA 风格。
  • finetune/lora_legacy.py:保留旧版 LoRA 行为,用于兼容性测试。
  • finetune/adapter.pyfinetune/adapter_v2.py:分别注入 litgpt.adapter.GPTlitgpt.adapter_v2.GPT,在前馈层串行插入瓶颈适配器。

资料来源:litgpt/finetune/lora.py:1-40litgpt/finetune/full.py:1-40litgpt/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_trainablemerge_and_unload 等)替换基础 nn.Linear,冻结原始权重,仅训练秩为 r 的低秩矩阵 AB,并支持缩放因子 alpha
  • 量化路径:_quantize_fn 借助 bitsandbytesLinear4bit / 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-220litgpt/lora.py:300-420litgpt/lora.py:420-540

Adapter 与 Adapter‑v2

litgpt/adapter.pylitgpt/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_trainablemerge_and_unload 接口,与 litgpt.lora 的训练脚本保持一致的"冻结基础模型、只更新少量参数"语义。

资料来源:litgpt/adapter.py:60-180litgpt/adapter_v2.py:60-200

训练配置:Config 与超参数

模型与训练的关键字段集中在 litgpt/config.pyConfig 数据类:

  • 模型结构:n_layern_embdn_headblock_sizevocab_size 等。
  • 训练超参数:lr_warmup_stepsweight_decaybeta1beta2max_seq_length
  • PEFT 相关:ralphadropoutto_queryto_keyto_valueto_projectionto_embeddingto_output 等布尔/数值字段,控制 LoRA 与 Adapter 注入到哪些矩阵。
  • 量化与精度:quantizebnb.nf4 / bnb.nf4-dq / bnb.int8 等)、precisionbf16-truefp16-mixed 等)。

资料来源:litgpt/config.py:40-180litgpt/config.py:180-260

下面的表格汇总 PEFT 策略在仓库中的对应入口与可训练参数范围:

策略模型类训练脚本量化支持主要可调参数
Full fine-tuninglitgpt.model.GPTfinetune/full.py可叠加 bnb.int8lrweight_decay
LoRA / DoRAlitgpt.lora.GPTfinetune/lora.py支持 4-bit / 8-bitralphato_*
Legacy LoRAlitgpt.lora.GPT (旧版)finetune/lora_legacy.py视版本而定ralpha
Adapterlitgpt.adapter.GPTfinetune/adapter.py基础量化adapter_dim
Adapter‑v2litgpt.adapter_v2.GPTfinetune/adapter_v2.py基础量化adapter_dimadapter_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-220litgpt/config.py:180-260litgpt/finetune/lora.py:40-90

资料来源:litgpt/finetune/lora.py:1-40litgpt/finetune/full.py:1-40litgpt/finetune/adapter.py:1-30

预训练、推理、评估与部署

LitGPT 提供从零预训练、微调后推理、标准化基准评估到对外服务的完整闭环。下面对应四条主要工作流,分别介绍它们的作用、关键脚本与社区关注点。

章节 相关页面

继续阅读本节完整说明和来源证据。

1. 预训练工作流

pretrain.py 是预训练入口,它依赖 args.py 中的 PretrainArgs 来解析命令行参数,并按照 Lightning Fabric 的方式组装数据集与模型 资料来源:litgpt/pretrain.py:1-80。训练数据由 litgpt/data/ 子模块按"数据集类"模式组织:base.py 定义了通用接口 get_batchsetup,所有具体数据集都需要继承它 资料来源: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_tokenstemperaturetop_k 等参数,这些参数同样定义在 args.pyTrainArgs / 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_pplevaluate_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 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

medium 维护活跃度未知

新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。

medium 存在评分风险

风险会影响是否适合普通用户安装。

low issue/PR 响应质量未知

用户无法判断遇到问题后是否有人维护。

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 发现、验证与编译记录