java对libtensorflow_jni_gpu依赖不能自动加载的解决

前提

1.确保你本机具有gpu硬件支持;
2.已经安装gpu软件环境;
3.java工程除无法正常加载gpu外可正常运行。
4.此博客是在Ubuntu16.04上搭建java gpu运行环境,若在Windows上搭建,则在满足前三条的前提下,将下面提到的jar包解压后的.dll文件进行手动加载即可。

maven依赖


            org.tensorflow
            tensorflow
            1.10.0
        
        
            org.tensorflow
            libtensorflow
            1.10.0
        
        
            org.tensorflow
            libtensorflow_jni_gpu
            1.10.0
        

无法正常加载gpu,以CudnnRnn为例,异常信息如下:

java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'CudnnRNN' with these attrs.  Registered devices: [CPU], Registered kernels:
  

	 [[Node: bilstm/cudnn_cell/CudnnRNN = CudnnRNN[T=DT_FLOAT, direction="bidirectional", dropout=0, input_mode="linear_input", is_training=true, rnn_mode="lstm", seed=0, seed2=0](embedding/embedding_lookup, bilstm/cudnn_cell/zeros, bilstm/cudnn_cell/zeros_1, cudnn_cell/opaque_kernel/read)]]
	at org.tensorflow.Session.run(Native Method)
	at org.tensorflow.Session.access$100(Session.java:48)
	at org.tensorflow.Session$Runner.runHelper(Session.java:298)
	at org.tensorflow.Session$Runner.run(Session.java:248)

解决方法

1.手动解压org.tensorflow.libtensorflow_jni_gpu包下的jar包,得到libtensorflow_framework.solibtensorflow_jni.so文件,在idea中进行手动加载。
2.在idea中找到run->Edit Configurations;
java对libtensorflow_jni_gpu依赖不能自动加载的解决_第1张图片
3.添加vm options选项,为jvm添加一个java库路径,-Djava.library.path=url,即此时项目运行时jvm除了扫描默认path的library,还会扫描你指定路径下的library。(url为libtensorflow_framework.solibtensorflow_jni.so文件所在路径,后者依赖前者,不可缺少);

java对libtensorflow_jni_gpu依赖不能自动加载的解决_第2张图片
4.在项目运行初始化加载时调用TensorFlow的loaloadLibrary()方法,进行手动加载含有gpu节点的libtensorflow_jni.so文件。

TensorFlow.loadLibrary(url + "/libtensorflow_jni.so");
参考链接:

tensorflow官网 java api:
https://tensorflow.google.cn/versions/r1.10/api_docs/java/reference/org/tensorflow/TensorFlow
tensorflow gpu java参考:
https://blog.csdn.net/noiplcx/article/details/83270552

你可能感兴趣的:(个人总结)