【问题标题】:Problems building using gradle with nd4j使用带有 nd4j 的 gradle 构建问题
【发布时间】:2022-02-02 15:36:21
【问题描述】:

我正在尝试使用nd4j 构建一个模块。
它可以用 maven 构建,但不能用 gradle。
我对 pom 进行了自动转换,我手动添加了 javacpp 依赖项并
它构建但测试失败,链接错误no jniopenblas_nolapack in java.library.path
我已经做了很多网络搜索无济于事。
这是我的dependencies 部分:

dependencies {
implementation("org.bytedeco:openblas:0.3.17-1.5.6")
implementation("org.bytedeco:javacpp:1.5.6")
implementation("org.nd4j:nd4j-native:1.0.0-M1.1")
}

(我已删除与此无关的部门)
实际上,我有点不知所措。

【问题讨论】:

  • 添加名称以“-platform”结尾的依赖项。
  • 很抱歉给您带来了不愉快的经历。我要求您知道,在发布代码时,我们并不是故意让您的生活变得更糟。我将在下面回答一些可以帮助您尽可能了解图书馆的内容。我希望它能帮助你和其他找到这篇文章的人。我希望能提供反馈以改进网站。
  • @AdamGibson 无需道歉,它是开源的,我得到了我所支付的:-D

标签: java gradle nd4j


【解决方案1】:

在 cmets 中,我希望 cmets 在我们的文档中帮助改进网站。我们明确地涵盖了这种情况。我将在下面总结它,然后用链接发表评论。如果您发现任何遗漏,请帮助我们改进网站以备将来使用。

Nd4j 使用 javacpp,它依赖于分类器来确定如何包含本机二进制文件。它的工作方式是将核心类放在一个独立的库/artifactId(nd4j-native)中,它需要一个伴随的分类器依赖项来配合它。这将是一个具有相同名称和版本的工件 ID 以及一个附加分类器。这通常是您平台的操作系统和架构名称。这可能是 linux-x86_64(64 位 intel 上的 linux)或 android-arm64(64 位 ARM 设备上的 android)

这些通常还具有随附的依赖项,例如 openblas(我们也使用 javacpp 绑定),以使我们能够访问快速的第 3 方数学例程。

考虑到这一点,您通常需要这样的依赖块:

dependencies {
    compile "org.nd4j:nd4j-native:1.0.0-M1.1"
    // Use windows-x86_64 or linux-x86_64 if you are not on macos
    compile "org.nd4j:nd4j-native:1.0.0-M1.1:macosx-x86_64"
    compile "org.bytedeco:openblas:0.3.17-1.5.6:macosx-x86_64" 
    compile "org.bytedeco:openblas:0.3.17-1.5.6" 
}

您还可以执行 Sam 之前描述的操作并使用 -platform 依赖项。这些将更容易使用,并且是我们在文档站点上默认拥有的。那么这将是:

dependencies {
    compile "org.nd4j:nd4j-native-platform:1.0.0-M1.1"
 
}

网站上有更多关于此的文档,因此为了简单起见,我将尝试省略所有这些文档。如果您需要跟进 cmets,请告诉我或提交其他问题。

【讨论】:

  • 谢谢你,它很有魅力。我从测试的错误日志中获得了这个链接:'有关更多信息,请参阅:deeplearning4j.konduit.ai/nd4j/backend',但该链接已失效。我无法在网站上找到解释,但这有效!
  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多