우분투에서 NVIDIA 드라이버 설치 방법


우분투에서 NVIDIA 드라이버 설치 방법
이번 글에서는 우분투(Ubuntu)에서 엔베디아(NVIDIA) 그래픽카드 GPU 드라이버를 설치하는 방법에 대해서 설명드리겠습니다.
AWS에서 제공되는 이미지 Ubuntu Server 16.04 LTS (HVM)와 Ubuntu 18.04를 기준으로 설명드리며, 사용된 인스턴스 유형은 g2.2xlarge으로 엔비디아 GPU는 GRID K520입니다. GRID K520 기준으로 드라이버 설치방법을 설명 드리지만, 다른 버전의 그래픽카드를 사용하셔도됩니다.

Tensorflow 또는 Keras 등을 사용하거나, CUDA 라이브러리를 사용하기 전에 가장 먼저 드라이버를 설치해 주셔야합니다.

1. 환경

우분투 데스크탑 버전이 아닌, GUI가 없는 서버 버전을 기준으로 설명드리도록 하겠습니다.
먼저 NVIDIA 드라이버가 이미 설치가 되었는지 확인 합니다.

# cat /proc/driver/nvidia/version
cat: /proc/driver/nvidia/version: No such file or directory

위의 내용과 같이 파일 또는 디렉토리가 없다고 나타나면 아직 드라이버가 설치되지 않은 것입니다.
아래의 명령어를 이용하여 GPU 모델과 커널 모듈 정보를 확인합니다.

# lspci -k

위의 명령어를 실행하면 상당히 많은 내용이 나타나나는데 아래와 같이 NVIDIA GPU 모델과 정보만 확인 하면됩니다.

00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
	Subsystem: NVIDIA Corporation GK104GL [GRID K520]

위의 실행결과는 사용중인 커널 모듈 정보가 없습니다. 하지만 사용중인 커널 모듈 정보가 있을 경우 아래와 같이 Kernel driver in use 라고 하면서 모듈 정보가 추가로 나타날 수 있습니다.

02:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2)
        Subsystem: NVIDIA Corporation GM107 [GeForce GTX 750 Ti]
        Kernel driver in use: nouveau
        Kernel modules: nvidiafb, nouveau

많은 NVIDIA 드라이버 설치 방법을 설명하는 글들에서 nouveau 모듈이 사용되지 않게 blacklist 에 추가하는 명령어를 함께 실행합니다. 하지만 이번 글에서는 현재 nouveau 커널 모듈이 사용중이더라도 설치 과정에서 자동으로 blacklist 에 추가되므로 신경쓰지 않으셔도 됩니다.

아직 언어 설정이 되지 않았을 경우 설치에 필요한 언어셋, 로케일등 기본유틸이 기본 패키지를 설치해 주시기 바랍니다.

# apt-get update && apt-get install -y dialog language-pack-en

# export LANGUAGE=en_US
# export LANG=en_US.UTF-8
# export LC_ALL=en_US.UTF-8

# update-locale

그 다음 아래의 내용을 /etc/default/locale 추가해 주시면됩니다.

LANG="en_US.UTF-8"
LANGUAGE="en_US"
LC_ALL="en_US.UTF-8"

다음은 패키지 Repository를 추가할 것입니다. 우분투 16.04 버전과 18.04 버전 모두 NVIDIA Repository가 지원됩니다. 따라서 버전에 공식 NVIDIA Repository 를 추가하여 설치하는 방법을 설명드리도록 하겠습니다.

현재 NVIDIA 공식 Repository에서 지원되는 배포판 종류는 우분투 16.04, 17.04, 17.10, 18.04, 18.10 등 입니다. 이 배포판에 해당되는 우분투 버전을 사용하고 계신경우, 아래의 공통 명령어로 패키지 리스트를 추가 하실 수 있습니다.

먼저 아래의 명령어로 현재 사용하고 계신, 우분투 배포판 버전을 확인합니다.

$ release="ubuntu"$(lsb_release -sr | sed -e "s/\.//g")
$ echo $release

만약 우분투 18.04 일 경우, ubuntu1804 와 같은 내용이 출력되고, 16.04일경우 ubuntu1604 내용이 출력되게 됩니다.

위의 명령어로 배포판 이름이 $release 변수에 저장되게 되고, 아래의 명령어에서 해당 Repository로 추가될 수 있도록 사용됩니다. 따라서, 꼭 위의 명령어를 실행 후 아래의 명령어로 Repository를 추가합니다.

$ sudo apt install sudo gnupg
$ sudo apt-key adv --fetch-keys "http://developer.download.nvidia.com/compute/cuda/repos/"$release"/x86_64/7fa2af80.pub"
$ sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-cuda.list'
$ sudo 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'
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC
$ sudo apt update

2. 정보 확인

NVIDIA하드웨어 모델에 따라서 지원되는 그래픽카드(GPU) 드라이버 버전의 다릅니다.
따라서 아래의 페이지에 방문한 다음 설치하고자 하는 그래픽카드에 맞는 최신 버전의 드라이버 버전을 확인해야 합니다.

http://www.nvidia.com/Download/Find.aspx?lang=en-us

그리고 아래의 명령어를 실행 하여 설치 가능한 드라이버 버전을 확인 합니다.

