Ubuntu 18.04 で Tensorflow の GPU 環境と XRDP 環境の構築

この記事は約9分で読めます。

苦労の末、 Ubuntu 18.04 で Tensorflow の GPU 環境と XRDP によるリモートデスクトップ環境を構築したためそのまとめ。

Ubuntu18.04のインストール

これについてはGUIに従って進めるだけな上、いくらでも情報があるので省略。

ただ未確認だが、途中でてくるプロプライエタリのドライバはインストールしないほうが良いと思われる。

また、インストール後に以下により、全てのアップデートを適用。

sudo apt update
sudo apt upgrade

ソフトウェアアップデート管理の環境から、 NVIDIA 純正ドライバが GUI で選択できるようになっているが、これをすると Tensorflow の GPU 版が使えなくなるので、決して選択しないこと。

基本的な環境設定

直接必要でないもののが多いが、ないと困るツールなどをインストール。

SSHサーバのインストール

とりあえずないと困るので、以下により SSH および SFTP サーバをインストール。

sudo apt install openssh-server

ちなみに固定 IP は必須。 GUI 環境で変更可能。ただ、再インストールなどで、同一の IP を使用していると、クライアント側で以下のコマンドを使用して前の環境の情報を消去しないといけないことがある(Macなど)

ssh-keygen -R 設定したIPアドレス

Wake On LAN の設定

GPU で使用している Geforce 1080TI のおかげで、1ヶ月電源つけっぱなしだとサーバだけで1万円くらい電気代がかかる。その対策としてサスペンドとリモートからの Wake On LAN 環境を準備することにする。

まずは、以下により pm-utils をインストールして、簡単にサスペンドできるようにしておく。

sudo apt install pm-utils

これにより、以下のコマンドでサスペンドできるようになる。

sudo pm-suspend

続いて Wake On Lan の設定をするために、以下のコマンドで NIC の名称(LANポートのデバイスの名称)を確認する。

ip a

確認した NIC 名で Wake On LAN の設定状況を確認する。

sudo ethtool enp****** | grep Wake-on:

結果が Wake-on: d なら以下の対処が必要なようだが、自分の環境では Wake-on: g と出たので、以下のコマンドは実行していない。

sudo ethtool -s enp4s0 wol g
$ sudo sh -c "echo '#!/bin/bash
ethtool -s enp4s0 wol g
exit' > /etc/init.d/wakeonlan"
$ sudo chmod +x /etc/init.d/wakeonlan
$ sudo update-rc.d -f wakeonlan defaults

この他にも BIOS の設定も必要。

開発ツールのインストール

これがないとNVIDIAのドライバがインストールできないので、必須。ただ、7月以降くらいからあらかじめ入っているようになった。

sudo apt install build-essential

統合グラフィックとグラフィックカードの切り替えツールのインストール

途中で切り替えが必要になる。CUI環境なら不要なはずだが、これも7月以降くらいからあらかじめ入っているようになった。

sudo apt install nvidia-prime

リモートデスクトップ用のXRDPのインストール

これを使用するために18.04を選んだようなもので、 Windows や Mac から、 Microsoft のリモートデスクトップクライアントを使って操作できるようになるツール。インストール方法は以下のとおり。

sudo apt install xrdp

この後に、ログイン時にカラーマネジメントの認証を求められるのを回避するために、以下の設定を実施する。(2回求められるのが1回に減っただけ。キャンセルすればどちらでも問題は生じない)

cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla
[Netowrkmanager]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF

実行後にリブート。

sudo systemctl restart polkit
sudo reboot

これでリモートデスクトップが使用できるようになる。

Anaconda のインストール

必須な環境ではないが、便利なので。 Anaconda********.sh の名称は、ダウンロードしたバージョンによるので任意に変更の必要がある。

bash Anaconda3-5.2.0-Linux-x86_64.sh

yes → Enterキー → yes → no の順でインストールを実行。インストール後はリブートが必要。

source ~/.bashrc
sudo reboot

再起動したら、とりあえず Anaconda 本体含めてアップデートを実行。

