본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

장치와 텐서 배치

~18 min · device, cuda, mps

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

CPU와 GPU의 경계는 분명해

PyTorch 텐서는 특정 장치에 올라가 있어. 어느 장치에 있는지는 x.device로 확인할 수 있어. 텐서끼리 연산하려면 두 텐서가 같은 장치에 있어야 하고, 다른 장치로 옮길 때는 .to(device)를 명시적으로 호출해야 해. 이걸 놓치면 PyTorch 입문자가 가장 흔히 마주치는 오류인 Expected all tensors to be on the same device가 발생해.

학습 속도를 높이려면 모델과 데이터가 모두 GPU에 있어야 해. 모델은 시작할 때 한 번 옮기고, 데이터는 학습 루프에서 배치마다 옮겨. 출력 텐서는 출력하거나 PyTorch가 아닌 후속 코드에 넘기려고 직접 가져오기 전까지 GPU에 그대로 남아 있어.

팁: .to(device)를 둘 곳은 3군데야. 시작할 때 모델에 한 번, 학습 루프에서 입력 배치마다 한 번, 손실을 출력하고 싶을 때 손실 텐서에 한 번 써. 스칼라는 .item()으로 Python에 가져오면 돼. 그 밖의 거의 모든 텐서는 GPU에 그대로 두면 돼.

알맞은 장치 고르기

NVIDIA, Apple Silicon, CPU 대체 경로라는 흔한 3가지 경우는 아래 코드의 한 줄로 처리할 수 있어. Apple MPS 백엔드는 많은 작업에서 빠르지만, 가끔 지원하지 않는 연산이 있어. 이때 NotImplementedError가 나오면 upstream에 신고해.

다중 GPU와 분산 학습

한 머신에서 여러 GPU를 쓸 때는 torch.nn.parallel.DistributedDataParallel (DDP)을 사용하고 torchrun으로 실행해. 여러 머신에서도 같은 DDP API를 쓰지만 실행 스크립트가 달라져. 더 높은 수준의 도구가 필요하면 Hugging Face accelerate launch로 반복 설정 코드를 감출 수 있어.

원칙: 2026년에는 모델이 단일 GPU에 정말 들어가지 않을 때까지 단일 GPU 학습을 기본값으로 삼아. 다중 GPU가 더하는 복잡성의 대가는 분명하고, 최신 가속기(H100, MI300X, M3 Ultra)는 놀랄 만큼 큰 모델도 담을 수 있어.

Code

장치는 한 번 선택해 일관되게 사용·python
import torch

device = (
    torch.device("cuda") if torch.cuda.is_available()
    else torch.device("mps") if torch.backends.mps.is_available()
    else torch.device("cpu")
)
print("device:", device)

model = MyModel().to(device)

for xb, yb in train_loader:
    xb, yb = xb.to(device, non_blocking=True), yb.to(device, non_blocking=True)
    logits = model(xb)
    loss = loss_fn(logits, yb)
    loss.backward()
    optimizer.step()
    print(loss.item())   # .item() brings the scalar back to CPU/Python

External links

Exercise

모델과 배치를 cuda로 옮겨. Apple Silicon이라면 mps를 사용해. 순전파 한 번에 걸리는 시간을 재고, cpu로 다시 옮긴 뒤 같은 방식으로 시간을 재. 얼마나 빨라졌는지 확인해. CPU만 쓸 수 있다면 이 비율이 GPU를 찾아야 할 동기가 될 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.