苦労の末、 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 を使用した時うまく動かないのが気になるところ。