한 줄 정의
FP8 Tensor Core는 NVIDIA GPU 안의 Tensor Core가 FP8 형식의 행렬곱을 직접 처리하는 경로를 말해. H100 이후 AI 인프라 글에서 이 이름이 나오면 보통 “GPU가 FP8 포맷을 Tensor Core에서 빠르게 처리할 수 있다”는 하드웨어 조건을 가리켜.
여기서 중요한 건 FP8과 Tensor Core가 같은 말이 아니라는 점이야. FP8은 E4M3·E5M2 같은 8비트 부동소수점 형식이고, Tensor Core는 행렬곱과 누산을 빠르게 처리하는 GPU 안의 전용 연산 블록이야. 이 둘이 만나는 지점은 특히 Transformer 계열 학습과 추론에서 큰 행렬 연산을 낮은 정밀도로 밀어 넣는 경로로 나타나.
어떻게 작동하나
FP8에는 주로 두 형식이 붙어. E4M3는 부호 1비트, 지수 4비트, 가수 3비트라 최대 표현 범위가 약 ±448이고, E5M2는 부호 1비트, 지수 5비트, 가수 2비트라 최대 표현 범위가 약 ±57,344까지 넓어져. 대신 E5M2는 가수 비트가 적어서 값 사이 간격이 더 거칠어.
NVIDIA Transformer Engine(TE) 문서는 보통 forward 쪽 활성값과 가중치에는 더 정밀한 E4M3가 잘 맞고, backward 쪽 gradient에는 더 넓은 범위가 필요한 E5M2가 맞는 경우가 많다고 설명해. 그래서 이 경로는 “모든 숫자를 8비트로 바꾼다”보다, 텐서마다 스케일을 잡고 어느 연산이 FP8로 내려가도 되는지 고르는 혼합 정밀도 경로에 가까워.
그 스케일링도 공짜가 아니야. FP8은 하나의 loss scale만으로 버티기 어렵기 때문에 텐서별 scaling factor와 amax, 그러니까 최근 관측한 절댓값 최댓값 이력을 관리해. TE 예시도 Format.HYBRID에서 forward는 E4M3, backward는 E5M2를 쓰고, amax_history_len=16 같은 설정으로 다음 iteration의 스케일을 정해.
CUDA나 PyTorch 코드에서 이 경로를 실제로 타려면 runtime이 FP8용 Tensor Core kernel을 골라야 해. TE 문서는 FP8 Linear의 두 차원이 모두 16으로 나누어져야 한다는 제약도 적어. shape가 맞지 않거나 backend가 FP8 kernel을 고르지 않으면, 스펙 표의 FP8 처리량이 실제 로그의 tokens/sec로 바로 나오지 않아.
왜 중요한가
이 경로가 중요한 이유는 메모리 이동량과 행렬곱 처리량을 동시에 건드리기 때문이야. BF16·FP16은 값 하나에 16비트를 쓰지만 FP8은 8비트를 써. 병목이 HBM 대역폭이나 거대한 GEMM에 걸려 있다면 이 차이가 추론 비용과 처리량에 직접 영향을 줄 수 있어.
Hopper 아키텍처 글은 H100 SXM5 기준 FP8 peak Tensor Core 처리량을 2000 TFLOPS, structured sparsity를 쓴 effective 수치로 4000 TFLOPS라고 제시해. H100 PCIe는 같은 예비 성능 표에서 peak 1600 TFLOPS, sparsity 적용 effective 3200 TFLOPS로 따로 적혀 있어. 같은 H100 이름이어도 보드 형태와 sparsity 조건에 따라 표기 숫자가 달라진다는 뜻이야.
다만 이 숫자를 “우리 서비스가 2배 빨라진다”로 읽으면 안 돼. 실제 체감은 런타임이 어떤 kernel을 고르는지, 어텐션 backend가 어디서 병목을 만드는지, KV 캐시 dtype이 무엇인지, 입력 길이와 배치가 어떻게 잡히는지에 따라 달라져. 그래서 이 문구는 성능 보장보다 점검 목록에 가까워.
주의해서 볼 점
첫째, 이 항목은 FP8 페이지와 Tensor Core 페이지의 단순 합이 아니야. FP8 포맷이 있어도 GPU와 runtime이 그 포맷을 Tensor Core 경로로 처리하지 못하면 이 용어가 주는 이점은 작아져. 반대로 Tensor Core가 있어도 FP8을 지원하지 않는 세대나 kernel이면 BF16·FP16 경로로 봐야 해.
둘째, 정확도 회귀를 먼저 재야 해. FP8은 저장·전송 단위가 작아지는 대신 값 표현이 거칠어져. softmax, normalization, loss 계산, logits처럼 작은 차이가 결과를 크게 흔드는 구간은 BF16·FP16·FP32에 남기는 편이 더 안전할 수 있어. FP8을 켰는데 NaN/Inf, loss 급등, 답변 품질 하락, p95 지연 시간 악화가 보이면 해당 계층부터 되돌려야 해.
셋째, Blackwell 문맥과 H100 문맥을 나눠 읽어야 해. H100의 핵심은 Hopper 세대 FP8용 Tensor Core와 TE이고, Blackwell은 FP4, NVFP4, MXFP8 같은 더 낮은 정밀도 경로까지 같이 말해. 문서에 이 이름이 보이면 먼저 GPU 세대가 H100/H200인지, B200/GB200인지부터 확인하는 게 좋아.
실무에서 이 말을 보면 아래 네 가지를 같은 표에 놓고 봐.
- GPU 세대와 보드 형태: H100 SXM5, H100 PCIe, H200, Blackwell 계열을 구분해.
- 정밀도 경로: BF16 기준선, FP8 E4M3/E5M2, FP4/NVFP4를 따로 기록해.
- runtime 조건: TE, TensorRT-LLM, vLLM, PyTorch, 직접 CUDA kernel 중 무엇이 FP8 kernel을 실제로 타는지 확인해.
- 평가 지표: tokens/sec만 보지 말고 p50·p95 지연 시간, 최대 VRAM, 정확도 회귀, NaN/Inf 발생 여부를 같이 봐.
정리하면 이 용어는 “FP8이면 무조건 빠르다”는 말이 아니야. GPU 안에 FP8 행렬 연산을 받을 수 있는 빠른 길이 있다는 뜻이고, 그 길을 실제로 쓰는지는 포맷, shape, kernel, 평가셋이 함께 맞을 때만 확인돼.