프롤로그 - "CPU로 AI 돌리기는 다신 안 한다"
제가 ChatGPT 열풍에 영향받아 Llama-2 모델을 로컬에서 돌려보려 했을 때의 일입니다.
M1 맥북 (CPU only):
>>> "Tell me about quantum physics in simple terms"
[10초 후] "Quantum"
[10초 후] "physics"
[10초 후] "is"
한 단어에 10초.
그래서 구형 RTX 3060 (CUDA + Tensor Cores) 를 빌렸습니다:
>>> "Tell me about quantum physics in simple terms"
[즉시] "Quantum physics is the study of very small particles..."
[1초 만에 한 문단 완성]
100배 차이.
"왜? 왜 GPU에만 이렇게 빠르지?"
왜 공부하게 되었나
그때부터 GPU 구조에 관심이 생겼습니다.
제가 한 질문들:
- 게임용 그래픽카드가 왜 AI에 쓰이지?
- AMD GPU도 있는데 왜 엔비디아만 쓰나?
- "CUDA 코어"랑 "텐서 코어"는 또 뭐야?
답을 찾다 보니, 엔비디아가 AI 시대를 예견하고 심어둔 전략적 하드웨어들이 보였습니다.
처음엔 뭐가 이해가 안 갔나
- CPU 코어는 알겠는데, GPU 코어는 뭐가 다른가?
- CUDA가 소프트웨어야 하드웨어야?
- 텐서 코어가 있으면 CUDA 코어는 필요 없는 거 아냐?
무엇보다 "왜 AMD GPU는 안 쓰지?"가 궁금했습니다.
깨달음의 순간 - "박사 8명 vs 초등학생 5,000명"
시니어가 이렇게 설명해줬습니다:
CPU 코어 (8개): 박사님 8명
- 복잡한 논문 (단일 스레드 연산)을 빠르게 해결
- 하지만 인원이 적어서 단순 작업은 느림
GPU 코어 (5,000개): 초등학생 5,000명
- 복잡한 논문 못 품
- 하지만 단순 덧셈 5,000개 동시 계산은 박사보다 빠름
AI 학습이란:
1 + 1 = ?
2 + 3 = ?
4 + 5 = ?
... (10억 번 반복)
박사 8명이 이걸 순차적으로 풀기 vs 초등학생 5,000명이 동시에 풀기
당연히 후자가 빠릅니다.
이 비유를 듣고 나서야 GPU가 왜 AI에 적합한지 체감이 됐습니다. CPU는 복잡한 작업 하나를 빨리 끝내는 데 최적화되어 있고, GPU는 단순한 작업 수천 개를 동시에 처리하는 데 최적화되어 있습니다. AI 학습은 후자에 해당합니다.
1. CUDA 코어 - 일개미 군단
CUDA (Compute Unified Device Architecture)는 엔비디아가 만든 병렬 컴퓨팅 플랫폼이자, GPU 안의 일개미 코어들의 이름입니다.
실제 스펙 비교
| GPU 모델 | CUDA 코어 수 | 가격 | 용도 |
|---|---|---|---|
| RTX 3060 | 3,584개 | $329 | 게임 + 가벼운 AI |
| RTX 3090 | 10,496개 | $1,499 | 게임 + 딥러닝 |
| A100 (데이터센터용) | 6,912개 | $10,000+ | 대규모 AI 학습 |
A100의 CUDA 코어 수가 RTX 3090보다 적은 게 의아할 수 있습니다. 하지만 A100은 텐서 코어 성능, 메모리 대역폭, NVLink 연결 등 AI에 특화된 다른 요소들이 훨씬 강력합니다. 단순 코어 수가 전부가 아닙니다.
엔비디아의 전략 - CUDA 생태계 장악
AMD도 GPU를 만듭니다 (Radeon). 하지만 AMD GPU는 AI에 거의 안 씁니다.
이유: CUDA
엔비디아는 2006년부터 CUDA라는 개발 도구를 무료로 뿌렸습니다.
// CUDA 코드 예시
__global__ void addKernel(int *c, const int *a, const int *b) {
int i = threadIdx.x;
c[i] = a[i] + b[i]; // 각 스레드가 동시 계산
}
이 코드의 핵심은 __global__ 키워드입니다. CPU가 아닌 GPU에서 실행될 함수를 정의하는 것이고, threadIdx.x는 수천 개의 스레드가 각각 자기 담당 데이터를 동시에 처리하게 합니다.
모든 AI 프레임워크(TensorFlow, PyTorch)가 CUDA 기반으로 만들어졌습니다. AMD의 대항마 ROCm은 2016년에야 나왔고, 지원 범위가 아직 제한적입니다.
결과: CUDA = 사실상 GPU AI 표준
이것이 엔비디아의 가장 강력한 해자(moat)입니다. 하드웨어 성능이 비슷해도, 소프트웨어 생태계가 CUDA에 묶여있기 때문에 다른 GPU로의 전환이 어렵습니다.
2. 텐서 코어 - 행렬 계산 전용 괴물
2017년, 엔비디아가 Volta 아키텍처에 텐서 코어를 추가했습니다.
왜 필요했나?
AI의 핵심은 행렬 곱셈 (Matrix Multiplication)입니다.
# 딥러닝의 기본 연산
output = weights @ inputs # 행렬 곱셈
이미지 인식 한 번에:
- Weights: 4,096 × 4,096 행렬
- Inputs: 4,096 × 1 벡터
- 계산량: 약 1,600만 번의 곱셈 + 덧셈
CUDA 코어로도 할 수 있지만, 한 땀 한 땀 계산합니다. 한 개의 CUDA 코어는 한 클럭에 하나의 부동소수점 곱셈(FMA)만 수행합니다.
텐서 코어의 마법
텐서 코어는 4×4 행렬 덩어리를 한 번에 계산합니다.
CUDA 코어:
1 × 1 계산을 10,000개 동시 수행
텐서 코어:
4 × 4 블록(16개)을 한 번에 수행
→ 실질적으로 16배 효율
이것이 가능한 이유는 텐서 코어가 MMA(Matrix Multiply-Accumulate) 연산을 하드웨어 레벨에서 지원하기 때문입니다. D = A × B + C 형태의 행렬 연산을 하나의 명령어로 처리합니다.
텐서 코어의 진화
2017년 Volta(V100)에서 처음 나온 텐서 코어는 계속 진화했습니다.
- 2세대 - Turing (RTX 20): INT8, INT4 지원 추가. 추론(Inference) 성능 향상.
- 3세대 - Ampere (A100, RTX 30): Sparsity(희소성) 기능 추가. 행렬의 0이 많은 부분을 생략해서 속도 2배 향상. TF32(19비트) 포맷도 새로 지원.
- 4세대 - Hopper (H100, RTX 40): Transformer Engine 탑재. LLM(거대 언어 모델) 학습 시 FP8(8비트) 연산을 자동으로 적용해서 속도 6배 향상.
이것이 GPT-4 같은 괴물 AI가 나올 수 있었던 하드웨어적 배경입니다.
실제 속도 차이 - 텐서 코어 유무
제가 Stable Diffusion (AI 이미지 생성)을 돌렸을 때:
RTX 2080 (텐서 코어 없음)
512×512 이미지 1장 생성: 22초
RTX 3060 (텐서 코어 있음)
512×512 이미지 1장 생성: 8초 (2.75배 빠름)
같은 CUDA 코어 수급(약 3,500개)인데도 텐서 코어 유무로 속도 차이가 약 3배. AI 워크로드에서 텐서 코어의 존재감은 압도적입니다.
3. FP16 vs FP32: 정밀도 vs 속도
FP32 (32-bit 부동소수점)
pi = 3.141592653589793 # 매우 정밀
과학 계산, 물리 시뮬레이션처럼 정확한 소수점이 필요한 곳에 씁니다.
FP16 (16-bit 부동소수점)
pi = 3.14 # 덜 정밀하지만 충분
AI에겐 이 정도면 충분합니다.
"고양이일 확률: 99.123456%"
vs
"고양이일 확률: 99.12%"
→ 결과는 둘 다 "고양이"
텐서 코어의 전략: Mixed Precision
FP16으로 계산 → 속도 2배 이상, 메모리 절반
핵심은 Mixed Precision Training입니다. 순전파(forward pass)와 역전파(backward pass)는 FP16으로 빠르게 계산하고, 가중치 업데이트는 FP32로 정밀하게 유지합니다. 속도와 정확도를 모두 잡는 전략입니다.
| 정밀도 | CUDA 코어 | 텐서 코어 |
|---|---|---|
| FP32 | 10 TFLOPS | - |
| FP16 | 20 TFLOPS | 80 TFLOPS |
| FP8 (최신) | - | 160 TFLOPS |
RTX 4090의 경우:
- FP32: 약 80 TFLOPS
- FP16 (Tensor): 약 330 TFLOPS (4배)
TFLOPS가 뭐냐면, 1초에 1조(Tera) 번의 부동소수점 연산을 한다는 뜻입니다. FP16 텐서 코어의 330 TFLOPS는, 1초에 330조 번의 행렬 연산을 처리한다는 것입니다. 이게 AI가 그토록 빠르게 학습할 수 있는 비밀입니다.
4. 실제 - 내 GPU로 AI 돌리기
환경 설정
# CUDA 설치 확인
nvcc --version
# PyTorch (CUDA 지원)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
텐서 코어 활용 코드
import torch
# FP16 모드 (텐서 코어 활용)
model = MyModel().half().cuda() # .half() = FP16
input = torch.randn(1, 3, 512, 512).half().cuda()
# 추론
with torch.cuda.amp.autocast(): # 자동 mixed precision
output = model(input)
.half()를 호출하면 모델의 가중치가 FP32에서 FP16으로 변환되고, 텐서 코어가 자동으로 활성화됩니다. autocast()는 어떤 연산을 FP16으로 하고 어떤 연산을 FP32로 할지 자동으로 결정해줍니다.
속도 측정 결과
import time
# FP32 (CUDA 코어만)
start = time.time()
for _ in range(100):
output = model_fp32(input_fp32)
print(f"FP32: {time.time() - start:.2f}s")
# 출력: FP32: 12.34s
# FP16 (텐서 코어 활용)
start = time.time()
for _ in range(100):
output = model_fp16(input_fp16)
print(f"FP16: {time.time() - start:.2f}s")
# 출력 - FP16: 4.21s (2.9배 빠름)
코드 변경은 .half() 한 줄뿐인데 속도가 3배 가까이 차이 납니다.
이게 텐서 코어의 위력입니다.
5. AMD는 왜 안 쓰나?
AMD도 비슷한 기술(Matrix Cores)을 개발했습니다. 하지만 현실은 이렇습니다:
소프트웨어 생태계의 차이
# 엔비디아
import torch
torch.cuda.is_available() # True (즉시 작동)
# AMD
import torch_directml # 별도 설치 필요
# 지원 안 되는 연산 많음, 에러 빈발
커뮤니티 크기
- CUDA 튜토리얼: 수백만 개
- ROCm 튜토리얼: 수천 개
문제가 생겼을 때 CUDA는 Stack Overflow에서 5분이면 답을 찾지만, ROCm은 GitHub Issue에 등록하고 며칠을 기다려야 할 수도 있습니다.
기업의 선택
OpenAI, Google, Meta 모두 엔비디아 A100/H100 사용. 클라우드 서비스(AWS, GCP, Azure)의 GPU 인스턴스도 대부분 엔비디아입니다.
AMD의 MI250/MI300 같은 데이터센터 GPU도 나오고 있고, ROCm도 빠르게 발전하고 있지만, 15년간 축적된 CUDA 생태계를 단기간에 따라잡기는 어렵습니다.
6. 정리 - GPU 선택 가이드
게임만 할 거라면
- CUDA 코어 수만 확인
- RTX 4060 Ti (4,352 코어)
가벼운 AI (Stable Diffusion, LLM 추론)
- 텐서 코어 필수
- RTX 3060 (12GB VRAM) — VRAM이 12GB인 게 핵심. 8GB 모델은 큰 AI 모델을 못 올림
딥러닝 학습
- 텐서 코어 + VRAM 24GB+
- RTX 3090 / 4090
대규모 AI (기업)
- 엔비디아 A100 / H100 (데이터센터)
- NVLink로 GPU 여러 대를 묶어서 쓰는 게 핵심
마치며 - "엔비디아의 선점 전략"
엔비디아가 AI 시대를 지배하는 이유:
- 2006년: CUDA 무료 배포 → 생태계 장악
- 2017년: 텐서 코어 추가 → AI 전용 하드웨어
- 2020년+: FP8, Transformer Engine → 더욱 최적화
AMD가 따라잡기 어려운 이유는 15년 선점 효과 때문입니다. 하드웨어 성능만으로는 이길 수 없고, 개발자 생태계(라이브러리, 튜토리얼, 커뮤니티)가 함께 따라와야 합니다.
제가 처음 GPU로 AI를 돌렸을 때의 감동을 잊을 수 없습니다.
"이래서 다들 엔비디아만 찾구나."
7. 용어 사전 (Glossary)
- CUDA (Compute Unified Device Architecture): NVIDIA가 만든 병렬 컴퓨팅 플랫폼 및 API. GPU를 범용 계산(GPGPU)에 쓰게 해주는 열쇠.
- Tensor Core: 행렬 연산(Matrix Multiply-Accumulate)에 특화된 GPU 내부의 특수 유닛. AI 가속의 일등 공신.
- TFLOPS (Tera Floating-point Operations Per Second): 1초에 1조 번의 부동소수점 연산을 한다는 성능 단위.
- FP16 / FP32: 16비트(반정밀도) vs 32비트(단정밀도) 부동소수점. 숫자의 정확도를 낮추는 대신 계산 속도를 높임.
- VRAM (Video RAM): GPU 전용 메모리. AI 모델의 크기가 이걸 넘어서면 "Out of Memory" 에러 발생.
- Mixed Precision: FP16과 FP32를 혼합해서 사용하는 학습 기법. 속도와 정확도를 동시에 추구.
8. FAQ & Common Questions
- Q: 게임할 때 텐서 코어가 쓰이나요?
- A: 네, DLSS (Deep Learning Super Sampling) 기술에 쓰입니다. 저해상도(FHD)로 렌더링한 다음, AI가 4K로 업스케일링해 주는데, 이때 텐서 코어가 돌아갑니다. 프레임이 최대 2배까지 올라갑니다.
- Q: CPU에도 비슷한 게 있나요?
- A: 인텔의 경우 AVX-512 같은 SIMD 명령어가 있고, 최근엔 NPU (Neural Processing Unit)를 CPU 안에 내장하고 있습니다. 하지만 GPU의 막대한 병렬 코어 수에는 비할 바가 못 됩니다.
- Q: 클라우드 GPU(Colab, AWS)랑 로컬 GPU랑 뭐가 다른가요?
- A: 성능 자체는 같은 GPU면 동일합니다. 차이는 비용 구조입니다. Colab Pro의 A100은 시간당 과금이라 장시간 학습 시 비용이 폭발하지만, 로컬 4090은 초기 구매비 + 전기세뿐입니다. 학습(Training)은 클라우드, 추론(Inference)은 로컬이 유리한 경우가 많습니다.