我已经将所有Tensorflow JAR文件添加到Tomcat的lib目录中,但Tensorflow有一个jni依赖项。我不知道如何安装和链接它,以便Tensorflow可以在CentOS Linux服务器上运行。 我已经阅读了这篇文章, 但我不需要在服务器上运行Python,只需从Java访问Tensorflow。
更新:** 好的,为了让它在Windows上的Tomcat上工作,我按照以下步骤操作,
从以下网址下载libtensorflow.jar, https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-1.6.0.jar
然后从https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow_jni-cpu-windows-x86_64-1.6.0.zip下载dll(解压缩zip文件以获取dll)
请查看https://www.tensorflow.org/install/install_java
将jar文件放入我的tomcat lib中,并创建一个tomcat dll目录并将dll放入其中
编辑我的setenv.bat文件并添加以下行:
SET CATALINA_OPTS=-Xmx4g -XX:PermSize=128m -XX:MaxPermSize=512m -Djava.library.path=D:\Engineering\apache-tomcat-7.0.50\dll
这适用于Windows。
对于Linux、CentOS 6,我做同样的事情,但是不是下载dll文件,而是从以下链接下载so文件:
https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow_jni-cpu-linux-x86_64-1.6.0.tar.gz然后编辑我的setenv.sh文件并添加以下行:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/tomcat8/so"
export JAVA_OPTS="-server -Xmx38g -Djava.library.path=/usr/local/tomcat8/so"
export CATALINA_OPTS="-Djava.library.path=/usr/local/tomcat8/so"
但是这些方法似乎都不起作用,我总是会收到错误信息:
我发现还有另一种部署选项,只需将jar文件添加到lib中,它就会神奇地找到正确的so文件。无法找到适用于操作系统:linux,架构:x86_64的TensorFlow本地库。请参见https://github.com/tensorflow/tensorflow/tree/master/tensorflow/java/README.md以获取可能的解决方案(例如从源代码构建库)。通过将org.tensorflow.NativeLibrary.DEBUG=1添加到JVM的系统属性中,可以获取有关查找本地库尝试的其他信息。
https://mvnrepository.com/artifact/org.tensorflow/libtensorflow_jni
当我尝试此选项时,似乎找到了so文件,但是出现了以下错误:/usr/local/tomcat8/temp/tensorflow_native_libraries-1522357321965-0/libtensorflow_jni.so:/lib64/libc.so.6:版本“GLIBC_2.16”未找到(需要/usr/local/tomcat8/temp/tensorflow_native_libraries-1522357321965-0/libtensorflow_jni.so)
看起来TensorFlow只支持非常特定的操作系统和版本?
我找到了这个链接:
Error while importing Tensorflow in python2.7 in Ubuntu 12.04. 'GLIBC_2.17 not found'
但是还没有尝试任何选项。对于生产系统来说并不是很有前途。
看一下GLIBC是什么,它是为GPU设计的,但我没有也不需要使用GPU,为什么需要这个库呢?
** 更新 所以...我尝试在Centos6上构建glibc 1.6.0,以便我可以按照以下步骤使用它,
https://unix.stackexchange.com/questions/176489/how-to-update-glibc-to-2-14-in-centos-6-5
这些步骤有效,但在尝试运行Tensorflow时出现了此错误,似乎它依赖于另一个库...此时我已经准备放弃,并尝试安装Centos7,但这条路需要我们升级12个生产服务器...加载共享库时出错:__vdso_time:dlopen()的无效模式