시험공부빅데이터분석
← 보드GPU와 Colab · 3/8

Tensor와 모델을 device로 옮기기 — .to(device) ★★★

Tensor는 처음 만들면 CPU에 생겨요. 어느 장치에 있는지는 x.device로 봐요. GPU로 보내려면 두 가지 방법이 있어요.

device = 'cuda' if torch.cuda.is_available() else 'cpu' x = torch.zeros(2, 3, device=device) y = torch.randn(3, 4) print(y.device) y = y.to(device) print(y.device)
코드 줄GPU 없는 컴퓨터GPU 있는 환경 (예 Colab)
print(y.device) (처음)cpucpu (처음은 항상 CPU)
y = y.to(device) 뒤 print(y.device)cpu (옮길 곳이 CPU)cuda:0 (0번 GPU로 이동)

"cuda:0"의 0은 0번 GPU라는 뜻이에요. GPU가 한 장이면 그냥 0번이에요.

제일 중요한 규칙

.to(device)는 원본을 바꾸지 않고 "옮겨진 새 Tensor"를 돌려줘요. 그래서 반드시 x = x.to(device)처럼 변수에 다시 저장해야 해요. x.to(device)만 쓰고 저장하지 않으면 x는 그대로 CPU에 있어요.

비유 — 택배

택배(.to)를 보내면 상품이 "새로 도착한 택배 상자"로 와요. 그 상자를 받아서 선반(변수 x)에 올려놓아야 써먹을 수 있어요. 받지 않고 흘려보내면 선반에는 원래 물건만 있어요.

모델(layer)도 같은 방법으로 옮겨요.

from torch import nn model = nn.Linear(4, 2) model = model.to(device) x = torch.randn(3, 4).to(device) y = model(x) print(y.device) print(model.weight.device)
cpu cpu
코드 줄무슨 뜻
model = nn.Linear(4, 2)입력 4개, 출력 2개인 한 층짜리 모델
model = model.to(device)모델의 weight, bias를 device로 옮겨요(수업 슬라이드의 방식 그대로)
torch.randn(3, 4).to(device)(3, 4) 입력을 만들자마자 같은 device로 옮겨요. 한 줄에 붙여 쓴 모양이에요
y = model(x)모델과 입력이 같은 곳에 있으니 계산돼요. 결과도 같은 device에 생겨요
출력 cpu, cpuGPU 없는 컴퓨터의 결과예요. GPU 환경이면 cuda:0, cuda:0이 나와요
시험엔 이렇게 써요 — 이렇게 고르세요

.to(device)는 새 Tensor를 반환하므로 x = x.to(device)처럼 반환값을 변수에 다시 저장해야 한다. 모델도 model = model.to(device)로 옮긴다. 선택지에 "x.to(device)만 실행해도 x가 GPU로 이동한다"가 있으면 오답이에요.

잠깐 확인 — GPU가 있는 환경에서 x = torch.randn(3, 4)를 만든 뒤 x.to('cuda')를 저장 없이 한 줄만 실행했습니다. 이어서 print(x.device)를 하면?

cpu예요. 옮겨진 새 Tensor를 변수에 저장하지 않아서 x는 그대로 CPU에 있어요.

다음 카드 → 같은 device에 있어야 계산돼요 ★★★

자료: 2주차(+1·3주차) · Week02_Tensor_and_GPU, 구글 Colab GPU 환경 사용법.pdf · 빅분01(1주차)·빅분02(2주차)·빅데이터03(3주차) 녹취