iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

パソコンを新調したのでとりあえずDeeplearning4j開発環境を拵えてみる

こんにちは、和田です。

最近ずっと自宅のPCの調子が悪かったので、初売りのセールを利用してPCを新調してみました。

ちなみに余談ですが、ワタクシ元PCショップ店員でして、PCの自作ならお手の物。
嫁もその時の職場で知り合ったので、PCパーツの知識に明るく、こういう事に関して話が早いので助かります。

■ 確認してた症状
メモリ4枚挿し状態でMEMTEST → エラー
挿しなおしで問題なし → 後日またエラー → しばらく2枚挿しで凌ぐ

5枚刺さってるSSDのうち、2枚が不定期に見えなくなる

ちなみに、昨年嫁の実家に何故か転がってた550Wの電源に積み替えたばかりなので、電源はたぶん大丈夫。

と、いうことで、嫁と会議したところ、
 ① マザー・CPU・メモリの3点セットをとりあえず変えよう
 ② 勿体なくて歴代SSDを山のようにつないでたのをやめて、1本化しよう

といったプランでパーツを選んだ結果がこちら。

CPU : Core i5-6500 3.2GHz
MEM : Kingston DDR4 8GB x 2
M/B : Asrock H170M PRO4
SSD : Samsung 850 EVO 500GB


ケース、電源、ODD、GPUは使いまわしです。
初売りセール品を狙って買ったので、Win10も付けても6万掛からず。
まぁ、昔みたいに家でガリガリゲームやるわけでもないし、良いかなと。

ちなみに、今回15年ぶりくらいに自分のPCをCPU付属のリテールクーラーで組みました。
付けまくってたSSDも淘汰したんで、ケースの中が非常に綺麗に。
あぁ、素晴らしい。。。

そして、ここからが本題

そんな訳で、せっかく綺麗なWindows10が出来たんだしと言う理由だけで、
サクっとDeepleaning4j (DL4J) の環境構築だけでもしてしまおうかなと思った次第です。(無計画)


ちなみに、DL4Jのサイトはこちら↓

deeplearning4j.org

まずはIDE

とりあえず、定番のPleiades All in one Eclipseを入手します。
なお、DL4Jのクイックスタートガイドによると「IntelliJ IDEA」がオススメと書いてあります。

Deeplearning 4 j のクイックスタートガイド - Deeplearning4j: Open-source, Distributed Deep Learning for the JVM


ええい、知るか。ワシはEclipseを使いたいんじゃ!(無計画)

そんな訳で、↓のサイトからPleiades All in one EclipseJava版をダウンロードします。

Eclipse 日本語化 | MergeDoc Project

この時、色々ダウンロード出来るんですが、Javaの64bit版を選びます。
ちなみに、32bit版だとDL4Jのライブラリが動かないので、64bit版必須です。

本気でDeeplearningをやるならPython環境の方がメジャーなので、PyDevとか入っている版も視野なのですが、今回はとりあえずJavaで動かしてみるので、Java版を使います。

使いたくなったら後でpluginを足せばいい!それがEclipse
(そして、pluginが増えすぎて不安定になるのもEclipse


f:id:ipx-writer:20170121174658p:plain

ダウンロードが完了したら、適当な場所に解凍します。
今回は「C:\pleiades」に解凍しました。
とりあえずeclipse.exeを起動します。

f:id:ipx-writer:20170121182752p:plain

サンプルプロジェクトを作成

初手からクイックスタートの推奨をガン無視したので、IntelliJ 向けに書かれている内容をEclipse向けに読み替えながら進めます。
えーと、なになに。gitでサンプルを落として来いと。

ウィンドウ > ビューの表示 > その他を開いて、出てきたウィンドウから Gitリポジトリーを選択します。

f:id:ipx-writer:20170121183040p:plain

GitリポジトリーViewで 「Gitリポジトリーの複製」を選び、URIの複製を選びます。
URIに「https://github.com/deeplearning4j/dl4j-examples.git」と入力し、次へを押します。

f:id:ipx-writer:20170121205733p:plain

ブランチの選択ではmasterを選択して次へ。
f:id:ipx-writer:20170121205811p:plain

宛先のディレクトリーを「C:\pleiades\git\dl4j-examples」にして、
サブモジュールのクローンにチェックを入れて完了を押します。

f:id:ipx-writer:20170121205828p:plain


しばらくすると、Gitのクローンが出来上がるので、Gitリポジトリーの中から作業ツリーを選択し、dl4j-examplesを右クリックしてプロジェクトのインポートをします。

f:id:ipx-writer:20170121212320p:plain

ここでは「一般的なプロジェクトとしてインポート」を選択してインポートします。

f:id:ipx-writer:20170121212437p:plain


そうするとパッケージエクスプローラーに「dl4j-examples」プロジェクトが出来上がります。

ここで問題発生。

このプロジェクトはMavenプロジェクトとして動いてほしいのに、Eclipse上はただのプロジェクトとして認識しています。
どうにかしてMavenプロジェクトとしてこの「dl4j-examples」を認識させたいので。。。


色々考えたんですが、面倒なので「.project」ファイルを直接書き換えてしまおう作戦。
パッケージエクスプローラー上、非表示になっている、「.project」ファイルを、ナビケータとかで開いて↓のように編集します。

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>dl4j-examples</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.m2e.core.maven2Builder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.core.javanature</nature>
		<nature>org.eclipse.m2e.core.maven2Nature</nature>
	</natures>
</projectDescription>

<buildSpec>と<natures>が元のXMLには無かったと思うので、その部分だけ付け加えても大丈夫です。
これで、ファイルを保存して、ビルドを掛けるとMavenリポジトリから各種ライブラリを勝手に落としてきてくれます。

f:id:ipx-writer:20170121213226p:plain

その後、プロジェクト構成がおかしくなっていると思うので、プロジェクトを右クリック、Maven → プロジェクトの更新 を行うとエラーがなくなります。

f:id:ipx-writer:20170121221533p:plain

f:id:ipx-writer:20170121222818p:plain


準備が整ったので実行

と、言うわけで、クイックスタートガイドにあった「MLPClassifierLinear」を実行します。

f:id:ipx-writer:20170121223015p:plain

パッケージエクスプローラーから辿って、右クリックして実行♪

ボン!

f:id:ipx-writer:20170121223219p:plain

なんでや!?


えー、よくソースを見ると、実行時の作業ディレクトリが、dl4j-examplesの1階層上から実行されるようになってます。
どのみち環境構築の為に動作確認したいだけだったので、大人しくファイルを読み込んでいる箇所を見て回って、パスから「dl4j-examples/」を消していきます。

f:id:ipx-writer:20170121223958p:plain
ちまちま…


気を取り直して再度実行すると…

f:id:ipx-writer:20170121224226p:plain


なんか出ました。

これで一旦DL4Jが正常に動作している確認が取れました。

ちなみに、このサンプルによるとDL4Jのcoreである、ND4JはCPU演算で動いている状態になります。
ND4JをCUDAで動かして高速化する方法もあるのですが、今回は一旦この辺で。
次回また機会があれば書いていこうと思います。