GPU 환경과 클라우드 세팅
학습 목적이라면 CPU로도 괜찮습니다. 실제 훈련에는 GPU가 필요합니다.
유형: Build
언어: Python
선수 지식: Phase 0, Lesson 01
예상 시간: 약 45분
학습 목표
nvidia-smi와 PyTorch CUDA API로 로컬 GPU(local GPU) 사용 가능 여부를 확인합니다.
- Google Colab에서 무료 T4 GPU 런타임(runtime)을 설정해 클라우드 실험(cloud experiment)을 실행합니다.
- CPU와 GPU의 행렬 곱셈(matrix multiplication) 벤치마크(benchmark)를 실행하고 속도 향상(speedup)을 측정합니다.
- fp16 기준 경험칙을 사용해 VRAM에 들어갈 수 있는 모델 파라미터(model parameter) 규모를 추정합니다.
문제
Phase 1-3의 대부분 강의는 CPU에서도 충분히 실행됩니다. 하지만 CNN, 트랜스포머(transformer), LLM을 훈련하기 시작하는 Phase 4 이후부터는 GPU 가속(GPU acceleration)이 필요합니다. CPU에서 8시간 걸리는 훈련 실행(training run)이 GPU에서는 10분에 끝날 수 있습니다.
선택지는 크게 세 가지입니다. 로컬 GPU(local GPU), 클라우드 GPU(cloud GPU), Google Colab 무료 GPU입니다.
PAI OJT에서는 GPU가 없다는 사실 자체를 문제로 보지 않습니다. 대신 지금 어떤 컴퓨팅(compute) 환경을 쓰고 있고, CPU, GPU, Colab, 클라우드 중 어느 선택지가 해당 강의에 적합한지 설명할 수 있어야 합니다.
개념
선택지:
1. 로컬 NVIDIA GPU(Local NVIDIA GPU)
비용: $0 (이미 갖고 있다면)
설정: CUDA + cuDNN 설치
적합한 경우: 자주 사용, 큰 데이터셋(dataset)
2. Google Colab (무료 등급/free tier)
비용: $0
설정: 거의 없음
적합한 경우: 빠른 실험, 집에 GPU가 없음
3. 클라우드 GPU(Cloud GPU: Lambda, RunPod, Vast.ai)
비용: $0.20-2.00/hr
설정: SSH + 설치
적합한 경우: 본격 훈련, 큰 모델(model)
| 선택지 | 장점 | 주의할 점 |
|---|
| 로컬 NVIDIA GPU(Local NVIDIA GPU) | 반복 실험이 빠르고 데이터(data) 이동이 적다 | 드라이버(driver), CUDA, PyTorch 버전(version)을 직접 맞춰야 한다 |
| Google Colab | 바로 시작할 수 있고 무료 GPU를 쓸 수 있다 | 세션 시간 제한(session timeout), 파일 지속성(file persistence), GPU 사용 가능성(GPU availability) 제한이 있다 |
| 클라우드 GPU(Cloud GPU) | 필요한 순간 큰 GPU를 빌릴 수 있다 | 비용, SSH, 보안, 스토리지(storage) 관리가 필요하다 |
GPU가 신경망 훈련(neural network training)에 빠른 이유는 같은 형태의 계산을 아주 많이 동시에 처리하기 때문입니다. 신경망 훈련의 큰 비중은 행렬 곱셈(matrix multiplication)이고, 행렬 곱셈은 많은 숫자 쌍에 같은 연산을 반복 적용합니다. CPU는 복잡한 분기(branch)와 낮은 지연 시간(latency)의 범용 작업에 강하고, GPU는 수천 개의 코어(core), 높은 메모리 대역폭(memory bandwidth), Tensor Core 같은 행렬 연산 전용 하드웨어(hardware)로 이런 대량 병렬 연산에 강합니다.
직접 만들기
Option 1: Local NVIDIA GPU
NVIDIA GPU가 있는지 먼저 확인합니다.
nvidia-smi
PyTorch에서 CUDA를 인식하는지 확인합니다.
import torch
print(f"CUDA 사용 가능: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
if torch.cuda.is_available():
print(f"GPU: {torch.cuda.get_device_name(0)}")
print(f"메모리: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f} GB")
nvidia-smi는 GPU 드라이버(driver)와 디바이스(device) 상태를 확인하는 도구이고, PyTorch CUDA API는 Python 런타임에서 실제로 GPU를 사용할 수 있는지 확인합니다. 둘 중 하나만 확인하면 원인을 놓치기 쉽습니다.
Option 2: Google Colab
- colab.research.google.com에 접속합니다.
Runtime > Change runtime type > T4 GPU를 선택합니다.
!nvidia-smi를 실행해 GPU가 잡혔는지 확인합니다.
이 과정의 노트북(notebook)은 Colab에 직접 올려 실행할 수 있습니다. Colab에서는 파일이 세션(session) 사이에 사라질 수 있으므로 필요한 결과는 Google Drive에 저장하거나 다운로드합니다.
Option 3: Cloud GPU
Lambda Labs, RunPod, Vast.ai 같은 클라우드 GPU 인스턴스(cloud GPU instance)를 사용할 때는 SSH로 접속한 뒤 필요한 런타임(runtime)을 설치합니다.
ssh user@your-gpu-instance
uv pip install torch torchvision torchaudio
python -c "import torch; print(torch.cuda.get_device_name(0))"
클라우드 인스턴스(cloud instance)에서는 비용이 계속 발생할 수 있습니다. 실습이 끝나면 인스턴스(instance)를 중지했는지 확인합니다.
GPU가 없어도 괜찮습니다
대부분의 강의는 CPU에서 동작합니다. GPU가 필요한 강의는 별도로 안내하고 Colab 링크(link)를 제공합니다.
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"사용 device: {device}")
직접 만들기: GPU와 CPU 벤치마크 비교
CPU와 GPU의 행렬 곱셈 시간을 비교합니다. GPU 연산(operation)은 비동기적으로 실행되므로 시간을 잴 때 torch.cuda.synchronize()가 필요합니다.
import time
import torch
size = 5000
a_cpu = torch.randn(size, size)
b_cpu = torch.randn(size, size)
start = time.time()
c_cpu = a_cpu @ b_cpu
cpu_time = time.time() - start
print(f"CPU: {cpu_time:.3f}s")
if torch.cuda.is_available():
a_gpu = a_cpu.to("cuda")
b_gpu = b_cpu.to("cuda")
torch.cuda.synchronize()
start = time.time()
c_gpu = a_gpu @ b_gpu
torch.cuda.synchronize()
gpu_time = time.time() - start
print(f"GPU: {gpu_time:.3f}s")
print(f"속도 향상: {cpu_time / gpu_time:.0f}x")
code/gpu_check.py에는 GPU 확인과 벤치마크, fp16 기준 모델 크기(model size) 추정이 함께 들어 있습니다.
python phases/00-setup-and-tooling/03-gpu-setup-and-cloud/code/gpu_check.py
사용해보기
GPU가 있는 환경에서는 아래 순서로 확인합니다.
nvidia-smi로 드라이버와 GPU 프로세스(process)를 확인합니다.
- PyTorch에서
torch.cuda.is_available()이 True인지 확인합니다.
- 벤치마크를 실행해 CPU/GPU 차이를 측정합니다.
- VRAM 용량을 보고 fp16 파라미터 기준으로 모델 규모를 대략 추정합니다.
fp16에서는 파라미터(parameter) 하나가 대략 2 byte를 사용합니다. 예를 들어 24 GB VRAM은 단순 계산으로 약 12B parameter를 담을 수 있습니다. 실제 훈련(training)에서는 활성값(activation), 기울기(gradient), 옵티마이저 상태(optimizer state)가 추가로 필요하므로 이 값은 매우 거친 상한선입니다.
산출물 만들기
이 강의의 산출물은 자신의 컴퓨팅 환경 점검 기록입니다.
# GPU/Cloud 환경 점검 결과
- 날짜:
- local GPU:
- `nvidia-smi` 결과:
- PyTorch CUDA:
- GPU memory:
- Colab 실행 여부:
- cloud GPU 사용 여부:
## 벤치마크(Benchmark)
- CPU time:
- GPU time:
- speedup:
## 판단
- 이 환경으로 가능한 강의:
- Colab/클라우드가 필요한 강의:
연습문제
- 위 벤치마크를 실행하고 CPU와 GPU 시간을 비교합니다.
- GPU가 없다면 Google Colab에서 같은 벤치마크를 실행하고 로컬 CPU 결과와 비교합니다.
- GPU 메모리 용량을 확인하고 fp16 기준으로 들어갈 수 있는 가장 큰 모델 파라미터 수를 추정합니다. 경험칙은 파라미터당 2바이트(byte)입니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| GPU | 빠른 처리 장치 | 많은 코어(core)로 같은 종류의 계산을 동시에 처리하는 병렬 연산 장치 |
| CUDA | GPU 프로그래밍 | NVIDIA GPU에서 병렬 계산을 실행하기 위한 컴퓨팅 플랫폼(computing platform) |
| VRAM | GPU 메모리 | 시스템 RAM(system RAM)과 분리된 GPU 전용 메모리로, 모델 크기(model size)와 배치 크기(batch size)의 상한을 결정한다 |
| fp16 | 반정밀도(half precision) | 16비트 부동소수점(16-bit floating point)이며 fp32보다 메모리를 절반만 사용한다 |
| Tensor Core | 빠른 행렬 하드웨어 | 행렬 곱셈(matrix multiplication)에 특화된 GPU 코어로 일반 코어보다 훨씬 빠를 수 있다 |
더 읽을거리