# apt-cache search nvidia
..
nvidia-304 - NVIDIA legacy binary driver - version 304.135
nvidia-304-updates - Transitional package for nvidia-304
nvidia-304-updates-dev - Transitional package for nvidia-304-dev
nvidia-340 - NVIDIA binary driver - version 340.104
nvidia-361 - Transitional package for nvidia-367
nvidia-361-dev - Transitional package for nvidia-367-dev
nvidia-367 - Transitional package for nvidia-375
nvidia-367-dev - Transitional package for nvidia-375-dev
nvidia-375 - Transitional package for nvidia-384
nvidia-375-dev - Transitional package for nvidia-384-dev
nvidia-384 - NVIDIA binary driver - version 384.111
nvidia-384-dev - NVIDIA binary Xorg driver development files
..

nvidia-xxx 로 나타나는 패키지 이름 중에서 설치 가능한 버전을 확인하시면 됩니다.

NVIDIA홈페이지에서 조회되는 버전은 367, 340, 370(베타) 등입니다. 하지만 우분투에서 패키지로 지원 되는 버전과 일치하는 상위 버전은 367이기 때문에 nvidia-367로 설치해 주시면 됩니다.

NVIDIA 드라이버 버전이 410 이상일 경우 nvidia-driver-410 처럼 패키지 이름이 변경되었습니다. 호환되는 드라이버가 상위 버전일 경우 nvidia-driver-xxx 패키지를 설치해 주셔도 됩니다.

3. 드라이버 설치

위에서 확인 한 드라이버 버전을 아래의 명령어로 설치 할 수 있습니다.
(아래 명령어는 GRID K520 모델일 경우 드라이버 버전입니다. GPU 모델에 맞는 드라이버를 설치해 주셔야합니다.)

$ sudo apt-get install nvidia-367

우분투 16.04 등의 환경에서는 nvidia-390 드라이버를 설치하다가 아래와 같은 오류가 발생할 수 있습니다.

Errors were encountered while processing:
 nvidia-390
 libcuda1-390
 nvidia-opencl-icd-390
E: Sub-process /usr/bin/dpkg returned an error code (1)
Setting up nvidia-390 (390.30-0ubuntu1) ...
update-alternatives: using /usr/lib/nvidia-390/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in auto mode
update-alternatives: warning: skip creation of /usr/share/grub-gfxpayload-lists/blacklist/10_proprietary-graphics-drivers because associated file /usr/share/nvidia-390/nvidia-390.grub-gfxpayload (of link group x86_64-linux-gnu_gl_conf) doesn't exist
update-alternatives: error: error creating symbolic link '/usr/lib/nvidia/alternate-install-present.dpkg-tmp': No such file or directory
dpkg: error processing package nvidia-390 (--configure):
 subprocess installed post-installation script returned error exit status 2

위와 같은 오류가 발생할 경우 다음과 같이 nvidia 디렉토리를 생성 후, 다시 설치 명령어를 실행해 주시면 됩니다.

$ sudo mkdir /usr/lib/nvidia
$ sudo apt-get install nvidia-390

그리고 마지막으로 드라이버 버전에 상관 없이, 공통적으로 아래의 패키지를 함께해 주시면 됩니다.

$ sudo apt-get install dkms nvidia-modprobe

그리고 드라이버 모듈이 로드 될 수 있도록 reboot 명령어로 시스템을 재부팅 합니다.

4. 확인

우분투에서 NVIDIA 드라이버 설치 방법 성공적으로 되었는지 확인 하기 위해서 아래의 명령어를 실행합니다.

$ sudo lspci -k
00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
	Subsystem: NVIDIA Corporation GK104GL [GRID K520]
	Kernel driver in use: nvidia
	Kernel modules: nvidia_384_drm, nvidia_384

nvidia 커널 드라이버가 사용중으로 나타나고 있음을 알 수 있습니다.
그리고 아래의 /proc/driver/nvidia/version 파일의 내용을 확인하면 드라이버 버전을 확인 할 수 있습니다.

$ sudo cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.111  Tue Dec 19 23:51:45 PST 2017
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.6)

NVIDIA의 GPU 또는 그래픽카드를 사용하면 nvidia-smi 명령어로 시스템 정보를 확인 하실 수도 있습니다.

$ nvidia-smi
Sat Feb 17 12:47:47 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GRID K520           Off  | 00000000:00:03.0 Off |                  N/A |
| N/A   31C    P0     1W / 125W |      0MiB /  4036MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

위의 내용과 같이 정보들이 올바르게 나타나면, 드라이버가 성공적으로 설치 된 겁니다.
이어서, CUDA SDK와 cuDNN 등의 라이브러리를 설치하기 위해서는 아래의 글을 참고하시기 바랍니다.


NVIDIA 드라이버 에러

NVIDIA 드라이버 설치 후 부팅 할 때 아래와 같은 오류 메세지가 발생하는 경우 입니다.

Failed to start NVIDIA Persistence Daemon.

본문의 설명드린 내용으로 제대로 설치하셨을 경우, BIOS 등의 설정 문제가 있을 수 있습니다. Secure Boot 옵션을 해제해 주시고, 메인보드에서 Above 4G Decoding 옵션이 지원될 경우, Enable으로 활성화 해주시기 바랍니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)