← 보드GPU와 Colab · 7/8
종합 — 코드 읽기 연습 ★★
배운 것을 한꺼번에 써서 아래 코드의 결과를 따라가 보세요. GPU가 없는 컴퓨터에서 실행했다고 가정해요.
device = 'cuda' if torch.cuda.is_available() else 'cpu'
a = torch.ones(2, 3)
b = torch.ones(2, 3, device=device)
a.to(device)
c = a + b
print(a.device)
print(c.shape)
cpu
torch.Size([2, 3])
| 코드 줄 | 무슨 뜻 |
|---|---|
device = ... | GPU가 없으니 'cpu' |
a = torch.ones(2, 3) | (2, 3) 크기의 1로 찬 Tensor. 기본 위치는 CPU |
b = torch.ones(2, 3, device=device) | device가 cpu라서 b도 CPU에 생겨요 |
a.to(device) | 다시 저장하지 않아서 a에는 변화가 없어요(어차피 옮길 곳도 CPU) |
c = a + b | 둘 다 CPU에 있고 shape이 같아서 계산돼요. 모든 값이 2 |
print(a.device) | cpu |
print(c.shape) | torch.Size([2, 3]) |
같은 코드를 GPU 있는 환경(Colab)에서 실행하면 달라져요. device가 'cuda'가 되어 b는 GPU에 생기고, a.to(device)는 저장하지 않아 a는 CPU에 남아요. 그러면 a + b에서 device가 달라 에러가 나요. 같은 코드인데 환경에 따라 결과가 갈리는 대표적인 예예요.
외우기 팁
"옮기면 다시 저장, 계산하려면 같은 곳". 두 문장이면 device 문제는 거의 다 풀려요.
시험엔 이렇게 써요 — 이렇게 고르세요
코드에 .to(device)가 보이면 먼저 "다시 저장했는가?"를 확인하세요. 저장하지 않았으면 Tensor는 원래 자리에 그대로예요. 그다음 "계산에 참여하는 Tensor가 전부 같은 device인가?"를 확인하면 돼요.
잠깐 확인 — x = x.to(device) 대신 x.to(device)만 썼을 때 생기는 문제를 한 문장으로 말해 보세요.
.to()는 이동한 새 Tensor를 돌려줄 뿐 원본을 바꾸지 않아서, 저장하지 않으면 x는 계속 원래 device에 남아요.
다음 카드 → 이 장 3줄 요약
자료: 2주차(+1·3주차) · Week02_Tensor_and_GPU, 구글 Colab GPU 환경 사용법.pdf · 빅분01(1주차)·빅분02(2주차)·빅데이터03(3주차) 녹취