본문으로 바로가기

Ubuntu에 여러 버전의 CUDA 설치하기

category Programming/Etc 2021. 1. 25. 21:50

여러 종류의 딥러닝 framework를 쓰다보면 여러 버젼의 CUDA가 필요하곤 합니다... 그래서 제가 겪은 경험에 의해 여러 CUDA를 설치하는 법을 공유합니다.

 

우선 nvidia 사이트에서 cuda 설치파일을 다운받을 수 있습니다. 

https://developer.nvidia.com/Cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=runfilelocal

 

CUDA Toolkit 11.2 Downloads

Select Target Platform Click on the green buttons that describe your target platform. Only supported platforms will be shown. By downloading and using the software, you agree to fully comply with the terms and conditions of the CUDA EULA. Operating System

developer.nvidia.com

본인의 환경에 맞게 선택하시면 됩니다. 설치파일은 저는 runfile을 선호합니다.

deb 패키지로도 여러 종류를 깔 수 있는 지 안해봐서 모르겠네요.

먼저 이렇게 자신에게 필요한 종류의 cuda installer들을 다운로드 해주세요. 

1. 실행중인 모듈 끄기

# 화면 끄기
systemctl isolate multi-user.target

# 나중에 켜기
systemctl start graphical.target

nvtop 등도 다 꺼야합니다. lsmod | grep nvidia 로 확인했을 때 아무것도 없어야 전부 종료된 겁니다.

 

2. 기존 드라이버 & CUDA 삭제

# 드라이버 삭제
sudo apt remove --purge '^nvidia-.*'

# CUDA 삭제
sudo apt remove --purge "*cublas*" "cuda*" "nsight*" 

# CUDA 파일 삭제
/usr/local/cuda-9.0/bin/uninstall_cuda_toolkit_9.0.pl
rm -rf /usr/local/cuda-10.2/

꼭 기존 버젼의 CUDA를 지우지는 않고 싶을 수도 있습니다. 하지만 더 최신 버젼의 CUDA를 깔기 위해서는 드라이버는 지워주셔야 합니다. 왜냐하면 더 최신 버젼의 CUDA는 더 최신 버젼의 Driver를 요구하기 때문에... 최신 Driver에 예전 버젼 CUDA는 설치가 가능하지만 반대는 불가능 합니다. 따라서 설치하고자 하는 CUDA버젼들 중에 가장 높은 버젼에 맞춰 드라이버를 설치해야합니다.

 

CUDA 파일 삭제는 uninstall가 있는 경우 이용해도 되고 그냥 날리기도 합니다.

 

3. 새 드라이버 설치

말했듯이 원하는 가장 높은 CUDA버젼에 맞는 드라이버를 설치해야 합니다. 그냥 Nvidia에서 cuda installer를 다운받으면 그걸로 driver도 같이 설치할 수 있습니다.

 

sudo ./cuda_11.1.1_455.32.00_linux.run
Existing package manager installation of the driver found. It is strongly    │
│ recommended that you remove this before continuing.                          │
│ Abort                                                                        │
│ Continue

이런 식으로 나올 수 있는데 그냥 continue를 눌러줍니다. 어차피 에러나면 설치안됩니다.

 

/tmp/cuda-installer.log
/var/log/cuda-installer.log
/var/log/nvidia-installer.log

에러가 날 경우 이런 곳에 log 파일들이 남는데 확인하고 검색해보고 하면 답을 찾을 수 있을 겁니다.

 

│ CUDA Installer                                                               │
│ - [X] Driver                                                                 │
│      [X] 455.32.00                                                           │
│ + [X] CUDA Toolkit 11.1                                                      │
│   [ ] CUDA Samples 11.1                                                      │
│   [ ] CUDA Demo Suite 11.1                                                   │
│   [ ] CUDA Documentation 11.1                                                │
│   Options                                                                    │
│   Install

첫 번째로 설치하는 CUDA와 함께 드라이버를 선택해줍니다. 나머지는 딱히 필요 없습니다.

 

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

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-11.1/
Samples:  Not Selected

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

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

잘 되면 이렇게 나올 겁니다.

 

4. CUDA 버젼별 설치

이제 같은 방법으로 원하는 버젼의 CUDA를 모두 설치하시면 됩니다. 이 때 주의하실 점은

┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Installer                                                               │
│ - [ ] Driver                                                                 │
│      [ ] 450.51.05                                                           │
│ + [X] CUDA Toolkit 11.0                                                      │
│   [ ] CUDA Samples 11.0                                                      │
│   [ ] CUDA Demo Suite 11.0                                                   │
│   [ ] CUDA Documentation 11.0                                                │
│   Options                                                                    │
│   Install

이제부터는 Driver를 선택하지 않고 CUDA만 선택해야합니다. Driver는 여러 버젼을 동시에 설치할 수 없습니다.

 

┌──────────────────────────────────────────────────────────────────────────────┐
│ A symlink already exists at /usr/local/cuda. Update to this installation?    │
│ Yes                                                                          │
│ No                                                                           │
│                                                                              │
│                                                                              │
│                                                                              │
│ Up/Down: Move | 'Enter': Select                                              │
└──────────────────────────────────────────────────────────────────────────────┘

이런 것도 나오는데 nvidia-smi 같은 파일들이 어느 버젼으로 실행되는 지가 달라집니다. 해도 안해도 막 큰 영향은 없는데 가장 최신 버젼으로 남기고자 한다면 No를 선택하면 됩니다.

 

5. LD LIBRARY PATH에 추가

이걸 안하면 어떻게 되는지는 사실 잘 모르겠습니다만(보니까 이걸 안하면 Tensorflow는 제대로 동작을 안하는 것 같네요) CUDA를 성공적으로 설치하면 CUDA bin 경로를 LD LIBRARY 경로에 등록하라고 합니다. 환경변수보다는 파일이 편하니 파일에 써봅시다. ld.so.conf 파일에 예시처럼 내용을 추가해주면 됩니다.

 

include /usr/local/cuda-11.1/lib64
include /usr/local/cuda-11.0/lib64
include /usr/local/cuda-10.2/lib64
include /usr/local/cuda-10.1/lib64

그 뒤에 sudo ldconfig 로 반영시켜줍니다.

 

참고로 딥러닝을 하시는 분들은 nvtop을 꼭 설치해보세요! Memory와 Util을 볼 때 굉장히 유용합니다.

 

선택. cudnn 설치

선택이지만 tensorflow를 쓰기 위해서는 필수입니다. tensorflow는 cudnn를 이용해 가속을 하기 때문에 cudnn을 다운받아 설치해줘야 합니다.

developer.nvidia.com/cudnn-download-survey

cudnn은 다운받기 위해서는 개발자 페이지에 가입해야 합니다.

 

다운받은 뒤에는 docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

 

Installation Guide :: NVIDIA Deep Learning cuDNN Documentation

The NVIDIA® CUDA® Deep Neural Network library™ (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalizati

docs.nvidia.com

를 참고하여 넣으면 됩니다.

 

Procedure

  1. Navigate to your <cudnnpath> directory containing the cuDNN tar file.
  2. Unzip the cuDNN package.

    $ tar -xzvf cudnn-x.x-linux-x64-v8.x.x.x.tgz

    or

    $ tar -xzvf cudnn-x.x-linux-aarch64sbsa-v8.x.x.x.tgz

  3. Copy the following files into the CUDA Toolkit directory.

    $ 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*

이렇게 써있는 대로 하면 되는데 

lib파일들을 복사할 때는 P옵션을 줘야 symbolic link들이 그대로 복사되어 ldconfig을 적용했을 때 에러가 나지 않습니다.

위 과정을 마치면 sudo ldconfig 로 LD 라이브러리를 갱신해줍니다.

 

Tensorflow Error

CUDA와는 상관없지만 

Python 3.7.9 (default, Aug 18 2020, 06:24:24)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2021-01-26 18:06:53.901864: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/nas/home/psj8252/cuda-installers/cuda-test-env-110/lib/python3.7/site-packages/tensorflow/__init__.py", line 435, in <module>
    _ll.load_library(_main_dir)
  File "/nas/home/psj8252/cuda-installers/cuda-test-env-110/lib/python3.7/site-packages/tensorflow/python/framework/load_library.py", line 153, in load_library
    py_tf.TF_LoadLibrary(lib)
tensorflow.python.framework.errors_impl.NotFoundError: /home/psj8252/.local/lib/python3.7/site-packages/tensorflow/core/kernels/libtfkernel_sobol_op.so: undefined symbol: _ZN10tensorflow8OpKernel11TraceStringEPNS_15OpKernelContextEb

이런 에러가 날 경우 gloabal에 tensorflow 2.4를 설치하지 않아서 발생함. 설치하면 해결됨.