conda update conda
conda update --all

以下を実行して tensorflow をインストール。その他も任意でインストールを実行。( pip でも良いが)

conda install tensorflow-gpu

Pycharm のインストール

GUI 環境で使用する場合、あると便利なためインストール。ダウンロードしてきたファイルを解凍して、 PATH を設定する。 PATH を設定することで、ターミナルで pycharm.sh だけで起動できるようになる。

ダウンロードしてきたファイルの解凍

tar -xvf pycharm-professional-2018.2.1.tar

PATH の設定

解凍後、以下のとおり PATH を設定。

sudo vi ~/.bashrc
export PATH="~/pycharm-2018.2.1/bin":$PATH

設定後、再起動。

source ~/.bashrc
sudo reboot

必要性は不明だが、 Pycharm 起動時にエラーが出るので以下をインストールすることで解決。

sudo apt install libcanberra-gtk-module

Pycharm の日本語化

zip を解凍し、中の plugins/jp.sourceforge.mergedoc.pleiades/ を /home/(ユーザ名)/.{product_version}/config/jp.sourceforge.mergedoc.pleiades/ にコピー

開発ツールのインストール

これがないと自分が使いたい MeCab を使うための mecab-python3 が Pycharm で使えない。他にも色々な場面で Python.h ファイルがないというエラーが出るので、インストールしたほうが良いと思われる。

ただ、当初は以下のツールをインストールしていたのだが、うまくインストールできなくなってしまった。

sudo apt install python3-distutils

その後、以下をインストールすることで解決した。(選択肢は複数あるらしい)

sudo apt install python3.6-dev

NVIDIA のドライバ、 CUDA 、 CUDNN 環境の構築

いよいよ本題の GPU によるディープラーニング環境の構築。

OS 標準ドライバの無効化

まずは、 BIOS でディスプレイ出力を NVIDIA ( IGD から PEG )に変更後(必須)、 Ubuntu 標準の NVIDIA 用ドライバである nouveau を、以下のように .conf ファイルを作成することで無効化する。

sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

ファイルを作成したら、リブート。

sudo update-initramfs -u
sudo reboot

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

NVIDIA のディスプレイドライバを OPENGL を除外してインストールを実行。 OPENGL を除外する理由は、インストールしてしまうと XRDP でリモートデスクトップが使えなくなるため。

sudo sh NVIDIA-Linux-x86_64-390.77.run --no-opengl-files

continue → ok → yes → ok でインストール実行。

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

XRDP を使うためには、こちらも OPENGLを除外してインストールする必要がある。そのためのコマンドは以下のとおり。

sudo sh cuda_9.0.176_384.81_linux.run --override --no-opengl-libs

accept → y → n → y → Enterキー → y → y → Enterキー でインストールを実行。

引き続き、 CUDA のパッチを適用。

sudo sh cuda_9.0.176.1_linux.run
sudo sh cuda_9.0.176.2_linux.run
sudo sh cuda_9.0.176.3_linux.run

いずれも、accept → Enterキーでインストールを実行。

CUDNN のインストール

まずはダウンロードしてきた CUDNN のファイルを解凍する。

tar -xvf cudnn-9.0-linux-x64-v7.tar

必要なファイルを必要な箇所にコピー(コピー元のファイルは不要)

sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/

ファイルのアクセス権を変更する。

sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

ツールのインストールを実行。

sudo apt install libcupti-dev

PATHの設定を行う。

sudo vi ~/.bashrc
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
source ~/.bashrc

後処理

ディスプレイ出力に IGD を使用するため、切り替える。

sudo prime-select intel

再起動を実施。その際、 BIOS でディスプレイ出力を PEG から IGD に変更する。

sudo reboot

これで Tensorflow-GPU と XRDP の両立ができるようになった。ただ、ネットワーク構成を変えたからか、途中から Wake On LAN が使用できなくなった。

また、 OS の設定の問題かキーボードの問題かはわからないが、 vi を使用した時うまく動かないのが気になるところ。

タイトルとURLをコピーしました