Install CUDA, cuDNN, Nvidia Driver on Ubuntu 20.04 for Tensorflow2

기존에 설치되어 있는 것들 제거. Ubuntu 20.04에는 기본으로 Nvidia Driver가 설치되어 있으므로 이를 지워주어야 함.

$ sudo apt-get purge nvidia*
$ sudo apt-get autoremove
$ sudo apt-get autoclean

CUDA 설치

1. 레포지토리 키 등록

$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub

2. apt에 레포지토리 주소 등록

$ sudo bash -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" >> /etc/apt/sources.list.d/cuda.list'
$ sudo bash -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" >> /etc/apt/sources.list.d/cuda.list'

3. CUDA, Nvidia Driver 설치 (CUDA를 설치하면 자동으로 이에 의존된 드라이버 자동으로 설치)

$ sudo apt update
$ sudo apt install cuda
$ sudo apt install cuda-10-1

4. cuDNN 설치를 위한 repo 패키지 설치

$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb
$ sudo dpkg -i nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb

5. cuDNN 레포지토리 추가

$ sudo bash -c 'echo "deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" >> /etc/apt/sources.list.d/nvidia-machine-learning.list'

6. cuDNN 설치 (CUDA 버전에 맞는 버전으로 설치해야 함)

$ sudo apt install libcudnn7-dev=7.6.5.32-1+cuda10.1 libcudnn7=7.6.5.32-1+cuda10.1

추후 업데이트시 최신버전으로 업데이트 되는 것을 방지

$ sudo apt-mark hold libcudnn7 libcudnn7-dev
libcudnn7 set on hold.
libcudnn7-dev set on hold.

이와 같이 설치를 완료하고, 재부팅한 다음… 드라이버가 잘 설치되어 있는지 확인

$ nvidia-smi


TensorFlow2 설치

$ sudo apt install python3-pip
$ sudo pip3 install -U tensorflow-gpu

환경변수 셋업

$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64:/usr/local/cuda-10.2/lib64:/usr/local/cuda-10.1/lib64' >> ~/.bashrc
$ source ~/.bashrc

실행 및 설치 확인

$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
import tensorflow as tf
2020-10-08 15:02:50.803732: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
tf.config.list_physical_devices('GPU')
2020-10-08 15:03:01.717511: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcuda.so.1
2020-10-08 15:03:01.733336: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-10-08 15:03:01.733585: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1650 computeCapability: 7.5
coreClock: 1.56GHz coreCount: 16 deviceMemorySize: 3.82GiB deviceMemoryBandwidth: 119.24GiB/s
2020-10-08 15:03:01.733603: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-10-08 15:03:01.734679: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcublas.so.10
2020-10-08 15:03:01.735901: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcufft.so.10
2020-10-08 15:03:01.736061: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcurand.so.10
2020-10-08 15:03:01.737163: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcusolver.so.10
2020-10-08 15:03:01.737773: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcusparse.so.10
2020-10-08 15:03:01.740221: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudnn.so.7
2020-10-08 15:03:01.740295: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-10-08 15:03:01.740563: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-10-08 15:03:01.740768: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

Jetson Nano Developer Kit 개봉기

지난 달에 열린 GTC에서 NVIDIA가 JETSON NANO를 발표하였습니다. 라즈베리파이만한 크기에 가격도 저렴? ($99)하고, 게다가 CUDA 코어까지 내장되어 있어, 요즘 유행하는 머신러닝 알고리즘들을 테스트 해보거나, 가지고 놀기 좋게끔 만든 보드인듯 합니다.

한국은 공식판매처가 한컴MDS로 되어 있어, 맘편하게 하나 주문해봤는데, 오늘에서야 도착했습니다. 아마 다른 분들도 다 오늘쯤 받으시겠네요.^^

패키징은 벌것 없습니다. 딸랑 종이박스 하나이고, 내용물도 메뉴얼을 제외하면 보드 하나만 들어있습니다. 흔한 USB 케이블도 없네요. 녹색 커버를 열면 아래와 같이 보드가 담겨있는 봉투가 보이고,

그 밑에 간단한 보드 메뉴얼과, 보드 받침대? 역할을 하는 종이접기류가 보이네요.

보드는 정전기 방지 봉투가 잘 포장되어 있고, 뜯어보면 많이 보셨던 JETSON NANO가 들어있습니다. 뭐 크게 감흥이 있는 건 아니고, 나노 모듈에 확장보드 형태로 되어 있습니다.

뒷면은 부품들을 배치하지 않아, 거의 평면이고, 다만 단자들이 전부다 노출되어 있는 관계로 사용하실땐 받침이나 커버가 꼭 있어야겠네요. (위에서 본 종이접기처럼….)

한쪽면에 확장 커넥터들을 몰아놨습니다. 왼쪽부터 DC어댑터 단자(5V/4A max), HDMI, DP, USB3.0 x4, Ethernet, Micro USB B (전원공급용, 5V/2A) 이고요.

보드 오른쪽은 라즈베리파이와 유사하게 확장 포트들이 배치되어 있습니다. GPIO와 POE 등. 반대쪽엔 UART, POWER SW, RESET, 카메라를 연결할 수 있는 단자가 보이고요. 여기에 라즈베리파이에 사용했던 카메라를 꼽을수 있다네요.

나노모듈을 제거하면 밑에 PCIe 확장포트가 보입니다.

여기에 아래 제품과 같은 무선랜/블루트스 카드를 꼽으면 무선 연결이 가능해집니다. 다른 용도로도 사용이 가능할 것 같고요. 다만 안테나가 비포함되어 있으니 안테나도 같이 주문해야 합니다.

나노모듈 밑에는 MicroSD 카드를 꼽을수 있습니다. JETSON 웹페이지에서 이미지를 다운로드 받아 SD카드에 굽고, 끼워서 부팅하면 됩니다.

라즈베리파이와 크기를 비교하면 가로 길이는 비슷하지만, 세로 길이가 좀 깁니다. 하지만 라즈베리파이의 경우 확장커넥터들이 오른쪽에 밀려있는 관계로 실제 조립하거나 사용할때는 나노가 좀더 편리할 수도 있겠단 생각이 듭니다.

몇가지 아쉬운 점들이 보이는데, USB C 단자를 설계해 놓고 Micro USB B 단자를 꼽아놓은 점, USB포트에 커넥터들 임시땜빵, 오디오출력이 가능함에도 오디오출력 포트가 없다는 점 등이 있네요. RTC를 위한 배터리 단자도 자리만 남겨놓고 조립은 안했네요.

뭐.. 처음 제작된 제품이니 조만간 리비전되어 나올 듯 합니다. 전원을 넣고 부팅하면 Ubuntu 설치할 때와 마찬가지로 언어선택, 키보드, 계정 생성 등의 진행절차가 나오고 완료하면 Ubuntu로 부팅이 가능합니다. Ubuntu 버전은 18.04가 설치되어 있으며, 일단 처음 설치한 후의 느낌은 라즈베리파이보단 좀더 쾌적하게 움직인다 정도 입니다.