3화 2026-05-26

GPU가 좋을수록 왜 덜 정확하게 쓸까?

— 코드 한 줄의 비밀: GPU가 좋을수록 왜 덜 정확하게 쓸까?

지난 편에서 처음으로 AI 이미지 한 장 만들어보셨다면, 오늘 글은 그 코드를 한 번 더 깊이 들여다보는 시간입니다. 따라하실 단계는 거의 없어요. 대신 AI 세계의 의외의 규칙 하나를 배우게 됩니다.

이번 편은 좀 짧아요. 4~5분이면 다 읽으실 수 있을 거예요.

코드 한 줄에 걸린 의문

2편에서 돌렸던 코드를 다시 보겠습니다. 거의 모든 줄에 주석을 달아뒀는데, 그중 이 한 줄이 유난히 신경 쓰였어요.

# GPU가 있으면 float16(가볍고 빠름), 없으면 float32(정확하지만 느림)
dtype = torch.float16 if torch.cuda.is_available() else torch.float32

해석하자면 이런 뜻입니다.

“GPU가 있으면 float16을 쓰고, 없으면 float32를 쓰겠다.”

여기서 float16, float32숫자를 컴퓨터 메모리에 저장하는 방식이에요. 정확도와 메모리 사용량이 달라요.

형식메모리표현 정확도
float324바이트약 7자리
float162바이트약 3자리

float32가 더 정확하고, float16은 덜 정확합니다. 메모리는 그 반대로 float16이 절반만 써요.

저는 이 코드를 보고 직관적으로 생각했어요.

“우리 ATOM은 GPU 좋잖아? 그럼 더 정확한 float32 쓰는 게 맞지 않나? 메모리도 128GB나 되니까 충분하고.”

너무 당연한 생각 같았어요. 좋은 도구가 있으면 더 정확하게 쓰는 게 상식이잖아요. 같은 비용을 들였으면 더 좋은 품질을 뽑아내는 게 합리적이고.

그런데 답은 정반대였습니다.

직관과 정반대. 왜?

GPU가 좋을 때 오히려 덜 정확한 float16을 쓰는 게 옳다는 게 AI 업계의 정답입니다. 이유는 세 가지예요.

이유 1 - 모델이 메모리에 안 들어갈 수 있다

이번에 쓴 Stable Diffusion XL 모델은,

ATOM은 메모리가 128GB라 둘 다 충분해 보이죠. 그런데 앞으로 더 큰 모델을 다룰 거예요. 예를 들어 LLaMA 70B 같은 대형 언어 모델은:

큰 모델일수록 작은 정밀도가 필수예요. ATOM 같은 고급 장비조차 그래요. 더 비싼 데이터센터급 장비가 아닌 이상, 정밀도를 낮추는 건 선택이 아닌 필수입니다.

이유 2 - GPU는 float16에 최적화되어 있다 (이게 핵심!)

NVIDIA GPU 안에는 Tensor Core라는 특수 회로가 있어요. 일반 계산 회로와 별개로, AI 계산 전용으로 따로 설계된 부품입니다.

그런데 이 Tensor Core가 float16 계산에 압도적으로 빠르게 설계되어 있어요.

자동차로 비유하면,

같은 GPU여도 어떤 정밀도를 쓰느냐에 따라 속도가 몇 배 차이가 납니다.

ATOM의 스펙에 적혀있는 “1 petaFLOP AI 성능” 이라는 수치, 이거 사실 float16이나 그보다 더 작은 정밀도 기준이에요. float32로 환산하면 이 숫자가 훨씬 작아져요.

즉, GPU 비싸게 산 보람을 제대로 누리려면 반드시 작은 정밀도로 써야 합니다. float32로만 쓰는 건 페라리를 시속 50km로 모는 거나 마찬가지예요.

이유 3 - 정확도 손실이 별 의미 없다

float16은 분명 덜 정확합니다. 그런데 어떤 작업이냐에 따라 그 차이가 의미가 있을 수도, 없을 수도 있어요.

