DL 환경 설정 - Nvidia driver / CUDA toolkit / cuDNN 설치

soonhyung·2021년 12월 25일
2

기준 환경

  • Ubuntu 20.04 LTS
  • Nvidia RTX A6000 (Ampere arch)

Deep Learning 연구/개발을 하다보면 다양한 이유로 DL 환경을 변경하게 되는데 이때 설치된 그래픽카드와 Nvidia driver, CUDA, 그리고 cuDNN 호환성 이슈로 고생을 하게 된다. 이 문제로 Nvidia는 Nvidia-docker를 사용하여 독립적이고 완성된 GPU 환경을 구성하는 것을 강력히 권고 하고 있다. 현재 구성중인 workstation의 경우 Anaconda Env와 JupyterHub 조합을 우선적으로 감안하고 있어 Conda Env에서 잘 동작하는 DL 환경 구축과 Docker를 활용한 DL 환경 구축 모두 할 예정이다. 현재 셋업중이 workstation의 경우 Docker와 같은 완전 독립 환경과 Conda Env와 같이 선택적 독립 환경을 모두 지원하기 위해 host system에 CUDA와 cuDNN을 모두 적절히 설치해야 하는 임무가 있다.

현재의 DL환경 구축은 왕도는 없다. docker와 같은 독립된 환경을 충분히 고려하고 custom이 필요한 경우 Compatibility 를 최대한 잘 고려하여 환경 구성을 잘 하는 수 밖에..


Compatibility

현재 셋업중인 GPU가 RTX A6000으로 Ampere GPU Arch 이므로 아래의 사항을 검토해보면 드라이버 및 CUDA 버전의 선택지가 많지 않다.

  • A6000 지원 Nvidia driver

RTX A6000(Ampere GPU arch) 기반, tensorflow 위주로 설정할 예정이므로 TF 기준 compatibility를 고려 할 예정이다.

cuda-compatibility를 고려하면 Ampere GPU arch 기준 Nvidia driver를 450.36 이상을 사용해야 하지만 공식적으로 A6000을 지원하는 Nvidia driver를 살펴보면 460.x 부터 사용 가능하다. 즉, 450.xx driver 설치가 어려워 cuda 11.0을 사용하는데 제한적일 수 있다. 즉 A6000을 사용하는 경우 Nvidia driver 460.x이상을 설치 할 수 있고, cuda는 11.2 이상, cudnn 8.1이상, tensorflow-2.5.x 이상, python3.6이상 환경을 구성 가능하다.
backward compatibility가 원활하지 않은 TF를 생각하면 최신 아키텍쳐의 GPU를 쓰면 CUDA 11.1이하 환경을 보장하지 않기 때문에 TF1.x 또는 TF2.4 이하 환경에서 동작해야하는 lagacy code의 경우 정상적인 동작을 하지 않거나 퍼포먼스의 이슈가 있을 수 있다.

결론적으로 최종 설치는 아래와 같이 진행한다.

  • Nvidia-driver 470.82.01
  • CUDA 11.4, 11.2, 11.0
  • CUDNN 8.2.1.32 (CUDA 11.X 모두 호환)
  • tensorflow-gpu 2.7.0, 2.6.2, 2.5.2, 2.4.4

CUDA 11.0은 compatibility issue가 있고 TF2.4 환경을 구축하여 사용하는중 여러가지 warning이 발생은 하나 기본 Training 테스트를 통과하여 호환성 문제를 감안해서 유의하며 사용하기로 결정함.

nvidia driver 설치

이 단계를 skip 하고 바로 cuda 설치하는 단계로 이동하여 cuda와 nvidia-driver를 동시 설치해도 된다. 본인은 cuda버전에 맞는 nvidia-driver를 동시 설치하여 본 단계를 skip하였다.

드라이버 설치

총 3가지 방법으로 설치 가능 하다.
1. 자동 설치
2. 선택 설치
3. 수동 설치

Deep Learning 환경 설정시 nvidia driver가 민감한 편이기때문에 상황에 따라서 적절한 방법을 선택하는 것을 추천 한다. 출시한지 얼마 안된 VGA를 설치했거나 특정 버전의 환경을 구성해야 하는 Lagacy 환경의 경우, 수동 설치를 통해 최적의 버전 조합으로 세팅하여야 한다.

VGA, nvidia driver, cudnn, python 버전, TF or pytorch 등의 DL framework 버전 등을 고려 하여 최적의 버전 조합을 선택 해야함.

권장 설치

