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

问题描述 投票:0回答:1

我现在花了太多时间试图自己解决这个问题,但是我似乎无法自己解决这个问题。我想尝试一下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”意味着“未找到指定的模块”)。现在,我do理解了此错误试图告诉我的内容: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-> Build Execution Deployment -> Build Tools -> Gradle并将选项Build and running using:更改为Gradle。问题在于此选项没有显示,我也没有在其他地方找到它。第二个选项是“使用项目视图导航到MXNet引擎资源文件夹”。这使我感到困惑,因为在哪里可以访问MXNet引擎资源文件夹?至少我可以说它不包含在我的maven下载的jar中,应该在其中吗?

[第3步:故障排除文档告诉我,我可以选择从外部安装MXNet,事实证明这非常复杂。但是我做到了,并按指定设置了MXNET_LIBRARY_PATH环境变量。仍然出现相同的错误。

所以毕竟,我真的不知道该如何解决这个问题,所以我发布这个问题是为了让一些比我精通此技巧的人得到一些提示。

谢谢!

系统和应用程序:

  • Windows 10专业版
  • Intel Core i5-7400 CPU,所以我安装了mkl和mxnet的mkl版本(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简单1.7.22(DJL必需)
  • IntelliJ IDEA Ultimate 2020.1
java maven machine-learning mxnet
1个回答
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,则应该可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.