| 稳定版 | 每日构建版 | Discord | ||
|---|---|---|---|---|
|
|
|
|
|
|

安装 | 快速开始 | 示例 | 高级 API | 低级 API | 引用我们的工作
Liger Kernel 是一个专门为 LLM 训练设计的 Triton 内核集合。它能有效提升多 GPU 训练吞吐量达 20%,并减少 60% 的内存使用。我们实现了 与 Hugging Face 兼容 的 RMSNorm、RoPE、SwiGLU、CrossEntropy、FusedLinearCrossEntropy 等,更多功能即将推出。该内核可与 Flash Attention、PyTorch FSDP 和 Microsoft DeepSpeed 开箱即用。我们欢迎社区贡献,以汇集用于 LLM 训练的最佳内核。
我们还添加了优化的训练后内核,为对齐和蒸馏任务提供 高达 80% 的内存节省。我们支持 DPO、CPO、ORPO、SimPO、KTO、JSD 等多种损失函数。查看 我们如何优化内存。
你可以访问文档站点获取额外的安装说明、使用示例和 API 参考:https://linkedin.github.io/Liger-Kernel/
你可以查看 Liger Kernel 技术报告:https://openreview.net/forum?id=36SjAIT42G
只需一行代码,Liger Kernel 就能将吞吐量提升 20% 以上,并将内存使用减少 60%,从而实现更长的上下文长度、更大的批处理规模和更大的词汇表。
| 速度提升 | 内存减少 |
|---|---|
![]() |
![]() |
注意:
- 基准测试条件:LLaMA 3-8B,批大小 = 8,数据类型 =bf16,优化器 = AdamW,梯度检查点 = True,分布式策略 = 8 个 A100 上的 FSDP1。
- Hugging Face 模型在 4K 上下文长度时开始 OOM,而 Hugging Face + Liger Kernel 可以扩展到 16K。
我们提供了优化的训练后内核,如 DPO、ORPO、SimPO 等,可减少高达 80% 的内存使用。你可以轻松地将它们用作 Python 模块。
from liger_kernel.chunked_loss import LigerFusedLinearORPOLoss
orpo_loss = LigerFusedLinearORPOLoss()
y = orpo_loss(lm_head.weight, x, target)
| 用例 | 描述 |
|---|---|
| Hugging Face Trainer | 在 Alpaca 数据集上使用 4 个 A100 和 FSDP,训练 LLaMA 3-8B 速度提升约 20%,内存减少超过 40% |
| Lightning Trainer | 在 MMLU 数据集上使用 8 个 A100 和 DeepSpeed ZeRO3,LLaMA3-8B 吞吐量提升 15%,内存使用减少 40% |
| Medusa 多头 LLM(重训练阶段) | 使用 5 个 LM 头,内存使用减少 80%,吞吐量提升 40%,使用 8 个 A100 和 FSDP |
| 视觉语言模型 SFT | 在图像-文本数据上使用 4 个 A100 和 FSDP 微调 Qwen2-VL |
| Liger ORPO Trainer | 使用 Liger ORPO Trainer 和 FSDP 对齐 Llama 3.2,内存减少 50% |
torch >= 2.1.2triton >= 2.3.0torch >= 2.5.0 根据 PyTorch 官方网页的说明安装。triton >= 3.0.0 从 pypi 安装。(例如 pip install triton==3.0.0)pip install -e .[dev]
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.3/
transformers >= 4.x:如果你计划使用 transformers 模型打补丁 API,则需要。你正在使用的具体模型将决定 transformers 的最低版本。注意:
我们的内核继承了 Triton 提供的完整硬件兼容性。
安装稳定版:
$ pip install liger-kernel
安装每日构建版:
$ pip install liger-kernel-nightly
从源码安装:
git clone https://github.com/linkedin/Liger-Kernel.git
cd Liger-Kernel
# 安装默认依赖项
# Setup.py 会检测你使用的是 AMD 还是 NVIDIA
pip install -e .
# 安装开发依赖项
pip install -e ".[dev]"
# 注意 -> 仅适用于 AMD 用户
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.3/
根据所需的定制化程度,有几种应用 Liger 内核的方法。
使用 AutoLigerKernelForCausalLM 是最简单的方法,因为你不需要导入特定于模型的打补丁 API。如果模型类型受支持,建模代码将使用默认设置自动打补丁。
from liger_kernel.transformers import AutoLigerKernelForCausalLM
# 这个 AutoModel 包装类会自动为支持的模型打上优化的 Liger 内核补丁。
model = AutoLigerKernelForCausalLM.from_pretrained("path/to/some/model")
使用打补丁 API,你可以将 Hugging Face 模型替换为优化的 Liger 内核。
import transformers
from liger_kernel.transformers import apply_liger_kernel_to_llama
# 1a. 添加此行会自动为模型打上优化的 Liger 内核补丁
apply_liger_kernel_to_llama()
# 1b. 或者,你可以指定具体应用哪些内核
apply_liger_kernel_to_llama(
rope=True,
swiglu=True,
cross_entropy=True,
fused_linear_cross_entropy=False,
rms_norm=False
)
# 2. 实例化已打补丁的模型
model = transformers.AutoModelForCausalLM("path/to/llama/model")
你可以使用单独的内核来组合你的模型。
from liger_kernel.transformers import LigerFusedLinearCrossEntropyLoss
import torch.nn as nn
import torch
model = nn.Linear(128, 256).cuda()
# 将线性层和交叉熵层融合在一起,并执行分块计算以减少内存
loss_fn = LigerFusedLinearCrossEntropyLoss()
input = torch.randn(4, 128, requires_grad=True, device="cuda")
target = torch.randint(256, (4, ), device="cuda")
loss = loss_fn(model.weight, input, target)
loss.backward()
| AutoModel 变体 | API |
|---|---|
| AutoModelForCausalLM | liger_kernel.transformers.AutoLigerKernelForCausalLM |
| 模型 | API | 支持的操作 |
|---|---|---|
| Llama4 (文本) & (多模态) | liger_kernel.transformers.apply_liger_kernel_to_llama4 |
RMSNorm, LayerNorm, GeGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
| LLaMA 2 & 3 | liger_kernel.transformers.apply_liger_kernel_to_llama |
RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
| LLaMA 3.2-Vision | `liger_kernel.transformers.apply_lig |