사소한 부분이지만 pytorch 프레임 워크를 사용하여 학습이나 GPU 연산을 할 때

torch를 매번 device에 올려주는 것이 번거로울 수 있다 

 

 

 아래는 보통 일반적으로 python에서 pytorch를 사용할 때 이미지 등의 텐서를 gpu로 설정해주는 코드이다 

 

 

 

또한 일반적으로 numpy를 torch tensor로 변형하면 아래와 같이 cpu에 로드되면서 tensor로 변형된다 

 

 

위 두가지 경우 새로운 tensor를 생성하면 cpu에 로드되며,

아래의 경우처럼  numpy 등 타 data type에서 tensor로 변형했을 시 본래의 data type을 그대로 이어받게 된다 

 

그러나 tensor 연산 시 두 텐서가 data type이 다르거나 로드되어있는 디바이스가 다르면 연산이 진행되지 않는다 

(아래는 두 tensor의 device가 다른 경우)

 


 

위와 같은 두 가지 귀찮은 경우를 방지해 주기 위해 아래와 같은 코드를 최상단에 적어주면 

tensor의 기본 device와 data type을 설정할 수 있어 보다 편리한 디버깅 및 학습이 가능하다 

 

torch.set_default_tensor_type('torch.cuda.FloatTensor')
# () 내부에 원하는 device와 data type 설정

 

 

torch 세팅 후 rand로 tensor 설정해주자 가장 첫번째 사진처럼 
torch.rand (기본 설정 data type=double)로 tensor를 생성해도 
gpu에 로드되어있는 float32타입의 tensor가 생성되는 것을 확인할 수 있다. 

 

 


소소한 기능이고 코딩 습관에 따라 오히려 불편할 수도 있겠지만, 
소소하게 편리한 학습이 가능한 코드 발견해서 로그! 😀

 

 

#Expected all tensors to be on the same deivce

#tensor device 설정

#Can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first

+ Recent posts