이미지를 생각해보면, 픽셀 값이 0~255 사이 숫자예요. 이걸 표현하는 데 float32까지 갈 필요가 없어요. float16 정확도면 차고 넘칩니다. 사람 눈은 어차피 그 차이를 못 구분해요.

그래서 else 부분은 왜 넣었을까

dtype = torch.float16 if torch.cuda.is_available() else torch.float32

“제 컴퓨터는 ATOM이라 무조건 GPU가 있는데, else 부분(GPU 없을 때)이 왜 들어있을까요?”

이유는 간단해요. 이 코드는 ATOM 전용이 아니거든요.

CPU는 float16을 잘 못 다뤄요. CPU 회로는 float32에 최적화되어 있어서, CPU에서 float16 쓰면 오히려 더 느리거나 동작 안 합니다.

그래서 코드가 이렇게 짜인 거예요.

각자 좋아하는 걸 골라서 주는 거죠. 안전망입니다. 비유하자면 “비건 손님에게는 비건 메뉴, 육식 손님에게는 고기 메뉴” 자동 선택 시스템 같은 거예요.

이런 코드 패턴 자주 만나게 될 거예요. AI 코드 보면 거의 어디든 등장합니다.

AI 업계의 큰 흐름 - 점점 작아지는 정밀도

이 한 줄의 비밀을 알고 나면, AI 업계 전체의 트렌드가 보이기 시작합니다.

지난 15년간 AI 모델 정밀도 추세는 이래요.

2010년대 초     : float32 (FP32)        ← 클래식, 표준
2018년경       : float16 (FP16)        ← 대중화
2022년경       : bfloat16 (BF16)       ← 새 표준
2023년~        : int8, int4 양자화     ← 더 작게!
2024~2025년    : float8 (FP8), FP4    ← 미친듯이 작게

점점 더 작은 정밀도로 가는 중이에요.

ATOM의 스펙시트에 적혀있던 “1 petaFLOP AI 성능”, 이거 사실 FP4 기준이에요. 4비트짜리 숫자로 계산한다는 뜻이에요. 정밀도가 16분의 1 수준이 됐어요.

이게 가능하다는 게 최근 5년 사이 AI 발전의 핵심 동력 중 하나예요. 정밀도를 낮추면,

2편에서 보셨던 requirements.txtbitsandbytes 라는 라이브러리가 있었던 거 기억나세요? 이게 바로 양자화(정밀도를 줄여 모델을 압축하는 작업) 를 도와주는 도구예요. NVIDIA가 ATOM에 미리 깔아둔 데에는 이유가 있는 거죠. “이거 자주 쓸 거다”라는 의도.

변호사 마인드와 코드 읽기

오늘 글의 핵심은 사실 float16 이 아니에요. “한 줄 한 줄 의심하면서 읽는 습관” 이에요.

변호사는 계약서 한 줄에서 의도를 읽어내는 훈련을 받아요. “왜 이 조항이 여기 들어가 있지?”, “이 표현이 왜 굳이 이렇게 되어 있지?” 하고 따져봅니다.

코드를 읽는 것도 똑같아요. AI 입문자에게 가장 좋은 학습 방법은,

  1. 튜토리얼 그대로 따라하기
  2. 돌아간 다음 코드 다시 읽기
  3. “왜 이렇게 짠 거지?” 한 줄씩 의심해보기
  4. 모르면 검색하거나 다른 AI에게 물어보기

이걸 반복하면 어느 순간 본인이 직접 코드를 쓸 수 있게 돼요. 적어도 본인 코드에 변호사 같은 의심을 던질 수 있게 되고요.

ATOM이 비싼 도구지만, 사실 가장 비싼 자원은 본인의 호기심이에요.

마무리

오늘 배운 것 정리해보면,

읽어주셔서 감사합니다. 🙂

#환경구축#모델이야기#양자화