본문 바로가기

03. FP32, FP16, BF16, INT8, INT4

이 장의 핵심 연결: 02장의 "비트 폭 w"를 선택지로 엽니다. w를 정하는 것이 바로 정밀도(precision)이고, 이것이 storage 하한을 좌우했습니다.
다음 질문: 정밀도를 낮추면 무엇을 얻고(storage·대역폭), 무엇을 바꾸는가(수치 범위·정밀도·커널 지원·품질)? "낮은 정밀도가 더 낫다"는 왜 성급한가?
목표:
  • 부동소수점과 정수 표현의 뼈대(부호·지수·가수)를 직관으로 잡는다.
  • FP32/FP16/BF16/INT8/INT4를 우열이 아니라 절충으로 비교한다.
  • 정밀도 라벨이 무엇을 보장하고 무엇을 보장하지 않는지의 경계를 읽는다.

먼저: 정밀도(precision)가 뭔가요?

숫자 하나를 몇 bit로, 어떤 방식으로 담을지의 규칙이 정밀도(또는 자료형, dtype)입니다. 02장에서 파라미터 하나당 비트 폭 w가 storage 하한을 정했죠. 그 w를 정하는 것이 이 장의 주제입니다.

라벨은 크게 두 갈래입니다.

  • 부동소수점(floating point, FP): 소수를 "부호 × 가수 × 2^지수" 꼴로 담습니다. 넓은 범위의 크고 작은 수를 다룰 수 있습니다. 예: FP32, FP16, BF16.
  • 정수(integer, INT): 정해진 간격의 정수만 담습니다. 양자화(quantization)로 실수 가중치를 정수 격자에 매핑해 씁니다. 예: INT8, INT4.
약어 풀이
  • FP32/FP16: 32비트/16비트 부동소수점.
  • BF16(bfloat16): 16비트지만 FP16과 비트 배분이 다른 부동소수점(아래 표).
  • INT8/INT4: 8비트/4비트 정수.
  • 양자화(quantization): 연속적인 실수값을 더 적은 비트의 이산 격자에 대응시키는 것. 서랍 칸을 줄이는 대신, 담을 수 있는 값의 "간격"이 성겨집니다.

일상 비유: 자의 눈금과 길이

숫자를 담는 것을 "자로 길이를 읽는 것"에 비유해 봅시다. 두 가지 성질이 있습니다.

  • 범위(range): 이 자가 잴 수 있는 최대~최소 길이. 지수(exponent) 비트가 넓힙니다.
  • 해상도(precision, 정밀도): 눈금이 얼마나 촘촘한가. 가수(mantissa) 비트가 촘촘하게 합니다.

같은 16 bit라도 이 둘을 어떻게 나눠 갖느냐가 다릅니다. FP16은 해상도에, BF16은 범위에 더 많이 배정합니다. 그래서 "16비트"라는 라벨이 같아도 성격이 다릅니다 — 비트 수만으로 우열을 말할 수 없는 첫 번째 이유입니다.

시각적 직관: 부동소수점의 비트 배분

flowchart TB
    subgraph FP32["FP32 · 32 bit"]
        S1[부호 1]:::sign --- E1[지수 8]:::exp --- M1[가수 23]:::man
    end
    subgraph FP16["FP16 · 16 bit"]
        S2[부호 1]:::sign --- E2[지수 5]:::exp --- M2[가수 10]:::man
    end
    subgraph BF16["BF16 · 16 bit"]
        S3[부호 1]:::sign --- E3[지수 8]:::exp --- M3[가수 7]:::man
    end

    classDef sign fill:#fef9c3,stroke:#ca8a04,color:#713f12
    classDef exp fill:#cffafe,stroke:#0891b2,color:#164e63
    classDef man fill:#ede9fe,stroke:#7c3aed,color:#4c1d95
읽는 법: BF16은 지수 8비트로 FP32와 같은 범위를 갖지만, 가수가 7비트로 해상도는 FP16보다 낮습니다. FP16은 반대로 범위는 좁지만 해상도가 높습니다. 같은 16비트지만 "무엇을 챙겼나"가 다릅니다. (구체적 지수/가수 비트 배분은 IEEE 754 등 표준·정의에 따른 것으로, 이는 안정적 원리입니다.)

핵심 비교표: 우열이 아니라 절충

아래 표는 순위표가 아닙니다. 각 라벨이 "무엇을 얻고 무엇을 바꾸는지"를 정리한 것입니다.

라벨비트 폭 wstorage 하한(상대)얻는 것바꾸는(잃을 수 있는) 것
FP3232기준 (1.0×)넓은 범위 + 높은 해상도메모리·대역폭 부담이 큼
FP16160.5×메모리·대역폭 절반, 높은 해상도범위가 좁아 매우 크거나 작은 값에서 오버/언더플로 위험
BF16160.5×메모리·대역폭 절반, FP32급 범위FP16보다 해상도 낮음
INT880.25×메모리·대역폭 1/4, 정수 연산 이점 가능양자화 간격이 성겨 정보 손실 가능, 스케일·보정 필요
INT440.125×메모리·대역폭 1/8손실이 더 커질 수 있음, 품질 영향 워크로드마다 다름
📌 핵심: 정밀도를 낮추면 02장의 storage 하한이 비트 폭에 비례해 줄어듭니다. 32→16이면 절반, 32→8이면 1/4. 대역폭 부담(06장)도 같이 줍니다. 하지만 그 대가로 수치 범위·해상도·품질이 바뀔 수 있고, 그 크기는 워크로드에 따라 다릅니다.

