Setting up a GPU machine for Machine Learning

In this note, I describe how to install NVIDIA GPU and set up CUDA/cuDNN on Ubuntu 16.04LTS machine that has been clean booted. Also, I write down some linux commands used in debugging, since knowing your machine in detail would lead to resolving some errors related to the machine environment. This article could be updated from time to time.

Example: My Ubuntu GPU machine (2020/01/10)


Table of contents



Operating System

Checking Linux OS

uname command shows 1.OS Name, 2.Hostname, 3.Release, 4.Version, 5,Hardware Architecture, 6,CPU type, 7.Platform, 8.OS Name, respectively,

$ uname -a
Linux XXXX 4.4.0-145-generic #171-Ubuntu SMP Tue Mar 26 12:43:40 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Checking Linux distribution

/etc/issue contains information about Linux distribution.

$ cat /etc/issue
Ubuntu 16.04.6 LTS \n \l

/etc/lsb-release contains the same information.

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial 
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

/etc/os-release contains the same information.

$ cat /etc/os-release
NAME=“Ubuntu”
VERSION=“16.04.6 LTS (Xenial Xerus)” ID=ubuntu ID_LIKE=debian PRETTY_NAME=“Ubuntu 16.04.6 LTS” VERSION_ID=“16.04" HOME_URL=“http://www.ubuntu.com/” SUPPORT_URL=“http://help.ubuntu.com/” BUG_REPORT_URL=“http://bugs.launchpad.net/ubuntu/” VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Checking Linux kernel

/proc/version contains information about Linux kernel.

$ cat /proc/version
Linux version 4.4.0-159-generic (buildd@lgw01-amd64-042) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #187-Ubuntu SMP Thu Aug 1 16:28:06 UTC 2019

Storage (ROM)

Storage device (HDD, SSD) and file systems.

Checking ROM devices

df commad shows information about ROM (HDD) devices

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G   46M  1.6G   3% /run
/dev/sda1       214G  165G   39G  81% /
tmpfs           7.9G  208K  7.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/loop3      384K  384K     0 100% /snap/patchelf/93
/dev/loop1      384K  384K     0 100% /snap/patchelf/87
none            7.9G  2.5M  7.9G   1% /tmp/guest-qyuodw
tmpfs           1.6G   64K  1.6G   1% /run/user/998
/dev/loop4       90M   90M     0 100% /snap/core/8213
/dev/loop0       90M   90M     0 100% /snap/core/8268
tmpfs           1.6G     0  1.6G   0% /run/user/1001
Checking the number of files

wc command shows the number of files under the current dir.

$ du -hsc *
689M	Research
4.0K	build
106M	dataset
4.0K	docker
9.3M	gym
50M	kaggle
2.6M	latent.gif
2.0G	opencv
122G	workspace
4.0K	ダウンロード
4.0K	テンプレート
4.0K	デスクトップ
4.0K	ドキュメント
4.0K	ビデオ
4.0K	ピクチャ
4.0K	ミュージック
4.0K	公開
125G	合計
ファイルのディスク使用量を確認したい

df -hコマンドを使う

カレントディレクトリ直下にあるファイルおよびディレクトリのディスク使用量とその合計を表示する

$ du -hsc *
689M	Research
4.0K	build
106M	dataset
4.0K	docker
9.3M	gym
50M	kaggle
2.6M	latent.gif
2.0G	opencv
122G	workspace
4.0K	ダウンロード
4.0K	テンプレート
4.0K	デスクトップ
4.0K	ドキュメント
4.0K	ビデオ
4.0K	ピクチャ
4.0K	ミュージック
4.0K	公開

メモリ(RAM)

メモリデバイスを確認したい

/proc/meminfoをみる

メモリの詳細情報が表示される

$ cat /proc/meminfo
MemTotal: 16377200 kB
MemFree: 3077848 kB
MemAvailable: 15767804 kB
Buffers: 363052 kB
Cached: 12274992 kB
SwapCached: 66936 kB
Active: 8048088 kB
Inactive: 4689560 kB
Active(anon): 25860 kB
Inactive(anon): 86584 kB
...
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 1907316 kB
DirectMap2M: 14815232 kB
DirectMap1G: 0 kB
メモリの空き容量を確認したい

freeコマンドを使う

$ free
              total        used        free      shared  buff/cache   available
Mem:       16377148     2470228      314496       17140    13592424    13460232
Swap:      16720892      431568    16289324

vmstatコマンドを使う

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 431584 267696 944212 12638044    0    2   389    15    0    0  6  2 91  0  0

topコマンドを使う

