Python
Linux
機械学習
DeepLearning
PyTorch

ボーナスでたら、ゼロからLinuxのGPU機械学習環境を作る ~Ubuntu18.04のインストールからPyTorch実行まで全手順~


概要


  • 特に難しいことを考えることなくGPUを使った機械学習(主にディープラーニング向け)環境をPCに構築します

  • Linux OSのインストール、各種ドライバ・ソフトウェア類のインストールなど全ての手順をスキップ無しで1つずつハンズオンで確認します

  • セットアップしたLinuxに、人気急上昇中の機械学習ライブラリPyTorchを導入します


対象


  • そろそろ機械学習はじめようと思ってるけど、とっかかりがつかめない人

  • ボーナス出たら「GPU買うぞ~」と思っている人

  • Linux,Python,Anaconda,PyTorch,機械学習のいずれかまたは全ての初心者


環境


ゴール


  • OSインストールから、PyTorchでCUDAをつかったテンソル演算を確認するところまでやります。


本編


Linuxをインストールするマシンを用意する

手元で機械学習(主にディープラーニング用途)を実行するために以下のようなスペックのPC(自作)を準備した。

CPU
Core i7-9700K

マザボ
Z390チップセット

メモリ
16GB

HDD
1TB

GPU
NVIDIA Geforce RTX 2080 Ti 11GB 搭載

電源
ATX 800W


Linuxインストール用のUSBメモリ(Live USB)を作成する

まず、Linuxをインストールするために、インストール用のUSBメモリ(Live USB)を作成するところから開始する。

USBメモリへの書き込みにはWindows PCを利用した例で説明するが、書き込みアプリはWindow版、Mac版、Linux版があり、どれも同じ手順でインストール用USBメモリを作成可能。

Ubuntu 18.04のディスクイメージは 2GB程度なので、USBメモリは8GBもあれば十分。


Ubuntu 18.04のディスクイメージのダウンロード

Linuxのディストリビューションには、Ubuntu 18.04 LTSを使用する。

https://www.ubuntu.com にアクセスして、Downloadタブを開いて、Ubuntu Desktop > 18.04 LTS をクリックすると、Ubuntuのディスクイメージ(ISO)がダウンロードされる。

image.png

ここでは、ubuntu-18.04.2-desktop-amd64.isoがダウンロードされたので、これのディスクイメージをUSBメモリに書き込む。


USBメモリにLinuxのディスクイメージを焼く

(1)USBメモリ書き込み用のアプリ UNetbootin を以下からダウンロードし、インストールする。

https://unetbootin.github.io/

image.png

(2)UNetbootinを起動

UNetbootinを起動する

ディスクイメージを選択して、さきほどダウンロードしたISOディスクイメージ ubuntu-18.04.2-desktop-amd64.iso を指定する。

タイプは USBドライブで、ドライブ名は USBメモリが挿入されたドライブを指定する。

image.png

OKを押すと、USBメモリの作成が開始する。

image.png

あとは、しばらく待っていれば Ubuntu 18.04 LTS をインストールすることができるUSBメモリが完成する


USBメモリからUbuntu 18.04 をインストールしていく

さて、今つくったUSBメモリをPCに挿入して、電源オン

USBメモリから起動したいので、PC起動時にBIOS設定画面を出す。

BIOS設定画面の起動方法は、たいていの場合 PC起動時に F2またはDELを押せばOK。

BIOS設定画面のブートメニュー(Boot Menu)にて、USBメモリでブートを選択すればUSBメモリからブートする。

USBメモリからブートできると、以下のようにUNetbootin のブート画面がでるのでInstall Ubuntuを選択する

image.png

インストールが開始される

image.png

言語設定画面では、日本語を選択

image.png

キーボードレイアウトも日本語を選択

image.png

画面に従いすすめていく

image.png

今回はまっさらにした状態のPCにLinuxをインストールする

(既存のWindows PCにインストールする場合は削除するか、残すかオプションが出る)

