環境の再構築

悲しい事に、OSが立ち上がらなくなってしまいました(2019年2月)。
Cudaのバージョンを上げようとして、色々リンクをいじっていたのが良くなかったのだと思います。
まずは大事なデータの救出から入ります。
その後、せっかくなので初めから入っていたCentOSからUbuntuに乗り換える事にしました。
機械学習ではUbuntuを前提としてライブラリが開発されている事が多く、特別な思い入れが無い場合はUbuntuを選択した方が良いようです。

…しかしこれが嵌まった…

何しろsshも利かないのでデータの救出も一苦労。
OSもバージョン違いなどでうまく入らなかったりして。

苦労したので記録しておきます。
後続の皆様のお役に立てますように。

1. レスキューモード
私の場合は、まったくOSにアクセス出来なくなっているところから始まります。
まずはレスキューモードで起動しましょう。
これにはライブDVDを作ります。

CentOSのページから、DVDイメージをダウンロード。生きているWindows PCを用いて、ISOイメージをDVDに書き込みます。ISOからの書き込みは、以前は別途ソフトが必要でしたが、Windows10であればそのまま書き込む事ができるようです。DVDをPCにセットして、ダウンロードしたファイルを右クリックして、イメージの書き込み、でOK。なんてお手軽な!

DVDドライブを持っていない場合でも、USBメモリを用いても作れます。

次にDVDからOSを起動します。
BIOSに入り、DVDドライブから起動するように設定を行います。
BIOSへの入り方は環境によって違いますが、再起動してBIOS起動中にF2やDelキーを押すのが一般的かと。
Bootの優先順位をHDからDVDへ変更します。
あまり見慣れない画面ですが、触れるところも少ないので大して迷う事もないかと。
もし間違えちゃった場合は、BIOSをExitする項目を選んでセーブしなかったら元に戻ります。
BIOSまで壊れてしまったらもう直せませんので気を付けて。

起動したらTroubleshootingモードを選択します。

このモードでは、通常の場所とは違うところにrootがマウントされています。
システムの復旧を目指すために、boot出来ないところ以外を使うって感じなのでしょうか。

通常のrootをマウントするには、

chroot /mnt/sysimage

との事ですが、ここで嵌まりポイント1。

/bin/bash

が無い、とのエラーが出てうまく行きませんでした。う~ん、、、lsで調べたところあるんですが。。。

しばらくwebを漁ったところ、これはライブDVDとシステムのアーキテクチャが違うと出るエラーの様。
アーキテクチャとは32bitなのか、64bitなのか、という事ですね。
しかしながら私は両方とも64bitを使っているのにこのエラーが出てしまいます。
色々考えて、、、chrootは諦めました。
うまく行けば、Troubleshootingモードから、変更したリンクやドライバの入れ替えを行う事で、システムの復旧ができるのではないかと思っていましたが、rootがマウント出来ないのであれば、ドライバの変更もままならず、無理です。もしかしたら何か方法があるのかもしれませんが、、、しばらく調べてやめました。

2. データの救出
あまり量は多くないのですが、時間をかけて作ったいくつかのコードが、どこにもバックアップされていない状態で眠っています。これを消してしまうのは惜しい。。。なんとかこれだけでも救出したいのです。
しかしながらsshもftpもアクセスできません。仕方ないのでUSBのHDをつなげてみましょう。

レスキューモードで起動した後、

dmesg

と打ちます。続けてUSBのHDを接続し、再度

dmesg

と打つと、先ほどのコメントにいくつか足されます。
その際、[sdb: sdb1]のような文字が現れるかと思われます。
その場合、つなげたHDはsdb1という名前で認識してますよ、と言う意味になるそうです。

次にHDをLinux用にフォーマットします。
この作業により、HDの中身は全て消されますので注意してください。

fdisk /dev/sdb1

で、pを押すと現在のパーテーションが表示されます。
一度全部消すので、dを押してください。
パーテーションが一つだけの場合はこれだけ。
複数ある場合は選択肢がでるので、全部のパーテーション削除を繰り返します。
終わったらwで書き込みます。
その後もう一度

fdisk /dev/sdb1

で起動し、今度はnでパーテーションを作ります。
救出用ですので、パーテーションは1個だけでいいですかね。
終わったらwで書き込みます。

次にHDのフォーマットを行います。

mkfs.ext3 /dev/sdb1

