フルインストール
このインストールは複数の段階の手順に従って行います。質問やコメント等は、是非、Gitter Live Chatでお聞かせください。弊社のスタッフがお手伝いいたします。恥ずかしがる必要は全くありません。いつでも気軽にご連絡ください。また、ディープラーニングの初心者の方には、ディープラーニングの初心者ガイドもご用意いたしました。
exampleを簡単なステップで走らせるには、クイックスタートをお読みください。また、もしクイックスタートをまだ読まれていない方は、以下の説明をおお読みになる前に、是非そちらを読まれることをお勧めします。DL4Jを始めるごく簡単な方法をご紹介しているからです。
Deeplearning4jのインストールに必要なものは、ND4Jを「はじめましょう」でご紹介しています。ND4Jとは、DL4Jのニューラルネットワークが使用する線形代数の計算エンジンです。
上記をインストールした後、以下をお読みください。
Linux
-
Deeplearning4jは、CPUに対応したBlasの様々な形態に依存しているため、 Blasへのネイティブバインディングが必要です。
Fedora/RHEL yum -y install blas Ubuntu apt-get install libblas* (credit to @sujitpal)
OpenBlasに関する情報については、こちらのセクションをお読みください。
-
GPUが壊れている場合は、コマンドを入力する必要があります。まず、Cudaがどこにインストールされるかを確認してください。以下のようになっているはずです。
/usr/local/cuda/lib64
それから、ターミナルにldconfigと入力し、続けてCudaへリンクされるファイルパスを入力します。つまり、コマンドは下記のようなものになります。
ldconfig /usr/local/cuda/lib64
それでもCUDAをロードできなければ、パラメータの-Dをコードに追加してください(JVM引数です)。
java.library.path (settable via -Djava.librarypath=...)
// ^ は書き込み可能なディレクトリ、そして、
-D appended directly to "<OTHER ARGS>"
統合開発環境にIntelliJを使用している場合、既にこれは動作しているはずです。
OSX
- Blasは既にOSXにインストールされています。
Windows
-
Windowsでのインストールは、常に簡単というわけではありません。しかし、Deeplearning4のように、オープンソースのディープラーニングプロジェクトで、実際にWindows利用者向けのサポートに熱心なものは、数少ないのが現状です。詳細については、弊社のND4JページにあるWindows用のセクションをお読みください。
-
お使いのコンピューターが64ビットでもMinGW 32 bitsをインストール(ダウンロードボタンは、右上に表示)し、Prebuilt dynamic libraries using Mingwをダウンロードします。
-
Lapackをインストールします。(Intelコンパイラーがあるか質問が表示されますが、これはないはずです。)
-
Lapackは、VS Studio Solutionの代替を提供します。Basic Linear Algebra Subprograms (BLAS)についての解説も読んでおくと有用でしょう。
-
あるいは、MinGWでなく、Blas dllファイルをパスの中のフォルダーにコピーすることもできます。例えば、 MinGWのbinフォルダへのパスは、/usr/x86_64-w64-mingw32/sys-root/mingw/binです。Windowsのパスの変数についての詳細は、こちらのStackOverflowサイトの上部にある回答をお読みください。
-
Cygwinには対応していません。DOS WindowsからDL4Jをインストールする必要があります。
-
ファイルのWindowsInfo.batを実行すると、Windowsのインストールでのデバッグができます。その正しい出力例はこちらをご覧ください。最初にダウンロードし、コマンドウィンドウ/ターミナルを開きます。ダウンロードされたディレクトリに
cd
コマンドを入れます。WindowsInfo
と入力し、Enterキーを押します。この出力をコピーするには、コマンドウィンドウ上で右クリックし、 [select all(すべて選択)]を選び、Enterキーを押します。すると、クリップボードに出力されます。
Windows向けのOpenBlas(以下を参照)は、こちらのファイルをダウンロードしてください。C:/BLAS
など、どこか場所を決めて解凍してください。このディレクトリを、システムの環境変数PATH
に追加します。
OpenBlas
native
のバックエンドにあるライブラリーが動作することを確認するには、システムパスの/opt/OpenBLAS/lib
が必要です。その後で、以下のコマンドをプロンプトに入力してください。
sudo cp libopenblas.so liblapack.so.3
sudo cp libopenblas.so libblas.so.3
これは、SparkがOpenBlasで使用できるようにするためです。
OpenBlasが正しく動作していない場合は、次の手順に従ってください。
- Openblasがインストール済みであれば、削除します。
sudo apt-get remove libopenblas-base
を実行します。- OpenBLASの開発版をダウンロードします。
git clone git://github.com/xianyi/OpenBLAS
cd OpenBLAS
make FC=gfortran
sudo make PREFIX=/usr/local/ install
-
Linuxの場合、
libblas.so.3
やliblapack.so.3
のシンボリックリンクがLD_LIBRARY_PATH
のどこでも存在することを再度確認してください。もし存在しなければ、/usr/lib
へリンクを追加します。以下のように設定することができます(-sを入れるとリンクがシンボリックになります)。ln -s TARGET LINK_NAME // 解釈: ln -s "to-here" <- "from-here"
- 「from-here」は、まだ存在しないシンボリックリンクを作成したものです。StackOverflowのシンボリックリンク作成方法ガイドがありますので、こちらをお読みください。「Linux man page」は、こちらをお読みください。
- 最後に統合開発環境を再起動します。
- ネイティブのBlasを CentOS 6で作動させるための詳細は、CentOS 6または CentOS 6.5をお読みください。
Ubuntu (15.10)のOpenBlasについての説明ガイドはこちらをお読みください。
###Eclipse
git clone
を実行してから、以下のコマンドを入力してください。
mvn eclipse:eclipse
これにより、ソースがインポートされ、すべてがセットアップされます。
弊社は、何年にも渡りEclipseを使用しましたが、Eclipseと似たインターフェイスを持つIntelliJをお勧めします。Eclipseのモノリス型アーキテクチャだと、他社のものでも弊社のコードでも奇妙なエラーが発生することが度々あるからです。
Eclipseを使う場合は、Lombok pluginをインストールする必要があります。また、Eclipse用のMavenプラグイン、eclipse.org/m2eも必要になります。
Michael Depies氏が、 EclipseでのDeeplearning4jのインストールガイドを作成し、提供していますので、ご参照ください。
トラブルシューティング
-
エラーメッセージについて質問があれば、Gitter Live Chatにお気軽にご連絡ください。また、質問の際には、以下の情報を準備しておいてください。(前もって準備していただきますと、より素早くご質問に対処できます。)
* オペレーティング・システム(Windows、OSX、Linux)とそのバージョン * Javaバージョン(7、8) : ターミナル/コマンドプロンプトにjava -versionと入力すると分かります。 * Maven のバージョン : ターミナル/コマンドプロンプトにmvn --versionと入力すると分かります。 * スタックトレース:gistのエラーコードをペーストし、リンクをお送りください。[https://gist.github.com/](https://gist.github.com/)
- 既にDL4Jがインストールされており、exampleがエラーを多く送出させている場合、ライブラリをアップデートしてください。Mavenについては、Maven Centralを使ってPOM.xmlファイルにあるバージョンを最新のものにアップデートしてください。ソースについては、3つのディレクトリであるND4J、Canova、DL4Jをこの順で
git clone
、次にmvn clean install -DskipTests=true -Dmaven.javadoc.skip=true
と実行してください。 - exampleを実行するとき、F1スコア結果が低くなるかもしれません。F1スコアとは、ネットの分類作業の精確さを示すものです。しかし、この場合、 F1値が低い原因は、精確性が低いからではなく、小さいデータセットを使用しているためです。小さめのデータセットだと素早く走らせることができるからです。小さめのデータセットは、大きいものより代表的にはなりませんが、結果は様々に異なります。例えば、非常に小さいexampleのデータでは、弊社のディープ・ビリーフ・ネットワークのF1スコアは0.32から1.0にまで及びます。
- Deeplearning4jにはオートコンプリート機能が含まれます。どのコマンドが使用可能か分からないときは、任意の文字を1つ打つと、ドロップダウンメニューが下記のように 表示されます。
- すべてのDeeplearning4jのクラスとメソッドのためのJavadocは、こちらです。
- コードベースが大きくなればなるほど、さらにメモリー量が必要になります。DL4J構築中に
Permgen error
が発生したら、さらにヒープ領域を増やす必要があるかもしれません。これには、隠しファイル.bash_profile
を見つけて修正し、環境変数がbashに設定される必要があります。さらに変数を見るには、コマンドラインにenv
と入力してください。さらにヒープ領域を増やすには、コンソールに次のコマンドを入力してください。 「echo “export MAVEN_OPTS=”-Xmx512m -XX:MaxPermSize=512m”” > ~/.bash_profile」 - 3.0.4などのMavenの以前のバージョンは、NoSuchMethodErrorなどの例外を送出する傾向があります。このようなトラブルは、Mavenの最新バージョン(現在は3.3.x)にアップグレードすることによって解消されます。お使いのMavenバージョンを調べるには、コマンドラインに
mvn -v
と入力してください。 - Mavenをインストールした後、
mvn is not recognised as an internal or external command, operable program or batch file.
と書かれたメッセージが表示される可能性があります。これは、他の環境変数と同様に変更可能なPATH変数にMavenが必要であるということを意味します。 - エラーの
Invalid JDK version in profile 'java8-and-higher':Unbounded range:[1.8, for project com.github.jai-imageio:jai-imageio-core com.github.jai-imageio:jai-imageio-core:jar:1.3.0
が見つかった場合、Maven関連の問題が発生している可能性がありますので、Mavenのバージョンを3.3.xにアップデートしてください。 - ND4Jの依存関係をコンパイルするには、CとC++の開発ツールをインストールする必要があります。弊社のND4Jガイドをお読みください。
- Java CPPのinclude pathは、常にWindowsで動作するとは限りません。これを解決する1つの方法はVisual Studioのincludeディレクトリからヘッダーファイルを取り、それらをJavaがインストールされたJava Run-Time Environment (JRE)のincludeディレクトリに入れることです。これによりstandardio.hなどのファイルに影響が出ます。詳細についてはこちらをお読みください。
- GPUのモニターに関する説明ガイドは、こちらをお読みください。
- Javaを使用する主な理由の一つは、 JVisualVMに既に診断機能があるからです。Javaがインストールされていれば、コマンドラインに
jvisualvm
と入れさえすると、 CPU、ヒープ、PermGen、クラス、スレッドのビジュアル情報を見ることができます。例えば、以下の例をご覧ください。右上のサンプラ
タブをクリックし、CPU、またはメモリーボタンを押します。すると、ビジュアル情報が得られます。 - DL4Jを使用している際に発生する問題の原因は、ユーザーが機械学習に関する情報やテクニックに十分精通していないためである場合もあります。 Deeplearning4jのユーザー皆さんに、このサイト以外のリソースも利用して基礎を学習することをお勧めします。機械学習やディープラーニングの学習リソースのリストを準備しましたので、こちらをお読みください。弊社はDL4Jを一部ドキュメント化しましたが、ディープラーニング用に使用するには、コードの一部は生で、ドメイン固有言語のままです。
- Clojureアプリケーションから
deeplearning4j-nlp
を使い、Leiningenでuberjarを構築するときは、akkaのreference.conf
リソースファイルが適切にマージされるよう、project.clj
に、:uberjar-merge-with {#"\.properties$" [slurp str spit] "reference.conf" [slurp str spit]}
と指定してください。(.propertiesファイルのマップへの最初の入力は、通常のデフォルトであることにご注意ください)。この設定が行われていない場合、結果のuberjarから実行しようとすると、次のような例外が送出されます。Exception in thread "main" com.typesafe.config.ConfigException$Missing:No configuration setting found for key 'akka.version'
- OSXの浮動小数点のサポートにはバグが多くあります。examplsの実行でNaNが数多く表示される場合、データのタイプを
double
に切り替えてください。 - Java 7のfork-joinにはバグがありますが、Java 8にアップデートすることにより修正されます。以下のようなOutofMemoryエラーが発生する場合は、fork-joinに問題があります。
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError
….java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:536)
再現可能な結果
ニューラルネットの重みはランダムに初期化されます。つまり、モデルは、毎回、重み空間の異なる位置から学習を開始し、これにより局所的最適が変わります。再現性のある結果を求めるユーザーは、同じランダムの重みを使用する必要がありますが、モデルが作成される前に初期化する必要があります。以下のコマンドラインを使うと、同じランダムな重みで、再度、初期化することができます。
Nd4j.getRandom().setSeed(123);
次のステップ:ニューラルネットワークの構築
ニューラルネットワークの構築を開始するには、ニューラルネットワークの概要にて詳細をお読みください。
ディープ・ビリーフ・ネットワークの基本的なメカニズムを理解するには、制限付きボルツマン・マシンをお読みください。
新しいプロジェクトを開始して必要なPOMの依存関係を入れるには、ND4Jをはじめましょうをお読みください。