2018年1月5日金曜日

Windows10とUbuntu14.04.5のデュアルブート(OMEN by HP Desktop 880)

OMEN by HP Desktop 880では、NVIDIA GeForce GTX1080Tiが使えるデスクトップ環境が提供されています。深層学習専用機と比較するとコストパフォーマンスはかなりよいです。OMENと似たようなコンセプトのゲーム機はいろいろありますが、あとはデザインの可否でしょうか。

搭載されている1080Tiは従来の1080と比較して速度はそれほど変わりませんが、メモリーが11Gbまで拡大しています。画面表示と兼用しても、最低でも10Gb以上の領域を深層学習計算用に確保できます(描画用のグラフィックボードを追加すれば11Gbまるまる使えます)。手元のテスト環境としては十二分の能力でしょう。

OMENにはデフォルトでWindows10が付属しています。そこで今回はWindows10とUbuntu14.04のデュアルブート環境を構築します。Windows10を上書きするも一手ですが、ラボにWindows10環境がないのであえて残すことにしました。またSSDの領域を分けて使うとディスク容量に不安がありますので、Ubuntu用のディスクを新たに用意することとしました。元のWindows10は、M.2(エムドットツー)規格のSSDに搭載されています(マザーボードへの直差し)。Windows10のバックアップ領域は別途3.5インチのハードディスクに用意されており、今回は両方とも温存します。

1)新しい2.5インチSSDを用意し、筐体上部に用意されているSATAスロットに差し込みます(2スロットのうち一つを使う)。このSATAスロットは3.5インチ用なので、2.5インチSSDを差し込む際には変換アダプターがあったほうがいいです。変換アダプターがなくても差し込むことは可能ですが、ユラユラして不安定です。

2)Ubuntu14.04.5LTSのイメージDVDを用意します。末尾のバージョンが5であることが重要で、このバージョン以降がUEFIブートに対応しています。16.04LTSなら何の問題もないでしょう(ただし未試行です)。

3)Windows10の高速ブートをOFFにしてPCを落とします。http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=018214

4)イメージDVDをセットしてPCを立ち上げ、ESCキーを押し続け、BIOS画面に移行します。まずBIOSにもある高速ブートをOFFにします。さらにセキュアブート関係の項目をすべてOFFにしたうえで、起動順を変更します。DVDを最優先にして起動させます。

5)まずはインストールなしのトライモードで立ち上げてみます。

6)うまく立ち上がったらデスクトップのインストールアイコンをクリックしてインストール開始です。インストール対象はデフォルトではM.2のSSDになっているので、これを新しく差し込んだSSDのドライブに変更します(ここは慎重に!間違うとWindows10環境を失います)。あとは通常通りのインストールです。新しいディスクへのインストールですので、ディスクを完全イレースした上でのインストールを選択します。

7)再起動後、BIOS画面で再度起動順を調整して終わりです。

8)うまくいけば、UBUNTUのブートマネージャーが立ち上がります。

深層学習用の環境を整えるのは以前の記事の通りです。
https://doraemonkokoro.blogspot.jp/2016/09/ubuntuchainerinstallgtx1080_5.html
バージョンがいろいろ変わっていますが基本は一緒です。

Kerasの最新版2.1.Xでは、なぜかGPUが反応してくれなかったので、今回は2.0.8を使用しました。バックグラウンドにはTensorboardを使います。Chainerはバージョン3を使いましたが、問題なく動きました。

追記(2018年6月11日):Chainerのバージョンを4に上げました。問題なく作動しています。




2017年8月3日木曜日

Timeコマンドで実行時間を計測 【便利なプチ基礎知識】

プログラムの実行時間を知りたいとき、
Timeコマンドが便利です。

deep.pyというプログラムがあったらターミナルで
time python deep.py
という具合にtimeを頭にくっつけるだけです。

例えば、いま行っているDNNプログラムで100万回学習させると
結果は、

real 642m44.506s
user 606m28.208s
sys 30m52.744s

と、でてきます。計算に約10時間かかったことになります。

realは、実際にスタートしてから計算終了までにかかった時間
userは、計算プロセスが直接使ったCPU時間
sysは、システムが使ったCPU時間
です。

userとsysをあわせると、ほぼほぼrealになります。

2017年6月28日水曜日

An error occurred while mountingを回避【Ubuntu 14.04】

UBUNTU14.04にて。

起動時にAn error occurred while mountingなるエラーが出た。
外部ディスクの間違った情報が残ったままになっている様子。

基本的にはここで解決。

https://ubuntuforums.org/showthread.php?t=1474478

