AI・ディープラーニング環境構築入門

AI・ディープラーニング環境構築入門

UbuntuでのGPUディープラーニング環境の構築【Ubuntu 16.04 LTS対応】

2017年12月8日

GPUを活用したTensorFlowやChainerによるディープラーニングを実践するための環境をUbuntu上に構築する際の選択ポイントと手順を説明する。

デジタルアドバンテージ 一色 政彦
  • このエントリーをはてなブックマークに追加

▼目次に戻る

0. ディープラーニングのOS環境の選択指針

 TensorFlowやChainerなどのライブラリを使ったディープラーニングDeep Learning)を始めようとしたら、まずはGPU付きのPCを手に入れてから環境構築を始めるだろう。もちろんクラウド環境を利用する方法も使えるが、ディープラーニングの試行錯誤に時間がかかって課金が膨らんでしまう不安もあるので、まずは手元のPCを使いたいという方が多いのではないだろうか。

 手元のPCを使うとして、ディープラーニング環境用のOSとしては、ライブラリの対応にもよるが基本的にWindowsmacOSMac)/Linuxが利用できる。ディープラーニングを本気で始めようと思ったら、GPUは必ず使いたい。CPUよりも汎用GPU(=GPGPU)による計算処理の方が高速なので、ディープラーニングの処理スピードが大きく違ってくるからだ。となると、MacではなくPC環境の方がマシンを構成しやすいので、LinuxかWindowsに絞られるだろう。

 LinuxかWindowsかについてはユーザーの好みにもよるが、もともとのライブラリがLinuxのUbuntuファーストで開発されているものが多く、Windowsや他のLinuxディストリビューションであるCentOSなどよりも選択しやすい。また、ほとんどのライブラリがNVIDIA(エヌビディア)製のGPUにのみ対応しており、GPUが有効なDocker環境を構築したいニーズがあれば、通常のDockerではなくnvidia-dockerを使う必要があるが、これがLinux OS(Ubuntuなど)にしか対応していない。よって、さまざまな手法を試しつつディープラーニングを習得し実践していこうと考えている人の場合は、Ubuntuを選択するのが最適だ。

 以上をまとめてPCやOSの選択指針を示すと、以下のようになる。

  • Linux(Ubuntu) 最良の選択肢。GPU付きのPCで、本格的にディープラーニングを学び実践したい人は特に。本稿の対象プラットフォーム。
  • Windows 日常使いのPCや使い慣れた環境を使いたい人にとって最良。GPUも使え、TensorFlowなども使える(Chainerも使えるが正式にはサポートされていない)。Visual Studioで開発したい人には人気がある。
  • macOSMac CPUを使って手元のMacでディープラーニングを試したい人にとっては良い。Mac ProにNVIDIA GPUを搭載することも考えられるが、それならUbuntuの方が情報も多いので、Ubuntuにした方がよいだろう。
  • Linux(CentOS/Red Hat Enterprise Linux) 手元にある使い慣れたLinux環境でデータサイエンスを実践したい人には良い。ただしライブラリはUbuntuに対応しているものが多く、積極的にこれらを選ぶ理由はないと思われる。

 とういうことで今回は、オンプレミスのUbuntuにディープラーニング環境を構築する方法を紹介する。さっそく始めよう。

【目次】

▲目次に戻る

1. PCとOS環境の準備

 まずは、GPU付きのPC*1を入手しよう。

  • *1 ちなみに筆者の場合は、「NVIDIA GeForce GTX 1060」というお手頃価格のGPUが乗ったゲーミングPCをサイコムで購入して本稿の手順で環境構築した後、本稿を執筆のために、Azure Virtual Machines(VM)の東日本リージョンでGPUが使えるNV6インスタンス(執筆時点で1時間ごと161.16円課金)を使用してその構築方法を再検証した。そのため、本稿で執筆のGPUは「NVIDIA Tesla M60」となっている。

▲目次に戻る

1.1. Ubuntuとデスクトップ環境

 次に、Ubuntu関連の準備を行おう。すでにUbuntuをインストール済みの方は、次の1.2節までジャンプしても構わないが、本稿の前提条件としてどのような構成になっているのかの参考にするために、軽く流し読みしてほしい。

▲目次に戻る

1.1.1. Ubuntu 最新LTSバージョン

 冒頭での説明のとおり、本稿ではUbuntuを使用する。対象のUbuntuのバージョンは、執筆時点で最新LTS*2Ubuntu 16.04 LTS(Xenial)*3である。

  • *2 「LTS」とは「Long Term Support(長期サポート)」のことである。LTS以外のバージョンとしては、(執筆時点で)Ubuntu 17.04やUbuntu 17.10などがリリースされている。しかし、特にLTS以外の最新バージョンは、各ライブラリが正式にサポートしていなかったりする可能性が高いので、採用する際には注意してほしい。UbuntuのOSは、基本的に最新のLTSバージョンを選択するのがお勧めだ(ちなみに、次期LTSはUbuntu 18.04 LTSとなっており、2018年4月26日にリリース予定だ)。ただしLTSバージョンリリース直後は、NVIDIAのドライバーやCUDA Toolkit(詳細後述)がまだ対応していない可能性もある。特に、最新のCUDA Toolkitの対応状況は確認した方がよい。ちなみに、nvidia-dockerを使ってDockerコンテナーごとにUbuntuのバージョンを切り替えることは可能なので、CUDA Toolkitが対応していなくても、最低限、NVIDIAのドライバーさえ対応していれば、LTS以外のUbuntuを選択しても何とかなるだろう(実際に筆者の手元のPCではUbuntu 17.04を使っており、何も問題は起きていない)。
  • *3 Ubuntuの各バージョンはコード名(Code Name)で呼ばれる場合があり、本稿で使用しているバージョン16.04 LTSXenial Xerusもしくは短くXenialと呼ばれている。コード名については「公式サイト:DevelopmentCodeNames - Ubuntu Wiki」(英語)を参照してほしい。

 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版パッケージに含まれるUnity(現LTSの場合。次期LTSではGNOME)ではなく、派生のXubuntuディストリビューションに含まれるXfceデスクトップ環境を使用する。Xfceは、軽量・高速でシンプルなUI(ユーザーインターフェース)に定評があり、後述のX2Goとも相性がよいのでお勧めだ。

 それでは、インストール済みのUbuntuにXfceデスクトップ環境を追加インストールしよう。これには、以下の各コマンドを順に実行してほしい。

Bash
$ sudo apt update
$ sudo apt -y upgrade
リスト1.1 apt(パッケージ管理ツール)用リポジトリをアップデートして、システムを最新版にアップグレードするコマンド

