【问题标题】:Problems running Dl4j with CUDA使用 CUDA 运行 Dl4j 的问题
【发布时间】:2021-01-11 05:41:34
【问题描述】:

我正在尝试使用 GPU 而不是 CPU 运行 dl4j 模型。该模型使用 CPU 运行良好。 所以我决定尝试使用 CUDA 来利用我的 GPU。我按照here 中描述的每个步骤进行操作,对于 CUDA 安装,我按照 NVIDIA 的说明从here 安装 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

我的项目是在 IntelliJ 上使用 Maven 创建的。我猜所有的依赖项都可以,否则代码将无法编译。必须缺少某些后端依赖项或库或安装。 可能是版本不兼容的问题。
消息Please ensure that you have an nd4j backend on your classpath 给了我一些关于必须存在的后端 jar 的提示。但据我所知,Maven 应该会处理这个问题。

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

一些技术信息:

  • Windows 10
  • Java 1.8 IntelliJ + Maven
  • dl4j 1.0,0-beta7
  • nd4j-cuda-10.2
  • CUDA 11.1 - 今天的最新版本

我会继续努力解决问题,但如果能提供任何帮助,我将不胜感激。 谢谢。

【问题讨论】:

  • 您安装了哪个 CUDA 版本?如果我通过您提供的链接,您安装了 CUDA 11.x,这不适用于您的 Java/CUDA 构建。它似乎正在寻找 CUDA 10.2 安装。
  • 好的,那我该怎么办?卸载 CUDA 并安装版本 10 或将我的 POM 文件更改为更新的工件 ID?我认为可用的最新 Maven 依赖项是 10.2,即我现在拥有的那个。顺便说一句,CUDA 文档指定每个版本都是向后兼容的。所以....我迷路了。
  • 使用您的设置,我将安装 CUDA 10.2。您不需要卸载任何东西。事实上,在安装 CUDA 10.2 时,我会取消选择安装与其捆绑的驱动程序的选项。与 CUDA 11.x 一起安装的驱动程序将与 CUDA 10.2 一起使用。我怀疑安装 CUDA 10.2 可能是解决此问题所需的唯一方法。您可以从here 获取 CUDA 10.2 安装程序。
  • 感谢您的回答!!!所以你说我可以同时安装 CUDA 11 和 10.2?我认为我应该先卸载我拥有的那个,然后再安装一个新的,对吧?
  • ,您可以同时安装它们。在安装 CUDA 10.2 之前,您无需卸载 CUDA11.x。此外,如前所述,当您运行 CUDA 10.2 安装程序时,我会取消选择安装捆绑驱动程序的选项。不需要卸载。

标签: java cuda dl4j


【解决方案1】:

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

如果需要,您可以使用 javacpp 中的 redist 工件:https://search.maven.org/artifact/org.bytedeco/cuda-platform-redist/11.0-8.0-1.5.4/jar

这是 cuda 11 的最新版本。Nd4j 只是在下面使用 javacpp 来实现其所有本机互操作。

【讨论】:

  • 我已经安装了 CUDA 11.1,las 版本
  • 我试图将工件 ID 更改为 CUDA 11.0...这是我得到的:Could not find artifact org.nd4j:nd4j-cuda-11.0:pom:1.0.0-beta7 in central (https://repo.maven.apache.org/maven2)
  • 请安装正确的版本,否则找不到合适的dll
  • 抱歉,我们只支持 beta7 最高 10.2。我们将在下一个版本中推出 cuda 11。如果需要,您可以使用 11.0 的 oss-sonatype 快照。另请注意,不要随意混合 cuda 版本。如果你这样做,任何使用 cuda 的软件都不会工作。或者,如果它确实是偶然的。 Cuda 根据定义不向后兼容。
【解决方案2】:

我解决了!现在我的例子在 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>

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

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2011-11-10
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多