ここで嵌まりポイント2。
現在Linuxで主流なファイルシステムはext4です。
レスキューしたファイルをそのまま復旧したLinuxに入れるのであれば、ここはext4で良いのではと思うのですが、私は他にLinuxマシンを持っていないので、一度Windowsに退避させたいと思ったわけです。
一方Windowsの方での主流システムはntfsです。Linux用フォーマットをWindowsに読み込ませるには、後述するExt2Fsdというソフトを用いるわけですが、これが何故かExt4には反応しませんでした。(いや、Ext4に反応しない問題はWeb上でも指摘されていて、解決策も提示されているのですが、現在の私の非常時環境では実行できなかったのです。色々試して、仕方なくExt3を使う事にしました。)

続いてHDをLinux上にマウントします。

mkdir /mnt/usbhd
mount /dev/sdb1 /mnt/usbhd

一つ目の行は始めに一度実行するだけで良いです。
mntにusbhdというフォルダを作成しています。
次の行ではここにsdb1をマウントします。
これで/mnt/usbhdにデータをコピーする事ができるようになりました。
これまで作っていたファイルは/mnt/sysimage/homeの下にありますので、これをcpコマンドでひたすらコピーします。
コピーし終わって、HDを外すときはアンマウントを忘れずに。

unmount /mnt/usbhd

最後に救出したファイルをWindows上で保管します。
他にLinuxマシンがあるなど、HDにデータを入れっぱで構わない場合はこのステップは必要ありません。
Windowsマシンに、上述したExt2Fsdをインストールします。
ダウンロードはこちらから。

先ほど述べた通り、HDのフォーマットがExt4では反応しませんでしたので気を付けて。
今回はバックアップが目的なので、もう余計な事はせずにExt3にしています。
なんとか無事に大事なデータを救出する事ができました。助かった・・・

3. OSのインストール
はあ、はあ、はあ、、、もう大変。でもあと一息です。
データはレスキュー出来ましたが、やはりOSはブートしません。
色々考えましたが、ここまでで結構時間を使ってしまっているし、ここは思い切ってOSを入れ替える事にしました。
しかも、CentOSからUbuntuに乗り換えます。
ドライバなどの問題で何か不具合が起きないか不安。。。

まずはUbuntuのDVDを作成します。これはCentOSの時と同じステップですね。

と、、、ここで嵌まりポイント3。
UbuntuのHPに行くと、最新の18.10がダウンロードできるようになっています(2019年2月)。
始めは、やはり新しい方がいいだろうと18.10を入れた訳ですが、後々になって、Cuda-9.0が入れられない事が判明しました。
こういう事があるから、素人さんは手を出さない方が良い訳ですね。そうですね。

Cuda-9.0が問題なく入れられるUbuntu 16.04.6 LTSを入れます。
ダウンロードはこちらから。
日本語版ありますが、またなにか変な事が起きたらイヤなので、通常版にしました。
日本語版のダウンロードはこちらから。

結構時間がかかりますが、なんとかOSをインストールできました。

4. 環境の構築
続いてドライバを入れたりCudaを入れたりしていきます。
まずはGPUのドライバから。
手持ちのGPUにあったドライバを下記から手に入れます。
ダウンロードはこちらから。

今回はクリーンインストールからなので必要ないのですが、ドライバの入れ替えの場合は既存のものを消す必要があるそうです。
ただでさえやっかいなドライバのインストール。削除なんて極力やりたくないですね。

nvidia-uninstall

うわぁ、気を付けて。
ドライバを入れなおします。

sudo sh ./NVIDIA[のドライバ]

うまく行きましたでしょうか?

うまく行ったとして、どんどん行きます。次はCuda。NVIDIAのページからダウンロードして、ダウンロードしたフォルダで下記のコマンドを実行します。

sudo dpkg -i cuda-repo-ubuntu1604_9.0.*_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo apt update
sudo apt install cuda-9-0

次にパスを設定します。設定ファイルは.bashrcです。
ちなみに初めに.(ドット)が付いているファイルは隠しファイルです。ls -aコマンドで見られます。

export PATH=/usr/local/cuda-9.0/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:${LD_LIBRARY_PATH}

を追記して、ターミナルを一度閉じ、再度開けると設定完了です。
nvidia-smiと打って、GPUの情報が出れば良し。

どんどん行きます。お次はcuDNN。こちらのダウンロードには会員登録が必要ですが、無料です。
ダウンロードはこちらから。
cudaのバージョンにあったcuDNNをダウンロードすればよろしいかと。

ダウンロードしたフォルダに移動して下記を実行します。

sudo dpkg -i libcudnn7_7.0*+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.0*+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.0*+cuda9.0_amd64.deb 

うまくいきましたでしょうか?

5. Tensorflowのインストール
最後にTensorflowを入れます。
その前にpyenvを入れます。
その前に必要なパッケージをいくつか入れます。

