快速上手
备注
阅读本篇前,请确保已按照 安装指南 完成昇腾环境与 Liger-Kernel 的安装。
Liger-Kernel 提供面向 LLM 训练的高效 Triton 融合算子。在昇腾 NPU 上,只需一行 Patch 代码即可将 Hugging Face 模型中的关键算子替换为 Liger-Kernel 优化实现,从而提升训练吞吐并降低显存占用。
方式一:模型 Patch API
如需更细粒度控制启用的算子,可在加载模型前调用对应 Patch 函数:
import torch
import torch_npu
from transformers import AutoModelForCausalLM
from liger_kernel.transformers import apply_liger_kernel_to_qwen3
# 在实例化模型前调用,自动替换 RoPE、RMSNorm、SwiGLU、CrossEntropy 等算子
apply_liger_kernel_to_qwen3(
rope=True,
rms_norm=True,
swiglu=True,
cross_entropy=True,
fused_linear_cross_entropy=False,
)
model = AutoModelForCausalLM.from_pretrained(
"/home/model/Qwen3-0.6B",
dtype=torch.bfloat16,
device_map="npu",
)
# 打印模型结构,检查是否替换成功 print(model)
其他常用模型可使用对应的 Patch API,例如 apply_liger_kernel_to_llama、apply_liger_kernel_to_qwen3、apply_liger_kernel_to_mistral 等,完整列表见 Liger-Kernel 官方文档。
提示
使用 device_map="npu" 需要安装 accelerate``(``pip install accelerate)。也可在加载模型后手动迁移:model = model.to("npu")。
方式二:单独使用算子模块
也可以将单个 Liger 算子嵌入自定义模型:
import torch
import torch_npu
from liger_kernel.transformers import LigerRMSNorm, LigerFusedLinearCrossEntropyLoss
hidden_size = 4096
vocab_size = 32000
norm = LigerRMSNorm(hidden_size).npu()
loss_fn = LigerFusedLinearCrossEntropyLoss()
x = torch.randn(4, 128, hidden_size, dtype=torch.bfloat16, device="npu", requires_grad=True)
target = torch.randint(vocab_size, (4, 128), device="npu")
weight = torch.randn(vocab_size, hidden_size, dtype=torch.bfloat16, device="npu", requires_grad=True)
hidden = norm(x)
# LigerFusedLinearCrossEntropyLoss 的输入需为二维张量 (batch*seq, hidden_size)
loss = loss_fn(weight, hidden.reshape(-1, hidden_size), target.reshape(-1))
loss.backward()
训练框架集成
Liger-Kernel 已集成到多个训练框架,在 NPU 上可通过框架配置启用:
LLaMA-Factory:训练参数中设置
--use_liger_kernel trueVeOmni:模型 Patch 中启用 Liger-Kernel
verl:配置
model.use_liger=true