권장드라이버 자동으로 설치해주는 방법.
ubuntu에서 설치가 필요한 드라이버를 자동으로 설치 해준다. nvidia-driver를 비롯하여 현재 ubuntu 버전에서 최적의 최신의 드라이버를 설치해주기 때문에 가장 편리한 방법이다.

sudo ubuntu-drivers autoinstall

선택 설치

ubuntu에서 설치 가능한 드라이버중 원하는 버전의 드라이버를 설치하고자 하는 경우가 있을 것이다. 다음 명령어를 통해 ubuntu에서 설치 가능한 nvidia driver 버전 확인해서 출력해준다.

sudo apt-cache search NVIDIA driver metapackage

요즘은 ppa를 별도로 추가 하지 않아도 되어 편한 것 같다.

  • 특정 버전의 드라이버 설치
    선택 가능한 버전의 드라이버를 선택하여 설치 한다.
sudo apt install nvidia-driver-470

수동 설치

nvidia 드라이버를 직접 다운로드 받고 설치 하는 방식이다.

Nvidia Driver DownloadNvidia

ㅇ
본인은 제품 계열이 RTX A6000 이고 운영 체제는 Linux 64-bit, 그리고 다운로드 타입은 stable version을 원하므로 Production Branch를 선택한다.

만약 특정 드라이버를 선택해서 받고 싶다면 고급 검색을 통해 가능 하다.
Nvidia Driver Download - 고급검색

  • 설치 명령어
    실행 권한을 부여하고 설치 파일을 실행한다.
    파일명은 각자 받은 버전이 다르기 때문에 유의 바람.
chmod +x ./NVIDIA-Linux-x86_64-470.94.run
sudo sh ./NVIDIA-Linux-x86_64-470.94.run

driver 적용 및 확인

각자 맞는 방법으로 설치하였다면 재부팅 해준다.

reboot
  • driver 확인
    드라이버 설치가 끝난다면 다음 명령어를 통해 확인 한다. Driver 버전과 CUDA 버전 그리고 현재 장착된 장치의 정보를 확인 할 수 있다.
nvidia-smi


CUDA Toolkit 설치 (Multi version)

Driver가 지원가능한 범위내에서 적정한 CUDA 버전을 선택하여 설치해야 하며, 위에서 언급한 대로 다양한 CUDA 버전을 동시에 설치 할 예정이다. 또한 위 단계에서 Driver설치를 하지 않았다면 이번 단계에서 Cuda와 Nvidia Driver를 동시에 설치 진행한다.

설치할 버전은 다음과 같다

  • CUDA 11.4
  • CUDA 11.2
  • CUDA 11.0

검토

CUDA 11.4와 이와 함께 배포되는 Nvidia driver 470.82.01 을 동시 설치 한다. 메인 버전(11.4) 설치가 완료되면 다른 CUDA 버전도 설치 한다.
archive에서 직접 버전을 선택 한다. dependency issue를 쉽게 처리하기 위해 installer Type은 runfile을 선택한다.

기존 드라이버 삭제

기존 드라이버와 설치할 드라이버 또는 CUDA 버전간의 충돌의 이유로 삭제가 필요한 경우 설치 전 기존 driver를 삭제 한다.

cuda를 비롯해 함께 설치하는 Nvidia-driver는 자체적으로 uninstaller을 제공하기도 한다

sudo nvidia-uninstall
sudo /usr/local/cuda/cuda-uninstall

만약 Driver와 Cuda를 별도 설치하였다면 아래의 명령을 통해 확인 후 삭제 한다.

sudo apt remove --purge '^nvidia*'
sudo apt remove --purge '^cuda*'
sudo apt autoremove
sudo apt autoclean

dpkg를 통해서 한번 더 확인하고 확인되는 패키지를 모두 선택하여 삭제 하여야 한다.

sudo dpkg -l | grep nvidia
sudo dpkg -l | grep cuda
sudo apt-get remove --purge {지울 패키지}

설치

driver 470에 CUDA 11.4를 메인버전으로 하고 추가로 CUDA 11.2, 11.0을 설치 한다.

설치 전에 모듈을 끄는 것을 추천 한다.

# milti-user 모드로 전환 (화면 끄기)
systemctl isolate multi-user.target
# GUI 재 활성화 (화면 켜기, 설치가 모두 끝나면 아래를 실행 할 것.)
systemctl start graphical.target

Driver + CUDA Toolkit설치

base installer - Installation Instructions 나온 script 그대로 실행하면 인스톨러가 동작한다.