sudo apt-get install -y git build-essential libssl-dev language-pack-id

そしてpyenvをgithubからクローンします。なんですかこれは。
実はイマイチありがたみが分かっていないのですが、複数のpythonのバージョンを管理できる、仮想環境だそうです。
バージョン違いによって使っているライブラリが動いたり動かなかったりするらしいので、なるべく環境を揃えておきたい人向けなのかな。

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

また、パスを編集します。.bashrcなどに下記を追記。

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH

本当に最後にTensorflowをインストール。

pip install tensorflow

GPU版の場合はこちら。

pip install tensorflow-gpu

長かったですね。大変でした。
クリーンインストール自体は一度やってみたかったので良しとしますか。
今後不具合が起きなければいいな。

環境構築 : ターミナル選び

MACなら迷わないんですよね。
標準のターミナルで全て事足ります。
今時(?)メインPCはLinuxですって猛者はなかなかいないだろうし、
LinuxマシンにWindowsからリモートアクセスしようと思ったら、やはりターミナルは必要になります。

みなさんはどんなターミナルをお使いですか?

私がやりたい事は下記の通り。

・ sshでLinuxマシンにログイン
・ X11をフォワードして、GUI環境もリモートで使えるようにする

これだけです。
なので大げさなものは必要ありません。

今まではTera Termを主に使っていました。
Cygwinも一時期使っていました。
VMWareにLinux乗っけて、そのターミナルを使うなんてこともしてました。

しかしどれもイマイチなんですよね。
Cygwinは使えない機能が結構あるし、仮想マシンは重いし、Tera Termはださい。
我慢してTera Termを使っていましたが、もっとステキなターミナルはないかと探して、見つけました。
RLoginです。

それでは早速インストールしてみましょう。
作者様のページはこちら

実行プログラムを解凍すると、中にRLogin.exeがありますので、これを起動するだけです。
お手軽です。

次に接続先を設定します。
ファイル -> サーバーに接続 -> 新規
でこちらの画面が現れます。

IPアドレスとログインユーザー名とパスワードを入れてOKを押すと保存されます。
次回からは入力いらずです。

これだけでつながりますが、X11を飛ばす場合はポートフォワードを設定しましょう。

ファイル -> サーバーに接続 -> 編集
サーバー -> プロトコル -> ポートフォワード -> 新規

ListenedのHost Nameに”localhost”、ポートに22を入れます
ConnectのHost Nameに接続先のIPアドレス、ポートに22を入れてOK

X11転送のX11ポートフォワードを使用するにチェックを入れて、
X11 Local DISPLAYに:0と入れます

できましたでしょうか?私は苦労しました。

最後にX Windowサーバーを入れます
これをいれないとXは飛んでこないと思います

Windows用のXサーバーはXmingというソフトが良く使われているそうです
ダウンロードはこちらから

Xming-6-9-0-31-setup.exeと言うファイルをダウンロード、実行するとインストールできます
ターミナルの前にXmingを起動させ、タスクバーに常駐させておきましょう

では試してみます
サーバーにログインして、xeyesとかxclockとかを試します

できました!素直に画面が出てきてくれましたよ!
私はMatlabもLinuxマシンに入れているんですが、これもGUI環境で使えるようになりました

TeraTermよりは数段かっこいいですかね、フォントとか
しばらくはこのセットで作業しようと思います

環境を整える

ディープラーニングの開発には歴史的にPythonが使われており、手に入る情報やライブラリも圧倒的にPythonが多いのだそうです。
Pythonの統合環境としてAnacondaが有名とのことで、下記のサイトから無料でダウンロードできます。早速入れてみましょう。

https://www.anaconda.com/download/

結構重いですね。ダウンロードしたファイルを指示されるとおりに進めていけば、無事にインストールできると思います。
バージョンは3.6と2.7がありますが、まあ今から始めるなら新しい方を入れておいて問題ないですね。
Windows版もMac版もLinux版もあります。全部無料で。不思議な世の中ですね。

Windows版をインストールすると、スタートメニューにAnacondaが現れます。
いくつかのソフトの内、Spyderが開発環境という事になり、コーディングや実行、デバッグを行うところになります。

これがタダで使えるとはすごい世の中ですね。
その他、Notebookも便利です。
起動するとwebブラウザが立ち上がりますが、中身はファイルのエクスプローラーのようです。

適当なフォルダに移動して、右上のnew -> Python3と押すと、見慣れない画面が出てきます。
が、なんとここでコーディングや実行が出来てしまうのです。
これは見やすくて便利。