image.png

ロケールは Tokyo で。(日本語選んでおくとデフォルトでそうなる)

image.png

次にユーザー名とコンピューター名を入れ 続ける を押す

image.png

あとはインストールが自動で進むので待つ

image.png

しばらくするとインストール終了ダイアログがでるので、今すぐ再起動する

image.png

再起動すると、このとおり、Ubuntu 18.04 LTSを無事インストール終了!

image.png

ただしまだ最適なグラフィックドライバをインストールしていないので、画面描画で残像が出たり、画面解像度などは最適化されていない。


Ubuntu 18.04 をセットアップする

OSは無事インストールできたので、これから基本的な設定や、必要になるソフトウェア群をインストールしていく。


Ubuntuで日本語入力を使えるようにする

Ubuntu 18.04のインストール直後だと、半角/全角ボタンを押しても、日本語IMEが使えず日本語入力ができない場合があるので、画面の右上のをクリックして、開いたメニューで 日本語(Mozc)入力を有効にする。

image.png


downloadsディレクトリ(フォルダ)を作る

これからら、いくつかのドライバーやパッケージをネットからダウンロードするので、ダウンロードしたファイルの保存先ディレクトリを作成する

左のアプリメニューからファイル image.png

クリックしてファイルマネージャを起動して、開いたユーザーディレクトリ以下にダウンロード用ディレクトリ(フォルダ)を作成する。

右クリックでフォルダ作成を選択し、フォルダ名を downloads として作成する。

image.png

実は日本語環境でインストールすると、デフォルトでダウンロードというディレクトリ(フォルダ)ができるが、端末(ターミナル)から扱うとき日本語のディレクトリ名(フォルダ名)だとコマンドラインと相性がわるいため、ここでdownloadディレクトリ(フォルダ)を作っておいた。

image.png


Chrome(ブラウザ)をインストールする

さきほどのインストール方法でインストールしたUbuntu 18.04 LTSデスクトップディストリビューションでは、Firefoxがデフォルトで入っているが、ブラウザにはChromeを使いたいので、そちらを導入する

以下からGoogle Chrome(Linux版)をダウンロードする

https://www.google.com/intl/ja_ALL/chrome/

64ビット .debパッケージを選択する

image.png

こんな画面がでるのでOKする

image.png

インストールをクリック

image.png

ChromeのインストールはGUIから行ったが、これでインストール完了。

左下のメニューボタンimage.pngを押してアプリ一覧を表示すれば、ちゃんとGoogle Chromeがインストールされている。

image.png

ここで、左側のアプリメニューにあるアプリアイコン上で右クリックして、常時表示が不要なものをお気に入りから削除して、スッキリさせた。

image.png

image.png

さて、ここでimage.pngをクリックして、Chromeを起動。

image.png

規定のブラウザにするにチェック。

Chromeの規定のダウンロードフォルダの変更

image.png

Chromeが起動したら、右上のimage.pngボタンでメニューを開き、設定を選択する

image.png

検索窓image.png保存先 と入力すると、ダウンロードしたファイルの保存先の設定画面がでるので、変更を押すと

image.png

フォルダ選択画面がでるので、さきほど作成した downloads を選択してフォルダを選択するをクリックする。


NVIDIA グラフィックドライバーのインストール

さて、いままではインストールした素の状態で作業してきたが、解像度が最大になっていなかったり場合によっては描画に残像がでるなどの動作が適正ではなかった。

ここでは、GPUにあったグラフィックドライバーをインストールする。

本稿のPCにはGeForce RTX 2080 Tiを導入しているので、以下サイトからドライバーをダウンロードする。

https://www.nvidia.com/download/driverResults.aspx/138279/en-us

image.png

上のリンクをChromeで開いて、GeForce RTX 2080 Tiに対応したドライバをダウンロードする。

端末(ターミナル)をつかってドライバーをインストールする

左下のimage.pngを押して 端末(ターミナル)を起動する