-yオプションは、問い合わせがあった場合は全て「y」(=Yes)と答えるオプションなので、自動でYesと返答したくない場合は省略してほしい(本稿のコマンドは全てこのルールで記述している)。

aptコマンドはapt-getコマンドと同じである。Ubuntu 14.04からaptコマンドの利用が推奨されている。本稿では全てaptコマンドを使用している。

Bash
$ sudo apt -y purge ubuntu-desktop
$ sudo apt -y purge --autoremove unity
リスト1.2 Unityデスクトップ環境(Ubuntuディストリビューション)をアンインストールするコマンド(Ubuntu Desktopなどをインストールしている場合)

Unityデスクトップ環境を残したい場合は、この手順をスキップしてほしい。本稿の手順どおりにUbuntu Serverをインストールした場合、この作業は不要。

Bash
$ sudo apt -y install xubuntu-desktop
リスト1.3 Xfceデスクトップ環境(Xubuntuディストリビューション)をインストールするコマンド

ソフトウェア数が多いので実行にはネットワーク速度やハードウェア性能などにもよるが10分ほど時間がかかる。XubuntuでUbuntu OSをインストールした場合、この作業は不要。
xfce4パッケージのみをインストールすることも可能だが、デスクトップ上の各種アプリケーションもインストールした方が操作するうえでは便利なので、本稿ではXubuntuディストリビューションのアプリケーション群も含めてXfceデスクトップ環境をインストールしている。

Bash
$ sudo reboot
リスト1.4 OSを再起動するコマンド

 以上の手順が完了してOSが再起動されると、図1のようなGUIでログインする画面が表示されるはずだ(ちなみに、手元のPCではなく、クラウド上の仮想マシンなどに対してSSHからコマンド実行している場合は、後述のX2Goのインストールを済ませてからでないとGUIで操作できないので注意してほしい)。

図1 Xディスプレイマネージャー

 GUIではなくCUIを使いたい場合や、その逆の場合もあるだろう。以下のショートカットキーでGUI←→CUIを切り替えられるので覚えておくと便利だ。

  • CUIに切り替える: CtrlAltF1キー
  • GUIに切り替える: AltF7キー

▲目次に戻る

1.1.3. Ubuntuの日本語化

 Ubuntuの言語が日本語ではない場合は、ここで日本語に設定してもよい。

 具体的にはCUIもしくはターミナルに切り替えて、以下のようにコマンドを実行してほしい。

Bash
$ 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 日本語ロケールとIME(MozcのFcitx版)を設定するコマンド(日本語環境が設定されていない場合)

Mozc(モズク)はGoogle日本語入力で、Fcitx(ファイティクス)はIME用のフレームワーク。

 リスト1.5のコマンド実行で日本語設定は済んでいる。より細かい設定や調整は、GUIから行うとよい。具体的には、デスクトップ画面にログインして、左上にある[アプリケーション]メニューの[設定]-[言語サポート]を実行してダイアログを表示すればよい(管理者権限で起動しないと、エラーが発生する場合がある。そのような場合は、ターミナルでsudo gnome-language-selectorというコマンドで起動してほしい)。ダイアログ表示前に[言語サポートが完全にはインストールされていません]というメッセージボックスが表示された場合は、[インストール]を選択すればよい。

図2 [言語サポート]ダイアログ([言語]タブ
図2 [言語サポート]ダイアログ([地域フォーマット]タブ)
図2 [言語サポート]ダイアログ(上:[言語]タブ、下:[地域フォーマット]タブ)

▲目次に戻る

1.2. リモート接続用サーバー

 日常使いのメインのPCとディープラーニング用のPCを分けて使用したいというケースが多いのではないだろうか。筆者の場合も、リモートのメインPC(Windows)のターミナルでSSH接続したり、リモートデスクトップ接続でデスクトップ環境を触ったりしている。このようなリモート接続が必要だという方は、SSHやリモートデスクトップ接続のサーバーをここでインストールしておこう。

▲目次に戻る

1.2.1. SSHサーバー

 OpenSSHサーバーがインストールされていない場合は、ここではOpenSSH Serveropenssh-server)をインストールする(リスト1.6)。

Bash
$ sudo apt -y install openssh-server
リスト1.6 OpenSSH Serverをインストールするコマンド(SSHがインストールされていない場合)

 インストール後に、クライアントからSSH接続すると、「接続を続行するか?」と聞かれるのでyesと入力してEnterキーを押し、次にパスワードを入力すると接続が完了し、各種コマンドが実行できるようになる(図3)。

図3 クライアントからのSSH接続例

▲目次に戻る

1.2.2. リモートデスクトップ接続サーバー

 Xfceデスクトップ環境をインストール済みの場合は、リモートデスクトップ接続もできるようにしておこう。これには、X2Goサーバー*4をインストールするとよい。

  • *4 現16.04 LTSの場合は、X2Goを使った方がよい。X2Go以外には、Windowsのリモートデスクトップ接続で使われて定評のあるリモート・デスクトップ・プロトコル(RDP)を用いたxrdpもあり、こちらの方が人気もあり、よく使われている。しかし、xrdpの日本語対応がv0.9以降となっており、xrdp 0.9はUbuntu 16.10以降で正式対応という制約があるため、現時点ではX2Goを使うのがベターであると判断した。ちなみに次期18.04 LTSではxrdpを選択した方がより良いだろう。よって18.04 LTSが登場して各ライブラリが対応した時点で、本稿の説明も書き換える予定だ。

 X2Goのインストール方法はリスト1.7のとおり。

Bash
$ sudo apt-add-repository -y ppa:x2go/stable
$ sudo apt update
$ sudo apt -y install x2goserver x2goserver-xsession
リスト1.7 X2Goリモートデスクトップ接続サーバー(Xfceの場合)をインストールするコマンド

▲目次に戻る

1.2.3. リモートデスクトップ接続クライアント

 以上でリモートデスクトップ接続サーバーの準備は整った。次に、クライアントから接続できるようにしよう。これには、X2Goクライアントをインストールする。

 上記のリンク先から自分のOS(Windows/macOS/Linux)に合ったものをダウンロード、インストールして起動し、メニューバーから[Session]-[New Session]を選択する。表示されたダイアログ(図4)に対して、以下のようにセッション設定を入力して[OK]ボタンをクリックすれば完了だ。

  • [Session]タブ:
    • [Session Name]欄: 任意のセッション名。本稿では「ディープラーニング環境」。
    • [Host]: Ubuntuのホスト名もしくはIPアドレス。例えば「192.168.0.2」。
    • [Login]: Ubuntuのユーザー名。
    • [SSH Port]: 既定値の22のまま。
    • [Session Type]: XFCEに値を変更(デスクトップ環境がXfceの場合)。
  • [Media]タブ: 音声サポートが不要であれば[Enable sound support]のチェックを外し、クライアント側での印刷サポートが不要であれば[Client side printing support]のチェックを外す。
  • [Shared folders]: クライアフォルダーとして、Ubuntu側にマウントさせたいる場合は、ここでフォルダーを追加する。
