2021.10.29
블로그에서 검색 유입량이 제일 많은 글이었는데, 반년만에 아나콘다와 텐서플로 GPU를 재설치하려다보니 틀린 부분이 너무 많아서찔려서전면 재수정함.
책이나 웹 문서를 봐도 텐서플로 GPU 사용 방법을 제대로 설명하지 않아서 세팅할 때 헛갈리는 편이다. 코랩 말고 게임에나 쓰는 그래픽 카드를 다른 방식으로 사용해보고 싶은 사람들을 위해 정리.
1. 아나콘다
아나콘다는 가상환경을 만들 때 파이썬 버전을 지정할 수 있다. 특히 한국어 자연어 분석을 위해 koNLPy 등을 설치할 때 파이썬 3.9에서는 잘 되지 않는다.
아나콘다 공홈에서 무료 버전인 Individual Edition 설치파일을 내려받아 실행한다.
설치후 시작 프로그램에서 anaconda prompt나 anaconda powershell prompt를 찾아 실행한다. 전자는 명령 프롬프트로 실행하는데, 취향껏 선택하면 된다. 차이는 없다.
기본 활성화되는 base에서 해도 되지만, 가상환경을 만드는 게 보통 (나중에 문제가 생겼을 때 처음부터 다시 하는 게 가장 손쉽고 빠를 수 있으므로) 더 낫다고 하니 가상환경을 만든다.
호기심에 base를 클론해서 가상환경을 만들어봤는데, 텐서플로우를 설치하니 바로 의존성 오류가 떴다. 그래서
conda create -n <가상환경 이름> python=3.x
식으로 만들어야 한다. 파이썬 버전은 지정하지 않으면 설치한 아나콘다가 지원하는 가장 최신 버전으로 설치된다. 설치후 conda activate <가상환경이름>으로 활성화한 뒤에 pip install tensorflow로 설치한다.
텐서플로우와 텐서플로우 GPU
아나콘다에 tensorflow-gpu 등을 설치하는 방법이 있는데 하나같이 잘 되지 않았다. 아나콘다로는 파이썬 버전만 잡고, 나머지는 pip로 설치하는 게 속 편하다.
텐서플로우 GPU를 사용하기 위해서는 당연히 NVIDIA 그래픽 카드가 필요하다. 그리고 GPU 연산을 도와주는 CUDA Toolkit이라는 프로그램과 cuDNN이라는 라이브러리가 또 필요하다.
먼저 자신의 그래픽 카드 드라이버 업데이트를 추천한다. 최신 드라이버가 아니더라도 돌아가긴 하지만, 버전 체크가 귀찮다면 최신 업데이트가 맘 편하다.
nvidia-smi
드라이버 업데이트 후 위 명령어를 터미널에서 입력하면 GPU 정보가 출력되는데
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 496.49 Driver Version: 496.49 CUDA Version: 11.5 |
|-------------------------------+----------------------+----------------------+
맨 윗부분의 CUDA 버전을 확인한다. 저 버전에 맞는 CUDA Toolkit을 설치한다.
CUDA Toolkit
CUDA Toolkit은 설치 과정에서 Visual Studio(VS code와 다른 거다)가 필요하다고 한다. 쓸일이 없을 것 같지만 에러 나는 게 싫어서 설치했다.
공홈 아카이브에서 맞는 CUDA 버전을 찾아 설치하면 된다. 전체 설치파일보다는 네트워크 버전을 받는 걸 추천한다. 설치 파일은 2GB가 넘는 용량인데, 매번 실행할 때마다 압축파일을 푼다. 에러를 만나면 처음부터 반복해야하니 시스템 호환성 검사를 먼저 하고 전체 설치파일을 내려받는 네트워크 설치 파일이 낫다.
만약 예전에 CUDA Toolkit을 설치한 적이 있다면 지우는 걸 추천한다. 그래도
you already have a newer version of the nvidia frameview sdk
라는 설치 에러 문구를 만나게 될 것이다.
그럴땐 제어판의 프로그램 삭제 메뉴를 들어가서 NVIDIA Frameview SDK를 삭제해야 한다. 그래도 안되면 NVIDIA PhysX까지 지우란다. 난 첫번째 것만 지워도 해결됐다.
cuDNN
일종의 라이브러리다. CUDA Toolkit 버전에 맞는 걸 받아야 한다.
아카이브 페이지에서 보면 내 경우 11.5이니 11.x에 대응하는 8.2.0이 있다. 이걸 받는다. 윈도 버전은 압축파일로 되어 있다. 풀어서 CUDA 폴더(기본 옵션으로 설치했다면 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5다. 마지막 폴더명은 설치한 버전에 따라 다르다) 안에 동일한 폴더에 덮어씌운다. 별도의 폴더에 두고 환경변수를 따로 설정하기도 하지만 귀찮으니 덮어씌운다. 다만 환경변수에서 CUDA_PATH가 위 폴더로 지정되어 있는지는 확인해야한다. 보통 정상적으로 설치했다면 생성되어 있다.
GPU 확인하기
import tensorflow as tf
tf.config.list_logical_devices()
주피터 등에서 저렇게 넣고 실행해서 CPU와 GPU 정보가 같이 나오면 성공이다. 나오지 않는다면 대부분 CUDA와 cuDNN의 버전 문제다. 여러번 실패한 끝에 필수사항만 적은 거니 빠트린 부분이 없는지 체크해보자.
그런데 GPU가 인식돼도, 실제 코드를 작성해서 실행하면 아래와 같은 에러를 만날 수 있다.
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
이건 텐서플로우가 그래픽 카드의 모든 메모리를 다 쓰려고 하기 때문이라고 한다. 그래픽 카드가 100% 텐서플로우만을 위해 쓸 수는 없다. 그래서
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
# Currently, memory growth needs to be the same across GPUs
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Memory growth must be set before GPUs have been initialized
print(e)
위와 같은 코드를 앞에 삽입해두면 에러가 나지 않는다고 한다. 더 자세한 사항은 이 글을 참고.
실제로 CPU로 몇십분이 걸리는 예제를 GPU로 실행하면 시간이 대폭 단축되는 것을 알 수 있다.
반년 전에 처음 GPU 인식시키는데도 몇 시간이 걸렸고, 이번에 재설치를 하면서 다시 몇 시간이 걸렸다. 이 글을 보는 분들은 시간을 좀 더 아낄 수 있었으면 좋겠다.
'취미코딩 > python' 카테고리의 다른 글
koNLPy 설치할 때 난관들 (1) | 2021.10.30 |
---|---|
for 안에서 list.pop()을 쓰면 안되는 이유 (0) | 2021.06.13 |
아나콘다(Anaconda)를 VS Code에서 쓰기 (0) | 2021.01.11 |
파이썬으로 유튜브 고화질 영상 다운로드 하기 (0) | 2020.12.29 |
VS Code에서 anaconda 환경 설정할 때 유의점 (0) | 2020.12.27 |
웹서버 없이 티스토리 API OAuth2 인증 (0) | 2020.12.02 |
selenium에서 dropzone에 파일 업로드하기 (0) | 2020.11.17 |