[Pytorch] 메모리 효율적으로 사용하기
·
Pytorch
딥러닝으로 task를 진행할 때 여러 모델을 연속적으로 사용해야 하는 경우가 종종 있습니다. 이 때 pytorch에서 메모리를 좀 더 효율적으로 사용할 수 있는 방법에 대해 작성해보겠습니다. 1) 먼저 사용할 모델을 gpu로 옮겨줍니다.model.to($device) 2) 모델의 사용이 끝나면 바로 cpu로 옮겨줍니다.model.to('cpu') 3) garbage collect를 실행하고, 메모리를 비워줍니다.gc.collect()torch.cuda.empty_cache()torch.cuda.ipc_collect()
[Pytorch] Inference Time Check
·
Pytorch
딥러닝이 일상 생활에서 사용되려면 기본적으로 굉장히 빠른 인퍼런스 속도를 갖춰야 합니다. 때문에 millisecond 단위로 속도를 재고 평가해주어야 합니다. ​ ​ ▶Asynchronous execution 딥러닝은 비동기 방식으로 작동하기 때문에 높은 효율성을 갖습니다. 그렇다면 왜 비동기 방식으로 작동할까요? => 먼저, 여러 개의 batch를 inference 하는 상황을 생각해보겠습니다. 첫번째 batch가 GPU에서 연산이 되고 있을 때, GPU의 작업이 다 끝날때까지 CPU는 어떻게 동작해야 할까요? 마냥 기다리기만 한다면 이는 매우 비효율적일 것입니다. 때문에 CPU는 GPU의 작업이 모두 끝나지 않더라도 다음 batch 를 위한 작업을 해둬야 합니다. 바로 이점 때문에! 딥러닝 모델의 G..
[Pytorch] loss nan 해결하기
·
Pytorch
신경망을 학습시키다 보면 학습 도중 loss 가 nan 값이 등장하는 경우가 발생하기도 합니다. nan loss나 nan output이 발생했을 때 원인을 찾고 해결할 수 있는 방법에 대해 포스팅 하겠습니다. ​ ​ ▶ nan 이 발생한 연산 찾기 먼저 torch. autograd 함수중에서 nan loss 가 발생하면 그 즉시 실행을 멈추고 nan을 유발한 코드 라인을 찾아야합니다. 이를 쉽게 해주는 함수가 바로 출력해주는 함수가 autograd.set_detect_anomaly() 입니다. autograd.set_detect_anomaly(True) 스크립트 제일 위에 위 코드를 추가해주면, 어느 라인에서 nan이 발생했는지 터미널 창의 문구를 통해 알 수 있습니다. 좀 더 구체적으로 이 함수는 au..
[Pytorch] Tensor Manipulation
·
Pytorch
Pytorch는 텐서의 형을 변환해주는 다양한 함수들을 제공해줍니다. 이번 포스팅에서는 텐서의 형변화를 위한 아래 4가지 함수의 사용법과 차이점에 대해 설명해보겠습니다. - view() - reshape() - transpose() - permute() ​ ​ ▶ view( ) 와 reshape( ) 두 함수 모두 numpy의 reshape( ) 함수를 기반으로 하고 있습니다. 먼저 두 함수의 간단한 사용법 부터 설명하겠습니다. view()와 reshape() 모두 입력으로 shape을 받습니다. 원하는 차원의 shape을 적어주면 바로 형변환하여 리턴해줍니다. import torch x = torch.arange(12) print(x) # tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8,..