설치 초기에 기존 드라이버가 있고 이것을 제거하고 설치할 것을 권고 하는데 무시하고 설치해도 대부분 잘 진행되고, 혹시나 깔끔하게 설치하고자 한다면 위에 언급한 기존 트라이버 삭제 프로세스를 진행할 것.

--------------------------------------------------------------------------------
|  End User License Agreement                                                  |
|  --------------------------                                                  |
|                                                                              |
|  NVIDIA Software License Agreement and CUDA Supplement to                    |
|  Software License Agreement. Last updated: October 8, 2021                   |
|                                                                              |
|  The CUDA Toolkit End User License Agreement applies to the                  |
|  NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA                    |
|  Display Driver, NVIDIA Nsight tools (Visual Studio Edition),                |
|  and the associated documentation on CUDA APIs, programming                  |
|  model and development tools. If you do not agree with the                   |
|  terms and conditions of the license agreement, then do not                  |
|  download or use the software.                                               |
|                                                                              |
|  Last updated: October 8, 2021.                                              |
|                                                                              |
|                                                                              |
|  Preface                                                                     |
|  -------                                                                     |
|                                                                              |
|------------------------------------------------------------------------------|
| Do you accept the above EULA? (accept/decline/quit):                         |
| accept                                                                       |
|------------------------------------------------------------------------------|
--------------------------------------------------------------------------------
| CUDA Installer                                                               |
| - [X] Driver                                                                 |
|      [X] 470.82.01                                                           |
| + [X] CUDA Toolkit 11.4                                                      |
|   [X] CUDA Samples 11.4                                                      |
|   [X] CUDA Demo Suite 11.4                                                   |
|   [X] CUDA Documentation 11.4                                                |
|   Options                                                                    |
|   Install                                                                    |
|                                                                              |
| Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options |
--------------------------------------------------------------------------------

이번 셋업 과정에서는 Driver만 설치 하는 과정을 스킵하고 기존 Driver도 완전히 삭제하여 진행하였으므로 첫번째 CUDA Toolkit을 설치할때 Driver를 같이 Install 해주어야 한다. 그 외 Samples, Demo, Documentation 등은 필요없다면 제외해도 무방하다.

설치 과정중 이슈 발생시 주로 아래의 위치에서 학인 가능하다.
/var/log/cuda-installer.log
/var/log/nvidia-installer.log

설치중 에러는 log를 보고 적절히 대처하면 대부분 해결 된다.

===========
= Summary =
===========

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-11.4/
Samples:  Installed in /home/{사용자명}/, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-11.4/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.4/lib64, or, add /usr/local/cuda-11.4/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.4/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Logfile is /var/log/cuda-installer.log

다음과 같은 출력을 보았다면 설치에 성공한 것이다.
출력 메세지에 나온 것처럼 CUDA bin 경로를 /etc/profile에 추가하고, CUDA lib 경로를 LD_LIBRARY_PATH 또는 /etc/ld.so.conf 에 추가 해주자. CUDA가 설치될때 /usr/local/cuda 로 심볼릭 링크가 걸려있을 것이므로 /usr/local/cuda/ 로 변경하여 작업 한다. (필요시 lib 경로를 각 CUDA 버전마다 설정하면 순차적으로 lib을 바라보게 만들 수도 있다)

# /etc/prifile
export PATH=$PATH:/usr/local/cuda/bin
export CUDADIR=/usr/local/cuda
# /etc/ld.so.conf
include /usr/local/cuda/lib64

추가 CUDA Toolkit 설치

추가로 CUDA Toolkit 11.2, 11.0을 설치 한다. Driver + CUDA Toolkit설치와 동일한 방식으로 원하는 버전을 선택하여 설치를 진행한다.

앞서 언급한 것 처럼 이미 더 높은 버전의 Driver를 설치 하였으므로 이번 설치에는 Driver 설치는 해제한다.
또한 Options -> CUDA Toolkit 설정을 통해 이미 설정된 Symbolic link를 덮어쓰지 않도록 해제한다.

--------------------------------------------------------------------------------
| CUDA Installer                                                               |
| - [ ] Driver                                                                 |
|      [ ] 460.32.03                                                           |
| + [X] CUDA Toolkit 11.2                                                      |
|   [ ] CUDA Samples 11.2                                                      |
|   [ ] CUDA Demo Suite 11.2                                                   |
|   [ ] CUDA Documentation 11.2                                                |
|   Options                                                                    |
|   Install                                                                    |
|                                                                              |
| Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options |
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
| CUDA Toolkit                                                                 |
|   Change Toolkit Install Path                                                |
|   [ ] Create symbolic link from /usr/local/cuda                              |
| - [X] Create desktop menu shortcuts                                          |
|      [X] All users                                                           |
|      [ ] Yes                                                                 |
|      [ ] No                                                                  |
|   [X] Install manpage documents to /usr/share/man                            |
|   Done                                                                       |
|                                                                              |
| Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options |
--------------------------------------------------------------------------------

