(Problem): InternalError: CUDA runtime implicit initialization on GPU:0 failed. Status: all CUDA-capable devices are busy or unavailable
(Solution) GPU 효율적으로 사용하기 위한 세팅 필요
1. 주피터 노트북 셧다운
가장 기초?적인 시도는 사용중이 주피터 노트북을 셧다운 시키는 것입니다.
사용하지 않는 주피터 노트북은 셧다운 시킴으로서 사용하고 있는 노트북만 활성화해주세요.
2. GPU 메모리 초기화
셧다운했는데도 nvidia-smi 명령어를 터미널에 쳤을때, 여전히 GPU 메모리가 10% 이상 사용중이라 뜬다면?https://kaen2891.tistory.com/28위의 블로그에서 보여준 예시를 적용해보세요. cuDNN은 그래픽 드라이버와 GPU사용을 돕는 딥러닝 라이브러리입니다. GPU를 사용하는 작업에서는 함께 가는 친구입니다
아마도 저희 0번 노드에서 설치를 했을거에요 wget
이 해줬을 겁니다 ㅎ
위에서의 방법은 tensorflow 1.x에 해당하는 거 같습니다.
3. 효율적인 텐서플로우, 케라스 사용
케라스, 텐서플로우에서 GPU 메모리를 다 잡아먹을 때가 있어요. 이 때 방법은 2가지 정도? 있는 거 같아요.
모델 학습처럼 GPU가 필요한 작업은 GPU를 쓰고 그외 작업은 CPU를 쓰는 방법입니다. 번거로울 수 있습니다.
그리고, 아직 저도 적용을 안 해봤지만, 생각보다 효과가 없고 연산속도만 느려지는 슬픔이.. 있을 수 있어요
좀 더 친절한 설명이 필요하다면, 아래 블로그에서 확인해보실 수 있습니다!
https://datamasters.co.kr/33?category=783262
그리고 2번째 방법은 GPU 메모리를 제한하는 방법입니다. 주로 이 방법을 많이 쓰는거 같아요.
저는 아직까지는 메모리 부족 현상을 겪은 적이 없긴 하지만 주로 코드에 TF_FORCE_GPU_ALLOW_GROWTH = True로 설정해주는 방법을 쓰고 있어요. 하지만 이 방법도 단점은 존재한다는 점을 유의해주세요!
메모리 제한하는 방법도 차이가 있어서 텐서플로우 공홈에서의 내용을 참고해보세요~!
https://www.tensorflow.org/guide/gpu?hl=ko#gpu_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%A0%9C%ED%95%9C%ED%95%98%EA%B8%B0
위에 링크에 해당하는 공홈 문서의 번역본입니다.
4. 이것도 저것도 안되는데, GPU를 써야할때는 어떻게 해야할까? 지금 당장 주피터 노트북을 쓰고 싶다?
코랩을 임시로 사용하세요! Colaboratory라고 구글 드라이브에서 구글계정만 있으면 GPU서버를 무료로 사용할 수 있습니다. 랜덤으로 GPU가 할당되지만 P100과 같은 괜찮은 GPU들이 할당되기 때문에 공부하기에는 아주 적당할 거에요!
하지만, 코랩도 메모리 제한을 내부 정책상 두고 있어서 정말 계속 쓰기 보다, 너무 많이 쓴 사람은 GPU를 며칠 못 쓰게하거나, 성능이 떨어지는 GPU서버를 할당해주기 때문에 1) 안 쓰는 주피터 노트북 셧다운 2) 효율적인 GPU 사용 설정은 해두고 쓰시는 걸 추천드립니다! 1번만 틈틈이 해주셔도 좋습니당! 화이팅 입니다~~