図4 X2Goクライアントの設定

 あとは、X2Goクライアント上でセッションを選択して、ログインするユーザー名とパスワードを入力して[OK]ボタンをクリックすれば、リモートデスクトップ接続が実現する。ログイン前に「ホストキーを信頼するか?」という旨のメッセージボックスが表示された場合は[Yes]ボタンをクリックする。

図5 リモートデスクトップ接続

 初めてXfceデスクトップにログインしたときには、Xfceパネル(=システム全体の[アプリケーション]メニューなど)をセットアップする方法を質問されるので、基本的には[デフォルト設定を使用する]ボタンをクリックすればよい。ちなみに、本稿で使用しているXfceパネルと異なる外観になる可能性がある。本稿と同じにするには、左上にある[アプリケーション]メニューの[設定]-[Xfce パネルスイッチ]から表示されるダイアログで「Xubuntu Modern」を選択して適用すればよい。

 他にもインストールしておきたいソフトウェアはあるが、取りあえずOSを操作・管理するのに必要十分なものはそろったので、次にNVIDIA GPU関連のインストールや設定を行っていこう。Python開発環境系のソフトウェアインストールについては後述する。

▲目次に戻る

2. NVIDIA GPU環境の準備

 NVIDIA GPUを使用するには、まずはそのドライバーと開発環境であるNVIDIA CUDA Toolkit(単にCUDAとも表現される)をインストールする必要がある。また、ディープラーニング環境を構築するためには、ディープ・ニューラル・ネットワーク(DNN)ライブラリのcuDNNをインストールする必要がある。さらに必要に応じて、GPUが使えるDockerであるnvidia-dockerのインストールもこのタイミングで行うとよい。

 この章では、こういったNVIDIA GPU環境の構築方法を説明する。CPUを使う場合は、この章はスキップしてよい。

▲目次に戻る

2.1. NVIDIAドライバーとCUDA Toolkitのバージョン要件の確認

 ドライバーも、CUDA Toolkitも、基本的には最新版をインストールしておけば問題ないはずである。しかし、使いたいディープラーニングのライブラリによっては、CUDA Toolkitのバージョン要件が細かく指定されている可能性があるので、念のために事前に調べるようにしてほしい。

 執筆時点でCUDA Toolkitの最新バージョン9.0であるが、例えばTensorFlowの場合

  • CUDA Toolkit 8.0
  • CUDA Toolkit 8.0に対応したNVIDIAドライバー
  • cuDNN v6.0
  • CUDA Compute Capability 3.0以上のGPUカード
  • libcupti-devライブラリ(NVIDIA CUDA Profile Tools Interface)

というサポート要件が指定されている。

 なお、ここで言う「GPUカード」とはNVIDIA製のグラフィックボード(=ビデオカード)のことで、各GPUカードのCompute Capability(計算能力)はこちらの公式ページ(英語)で調べられる。公式ページによると、本稿で使用したGPUカードの「GeForce GTX 1060」は6.1で、「Tesla M60」は5.2となっており、どちらも上記の要件をクリアしている。最新のNVIDIA GPUを使っていればこの要件は問題なくクリアできる可能性が高いので、心配する必要はないだろう。

 上記の「CUDA Toolkit 8.0」はUbuntu 16.04 LTS14.04 LTSをサポートしている。一方、最新の「CUDA Toolkit 9.0」はUbuntu 17.0416.04 LTSをサポートしているものの、14.04 LTSはサポートしていない。TensorFlow自体はUbuntu 14.04 LTS以降をサポートしているので、CUDA Toolkit最新バージョンではない「CUDA Toolkit 8.0」がサポート要件になっているのだと推察される。ちなみに、もしUbuntu 17.04以降を使っている場合は、指定された要件を無視して「CUDA Toolkit 9.0以降」をインストールするしかないだろう(前述の脚注*2で示したとおり、筆者はこの環境で実行しているPCもあり、問題は起きていない)。

 現在使用中のUbuntuバージョン用にCUDA Toolkitの各バージョンが提供されているかは、CUDA Toolkit Archive(英語)から確認するとよい。まず使いたいCUDA Toolkitのバージョン(今回は8.0)を選択して、[Operating System]欄はLinux、[Architecture]欄はx86_64、[Distribution]欄はUbuntuを選択すると、対応するUbuntuバージョンを確認できる(図6)。

[CUDA Toolkit 8.0 GA2]をクリック

[CUDA Toolkit 8.0 GA2]をクリック

図6 各CUDA Toolkitバージョンに対応するUbuntuバージョンの確認

▲目次に戻る

2.2. NVIDIAドライバー(=CUDAドライバー)

 インストールするCUDA Toolkitのバージョンを決めたら、次にPCに搭載したNVIDIA GPUカードを認識させるためのドライバーをインストールする。

 対応ドライバーは、こちらで検索できる。

  • 製品のタイプ: Tesla
  • 製品シリーズ: M-Class
  • 製品ファミリー: M60
  • オペレーティングシステム: Linux 64-bit Ubuntu 16.06 (「全てのオペレーティング システムを表示する」を選択すると選択肢が増える)
  • CUDA Toolkit: 8.0 (選択した製品によっては表示されない。その場合は選択なしのままでよい)
  • 言語: Japanese

 上記のような条件を指定して検索したページから、ドライバーのDebian用インストーラーパッケージ(.debファイル)をダウンロードする。通常どおりクリックしてダウンロードしてもよいが、本稿ではwgetコマンドを使う方法で説明しよう。まず、検索結果のページ上にある[ダウンロード]をクリックして、次のページの[ダウンロードの同意]ボタンリンクを右クリックしてリンクのアドレスをコピーし、リスト2.1のようにコマンドを実行する(当然ながら、wgetに指定するダウンロードリンクは、各自でコピーしたものに差し替える必要がある)。

Bash
$ wget http://jp.download.nvidia.com/tesla/384.66/nvidia-diag-driver-local-repo-ubuntu1604-384.66_1.0-1_amd64.deb \
    -O nvidia-driver.deb
