我现在花了太多的时间试图自己解决这个问题,但我似乎无法独自解决这个问题。我想试一试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。错误消息提供了一个链接到DJL的疑难解答文档,它应该解决我的问题。但即使有了这个帮手我也想不出来。以下是我考虑过/尝试过的步骤:
第1步:首先,故障排除告诉我,MXNet是由DJL自动下载/安装的:
默认情况下,DJL在MXNet引擎上运行。我们在CPU机器上使用mxnet,在GPU机器上使用mxnet-cu102mkl。mkl表示启用了Intel-MKLDNN。cu102意味着启用了Nvidia CUDA工具包10.2版。您不需要分别下载和安装MXNet。当您通过运行./gradlew build命令构建DJL项目时,它会自动完成。
现在我从来没有和gradle合作过,我总是使用maven。我没有运行这个命令,因为如果我将它复制到终端,它会告诉我.不是一个有效的命令。在IntelliJ中构建和运行项目时,是否自动执行IntelliJ?
步骤2:故障排除文件提供了一些关于“无深度学习引擎发现”异常的详细信息。但是我已经走过了所有的步骤,现在我更困惑了:
pom.xml中,并且在我的外部库中也被加载和可见。references-> Build Execution Deployment -> Build Tools -> Gradle并将选项Build and running using:更改为Gradle。问题是这个选项没有出现,我也没有在其他地方找到它。第二个选项是“使用项目视图导航到MXNet引擎资源文件夹”。这让我感到困惑,因为我在哪里可以访问MXNet引擎资源文件夹?至少我可以告诉你,它不包含在我的maven下载的jar中,它应该在那里吗?第3步:疑难解答文档告诉我,我可以选择在外部安装MXNet,这是非常复杂的。但是我这样做了,并将MXNET_LIBRARY_PATH环境变量设置为指定的。但我还是犯了同样的错误。
所以在这之后,我真的不知道如何处理这个问题,所以我发这个问题是为了让那些比我更精通这个问题的人给我一些提示。
谢谢!
系统和应用程序:
发布于 2020-05-31 05:42:49
您需要包含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 in如果您正在使用CMD,/in/mac约定,如果您在Windows上使用gitbash,则应该可以工作。
https://stackoverflow.com/questions/62110190
复制相似问题