Liger-Kernelは、LinkedInが開発したTritonカーネルの集合であり、大規模言語モデル(LLM)のトレーニング専用に設計されています。このプロジェクトは、マルチGPUトレーニングのスループットを20%向上させ、メモリ使用量を60%削減できます。プロジェクト名「Liger」は「LinkedIn GPU Efficient Runtime」の略で、その効率的なGPUランタイムというコアコンセプトを体現しています。
プロジェクトは、以下を含むさまざまな主流の大規模言語モデルアーキテクチャをサポートしています。
プロジェクトは、さまざまな最適化されたカーネル操作を実装しています。
LigerRMSNorm
: RMS正規化LigerLayerNorm
: 層正規化liger_rotary_pos_emb
: 回転位置エンコーディング(RoPE)LigerSwiGLUMLP
: SwiGLU活性化関数LigerGEGLUMLP
: GeGLU活性化関数LigerCrossEntropyLoss
: 交差エントロピー損失LigerFusedLinearCrossEntropyLoss
: 融合線形交差エントロピー損失さまざまなアライメントおよび選好最適化損失関数をサポートします。
LigerFusedLinearDPOLoss
: DPO損失LigerFusedLinearORPOLoss
: ORPO損失LigerFusedLinearCPOLoss
: CPO損失LigerFusedLinearSimPOLoss
: SimPO損失LigerFusedLinearKTOLoss
: KTO損失from 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
: transformersモデルパッチAPIを使用する場合ベンチマークテスト条件:
テスト結果:
Liger-Kernelは、複数の主流トレーニングフレームワークに統合されています。
複数の操作を単一のカーネルに融合することにより、GPUメモリへのアクセス回数を減らし、計算効率を向上させます。
メモリ集約的な操作の場合、チャンク処理技術を採用し、大規模な計算を小さなチャンクに分解して、ピーク時のメモリ使用量を削減します。
可能な限りインプレース操作を使用し、追加のメモリ割り当てを回避して、メモリ効率をさらに最適化します。
Liger-Kernelは、大規模言語モデルのトレーニング最適化における重要な進歩を表しています。慎重に設計されたTritonカーネル、メモリ最適化技術、および幅広いモデルサポートを通じて、研究者とエンジニアに強力で使いやすいツールを提供し、トレーニング効率を大幅に向上させ、計算コストを削減できます。プロジェクトのオープンソースの性質と活発なコミュニティサポートにより、LLMトレーニング分野における重要なリソースとなっています。