$ top
top - 15:55:05 up 64 days, 23:12,  5 users,  load average: 1.00, 1.04, 1.07
Tasks: 232 total, 2 running, 230 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.1 us, 3.5 sy, 0.0 ni, 86.9 id, 0.5 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16377148 total,   271964 free,  2527528 used, 13577656 buff/cache
KiB Swap: 16720892 total, 16289228 free,   431664 used. 13403420 avail Mem 

...

CPU

CPUデバイスを確認したい

/proc/cpuinfoをみる

CPUのコアごとに詳細情報が表示される


$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
stepping : 3
microcode : 0xc6
cpu MHz : 800.062
cache size : 8192 KB
physical id : 0
siblings : 8
...
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
...

GPU

GPUデバイスの確認

lswsコマンドを使う

$ sudo lshw -C display 
  *-display               
       詳細: VGA compatible controller
       製品: GP104 [GeForce GTX 1080]
       ベンダー: NVIDIA Corporation
       物理ID: 0
       バス情報: pci@0000:01:00.0
       バージョン: a1
       幅: 64 bits
       クロック: 33MHz
       性能: pm msi pciexpress vga_controller bus_master cap_list rom
       設定: driver=nvidia latency=0
       リソース: irq:317 メモリー:de000000-deffffff メモリー:c0000000-cfffffff メモリー:d0000000-d1ffffff IOポート:e000(サイズ=128) メモリー:df000000-df07ffff

lspciコマンドを使う

Linuxに搭載されているPCIバスの情報を表示する.

$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)

NVIDIAドライバとCUDA/cuDNNの導入

NVIDIAドライバのインストール

1.下記リンクから,自分のGPUにあうドライバを検索してダウンロードする.

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

img

たとえば,GPU「NVIDIA GeForce 1080」に対応したドライバは以下のようになる.

img

  1. 新しくGPUドライバ(NVIDIAドライバ)をインストールする前に,既にインストールされているGPUドライバを確認する.

aptにNVIDIAドライバを提供しているxorg-edgersレポジトリを追加する.

aptでNVIDIAドライバ「nvidia-396」をインストールして,マシンを再起動.

CUDAのインストール

(注意)CUDA・cuDNN・tensorFlow-gpuのバージョンを合わせる必要がある.

  1. CUDAの公式ドキュメントをよく読む.

    CUDA Toolkit Documentation https://docs.nvidia.com/cuda/index.html

  2. 下記リンクから,NVIDIAドライバに対応するCUDAのバージョンを確認する

    CUDA Toolkit Documentation > Release Notes > 1. CUDA Toolkit Major Components > CUDA Driver https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

img

  1. 下記リンクから,tensorflow-gpuに対応するcuDNN/CUDAのバージョンを確認する

    TensorFlow (Linux) - テスト済みのビルド設定

    https://www.tensorflow.org/install/source#linux

img

CUDA・cuDNN・tensorFlow-gpuのバージョン確認を終えた.

今回は,以下で環境構築をする.

  • Python 3.6.9
  • tensorflow-gpu 1.13.1
  • CUDA 10.0
  • cuDNN 7.4
  1. 下記リンクから,自分の環境にあった「CUDA Toolkitパッケージ」を確認し,マシンへダウンロードする.

    CUDA Toolkit Archive https://developer.nvidia.com/cuda-toolkit-archive

img

今回は,CUDA10.0で,マシンの環境として,以下を選択.

  • Operating System: Linux
  • Architecture: x86_64
  • Distribution: Ubuntu
  • Version: 16.04
  • Installer Type: deb [network]

img

(注意)https://developer.nvidia.com/cuda-downloadsは,最新バージョンのダウンロードリンクなので,ここから安易にCUDAをダウンロードしてはいけない.特に,tensorflow-gpuは,最新のCUDA Toolkitに対応していないので注意する.CUDAとTensorflow-gpuのバージョンがあっていないと,たとえばImportError: libcublas.so.10.0が発生する.

対応するCUDA Toolkit(CUDA 10.0)の.debファイル(network)は「cuda-repo-ubuntu1604_10.0.130-1_amd64.deb」となる. この.debファイルをwgetコマンドを使って,マシンへダウンロードする.

  1. ダウンロードしたCUDA Toolkitパッケージ(.deb)を,マシンへインストールする

dpkgコマンドでCUDA Toolkitパッケージ(.deb)をcudaパッケージとして保存します.さらに,aptコマンドでcudaパッケージをインストールします. 注意:公式に書かれているsudo apt-get install cudaを実行すると自動的に最新版のCUDAがインストールされる.

これでCUDA Toolkit(CUDA 10.0)のインストールは完了.

次に,環境変数(PATH)を設定する.

cuDNNのインストール
PATHチェック

ディスプレイ

X11ディスプレイマネージャ(DM)を確認

/etc/X11/default-display-managerをみる

Yuma Uchiumi
Yuma Uchiumi
Management Consultant, Data Scientist
comments powered by Disqus

Related