Liger-Kernel es una colección de kernels de Triton desarrollada por LinkedIn, diseñada específicamente para el entrenamiento de modelos de lenguaje grandes (LLM). Este proyecto puede mejorar eficazmente el rendimiento del entrenamiento multi-GPU en un 20% y reducir el uso de memoria en un 60%. El nombre del proyecto "Liger" significa "LinkedIn GPU Efficient Runtime", lo que refleja su concepto central de tiempo de ejecución de GPU eficiente.
El proyecto admite varias arquitecturas de modelos de lenguaje grandes convencionales, que incluyen:
El proyecto implementa varias operaciones de kernel optimizadas:
LigerRMSNorm
: Normalización RMSLigerLayerNorm
: Normalización de capaliger_rotary_pos_emb
: Codificación de posición rotatoria (RoPE)LigerSwiGLUMLP
: Función de activación SwiGLULigerGEGLUMLP
: Función de activación GeGLULigerCrossEntropyLoss
: Pérdida de entropía cruzadaLigerFusedLinearCrossEntropyLoss
: Pérdida de entropía cruzada lineal fusionadaAdmite varias funciones de pérdida de optimización de alineación y preferencia:
LigerFusedLinearDPOLoss
: Pérdida DPOLigerFusedLinearORPOLoss
: Pérdida ORPOLigerFusedLinearCPOLoss
: Pérdida CPOLigerFusedLinearSimPOLoss
: Pérdida SimPOLigerFusedLinearKTOLoss
: Pérdida 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
: Si utiliza la API de parche de modelos de transformersCondiciones de prueba comparativa:
Los resultados de las pruebas muestran:
Liger-Kernel se ha integrado en varios frameworks de entrenamiento convencionales:
Al fusionar varias operaciones en un solo kernel, se reduce el número de accesos a la memoria de la GPU y se mejora la eficiencia computacional.
Para las operaciones con uso intensivo de memoria, se adopta la tecnología de procesamiento de fragmentación, que descompone los cálculos grandes en fragmentos pequeños, lo que reduce el uso máximo de memoria.
Utilice operaciones in situ tanto como sea posible para evitar la asignación de memoria adicional y optimizar aún más la eficiencia de la memoria.
Liger-Kernel representa un importante avance en la optimización del entrenamiento de modelos de lenguaje grandes. A través de kernels de Triton cuidadosamente diseñados, técnicas de optimización de memoria y un amplio soporte de modelos, proporciona a investigadores e ingenieros una herramienta potente y fácil de usar que puede mejorar significativamente la eficiencia del entrenamiento y reducir los costos computacionales. La naturaleza de código abierto del proyecto y el soporte activo de la comunidad lo convierten en un recurso importante en el campo del entrenamiento de LLM.