훈련용 커널

훈련용 커널

커스텀 커널은 행렬 곱셈, 어텐션, 정규화 같은 특정 연산을 더 빠르게 실행하기 위해 설계되었습니다. 여러 연산을 단일 커널로 퓨전(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 가이드를 참조하세요.

더 알아보기 (Learn more)