Ubuntuで機械学習用リモートサーバの構築
OS が入っていない空のサーバをリモートで使えるようにしてほしいと頼まれたので,いろいろ参考にしながら構築しました.
大まかに説明すると,Ubuntu の入った USB を使って OS をインストールしてからネットワークの設定やドライバ,パッケージのインストールを行って SSH で使えるようになればゴールです.
Caution
(Windows ユーザーの場合)下記の説明では macOS のターミナルを用いて説明していますが,Windows の PowerShell などは一部のコマンドが対応していません.SSH には WLogin, SCP には WinSCP などのソフトウェアを利用することをおすすめします.
インストールメディアの作成
最初に,サーバに Ubuntu をインストールするためのメディアが必要になります.メディアは CD や DVD でも可能ですが,今回は USB メモリを使っています.
TensorFlow は 18.04 にも対応していますが,Chainer はまだのようです.他にも 18.04 に未対応のパッケージがあるかもしれないので,Ubuntu のバージョンは 16.04 LTS で進めていきます.
また,今回はデスクトップ版を使っています.Ubuntu Desktop と Ubuntu Server の違いは最初に含まれているパッケージだけらしいです.
インストールメディアの作成方法は以下の記事を参考にしました.
OS インストールの手順
USB でブート
インストールメディアが作成できたら,電源が入っていないサーバに挿して起動します.このとき,USB でブートしなければならないため,起動した直後に一瞬だけ表示される画面で特定のキーを押す必要があります(よく見るのはファンクションキーか Del).
どのキーを押すかはメーカーによって異なるので,目を凝らしてみてください.
本体にインストール
ブートメニューが開けたら USB ドライバのブート順位を上げて再起動します.USB からブートできると GNU GRUB が表示されるので,Try Ubuntu without installing を選択します.
起動後,デスクトップ左上にインストールマネージャーが表示されるはずです.これを利用してサーバ本体に OS をインストールしますが,一点だけデフォルト設定を変更する箇所があります.
インストール方法を選択する画面で「それ以外」を選択し,Ubuntu の利用方法は「ext4 ジャーナリングファイルシステム」,マウントポイントは「/」とします.また,ブートローダのインストール先がサーバの SSD になっていることを確認します.
(Install Ubuntu で進めたところ,ブートローダが入らなかったようで起動できなかった)
Ubuntu の起動順位を上げる
インストールが終了すると,再起動を求められます.電源が落ちてから USB メモリを抜き,再びブートメニューに入って Ubuntu の起動順位を上げます.
その後,設定を保存して再起動すると自動的に Ubuntu が立ち上がるはずです!
イーサネット接続を確認する
まず,有線接続,無線接続を確認し,有線の場合は LAN ケーブルが接続されているか確認します.
次に,Ubuntu 上のターミナルで以下のコマンドを実行し,LAN カードを認識しているか確認します.
terminal
$ ifconfig
アウトプットに lo
以外が表示されていれば,LAN カードを認識できています.認識できていない場合はドライバを入れてください.対応するドライバは以下のコマンドで確認できます.
terminal
$ lspci | grep 'Ethernet/|Network'
ドライバのインストール方法はメーカーごとに異なるのでぐぐってください.
LAN カードが認識できていれば自動的に接続できるはずですが,うまく接続できなかった場合は以下の情報を調べて,手動で入力する必要があります.
- IP アドレス
- ネットマスク
- ゲートウェイ
- DNS
OS を更新する
イーサネットに接続し,インターネットが利用できるようになったら OS を最新版に更新します.
terminal
$ sudo apt-get update
$ sudo apt-get upgrade
リモート接続できるようにする
Ubuntu Desktop なのでサーバにするためにパッケージをインストールします.
terminal
$ sudo apt-get install openssh-server
ユーザーを作成する
利用するにあたっては sudo ユーザー以外に個人でアカウントを使いたいので,下記のコマンドで sudo 権限なしのユーザーを作成します.作成したユーザーには後から sudo 権限を付与することができます.
terminal
$ adduser <username>
接続可能か確認する
ここまで来たら,サーバに接続できるか確認します.
terminal
$ ssh <username>@<IP address or domain>
NVIDIA GPU を利用する準備
TensorFlow のドキュメントに従って,GPU を使うためのドライバのインストールなどを行っていきます.
terminal
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64
# NVIDIAドライバ,CUDAインストール
# Add NVIDIA package repositories
# Add HTTPS support for apt-key
$ sudo apt-get install gnupg-curl
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
$ sudo apt-get update
# Install NVIDIA driver
# Issue with driver install requires creating /usr/lib/nvidia
$ sudo mkdir /usr/lib/nvidia
$ sudo apt-get install --no-install-recommends nvidia-410
# Reboot. Check that GPUs are visible using the command: nvidia-smi
# SSH接続は切断されるので,再起動終了まで数分待ってから再接続
$ systemctl reboot -i
$ nvidia-smi
# Install development and runtime libraries (~4GB)
$ sudo apt-get install --no-install-recommends \
cuda-10-0 \
libcudnn7=7.4.1.5-1+cuda10.0 \
libcudnn7-dev=7.4.1.5-1+cuda10.0
# Install TensorRT. Requires that libcudnn7 is installed above.
$ sudo apt-get update && \
sudo apt-get install nvinfer-runtime-trt-repo-ubuntu1604-5.0.2-ga-cuda10.0 \
&& sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends libnvinfer-dev=5.0.2-1+cuda10.0
Python 環境の確認
今回は Python3 を使っていきます.仮想環境を作ってデフォルトの環境を汚染しないようにするため,virtualenv も利用します.
terminal
$ python3 --version
$ pip3 --version
$ virtualenv --version
不足パッケージのインストール
もしバージョンが表示されなければパッケージが入っていないので,インストールします.
terminal
$ sudo apt update
$ sudo apt install python3-dev python3-pip
$ sudo pip3 install -U virtualenv
仮想環境の利用
仮想環境の構築
Python3 が動く環境を作ります.
terminal
<username>@<pc name>:~$ virtualenv --system-site-packages -p python3 ./<environment>
仮想環境の有効化
仮想環境を切り替えると python
コマンドで Python3 が立ち上がります.(デフォルトは Python2)
また,pip も pip3 が使われるようになります.
terminal
$ source ./<environment>/bin/activate
仮想環境の無効化
terminal
(<environment>) <username>@<pc name>:~$ deactivate
ログイン時に自動で仮想環境を有効化する
利用するユーザーのホームディレクトリ下の .bashrc を編集して,ログイン後に仮想環境に入るように設定します.有効化のコマンドを記述すればいいだけです.
terminal
# 何らかのテキストエディタで開く
$ vi ~/.bashrc
--------------------------------------------------
source ./<environment>/bin/activate
--------------------------------------------------
TensorFlow (GPU 版) インストール
仮想環境下でパッケージをインストールします.
terminal
$ pip install --upgrade pip
$ pip install --upgrade tensorflow-gpu
インストールできていれば,Python 上から呼び出せます.
terminal
$ python
>>> import tensorflow as tf