Liger-Kernel é uma coleção de kernels Triton desenvolvida pelo LinkedIn, projetada especificamente para o treinamento de grandes modelos de linguagem (LLM). Este projeto é capaz de aumentar efetivamente o throughput de treinamento multi-GPU em 20% e reduzir o uso de memória em 60%. O nome do projeto "Liger" representa "LinkedIn GPU Efficient Runtime", refletindo sua filosofia central de runtime GPU eficiente.
O projeto suporta várias arquiteturas de grandes modelos de linguagem, incluindo:
O projeto implementou várias operações de kernel otimizadas:
LigerRMSNorm
: Normalização RMSLigerLayerNorm
: Normalização de Camadaliger_rotary_pos_emb
: Codificação de Posição Rotativa (RoPE)LigerSwiGLUMLP
: Função de Ativação SwiGLULigerGEGLUMLP
: Função de Ativação GeGLULigerCrossEntropyLoss
: Perda de Entropia CruzadaLigerFusedLinearCrossEntropyLoss
: Perda de Entropia Cruzada Linear FundidaSuporta várias funções de perda de alinhamento e otimização de preferência:
LigerFusedLinearDPOLoss
: Perda DPOLigerFusedLinearORPOLoss
: Perda ORPOLigerFusedLinearCPOLoss
: Perda CPOLigerFusedLinearSimPOLoss
: Perda SimPOLigerFusedLinearKTOLoss
: Perda KTOfrom liger_kernel.transformers import AutoLigerKernelForCausalLM
model = AutoLigerKernelForCausalLM.from_pretrained("path/to/some/model")
import transformers
from liger_kernel.transformers import apply_liger_kernel_to_llama
apply_liger_kernel_to_llama()
apply_liger_kernel_to_llama(
rope=True,
swiglu=True,
cross_entropy=True,
fused_linear_cross_entropy=False,
rms_norm=False
)
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()
from liger_kernel.chunked_loss import LigerFusedLinearORPOLoss
orpo_loss = LigerFusedLinearORPOLoss()
y = orpo_loss(lm_head.weight, x, target)
pip install liger-kernel
pip install liger-kernel-nightly
git clone https://github.com/linkedin/Liger-Kernel.git
cd Liger-Kernel
pip install -e .
pip install -e ".[dev]"
torch >= 2.1.2
triton >= 2.3.0
torch >= 2.5.0
triton >= 3.0.0
transformers >= 4.x
: Se usar a API de patch de modelo transformersCondições de benchmark:
Os resultados dos testes mostram:
Liger-Kernel foi integrado em vários frameworks de treinamento principais:
Ao fundir várias operações em um único kernel, o número de acessos à memória da GPU é reduzido, aumentando a eficiência computacional.
Para operações com uso intensivo de memória, a técnica de processamento em chunk é usada para decompor grandes cálculos em pequenos chunks, reduzindo o uso máximo de memória.
Sempre que possível, operações in-place são usadas para evitar alocação de memória adicional, otimizando ainda mais a eficiência da memória.
Liger-Kernel representa um avanço importante na otimização do treinamento de grandes modelos de linguagem. Através de kernels Triton cuidadosamente projetados, técnicas de otimização de memória e amplo suporte a modelos, ele fornece aos pesquisadores e engenheiros uma ferramenta poderosa e fácil de usar que pode aumentar significativamente a eficiência do treinamento e reduzir os custos computacionais. A natureza de código aberto do projeto e o suporte ativo da comunidade o tornam um recurso importante no campo do treinamento de LLM.