TL;DR
AMD Instinct™ MI350X와 MI355X는 native 4비트 연산에 MXFP4를 사용하므로 NVFP4 checkpoint를 그대로 실행할 수 없었지만, SGLang의 online requantization 경로가 로딩 중 가중치를 한 레이어씩 MXFP4로 변환해 이 제약을 해소했습니다. 변환된 가중치는 AMD의 native MXFP4 GEMM과 동적 MXFP4 활성값 경로에서 처리되며, 다섯 모델의 steady-state 처리량은 native AMD MXFP4 checkpoint 대비 -0.9%에서 +1.0% 차이에 머물렀습니다. GPQA-Diamond-CoT와 AIME25에서는 NVFP4 emulation 기준과 평균 점수 차이가 ±0.05 이내였고, GSM8K에서는 원본 고정밀 checkpoint 점수의 98.7%에서 100.7%를 회복했습니다. 대신 서버 시작 시 10~55초의 일회성 변환 시간이 추가되고, 원본 NVFP4와 bit-exact 결과가 필요한 실험에는 적합하지 않습니다.
섹션별 상세







용어 해설
- NVFP4
- — NVFP4는 E2M1 형식의 4비트 값 두 개를 1바이트에 저장하고, 16개 값마다 FP8 E4M3 블록 스케일과 텐서별 FP32 스케일을 적용하는 수치 형식입니다. 대규모 모델의 가중치를 낮은 메모리 사용량으로 저장하지만, AMD Instinct™ MI350X와 MI355X의 native 4비트 연산 형식인 MXFP4와 구조가 달라 직접 실행할 수 없습니다.
- MXFP4
- — MXFP4는 E2M1 4비트 값을 32개 단위로 묶고 각 블록에 E8M0 power-of-two 스케일을 적용하는 OCP microscaling 형식입니다. MI350X와 MI355X의 native 4비트 GEMM 경로가 이 형식을 직접 소비하므로, NVFP4 가중치를 MXFP4로 바꾸면 별도 BF16 GEMM 없이 하드웨어 가속 경로를 사용할 수 있습니다.
- Requantization은 이미 낮은 정밀도로 양자화된 값을 다른 블록 크기와 스케일 규칙을 가진 정밀도 형식으로 다시 양자화하는 과정입니다. 이 글의 SGLang 경로는 모델 로딩 중 NVFP4 가중치를 한 레이어씩 복원한 뒤 MXFP4로 변환하고, 요청 처리 중에는 변환을 반복하지 않아 steady-state 성능 저하를 피합니다.(Requantization)
- — Requantization은 이미 낮은 정밀도로 양자화된 값을 다른 블록 크기와 스케일 규칙을 가진 정밀도 형식으로 다시 양자화하는 과정입니다. 이 글의 SGLang 경로는 모델 로딩 중 NVFP4 가중치를 한 레이어씩 복원한 뒤 MXFP4로 변환하고, 요청 처리 중에는 변환을 반복하지 않아 steady-state 성능 저하를 피합니다.
- MXFP4 GEMM
- — MXFP4 GEMM은 MXFP4 가중치와 MXFP4 활성값을 AMD CDNA4의 scaled matrix-core MFMA 명령에 직접 입력하는 행렬 곱셈 경로입니다. SGLang은 AITER의 dense GEMM과 fused-MoE 커널, 활성값 양자화 결합, 가중치 사전 재배치를 이용해 별도 dequantize와 반복적인 데이터 재배치 비용을 줄입니다.
- 신호 대 양자화 잡음비(SQNR)
- — SQNR은 양자화된 출력의 신호 크기를 양자화 잡음과 비교하는 지표로, 값이 높을수록 양자화로 인한 잡음이 작습니다. 글의 Qwen3.5-397B-A17B 가중치 실험에서 NVFP4를 MXFP4로 다시 양자화한 경로는 약 17 dB를 기록해 NVFP4 단독 경로보다 약 3.6 dB 낮았지만, 출력 신호가 여전히 잡음보다 우세한 범위에 머물렀습니다.
코드 예제
sglang serve --model-path \
--tensor-parallel-size \
--quantization quark_mxfp4SGLang 서버를 quark_mxfp4 설정으로 실행해 NVFP4 checkpoint를 로딩 시점에 MXFP4로 변환합니다.
lm_eval --model sglang \
--model_args "pretrained=,tp_size=,quantization=quark_mxfp4,trust_remote_code=True" \
--tasks --apply_chat_template --seed \
--gen_kwargs do_sample=True,temperature=,top_p=0.95,top_k=40,max_gen_toks=64000 \
--batch_size autolm-eval-harness에서 GPQA-Diamond-CoT 또는 AIME25의 SGLang 기반 정확도를 측정합니다.
lm_eval --model sglang \
--model_args "pretrained=,tp_size=,quantization=quark_mxfp4,trust_remote_code=True" \
--tasks gsm8k \
--gen_kwargs do_sample=False,temperature=0.0,max_gen_toks=32000 \
--batch_size autoSGLang의 online requantization 경로로 GSM8K 정확도를 측정합니다.
python3 -m sglang.benchmark.serving --backend sglang \
--host 127.0.0.1 --port 30000 \
--model --tokenizer \
--dataset-name random --random-input-len 1024 --random-output-len 1024 \
--random-range-ratio 1.0 --num-prompts 200 \
--max-concurrency 64 --request-rate 20동일한 입력·출력 길이와 동시성 조건에서 SGLang serving 처리량을 측정합니다.
기술
- SGLang
- AMD Quark
- ROCm 7.0.0
- AITER
- Triton 3.4.0
- lm-eval-harness 0.4.12
- MXFP4 GEMM
- MFMA
- NVFP4
- BF16
활용 사례
- MI350X 또는 MI355X에서 NVFP4 전용 checkpoint 서빙
- 오프라인 변환과 두 번째 가중치 사본 없이 대규모 LLM 배포
- 공개 MXFP4 checkpoint가 없는 양자화 설정의 빠른 검증
- AMD native 4비트 가속을 활용한 production serving
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.