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でダウングレードされてしまうため。そのうちここは必要なくなる?)

cudnnのインストール
25)NVIDIAからcudnn5.1をダウンロード。適当なところに解凍。
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

プロトコールバッファーを導入
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をインストール。これで動いた。バージョン2ってなんだ?

後日追記4
別用途に買ってあったGTX1070を深層学習用に使えるようにした。既存のChainerを動かした感じからすると実用に耐える実力を持っていた。十二分に速い。条件検討のために複数台必要なときにはGTX1070も候補ではないだろうか。

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