リスト2.1 NVIDIAドライバー(=CUDAドライバー)のインストーラーをダウンロードするコマンド

 このコマンド例ではnvidia-driver.debファイルがダウンロードされる。

 それでは、ダウンロードしたdebパッケージからドライバーをインストールしよう。リスト2.2のようにコマンドを実行する(ファイル名は適切なものに差し替えてほしい)。

Bash
$ sudo dpkg -i nvidia-driver.deb
……省略……
The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key add /var/nvidia-diag-driver-local-repo-384.66/7fa2af80.pub

// 上記の指示に従って、次のコマンドも実行
$ sudo apt-key add /var/nvidia-diag-driver-local-repo-384.66/7fa2af80.pub

$ sudo apt -y update
$ sudo apt -y install cuda-drivers
リスト2.2 NVIDIAドライバー(=CUDAドライバー)をインストールするコマンド

 最後に、アップグレード可能なパッケージはアップグレードして、念のため再起動もしておこう(リスト2.3)。

Bash
$ sudo apt -y upgrade
$ sudo reboot
リスト2.3 パッケージをアップグレードして、OSを再起動するコマンド

 以上でNVIDIAドライバーのインストールは完了だ。

▲目次に戻る

2.3. NVIDIA GPUの状態確認

 これでNVIDIA GPUが認識されて使えるようになったはずだ。さっそくリスト2.4のコマンドを実行して、正常にNVIDIA GPUカードが認識されているかを確認してみよう。

Bash
$ lspci | grep -i nvidia
f1d2:00:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M60] (rev a1)
リスト2.4 NVIDIA GPUが正常に認識されているかを確認するコマンド

 lspciコマンドとgrepコマンドで、nvidiaという表記(大文字と小文字を区別しない)があるPCIデバイスを絞り込んで表示している。確かにTesla M60というNVIDIA GPUが確認できる。

 さらに、NVIDIAのシステム管理インターフェースを意味するnvidia-smiコマンドを実行して、NVIDIA GPUが利用可能な状態かを確認してみよう。リスト2.5のように表示されるはずだ。Driver Version: 384.90という表記がドライバーバージョンになるが、「公式サイト:ドライバー」(日本版。通常版はこちら)を見ると、執筆時点で最新のドライバーがインストールされているのが分かる。

Bash
$ nvidia-smi
Mon Nov 27 15:57:08 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.90                 Driver Version: 384.90                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 0000F1D2:00:00.0 Off |                  Off |
| N/A   39C    P0    39W / 150W |      0MiB /  8123MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
リスト2.5 NVIDIA GPUが正常に認識されているかを確認するコマンド

 ちなみにnvidia-smiコマンドは、GPUの実行状態を確認する際によく使うので、ぜひ覚えてほしい。

▲目次に戻る

2.4. nvidia-docker(OS環境切り替え)[オプション]

 nvidia-dockerは、NVIDIAが公式に提供している「NVIDIA GPUをDockerでも有効にするためのDockerエンジンユーティリティ」で、すでにバージョン2.0がリリースされている。なお、nvidia-dockerのベースとなっているNVIDIAコンテナー・ランタイム・ライブラリである「libnvidia-container」が執筆時点ではまだアルファリリースであり、「バージョン1.0より安定してきてはいるが、テストに協力してほしい」という注意書きが、公式サイト上に記載されている。

 前述したように、nvidia-dockerを使うと、DockerコンテナーごとにUbuntuのバージョンを切り替えられるようになる。Chainer、TensorFlowなど、ディープラーニングのライブラリは多数あり、必要に応じて使い分けが必要になる可能性があるが、その場合に、大本(おおもと)のOSレベルで切り替えられるようになる。Dockerコンテナーは非常に素早く起動し、作成・利用・削除も手軽であることから、1つのライブラリしか使わないと決めている人でなければ、ここでインストールするとよい。もちろん後からインストールすることも可能なので、必要になったらインストールするということでも構わない。

 なお、「複数のディープラーニングのライブラリを使い分けるのに、なぜ環境を切り替える必要があるのか」と思った人もいるかもしれない。これは、各ディープ・ラーニング・ライブラリの要件(主にcuDNNライブラリやPythonなどの対応バージョン)が異なっているからである。全てのライブラリ要件を満たす環境を構築するのは、1つのライブラリの要件を満たす環境を構築するのに比べて大変であり、実際に複数ライブラリが動く環境が作れたとしても、久しぶりに別のライブラリを動かしてみたら、以前は動作していたライブラリが動作しなくなっていたという状況が起こりかねない。このような問題に対処し続けるよりは、必要に応じてDockerコンテナーでまっさらな環境を新規構築して、必要なくなったら捨てるというやり方の方が気軽で健全である。

 というわけで筆者としては、多少のオーバーヘッドはあるかもしれないが、nvidia-dockerの使用をお勧めする。

▲目次に戻る

2.4.1. nvidia-dockerを使う場合のシステム構成

 nvidia-dockerによるシステム構成は、図7に示すようになる。

図7 nvidia-dockerのシステム構成例(公式サイトから引用して一部加工)
図7 nvidia-dockerのシステム構成例(公式サイトから引用して一部加工)
  • サーバーマシン上にNVIDIA GPUs複数搭載可能なためsが付与されている)が搭載され、その上にホストOS(Ubuntu)が存在する。
  • ホストOSの上にはCUDAドライバー(=本稿ではNVIDIAドライバーと表現)があり、その上にDockerエンジンがある。
  • nvidia-dockerでコンテナーOS(Ubuntu)を実行する際に、CUDA Toolkitを含めて起動することができる(詳細後述)。その上で任意のアプリケーションを実行する。このようなコンテナーは1~N個と複数作成できる。

 それでは、nvidia-dockerをインストールし、コンテナーを1つ作って起動してみよう。

▲目次に戻る

2.4.2. Docker

 まずはDocker本体のインストールが必要である。本稿ではDocker CE(Community Edition、コミュニティ版)をインストールした。利用要件やインストール方法は、公式ドキュメント(日本語)を参照してほしい。ここでは参考までにどのようなコマンドを実行したのかを、リスト2.6に提示しておこう。

Bash
// パッケージインストール前に念のため、apt用リポジトリをアップデート
$ sudo apt update

// 「HTTPS越しにリポジトリを使うためのapt」を有効にするパッケージをインストール
$ sudo apt -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

// Dockerの公式GPG鍵を追加:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
    sudo apt-key add -

// 鍵の指紋(fingerprint)が「9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88」かを、指紋の最後の8文字を検索することによって検証する
$ sudo apt-key fingerprint 0EBFCD88
pub   4096R/0EBFCD88 2017-02-22
      フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

