훈련용 커널
훈련용 커널
커스텀 커널은 행렬 곱셈, 어텐션, 정규화 같은 특정 연산을 더 빠르게 실행하기 위해 설계되었습니다. 여러 연산을 단일 커널로 퓨전(fusing)하면 GPU 메모리를 읽고 쓰는 횟수를 줄여 메모리 대역폭 사용을 낮추고, 연산별 실행 오버헤드도 줄일 수 있습니다.
출처: 문서
본문
커스텀 커널은 행렬 곱셈, 어텐션, 정규화 같은 특정 연산을 더 빠르게 실행하기 위해 설계되었습니다. 여러 연산을 단일 커널로 퓨전하면 GPU 메모리를 읽고 쓰는 횟수가 줄어 메모리 대역폭 사용이 감소하고, 연산별 실행 오버헤드도 줄어듭니다.
Hub 커널
Hub에는 KernelConfig로 로드할 수 있는 커뮤니티 커널이 호스팅되어 있습니다. from_pretrained()의 kernel_config에 이 config를 전달하세요. 커널이 로드되면 훈련 중에 활성화됩니다. 사용 가능한 모든 옵션은 커널 로드 가이드를 읽어 보세요.
from transformers import AutoModelForCausalLM, KernelConfig
kernel_config = KernelConfig(
kernel_mapping={
"RMSNorm": "kernels-community/liger-kernels:LigerRMSNorm",
}
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
use_kernels=True,
kernel_config=kernel_config,
)
Liger
Liger Kernel은 RMSNorm, RoPE, SwiGLU, CrossEntropy, FusedLinearCrossEntropy 같은 레이어를 단일 Triton 커널로 퓨전합니다. FlashAttention, FSDP, DeepSpeed와 호환되며, 다중 GPU 훈련 처리량을 개선하면서 메모리 사용을 줄여 더 큰 어휘 크기, 배치 크기, 컨텍스트 길이를 가능하게 합니다.
pip install liger-kernel
TrainingArguments에서 use_liger_kernel=True를 설정하면 해당 모델 레이어를 Liger의 커널로 패치할 수 있습니다.
[!TIP] 지원되는 모델의 전체 목록은 patching 페이지를 참조하세요.
from transformers import TrainingArguments
training_args = TrainingArguments(
...,
use_liger_kernel=True
)
어떤 레이어를 패치할지 제어하려면 liger_kernel_config를 dict로 전달합니다. 사용 가능한 옵션은 모델마다 다르며 rope, swiglu, cross_entropy, fused_linear_cross_entropy, rms_norm 등을 포함합니다.
from transformers import TrainingArguments
training_args = TrainingArguments(
...,
use_liger_kernel=True,
liger_kernel_config={
"rope": True,
"cross_entropy": True,
"rms_norm": False,
"swiglu": True,
}
)
다음 단계
- 메모리 사용을 줄이는 FlashAttention 같은 커널에 대한 자세한 내용은 Attention backends 가이드를 참조하세요.
- 전체 훈련 스텝에 대해 forward와 backward pass를 컴파일하는 방법은 torch.compile 가이드를 참조하세요.