NGC (Nvidia GPU Cloud)를 Ubuntu로 실행환경을 만들어 보자!

NGC는

NGC (NVIDIA GPU Cloud)는 GPU를 활용하는 소프트웨어 개발과 기계 학습의 학습 · 추론 단계를 수행하기 위한 플랫폼입니다. Docker는 컨테이너 기술(가상 환경)를 기반으로 하기 때문에, 클라우드 인스턴스, GPU 서버, 연구용 워크스테이션에서 컨테이너 환경만 구성되었다면 NGC 이미지를 이용해서 동일한 연구/개발 환경을 제공하는 것이 장점입니다.

Home NGC 환경

NGC는 Azure, AWS, Google Cloud 등 다양한 클라우드 서비스에서 사용할 수 있습니다. 클라우드 서비스를 계약하여 사용하고 싶은 환경으로 NGC을 선택하면. 그러나 클라우드의 하드웨어를 빌려 때문에 시간당 (종량제 / 예약제) 결제가 필요합니다.

집에서 NGC 환경을 만드는 장점은 시간당 과금이 없다는 점입니다. 하지만 직접 하드웨어를 구입해서 전기 요금을 지불해야 합니다. 이 글은 NGC를 사용하기 위한 과정을 정리해서, 보다 더 많은 분들이 GPU에서 놀기(?)를 희망합니다.

필요한 장비

Intel x86 PC에 NVIDIA GTX-Titan을 꽂았습니다.

  • NVIDIA GeForce GTX-Titan
  • Intel Core i5-6400 Link
  • 16GB RAM
  • HDD 2TB

설치 과정

Ubuntu 18.04 LTS 설치

설치 미디어를 만들

OS에는 Ubuntu 18.04 LTS을 선택했습니다. 2020 년 7 월 현재 최신 LTS (Long-Term-Support : 안정화 · 장기 지원 판)의 Ubuntu입니다. 먼저 ubuntu-18.04.4-server-amd64.iso 파일을 다운로드합니다. 또한 설치 USB 메모리를 만들려면 Etcher도 받습니다.

다운로드 한 iso 파일을 선택하고 USB 메모리를 준비하면 Ubuntu를 설치할 준비가 됬습니다.

설치

설치하는 PC에 USB 메모리를 삽입하고 USB 메모리로 부팅합니다. Ubuntu 설치는 특별한 설정은 없습니다. 자유롭게 설치하십시오.

필요한 도구 추가

Ubuntu에 NGC 환경 구축을 필요한 패키지를 설치합니다. build-essential는 Ubuntu의 기본적인 개발 도구를 정리 한 패키지 세트입니다. aptitude 패키지 관리 apt의 파생 버전의 패키지로 설치하는 패키지가 필요로하는 의존 패키지를 자동으로 수집 기능을 제공합니다.

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install gcc python
$ sudo apt install build-essential
$ sudo apt install aptitude

원격으로도 사용하고 싶기 때문에 openssd-server를 설치하고 자동으로 sshd가 시작되도록 설정했습니다 (systemctl enable sshd).

$ sudo install openssd-server
$ sudo systemctl enable sshd
$ sudo systemctl start sshd

(Optional) Devel 패키지 : jpeg, zlib

GPU를 사용한 딥 러닝 응용 프로그램을 시도했는데, python3 (pip3) 주위에서 zlib와 jpeg 개발 도구 부족 오류가 발생했습니다. 자주 사용하는 도구라고 생각하기 때문에, 추가 설치를 할 수 있습니다.

sudo apt install libjpeg-dev
sudo apt install zlib1g-dev

CUDA Tool Kit 설치

이어 NVIDIA GPU Cloud에서 GPU를 활용하기위한 CUDA Tool Kit을 설치합니다. 여기에서 GPU는 NVIDIA의 GPU를 사용하기 때문에 반드시 CUDA를 지원하는 것이 필수 조건입니다. NVIDIA 사이트에서 다운로드에 대한 지시에 따라 설치하십시오.

$ wget https://developer.nvidia.com/cuda-downloads?target_os=Linux
$ sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.105-418.39_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-1-local-10.1.105-418.39/7fa2af80.pub
$ sudo apt update

마지막으로, CUDA 패키지 세트를 설치합니다. aptitude에 따라 다양한 패키지가 자동으로 설치됩니다. 완료되면 다시 시작합시다.

$ sudo aptitude install cuda
...
$ sudo reboot

Docker CE 설치

이어 실행 환경 인 「컨테이너」를 관리 · 실행 Docker을 설치합니다. 절차는 공식 사이트에 따릅니다.

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch = amd64] https://download.docker.com/linux/ubuntu $ (lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world

여기까지 끝났다면, 다시 시작합시다.

$ sudo reboot

NGC 인스턴스를 자신의 PC에서 사용해 보자

이 단계에서 기반이되는 "OS"실행 환경 인 Docker GPU를 활용하기 위한 CUDA Tool Kit이 준비했으므로 NVIDIA GPU Cloud를 사용합니다.

NGC 받기

NGC는 Docker 컨테이너로 쉽게 사용할 수 있습니다. 인증용 gpgkey를 가져와서, NGC가 포함된 URL을 (nvidia-docker.list)을 저장소 리스트에 apt 명령을 사용해서 설치합니다. Docker 데몬(dockerd)을 SIGHUP에서 시작할 때 자동 시작합니다. (시스템이 재부팅되어도 동작합니다.)

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt update
$ sudo apt-get install nvidia-docker2
$ sudo pkill -SIGHUP dockerd
$ reboot

nvidia-docker에서 응용 프로그램을 실행

NGC는 먼저 Docker에서 NVIDIA의 컨테이너 (-runtime=nvidia)을 실행(docker run)해서 컨테이너를 사용해서 NGC 응용 프로그램을 실행합니다.

NVIDIA-SMI

nvidia-smi는 Docker 에서 보이는 CUDA를 지원하는 GPU 장치를 표시하는 응용 프로그램입니다. Docker의 -rm 옵션은 nvidia-smi를 실행 한 후 자동으로 컨테이너가 Close되어 삭제됩니다.

$ docker run  --rm --runtime=nvidia nvidia/cuda nvidia-smi

PyTorch

PyTorch는 Python 용 오픈 소스 기계 학습 라이브러리입니다. NGC에서 실행할 수 있습니다. 다음은 -it 옵션은 대화식 터미널을 생성하고 PyTorch 응용 프로그램 Runnning PyTorch를 실행합니다. 실행에 필요한 프로그램 실행시 자동으로 설치됩니다.

$ docker run --runtime=nvidia -it nvcr.io/nvidia/pytorch:20.06-py3

Backend.AI 에서 NGC 사용

Backend.AI에서는 GPU 가상화를 통해서 NGC 가 배포하는 AI/ML/HPC 컨테이너를 쉽게 사용할 수 있습니다.