GPU (Graphics Processing Unit)
GPU는 병렬 연산에 적합하도록 수천 개의 코어를 갖춘 프로세서로, 딥러닝 모델을 학습하고 실행하는 데 사용되는 주요 하드웨어입니다.
그래픽 처리 장치(GPU)는 수천 개의 단순한 코어를 갖춘 프로세서로, 각 코어는 여러 데이터에 동일한 연산을 동시에 수행합니다. GPU는 수백만 개의 픽셀과 정점을 병렬로 계산하는 3D 그래픽 렌더링을 위해 개발되었으며, 딥러닝의 주요 하드웨어가 되었는데, 이는 신경망의 학습과 추론이 같은 방식으로 병렬화되는 행렬 곱셈에 대부분 의존하기 때문입니다. 2007년에 출시된 NVIDIA의 CUDA 플랫폼은 GPU를 범용 컴퓨팅에 활용할 수 있도록 했으며, 2012년에는 NVIDIA GTX 580 GPU 두 대에서 5~6일 동안 학습된 AlexNet 네트워크가 ImageNet 챌린지에서 top-5 오류율 15.3%로 차점자의 26.2%를 앞서며 우승했습니다. 오늘날 PyTorch, TensorFlow, JAX는 CUDA를 통해 NVIDIA GPU에서, ROCm을 통해 AMD GPU에서, Metal을 통해 Apple 실리콘에서 실행되며, 수천 개의 GPU로 구성된 클러스터가 가장 큰 파운데이션 모델을 학습합니다.
GPU가 딥러닝을 가속하는 방식#
CPU는 소수의 코어가 분기 코드를 빠르게 실행할 수 있도록 칩 면적 대부분을 캐시와 제어 로직에 할당합니다. GPU는 해당 면적을 산술 연산에 사용합니다. NVIDIA GPU는 스트리밍 멀티프로세서로 나뉘며, 각 멀티프로세서는 워프라고 하는 32개 스레드 그룹을 실행합니다. 워프는 서로 다른 데이터에 동일한 명령을 수행합니다. 일부 워프가 메모리를 기다리는 동안 다른 워프는 연산을 수행하므로 병렬 작업이 충분하면 칩을 계속 가동할 수 있습니다. 2017년 Volta 세대부터 NVIDIA GPU에는 작은 행렬을 낮은 정밀도로 한 번에 곱하는 Tensor Core 연산 유닛도 포함되었습니다. Tensor Core는 이제 FP8을 지원하며 Blackwell부터는 FP4도 지원합니다. NVIDIA A100은 표준 FP32 연산에서 최대 19.5 TFLOPS, Tensor Core의 BF16 연산에서 312 TFLOPS를 기록합니다. 이것이 대부분의 GPU 학습에서 혼합 정밀도를 사용하는 이유입니다. 다음 코드는 CPU와 GPU에서 동일한 행렬 곱셈의 실행 시간을 측정합니다:
import time
import torch
gpu = torch.accelerator.current_accelerator() # cuda, mps, or xpu device on this machine
a = torch.randn(4096, 4096)
b = torch.randn(4096, 4096)
for device in (torch.device("cpu"), gpu):
x, y = a.to(device), b.to(device)
x @ y # warm-up run
torch.accelerator.synchronize()
start = time.perf_counter()
for _ in range(10):
x @ y
torch.accelerator.synchronize() # GPU calls return immediately, so wait for them to finish
seconds = (time.perf_counter() - start) / 10
print(f"{device.type}: {seconds * 1000:.1f} ms per multiply, {2 * 4096**3 / seconds / 1e12:.1f} TFLOPS")Apple M5 Pro 노트북에서 코드를 실행하면 cpu: 80.0 ms per multiply, 1.7 TFLOPS과 mps: 18.3 ms per multiply, 7.5 TFLOPS이 출력되므로, 노트북의 통합 GPU는 FP32 연산에서 약 4.4배 빠릅니다. 데이터센터 GPU는 더 많은 코어와 초당 수 테라바이트를 전송하는 고대역폭 메모리(HBM)를 모두 활용해 격차를 더욱 벌립니다. 충분한 데이터가 공급되어 코어가 계속 작동할 수 있습니다. VRAM이라고도 하는 GPU 메모리는 한 기기에 적재할 수 있는 모델과 배치 크기도 제한합니다. 그래디언트 체크포인팅 및 분산 학습과 같은 기법은 이 제한을 우회하기 위해 사용됩니다.
GPU에서 모델 학습 및 배포하기#
학습 작업은 나머지 파이프라인이 GPU 처리 속도를 따라갈 때만 GPU를 계속 가동할 수 있습니다. CPU 워커는 이미지를 충분히 빠르게 디코딩하고 증강해야 하며, 배치는 코어를 모두 활용할 수 있을 만큼 커야 하고, Tensor Core에서는 저정밀도 연산을 수행해야 합니다. GPU 사용률이 낮다면 일반적으로 다음 단계 중 하나가 원인입니다:
Ultralytics YOLO는 CUDA GPU를 사용할 수 있으면 기본적으로 첫 번째 GPU에서 학습합니다. 다중 GPU 학습에는 device=[0, 1]을 사용할 수 있으며, batch=-1를 지정하면 GPU의 여유 메모리를 측정해 약 60%를 사용하는 배치 크기를 선택하는 AutoBatch가 실행됩니다. 로컬 하드웨어가 없는 팀은 학습 실행마다 Ultralytics Platform에서 클라우드 GPU를 선택할 수 있습니다. 추론에서는 TensorRT로 내보낸 YOLO26n이 NVIDIA T4 GPU에서 640픽셀 이미지를 1.7ms에 처리합니다. CPU에서 ONNX를 사용하면 38.9ms가 걸립니다. 이 코드는 AutoBatch로 첫 번째 GPU에서 YOLO26을 학습합니다.
from ultralytics import YOLO
# 가장 작은 YOLO26 감지 모델을 불러옵니다.
model = YOLO("yolo26n.pt")
# GPU 0에서 학습하고 AutoBatch가 GPU 메모리에 맞게 배치 크기를 설정하도록 합니다.
results = model.train(data="coco8.yaml", epochs=3, imgsz=640, device=0, batch=-1)GPU, CPU, TPU, NPU 비교#
- CPU: 범용 분기 코드를 실행하는 강력한 코어 몇 개로 구성됩니다. 대부분의 학습 파이프라인에서 CPU는 데이터 로딩과 전처리를 수행하며, 가속기를 사용할 수 없는 경우 추론도 처리합니다.
- GPU: 프로그래밍 가능한 코어 수천 개와 Tensor Core로 구성됩니다. GPU는 거의 모든 모델과 프레임워크를 실행할 수 있고, 여러 공급업체가 제공하며, 주요 클라우드에서 모두 사용할 수 있습니다.
- TPU: 대형 행렬 곱셈 유닛을 중심으로 설계된 Google의 애플리케이션 전용 칩입니다. TPU는 대규모 밀집 행렬 연산에서 효율성을 높이는 대신 GPU의 유연성을 일부 희생하며, Google Cloud를 통해 사용할 수 있습니다.
- NPU: 휴대전화, 노트북, 엣지 기기에 탑재되는 저전력 신경망 가속기로, 학습보다 추론에 사용됩니다.
실제 적용 사례#
- 대형 모델 학습: 수십억 개의 파라미터를 가진 언어 및 비전 모델은 NVLink와 InfiniBand 같은 고속 링크로 연결된 데이터센터 GPU 수천 개의 클러스터에서 학습됩니다.
- 실시간 비디오 분석: 단일 GPU에서 여러 카메라 스트림을 대상으로 객체 감지 및 추적을 동시에 실행하여 교통 모니터링, 리테일 분석 또는 공장 검사를 수행할 수 있습니다.
- 로보틱스 및 자율주행차: NVIDIA Jetson과 같은 임베디드 GPU 모듈은 온보드에서 인식 모델을 실행합니다. 카메라 데이터를 서버로 보내면 지연 시간이 너무 길어지기 때문입니다.
- 의료 영상: GPU는 장기와 종양을 분할하기 위한 대규모 3D CT 및 MRI 볼륨을 몇 분이 아닌 몇 초 만에 처리합니다.










