【问题标题】:DJL is unable to find MXNet Engine, troubleshooting doesn't help meDJL 找不到 MXNet 引擎,故障排除对我没有帮助
【发布时间】:2020-05-31 00:21:39
【问题描述】:

我现在花了太多时间试图自己解决这个问题,但我似乎无法自己解决这个问题。我想尝试DJL,查看了一些示例并进入了教程,我对此感到非常兴奋,因为它看起来像是一个非常现代、简单和多功能的库。但是,我遇到了一个我无法解决的问题。

DJL 建议在教程中使用其 MXNet 引擎作为默认引擎。它通过 maven 依赖项 ai.djl.mxnet:mxnet-engine:0.5.0 包含在内。运行教程中的示例代码时,我遇到以下错误消息:

[main] WARN ai.djl.mxnet.engine.MxEngine - Failed to load MXNet native library
java.lang.UnsatisfiedLinkError: Unable to load library 'mxnet':
Das angegebene Modul wurde nicht gefunden.

Das angegebene Modul wurde nicht gefunden.

Das angegebene Modul wurde nicht gefunden.

Native library (win32-x86-64/mxnet.dll) not found in resource path (D:\dev\DJL Test\target\classes;D:\maven\repo\ai\djl\api\0.5.0\api-0.5.0.jar;D:\maven\repo\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;D:\maven\repo\org\apache\commons\commons-compress\1.20\commons-compress-1.20.jar;D:\maven\repo\ai\djl\basicdataset\0.5.0\basicdataset-0.5.0.jar;D:\maven\repo\ai\djl\model-zoo\0.5.0\model-zoo-0.5.0.jar;D:\maven\repo\ai\djl\mxnet\mxnet-engine\0.5.0\mxnet-engine-0.5.0.jar;D:\maven\repo\net\java\dev\jna\jna\5.3.0\jna-5.3.0.jar;D:\maven\repo\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\maven\repo\org\slf4j\slf4j-simple\1.7.22\slf4j-simple-1.7.22.jar)
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
    at com.sun.jna.Library$Handler.<init>(Library.java:192)
    at com.sun.jna.Native.load(Native.java:596)
    at com.sun.jna.Native.load(Native.java:570)
    at ai.djl.mxnet.jna.LibUtils.loadLibrary(LibUtils.java:68)
    at ai.djl.mxnet.jna.JnaUtils.<clinit>(JnaUtils.java:69)
    at ai.djl.mxnet.engine.MxEngine.newInstance(MxEngine.java:45)
    at ai.djl.mxnet.engine.MxEngineProvider.<clinit>(MxEngineProvider.java:21)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:779)
    at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:721)
    at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1394)
    at ai.djl.engine.Engine.initEngine(Engine.java:45)
    at ai.djl.engine.Engine.<clinit>(Engine.java:40)
    at ai.djl.basicdataset.Mnist$Builder.<init>(Mnist.java:175)
    at ai.djl.basicdataset.Mnist.builder(Mnist.java:66)
    at Main.main(Main.java:28)
    Suppressed: java.lang.UnsatisfiedLinkError: Das angegebene Modul wurde nicht gefunden.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
        ... 20 more
    Suppressed: java.lang.UnsatisfiedLinkError: Das angegebene Modul wurde nicht gefunden.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
        ... 20 more
    Suppressed: java.lang.UnsatisfiedLinkError: Das angegebene Modul wurde nicht gefunden.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:265)
        ... 20 more
    Suppressed: java.io.IOException: Native library (win32-x86-64/mxnet.dll) not found in resource path (D:\dev\DJL Test\target\classes;D:\maven\repo\ai\djl\api\0.5.0\api-0.5.0.jar;D:\maven\repo\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;D:\maven\repo\org\apache\commons\commons-compress\1.20\commons-compress-1.20.jar;D:\maven\repo\ai\djl\basicdataset\0.5.0\basicdataset-0.5.0.jar;D:\maven\repo\ai\djl\model-zoo\0.5.0\model-zoo-0.5.0.jar;D:\maven\repo\ai\djl\mxnet\mxnet-engine\0.5.0\mxnet-engine-0.5.0.jar;D:\maven\repo\net\java\dev\jna\jna\5.3.0\jna-5.3.0.jar;D:\maven\repo\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\maven\repo\org\slf4j\slf4j-simple\1.7.22\slf4j-simple-1.7.22.jar)
        at com.sun.jna.Native.extractFromResourcePath(Native.java:1095)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:276)
        ... 20 more
