한 줄 정의

FP4는 숫자 하나를 4비트 부동소수점으로 표현하는 정밀도 계열이야. FP8보다 더 작게 가중치와 활성값을 옮길 수 있지만, 그냥 “4비트라서 빠르다”로 읽으면 바로 틀려.

실제로는 bare FP4, MXFP4, NVFP4처럼 스케일링 방식이 다른 포맷들이 같이 등장해. Blackwell 문맥에서 자주 보는 NVFP4E2M1 값에 블록 단위 스케일을 붙여 쓰고, DeepGEMM 문맥에서는 FP8 x FP4 CUDA 커널 경로와 같이 나와.

어떻게 작동하나

NVIDIA TE 문서 기준 NVFP4 값 자체는 부호 1비트, 지수 2비트, 가수 1비트E2M1 구조야. 표현 가능한 값 크기는 약 ±6까지라서, 원래 텐서 값을 그대로 4비트 칸에 넣기에는 범위가 너무 좁아.

그래서 스케일이 붙어. NVFP4는 4비트 값 x_e2m1에 16개 연속 원소가 공유하는 FP8 E4M3 블록 스케일 s_block, 텐서 전체가 공유하는 FP32 글로벌 스케일 s_global을 곱해 값을 복원해. 식으로 쓰면 x = x_e2m1 * s_block * s_global이야.

NVIDIA 블로그는 이 구조를 FP4, MXFP4, NVFP4 비교로 설명해. 기본 FP4는 E2M1 값과 소프트웨어 스케일을 쓰고, MXFP4는 32개 값 블록에 power-of-two 스케일을 붙이고, NVFP4는 16개 값 블록마다 FP8 스케일을 둬. 같은 4비트라도 이 차이 때문에 정확도와 커널 경로가 달라져.

TE의 NVFP4 recipe는 학습 쪽에서 더 많은 조건을 붙여. 가중치는 기본적으로 16x16 블록의 2D scaling을 쓰고, 활성값과 gradient는 1D scaling을 써. gradient를 NVFP4로 cast할 때는 stochastic rounding을 쓰고, 일부 경로에는 Random Hadamard Transform도 들어가. 이건 파일 크기만 줄이는 단순 양자화보다 훨씬 까다로운 운영 조건이야.

왜 중요한가

FP4가 중요한 이유는 메모리와 GEMM 병목을 동시에 건드릴 수 있어서야. NVIDIA 블로그는 NVFP4가 4비트 값에 16개 값당 FP8 스케일 하나를 더해 약 4.5 bits/value를 쓰고, 모델 메모리 footprint를 FP16 대비 약 3.5배, FP8 대비 약 1.8배 줄인다고 제시해.

다만 이 숫자는 저장 폭과 NVIDIA 분석 맥락의 숫자야. 내 서비스에서 p95 지연시간이 같은 비율로 줄어든다는 뜻은 아니야. 실제 이득은 런타임이 FP4 커널을 타는지, GPUBlackwell 계열인지, 병목이 HBM 대역폭인지, 어텐션이나 MoE GEMM인지에 따라 갈려.

FP4는 BF16 기준선을 대체하는 첫 선택지도 아니야. 보통은 BF16이나 FP16으로 품질 기준선을 잡고, FP8을 먼저 시험한 뒤, FP4는 메모리·처리량 병목이 더 강하고 하드웨어가 맞을 때 좁게 시험하는 쪽이 안전해. 정밀도를 4비트까지 낮추면 작은 랭킹 차이, logits 주변, 정규화 계층, 긴 문맥 품질에서 회귀가 더 쉽게 드러날 수 있어.

실무 적용 기준

FP4를 볼 때는 먼저 어떤 FP4인지 갈라야 해.

  • bare FP4: E2M1 4비트 값과 소프트웨어 스케일을 쓰는 기본 설명에 가까워. 논문이나 하드웨어 표에서 포맷 비교용으로 나올 때가 많아.
  • MXFP4: 32개 값 블록에 공유 스케일을 붙이는 microscaling 계열이야. NVFP4보다 블록이 커서 local dynamic range를 덜 촘촘하게 잡을 수 있어.
  • NVFP4: Blackwell 쪽에서 자주 보는 경로야. 16개 값 블록마다 FP8 E4M3 스케일을 두고, 텐서 전체 FP32 스케일을 함께 써서 4비트 값의 좁은 범위를 보완해.
  • INT4: 이름에 4비트가 들어가도 다른 계열이야. 정수 매핑과 scale을 쓰는 양자화라서 FP4 커널, Tensor Core 경로, 품질 회귀가 같다고 보면 안 돼.

하드웨어도 바로 확인해야 해. TE 문서는 NVFP4 지원을 trainingSM 10.0, SM 10.3, inferenceSM 10.0+로 적어. H100 같은 Hopper 세대에서 FP8을 잘 쓴다고 해서 NVFP4도 같은 방식으로 된다고 보면 위험해.

측정표는 단순하게 잡는 게 좋아. 같은 모델, 같은 prompt 묶음, 같은 배치KV 캐시 조건에서 아래 항목을 BF16·FP8·FP4로 나란히 재야 해.

  • 최대 VRAM
  • p50·p95 지연시간
  • tokens/sec
  • 정확도나 task score
  • 긴 문맥 답변 품질
  • NaN/Inf와 포화값 비율

중단 신호도 미리 정해 둬야 해. FP4 적용 뒤 NaN/Inf가 늘거나, 포화값이 튀거나, 정확도 하락이 내부 허용선을 넘거나, p95 지연시간이 개선되지 않으면 FP4 범위를 줄이고 BF16 또는 FP8로 되돌리는 편이 맞아.

DeepGEMM에서 보이는 FP4

DeepGEMM은 FP4가 실제 인프라 뉴스에서 어떻게 보이는지 보여주는 사례야. READMEDeepGEMM을 FP8, FP4, BF16 GEMM, fused 전문가 혼합, MQA scoring을 한 CUDA 코드베이스에 묶은 Tensor Core 커널 라이브러리라고 설명해. 여기서 FP4는 모델 이름이 아니라 커널이 다루는 낮은 정밀도 피연산자에 가까워.

2026년 4월 16일 업데이트는 이 구분을 더 분명하게 해. DeepGEMM README는 이 날짜 뉴스로 Mega MoE, FP8xFP4 GEMM, FP4 Indexer, PDL, JIT 개선을 적어. PR #304는 이 공개 릴리스가 DeepGEMM 개발과 관련된 것이며 내부 모델 릴리스와 무관하다고 못 박아.

Mega MoE 예시도 조건이 좁아. README의 예시는 dispatch, linear 1(FP8xFP4), SwiGLU, linear 2(FP8xFP4), combine을 하나의 mega-kernel로 묶고 NVLink 통신과 Tensor Core 계산을 겹치게 해. 같은 코드 블록은 PyTorch 2.9+와 symmetric memory buffer를 요구하고, PANews는 현재 FP8 x FP4 MoE가 EP≤8 조건이라고 전해.

그러니까 DeepGEMM에서 FP4를 봤다면 “DeepSeek가 새 모델을 냈다”보다 “MoE GEMM이나 MQA logits 같은 특정 추론 경로를 4비트 피연산자로 더 세게 줄이려는 CUDA 커널 업데이트가 있구나”라고 읽는 편이 정확해. 직접 GPU 커널을 운영하지 않고 관리형 API만 호출하는 팀이라면, 이 소식은 바로 켤 기능이 아니라 인프라 레이어의 방향 신호에 가깝다.