Java 使用CUDA运行Dl4j时出现问题

Java 使用CUDA运行Dl4j时出现问题,java,cuda,dl4j,Java,Cuda,Dl4j,我正在尝试使用GPU而不是CPU运行dl4j模型。该模型使用CPU运行良好。 所以我决定尝试CUDA来利用我的GPU。我遵循中描述的每个步骤,对于CUDA安装,我遵循NVIDIA的说明从安装CUDA Toolkit。代码编译正常,但出现错误: Skipped [JCublasBackend] backend (unavailable): java.lang.UnsatisfiedLinkError: C:\Users\albertb\.javacpp\cache\cuda-10.2-7.6-1.

我正在尝试使用GPU而不是CPU运行dl4j模型。该模型使用CPU运行良好。 所以我决定尝试CUDA来利用我的GPU。我遵循中描述的每个步骤,对于CUDA安装,我遵循NVIDIA的说明从安装CUDA Toolkit。代码编译正常,但出现错误:

Skipped [JCublasBackend] backend (unavailable): java.lang.UnsatisfiedLinkError: C:\Users\albertb\.javacpp\cache\cuda-10.2-7.6-1.5.3-windows-x86_64.jar\org\bytedeco\cuda\windows-x86_64\jnicudart.dll: Can't find dependent libraries
Exception in thread "main" java.lang.ExceptionInInitializerError
    at TestCUDA.run(TestCUDA.java:12)
    at TestCUDA.main(TestCUDA.java:7)
Caused by: java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j back-end on your classpath. Please see: https://deeplearning4j.konduit.ai/nd4j/backend
    at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5094)
    at org.nd4j.linalg.factory.Nd4j.<clinit>(Nd4j.java:270)
    ... 2 more
Caused by: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: https://deeplearning4j.konduit.ai/nd4j/backend
    at org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:221)
    at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5091)
    ... 3 more
跳过了[JCublasBackend]后端(不可用):java.lang.unsatifiedlinkerror:C:\Users\albertb\.javacpp\cache\cuda-10.2-7.6-1.5.3-windows-x86_64.jar\org\bytedeco\cuda\windows-x86_64\jnicudart.dll:找不到相关库
线程“main”java.lang.ExceptionInInitializeError中出现异常
运行(TestCUDA.java:12)
位于TestCUDA.main(TestCUDA.java:7)
原因:java.lang.RuntimeException:org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException:请确保类路径上有nd4j后端。请参阅:https://deeplearning4j.konduit.ai/nd4j/backend
位于org.nd4j.linalg.factory.nd4j.initContext(nd4j.java:5094)
位于org.nd4j.linalg.factory.nd4j.(nd4j.java:270)
... 还有两个
原因:org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException:请确保在类路径上有nd4j后端。请参阅:https://deeplearning4j.konduit.ai/nd4j/backend
位于org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:221)
位于org.nd4j.linalg.factory.nd4j.initContext(nd4j.java:5091)
... 3个以上
我的项目是使用IntelliJ上的Maven创建的。所有的依赖项都是可以的,否则代码将无法编译。必须缺少某些后端依赖项、库或安装。 可能是版本不兼容的问题。
消息
请确保您的类路径上有一个nd4j后端
给了我一些关于必须存在的后端jar的提示。但是Maven应该负责这件事。。。据我所知

我在互联网上搜索一些解决方案、示例或教程。。任何东西 上面的链接中有相同指令的所有冒号

一些技术信息:

  • 视窗10
  • Java1.8IntelliJ+Maven
  • dl4j 1.0,0-beta7
  • nd4j-cuda-10.2
  • CUDA 11.1-今天的最新版本
我会继续努力解决这个问题,但我会感谢任何帮助。
谢谢。

您可能安装了错误的cuda版本。nd4j cuda版本在工件id中指定,如:nd4j-cuda-11.0/10.2

如果需要,可以使用javacpp中的redist工件来实现以下目的:


这是cuda 11的最新版本。Nd4j只是将javacpp底层用于其所有本机互操作。

我已经解决了!现在,我的例子在GeForce3090上工作

我的POM的一部分:

 org.example
    dl4jCuda
    1.0-SNAPSHOT

        <dependency>
            <groupId>org.deeplearning4j</groupId>
            <artifactId>deeplearning4j-cuda-11.0</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.deeplearning4j</groupId>
            <artifactId>deeplearning4j-core</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
org.example
dl4jCuda
1.0-快照
org.deeplearning4j
深度学习4J-cuda-11.0
1.0.0-SNAPSHOT
org.deeplearning4j
深度学习4J型芯
1.0.0-SNAPSHOT

您还需要从源代码构建nd4j-cuda-11.0,并将所有*jar和dll文件添加到您的项目中

您安装了哪个CUDA版本?如果我看一下您提供的链接,您安装了CUDA11.x,这与您的Java/CUDA构建不兼容。它似乎正在寻找CUDA 10.2安装。好的,那我该怎么办?卸载CUDA并安装版本10,或者将我的POM文件更改为更新的工件id?我认为最新的Maven依赖项是10.2,就是我现在拥有的。顺便说一句,CUDA文档指定每个版本都是向后兼容的。所以我在这里迷路了。使用您的设置,我将安装CUDA 10.2。你不需要卸载任何东西。事实上,在安装CUDA10.2时,我会取消选择安装附带驱动程序的选项。安装CUDA 11.x的驱动程序将与CUDA 10.2一起使用。我怀疑安装CUDA 10.2可能是解决此问题所需的唯一方法。你可以启动CUDA 10.2安装程序。谢谢你的回答!!!你说我可以同时安装CUDAS11和10.2?我认为我应该在安装新的之前卸载我的一个,对吗?是的,你可以同时安装它们。在安装CUDA 10.2之前,无需卸载CUDA11.x。此外,如前所述,当您运行CUDA10.2安装程序时,我将取消选择安装捆绑驱动程序的选项。无需卸载。我已安装CUDA 11.1,las versionI试图将工件id更改为CUDA 11.0。。。这就是我得到的:
在central中找不到工件org.nd4j:nd4j-cuda-11.0:pom:1.0.0-beta7(https://repo.maven.apache.org/maven2)
请安装准确的版本,否则将找不到正确的dllAh。很抱歉,beta7最多只支持10.2。下一版本我们将推出cuda 11。如果需要,您可以使用11.0版的oss sonatype快照。另外请注意,不要随意混合cuda版本。如果你这样做,使用cuda的软件就无法工作。如果是这样,那是偶然的。Cuda定义为不向后兼容。