まあ、viで開いて編集して、ターミナルから./で実行するのと変わりないですが、他人とやり取りする時もすごくスマートなのではないでしょうか。
世の中、賢い人は道具もスマートなんですね。
これがお金いらないとは、いい世の中ですね(しつこい)。

ところで、私はそのうちLinuxを使ってプログラミングしていきたいので、Anacondaを同様にLinuxにも入れます。
試しにWindowsからsshでLinux PCにログインしてSpyderを立ち上げてみたのですが、これはなぜか出来ませんでした。
X-Window Systemは入れていて、xclockは来るので、Xの問題ではないようです。
同様にnotebookもダメでした。何が悪かったのかな。。。

この辺りはちょっと嵌まりそうなので、今は考えない事にしたいと思います。

PCの選定

Deep Learningを学ぶにあたりまして、PCの選定を行いましょう。
CPUだけで行うなら、普通のラップトップ(ノート)PCで十分です。
研究用や、野望用には、やはりGPUが必要になってくるでしょうね。
ではどのくらいのスペックなら、そこそこのDeep Learningに耐えれるのか。

私はGDEP社のGU-1100を選びました。
ホントはDeeplearningBoxが欲しかったんですが、お金が足りませんでした。

Deeplearning BOXのサイトはこちら

GPUとしてはGeForce GTX 1080Ti 11GBが入っています。
NVIDIAのGPUはGeForceの他にQuadroやTeslaというシリーズがあって、GeForceは主にゲーム用との事なので、ちょっと気になったんですが、お金の関係でGeForceを使います。
OSはLinuxが基本との事で、CentOSがデフォルトで入っているようですが、Ubuntuの方が良かったなぁ。(自分で入れ替えて動かなくなったら困るから、このまま行くけど。)

今見たらもうGU-1100は古い型番になっていて、売っていませんでした。
本当に変化の早い業界だこと。
GTX 1080Tiは色々なところで使われている実績あるGPUだから、
まだまだ現役だと思うんですがねぇ。

CudaはGPUプログラミング開発環境との事です。NVIDIAのGPUを並列計算に用いる場合はCudaを使います。

…これらの環境が整っているからGU-1100を選びましたが…素人には贅沢スペックで、本格使いにはそこそこ…といったスペックなのでしょうか?

たまごが先か、にわとりが先か。
アルゴリズムを学ぶのが先か、PCを買うのが先か。

明らかにまずは勉強しろよ、となりますが、、、道具がなければ始まらないのでね。

はじめに

~ 新しい事を求めて日々を苦労する ~

近年、人工知能のニュースを見る機会が増えました。

ペッパー君は至る所で見かけるようになりましたし、OK Googleは便利ですし、人工知能の展示会などに出かけると、そこかしこに自動運転車の展示があって、未来を強く感じさせます。

ところで近年の人工知能における技術革新は、ディープラーニングの登場が牽引しているのだそうです。人工知能の研究は昔からありましたが、ディープラーニングの登場によってようやく実用に耐えうるようになり(つつあり)、様々な業界での応用が検討され始めたようです。

人工知能の可能性について、ニュースなど通じた露出が一般に広まるにつれ、各業界の主導者達は焦りにも似た感情で、いかにして人工知能をビジネスに取り込み、ライバルに先んじるかを虎視眈々と狙っているようですが、そもそもディープラーニングの専門家はまだまだ希少であるため、優秀な技術者の取り合いが始まっているのだそうです。

中には理系出身の技術者というだけで、上司から人工知能に関するビジネスの導入を依頼され、弱った事になっている方もいるのだとか。

そこで理系出身の技術者ではありますけれども、ドシロウトの筆者が、ディープラーニングの環境構築から始めた記録を残しておくと、私の後に始める誰かの役に立つかもしれないという考えから、ブログを始める事にしました。

本ブログは、ディープラーニング初心者による、ディープラーニングの初心者のための、ディープラーニング環境構築に関する記録になります。専門的な議論は他所でやっていただき、パソコンしかないところからディープラーニングを実装できるようになるまでを、ゆっくりと記録していきますので、どうぞよろしくお願い致します。

では初めから

目次のページはこちらから

(追記)
人工知能、ディープラーニングは今はすっかり有名になり、色々なところで活用法が検討されています。中でも医療分野は人工知能の応用に積極的な分野の一つです。現在私は、放射線を用いたがんの治療、放射線治療に携わっており、放射線治療と人工知能の二足の草鞋で活動しています。放射線治療を紹介するにあたり、簡単な説明動画を作成する活動を、少しずつまったりと始めておりますので、こちらもよろしければご覧ください。

放射線治療動画のご紹介