image.png

ここからはコマンドラインでインストールしていく。

1.グラフィックドライバのダウンロードディレクトリに行く

$ cd downloads/

2.dirでディレクトリの中身を確認

$ dir

NVIDIA-Linux-x86_64-410.57.run

3.chmodでパーミッションを変更して、ダウンロードしたドライバインストーラーを実行できるようにする

$ chmod +x NVIDIA-Linux-x86_64-410.57.run 

4.sudoをつかってルート権限でドライバのインストールを実行する

$ sudo ./NVIDIA-Linux-x86_64-410.57.run --no-x-check

image.png

■ NVIDIAグラフィックドライバーのインストール・ステップをみていく。

image.png

The distribution-provided pre-install script failed! Are you sure you want to continue?と出るが気にせず Continue installation を選択してエンター。

image.png

次の画面ではこのように出る。

ERROR: Unable to find the development tool`cc` in your path; please make sure that you have the package 'gcc' installed. If gcc is installed on your system, then please check that `cc` is in your PATH.

ccにパスが通って無いみたいだけど、gccはインストールしておいてね!」というエラー。

OKを押すとインストーラーが終了する。

gccがインストールされていないようなので、gccをインストールすることにする。

■ gcc をインストールする

端末(ターミナル)から以下のコマンドで gcc を含むビルドツール(makeなども)をインストールする

sudo apt install build-essential

image.png

image.png

インストール準備がはじまり、続行しますか? [Y\n] 確認があるので Yでインストールが実行される。

■ 再度、NVIDIAグラフィックドライバのインストールを試みる

さきほどはgccが無くて止まってしまったので、gccをインストールした。

ここで、再度、NVIDIAグラフィックドライバのインストールを試みる。

$ sudo ./NVIDIA-Linux-x86_64-410.57.run --no-x-check

ふたたび、この画面

image.png

The distribution-provided pre-install script failed! Are you sure you want to continue?と出るが気にせず Continue installation を選択してエンター。

次は、この画面、

image.png

今度はちゃんとビルドできている模様。

次は、この画面、

image.png

WARNING:

Unable to find a suitable destination to install 32-bit

compatibility libraries. Your system may not be set up for 32-bit

compatibility. 32-bit compatibility files will not be installed; if

you wish to install them, re-run the installation and set a valid

directory with the --compat32-libdir option.

こんな警告メッセージがでて、「32-bit互換ライブラリをインストールしたいなら再実行してね」と言っている。今回の用途では32-bit互換ライブラリは不要なので、気にせずOKを選択。

次は、この画面

image.png

An incomplete installation of libglvnd was found. All of the essential

libglvnd libraries are present, but one or more optional components are

missing. Do you want to install a full copy of libglvnd? This will overwrite

any existing libglvnd libraries.

libglvndの上書き確認があるので Install and overw を選択で上書きでOK。

次は、この画面

image.png

Would you like to run the nvidia-xconfig utility to automatically update

your X configuration file so that the NVIDIA X driver will be used when you

restart X? Any pre-existing X configuration file will be backed up.

「Xの設定を更新するか?」聞いている、今はNoでOK。

nvidia-xconfigコマンドを使えばいつでも実行可能。

次は、この画面

image.png

Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64

(version: 410.57) is now complete. Please update your XF86Config or

/usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.

これで、NVIDIAグラフィックドライバのインストールは無事成功。OKを押して終了

設定を反映するために、再起動する

image.png

rebootコマンドで再起動する

reboot

すると、

image.png

画面がFullHDになった。NVIDIAグラフィックドライバが有効になって、ちゃんと適正な解像度がセットされた。

■ GPUの設定画面を開く

nvidia-settingsコマンドでGPUの設定画面を開くことができる

nvidia-settings

image.png

これにて、GPUは正しくインストールされた


Anacondaを導入する

ここでは、Pythonの実行環境をサクっと構築してくれるAnacondaを導入する