コマンドラインで
gksudo gedit /etc/fstab
にてswap以降を削除。
エラーは回避できた。

一応
/mnt/
内のそれらしいフォルダーも削除。

これでほんとうにいいのかどうかはわからんが
基本的にはこの手のエラーは/etc/fstabに問題があるようです。


2017年5月30日火曜日

Linuxコマンドを連続使用する 【便利なプチ基礎知識】

参考はこちら。
http://qiita.com/egawa_kun/items/714394609eef6be8e0bf

たいていの場合&&でいいようです。

プログラムで書いてもいいのでしょうが
なにも考えずテキストエディターコピペ置換して
下記のように一気に処理するときに便利ですね。

下記の500倍の長さのコマンドラインを打ち込んでも
まったく問題なく動作しました。さすがです。

cd '/home/eijwat/optical_flow_7_matome/OF_result_8videos/15rpm_L01/1' && python optical_flow.py result/test_20y_0.jpg result/test_20y_1.jpg -s 0 -l 1 -cc yellow -lc red -s 2 -l 2 -vs 30.0 && cd '/home/eijwat/optical_flow_7_matome/OF_result_8videos/15rpm_L01/2' && python optical_flow.py result/test_20y_0.jpg result/test_20y_1.jpg -s 0 -l 1 -cc yellow -lc red -s 2 -l 2 -vs 30.0


2016年9月5日月曜日

UbuntuにChainerをInstallする(GTX1080)

DEEP LEARNINGの計算をする際、NVIDIAのGTX1080の威力は凄いとの噂で、今回ラボに導入することにしました。DEEP LEARNINGだけではなく、メダカの3Dアニメーションのレンダリングにも活躍するはずです。研究費を節約するためごく普通のマザーボード(Intel H97Express)にGTX1080という構成です。電源は850W、SSDは256Gb、メモリーは16Gb確保しました。

インストールに苦労したので、ここに書き留めておきます。ネット上の沢山のサイトを参考にしました。感謝です。参考サイトはあまりにも多く、そして修正箇所多々でしたので引用は控えます。2016年の夏の時点でのインストールです。

準備
0)ディスプレイはGTX1080ではなく、ひとまずマザーボードのポートに差しておく。

OSのインストール
1)Ubuntu14.04LTS(64ビット)をイメージDVDからインストール(16.04LTSは非推奨)。
2)Ubuntuをアップデート。

Chainerが依存するライブラリーをインストール
3)以下はTerminalからのコマンド実行。
4)sudo apt-get install g++
5)sudo apt-get install python2.7
6)sudo apt-get install libhdf5-dev
7)sudo apt-get install python-dev
8)sudo apt-get install python-pip
9)sudo pip install -U setuptools
10)sudo pip install -U cython
11)sudo pip install -U filelock

GTX1080のドライバーをインストール
12)リポジトリ登録
13)sudo add-apt-repository ppa:graphics-drivers/ppa
14)sudo apt-get update
15)sudo apt-get install nvidia-370
この時点の最新版が370でした。
sudo apt-cache search 'nvidia-[0-9]+$'
で確かめることができます。
16)おそらく途中で「BIOSのセキュアブートをオフにしますか」という指令がくるのでOKに。
17)sudo reboot
18)ここでマザーのビデオポートは使えなくなるので、ディスプレイをGTX1080に差し直す。
18)おそらくここで「BIOSのセキュアブートをオフにしますか」という指令がくるのでOKに。次回からは聞かれない。ちなみにセキュアブートのオフ状態はOSをクリーンインストールしても生きた状態が続くので注意。
19)nvidia-smiで確認。テーブルが出てくればOK。GPU番号と稼働状態が確認できる。

CUDAのインストール
20)CUDA Toolkit8.0(RC)をnvidiaのサイトからWEBからダウンロード。ダウンロードするのは.debファイル。NVIDIAにアカウントを登録する必要がある。GTX1080の場合、現状RC版しか選択はない。
21)sudo dpkg -i ###.deb
###.debはダウンロードしたファイルのディレクトリー。Terminalにそのまま投げ込めばOK。
22)sudo apt-get update
23)sudo apt-get install cuda
24)sudo apt-get install nvidia-370(23でダウングレードされてしまうため。そのうちここは必要なくなる?)

もし修正パッチがあった場合は、
sudo dpkg -i ###.deb
でパッチをあてる。

cudnnのインストール
25)NVIDIAからcudnn5.1をダウンロード(Library for Linux)。適当なところに解凍。
26)解凍したフォルダーから所定の場所にファイルをコピー
sudo cp lib* ### /usr/local/cuda/lib64/
sudo cp cudnn.h ### /usr/local/cuda/include/
###は所定のディレクトリ-。行った先のファイルパーミッションは644に変更。

