libtensorflow_jni和libtensorflow_jni_gpu jar依赖项是否互斥?

时间:2018-03-31 17:25:00

标签: java tensorflow native

如果我们将libtensorflow_jni和libtensorflow_jni_gpu添加到maven pom中,或者可能是这样的:

<dependency>
   <groupId>org.tensorflow</groupId>
   <artifactId>tensorflow</artifactId>
</dependency>
<dependency>
   <groupId>org.tensorflow</groupId>
   <artifactId>libtensorflow_jni_gpu</artifactId>
</dependency>

我们能否期望构建的应用程序能够运行并利用CPU和GPU平台? 或者那些图书馆是互相排斥的?

文档不是特别清楚:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/java/maven/README.md#artifact-structure

2 个答案:

答案 0 :(得分:0)

不,他们不是互相排斥的。 libtensorflow_jni_gpu具有该功能的超集,因为它允许利用CPU和GPU(当然在系统上可用)进行操作。

但是,libtensorflow_jni_gpu目前要求在运行程序的系统上安装CUDA库(无论是否物理安装了GPU)。

希望有所帮助。

答案 1 :(得分:0)

我相信我能回答我的问题。

基于libtensorflow_jnilibtensorflow_jni_gpu jars结构以及NativeLibrary.java实现,我可以得出结论,他们的类路径名称空间重叠,因此这些原生jar是互斥

在任何特定时刻,都可以拥有

   <dependency>
      <groupId>org.tensorflow</groupId>
      <artifactId>libtensorflow_jni</artifactId>
   </dependency>

   <dependency>
      <groupId>org.tensorflow</groupId>
      <artifactId>libtensorflow_jni_gpu</artifactId>
   </dependency>

在类路径上,但从不两者!

这样做的一个实际意义是您的应用程序需要构建两个单独的部署jar(一个用于CPU和一个GPU环境)。