NVDLAというのはNVIDIAが公開しているオープンソースのディープラーニング向けハードウェアだが、このハードウェアで流すニューラルネットワークをコンパイルすることのできるコンパイラ nvdla_compiler がついにオープンソース化された。 nvdla_compilerは昔触った時の認識では、caffeなどのモデルを入力してNVDLAが処理することのできるバイナリ形式に変換してくれるコンパイラで、NVDLAにモデルをインプットすることができるようになる。
この中身を解析すればNVDLAの内部も多少理解しやすくなるかなと思いオープンソース化を待っていたのだが、この度ようやく、という訳だ。
さっそくGitHubからリポジトリをクローンする。えらく時間がかかるなと思ったら800MB近くダウンロードされた。何が入っているんだ...
git clone https://github.com/nvdla/sw.git
さっそくコンパイルしてみる。
cd sw/umd
make compiler
caffe/ditcaffe/protobuf-2.6.1/ditcaffe.pb.h:9:10: fatal error: google/protobuf/stubs/common.h: No such file or directory #include <google/protobuf/stubs/common.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
いきなりコケた。よく見てみるとMakefileにミスがある。修正して再ビルド。
diff --git a/umd/core/src/compiler/Makefile b/umd/core/src/compiler/Makefile index d4a24d2..140e493 100644 --- a/umd/core/src/compiler/Makefile +++ b/umd/core/src/compiler/Makefile @@ -34,7 +34,7 @@ BUILDOUT ?= $(ROOT)/out/core/src/compiler BUILDDIR := $(BUILDOUT)/$(MODULE) LIB := $(BUILDDIR)/$(MODULE).so -INCLUDES := $(ROOT)/external/protobuf-2.6/src +INCLUDES := -I$(ROOT)/external/protobuf-2.6/src MODULE_COMPILEFLAGS := -g -fPIC -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -Werror-implicit-function-declaration MODULE_CFLAGS := --std=c99 MODULE_CPPFLAGS := --std=c++11 -fexceptions -fno-rtti
すると今度はこのエラーだ。
/usr/bin/ld: libprotobuf.a(common.o): relocation R_X86_64_32S against symbol `_ZTVN6google8protobuf7ClosureE' can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: libprotobuf.a(generated_message_util.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: libprotobuf.a(message_lite.o): relocation R_X86_64_32S against symbol `_ZTVN6google8protobuf11MessageLiteE' can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: libprotobuf.a(repeated_field.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC ...
protobufを-fPIC付きでコンパイルしろって?そういうのは先に言ってほしい。
cd external/protobuf-2.6 ./configure CFLAGS=-fPIC CXXFLAGS=-fPIC && make
protobufをリビルドしようとすると、今度はこれだ。
make -j4
... cd . && /bin/bash /home/msyksphinz/work/sw/umd/external/protobuf-2.6/missing automake-1.14 --foreign /home/msyksphinz/work/sw/umd/external/protobuf-2.6/missing: line 81: automake-1.14: command not found
Makefileから何から作り直してみる。
./autogen.sh ./configure && CFLAGS=-fPIC CXXFLAGS=-fPIC make -j8
うーん、こうやっても駄目だ。
とりあえずまだまだリリースパッケージとしては未完成な様子?