【问题标题】:Use Nd4j in an Intellij project在 Intellij 项目中使用 Nd4j
【发布时间】:2018-10-07 18:51:07
【问题描述】:

我正在尝试在 Intellij IDEA 的 Kotlin 项目中使用 Nd4j。在 Project Structure -> Libraries 中,我使用“From Maven”命令添加了以下库。

org.deeplearning4j:deeplearning4j-core:1.0.0-beta
org.nd4j:nd4j-native-platform:1.0.0-beta
org.datavec:datavec-api:1.0.0-beta

使用这些库我可以编译我的项目,但是当我运行它时会失败并出现异常。

Caused by: java.lang.RuntimeException: ND4J is probably missing dependencies. For more information, please refer to: http://nd4j.org/getstarted.html
    at org.nd4j.nativeblas.NativeOpsHolder.<init>(NativeOpsHolder.java:51)
    at org.nd4j.nativeblas.NativeOpsHolder.<clinit>(NativeOpsHolder.java:19)
    ... 10 more
Caused by: java.lang.UnsatisfiedLinkError: no jnind4jcpu in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
    at org.bytedeco.javacpp.Loader.load(Loader.java:980)
    at org.bytedeco.javacpp.Loader.load(Loader.java:879)
    at org.nd4j.nativeblas.Nd4jCpu.<clinit>(Nd4jCpu.java:10)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.bytedeco.javacpp.Loader.load(Loader.java:938)
    at org.bytedeco.javacpp.Loader.load(Loader.java:879)
    at org.nd4j.nativeblas.Nd4jCpu$NativeOps.<clinit>(Nd4jCpu.java:1310)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.nd4j.nativeblas.NativeOpsHolder.<init>(NativeOpsHolder.java:29)
    ... 11 more
Caused by: java.lang.UnsatisfiedLinkError: no nd4jcpu in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
    at org.bytedeco.javacpp.Loader.load(Loader.java:965)
    ... 21 more

查看项目文件夹,我看到 IDEA 已经为 nd4j-native-platform 下载了很多 jar 文件,但是没有任何 JNI 库的迹象。我还需要做什么?

【问题讨论】:

  • 你是如何运行程序的?
  • 在 IDEA 中使用“运行”命令。我尝试编辑运行配置以将包含所有 jar 的目录添加到 java.library.path,但这没有帮助。
  • 改为作为 gradle 任务运行。我自己在 IntelliJ 运行配置中遇到了问题,没有找到 Gradle 依赖项。不知道为什么,可能是 IntelliJ 中的错误,或者设计使然,但这无关紧要。你可能需要添加一个自定义任务来运行它,但是在 SO 上也有帖子涵盖它
  • 你能解释一下吗?我没有使用过 Gradle。我只有一个普通的 IDEA 项目,使用“新建项目”命令创建。此外,这些库被定义为 Maven 依赖项,而不是 Gradle 依赖项。
  • 对不起,我的错。忽略这一点,出于某种原因,我认为您使用了 Gradle。 (即使它被标记为 maven,不知道为什么我错过了)

标签: maven intellij-idea kotlin deeplearning4j nd4j


【解决方案1】:

Intellij 的“来自 Maven”功能不支持 JavaCPP 和 ND4J(以及其他使用本机代码的库)使用的分类器。 Maven 会很好用,但如果你真的因为某种原因不能使用它,你可以手动添加nd4j-native-1.0.0-beta2-macosx-x86_64.jar 文件和openblas-0.3.0-1.4.2-macosx-x86_64.jar 文件。这应该足以运行简单的事情,但是当您使用越来越多的东西(如 OpenCV)时,您必须手动为所有其他本机依赖项执行此操作。这就是推荐使用 Maven 的原因。

【讨论】:

    【解决方案2】:

    如果您包含这 3 个依赖项,那么它失败的原因是零,除非您出于某种原因在不受支持的操作系统上。

    我们支持从 android 到 IBM power 的所有东西,所以这不太可能。

    我也对你说没有看到任何 JNI 库的意思感到困惑。这些都在 jar 文件中。我们使用 javacpp(我们也维护它)来管理这些东西。 你会在 ~/.javacpp/cache 下找到这些库——不过你不应该有任何理由去碰它们。

    你能澄清一下你在那里寻找什么吗?

    除此之外,您无需做任何其他事情。我假设某些东西没有正确加载。

    我们的独立 pom 开箱即用:https://github.com/deeplearning4j/dl4j-examples/blob/master/standalone-sample-project/pom.xml - 可以仔细检查这个、那个或重新加载。我只能假设您以某种方式错误地创建了项目。文件 -> 新的 Maven 项目应该是你需要做的。

    【讨论】:

    • 我使用的是 Mac,没什么异常。您可以通过这些步骤重现它。 1. 按照kotlinlang.org/docs/tutorials/getting-started.html的步骤创建一个新项目。确保一切正常并且您可以运行它。 2. 选择文件->项目结构。在 Libraries 选项卡上,单击 + 按钮并使用“From Maven”添加三个依赖项。 3. 在 main() 中添加一行来创建一个 NDArray,例如“val x = Nd4j.ones(3)”。 4.尝试运行它,你应该得到错误。
    • 您能提出问题吗?我们有很多 mac 用户,但没有遇到过这种情况。一个独立的项目将有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多