[Pytorch] num_workers가 성능에 미치는 간접적 영향
·
Pytorch
딥러닝으로 분류모델 학습도중, validation accuracy가 n epoch =>.  "class A" Acc: 98.21%,   "class B" Acc: 98.67%n+1 epoch =>   "class A" Acc: 28.96%,   "class B" Acc: 99.88%이렇게 데이터가 적은 쪽 클래스의 정확도가 대폭 감소하는 현상이 발생했습니다.원인을 찾아보니 num_workers의 값이 크면 발생할 수 있는 현상이라고 합니다. - num_workers란?  num_workers는 PyTorch의 DataLoader가 데이터를 로드할 때 사용할 서브 프로세스(worker)의 개수를 의미합니다.기본적으로 DataLoader는 데이터를 배치 단위로 불러오는데, num_workers를 늘리면 여러..
[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..