// stable(安定版)リポジトリをセットアップする。「amd64」は、x86_64(=64 bitのARMv8)のこと(「uname -m」コマンドを実行すると、「x86_64」と表示される)。他には「armhf」(=32 bitのARMv7、Raspberry Piなど)」や「s390x」(=IBM z Systems)がある。「lsb_release -cs」コマンドは「xenial」(参照:前掲の脚注*3)となる。
$ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

// Dockerの最新版をインストール
$ sudo apt update
$ sudo apt -y install docker-ce

// インストールされたDockerのバージョンを確認
$ sudo docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:45 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:24 2017
 OS/Arch:      linux/amd64
 Experimental: false

// 「hello-world」イメージを実行することによって、Docker CEが正常にインストールされたかを検証
$ sudo docker run hello-world
……省略……
Hello from Docker!
This message shows that your installation appears to be working correctly.
……省略……

// dockerグループにユーザーを追加してsudoなしでも実行できるようにする(ここでは「既に存在します」となっているが、念のため実行している)
$ sudo groupadd docker
groupadd: グループ 'docker' は既に存在します
$ sudo gpasswd -a $USER docker
ユーザー <現在のユーザー名> をグループ docker に追加
$ newgrp docker
リスト2.6 Dockerをインストールしたコマンドの例

▲目次に戻る

2.4.3. nvidia-docker

 続いて、NVIDIAが提供するnvidia-dockerをインストールする。要件などの詳細は、公式ドキュメント(英語)を参照してほしいが、本稿の内容でインストールしてきたのであれば要件はクリアしているはずなので、あとはリスト2.7のコマンドを実行すればよい。

Bash
// Ubuntuディストリビューション用のnvidia-dockerリポジトリを構成する
$ 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

// nvidia-docker2パッケージをインストール
$ sudo apt update
$ sudo apt -y install nvidia-docker2

// Dockerデーモン構成をリロード
$ sudo pkill -SIGHUP dockerd
リスト2.7 nvidia-dockerをインストールするコマンド

 以上でnvidia-dockerのインストールは完了だ。

▲目次に戻る

2.4.4. Dockerコンテナー上でのGPU状態の確認

 さっそく、NVIDIAが提供するDockerイメージをrunしてGPU付きコンテナーを起動し、コンテナー上にある任意のコマンドを実行してみよう(リスト2.8)。

Bash
// Dockerコンテナー上でGPUが利用可能かを確認するためにnvidia-smiコマンドを実行
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.90                 Driver Version: 384.90                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 000009A5:00:00.0 Off |                  Off |
| N/A   32C    P0    39W / 150W |      0MiB /  8123MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

// CUDA Toolkit 最新バージョンのイメージでコンテナー上のコマンドをテスト実行
$ docker run --runtime=nvidia --rm nvidia/cuda nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

// CUDA Toolkit 8.0+cuDNN 6.0のイメージでコンテナー上のコマンドをテスト実行
$ docker run --runtime=nvidia --rm nvidia/cuda:8.0-cudnn6-devel nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61
リスト2.8 nvidia-dockerのDockerコンテナー上のコマンドを実行するコマンド例

docker run --runtime=nvidiaコマンドの代わりに、nvidia-docker runコマンドも使えることを確認しているが、公式ページの記述方法に倣い、前者の書き方で説明している。

 リスト2.8を見ると分かるように、Dockerコンテナー上でGPUが認識されていることが確認できた。

 docker runコマンドに指定されている各引数には、次の意味がある。

  • --runtimeオプション: コンテナーのために使われるランタイム。ここではnvidiaランタイムが指定されている。
  • --rmオプション: コンテナー終了時にそれを自動的に削除するモード。コマンドをテスト実行したいときに使いやすい。
  • nvidia/cudaイメージ: Dockerイメージ。ここではNVIDIA CUDA Toolkitの最新(latest)バージョンがインストール済みのDockerイメージが指定されている。
  • nvcc --versionコマンド: NVIDIA CUDAコンパイラードライバーのバージョン情報を出力するために、--versionコマンドライン引数を付けてnvccコマンドを実行している。

 3つ目のコマンド実行では、nvidia/cudaではなく、nvidia/cuda:8.0-cudnn6-develというイメージが指定されている。これは、CUDA Toolkit 8.0+cuDNNライブラリ6.0+CUDA開発環境(devel)がインストール済みのDockerイメージであることを意味する。このように、NVIDIAはnvidia-docker用に各バージョンがインストール済みのDockerイメージを提供しており、後述するCUDA Toolkit 8.0やcuDNNライブラリはインストールしなくてもすぐに実行できる状態が整っている。どのようなイメージがあるかは、次のリンク先を参照してほしい。

 nvidia/cudaリポジトリでは、下記の3つのフレーバーのDockerイメージが提供されている。

  • base: 事前ビルドされたCUDAアプリケーションを展開するための最小構成のイメージ。CUDA Toolkit 9.0以降のみ。
  • runtime: CUDA toolkitから全ての共有ライブラリを追加したCUDA実行用のイメージ。
  • devel: 共有ライブラリだけでなくコンパイラーチェーン、デバッグ用ツール、スタティックライブラリなどが追加されたCUDA開発用のイメージ。

 以上で、nvidia-dockerを利用できる環境が整った。

▲目次に戻る

2.4.5. GPU付きDockerコンテナーの実行

 上記のnvidia/cuda:8.0-cudnn6-develイメージでGPU付きDockerコンテナーを作成して起動すれば、あとはアタッチして使えばよい。この手順を簡単に紹介しよう。

 なお、このイメージを使った場合には、CUDA ToolkitやcuDNNライブラリのインストールは不要なので、この後の2.5と2.6の手順はスキップしてほしい。2.7の「CUDA Profiling Tools Interface(libcupti-devライブラリ)のインストール」からの手順は必要になる。

Bash
$ docker run --runtime=nvidia --name mycontainer -d -it -p 7777:8888 nvidia/cuda:8.0-cudnn6-devel bash

