Transformers 4.40 성능 업그레이드 – OpenAI GPT‑OSS용: 제로‑빌드 커널, MXFP4 양자화, 병렬 처리 및 빠른 로딩
TL;DR
OpenAI의 GPT‑OSS 모델이 이제 Hugging Face transformers 라이브러리에서 완전 지원되며, 제로‑빌드 다운로드 가능한 커널, MXFP4 4‑비트 양자화, 텐서 및 전문가 병렬 처리, 동적 슬라이딩‑윈도우 캐시, 연속 배치, 그리고 더 빠른 모델 로딩 등 다양한 성능 향상이 포함됩니다. 이를 통해 개발자는 단일 GPU 혹은 다중 GPU 환경에서 이 모델들을 보다 효율적으로 로드하고 실행하며 파인‑튜닝할 수 있습니다.
제로‑빌드 커널 from the Hub
결론: 사전 컴파일된 커스텀 커널을 자동으로 다운로드할 수 있어 빌드‑시간 의존성을 없애고 일반적인 LLM 작업에서 최대 10배까지 속도 향상을 제공합니다.
transformers는 이제 kernels 패키지를 통합하여 처음 사용할 때 Hugging Face Hub에서 바이너리 커널(예: Liger RMSNorm, MegaBlocks MoE, FlashAttention 3)을 가져옵니다. 모델을 로드할 때 use_kernels=True를 전달하면 활성화됩니다:
from transformers import AutoTokenizer, AutoModelForCausalLM
import logging
logging.basicConfig(level=logging.INFO)
model_id = "openai/gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
use_kernels=True,
)
로그 출력은 로드된 커널을 확인시켜 줍니다(예: LigerRMSNorm 및 MegaBlocksMoeMLP). 원본 포스트의 벤치마크에 따르면 이 커널들은 큰 배치 크기에서 특히 뛰어나지만, 사용자는 자신의 워크로드에 맞춰 직접 벤치마크해야 합니다.
FlashAttention 3 with Attention Sinks
결론: attention sink를 지원하는 FlashAttention 3 커널을 활성화하면 Hopper‑클래스 GPU에서 레이턴시가 낮아집니다.
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
attn_implementation="kernels-community/vllm-flash-attn3",
)
이 커널은 NVIDIA Hopper GPU와 호환되며 GPT‑OSS에 도입된 attention‑sink 기능을 활용합니다.
MXFP4 4‑비트 양자화
결론: MXFP4는 120‑B 파라미터 GPT‑OSS 모델의 VRAM 사용량을 최대 80 GB까지 줄여, 단일 소비자 GPU에서도 실행 가능하게 하면서 특수 Triton 커널을 통해 추론 속도를 유지합니다.
MXFP4란?
MXFP4는 E2M1 4‑비트 부동소수점 포맷(1 비트 부호, 2 비트 지수, 1 비트 가수)을 블록 단위 스케일링(32‑원소 블록이 하나의 스케일을 공유)과 결합합니다. 이 설계는 거친 가수에도 불구하고 동적 범위를 유지합니다.
transformers의 네이티브 지원
라이브러리는 양자화기(quantizer_mxfp4.py)와 통합 훅(integrations/mxfp4.py)을 제공합니다. 모델 설정에 "quant_method": "mxfp4"가 포함되면 MXFP4 경로가 자동으로 선택됩니다.
from transformers import GptOssConfig
cfg = GptOssConfig.from_pretrained("openai/gpt-oss-120b")
print(cfg.quantization_config)
필요한 환경(accelerate, kernels, triton>=3.4, 그리고 Compute Capability ≥ 7.5인 GPU)이 갖춰져 있으면 모델이 MXFP4 모드로 실행됩니다; 그렇지 않으면 bfloat16으로 폴백되어 메모리 사용량이 약 4배 늘어납니다.
메모리 절감
원본 포스트의 Figure 3은 VRAM 사용량을 시각화합니다: 양자화된 20 B 모델은 약 16 GB를 차지하지만, 비양자화 시 약 64 GB가 필요합니다. 120 B 모델도 동일하게 약 80 GB vs. >300 GB 차이가 납니다.
텐서 병렬 처리 (TP)
결론: TP는 텐서를 GPU 간에 샤딩하여 단일 GPU 메모리 한계를 초과하는 모델도 다중 GPU 노드에서 높은 처리량을 달성하도록 합니다.
transformers는 이제 from_pretrained에 tp_plan="auto" 인자를 받아 내장 샤딩 레시피를 자동 선택합니다. 사용 예시:
from transformers import PreTrainedTokenizerFast, GptOssForCausalLM
model_id = "openai/gpt-oss-120b"
tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id)
model = GptOssForCausalLM.from_pretrained(
model_id,
tp_plan="auto",
dtype="auto",
).eval()
TP는 빠른 노드 내부 연결이 있는 단일 노드에서 가장 효과적이며, 메모리 배치를 담당하는 device_map="auto"와는 별개입니다.
전문가 병렬 처리 (EP)
결론: EP는 MoE 전문가들을 GPU에 분산시켜 TP를 보완하고, mixture‑of‑experts 모델의 GPU당 계산 부하를 추가로 감소시킵니다.
from transformers import DistributedConfig
model = GptOssForCausalLM.from_pretrained(
model_id,
distributed_config=DistributedConfig(enable_expert_parallel=True),
dtype="auto",
).eval()
EP가 활성화되면 TP가 자동으로 활성화되어 두 가지 이점을 동시에 얻을 수 있습니다.
동적 슬라이딩‑윈도우 레이어 & 캐시
결론: 새로운 DynamicSlidingWindowLayer와 DynamicCache는 attention 윈도우에 도달하면 KV‑캐시 성장을 멈추어, 하이브리드‑attention 모델(GPT‑OSS 등)의 캐시 메모리를 절반으로 줄입니다.
이 기능은 기본적으로 활성화되어 있으며, 개발자는 명시적으로 캐시를 생성할 수도 있습니다:
from transformers import AutoModelForCausalLM, AutoTokenizer, DynamicCache
model = AutoModelForCausalLM.from_pretrained(
"openai/gpt-oss-20b",
dtype="auto",
device_map="auto",
).eval()
cache = DynamicCache(config=model.config)
벤치마크(Figure 6)는 장기 생성 시 메모리 감소와 레이턴시 개선을 크게 보여줍니다.
연속 배치 & 페이지드 어텐션
결론: generate_batch는 동적(연속) 배치를 구현하여 완료된 슬롯을 새로운 요청으로 채워 GPU 활용도를 높이고, 정적 배치 대비 토큰‑당 초당 처리량을 크게 향상시킵니다.
이 API는 실험적이며, 프로덕션 서빙보다는 연구/평가용으로 권장됩니다(vLLM이나 SGLang이 더 적합). 원본 포스트는 참고 스크립트와 정적 배치 대비 최대 ~2배 속도 향상을 보여주는 벤치마크를 제공합니다.
더 빠른 모델 로딩
결론: transformers는 이제 GPU당 큰 메모리 블록을 미리 할당한 뒤 가중치를 복사하므로, 수천 개의 작은 할당 호출을 없애고 수십억 파라미터 모델 로딩 속도를 크게 단축합니다.
이 동작은 device_map="auto" 혹은 명시적 디바이스 맵을 사용할 때 자동으로 적용되며, TP가 활성화된 경우에도 이점을 제공합니다.
전체적인 영향
결론: 커뮤니티 주도 커널, MXFP4 양자화, 고급 병렬 처리 전략을 transformers에 직접 통합함으로써 Hugging Face는 최첨단 LLM을 실행하는 하드웨어 장벽을 크게 낮추고, 추론 및 파인‑튜닝 속도를 높이며, 다른 툴킷(MLX, llama.cpp, vLLM)용 통합 레퍼런스 구현을 제공합니다.
개발자는 이제:
- MXFP4를 사용해 무료 티어 Colab GPU에서 GPT‑OSS 20 B를 로드할 수 있습니다.
- 단일
torchrun명령으로 4 GPU에 걸쳐 GPT‑OSS 120 B를 스케일링할 수 있습니다. - 수동 컴파일 없이 자동 커널 다운로드의 혜택을 누릴 수 있습니다.
- 장기 컨텍스트 애플리케이션을 위해 KV‑캐시 메모리를 감소시킬 수 있습니다.
이 모든 개선 사항은 transformers 저장소에 오픈소스로 공개되었으며, 포스트 전반에 걸쳐 상세 PR 레퍼런스와 예제 스크립트가 링크되어 있습니다.
핵심 리소스
- GPT‑OSS 모델 허브: https://huggingface.co/collections/openai/gpt-oss-68911959590a1634ba11c7a4
- Kernels 패키지 문서: https://huggingface.co/blog/hello-hf-kernels
- MXFP4 양자화기: https://github.com/huggingface/transformers/blob/main/src/transformers/quantizers/quantizer_mxfp4.py
- 텐서‑병렬 처리 가이드: https://huggingface.co/docs/transformers/en/perf_infer_gpu_multi
- 연속 배치 예제: https://github.com/huggingface/transformers/blob/main/examples/pytorch/continuous_batching_simple.py
- Faster loading PR: https://github.com/huggingface/transformers/pull/36380
시작하는 방법
- 최신
transformers(≥ 4.40)를 선택적 extras와 함께 설치합니다:pip install "transformers[torch,accelerate,triton,kernels]" - 모델을 선택합니다(예:
openai/gpt-oss-20b). - 원하는 기능을 활성화합니다(
use_kernels=True,tp_plan="auto",DistributedConfig(enable_expert_parallel=True)). - 제공된 벤치마크 스크립트를 실행해 하드웨어에서 속도와 메모리 이득을 확인합니다.
이 단계를 따르면 2025년 9월 Hugging Face 블로그 포스트에서 발표된 성능 향상을 즉시 활용할 수 있습니다.
향후 방향 블로그는 이번 통합이 현재 상황을 보여주는 스냅샷에 불과하다고 강조합니다. 라이브러리는 커뮤니티 기여와 함께 계속 발전하여 새로운 양자화 포맷, 더 많은 커널 백엔드, vLLM 같은 서빙 스택과의 긴밀한 연동을 추가할 예정입니다.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch