ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FP8이 왜 FP16보다 45% 빠를까 — Blackwell GPU의 '텐서코어 네이티브 처리' 이해하기
    IT 2026. 5. 5. 23:00
    FP8이 왜 FP16보다 45% 빠를까 — Blackwell GPU의 '텐서코어 네이티브 처리' 이해하기

    들어가며 — "FP8이 빠르다"는 말의 진짜 의미

    로컬 LLM을 직접 돌려본 사람이라면 한 번쯤 이런 문장을 봤을 것이다.

    "같은 모델을 FP8 체크포인트로 돌리면 디코드 속도가 +45% 빨라진다. Blackwell GPU는 FP8을 텐서코어가 네이티브로 처리하기 때문이다."

    여기에 모르는 단어가 세 개나 들어 있다. FP8이 뭔지, 텐서코어가 뭔지, "네이티브로 처리한다"가 무슨 뜻인지. 그리고 이 셋이 어떻게 합쳐져서 정확히 45%라는 숫자를 만들어내는지.

    이 글은 그 세 개념을 차근차근 풀어, 마지막에 "그래서 왜 빨라지는가"를 한눈에 보이게 만드는 게 목표다. 비유 위주로 가되, 마지막엔 실제 수치까지 맞춘다.


    1. FP16, FP8이 도대체 뭔가 — '숫자를 표현하는 정밀도'

    컴퓨터가 실수(소수점이 있는 숫자)를 다루는 방식을 부동소수점(floating point)이라고 한다. FP 뒤의 숫자는 그 숫자 하나에 몇 비트를 쓰느냐이다.

    형식 크기 표현 가능한 정밀도 주 용도
    FP32 32비트(4바이트) 일반 수학에서 쓰는 "넉넉한 정밀도" 전통적인 학술/과학 계산
    FP16 16비트(2바이트) 대략 소수점 3~4자리 정도 딥러닝 학습/추론의 표준
    FP8 8비트(1바이트) 대략 소수점 1~2자리 정도 최신 추론 가속

    FP16에서 FP8로 가면 숫자 하나의 크기가 절반이 된다. 100억 개의 가중치를 가진 모델이라면, 단순 계산으로 메모리도 절반(20GB → 10GB)이다.

    대신 표현 가능한 정밀도가 거칠어진다. FP16이 "3.14159" 정도를 담는다면 FP8은 "3.1" 정도까지만 정확하다. 사진을 JPEG 품질 100에서 80으로 떨어뜨리는 것과 비슷한 느낌이다 — 자세히 들여다보면 차이가 보이지만, 보통의 사용에서는 거의 구분이 안 간다.

    왜 LLM은 정밀도를 낮춰도 멀쩡한가
    신경망의 가중치는 본질적으로 "비슷한 입력에 비슷한 출력"을 내도록 학습된다. 어떤 가중치가 0.314라면 그게 0.31이 되어도 다음 레이어에서 누적된 결과는 거의 비슷하다. 즉, 모델은 "정확한 숫자"보다 "대략의 패턴"에 의존한다. 그래서 정밀도를 절반으로 깎아도 답이 잘 망가지지 않는다.


    2. 왜 처음엔 FP16만 지원했고, 이제는 FP8까지 가는가

    2017년 NVIDIA Volta 세대에서 텐서코어가 처음 등장했을 때, 지원 형식은 FP16뿐이었다. 학습이 가능할 만큼은 정밀하면서, FP32보다는 빠른 절충점이었다.

    이후 세대를 거치며 형식이 늘어났다.

    세대 출시 텐서코어가 직접 처리하는 형식
    Volta (V100) 2017 FP16
    Turing (T4) 2018 FP16, INT8, INT4
    Ampere (A100) 2020 + BF16, TF32
    Hopper (H100) 2022 + FP8 (드디어 등장)
    Blackwell (B200, GB10) 2024 + FP4, FP8 처리량 2배

    FP8 자체는 Hopper(2022)에서 이미 텐서코어 네이티브로 들어왔다. 거기서도 FP8은 FP16의 두 배 처리량이었다. 그런데 왜 사람들이 "Blackwell에서 FP8이 진가를 발휘한다"고 말하는가? 두 가지 이유다.

    1. 절대 처리량이 더 커졌고, FP4까지 네이티브로 추가됐다. Hopper도 FP8을 네이티브로 처리했지만, Blackwell은 텐서코어 자체의 면적·효율을 끌어올려 같은 시간에 처리하는 연산량을 더 늘렸다. 게다가 FP4까지 1급 시민으로 다루기 시작했다.
    2. 소프트웨어 스택이 따라왔다. vLLM, TensorRT-LLM 같은 추론 엔진이 FP8 경로를 1급 시민으로 다루기 시작한 게 2024~2025년이다. Hopper 시절엔 도구가 따라오지 못해 FP8 가중치가 있어도 못 쓰는 경우가 많았다.

    3. "텐서코어가 네이티브로 처리한다"는 무슨 뜻인가

    여기가 이 글에서 제일 중요한 부분이다. "네이티브"라는 단어가 모든 걸 결정한다.

    텐서코어란 무엇인가

    GPU 안에는 두 종류의 연산 회로가 있다.

    • CUDA 코어: 일반 목적의 산술 회로. 어떤 계산이든 시킬 수 있지만, 한 번에 한두 개의 곱셈만 한다.
    • 텐서코어(Tensor Core): 행렬곱(GEMM)만 하는 전용 회로. 한 사이클에 작은 행렬 두 개를 통째로 곱해버린다. 신경망의 95%는 행렬곱이라, 이게 압도적으로 빠르다.

    비유하자면 CUDA 코어가 만능 식칼이라면, 텐서코어는 김밥 절단기다. 일반 요리에는 식칼이 낫지만, 김밥 100줄 자르라면 절단기가 100배 빠르다. 신경망 추론은 99%가 김밥 자르기다.

    "네이티브"는 무엇을 뜻하는가

    "네이티브로 처리한다"는 건 변환 없이 그 형식 그대로 회로에 들어간다는 뜻이다.

    구체적으로 말하면 이렇다. 텐서코어 회로는 입력 형식이 미리 정해져 있다. Volta에서는 FP16 두 행렬만 받을 수 있었다. Hopper부터는 FP8 두 행렬도 받을 수 있다. Blackwell에서는 같은 시간에 FP8 두 쌍을 처리한다.

    네이티브가 아니면 어떻게 되는가? 변환을 거쳐야 한다. 예를 들어 메모리에는 FP8로 가중치를 저장해뒀는데 텐서코어는 FP16만 받는다면, 데이터를 꺼낼 때마다 FP8 → FP16 변환(dequantize)을 거친 뒤 곱셈을 시작해야 한다.

    이 변환 단계가 무료가 아니다.

    항목 네이티브 FP8 (Blackwell) 비-네이티브 (Hopper 이전 세대 가정)
    1. 메모리에서 가중치 읽기 FP8 (1바이트) FP8 (1바이트)
    2. 변환 단계 없음 FP8 → FP16 (CUDA 코어가 한 번 더 일함)
    3. 텐서코어 입력 FP8 그대로 변환된 FP16
    4. 행렬곱 FP8 회로 (처리량 2배) FP16 회로 (처리량 1배)

    비-네이티브 경로는 매 GEMM마다 위 표의 2번 단계를 한 번씩 거친다. 100억 번의 행렬곱이 있다면 100억 번의 변환이 들어간다는 뜻이다.


    4. 그럼 왜 정확히 빠른가 — '세 곳에서 동시에' 빨라진다

    이제 본질이다. FP8 네이티브 경로가 빠른 이유는 한 가지가 아니라 세 가지가 동시에 일어나기 때문이다. 세 효과가 곱해져서 최종 속도가 결정된다.

    효과 1: 메모리 대역폭 절반 (이게 제일 크다)

    현대 GPU에서 LLM 디코드(토큰 한 개씩 생성하는 단계)의 진짜 병목은 메모리다. 계산 자체는 GPU가 너무 빨라서 노는데, 가중치를 메모리에서 가져오는 게 느리다.

    FP16 가중치는 한 개에 2바이트, FP8은 1바이트다. 메모리에서 같은 시간에 두 배 많은 가중치를 읽어올 수 있다. 디코드의 병목이 메모리라면, 이 한 가지로만 이론적 상한이 두 배가 된다.

    이게 가장 크다. 보통 +30~35%의 속도 향상은 여기서 나온다.

    효과 2: 변환 단계 0 (CUDA 코어가 다른 일을 할 수 있다)

    Hopper 이전에서 FP8 가중치를 쓰려면, FP16으로 풀어주는 dequantize가 필요했다. 그 작업은 CUDA 코어가 떠맡는다. 그러는 동안 CUDA 코어는 attention 마스킹, RoPE 회전, KV cache 업데이트 같은 다른 작업을 못한다.

    Blackwell에선 그 단계가 사라지므로, CUDA 코어가 본업에 집중할 수 있다. 추가로 +5~8%.

    효과 3: 텐서코어 처리량 2배 (행렬곱 자체가 빠르다)

    FP8 텐서코어는 같은 시간(한 클럭 사이클)에 FP16의 두 배 곱셈을 처리한다. 여기서 헷갈리기 쉬운 부분이 있다. "행렬곱을 한 번 하던 걸 두 번 한다"는 뜻이 아니다. 행렬곱 한 번 안에는 이미 수많은 곱셈이 동시에 일어난다. 그 동시 곱셈의 개수 자체가 두 배라는 말이다.

    왜 두 배가 가능한가? 텐서코어 안에는 작은 곱셈기(MAC 유닛)가 수백~수천 개 병렬로 박혀 있다. FP8은 데이터 한 개가 1바이트(FP16의 절반)라, 같은 회로 면적에 곱셈기를 두 배 더 욱여넣을 수 있다. 같은 사이클에 두 배의 곱셈이 동시에 끝나는 이유다.

    디코드는 메모리 병목이라 이 효과가 100% 다 나타나진 않지만, prefill(긴 입력을 한꺼번에 처리하는 단계)에서는 결정적이다. prefill은 +50~60%까지 빨라지기도 한다.

    추가로 +5~10%.

    합쳐서 +45%

    세 효과를 다 합치면 디코드 기준 대략 +40~50% 범위가 나온다. 외부 벤치마크에서 흔히 보이는 "+45%"라는 숫자는 이 세 가지가 더해진 결과다.

    효과 원인 대략 기여도
    메모리 대역폭 절반 가중치 크기가 절반 +30~35%
    변환 단계 제거 FP8 → FP16 dequantize 사라짐 +5~8%
    텐서코어 처리량 2배 FP8 회로가 한 번에 두 쌍 처리 +5~10%
    합계   +40~50%

    5. 그럼 더 줄여서 FP4로 가면 더 빠르지 않나

    맞는 직관이다. Blackwell은 실제로 FP4도 네이티브로 처리한다. 그런데 무한정 줄일 수는 없다. 정밀도가 깎이면서 모델 품질이 떨어지기 시작하는 지점이 있다.

    • FP16 → FP8: 캘리브레이션을 잘 하면 품질 손실이 거의 0. 안전한 선택.
    • FP8 → FP4: 일부 태스크에서 품질이 눈에 띄게 떨어진다. 특히 수학·코드 추론에서. 적용 가능한 모델이 제한적이다.
    • FP4 → 그 이하: 의미 있는 답을 못 낸다.

    그래서 2026년 현재 "FP8이 가성비의 정점"이다 — 메모리·속도 이득은 충분히 크면서 품질 손실은 거의 없다. FP4는 특정 모델·태스크에서만 신중하게 쓴다.


    6. 정리 — "네이티브"의 진짜 의미

    "Blackwell이 FP8을 텐서코어로 네이티브 처리한다"는 말을 풀어쓰면 이렇다.

    1. FP8은 숫자 하나를 1바이트로 표현하는 형식이다. FP16의 절반.
    2. 텐서코어는 행렬곱 전용 회로다. 신경망 연산의 압도적 다수가 여기서 일어난다.
    3. "네이티브"는 변환 없이 그 형식 그대로 회로에 들어간다는 뜻이다. Hopper 이전엔 FP8 가중치를 쓰려면 매번 FP16으로 풀어줘야 했지만, Blackwell에선 풀지 않고 곧장 곱셈에 투입한다.
    4. 그래서 세 곳에서 동시에 빨라진다. 메모리 대역폭, CUDA 코어 부하, 텐서코어 처리량이 함께 좋아진다. 합치면 +45% 정도.

    한 줄로 줄이면, "압축된 채로 곱셈까지 도착하는 길". 도중에 풀어줄 필요가 없으니, 메모리에서 빠르고, CPU 부하가 없고, 회로 자체가 그 형식에 최적이다. 그래서 빠르다.

    이 흐름은 앞으로도 계속될 것이다. 다음 세대 GPU는 FP4를 제대로 다루는 게 과제고, 그다음엔 적응형 정밀도(layer마다 다른 비트수)가 나올 것이다. "네이티브로 처리한다"의 자리가 점점 작은 비트로 옮겨가는 것이 GPU 진화의 본질이다.


    이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.

Designed by Tistory.