$ docker ps -a
CONTAINER ID  IMAGE                    COMMAND  CREATED         STATUS         PORTS                    NAMES
106f31d27600  nvidia/cuda:8.0-cudnn6-devel  "bash"   10 minutes ago  Up 10 minutes  0.0.0.0:7777->8888/tcp   mycontainer
リスト2.9 コンテナーを作成してバックグラウンドで起動し、さらにコンテナー一覧を確認するコマンドの例

 まずdocker runコマンドに指定されている各引数のうち、まだ説明していないものには以下がある。

  • --name mycontainerオプション: コンテナーの名前。ここではmycontainerという名前が指定されている。
  • -dオプション: デタッチドモードで起動するモード。コンテナーがバックグラウンドで実行され続ける。前述の-rmオプションと違い、終了しても削除されない。
  • -itオプション: -i(=--interactive)と-t(=--tty)の2つのオプションが合体している。これにより、ターミナル上でコンテナーの標準入出力ができるようになる。
  • -p 7777:8888オプション: 外部からアクセスされるポート番号(この例では7777)とコンテナー側のポート番号(この例では8888)を指定。コンテナー側のJupyter Notebookにホスト側からアクセスしたりするときに使用する。

 コンテナーが作成できたので、あとはこれにアタッチする(リスト2.10)。コンテナー側のbashシェルセッションに入るので、そこで以降の各種インストール処理を実行すればよい(この例ではrootユーザーによるコマンド実行になるので、sudoが不要になる点に注意してほしい)。

Bash
$ docker attach mycontainer
root@<コンテナーID>:/# 
root@<コンテナーID>:/# apt update  // aptパッケージのアップデート。sudoは不要
root@<コンテナーID>:/# apt -y upgrade  // 既存パッケージのアップグレード
root@<コンテナーID>:/# apt install -y wget  // wgetコマンドのインストール
// 必要に応じて、前述のデスクトップ環境のインストールなどを行ってもよい。
リスト2.10 起動したコンテナーにアタッチ(接続)するコマンドの例

コマンド実行後に何も表示されない場合は、もう一度、Enterキーを押してみてほしい。

 一連の作業が終わってコンテナー側のbashシェルセッションを抜けるには、Ctrlキーを押しながらPキーに続けてQキーを押せばよい。

 なお、コンテナーを終了したい場合や再起動したい場合は、リスト2.11のようにすればよい。

Bash
// コンテナーを終了する
$ docker stop mycontainer

// コンテナーを起動する
$ docker start mycontainer
リスト2.11 コンテナーを終了/起動するコマンドの例

 以上、必要最小限のコマンドだけ紹介したが、機会があれば別記事でnvidia-dockerを使う方法をより詳しく説明したい。

 基本的にnvidia-dockerは必要になってから使えばよいので、取りあえずコンテナーは終了して、ホスト側に下記の2.4以降のインストール手順を実行してほしい。

▲目次に戻る

2.5. CUDA Toolkit(開発環境)

 本稿ではTensorFlowの要件に合わせてCUDA Toolkit 8.0 GA2をインストールする。

 まずはCUDA Toolkit 8.0 GA2のベースインストーラー(本稿の例ではcuda-repo-ubuntu1704-9-0-local_8.0.176-1_amd64.deb)をダウンロードする。これには、CUDA Toolkit Archiveから前掲の図6の続きで、[Distribution]欄の次の[Installer Type]欄はdeb (local)を選択する。これにより、図8のように[Download Installers for Linux Ubuntu 16.04 x86_64]枠が表示される。この枠に、CUDA Toolkitのインストール方法(英語)が記載されているので、これに従ってインストールすればよい。

図8 CUDA Toolkitベースインストーラーのダウンロードとインストール方法
図8 CUDA Toolkitベースインストーラーのダウンロードとインストール方法

 参考までに、本稿では[Base Installer]欄にある[Download]リンクを右クリックしてリンクのアドレスをコピーして、リスト2.12のようにコマンドを実行した(当然ながら、wgetに指定するダウンロードリンクは、各自でコピーしたものに差し替える必要がある)。

Bash
$ wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb \
    -O cuda-toolkit.deb
リスト2.12 CUDA Toolkitベースインストーラーをダウンロードするコマンド

 このコマンド例ではcuda-toolkit.debという名前のファイル(=Debian用のインストーラーパッケージで、通常は.debという拡張子が付く)がダウンロードされる。念のため、ファイルが壊れていないかをチェックサムで確認しておくとよい。そのためのコマンドはリスト2.13のようになる。

Bash
$ md5sum cuda-toolkit.deb
d735c7fed8be0e72fa853f65042d5438  cuda-toolkit.deb
リスト2.13 CUDA Toolkitベースインストーラーのチェックサムを確認するコマンド

 d735c7fed8be0e72fa853f65042d5438がチェックサムの値になるが、図6に示したインストール方法の説明の中にある[Installer Checksums]リンクからファイルに対する正常なチェックサム値を参照して、両者が一致するか確認すればよい。

 それでは、ダウンロードしたdebパッケージからCUDA Toolkitをインストールしよう。リスト2.14のようにコマンドを実行する。

Bash
$ sudo dpkg -i cuda-toolkit.deb
$ sudo apt update
$ sudo apt -y install cuda
リスト2.14 CUDA Toolkitをインストールするコマンド

 今回の例では[Base Installer]欄の下[Patch 2 (Released Jun 26, 2017)]という記載があり、パッチもインストールできる。このインストール方法もここまでの説明と同様なので、リスト2.15にコマンド例だけ示す。

Bash
$ wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/patches/2/cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64-deb \
    -O cuda-patch2.deb

$ md5sum cuda-patch2.deb
b4e1d5e596ac2d6d0deaa2d558b4c40c  cuda-patch2

$ sudo dpkg -i cuda-patch2.deb
$ sudo apt update
$ sudo apt -y upgrade
$ sudo reboot
リスト2.15 CUDA Toolkitのパッチをインストールするコマンド

 以上でCUDA Toolkit(開発環境)のインストールは完了だ。

▲目次に戻る

2.6. cuDNN(ディープラーニング用ライブラリ)

 cuDNNは、CUDAを活用するDeep Neural Network(DNN)開発ライブラリである。具体的な内容は公式サイト(英語)を、インストール手順は公式ガイド(英語)を参照してほしい。

 ここでは参考までにどのようなコマンドを実行したのかを、リスト2.16に提示しておこう。

 なお、cuDNNインストーラーの.debファイルをダウンロードするためには認証が必要になるので注意してほしい。このため、wgetコマンドではなく、公式のcuDNN Downloadページ(英語)をデスクトップ環境のブラウザーで開いてから(メンバーシップにJoinしてからLoginする必要あり)、下記の3つのファイルをダウンロードしてほしい(【~】内に記述したのは、リネームした後のファイル名)。

Bash
// 3つのdebパッケージをインストール
$ sudo dpkg -i cudnn6.deb
$ sudo dpkg -i cudnn6-dev.deb
$ sudo dpkg -i cudnn6-doc.deb

