Liger-Kernel est une collection de kernels Triton développée par LinkedIn, spécialement conçue pour l'entraînement de grands modèles de langage (LLM). Ce projet permet d'améliorer efficacement le débit d'entraînement multi-GPU de 20 % et de réduire l'utilisation de la mémoire de 60 %. Le nom du projet "Liger" signifie "LinkedIn GPU Efficient Runtime", reflétant son concept central de runtime GPU efficace.
Le projet prend en charge plusieurs architectures de grands modèles de langage courants, notamment :
Le projet a implémenté plusieurs opérations de kernel optimisées :
LigerRMSNorm
: Normalisation RMSLigerLayerNorm
: Normalisation de coucheliger_rotary_pos_emb
: Encodage de position rotatif (RoPE)LigerSwiGLUMLP
: Fonction d'activation SwiGLULigerGEGLUMLP
: Fonction d'activation GeGLULigerCrossEntropyLoss
: Perte d'entropie croiséeLigerFusedLinearCrossEntropyLoss
: Perte d'entropie croisée linéaire fusionnéePrise en charge de plusieurs fonctions de perte d'alignement et d'optimisation des préférences :
LigerFusedLinearDPOLoss
: Perte DPOLigerFusedLinearORPOLoss
: Perte ORPOLigerFusedLinearCPOLoss
: Perte CPOLigerFusedLinearSimPOLoss
: Perte SimPOLigerFusedLinearKTOLoss
: Perte 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 vous utilisez l'API de patch de modèle transformersConditions des tests de performance :
Les résultats des tests montrent :
Liger-Kernel a été intégré à plusieurs frameworks d'entraînement courants :
En fusionnant plusieurs opérations en un seul kernel, le nombre d'accès à la mémoire GPU est réduit, ce qui améliore l'efficacité du calcul.
Pour les opérations gourmandes en mémoire, une technique de traitement par blocs est utilisée, décomposant les grands calculs en petits blocs, ce qui réduit l'utilisation maximale de la mémoire.
Dans la mesure du possible, des opérations sur place sont utilisées pour éviter l'allocation de mémoire supplémentaire, ce qui optimise davantage l'efficacité de la mémoire.
Liger-Kernel représente une avancée importante dans l'optimisation de l'entraînement des grands modèles de langage. Grâce à des kernels Triton soigneusement conçus, des techniques d'optimisation de la mémoire et une large prise en charge des modèles, il offre aux chercheurs et aux ingénieurs un outil puissant et facile à utiliser, capable d'améliorer considérablement l'efficacité de l'entraînement et de réduire les coûts de calcul. La nature open source du projet et le soutien actif de la communauté en font une ressource importante dans le domaine de l'entraînement des LLM.