Four Over Six
Four Over Six
Four Over Six는 특히 NVIDIA Blackwell GPU에서 NVFP4 포맷으로 빠르고 정확한 FP4 양자화를 수행하는 라이브러리입니다. 이 방법은 각 블록의 최댓값에 가까운 값에서 양자화 오차를 줄이기 위해 NVFP4 블록을 4 또는 6으로 적응형으로 스케일링합니다.
출처: 문서
본문
Four Over Six는 특히 NVIDIA Blackwell GPU에서 NVFP4 포맷으로 빠르고 정확한 FP4 양자화를 수행하는 라이브러리입니다. 이 방법은 사전 인쇄본에 설명된 대로, 각 블록의 최댓값에 가까운 값에서 양자화 오차를 줄이기 위해 NVFP4 블록을 4 또는 6으로 적응형으로 스케일링합니다.

이 구현은 NVIDIA Blackwell GPU에서 가장 효율적으로 실행됩니다. 다만 코드 변경 없이 더 오래된 하드웨어나 CPU에서도 실행할 수 있는데, 이 경우 프레임워크가 FP32 행렬 곱셈으로 시뮬레이션을 수행하는 구현으로 자동 폴백하기 때문입니다.
모델을 4/6 값의 NVFP4로 양자화하려면 다음과 같이 모델을 로드하면 됩니다.
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(),
)
NVFP4 양자화 중 흔히 쓰이는 다양한 양자화 옵션(무작위 Hadamard 변환, 2D 블록 스케일링, 전치 입력, 확률적 반올림 등)을 사전 인쇄본에서 설명한 대로 지원합니다. 위에 전달한 FourOverSixConfig에서 해당 옵션을 설정해서 사용할 수 있습니다. 개별 레이어에는 module_config_overrides를 설정해 커스텀 양자화 옵션을 주거나, 아래처럼 modules_to_not_convert를 설정해 양자화에서 제외할 수 있습니다.
Training
양자화된 linear 레이어에는 역전파 구현이 포함되어 있어 대부분의 모델을 수정을 거의 하지 않고 추가 학습할 수 있습니다. 반드시 keep_master_weights를 True로 설정하고, 필요에 따라 양자화에서 레이어를 제외하세요(네트워크의 마지막 몇 개 레이어는 높은 정밀도로 유지하는 것이 중요한 경우가 많습니다).
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(
keep_master_weights=True,
modules_to_not_convert=[
"lm_head",
"model.layers.34.self_attn.q_proj",
"model.layers.34.self_attn.k_proj",
"model.layers.34.self_attn.v_proj",
# Add more layers here, e.g. self_attn.o_proj, MLP layers
],
),
)