티스토리 뷰

Introduction

본 문서는 UEFI + Secure boot enabled mode 인 Ubuntu 18.04 에서 GPU container를 사용하기 위한 Docker 를 설치하는 가이드로, 2018년 9월 13일에 직접 시행착오를 겪으며 작성하였다.

참고로 GPU 는 NVIDIA Geforce 980TI 한 장을 장착하고 있다. ASUS 메인보드를 사용하며, fast boot mode 는 disabled 되어 있는 상태이다.

  1. NVIDIA Driver 설치
  2. Docker 설치
  3. Nvidia-docker 설치

Install NVIDIA Driver

현재 필자의 PC 는 윈도우와 우분투 모두 UEFI 모드로 설치하여 멀티부팅을 지원하도록 세팅하여 놓았다. (윈도우로 게임도 하고 우분투로 딥러닝도 하고 싶었다…) 그리고 Secure Boot 기능 또한 켜놓았기 때문에 부팅 시 인증서를 통한 OS 부트로더 검증을 실시한다. 이 때문에 ubuntu 18.04 에 NVIDIA Driver 를 설치하는 데에 고통을 받았으며, 되는 방법과 안되는 방법을 소개하여 독자들의 삽질을 예방하고자 한다. 인터넷에 소개된 NVIDIA driver 설치 방법 세 가지를 시도해보았다.

PPA repository 를 통한 설치 - 실패

  1. 필요한 드라이버 확인

다음 명령어를 통해 필요한 드라이버 버젼 명을 알 수 있다.

  $ ubuntu-drivers devices
  1. 해당 드라이버가 ppa 에 없을 수 있기에 다음 명령어를 통해 graphic driver ppa 를 우리 시스템에 추가시킨다.

    $ sudo add-apt-repository ppa:graphics-drivers/ppa
    $ sudo apt update

  2. 다음 명령어를 통해 자동으로 필요한 드라이버를 설치할 수 있다.

    $ sudo ubuntu-drivers autoinstall

  3. Reboot 한다.

이러면 NVIDIA X server 가 실행되지 않는다. 아마도 secure boot 모드 때문에 그런 것 같다. 일단 설치된 nvidia-driver 를 지운다.

$ sudo apt purge nvidia-*
$ sudo apt autoremove

RUN file 을 통한 설치 (Secure boot mode 고려 X )- 실패

  1. 엔비디아 공식 홈페이지에서 자신의 하드웨어에 맞는 드라이버의 run file을 다운받는다.
  1. 드라이버 설치에 앞서 필요한 패키지들을 설치한다.

    $ sudo dpkg --add-architecture i386
    $ sudo apt update
    $ sudo apt install build-essential libc6:i386

  2. Disable Nouveau Nvidia driver

  3. 다음 링크에서 nouveau 를 disable 할 수 있는 방법을 소개한다.

- [https://linuxconfig.org/how-to-disable-nouveau-nvidia-driver-on-ubuntu-18-04-bionic-beaver-linux](https://linuxconfig.org/how-to-disable-nouveau-nvidia-driver-on-ubuntu-18-04-bionic-beaver-linux)
  1. 요약하자면 다음 명령어들을 입력하면 된다.

    $ sudo bash -c “echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf”
    $ sudo bash -c “echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf”

    $ cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
    blacklist nouveau
    options nouveau modeset=0

    $ sudo update-initramfs -u
    $ sudo reboot

  2. tty shell 에서 download 받은 run file 을 실행시킨다.

    sudo sh ./NVIDIA-Linux-x86_64-xxx.xx.run

  3. Reboot 한다.

이번에는 blank screen 이 떠서 Login 창을 볼 수 없게 된다. nouveau 를 disable 했는데 nvidia driver 도 작동하지 않으니 아얘 화면이 안나오는 것으로 예상된다. 역시 secure boot 모드 때문이라고 추론해볼 수 있다.

RUN file 을 통한 설치 (Secure boot mode 고려 O ) - 성공

Blank screen 이후 눈물을 흘리며 우분투를 재설치하고, 열심히 구글링을 하던 도중 다음 링크에서 해답을 발견할 수 있었다. 이 링크를 잘 따라하면 성공적으로 UEFI mode 로 설치된 ubuntu 를 secure boot mode 로 부팅했을 때 nvidia driver 를 성공적으로 설치 및 적용할 수 있다.

  • https://askubuntu.com/questions/1023036/how-to-install-nvidia-driver-with-secure-boot-enabled?rq=1

  • 요약하자면 secure boot 는 부트로더가 검증됐는지를 확인하기 위해 인증서가 필요한데, NVIDIA Driver 를 설치하는 과정에서 이 인증서가 필요한 모양이다. 따라서 먼저 인증서(private key, public key 의 쌍) 을 만들고, 두 파일의 위치를 driver run file 을 실행시키는 명령어에 argument 로 전달해서 주면 정상적으로 드라이버를 설치할 수 있다는 내용이다.

  • Reboot 후에 NVIDIA X server 도 잘 작동하고, 화면도 좋은 해상도로 잘 렌더링 하는 것을 확인할 수 있다.

  • 다음 명령어로 설치된 드라이버와 GPU 모델명, 총 메모리와 사용중인 메모리, GPU 온도 등을 확인할 수 있다.

    $ nvidia-smi

Install Docker

도커 설치는 다음 링크를 참고하여 간단히 설치할 수 있다.

  1. ppa repository 등록

    $ sudo apt-get remove docker docker-engine docker.io
    $ sudo apt-get update
    $ sudo apt-get install
    apt-transport-https
    ca-certificates
    curl
    software-properties-common
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    $ sudo add-apt-repository
    “deb [arch=amd64] https://download.docker.com/linux/ubuntu
    $(lsb_release -cs)
    stable”

  2. docker-ce 설치 및 확인

    $ sudo apt-get update
    $ sudo apt-get install docker-ce
    $ sudo docker run hello-world

NVIDIA Docker 설치

nvidia-docker2 역시 다음 링크를 참고하여 간단히 설치할 수 있다.

요약하자면, 다음 명령어들을 실행시키면 된다.

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

잘 설치되었는지 다음 명령어를 통해 확인해보자.

# Test nvidia-smi with the latest official CUDA image
sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

docker 명령어에 매번 sudo 를 붙이는 것이 귀찮기 때문에 다음 명령어를 실행시켜서 docker 그룹에 user 를 등록시키자.

$ sudo usermod -a -G docker $USER
$ sudo reboot now

매번 —runtime=nvidia 를 입력하면 귀찮기 때문에 다음 링크를 참고하여 argumetn 기본 등록을 해준다.

그리고 도커를 restart 해주면 —runtime=nvidia 명령어를 치지 않아도 자동으로 nvidia-docker로 도커를 실행하게 된다.

설정을 모두 마치고 docker 서비스를 restart 하여 적용시키자.

$ sudo service docker restart

다시 한번 모든 설정이 잘 적용되었는지 다음 명령어를 통해 확인해보자.

# Test nvidia-smi with the latest official CUDA image
docker run --rm nvidia/cuda nvidia-smi

References

Install NVIDIA Driver

Install Docker

Install Nvidia-docker

댓글
댓글쓰기 폼