Anaconda3 をダウンロードする

Chromeを開いて、以下を開く

https://www.anaconda.com/distribution/#download-section

image.png

上部のタブでLinuxを選び、Python 3.7 versionを選んで、64-Bit(x86) Installer をダウンロードする。

すると、Anaconda3-2019.03-Linux-x86_64.sh というファイルがダウンロードされた

Anaconda3をインストールする

ダウンロードしたAnaconda3を

端末(ターミナル)を開いて、以下コマンドを入力して、Anaconda3をインストールする

cd downloads/

bash Anaconda3-2019.03-Linux-x86_64.sh

image.png

ライセンスの確認画面はエンターでページおくりできる

image.png

同意したら yes をタイプする

image.png

次にAnacondaの保存先を聞かれる

image.png

Anaconda3 will now be installed into this location:

/home/ml/anaconda3

- Press ENTER to confirm the location

となっているので、エンターを押して保存先を確定する

image.png

インストールが終わると、

Do you with the installer to initialize Anaconda3 by running conda init? [yes|no]

conda initをしてAnaconda3を初期化するかい?」と聞いてくるので

yes

と入力する。

image.png

これで、Anaconda3のインストールが完了!

また、Pythonのインストールも同時に完了!

Pythonが動作するかを確認する

Anacondaのインストールが終わったら、いったん、端末(ターミナル)を閉じて、再度 端末(ターミナル)を開く。

端末(ターミナル)を開き直したら以下のコマンドで、インストールされたPythonを確認してみる



  • Pythonのバージョン

$ python --version

Python 3.7.3



  • Pythonのインストール先

$ which python

/home/ml/anaconda3/bin/python

image.png

■ condaコマンドとは

ところで、プロンプトの先頭に以下のように(base)がつくようになった

(base) ml@ml:~$ python --version

Python 3.7.3
(base) ml@ml:~$ which python
/home/ml/anaconda3/bin/python
(base) ml@ml:~$

これはcondaが環境名を表示している。

そもそもcondaとは、パッケージ管理や環境の管理してくれるための便利なツールで、Anacondaのインストールと同時にcondaもインストールされている。

さきほどの(base)condaのインストール時にデフォルトで付与されたものだが、ジャマなら非表示にすることもできる。

以下のコマンドを実行する


(base)表記を消す

conda config --set changeps1 False


ここまでで、Anaconda3のインストールは終了。

この段階で、Python 3.7condaコマンドもインストールされており、Pythonの基本的な開発ができるようになっている。


PyTorchの導入

さて、ようやくお膳立てができたので、いよいよ機械学習ライブラリ PyTorch を導入する

■ PyTorchのインストール

以下にあるPyTorchのインストールガイドを開く

https://pytorch.org/get-started/locally/

image.png

このサイトでは、自分の環境に応じたPyTorchのインストール方法を教えてくれる

ここでは、いままでセットアップしてきた環境にあわせて以下を選択した

PyTorch Build
Stable(1.0)

Your OS
Linux

Package
Conda

Language
Python 3.7

CUDA
10.0

すると、Run this Command:の欄に親切にconda install pytorch torchvision cudatoolkit=10.0 -c pytorch と表示される。

これを端末(ターミナル)にそのまま入力すれば PyTorchがインストールできる。とっても簡単。

conda install pytorch torchvision cudatoolkit=10.0 -c pytorch

image.png

image.png

The following NEW packages will be INSTALLED:

と聞かれるので y を入力して、パッケージのダウンロード開始

image.png

これにて、NVIDIA GPU対応のPyTorchのインストールが完了!

【補足】

他のライブラリだと CUDA Toolkit 10.0 や cudnn 7.4 といった、GPU処理を行うためのソフトウェアを別途インストールする必要があるのが一般的だが、PyTorchの場合は、上記 condaコマンドで CUDA Toolkit 10.0 もあわせてインストールしておいてくれるし、cudnnPyTorchに組み込まれた状態のものを、さきほどのcondaコマンドでインストールしているため、別途インストールする必要は無い

