GPUを活用したTensorFlow/PyTorch/Chainerなどによるディープラーニングを実践するための環境をUbuntu上に構築する際の選択ポイントと手順を説明する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
TensorFlowやPyTorch、Chainerなどのライブラリを使ったディープラーニング(Deep Learning)/機械学習(Machine Learning)を始めようと思ったなら、本当の初心者/学習者であればGoogle Colaboratoryの活用をお勧めする(※参考「ディープラーニングを始めるための、作業環境の特長と使い分け指針:Google Colaboratory入門」)。しかし「本格的に実践しよう」というのであれば、まずはGPU付きのPCを手に入れてから環境構築を始めるだろう。もちろんクラウド環境を利用する方法も使えるが、ディープラーニングの試行錯誤に時間がかかって課金が膨らんでしまう不安もあるので、まずは手元のPCを使いたいという方が多いのではないだろうか。
手元のPCを使うとして、ディープラーニング環境用のOSとしては、ライブラリの対応状況にもよるが基本的にWindows/macOS(Mac)/Linuxが利用できる。「ディープラーニングを本気で始めよう」と思ったら、GPUは必ず使いたい。CPUよりも汎用GPU(=GPGPU)による計算処理の方が高速なので、ディープラーニングの処理スピードが大きく違ってくるからだ。となると、MacではなくPC環境の方がマシンを構成しやすいので、LinuxかWindowsに絞られるだろう。
LinuxかWindowsかについてはユーザーの好みにもよるが、もともとのライブラリがLinuxのUbuntuファーストで開発されているものが多く、Windowsや他のLinuxディストリビューションであるCentOSなどよりも、LinuxディストリビューションのUbuntuは選択しやすい。
また、「GPUが有効なDocker環境を構築したい」というニーズもあるだろう。この場合、ほとんどのライブラリがNVIDIA(エヌビディア)製のGPUにのみ対応しているため、通常のDockerではなくnvidia-dockerを使う必要がある。しかし、そのnvidia-dockerがLinux OS(Ubuntuなど)にしか対応していないことに注意が必要だ(※GPUを使わず、CPUのみを利用するDocker環境であれば、Linux以外のWindows/macOS環境で通常のDockerを使用すればよい)。
よって、さまざまな手法を試しつつディープラーニングを習得し実践していこうと考えている人の場合は、Ubuntuを選択するのが最適だ。
以上をまとめてPCやOSの選択指針を示すと、以下のようになる。
とういうことで今回は、オンプレミスのUbuntuにディープラーニング環境を構築する方法を紹介する。早速始めよう。
<目次>
■0. ディープラーニングのOS環境の選択指針
・【注意】対応しているUbuntuバージョンについて
■1. PCとOS環境の準備
●1.1. Ubuntuとデスクトップ環境
○1.1.1. Ubuntu 最新LTSバージョン
○1.1.2. デスクトップ環境
○1.1.3. Ubuntuの日本語化
●1.2. リモート接続用サーバ
○1.2.1. SSHサーバ
○1.2.2. リモートデスクトップ接続サーバ
○1.2.3. リモートデスクトップ接続クライアント
■2. NVIDIA GPU環境の準備
●2.1. NVIDIAドライバとCUDA Toolkitのバージョン要件の確認
●2.2. NVIDIAドライバ(=CUDAドライバ)
●2.3. NVIDIA GPUの状態確認
●2.4. nvidia-docker(OS環境切り替え)[オプション]
○2.4.1. nvidia-dockerを使う場合のシステム構成
○2.4.2. Docker
○2.4.3. nvidia-docker
○2.4.4. Dockerコンテナ上でのGPU状態の確認
○2.4.5. GPU付きDockerコンテナの実行
●2.5. CUDA Toolkit(開発環境)
●2.6. cuDNN(ディープラーニング用ライブラリ)
●2.7. CUPTI(CUDA Profiling Tools Interface)
■3. ディープラーニング開発環境の準備
●3.1. Python仮想環境の使い分け指針
●3.2. Anaconda/Miniconda
●3.3. PyCharm
●3.4. Visual Studio Code
本稿は、Ubuntu 18.04 LTSに対応している。前バージョンの16.04 LTSを利用する場合は、こちらの記事を参照されたい。ライブラリ「Chainer」を使う場合、執筆時点(2019年8月時点)では18.04に正式には対応しておらず、16.04 LTS(64-bit)対応となっているので注意してほしい。
まずは、GPU付きのPC*1を入手しよう。
*1 ちなみに筆者の場合は、「NVIDIA GeForce GTX 1060」というお手頃価格のGPUが乗ったゲーミングPCをサイコムで購入して本稿の手順で環境構築した後、本稿を執筆のために、Azure Virtual Machines(VM)の東日本リージョンでGPUが使えるNV6インスタンス(※執筆時点で1時間ごと143.696円課金)を使用してその構築方法を再検証した。そのため、本稿で執筆のGPUは「NVIDIA Tesla M60」となっている。
次に、Ubuntu関連の準備を行おう。すでにUbuntuをインストール済みの方は、次の1.2節までジャンプしても構わないが、本稿の前提条件として「どのような構成になっているのか」の参考にするために、軽く流し読みしてほしい。
1.1.1. Ubuntu 最新LTSバージョン
冒頭での説明の通り、本稿ではUbuntuを使用する。対象のUbuntuのバージョンは、執筆時点で最新LTS*2のUbuntu 18.04 LTS(Bionic)*3である。
*2 「LTS」とは「Long Term Support(長期サポート)」のことである。LTS以外のバージョンとしては、(執筆時点で)Ubuntu 19.04などがリリースされている。しかし、特にLTS以外の最新バージョンは、各ライブラリが正式にサポートしていない可能性が高いので、採用する際には注意してほしい。UbuntuのOSは、基本的に最新のLTSバージョンを選択するのがお勧めだ(※ちなみに、次期LTSはUbuntu 20.04 LTSとなっており、2020年4月にリリース予定だ)。ただしLTSバージョンリリース直後は、NVIDIAのドライバやCUDA Toolkit(詳細後述)がまだ対応していない可能性が高い(※正確な日付は記録していないのだが、前回の対応には半年以上の期間がかかったと記憶している)。特に、最新のCUDA Toolkitの対応状況は確認した方がよい。ちなみに、nvidia-dockerを使ってDockerコンテナごとにUbuntuのバージョンを切り替えることは可能なので、CUDA Toolkitが対応していなくても、最低限、NVIDIAのドライバさえ対応していれば、LTS以外のUbuntuを選択しても何とかなるだろう(※実際に筆者の手元のPCでは、LTSではないUbuntu 17.04を使っていたが、何も問題は起きなかった)。
*3 Ubuntuの各バージョンはコード名(Code Name)で呼ばれる場合があり、本稿で使用しているバージョン18.04 LTSはBionic Beaverもしくは短くBionicと呼ばれている。コード名については「公式サイト:DevelopmentCodeNames/ReleaseSchedule - Ubuntu Wiki」(英語)を参照してほしい。本稿では「バージョン18.04 LTS」と記載しているが、執筆時点(2019年8月時点)では、そのアップデート版である「バージョン18.04.3 LTS」がリリースされていたので、厳密にはそのアップデート版を使っている。「バージョン18.04.xx」の.xxの部分は気にせずにインストールすれば問題ない。後述のリスト1.1の手順によって最新バージョン(筆者の例では「バージョン18.04.3 LTS」)にアップデートされる。
UbuntuにはDesktop版とServer版があり、Server版にはグラフィック関連機能がインストールされていないという違いがある。基本的にはDesktop版(具体的にはその一種であるXubuntuなど)をインストールした方が便利だ。
Ubuntu Desktop版のインストール方法については説明を割愛するので、必要に応じて公式チュートリアル(英語)など別のリソースに当たってほしい。
なお本稿では、あえてUbuntu Server版をインストールし、後からXubuntuというデスクトップ環境を追加インストールした。クラウド上のVMのUbuntuはServer版になっていたりするのだが、そういった環境へのインストール手順でも本稿の内容を適用できるようにするためだ。次節では、「Server版もしくはXubuntuデスクトップ環境がインストールされていない場合」という想定で、デスクトップ環境のインストール方法を説明する。
1.1.2. デスクトップ環境
「デスクトップ環境は不要」と言う人もいるだろうが、データサイエンス向きのコーディング環境であるJupyter Notebookを手元(リモート環境内)でも使いたいなどの理由から、本稿ではUbuntuのデスクトップ環境をインストールして使用している。
Ubuntuではさまざまなデスクトップ環境が利用できるが、本稿では、純正のUbuntuディストリビューションのDesktop版パッケージに含まれるGNOME(現LTSの場合。前LTSではUnity)ではなく、派生のXubuntuディストリビューションに含まれるXfceデスクトップ環境を使用する。Xfceは、軽量・高速でシンプルなUI(ユーザーインタフェース)に定評があり、後述のxrdpとの相性も問題がないのでお勧めだ。
それでは、インストール済みのUbuntuにXfceデスクトップ環境を追加インストールしよう。これには、以下の各コマンドを順に実行してほしい。
$ sudo apt update
$ sudo apt -y upgrade
aptコマンドはapt-getコマンドと同じである。Ubuntu 14.04からaptコマンドの利用が推奨されている。本稿では全てaptコマンドを使用している。
$ sudo apt -y purge ubuntu-desktop
$ sudo apt -y purge --autoremove gnome
$ sudo apt -y install xubuntu-desktop
ちなみに、このコマンドは、xfce4パッケージを含むxubuntu-desktopパッケージをインストールする。これにより、デスクトップ上で各種操作を行うのに便利なさまざまなアプリケーションがインストールされる。シンプルな方がよいという人は、上記のコマンドの代わりにsudo apt -y install xfce4というコマンドを実行して、xfce4パッケージのみをインストールするとよい。
$ sudo reboot
以上の手順が完了してOSが再起動されると、図1のようなGUIでログインする画面が表示されるはずだ(※ちなみに、手元のPCではなく、クラウド上の仮想マシンなどに対してSSHからコマンド実行している場合は、後述のxrdpのインストールを済ませてからでないとGUIで操作できないので注意してほしい)。
GUIではなくCUIを使いたい場合や、その逆の場合もあるだろう。以下のショートカットキーでGUI←→CUIを切り替えられるので覚えておくと便利だ。
1.1.3. Ubuntuの日本語化
Ubuntuの言語が日本語ではない場合は、ここで日本語に設定してもよい。
具体的にはCUIもしくはターミナルに切り替えて、以下のようにコマンドを実行してほしい。
$ sudo apt -y install \
fonts-takao \
language-pack-ja \
fcitx fcitx-mozc
$ sudo update-locale \
LANG=ja_JP.UTF-8 \
LANGUAGE="ja_JP:ja"
$ sudo im-config -n fcitx
$ sudo reboot
リスト1.5のコマンド実行で日本語設定は済んでいる。より細かい設定や調整は、GUIから行うとよい。具体的には、デスクトップ画面にログインして、左上にある[アプリケーション]メニューの[設定]−[言語サポート]を実行してダイアログを表示すればよい(※管理者権限で起動しないと、エラーが発生する場合がある。そのような場合は、デスクトップ上のターミナルでsudo gnome-language-selectorというコマンドで起動してほしい)。ダイアログ表示前に[言語サポートが完全にはインストールされていません]というメッセージボックスが表示された場合は、[インストール]を選択すればよい。
日常使いのメインのPCとディープラーニング用のPCを分けて使用したいというケースが多いのではないだろうか。筆者の場合も、リモートのメインPC(Windows)のターミナルでSSH接続したり、リモートデスクトップ接続でデスクトップ環境を触ったりしている。このようなリモート接続が必要だという方は、SSHやリモートデスクトップ接続のサーバをここでインストールしておこう。
1.2.1. SSHサーバ
OpenSSHサーバがインストールされていない場合は、ここではOpenSSH Server(openssh-server)をインストールする(リスト1.6)。
$ sudo apt -y install openssh-server
インストール後に、クライアントからSSH接続すると、「接続を続行するか?」と聞かれるのでyesと入力して[Enter]キーを押し、次にパスワードを入力すると接続が完了し、各種コマンドが実行できるようになる(図3)。
1.2.2. リモートデスクトップ接続サーバ
Xfceデスクトップ環境をインストール済みの場合は、リモートデスクトップ接続もできるようにしておこう。これには、xrdpサーバ*4をインストールするとよい。
*4 現18.04 LTSの場合は、Windowsのリモートデスクトップ接続で使われて定評のあるRDP(Remote Desktop Protocol)を用いたxrdpを使った方がよい。xrdp以外には、前16.04 LTS向けの記事で紹介したX2Goもある。xrdpの日本語対応はv0.9以降となっており、xrdp 0.9はUbuntu 16.10以降で正式対応という制約があるため、前16.04 LTS向けの記事ではX2Goを使っていた。
xrdpのインストール方法はリスト1.7の通り。
$ sudo apt -y install xrdp
$ sudo systemctl enable xrdp
$ echo xfce4-session > ~/.xsession
$ sudo service xrdp restart
1.2.3. リモートデスクトップ接続クライアント
以上でリモートデスクトップ接続サーバの準備は整った。次に、クライアントから接続できるようにしよう。これには、xrdpクライアントをインストールする。
上記の中から自分のOS(Windows/macOS/Linux)に合ったものを実行して、リモートデスクトップ接続クライアントのアプリを起動し、メニューバーから[Session]−[New Session]を選択する。表示されたダイアログ(Windowsの場合:図4-1、macOSの場合:図4-2、Linuxの場合:図4-3)に対して(※以下の箇条書きは、Windows/macOS/Linuxの順で画面表示に対応。)、
とった接続設定を入力して保存し、接続を行うボタンなどをクリックすれば、リモートデスクトップ接続が実現する。なお、WindowsやmacOSでログイン作業時に「このコンピューターを信頼するか?」という旨のメッセージボックスが表示された場合は、[再表示しない]旨のチェックボックスにチェックを入れて、信頼して処理を続行させるボタンをクリックすればよい。
もし、ユーザー名とパスワードが間違っている場合は図5-1のダイアログが表示されて、再度、ユーザー名とパスワードの入力が求められる(※[Session]欄はデフォルトの「Xorg」を選択したままでよい)。
実際にログインできると、図5-2のようにデスクトップ画面が表示される。
初めてXfceデスクトップにログインしたときには、Xfceパネル(=システム全体の[アプリケーション]メニューなど)をセットアップする方法を質問されるので、基本的には[デフォルト設定を使用する]ボタンをクリックすればよい。ちなみに、本稿で使用しているXfceパネルと異なる外観になる可能性がある(※リスト1.3でxubuntu-desktopパッケージをインストールした場合は、左上にある[アプリケーション]メニューの[設定]−[Xfce パネルスイッチ]から表示されるダイアログで「Xubuntu Bionic」を選択して適用すれば、本稿と同じ外観になる。xfce4パッケージのみをインストールした場合は、同じく[アプリケーション]メニューの[設定]−[外観]/[パネル]などの設定を微調整する必要がある)。
他にもインストールしておきたいソフトウェアはあるが、取りあえずOSを操作・管理するのに必要十分なものはそろったので、次にNVIDIA GPU関連のインストールや設定を行っていこう。Python開発環境系のソフトウェアインストールについては後述する。
Copyright© Digital Advantage Corp. All Rights Reserved.