Liger-Kernel ist eine von LinkedIn entwickelte Sammlung von Triton-Kerneln, die speziell für das Training großer Sprachmodelle (LLM) konzipiert wurde. Das Projekt kann den Multi-GPU-Trainingsdurchsatz effektiv um 20 % steigern und die Speichernutzung um 60 % reduzieren. Der Projektname "Liger" steht für "LinkedIn GPU Efficient Runtime" und spiegelt die Kernidee einer effizienten GPU-Laufzeit wider.
Das Projekt unterstützt verschiedene gängige Architekturen großer Sprachmodelle, darunter:
Das Projekt implementiert verschiedene optimierte Kernel-Operationen:
LigerRMSNorm
: RMS-NormalisierungLigerLayerNorm
: Layer-Normalisierungliger_rotary_pos_emb
: Rotatorische Positionskodierung (RoPE)LigerSwiGLUMLP
: SwiGLU-AktivierungsfunktionLigerGEGLUMLP
: GeGLU-AktivierungsfunktionLigerCrossEntropyLoss
: Kreuzentropie-VerlustLigerFusedLinearCrossEntropyLoss
: Verschmolzener linearer Kreuzentropie-VerlustUnterstützt verschiedene Alignment- und Präferenzoptimierungs-Verlustfunktionen:
LigerFusedLinearDPOLoss
: DPO-VerlustLigerFusedLinearORPOLoss
: ORPO-VerlustLigerFusedLinearCPOLoss
: CPO-VerlustLigerFusedLinearSimPOLoss
: SimPO-VerlustLigerFusedLinearKTOLoss
: KTO-Verlustfrom 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
: Wenn die Transformers-Modell-Patch-API verwendet wirdBenchmark-Bedingungen:
Die Testergebnisse zeigen:
Liger-Kernel ist in mehrere gängige Trainingsframeworks integriert:
Durch die Fusion mehrerer Operationen in einen einzigen Kernel werden die GPU-Speicherzugriffe reduziert und die Recheneffizienz gesteigert.
Für speicherintensive Operationen wird die Chunking-Technik verwendet, um große Berechnungen in kleine Blöcke zu zerlegen und die maximale Speichernutzung zu reduzieren.
Verwenden Sie nach Möglichkeit In-Place-Operationen, um zusätzliche Speicherzuweisungen zu vermeiden und die Speichereffizienz weiter zu optimieren.
Liger-Kernel stellt einen wichtigen Fortschritt in der Optimierung des Trainings großer Sprachmodelle dar. Durch sorgfältig entworfene Triton-Kernel, Speicheroptimierungstechniken und breite Modellunterstützung bietet es Forschern und Ingenieuren ein leistungsstarkes und einfach zu bedienendes Werkzeug, das die Trainingseffizienz erheblich steigern und die Rechenkosten senken kann. Die Open-Source-Natur des Projekts und die aktive Community-Unterstützung machen es zu einer wichtigen Ressource im Bereich des LLM-Trainings.