설치 확인

# NVIDIA System Management Interface
nvidia-smi

# CUDA version
nvcc -V

CUDA 설치 - Troubleshooting

ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver, and must be disabled before proceeding.


cuDNN 설치

CUDA 설치가 완벽히 끝난 이후 CUDA 버전에 맞는 적절한 cuDNN 을 다운로드 받아 설치를 시작한다. 이 프로세스는 Nvidia developer 로그인이 필요하다.

CUDA 멀티 버전을 설치하는 경우에도 설치하고자 하는 CUDA의 모든 버전을 다 설치하고난 후에 cuDNN을 설치 한다.
또한 cuDNN을 설치한 이후 CUDA 버전중 일부를 삭제 (cuda-uninstall)를 진행한 경우 cuDNN 재 설치 해야한다.


CUDA 11.4, 11.2, 11.0을 멀티 버전으로 설치 하였으므로 이를 모두 지원 가능한 cuDNN v8.2.1 for CUDA 11.x를 다운 받는다.

설치

설치 방법은 두 가지가 있다.
1. library 압축 파일을 받아서 수동 설정
2. deb 파일을 받아서 패키지 방식으로 설치

lib 수동 설치 방식

이 방법은 멀티 버전이 아닌 한개의 CUDA 버전을 설치 했을때 추천한다.

cuDNN Library for linux(x86_64)를 다운 받아서 설치한다.

tar -xvf cudnn-11.3-linux-x64-v8.2.1.32.tgz

다운받은 압축 파일을 적절한 위치에 압축 해제 한다.

sudo cp ./cuda/include/cudnn*.h /usr/local/cuda/include 
sudo cp -P ./cuda/lib64/libcudnn* /usr/local/cuda/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

deb 패키지 설치 방식

다음을 다운 받아서 설치한다.

  • cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb)
  • cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb)
  • cuDNN Code Samples and User Guide for Ubuntu20.04 x86_64 (Deb)

Runtime 만 설치하여도 되나 cuDNN의 설치가 제대로 되었는지 확인을 위해 Code Sample을 바로 돌려보기 위해 Developer lib, Code Sample 도 함께 설치 한다.

# Install the runtime lib
sudo dpkg -i libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb

# Install the dev lib
sudo dpkg -i libcudnn8-dev_8.2.1.32-1+cuda11.3_amd64.deb

# Install code samples
sudo dpkg -i libcudnn8-samples_8.2.1.32-1+cuda11.3_amd64.deb
  • 설치 확인
ldconfig -p | grep cudnn
  • 검증
    cuDNN 설치가 끝난 이후 테스트 검증을 위해 cuDNN sample을 적당한 곳으로 복사한다.
# copy cuDNN sample to current path
cp -r /usr/src/cudnn_samples_v8/ ./

mnist 를 통해서 테스트를 진행한다.

cd cudnn_samples_v8/mnistCUDNN/
make
./mnistCUDNN

실행된 이후 마지막 부분에 Tests passed! 가 출력되면 성공적으로 설치 된 것이다.

cuDNN - troubleshooting

  • 검증시 make 하려고 할 때 발생
    test.c:1:10: fatal error: FreeImage.h
sudo apt-get install libfreeimage3 libfreeimage-dev

4개의 댓글

comment-user-thumbnail
2022년 1월 4일

A6000은 460.67 이후에 지원. (단독 driver로는 460.56 부터).
Amphere GPU는 450.36부터 지원된다고 나와있지만 A6000은 460.56부터 지원되기 때문에 그 이상 버전을 설치 할 것. (아마 450.36 부터 지원되는건 RTX 30xx 일 것으로 예상 )
https://www.nvidia.co.kr/Download/Find.aspx?lang=kr

답글 달기
comment-user-thumbnail
2022년 3월 17일

rtx6000인데 덕분에 설치 편하게 잘 했습니다. 감사합니다 :)

1개의 답글
comment-user-thumbnail
2022년 5월 28일

감사합니다! 덕분에 드라이버 다시 잘 깔았네요

답글 달기