Exception in thread "main" ai.djl.engine.EngineException: No deep learning engine found.
Please refer to https://github.com/awslabs/djl/blob/master/docs/development/troubleshooting.md for more details.
    at ai.djl.engine.Engine.getInstance(Engine.java:90)
    at ai.djl.basicdataset.Mnist$Builder.<init>(Mnist.java:175)
    at ai.djl.basicdataset.Mnist.builder(Mnist.java:66)
    at Main.main(Main.java:28)

(请原谅部分德语错误消息,我认为这是因为 MXNet 是通过 JNA 加载的,并且本机 Windows 代码使用不同的语言环境。“Das angegebene Modul wurde nicht gefunden”的意思是“找不到指定的模块”) .现在我确实明白了这个错误试图告诉我什么:DJL 需要一个深度学习引擎并尝试使用 JNA 加载 MXNet,但没有找到 DLL。错误消息提供了一个link to the troubleshooting doc of DJL,应该可以解决我的问题。但即使有这个助手,我也无法弄清楚。以下是我考虑/尝试过的步骤:

第 1 步:首先,故障排除告诉我 MXNet 是由 DJL 自动下载/安装或其他:

默认情况下,DJL 在 MXNet 引擎上运行。我们在 CPU 机器上使用 mxnet-mkl,在 GPU 机器上使用 mxnet-cu102mkl。 mkl 表示 Intel-MKLDNN 已启用。 cu102 表示启用了 Nvidia CUDA Toolkit 10.2 版。 您无需单独下载和安装 MXNet。当您通过运行 ./gradlew build 命令构建 DJL 项目时,它会自动完成。

现在我从来没有使用过 gradle,我总是使用 maven。我没有运行该命令,因为如果我将它复制到终端中,它会告诉我 . 不是有效命令。当我在 IntelliJ 中构建和运行我的项目时,./gradlew build 会自动执行吗?

第 2 步:故障排除文件提供了有关“未找到深度学习引擎”异常的一些详细信息。但是我已经完成了所有步骤,现在我更加困惑:

  1. 依赖项在我的pom.xml 中,并且在我的外部库中也已加载和可见
  2. 我无法像故障排除告诉我的那样解决“IntelliJ 问题”。它提供了两个选项。第一个告诉我导航到references-&gt; Build Execution Deployment -&gt; Build Tools -&gt; Gradle 并将选项Build and running using: 更改为Gradle。问题是这个选项没有出现,我在其他地方也没有找到。第二个选项是“使用项目视图导航到 MXNet 引擎资源文件夹”。这让我很困惑,因为我在哪里可以访问 MXNet 引擎资源文件夹?至少我可以说它没有包含在我的 maven 下载的 jar 中,它应该在那里吗?

第 3 步:故障排除文档告诉我,我可以选择外部安装 MXNet,结果非常复杂。但我做到了,并按照指定设置了MXNET_LIBRARY_PATH 环境变量。我仍然得到同样的错误。

所以在这一切之后,我真的不知道如何解决这个问题,所以我发布这个问题是为了可能得到比我更精通一点的人的一些提示..

谢谢!

系统和应用程序:

  • Windows 10 专业版
  • Intel Core i5-7400 CPU,所以我安装了 mkl 和 mkl 版本的 mxnet (mxnet-mkl)
  • AMD Radeon R9 380 系列,所以我没有 CUDA mxnet,很遗憾
  • mkl 版本 2020.1
  • MXNet 1.5.0 版
  • Java 11 (OpenJDK 11)
  • Maven 3.6.3
  • DJL 0.5.0
  • JNA 5.3.0(DJL 必需)
  • Slf4J api 1.7.26(DJL 必需)
  • Slf4J simple 1.7.22(DJL 必需)
  • IntelliJ IDEA Ultimate 2020.1

【问题讨论】:

    标签: java maven machine-learning mxnet


    【解决方案1】:

    您需要包含 MXNet 原生依赖项: 查看示例项目的 pom.xml 文件:https://github.com/awslabs/djl/blob/master/examples/pom.xml#L64-L72

    有关 MXNet 引擎依赖的更多详细信息,请参阅:https://github.com/awslabs/djl/tree/master/mxnet/mxnet-engine#installation

    对于 Windows,如果您使用 CMD,则可以使用:gradlew build,./ 是 linux/mac 约定,如果您在 Windows 上使用 gitbash,则应该可以使用。

    【讨论】:

    • 非常感谢,这实际上解决了我的问题!但只是因为我很好奇:你知道为什么我的手动安装不起作用吗?
    • 你是在安装pip install的mxnet吗? MXNet windows pip 包是旧版本。 DJL 0.5.0 需要 MXNet 1.7.0,您可以在 MXNet 1.7.x 分支上从源代码构建。
    • 确实如此。谢谢!虽然我会从这里开始使用本机 maven 依赖项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多