パスを通す
27)sudo vi ~/.bashrcで以下を一番下に付け加える。エディターviの使い方は各自勉強。
export CUDA_ROOT=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:
export CPATH=$CPATH:/usr/local/cuda/include
export CUDA_INC_DIR=/usr/local/cuda/bin:$CUDA_INC_DIR

リブートしてパスをアクティブにする
28)sudo reboot

パスを書き間違えているとターミナルからのコマンドがまったく通らなくなるので注意。もしすべてのコマンドが通らなくなったら、ターミナルから、
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
を実行してみる。

プロトコールバッファーを導入
29)sudo pip install protobuf

chainerのインストール
30)sudo pip install chainer
CUDAの位置などはchainerが自動で探し出してくれるので指定不要。

テストラン
31)sudo apt-get install git
32)sudo git clone https://github.com/pfnet/chainer.git
33)ホームのchanierフォルダーのパーミッションは丸ごと777に設定。
34)ホームのchainer/example/mnist内のtrain_mnist.pyを実行。
(CPUで計算。train_mnist.pyのとこはディレクトリーを)
python train_mnist.py
(GPUで計算)
python train_mnist.py --gpu=0
GPU番号はコマンドnvidia-smiで確かめることができる。普通は0になっている。
pythonのプログラム実行は、クセのようになっているsudo実行をやらないこと
sudo vi ~/.bashrcで通したパスはログインユーザーにのみ有効。

結果
35)CPU計算すると数分かかる1 epochが、GPU計算すると1秒ほどになりました。train_mnist.pyをデフォルト設定で実行すると(20 epoch)、CPU計算で約2時間、GPU計算で約20秒です。DEEP LEARNINGにはGPU計算が必須なのは間違いありません。今後複数マシンでの分散計算へと時代は移行していくでしょうが、それはまだ試験段階のようです。

後日追記1
2017年2月27日に新たなマシンが来たので再びセットアップ。インストールしていて気になったポイントは以下の通り。
A)15)sudo apt-get install nvidia-370はnvidia-378になっていた。
B)それに伴う変更なのかBIOSのセキュアブートをオフにしますかという指令が来なかった(セキュアブートに対応した?)
C)CUDA Toolkit8.0(RC)はCUDA Toolkit8.0になっていた。にも関わらず、24)のバージョン戻しは相変わらず必要。ひょっとしたらドライバーのインストールが省略できるのかもしれない。
D)python train_mnist.pyの実行でPlotReport関係のエラーが発生。それは以下でリポート済みの現象。
https://github.com/pfnet/chainer/pull/2277
古いtrain_mnist.pyファイルを動かしてみたら問題なく動いた。GPUもちゃんと動いた。

後日追記2
2016年9月にセットアップしたのはIntel H97ExpressのボードにCorei7 6700K/4core 4Ghzに16Gbメモリーという構成だった。メモリーは32Gbに増設はした。2017年2月にセットアップしたのはIntel H99ExpressのボードにCorei7 6800K/6core 3.4Ghzに32Gbメモリーという構成だった。使ってみると2016年版のほうが1.2倍くらい速い。同じGTX1080を積んでいても、古い方のマシンが速いという結果になった。

後日追記3
2017年6月19日に新しいハードディスクにインストール。既存のChainerプログラムを走らせるとCUPY関係のエラーがでた。知らない間にChainerがバージョン2に上がっていたので、たぶんこれが原因ということで、sudo pip install chainer==1.20.0.1で古いCHAINERをインストール。

後日追記4
別用途に買ってあったGTX1070を深層学習用に使えるようにした。既存のChainerプログラムを動かしてみたが十分実用に耐える実力を持っていた。十二分に速かった。

後日追記5
最近、深層学習専用機が売られています。自作PCのと差は、1)一連の深層学習用のフレームワーク(ライブラリーやツール)がプレインストールされているか否か、2)ディスプレイ専用のGPUが別に付属しているか否か、3)価格が高いか安いか、の3点だとおもいます。2)に関しては、若干計算のリソースに影響を与えるものと思いますが、大勢に影響なしだと思われますし、なんでしたら安価なグラフィックボード追加するのも一手です。1)のプレインストールは確かにありがたいですが、セットアップは1~2日の問題ですし、必要のないツールが入っていても無駄ですし、3)との兼ね合いかと思います。

後日追記6
Windows10とUbuntu14.04のデュアルブート(OMEN by HP Desktop 880)