Deeplearning4J最新的版本(2015-11-4),重新编译后,运行scene-classification-spark下的SparkMnist程序出现unable to load from [netlib-native_system-linux-x86_64.so]等如下问题。
1)15/11/04 09:49:42 WARN scheduler.TaskSetManager: Lost task 4.0 in stage 0.0 (TID 4, 10.0.71.18): java.lang.ExceptionInInitializerError: unable to load from [netlib-native_system-linux-x86_64.so]
at com.github.fommil.jni.JniLoader.load(JniLoader.java:81)
at com.github.fommil.netlib.NativeSystemBLAS.<clinit>(NativeSystemBLAS.java:42)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.nd4j.linalg.cpu.BlasWrapper.<clinit>(BlasWrapper.java:47)
2)15/11/04 09:49:42 WARN scheduler.TaskSetManager: Lost task 2.0 in stage 0.0 (TID 2, 10.0.71.18): java.lang.NoClassDefFoundError: Could not initialize class org.nd4j.linalg.cpu.NDArray
at java.io.ObjectStreamClass.hasStaticInitializer(Native Method)
at java.io.ObjectStreamClass.computeDefaultSUID(ObjectStreamClass.java:1743)
at java.io.ObjectStreamClass.access$100(ObjectStreamClass.java:72)
at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:250)
at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:248)
at java.security.AccessController.doPrivileged(Native Method)
原因是Spark的主节点以及data节点上没有安装合适的netlib-java库,导致程序运行过程中,由于找不到合适的blas函数库而中断。
解决方法就是在每个节点上将这些库装上。
针对ubuntu 14.04系统
1) 安装g++编译器
sudo apt-get install -y g++
2)安装gfortran编译器
sudo apt-get install -y gfortran
3) 安装blas库
sudo apt-get install -y libatlas3-base libopenblas-base
sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install -y liblapack-dev
关联合适的 libblas*.so库
sudo update-alternatives --config libblas.so
sudo update-alternatives --config libblas.so.3
sudo update-alternatives --config liblapack.so
sudo update-alternatives --config liblapack.so.3
上述步骤走完后,再运行程序,上述问题消失。
这是针对Ubuntu 14.04采用openblas、atlas等native库的解决方案。
当然还有其它解决方案(见参考文献),针对不同的系统以及不同的函数库如MKL,需要采取不同的方式。
参考:
1 https://github.com/fommil/netlib-java#machine-optimised-system-libraries
2 http://apache-spark-user-list.1001560.n3.nabble.com/Native-library-can-not-be-loaded-when-using-Mllib-PCA-td7042.html
3 https://github.com/fommil/netlib-java/issues/62
4 https://github.com/fommil/netlib-java/