⚖️ 절충(tradeoff): 정밀도를 낮출 때

CODE
얻는 것 (대체로 예측 가능):
  - storage 하한 ↓  (w에 비례, 02장 산술)
  - 메모리 대역폭 부담 ↓ (같은 데이터를 더 적은 바이트로)
  - 경우에 따라 연산 처리량 ↑ (하드웨어·커널이 그 dtype을 지원할 때)

바꾸는 것 (워크로드 의존, 단정 불가):
  - 표현 가능한 수치 범위 (FP16의 경우 특히)
  - 값의 해상도 (INT4로 갈수록 간격 성김)
  - 최종 품질 (작업·모델·양자화 방법에 따라 영향이 다름)

성립을 위한 숨은 전제:
  - 하드웨어·소프트웨어(커널·라이브러리)가 그 dtype을 실제로 지원해야
    "속도 이득"이 실현됨. 지원 없으면 메모리만 줄고 속도 이득은 없을 수 있음.

⚠️ 흔한 오해 (이름 우열 함정)

  • "낮은 정밀도 = 항상 빠르고 이득." — 아닙니다. 속도 이득은 하드웨어·커널이 그 dtype을 지원할 때만 실현됩니다. 지원이 없으면 메모리·storage만 줄고 연산 속도는 그대로일 수 있습니다.
  • "BF16이 FP16보다 좋다 / FP16이 BF16보다 좋다." — 비트 수가 같아도 범위와 해상도의 배분이 다를 뿐 우열이 아닙니다. 어느 쪽이 맞는지는 값의 분포·워크로드에 달렸습니다.
  • "INT4면 품질이 반드시 나빠진다." — 정도는 작업·모델·양자화 방법에 따라 다릅니다. "반드시"라고 단정할 수 없습니다(measured로 확인할 문제).
  • "메모리가 절반이니 속도도 절반으로 빨라진다." — storage와 속도는 다른 축입니다. 메모리 감소가 곧 비례하는 속도 향상은 아닙니다(05·06장의 병목이 결정).

조건 명시

내용
성립하는 조건"비트 폭이 절반이면 가중치 storage 하한도 절반"은 산술적으로 항상 참(calculated). 대역폭 부담이 주는 것도 데이터가 작아지므로 성립.
성립하지 않는 결론"정밀도를 낮추면 항상 빨라진다/품질은 그대로다"는 성립하지 않습니다. 속도 이득은 dtype 지원 여부에, 품질 영향은 워크로드에 달렸습니다. 이것들은 measured로 확인할 문제이지, 라벨만 보고 단정할 수 없습니다.

🔬 증거 읽기: 정밀도 관련 주장의 유형

  • "FP16은 storage가 FP32의 절반" → calculated (02장 식에서 바로 나옴).
  • "이 하드웨어는 INT8 연산을 지원한다" → vendor-reported (제품 사양 PRIMARY일 수 있으나, 독립 검증과는 다름).
  • "이 모델을 INT4로 양자화해도 이 작업 품질이 X% 유지된다" → measured 여야 하며, 작업·데이터·양자화 방법 등 조건을 반드시 밝혀야 함. 조건이 다르면 "같은 결과"가 아니라 새 실험(REPRODUCTION의 원칙).

이 장에서 배운 것

  • 정밀도는 파라미터 하나당 비트 폭 w를 정하고, 그래서 02장의 storage 하한을 좌우한다.
  • 부동소수점은 범위(지수)와 해상도(가수)를 나눠 갖는다. 같은 16비트라도 FP16·BF16은 배분이 다르다.
  • 정밀도를 낮추면 storage·대역폭은 예측 가능하게 줄지만, 범위·해상도·품질은 워크로드에 따라 바뀐다.
  • 속도 이득은 dtype 지원이라는 숨은 전제를 필요로 한다. 라벨만으로 우열·속도를 단정할 수 없다.

🔎 이 장의 '지지하지 않는 결론'

  • 이 장으로 "INT4가 FP16보다 낫다/못하다"를 일반적으로 말할 수 없다. 그건 작업·모델·양자화 방법에 따른 measured 문제다.
  • "정밀도를 낮췄으니 이 모델이 더 빠를 것이다"를 단정할 수 없다. 속도는 하드웨어·커널 지원과 병목(05장)이 결정한다.

✍️ 확인 문제

  1. FP16과 BF16은 둘 다 16비트인데 왜 하나로 "16비트가 최고"라고 줄 세울 수 없나요? 각각 무엇을 챙기고 무엇을 포기하나요?
  2. "정밀도를 FP32에서 INT8로 낮췄으니 추론이 4배 빨라진다"는 주장에서 빠진 전제 두 가지를 지적하세요.
  3. [조건 묻기 / 주장 유형] "이 모델은 INT4로 양자화해도 품질이 유지된다"가 신뢰할 만한 주장이 되려면 어떤 조건을 함께 밝혀야 하나요? 이 주장은 measured/calculated/vendor-reported 중 어느 유형이어야 하나요?
다음 장: 04 · CPU, GPU, NPU — 지금까지의 숫자(비트·정밀도)가 흐르는 가속기를 엽니다. 이름의 우열이 아니라 실행 모델·메모리·소프트웨어 지원이라는 조건을 묻습니다. (다음 묶음에서 제작)