//  ホームディレクトリにサンプルコードをコピー
$ cp -r /usr/src/cudnn_samples_v6/ ~/samples/cudnn_samples_v6/

// cuDNNライブラリが利用できるかテスト
$ cd ~/samples/cudnn_samples_v6/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN
Test passed!
リスト2.16 cuDNNライブラリをインストールするコマンド例

▲目次に戻る

2.7. CUDA Profiling Tools Interface(libcupti-devライブラリ)のインストール

 CUDA Profile Tools Interfaceは、GPU内の挙動を確認(プロファイリング)するのに役立つ。前述のとおり、TensorFlowなどではインストール要件となっているので、ここでインストールしておこう(リスト2.17)。

Bash
$ sudo apt -y install libcupti-dev
リスト2.17 libcupti-devライブラリをインストールするコマンド

 以上でGPU利用環境が整った。次はディープラーニングの開発環境を構築していく。

▲目次に戻る

3. ディープラーニング開発環境の準備

▲目次に戻る

3.1. Python仮想環境の使い分け指針

 開発環境において、特に複数のディープラーニング用ライブラリを使い分けたいという場合、Pythonバージョンが異なる複数の仮想環境を使い分ける手段があると便利になる。この用途のツールには、Virtualenvがあり、TensorFlowのインストールガイドでも利用が推奨されている。

 しかしデータサイエンスの分野では、AnacondaというPythonディストリビューションパッケージも人気があり、よく使われている。Anacondaは、データサイエンスでよく使われるPythonライブラリ(NumPyやSciPyなど)を簡単にインストール&バージョン管理できるツールが同梱されており、かつPython仮想環境の切り替えも可能である。

 Anacondaの仮想環境にインストールできるのは、Anacondaで用意されているパッケージだけではない。一般的なPythonパッケージ管理ツールであるpipを使っても各種パッケージのインストールが可能だ。なお、pipコマンドを使ってインストールした場合、Anacondaのライブラリ管理機能は当然ながら使えないので注意してほしい。逆に、Anacondaのライブラリ管理機能を使いたくない場合は、pipコマンドを使ってインストールする必要がある。例えばTensorFlowなどのディープラーニング用ライブラリは、pipコマンドを使って、Anacondaで作った仮想環境上にインストールしていくことが推奨されている。

 この他、AnacondaにはJupyter Notebookも含まれているなど、データサイエンスの作業をするためのほとんどの機能が入っているので、ディープラーニングをこれから始める人にはお勧めだ。本稿でもこれを用いる。

 ちなみに、nvidia-dockerをインストールしたのであれば、Python仮想環境は使わずに、Dockerコンテナーごと切り替えてもよい。ただし、Anacondaによる簡単なPythonライブラリ導入の機能も捨てがたいので、取りあえずDockerコンテナー上にAnacondaはインストールして、その仮想環境は使わずに、パッケージ管理機能だけを活用するという手段を採用するのがよりよいだろう。

 以上、いくつかのPython環境の構築方法があるので、以下にその使い分け指針をまとめておこう。

  • pipのみ: Pythonパッケージやディープラーニング用ライブラリを、OSに直接、インストールしたい人向け。さまざまなライブラリを導入したい人には、これ以外をお勧めする。
  • Virtualenv: シンプルにPython仮想環境の切り分けだけしたい人向け。全てのパッケージを自分でインストールして、細かく管理したい人には向いている。
  • Anaconda: データサイエンス関連のライブラリをまとめてインストールして管理したい人向け。これをインストールするだけでさまざまな作業が楽になるのでお勧め。
  • nvidia-docker: できるだけゼロからのまっさらな環境で個別のディープラーニング用ライブラリをインストールして使いたい人にはお勧め。Dockerコンテナーごと、環境を簡単に捨てられるのが魅力。

▲目次に戻る

3.2. Anaconda

 それではAnacondaのインストール方法を紹介しよう。

 これも厳密には公式のインストールガイド(英語)を参照してほしい。ここでは参考までにどのような手順でインストールしたのかを、以下に示しておこう。

 まずはAnacondaのLinux用インストーラー(本稿の例ではAnaconda3-5.0.1-Linux-x86_64.sh)をダウンロードする。これには、Anaconda for Linux Downloadsで、[Python 3.6 version](Python 3系のAnaconda: 以下、Anaconda3)枠にある[64-Bit (x86) Installer (525 MB)]リンクを右クリックしてリンクのアドレスをコピーする(図8)。なお、[Python 2.7 version](Python 2系のAnaconda: 以下、Anaconda2)も選択できるが、特別な理由がなければPython 3系をインストールしておけばよい(執筆時点で、3系が最新のPython環境である)。

図9 AnacondaのLinux用インストーラーのダウンロードリンクの取得

 取得したダウンロードリンクを使って、リスト3.1のコマンドを実行した(当然ながら、wgetに指定するダウンロードリンクは、各自でコピーしたものに差し替える必要がある)。

Bash
$ wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
リスト3.1 AnacondaのLinux用インストーラーをダウンロードするコマンド

 このコマンド例ではAnaconda3-5.0.1-Linux-x86_64.shという名前のファイル(=Linux用のシェルスクリプトで、通常は.shという拡張子がつく)がダウンロードされる。念のため、ファイルが壊れていないかをチェックサムで確認しておくとよい。そのためのコマンドはリスト3.2のようになる。

Bash
$ md5sum Anaconda3-5.0.1-Linux-x86_64.sh
c989ecc8b648ab8a64731aaee9ed2e7e  Anaconda3-5.0.1-Linux-x86_64.sh
リスト3.2 AnacondaのLinux用インストーラーのチェックサムを確認するコマンド

 c989ecc8b648ab8a64731aaee9ed2e7eがチェックサムの値になるが、こちらのリンク先でファイルに対する正常なチェックサム値を参照して、両者が一致するか確認すればよい。

 それでは、ダウンロードしたシェルスクリプトを使ってAnacondaをインストールしよう。リスト3.3のようにコマンドを実行する。

Bash
$ bash Anaconda3-5.0.1-Linux-x86_64.sh
リスト3.3 AnacondaのLinux用インストーラーを実行するコマンド

 インストーラーの実行内容は、リスト3.4に掲載した。ポイントを簡単に紹介しておこう。

  • インストール前にライセンスへの同意が求められ、Enterキーを押してライセンス内容を確認し、「yes」を入力して同意する必要がある
  • その後、Anaconda3をインストールする場所を聞かれるので、通常は(=ユーザーごとのインストールで問題なければ)Enterキーを入力して続行すればよい
  • インストールが開始されると、Python 3.6が未インストールの環境では最初にそれがインストールされる。ちなみにUbuntu 16.04 LTSの場合、すでにPython 3.5/2.7はすでにインストール済みのはずである(python3 --versionpython --versionコマンドで確認できる)。pipコマンドについてはインストールされていないが、Anacondaのインストーラーがインストールしてくれる。これでPython環境に最低限必要なものはそろう
  • 最後に、「Anaconda3インストール場所を環境変数PATHに追加するか?(.bashrcファイル内で設定)」を聞かれるので、「yes」を入力する
