[PyTorch] GPU에서 텐서 사용하기

2022. 7. 12. 18:58·프로그래밍 Programming/파이썬 Python

Tensorflow와 달리 PyTorch는 사용하는 텐서를 따로 gpu에 올려주는 작업을 해야한다.

그러나 PyTorch는 기본적으로는 cpu를 사용한다.

 

그러나 딥러닝 관련 연구나 프로젝트를 수행하려는 사람들은 gpu를 가진 경우가 많을 것이다.

따라서 웬만하면 gpu를 사용하는 것이 더 좋으므로 gpu를 default로 설정하는 게 낫다.

 

또한 나의 경우에는 메모리를 좀 더 차지하더라도 정밀하게 계산했으면 좋겠어서 double형 (또는 float64형)을 기본적으로 사용하고 싶었다.

 

이 글에서 다루는 내용은 다음과 같다.

 

1. Tensor를 gpu에서 사용하도록 하는 방법

2. Default 설정을 바꿔서 gpu를 쓰도록 지정하는 방법

 

 


 

1. Tensor를 gpu에서 사용하도록 하는 방법

tensor를 gpu로 사용하는 방법은 tensor를 생성할 당시에 data type을 지정하는 방법

torch.zeros([2, 4], dtype=torch.int32)
cuda0 = torch.device('cuda:0')
torch.ones([2, 4], dtype=torch.float64, device=cuda0)

다음과 같이 dtype에 data type을 넣어놓고, device도 지정할 수 있다.

 

또는 

 

x = torch.tensor([1,2,3])
y = x.to(device. dtype=torch.float64)

tensor를 만들어놓고 device와 type을 전환하는 방법이 있다.

 

 


2. Default 설정을 바꿔서 원하는 데이터타입과 gpu를 쓰도록 지정하는 방법

 

다음 링크에 들어가면 torch에서 사용하는 data type을 알 수 있다.(아래 그림 참고)

 

 

위의 내용에서 CPU tensor와 GPU tensor 쪽을 참고해서

 

torch.set_default_tensor_type(torch.cuda.DoubleTensor)

아래 코드를 쓰면

내가 만드는 모든 텐서의 default 속성이 다음과 같이 정해진다.

 

 


추가로 내가 쓰던 텐서를 numpy로 전환할 때는

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

다음과 같은 TypeError가 발생한다.

 

이 경우에는 

tensor.cpu() # cpu로 옮기기
tensor.cuda() # cuda(gpu)로 옮기기

를 써서 기기를 바꿔서 사용하자.

 

또한 cpu()로 바꾸기 전에 detach() method를 써서 grad 연산에 영향이 안 가도록 할 수도 있다.

저작자표시 비영리 변경금지

'프로그래밍 Programming > 파이썬 Python' 카테고리의 다른 글

[PyTorch] gradient descent로 변수를 직접 update할 때 주의할 점  (0) 2022.07.14
[PyTorch] DataLoader shuffle 기능 사용 시, RuntimeError: Expected a 'cuda' device type for generator but found 'cpu'  (0) 2022.07.14
[PyTorch] PyTorch 다차원 텐서 곱(matmul)  (0) 2022.07.10
[에러기록] matplotlib의 imshow를 쓸 때 커널이 죽는 현상 (추가)  (4) 2022.07.09
[PyTorch] PyTorch에서 GPU 사용  (2) 2022.07.07
'프로그래밍 Programming/파이썬 Python' 카테고리의 다른 글
  • [PyTorch] gradient descent로 변수를 직접 update할 때 주의할 점
  • [PyTorch] DataLoader shuffle 기능 사용 시, RuntimeError: Expected a 'cuda' device type for generator but found 'cpu'
  • [PyTorch] PyTorch 다차원 텐서 곱(matmul)
  • [에러기록] matplotlib의 imshow를 쓸 때 커널이 죽는 현상 (추가)
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (458)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Dear abby
    논문작성
    수치해석
    인공지능
    수식삽입
    고체역학
    에러기록
    matplotlib
    옵시디언
    WOX
    obsidian
    우분투
    IEEE
    Linear algebra
    딥러닝
    텝스공부
    텝스
    논문작성법
    생산성
    Numerical Analysis
    JAX
    pytorch
    MATLAB
    Statics
    ChatGPT
    Julia
    teps
    LaTeX
    Zotero
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[PyTorch] GPU에서 텐서 사용하기
상단으로

티스토리툴바