Ubuntuで機械学習用リモートサーバの構築

OS が入っていない空のサーバをリモートで使えるようにしてほしいと頼まれたので、いろいろ参考にしながら構築しました。

大まかに説明すると、Ubuntu の入った USB を使って OS をインストールしてからネットワークの設定やドライバ、パッケージのインストールを行って SSH で使えるようになればゴールです。

※ 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 の違いは最初に含まれているパッケージだけらしいです。

インストールメディアの作成方法は下の記事を参考にしました。

UbuntuのLive USBをつくる
Ubuntu を USB メモリから立ち上げて利用するために、Live USB を作っていきます。(※自己責任で)

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 カードを認識しているか確認します。

$ ifconfig

アウトプットに lo 以外が表示されていれば、LAN カードを認識できています。認識できていない場合はドライバを入れてください。対応するドライバは以下のコマンドで確認できます。

$ lspci | grep 'Ethernet/|Network'

ドライバのインストール方法はメーカーごとに異なるので gg ってください。

LAN カードが認識できていれば自動的に接続できるはずですが、うまく接続できなかった場合は以下の情報を調べて、手動で入力する必要があります。

  • IP アドレス
  • ネットマスク
  • ゲートウェイ
  • DNS

OS を更新する

イーサネットに接続し、インターネットが利用できるようになったら OS を最新版に更新します。

$ sudo apt-get update
$ sudo apt-get upgrade

リモート接続できるようにする

Ubuntu Desktop なのでサーバにするためにパッケージをインストールします。

$ sudo apt-get install openssh-server

ユーザーを作成する

利用するにあたっては sudo ユーザー以外に個人でアカウントを使いたいので、下記のコマンドで sudo 権限なしのユーザーを作成します。作成したユーザーには後から sudo 権限を付与することができます。

$ adduser <username>

接続可能か確認する

ここまで来たら、サーバに接続できるか確認します。

$ ssh <username>@<IP address or domain>

NVIDIA GPU を利用する準備

TensorFlow のドキュメントに従って、GPU を使うためのドライバのインストールなどを行っていきます。

# 環境変数設定
$ 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 も利用します。

$ python3 --version
$ pip3 --version
$ virtualenv --version

不足パッケージのインストール

もしバージョンが表示されなければパッケージが入っていないので、インストールします。

$ sudo apt update
$ sudo apt install python3-dev python3-pip
$ sudo pip3 install -U virtualenv

仮想環境の利用

仮想環境の構築

Python3 が動く環境を作ります。

# ホームディレクトリ直下で作成する場合
<username>@<pc name>:~$ virtualenv --system-site-packages -p python3 ./<environment>

仮想環境の有効化

仮想環境を切り替えると python コマンドで Python3 が立ち上がります。(デフォルトは Python2)

また、pip も pip3 が使われるようになります。

$ source ./<environment>/bin/activate

仮想環境の無効化

(<environment>) <username>@<pc name>:~$ deactivate

ログイン時に自動で仮想環境を有効化する

利用するユーザーのホームディレクトリ下の .bashrc を編集して、ログイン後に仮想環境に入るように設定します。有効化のコマンドを記述すればいいだけです。

# 何らかのテキストエディタで開く
$ vi ~/.bashrc

--------------------------------------------------
source ./<environment>/bin/activate
--------------------------------------------------

TensorFlow (GPU版) インストール

仮想環境下でパッケージをインストールします。

$ pip install --upgrade pip
$ pip install --upgrade tensorflow-gpu

インストールできていれば、Python 上から呼び出せます。

$ python
>>> import tensorflow as tf

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