본문 바로가기
Error Note

[Pytorch] Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

by ga.0_0.ga 2023. 3. 1.
728x90
반응형

서로 다른 공간에 있는 텐서들끼리 연산하려고 할때 발생하는 에러입니다. 연산해야 할 텐서 중 하나는 GPU에 하나는 CPU에 있을 때 발생합니다. GPU와 CPU는 엄연히 다른 기기이기 때문에 메모리 공간 또한 분리되어 있습니다. 

따라서! 텐서끼리 연산을 할 때에는 반드시 같은 기기에 두어야 합니다.

 

그렇다면, 두 텐서가 같은 기기에 있는지 어떻게 확인할 수 있을까요? 바로, is_cuda()함수를 사용하면 됩니다!

# CPU 텐서 
t = torch.randn(3,3)
t.is_cuda  # False

# GPU 텐서
t = torch.randn(3,3).cuda() # .cuda()로 GPU로 옮겨줄 수 있습니다.
t.is_cuda  # True

연산에는 대부분 GPU를 이용하기 때문에 False가 나온 텐서들에 대해서는 .cuda()함수를 이용해 GPU로 옮겨줄 수 있습니다. 

 

또 다른 방법으로는 .to() 함수를 이용할 수도 있습니다. 아래처럼 파라미터로 옮겨갈 디바이스를 지정해주면 됩니다!

new_tensor = x.to(device. dtype=torch.float64)

 

728x90
반응형

댓글