データ分析用サーバー構築
Date: Mar. 2018
方針
Windows 10 + Ubuntu 16.04のデュアルブート環境、主にUbuntuをリモート接続して使う。
GPUマシンの調達
強そうなので NVIDIA GeForce GTX 1080 Tiにする (適当)
GALLERIA ZZ (8700K)(ガレリア ZZ (8700K))デスクトップゲームパソコン(PC) 7407|ドスパラ通販【公式】
GALLERIA ZJ 仕様 / スペック表
OS Windows 10 Home インストール済み
CPU インテル Core i7-8700K プロセッサー
(6コア, 定格 3.70GHz, ターボ・ブースト時最大 4.70GHz,
12MB L3 キャッシュ, インテル ハイパースレッディング・テクノロジー対応)
メモリ 16GB PC4-21300 (DDR4 SDRAM, 8GBx2, デュアルチャネル)
2スロット空き(合計4スロット)
マザーボード インテル Z370 チップセット搭載 ATX マザーボード
グラフィックボード NVIDIA GeForce GTX1080 Ti 11GB GDDR5X(PCI Express3.0
SSD 500GB
HDD 2TB
光学ドライブ DVDスーパーマルチドライブ
映像出力 HDMI x1
DisplayPort x3
USB 3.0(前面) 2
USB 3.0(背面) 6 (Type A x5 + Type C x1)
ケース オリジナル ガレリア専用 KTケース ブラック(ATX)
電源 Enhance 800W 電源 (80PLUS GOLD)
キーボード GALLERIA Gaming Keyboard(USB接続)
マウス レーザーマウス(USB接続)
本体サイズ 幅207×奥行520.7×高さ450.2 mm
重量 約13.9kg
保証 1年間 持込修理保証
次の項目をカスタム
メモリ16GB → 32GB
Windows 10 Home → Windows 10 Pro
SSD + HD → SSD + SSD
Ubuntuのインストール
Ubuntu 16.04 LTSのイメージをダウンロードしてDVD-Rに焼く
DVDドライブから起動してUbuntuのインストールウィザードに従う
1. Windowsが入ってない方のSSDのフォーマット
2. パーティション作成 (system 50GB, home 160GB, swap 16GB)
3. Install
Bootloaderのインストールに失敗、みたいなエラーメッセージが出て途中で止まる。
以下のサイトをみると「EFIシステムパーティション」をあらかじめ作成する事で問題が回避できるようだ。
UEFIのPCにUbuntu 16.04をインストールする(ライブメディアから起動 〜 インストールの種類の選択)
が、もういちどパーティション削除からやりなおしたらEFIシステムパーティションの作成をしなくても成功した。
以降Windowsが起動しないようにEFIのメニューでUbuntuをインスールしたSSDのブート優先度を最高にする。
Ubuntu Setup
ネットに繋がらないのでIntelNICドライバのインストールから開始。GALLERIA ZZ購入者は同じ轍を踏んでいる様子。
次のサイトを参考に
code:bash
$ cd e1000e/src
$ make
$ sudo make install
$ sudo rmmod e1000e
$ sudo modprobe e1000e
$ modinfo e1000e
filename: /lib/modules/4.4.0-21-generic/updates/drivers/net/ethernet/intel/e1000e/e1000e.ko
version: 3.3.4-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 759D7311A5194827E769673
$ sudo /etc/init.d/networking restart
$ sudo update-initramfs -u
ただし、これだけでは apt dist-upgrade の度に modprobe が必要になる。面倒くさいので初期状態で対応ドライバの入っているUSBドングルをラズパイから引っ込ぬいて差した方が楽だろう。
NVIDIA GPU Driver
叩くとエラーになるので最初から入っているGPUのドライバを削除する。
code:bash
$ sudo service lightdm stop
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf # blacklist nouveau とか書く
$ sudo update-initramfs -u
$ sudo reboot
$ sudo service lightdm stop
$ sudo bash ./NVIDIA-Linux-x86_64-390.42.run
$ sudo service lightdm start
$ sudo reboot
動作確認
code:bash
$ dpkg -l | grep nvidia
ii nvidia-prime 0.8.2 amd64 Tools to enable NVIDIA's Prime
ii nvidia-settings 361.42-0ubuntu1 amd64 Tool for configuring the NVIDIA graphics driver
$ nvidia-smi
Wed Apr 4 01:01:42 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 On | N/A |
| 25% 31C P8 11W / 250W | 173MiB / 11171MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1278 G /usr/lib/xorg/Xorg 170MiB |
+-----------------------------------------------------------------------------+
ここまででLightGBMのGPU版はビルドできるようになる
その他
code:makefile
.PHONY: system/*
system/init:
sudo apt-get install sysv-rc-conf
system/ufw:
ufw status
ufw enable
ufw default deny
ufw allow from xxx.xxx.xxx.xxx/32
ufw reload
ufw status verbose
.PHONY: package/*
package/devtool:
sudo apt-get install -y \
language-pack-ja-base\
htop iotop\
tree\
tmux\
autojump\
git tig\
silversearcher-ag\
curl wget\
zsh\
python3-dev\
fonts-ipafont-gothic fonts-ipafont-mincho\
graphviz
package/for_lightgbm:
sudo apt-get install -y \
cmake gcc\
ocl-icd-opencl-dev\
nvidia-opencl-icd-384 nvidia-opencl-dev\
libboost-dev libboost-filesystem-dev
.PHONY: python/*
python36/bin:
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6 python3.6-dev
sudo python3.6 get-pip.py
python36/utils:
sudo pip3.6 install --upgrade pip
sudo pip3.6 install percol
sudo pip3.6 install httpie
sudo pip3.6 install virtualenv
sudo pip3.6 install pipenv
.PHONY: vim/*
vim/deps:
sudo apt-get install -y build-essential ncurses-dev lua5.2 lua5.2-dev luajit
vim/src:
mkdir -p vim/src
vim/compile:
cd vim/src/vim/; ./configure \
--prefix=/usr/local \
--enable-fail-if-missing \
--with-features=huge \
--disable-selinux \
--enable-luainterp \
--enable-python3interp \
--with-python3-config-dir=/usr/bin/python3.6m-config \
--enable-cscope \
--enable-fontset \
--enable-multibyte
cd vim/src/vim/; make -j 8
vim/install:
cd vim/src/vim; sudo make install
Intel MKL
Jupyter用Python環境
汎用用途、ディープラーニングを使わないKaggleはこっちで
NVIDIA Docker
ディープラーニング開発環境は個別に用意したいのでNVIDIA Dockerを導入する
先にDockerをいれる。
動作確認
code:bash
$ sudo docker version
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:10:01 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:08:31 2018
OS/Arch: linux/amd64
Experimental: false
NVIDIA DockerのインストールはREADMEの通りにやれば良い。
動作確認
code:bash
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Unable to find image 'nvidia/cuda:latest' locally
latest: Pulling from nvidia/cuda
22dc81ace0ea: Pull complete
1a8b3c87dba3: Pull complete
91390a1c435a: Pull complete
07844b14977e: Pull complete
b78396653dae: Pull complete
59876c12b10f: Pull complete
92ea808ac02a: Pull complete
569bd533d309: Pull complete
2db1f6a96615: Pull complete
2b9d78c87b7c: Pull complete
Digest: sha256:74570aef804e30486eb74b284fd3091d14ca7144736c44fb48c13e5e6afb963f
Status: Downloaded newer image for nvidia/cuda:latest
Tue Apr 3 17:22:57 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 On | N/A |
| 25% 31C P8 13W / 250W | 173MiB / 11171MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
TensorFlow
TensorFlow公式Dockerfileが使える。
code:bash
$ docker run --runtime=nvidia -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu
でJupyter Notebokが起動する。これだとPython2.7環境なので、Python3にするなら
code:bash
$ docker run --runtime=nvidia -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu-py3
「latestにするとTensorFlowのバージョン変わったときにCUDA周りのrequirement変わるから、できれば特定のバージョンを指定したほうが良い」との助言をもらった