← 보드GPU와 Colab · 4/8
같은 device에 있어야 계산돼요 ★★★
연산에 참여하는 모든 Tensor와 모델은 같은 device에 있어야 해요. CPU의 Tensor와 GPU의 Tensor를 더하거나 곱하면 "device가 다르다"는 RuntimeError가 나요.
비유 — 집 냉장고와 식당 주방
한 재료는 집 냉장고에, 다른 재료는 식당 주방에 있다면 한 요리로 합칠 수 없어요. 한쪽으로 옮겨 와야 해요. CPU 메모리와 GPU 메모리는 따로 분리되어 있어서(교수님 설명) 서로 다른 곳에 있는 Tensor끼리는 바로 계산할 수 없어요.
| 상황 | 결과 | 고치는 법 |
|---|---|---|
| CPU Tensor + GPU Tensor | device가 달라서 에러 | 한쪽을 x = x.to(device)로 같은 곳에 옮기기 |
| GPU의 모델에 CPU 입력을 넣기 | 에러 | 입력도 .to(device) |
| CPU의 모델에 GPU 입력을 넣기 | 에러 | 모델도 .to(device) |
그래서 실제 학습 코드는 보통 아래 순서를 따라요. 모델을 device에 올리고, 데이터를 꺼낼 때마다 batch도 같은 device로 보내요.
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = model.to(device)
for batch_x, batch_y in loader:
batch_x = batch_x.to(device)
batch_y = batch_y.to(device)
prediction = model(batch_x)
| 코드 줄 | 무슨 뜻 |
|---|---|
model = model.to(device) | 학습 시작 전에 모델을 한 번만 옮겨요 |
for batch_x, batch_y in loader: | 데이터를 batch 단위로 꺼내요(0장에서 본 짝 받기) |
batch_x = batch_x.to(device) | 꺼낸 입력을 모델과 같은 device로. 다시 저장해야 해요 |
batch_y = batch_y.to(device) | 정답도 같은 곳으로. 나중에 loss를 계산할 때 필요해요 |
시험엔 이렇게 써요 — 이렇게 고르세요
연산에 참여하는 모든 Tensor는 같은 device에 있어야 하며 모델과 입력도 마찬가지이다. device가 다르면 연산할 수 없다. 오류가 나면 "shape, dtype, device" 순서로 확인하라는 교수님의 말씀을 떠올리세요.
잠깐 확인 — 모델은 GPU로 보냈는데 입력 x는 CPU 그대로 넣었습니다. 어떻게 되나요?
device가 달라서 에러가 나요. x = x.to(device)로 입력도 GPU로 보내야 해요.
다음 카드 → GPU Tensor를 NumPy로 바꾸기
자료: 2주차(+1·3주차) · Week02_Tensor_and_GPU, 구글 Colab GPU 환경 사용법.pdf · 빅분01(1주차)·빅분02(2주차)·빅데이터03(3주차) 녹취