以下が具体的なインストール先となる

PyTorch(v.1.0.1 CUDA対応版)のインストール先ディレクトリ

~/anaconda3/pkgs/pytorch-1.0.1-py3.7_cuda10.0.130_cudnn7.4.2_2

■ PyTorchが使うCUDA Toolkit(v.10.0)のインストール先ディレクトリ

~/anaconda3/pkgs/cudatoolkit-10.0.130-0


Pythonのプログラムを書くため、Jupyter Notebookを起動する

では、本稿の最後に、ちゃんとGPUが有効な状態でPyTorchが使えるか試す。

端末(ターミナル)を開いて、PyTorchプロジェクト用のディレクトリを作る

mkdir pytorch_pj

cd pytorch_pj

ディレクトリに移動したら

jupyter notebook

Jupyter Notebook(ジュピターノートブック)を起動する。

Jupyter NotebookPythonのコード作成と実行、実行結果表示、自由コメント(Markdown)編集の3つの機能をそなえたツールで、気軽に利用できるので、Jupyter Notebook上で試す。

image.png

jupyter notebookというコマンドを入力するだけでブラウザが立ち上がり、すぐに使える状態になる。

こんな風に、起動する。

image.png

これから、Python用のノートブックを作成する。

右上あたりにある New を押して、ポップアップしたメニューからPython3を選択

すると、もう1枚タブが開いて、以下のようなノートブック画面が表示される

image.png


PyTorchをGPUで動作させる

さて、ノートブックが起動したところで、早速コードを書く


PyTorchでCUDAが有効か確認するコード

from __future__ import print_function

import torch

if torch.cuda.is_available(): # CUDAが有効なら TRUE
device = torch.device("cuda") # CUDA(クーダ)デバイスを取得
x = torch.empty(5, 3) # CPU上にテンソルを作る
y = torch.ones_like(x, device=device) # GPU上に直接テンソルを作る
print(y)
x = x.to(device) # CPU上に作ったテンソルをCUDAデバイスに転送
print(x)
print("CUDA version:"+torch.version.cuda) #PyTorchが使っているCUDA toolkitバージョンを表示する


↓のようにコードをノートブックに記述する

image.png

コードを書いたら、image.pngを押す

image.png

すると、コードが実行され結果が得られる

image.png

このとおり、実行結果が表示された

tensor([[1., 1., 1.],

[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], device='cuda:0')
tensor([[0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 1.4013e-45],
[0.0000e+00, 1.4013e-45, 0.0000e+00],
[1.4013e-45, 0.0000e+00, 0.0000e+00]], device='cuda:0')
cudatoolkit-10.0.130

device='cuda:0'となっている部分で、実際にこのテンソルがCUDAデバイス(GPU)に作られたことが確認できた!

■ GPUの負荷を計測する

nvidia-smiコマンドでGPUの使用率等を取得することができるので、本格的な学習時には以下コマンドでモニタすると良い。

nvidia-smi -l

image.png


GPUで機械学習できる環境が完成

これにて、Ubuntu 18.04 LTS上に、GPUを活用した機械学習を行う最低限の環境が完成した!

あとは、PyTorchを使って、ディープラーニングをさせるのもよし、他のライブラリを追加するのもよし。


まとめ


  • ゼロからLinuxのGPU機械学習環境を構築しました

  • PyTorchを動かすのに必要となる各種ソフトウェアを導入し、最終的にGPUをつかって演算をするところまで試すことができました

  • 環境はできたので、GPUの性能確認の為にこのあたりから試してみるのも面白いかも知れません。


おまけ(拡張のヒント)


  • 今回は環境を固定して愚直にインストールしましたが、ポータビリティをあげるためにDockerを使いたい、という場合は、しっかりとNVIDIA GPU対応を考慮したNVIDIA Docker2が活用できそうです。