2017-10-19 19 views
0

J'ai un Java demo working qui utilise Tensorflow pour la classification d'images. Il fonctionne bien sur Windows, mais maintenant je veux l'exécuter en tant que service Web à partir du serveur Web Java Tomcat.Accéder à Tensorflow à partir de Tomcat sur CentOS Linux

J'ai ajouté tous les jets Tensorflow à la bibliothèque Tomcat, mais Tensorflow a une dépendance jni. Je ne suis pas sûr de savoir comment installer et relier ceci afin que Tensorflow puisse fonctionner sur le serveur CentOS Linux.

I have read this, mais je n'ai pas besoin d'exécuter python sur le serveur, il suffit d'accéder à Tensorflow à partir de Java.

+0

Vous devez fournir la bibliothèque jni comme vous l'avez fait sous Windows. La bibliothèque doit être placée sur le chemin que vous spécifiez avec '-Djava.library.path = ...'. Une seule différence: La bibliothèque s'appelle 'lib.so', pas' lib.dll'. Ni votre question ni le lien ne nous disent quelle bibliothèque. Nous ne pouvons donc pas vous dire quel paquet installer. – blafasel

Répondre

0

Je viens de regarder de plus près.

Simple ajouter une dépendance à org.tensorflow:tensorflow:1.4.0-rc0 (ou quelle que soit la version que vous préférez) à votre outil de construction favori.

Cela va introduire une dépendance à org.tensorflow:libtensorflow_jni:1.4.0-rc0. Cela comprendra les éléments suivants:

[email protected]:~$ unzip -t .m2/repository/org/tensorflow/libtensorflow_jni/1.4.0-rc0/libtensorflow_jni-1.4.0-rc0.jar 
Archive: .m2/repository/org/tensorflow/libtensorflow_jni/1.4.0-rc0/libtensorflow_jni-1.4.0-rc0.jar 
    testing: META-INF/    OK 
    testing: META-INF/MANIFEST.MF  OK 
    testing: org/      OK 
    testing: org/tensorflow/   OK 
    testing: org/tensorflow/native/ OK 
    testing: org/tensorflow/native/darwin-x86_64/ OK 
    testing: org/tensorflow/native/linux-x86_64/ OK 
    testing: org/tensorflow/native/windows-x86_64/ OK 
    testing: org/tensorflow/native/darwin-x86_64/libtensorflow_framework.so OK 
    testing: org/tensorflow/native/darwin-x86_64/LICENSE OK 
    testing: org/tensorflow/native/darwin-x86_64/libtensorflow_jni.dylib OK 
    testing: org/tensorflow/native/linux-x86_64/libtensorflow_framework.so OK 
    testing: org/tensorflow/native/linux-x86_64/libtensorflow_jni.so OK 
    testing: org/tensorflow/native/linux-x86_64/LICENSE OK 
    testing: org/tensorflow/native/windows-x86_64/tensorflow_jni.dll OK 
    testing: org/tensorflow/native/windows-x86_64/LICENSE OK 
    testing: META-INF/maven/   OK 
    testing: META-INF/maven/org.tensorflow/ OK 
    testing: META-INF/maven/org.tensorflow/libtensorflow_jni/ OK 
    testing: META-INF/maven/org.tensorflow/libtensorflow_jni/pom.xml OK 
    testing: META-INF/maven/org.tensorflow/libtensorflow_jni/pom.properties OK 
No errors detected in compressed data of .m2/repository/org/tensorflow/libtensorflow_jni/1.4.0-rc0/libtensorflow_jni-1.4.0-rc0.jar. 

Comme vous pouvez le voir contient déjà tous les binaires nécessaires pour obtenir JNI travailler sur toutes les plateformes prises en charge officiellement. Cela contient n'importe quel Linux sur x86_64.

Tant que vous n'essayez pas de l'utiliser sur un raspi ou sur CentOS 32 bits et tant que vous utilisez un outil de construction approprié, vous devriez enregistrer.

Le seul risque réside dans les dépendances de ces bibliothèques sur d'autres bibliothèques système. Un appel à ldd sur libtensorflow_framework.so montre:

[email protected]:~$ ldd org/tensorflow/native/linux-x86_64/libtensorflow_framework.so 
    linux-vdso.so.1 => (0x00007ffffaa62000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f07c6494000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f07c6290000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f07c6073000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f07c5cf0000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f07c5ada000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f07c5710000) 
    /lib64/ld-linux-x86-64.so.2 (0x000056525c661000) 

Si vous ne trouvez pas ces dépendances transitif sur votre système, vous devriez probablement essayer une ancienne version de tensorflow ou une version plus récente de CentOS.