Liger Kernel: Эффективные ядра Triton для обучения LLMLiger (Linkedin GPU Effic…
Liger (Linkedin GPU Efficient Runtime) Kernel — набор оптимизированных ядер Triton, применение которых в задачах обучения LLM на нескольких GPU повышает производительность на 20 % и снижает потребление VRAM на 60%. Это дает возможность использовать более длинные контексты, более крупные размеры пакетов и увеличенные словари в обучении.
Liger предоставляет простой API для операций с оптимизированными ядрами и совместим с Hugging Face: RMSNorm, RoPE, SwiGLU, CrossEntropy, FusedLinearCrossEntropy
Liger работает с Flash Attention, PyTorch FSDP и Microsoft DeepSpeed без необходимости дополнительной настройки.
Зависимости:
Liger Kernel доступен в pip. Выберите стабильную версию для продакшена или nightly c последними новыми функциями и исправлениями:
# Stable version
pip install liger-kernel
# Nightly version
pip install liger-kernel-nightly
Патч существующей модели с Hugging Face:
# Import modules
import transformers
from liger_kernel.transformers import apply_liger_kernel_to_llama
# Load Hugging Face model:
model = transformers.AutoModelForCausalLM.from_pretrained("<some llama model>")
# Apply Liger Kernel patches:
apply_liger_kernel_to_llama(model)
После установки патча, модель будет использовать операции ядра Liger для поддерживаемых слоев, что приведет к повышению производительности и снижению потребления VRAM.
Если вы хотите построить собственные модели с помощью Liger Kernel, вы можете импортировать отдельные модули ядра и использовать их в качестве строительных блоков. Например:
# Import the Liger Kernel module:
from liger_kernel.transformers import LigerFusedLinearCrossEntropyLoss
#Create your model:
import torch.nn as nn
import torch
model = nn.Linear(128, 256).cuda()
loss_fn = LigerFusedLinearCrossEntropyLoss()
#Use the model:
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()
Модель пропатчена, вы можете продолжить обучение как обычно. Liger Kernel будет автоматически выполнять оптимизированные операции во время обучения.