DJL 无法找到 MXNet 引擎,故障排除对我没有帮助

DJL is unable to find MXNet Engine, troubleshooting doesn't help me

我现在花了太多时间试图自己解决这个问题,但我似乎无法独自解决这个问题。我想尝试一下 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[=10=].5.0\api-0.5.0.jar;D:\maven\repo\com\google\code\gson\gson.8.5\gson-2.8.5.jar;D:\maven\repo\org\apache\commons\commons-compress.20\commons-compress-1.20.jar;D:\maven\repo\ai\djl\basicdataset[=10=].5.0\basicdataset-0.5.0.jar;D:\maven\repo\ai\djl\model-zoo[=10=].5.0\model-zoo-0.5.0.jar;D:\maven\repo\ai\djl\mxnet\mxnet-engine[=10=].5.0\mxnet-engine-0.5.0.jar;D:\maven\repo\net\java\dev\jna\jna.3.0\jna-5.3.0.jar;D:\maven\repo\org\slf4j\slf4j-api.7.26\slf4j-api-1.7.26.jar;D:\maven\repo\org\slf4j\slf4j-simple.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.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[=10=].5.0\api-0.5.0.jar;D:\maven\repo\com\google\code\gson\gson.8.5\gson-2.8.5.jar;D:\maven\repo\org\apache\commons\commons-compress.20\commons-compress-1.20.jar;D:\maven\repo\ai\djl\basicdataset[=10=].5.0\basicdataset-0.5.0.jar;D:\maven\repo\ai\djl\model-zoo[=10=].5.0\model-zoo-0.5.0.jar;D:\maven\repo\ai\djl\mxnet\mxnet-engine[=10=].5.0\mxnet-engine-0.5.0.jar;D:\maven\repo\net\java\dev\jna\jna.3.0\jna-5.3.0.jar;D:\maven\repo\org\slf4j\slf4j-api.7.26\slf4j-api-1.7.26.jar;D:\maven\repo\org\slf4j\slf4j-simple.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" 表示 "the specified module was not found") .现在我 do 明白这个错误试图告诉我什么:DJL 需要一个深度学习引擎并尝试使用 JNA 加载 MXNet,但没有找到 DLL。错误消息提供了一个 link to the troubleshooting doc of DJL 应该可以解决我的问题。但即使有这个帮手,我也无法弄清楚。以下是我考虑/尝试过的步骤:

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

By default, DJL is running on the MXNet engine. We use mxnet-mkl on CPU machines and mxnet-cu102mkl on GPU machines. mkl means Intel-MKLDNN is enabled. cu102 means Nvidia CUDA Toolkit version 10.2 is enabled. You don't need to download and install MXNet separately. It's automatically done when you build the DJL project by running the ./gradlew build command.

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

第 2 步:故障排除文件提供了有关 "No deep learning engine found" 异常的一些详细信息。但是我已经完成了所有步骤,现在我更加困惑:

  1. 依赖项在我的 pom.xml 中,并且也在我的外部库中加载并可见
  2. 我无法像故障排除告诉我的那样解决 "IntelliJ issue"。它提供了两个选项。第一个告诉我导航到 references-> Build Execution Deployment -> Build Tools -> Gradle 并将选项 Build and running using: 更改为 Gradle。问题是这个选项没有出现,我也没有在别处找到。第二个选项是"navigate to the MXNet engine resources folder using the project view"。这让我很困惑,因为我在哪里可以访问 MXNet 引擎资源文件夹?至少我可以说它不包含在我下载的 jar 中,它应该在那里吗?

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

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

谢谢!

系统和应用程序:

您需要包含 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,你可以使用:gradlew build 如果你使用的是 CMD,./ 是 linux/mac 约定,如果你在 [=21] 上使用 gitbash 应该可以=].