Table of Contents
들어가면서, #
딥러닝 프로젝트를 수행하기 위해 GPU 서버를 준비하고 난 뒤, python과 tensorflow만 설치하고 즐겁게 코딩한다면 학습 도중 유쾌하지 못한 속도를 경험하게 될 것이다. 리눅스는 환경설정을 잘해주지 않으면 아무리 필요한 소프트웨어를 설치해도 인식을 하지 못하기 때문에 용량만 차지하는 쓸모없는 파일이 될 뿐이다. 마찬가지로 그냥 tensorflow 만 설치하면 GPU를 인식하지 못해서 CPU training & prediction만 진행이 될 뿐이다. 간단한 task라면 CPU나 GPU의 속도 차이가 거의 나타나지 않을 수 있지만, 데이터 세트가 고용량이고 task가 복잡할수록 GPU tensorflow는 CPU보다 어마어마한 빠른 속도로 동작한다. 이번 포스팅에서는 GPU를 활용한 딥러닝 tensorflow를 즐기기 위해 리눅스 서버 세팅 경험을 정리해보고자 한다.
아래 내용을 읽기 전, 주요 사항으로 두 가지를 먼저 언급한다.
- GPU를 이용하는 tensorflow를 설치하기 위해선 그래픽카드, CUDA toolkit, cuDNN, python, tensorflow의 5박자가 맞아야 한다.
- 리눅스 서버엔 여러 가지 버전의 tensorflow를 함께 설치할 수 있다.
가장 중요한 두 가지 테이블이 있다. 아래 나온 두 가지 테이블로 5가지 박자를 맞춰주면 된다.
1. Nvidia driver와 CUDA toolkit 호환 테이블
그림 1. NVIDIA 공식 홈페이지 - CUDA & GPU Driver compatibility. 출처:3
호환 테이블을 보면 특정 CUDA x.x 버전을 지원하는 최소 리눅스 nvidia 그래픽 드라이버 버전이 명시되어있다. 자신의 그래픽 드라이버 버전을 확인하고 호환되는 CUDA tookit버전을 설치해야 한다. 테이블에 따르면 최신 그래픽 드라이버를 설치하면 이전 CUDA는 호환이 잘되는 것처럼 보인다.
2. tensorflow-gpu, python, cuDNN, CUDA 호환 테이블
그림 2. Tensorflow 공식 홈페이지 - tensorflow & other libraries compatibility. 출처:3
1번과 달리 tensorflow 버전 별로 세밀히 세분되어 있다. 테이블에 명시된 정확한 버전을 맞춰주는 게 좋다.
설치 파일, 라이브러리 다운로드 및 설치 #
그럼 다섯 박자를 맞추기 위해 다운로드를 진행해야 한다. 각각 다운로드 방법을 간략히 설명하겠다.
(1) Nvidia GPU driver :
- NVIDIA GPU DRIVER 다운로드 링크
- 위의 링크에서 자신의 그래픽 드라이버와 OS버전을 입력하여 필요한 버전을 다운로드 하여 설치한다.
- 참고로 직접 다운로드 하지 않아도
apt-get
으로도 설치 가능하다고 한다.1 - 설치 이후 재부팅을 꼭 진행해야 그래픽을 인식한다.
- 잘 설치되었는지 확인:
nvidia-smi
(2) CUDA toolkit:
- CUDA toolkit 아카이브 다운로드 링크
- 위의 링크에서 필요한 버전을 다운로드 하여 설치한다.
- 설치가 완료되면 환경변수
LD_LIBRARY_PATH
에 설치된 CUDA 경로를 export를 꼭 해야 한다.
ex)
# vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-xx.x/lib64
- 잘 설치되었는지 확인:
nvcc -V
(3) cuDNN
- cuDNN 아카이브 다운로드 링크
- 위의 링크에서 필요한 버전을 다운로드 하여 설치한다.
- 다운로드시 nvidia 사이트의 로그인이 필요하다.
- 위의 설치 파일과 다르게 라이브러리 파일이며 압축을 풀고 똑같은 구조로 이루어진 CUDA toolkit 위치에 복사를 해주면 된다.
ex)
tar -xvf cudnn-11.2-linux-x64-v8.1.0.77.tgz
sudo cp ./cuda/include/* /usr/local/cuda/include/
sudo cp -P ./cuda/lib64/* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
(4) tensorflow 설치
- conda 나 pip로 설치가 가능한데 conda로 설치 시 자동으로 맞는 CUDA, cuDNN을 설치한다. 만약 설치된 버전이 호환이 잘된다면 너무나 기쁘지만, 호환이 안 된다면 복잡해 질 수 있으므로 필자의 경험으론 pip를 통하여 설치하기를 추천한다.
- 만약 tensorflow 2.x을 설치한다면
pip install tensorflow
로 GPU 버전이 설치되지만 이전 버전인 경우는pip install tensorflow-gpu
로 설치해야 GPU 버전이 설치된다.
리눅스에 여러 가지 버전의 tensorflow-gpu를 설치하고 쓰고 싶다면? #
만약 리눅스에 여러 가지 버전의 tensorflow를 설치하여 쓰고 싶다면 가상환경을 이용하여 독립된 가상환경마다 서로 다른 tensorflow, python을 호환에 맞게 설치해줘야 한다. 그러나 5박자를 맞추기 위해선 GPU driver, CUDA, cuDNN도 맞춰줘야 하는 번거로움이 생긴다. 위에 언급한 사항을 바탕으로 하나씩 해결해 보겠다.
- 그래픽 드라이버
그래픽 드라이버는 여러 개를 설치하여 환경변수로 제어하는 것이 불가능한듯하다. 운이 좋게도 호환 테이블을 보면 호환을 위한 최소사양을 명시해놨기 때문에 적당히 최신인 드라이버 버전을 설치하는 것만으로도 웬만한 CUDA toolkit과 호환이 될 것이다.
- CUDA, cuDNN
해당 부분은 호환 테이블 2번을 바탕으로 필요 버전을 다운로드하여 리눅스 /usr/local/
위치에 중복으로 설치할 수 있다. 다만 설치 이후에는 환경변수를 이용하여 각 가상환경에 진입 시 올바른 버전의 CUDA를 바라 볼 수 있게 LD LIBRARY PATH
를 잘 설정해줘야 한다.
참고. conda 가상환경마다 시스템 환경변수를 따로 설정하고 싶다면? #
만약 tensorflow-gpu를 버전별로 설치하고 싶고 각 환경이 문제없이 동작함을 확인한 상태라면 매번 가상환경을 로드 한 뒤 LD LIBRARY PATH
를 export 하는 게 상당히 피곤하다 생각될 것이다. 특히 jupyter를 주 코딩환경으로 이용하는 필자는 jupyter 커널에 따라 환경변수 문제가 생겨서 애를 먹곤 했다.
만약 가상환경을 conda를 이용한다면 이런 문제를 쉽게 해결할 수 있는데, 아래 코드와 같이 conda 가상환경 path 밑에 activate.d, deactivate.d 폴더를 생성하고 그 밑에 명령어들을 .sh로 기술해주면 가상환경이 로드하거나 해지할 때 명령어들을 실행해준다.
# 가상환경에 진입
conda activate 가상환경이름
# 가상환경 path로 이동하여 폴더와 파일을 생성
cd $CONDA_PREFIX
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh # 여기에 명령어를 기술해준다.
touch ./etc/conda/deactivate.d/env_vars.sh # 여기에 명령어를 기술해준다.
ex) vim activate.d/env_vars.sh
export CUDADIR=/usr/local/cuda-11.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDADIR/lib64
ex) vim deactivate.d/env_vars.sh
unset CUDADIR
unset LD_LIBRARY_PATH
유의할 점 #
위 포스팅 내용은 tensorflow-gpu를 설치하는 여러 방법의 하나며 필자의 경험상 그래픽카드를 인식하지 못하는 문제가 생겼을 때 가장 자세히 해결하는 방법이다. 간혹 운이 좋다면 위의 글처럼 진행하지 않고 conda를 설치하여 tensorflow-gpu 만 설치했는데도 GPU가 잘 동작하는 환경이 구축될 수도 있다. (아주 운이 좋은 사례거나, 최신 tensorflow를 설치했는데 호환이 잘되거나 또는 딥러닝 전용 클라우드 환경일 것이다) 만약 위의 내용이 이해하기 어렵다면 우선 conda를 이용하여 tensorflow를 설치해보고 테스트를 먼저 진행하길 추천한다.
참고 싸이트 #
설치 도중 막힌다면 아래 참고 사이트 목록을 정독하길 바란다.
- 블로그 - Ubuntu에 여러 버전의 CUDA 설치하기
- 블로그 - Ubuntu 20.04에 CUDA Toolkit 11.2, cuDNN 8.1.0, Tensorflow 설치하기
- 블로그 - Linux tensorflow-gpu 사용하기
- 블로그 - 파이선 가상환경 환경변수 설정1
- NVIDIA 공식홈페이지 - CUDA & GPU Driver compatibility2
- Tensorflow 공식홈페이지 - tensorflow & other libraries compatibility3