본 문서에서는 ubuntu 16.04에 nvidia GPU 에 대한 driver 및 cuda 10.x 버전을 설치하는 방법에 대하여 설명합니다. 현재 cuda 최신은 11까지 나와 있으나, 사용하려는 프로그램이 cuda 10만을 지원하여 cuda 10.2 버전을 설치하는 방법에 대하여 알아 보도록 하겠습니다.
설치된 드라이버 및 cuda 확인하기
nvidia driver 및 cuda 버전을 확인하는 가장 간단한 방법은 "nvidia-smi" 명령을 실행하는 것입니다.
# nvidia-smi
Sun Aug 16 15:41:16 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54 Driver Version: 396.54 |
|-------------------------------+----------------------+----------------------+
cuda는 설치되어 있지 않고, nvidia driver도 아주 오래전 버전이 설치되어 있습니다.
nvidia toolkit 및 cuda가 설치되지 않은 경우에는 다음과 같이 프로그램을 찾을 수 없습니다.
# nvcc --version
The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt install nvidia-cuda-toolkit
또 다른 방법은 다음과 같이 nvidia driver 프로세스 정보를 확인하는 것입니다.
# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 396.54 Tue Aug 14 19:02:34 PDT 2018
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
cuda 10.x 다운로드
cuda 특정 버전을 다운로드 받기 위해서는 https://developer.nvidia.com/cuda-downloads 를 브라우저에서 연 후에, 최신 버전이 아닌 경우에는 "Legacy Releases"를 선택하여 원하는 버전을 다운로드 받습니다.
본 문에서에는 cuda 10 중에서 가장 최신인 10.2를 다운로드 받아서 설치하는 과정을 설명합니다.
다운로드는 "runfile (local)" 선택하여, 하나의 패키지 형태로 받아서, 별도의 조치 없이 한방에 설치하는 버전으로 다운로드 받습니다. (cuda_10.2.89_440.33.01_linux.run)
기본으로 제공되는 스크립트는 다음과 같습니다.
# wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
# sudo sh cuda_10.2.89_440.33.01_linux.run
cuda 10.x 설치
runfile을 통한 driver 및 cuda 설치
앞서 nvidia developer 사이트에서 제공받은 runfile을 root 권한으로 실행합니다.
기존에 이미 설치된 driver가 있다면 다음과 같은 안내 메시지가 표시됩니다.
x Existing package manager installation of the driver found. It is strongly x
x recommended that you remove this before continuing. x
nvidia driver 와 함께 cuda toolkit을 설치하기 위해서는 x windows service를 중지해야만 정상적인 설치가 가능합니다.
x windows service가 구동중인 상태에서 설치를 계속 진행하면 다음과 같은 오류가 발생하며 설치가 실패합니다.
# sudo sh cuda_10.2.89_440.33.01_linux.run
Installation failed. See log at /var/log/cuda-installer.log for details.
관련된 상세한 로그("/var/log/cuda-installer.log")를 확인하면 다음과 같습니다.
# cat /var/log/cuda-installer.log
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc
[INFO]: gcc version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
[INFO]: Initializing menu
[INFO]: Setup complete
[INFO]: Components to install:
[INFO]: Driver
[INFO]: 440.33.01
[INFO]: Executing NVIDIA-Linux-x86_64-440.33.01.run --ui=none --no-questions --accept-license --disable-nouveau --no-cc-version-check --install-libglvnd 2>&1
[INFO]: Finished with code: 256
[ERROR]: Install of driver component failed.
[ERROR]: Install of 440.33.01 failed, quitting
nvidia driver 설치시 발생한 오류는 "/var/log/nvidia-installer.log" 파일에 기록됩니다. 이 파일을 확인해 보면 다음과 같습니다.
# cat /var/log/nvidia-installer.log
nvidia-installer log file '/var/log/nvidia-installer.log'
creation time: Sun Aug 16 16:18:43 2020
installer version: 440.33.01
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
nvidia-installer command line:
./nvidia-installer
--ui=none
--no-questions
--accept-license
--disable-nouveau
--no-cc-version-check
--install-libglvnd
Using built-in stream user interface
-> Detected 2 CPUs online; setting concurrency level to 2.
-> The file '/tmp/.X0-lock' exists and appears to contain the process ID '890' of a runnning X server.
ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com.
ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log' for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
X server 가 실행중인 상태에서 nvidia driver 설치를 진행하여 실패한 것입니다. 정상적으로 설치를 하려면, 터미널로 접속 (Alt + Ctrl + F1)하여, 다음과 같은 명령을 수행하여 X server를 종료한 후에 runfile을 다시 실행합니다.
# sudo service lightdm stop
이렇게 설치할 경우, nvidia driver는 최신 버전이 아닌 runfile에 포함된 버전이 설치됩니다.
apt를 이용한 nvidia driver 설치
앞서 runfile을 통하여 nvidia driver 및 cuda toolkit을 한꺼번에 설치하면 편하지만, 이 경우 nvidia driver는 최신버전이 아니게 됩니다.
apt를 이용하면 nvidia driver 등을 최신버전으로 설치할 수 있습니다.
apt를 이용하여 최신 nvidia driver 를 설치하려면 다음과 같이 명령들을 순차적으로 실행합니다.
# release="ubuntu"$(lsb_release -sr | sed -e "s/\.//g")
# apt-key adv --fetch-keys "http://developer.download.nvidia.com/compute/cuda/repos/"$release"/x86_64/7fa2af80.pub"
# sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-cuda.list'
# sh -c 'echo "deb http://developer.download.nvidia.com/compute/machine-learning/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-machine-learning.list'
# apt update
이후, 다음과 같이 apt를 이용하여 최신의 nvidia driver 를 설치합니다.
# sudo apt install -y nvidia-440 libcuda1-440 nvidia-opencl-icd-440 cuda-drivers-440
그리고 cuda toolkit은 runfile 로 별도로 설치 합니다. runfile 실행 후, 설치 옵션에서 cuda toolkit 을 제외한 것들을 설치하지 않도록 옵션을 끄고 cuda toolkit만 설치합니다.
(Driver, CUDA Samples, CUDA Demo Suite, CUDA Documentation 등은 설치 옵션에서 제외합니다.)
cuda toolkit의 설치가 완료되면 다음과 같은 결과가 표시됩니다.
# sudo sh cuda_10.2.89_440.33.01_linux.run
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.2/
Samples: Not Selected
Please make sure that
- PATH includes /usr/local/cuda-10.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run --silent --driver
Logfile is /var/log/cuda-installer.log
h2. nvidia driver 및 cuda 설치 확인
nvidia-driver 및 cuda 설치가 완료된 후에 버전을 확인해 보면 다음과 같습니다.
# nvidia-smi
Sun Aug 16 14:36:56 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.95.01 Driver Version: 440.95.01 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
nvcc 명령을 이용하면, cuda의 버전을 확인할 수 있습니다.
$ /usr/local/cuda/bin/nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
"/proc/driver/nvidia/version" 파일의 내용을 확인하면 드라이버 버전을 확인 할 수 있습니다.
# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 410.104 Tue Feb 5 22:58:30 CST 2019
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
커널에서 nvidia driver 사용 유무는 다음과 같이 확인할 수 있습니다.
# lspci -k
0a:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
Subsystem: NVIDIA Corporation Device 11d7
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_410_drm, nvidia_410
cuda 설치 후, 환경설정
PATH 설정
# PATH=${PATH}:/usr/local/cuda/bin
LD_LIBRARY_PATH 설정
## 기존에 LD_LIBRARY_PATH 값이 설정되어 있지 않은 경우
# LD_LIBRARY_PATH=/usr/local/cuda/lib64
## LD_LIBRARY_PATH에 추가하는 경우
# LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
사용자 설정 파일을 수정하기 위해서는 ~/.profile 파일에 위 내용을 추가합니다.
nvidia-driver 및 cuda 설치가 완료되었음에도 원하는 프로그램이 정상적으로 동작하지 않고 "libnvrtc.so" 등을 찾을 수 없다는 오류가 발생하는 경우가 있습니다.
이는 "LD_LIBRARY_PATH" 환경변수를 재대로 설정하지 않았거나 ldconfig 가 정상적으로 실행되지 않아서 발생하는 경우 입니다. "LD_LIBRARY_PATH" 환경변수의 경로를 올바로 설정하고, 다음과 같이 ldconfig를 수행하면, cuda 프로그램의 실행이 가능해 집니다.
# sudo ldconfig
참고자료
- "우분투에서 NVIDIA 드라이버 설치 방법":https://hiseon.me/linux/ubuntu/install_nvidia_driver/
- "CUDA에 대한 LD_LIBRARY_PATH 설정":https://qastack.kr/ubuntu/210884
'Linux,Unix,BSD' 카테고리의 다른 글
SSH로 서버 접속시, 멈추고 접속이 성공되지 못하는 문제 (0) | 2020.09.03 |
---|---|
[bind] bad owner name (check-names) 오류 해결 방법 (0) | 2020.08.25 |
[Linux] 메모리 스왑(SWAP) 추가하기 (0) | 2020.04.24 |
[PHP] 쉘 스크립트 실행 실패 문제(SELinux) (0) | 2020.01.16 |
[PHP] CentOS SELinux 활성화 서버에서 PHP로 MariaDB 접속시, "Permission denied" 발생 문제 (0) | 2020.01.15 |