Bash
$ bash Anaconda3-5.0.1-Linux-x86_64.sh

Welcome to Anaconda3 5.0.1

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
===================================
Anaconda End User License Agreement
===================================

……ライセンス内容……

Do you accept the license terms? [yes|no]
[no] >>> yes

Anaconda3 will now be installed into this location:
/home/user-name/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/user-name/anaconda3] >>>

……インストールが実行される……

Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/user-name/.bashrc ? [yes|no]
[no] >>> yes

……環境変数PATHにAnacondaのパス設定が追加される……

Thank you for installing Anaconda3!
リスト3.4 AnacondaのLinux用インストーラーの実行内容

 インストールが終わったら、デスクトップ画面を開いてターミナルを立ち上げ、リスト3.5のコマンドを実行してみよう。

Bash
$ anaconda-navigator
リスト3.5 Anaconda Navigatorを起動するコマンド

 図10に示すAnaconda Navigatorというウィンドウが表示されるはずだ。ここにJupyter Notebookも含まれていることが分かる。

図10 Anaconda NavigatorのHomeタブ

 左側のメニューから[Environments]タブを選択すると、右側に各種ライブラリの一覧が表示され、ここでライブラリバージョンの管理が可能だ(図11)。また、中央の部分はPython仮想環境(前述)を作成したり選択したりする場所となっている。

図11 Anaconda NavigatorのHomeタブ

 この仮想環境はもちろん、GUIだけでなく、コマンドで操作することもできる(リスト3.6を参照)。

デスクトップ上のターミナル
// 「tensorflow14」という名前の仮想環境を作成する。Pythonのバージョンは3.5で、numpy/scipy/pandas/jupyterというライブラリを最初からインストールしている
$ conda create -n tensorflow14 python=3.5 numpy scipy pandas jupyter

// 後から追加ライブラリ(この例ではmatplotlib/pillow)をインストールするには以下のようにする
$ conda install -n tensorflow14 matplotlib pillow

// 仮想環境の一覧を表示
$ conda env list
# conda environments:
#
tensorflow14             /home/user-name/anaconda3/envs/tensorflow14
root                  *  /home/user-name/anaconda3

// 仮想環境「tensorflow14」を利用開始する
$ source activate tensorflow14

// 仮想環境「tensorflow14」上で各種コマンドが実行できる
(tensorflow14)$ python --version
Python 3.5.4 :: Anaconda, Inc.

// 仮想環境「tensorflow14」を利用終了する
$ source deactivate

// 仮想環境「tensorflow14」を削除する
$ conda remove -n tensorflow14 --all
リスト3.6 仮想環境を操作するコマンド

 ライブラリバージョンのアップデートについても、コマンド操作が可能だ(リスト3.7を参照)。

デスクトップ上のターミナル
// 個別のライブラリ(この例ではnumpy)を最新にアップデートする
$ conda update numpy

// 全てのライブラリを最新にアップデートする
$ conda update --all

// 仮想環境を利用開始する
$ source activate tensorflow14

// 仮想環境「tensorflow14」上でライブラリを全てアップデートする
(tensorflow14)$  conda update --all
リスト3.7 仮想環境を操作するコマンド

 以上、必要最小限の使い方だけを紹介したが、機会があれば別記事でAnacondaを使う方法をより詳しく説明したい。

▲目次に戻る

3.3. PyCharm

 PyCharmは、Python開発者の間で人気のある、JetBrains社製の統合開発環境(IDE)だ。Jupyter Notebookによる開発にも対応しており、データサイエンスやディープラーニング開発にも役立つので、ここでインストールして試してみるとよいだろう。

 PyCharmには、有償のProfessional版と無償のCommunity版がある。執筆時点ではCommunity版でも商用利用可能となっているので、まずはCommunity版から使い始めてみることをお勧めする。

 インストールするには、まず、デスクトップ画面を開いてブラウザーを立ち上げ、下記リンク先から圧縮ファイル(.tar.gzファイル)をダウンロードして、任意の場所(本稿の例では/home/user-name/pycharm-community/)に展開する。

 デスクトップ画面上のターミナルからリスト3.8のコマンドを実行すると、図12のようにPyCharmが起動する。

Bash
$ cd /home/user-name/pycharm-community/
$ bash bin/pycharm.sh
リスト3.8 PyCharmを起動するコマンド
図12 PyCharmの起動例

▲目次に戻る

3.4. Visual Studio Code

 PyCharmは本格的に開発したい場合に役立つが、もっと手軽にPythonコードを修正したいなどのニーズも多く発生するのではないだろうか。そういった場合は、Pythonなどのプログラミングコードに対応したテキストエディター(=コードエディター)が便利だ。コードエディターと言えば、Visual Studio Codeが最もお勧めである。

 Visual Studio Codeは、ここまでに何度か登場している.debファイル、つまりインストーラーパッケージとして提供されているので、インストールは簡単だ。

 デスクトップ画面を開いてブラウザーを立ち上げ、上記リンク先から.debファイルをダウンロードして、ダブルクリックするなどして実行すればインストールできる。

 インストールが完了したら、[アプリケーション]メニューの[開発]-[Visual Studio Code]を実行すれば、Visual Studio Codeが起動する。図13は実際に起動したところ。

図13 Visual Studio Codeの起動例

 注意点として、本稿で紹介したX2Go経由だとVisual Studio Codeを起動できない問題があった。これを回避するには、リスト3.9のコマンドを実行してほしい。

Bash
$ sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/' /usr/lib/x86_64-linux-gnu/libxcb.so.1
リスト3.9 X2Go経由だとVisual Studio Codeを起動できない問題を解消するコマンド

 かなり長い記事になってしまったので、インストール作業はこれで最後としよう。他にもインストールをお勧めしたいソフトウェアはいくつかあるのだが、これから先は読者自身が必要に応じて探していただければと思う。

 本稿が皆さんのこれからのディープラーニングの実践に役立てばうれしい。ニーズがあれば、年1ぐらいの間隔で、この記事もアップデートできればよいなと考えている。

サイトからのお知らせ

Twitterでつぶやこう!