lit-llama
用 Apache 2.0 许可证重写的 LLaMA 全流程实现,支持预训练、微调与量化推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 Apache 2.0 许可证重写的 LLaMA 全流程实现,支持预训练、微调与量化推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

想象一个场景: 你是一名 AI 研究者,想要基于 LLaMA 模型做微调实验,但发现 Meta 原始 LLaMA 代码采用 GPL 许可证——这意味着你的研究成果也必须开源,无法商业化。你陷入两难:要么放弃,要么从头造轮子。
Lit-LLaMA 解决的就是这个问题。
2023 年 2 月,Meta AI 发布 LLaMA(Large Language Model Meta AI)模型,在 AI 圈引发轰动。但研究者们很快发现一个严重问题:LLaMA 原始代码采用 GPL 许可证,这意味着任何使用它的项目也必须开源,形成 GPL 的「许可证传染」。这与 AI 领域大量使用 Apache 2.0、MIT 等宽松许可证的生态格格不入。
Lightning AI 团队(PyTorch Lightning 的缔造者)决定解决这个问题。他们从零开始,用 Apache 2.0 许可证重新实现了 LLaMA 的预训练、微调和推理代码,让开源 AI 社区终于可以在没有许可证包袱的情况下使用 LLaMA 架构。项目名称 Lit-LLaMA 中的「Lit」即取自 Lightning。

图1:Lit-LLaMA 官方配图
Lit-LLaMA 最独特的设计哲学是单文件实现:整个 LLaMA 模型架构(包括 Transformer 层、位置编码、注意力机制)全部写在一个 model.py 文件里,不依赖任何外部抽象层。这种做法直接继承了 nanoGPT(Andrej Karpathy 的 GPT 实现)的风格,代码行数控制在 1200 行以内,任何人都可以读完并理解全部细节。
class LLaMA(nn.Module):
def __init__(self, config: LLaMAConfig) -> None:
super().__init__()
self.lm_head = nn.Linear(config.n_embd, config.padded_vocab_size, bias=False)
self.transformer = nn.ModuleDict(
dict(
wte=nn.Embedding(config.padded_vocab_size, config.n_embd),
h=nn.ModuleList(Block(config) for _ in range(config.n_layer)),
ln_f=RMSNorm(config.n_embd),
)
)
这种简洁设计让研究人员可以快速修改模型架构(如调整 n_layer、n_embd)进行实验,而不需要在复杂的框架代码中迷失。
Lit-LLaMA 提供了三种参数高效微调(PEFT)方案,让用户无需全量微调即可将 LLaMA 适配到特定任务:
以 LoRA 微调为例,只需执行:
python scripts/prepare_alpaca.py # 准备 Alpaca 数据集
python finetune/lora.py # 开始微调(需 ~24GB GPU)
Alpaca 数据集是斯坦福团队用 GPT-3.5 生成的 5.2 万条指令微调数据集,Lit-LLaMA 提供了完整的预处理脚本。
Lit-LLaMA 的量化支持非常实用,让大模型在消费级硬件上运行成为可能:
| 方案 | VRAM 需求 | 精度损失 |
|---|---|---|
| 原始 (bfloat16) | ~14GB | 无 |
| Int8 量化 (llm.int8) | ~10GB | 极小 |
| GPTQ Int4 量化 | ~5GB | 可接受 |
Int8 量化只需加 --quantize llm.int8 参数,无需预处理;Int4 量化需要先运行 GPTQ 脚本预处理权重:
python quantize/gptq.py --output_path checkpoints/lit-llama/7B/llama-gptq.4bit.pth --dtype bfloat16 --quantize gptq.int4
Lit-LLaMA 不仅支持微调和推理,还提供完整的预训练脚本,基于 RedPajama 数据集(GPT 训练数据的开源复现)从头训练模型。packed_dataset.py 实现了高效的流式数据加载和 packed sequence 处理,减少训练时的 padding 开销。
整个项目构建在 Lightning Fabric 之上,这是 Lightning AI 的轻量级训练框架(比 PyTorch Lightning 更底层、更灵活)。Fabric 自动处理分布式训练、混合精度、梯度累积等,让单卡和多卡训练使用同一套代码。
lit_llama/
model.py # LLaMA 模型主体 (~1200行,单文件实现)
lora.py # LoRA 参数注入实现
adapter.py # Adapter 模块实现
adapter_v2.py # AdapterV2 实现
quantization.py # Int8 量化实现
tokenizer.py # SentencePiece 分词器封装
utils.py # 工具函数(find_multiple, etc.)
packed_dataset.py # PackedSequence 数据集
finetune/
lora.py # LoRA 微调脚本
adapter.py # Adapter 微调脚本
full.py # 全量微调脚本
length_grouped_sampler.py # 长度分组采样器
quantize/
gptq.py # GPTQ Int4 量化脚本
pretrain/ # 预训练相关脚本
evaluate/ # 评估脚本
howto/ # 技术指南文档
架构特点:
门槛说明: Lit-LLaMA 是一个纯命令行工具,没有 Web UI。所有操作通过 Python 脚本和命令行参数完成。需要一台带 NVIDIA GPU 的 Linux 机器(Windows 通过 WSL2 也可运行)。
最低配置(Int4 量化):RTX 3060 12GB 即可运行 7B 模型推理。训练(LoRA 微调)建议 RTX 3090 或 A100。
安装步骤:
git clone https://github.com/Lightning-AI/lit-llama
cd lit-llama
pip install -e ".[all]"
但必须注意的是,使用 Lit-LLaMA 需要自行从 Meta 申请 LLaMA 权重(需填写申请表,审批通常需几天)。这是不可避免的前提条件。
Lit-LLaMA 的价值不仅在于代码本身,更在于它对开源 AI 生态的推动:
截至分析时,Lit-LLaMA 获得 6079 颗 GitHub Stars 和 518 个 Fork,在 LLM 实现类项目中排名前列。考虑到项目已停止维护,这个数据说明它作为学习资料的价值依然被广泛认可。
总结: Lit-LLaMA 是一款定位明确、代码优雅的 LLaMA 开源实现,特别适合想深入理解 LLaMA 架构的研究者和需要本地部署 LLaMA 但不希望受 GPL 约束的开发者。它的单文件设计、多种 PEFT 方案和量化支持,在今天仍有参考价值。但新项目应优先考虑其继任者 LitGPT。