Apache MXNETをClojureで使える環境を作る
お断り(disclaimer):もちろんこの手順は無保証です。 参考というかこのblogをなぞります。
まずはincubator-mxnetをcloneします。
git clone https://github.com/apache/incubator-mxnet
そのあとでlibmxnet.aをつくります。
make
jni.hがないなどといって怒られました。 jdkのインストールディレクトリを${HOME}/bin/jdkとしておきます。そしてMakefileを下記のように修正しました。
--- a/Makefile
+++ b/Makefile
@@ -76,7 +76,7 @@ include $(DMLC_CORE)/make/dmlc.mk
# all tge possible warning tread
WARNFLAGS= -Wall -Wsign-compare
-CFLAGS = -DMSHADOW_FORCE_STREAM $(WARNFLAGS)
+CFLAGS = -DMSHADOW_FORCE_STREAM $(WARNFLAGS) -I${HOME}/bin/jdk/include -I${HOME}/bin/jdk/include/linux
ifeq ($(DEV), 1)
CFLAGS += -g -Werror
ここで再度
make
で無事
lib/libmxnet.a lib/libmxnet.so
ができました。
そのあとでscala環境でjarを作ります。これがはまった。
まずはなーんに考えず
make scalapkg
やるとエラー吐くですよねぇ。 そこでエラーメッセージを調べてみるとどーもscalaとjdk10の相性の問題っぽいっことのように気が付きました 面倒なのでjdk10→jdk8へ変えて再度コンパイルしました。 無事成功したのでインストールもしておきます。 結果、↓のjarを採用します。
${INSTALLED_DIRECTORY}scala-package/assembly/linux-x86_64-cpu/target/mxnet-full_2.11-linux-x86_64-cpu-1.3.0-SNAPSHOT.jar
この時点で漸くclojureのlibraryをcompileできます。
lein uberjar
これで漸くサンプルを動かすことができます。
imclassificationを動かすためにエラーを一つづつ解消してproject.cljを↓で動いたように見えます。
(defproject imclassification "0.1.0-SNAPSHOT"
:description "Clojure examples for image classification"
:plugins [[lein-cljfmt "0.5.7"]]
:dependencies [[org.clojure/clojure "1.9.0"]
[riddley "0.1.15"]
[clj-tuple "0.2.2"]
[org.clojure/tools.logging "0.4.0"]
[org.apache.logging.log4j/log4j-core "2.8.1"]
[org.apache.logging.log4j/log4j-api "2.8.1"]
[org.slf4j/slf4j-log4j12 "1.7.25" :exclusins [org.slf4j/slf4j-api]]]
:resource-paths ["${HOME}/clojure/incubator-mxnet/contrib/clojure-package/target/clojure-mxnet-1.3.0-SNAPSHOT.jar"
"${HOME}/clojure/incubator-mxnet/scala-package/assembly/linux-x86_64-cpu/target/mxnet-full_2.11-linux-x86_64-cpu-1.3.0-SNAPSHOT.jar"]
:pedantic? :skip
:main imclassification.train-mnist)