当前位置: 首页 > 知识库问答 >
问题:

无法在docker容器中初始化类org.nd4j.linalg.factory.Nd4j

金飞
2023-03-14

我正在尝试使用具有以下java代码示例的程序在docker容器中导入KERAS文件:

String weights = getFile(_modelFile).getAbsolutePath();
String modelConfiguration = getFile(_configFile).getAbsolutePath();
_model = KerasModelImport.importKerasSequentialModelAndWeights(modelConfiguration, weights);

如果我在WSL2中运行该程序,它可以正常工作,但是如果我在docker容器中运行它,我会收到以下错误:

ServletHolder.java:799JAF_G1000xpto.jaf.protocols.json.JSONServletxpto.jaf.JafError调用操作方法失败java.lang.NoClassDefFoundErrorjava.lang.NoClassDefFoundError无法初始化org.nd4j.linalg.factory.Nd4j633)在org. eclipse. jetty. server. HttpChannel. hand(HttpChannel. java: 380)在org. eclipse. jetty. server. HttpConnec. onFillable(HttpConnec. java: 277)在org. eclipse. jetty. io. AbstractConnection$ReadCallback.在org. eclipse. jetty. io. Fillinterest. fillable(Fillinterest. java: 105)在org. eclipse. jetty. io. ChannelEndPoint1美元. run(ChannelEndPoint. java: 104)在org. eclipse. jetty. util. thread.策略. EatWhatYouKill. runTask(EatWhatYouKill. java: 338)在org. eclipse. jetty. util. thread.策略. Eat

Nd4j是一个Dl4j依赖项,它出现在两个执行中,这使我认为问题可能是docker本身或Docker容器上的操作系统。

希望已经很好地解释了我的问题。提前谢谢。

编辑:Dl4j和Nd4j两个版本都是1.0.0-M1.1

共有1个答案

皇甫乐
2023-03-14

这仍然没有说明原因。NoClassDeffFounderRor通常与冲突依赖项相关。在类路径上可以有不同版本的dl4j/nd4j,但我对此表示怀疑。大多数情况下,这是本机依赖崩溃的副作用。

这里值得注意的是:

我不建议在线运行keras转换器(或任何模型导入过程)。我建议单独转换模型。这主要是出于性能原因

无论您的问题是什么,通常都有一些:

>

  • 带有 hdf5 的 glibc 版本。Keras import在封面下面使用hdf5,这意味着c代码。

    nd4j本机依赖崩溃:这通常也与glibc相关。我们将nd4j加载到内存中以创建和设置本机数组(这意味着更多的java调用c),然后根据您运行的操作系统触发崩溃

    另一个hdf5错误:这可能是一个无效的模型或一些hdf5版本错误。

    无论如何,我们需要更多信息才能为您提供帮助。无论你在这里报道什么,都是不够的。你能提到你的docker容器操作系统以及这里捆绑了什么版本的dl4j / nd4j吗?

    编辑:我看到oracle linux 7实际上是RHEL/Centos。如果你使用docker,我会推荐一个新的图片。

    除此之外,如果它是与nd4j相关的崩溃(仍然无法从堆栈跟踪中验证),如果您使用的是最新版本,则可能会由于glibc版本而看到崩溃。

    如果是这样,您可以在此处找到nd4j分类器的最新更新:https://repo1.maven.org/maven2/org/nd4j/nd4j-native/1.0.0-M1.1/

    较旧的glibcs需要使用linux-x86_64-compat作为迁移路径

  •  类似资料:
    • 问题内容: 我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker Hub上的文档,我将文件挂载在其中,但无济于事。 我的撰写文件如下: 的内容只有1个文件: 一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。 有人可以在这里看到一些明显的问题吗

    • 我正在尝试使用Spring开发Rest代码。 我的MongoDAO类如下所示 但我得到的错误是.. 原因:org . spring framework . beans . factory . beancreationexception:创建在文件[C:\ Users \ user \ Desktop \ ITAU \ 77 \ ABC-iCOE-WAL \ ItauBankingTransac s

    • 当我在iReport 5.1.0中预览JasperReports的报告时,它执行得很好。它包含一个饼图,当我需要从jsp文件运行它时,问题就来了。 烧烤-1.5-beta1.jar commons-beanutils-1.8.2.jar Commons-Collections-3.2.1.jar commons-digester-2.1.jar commons-javaflow-20060411.

    • 我的玻璃鱼在我尝试跑步时抛出一个异常。 [2018-02-22T17:07:04.135 0100][glassfish 5.0][Severy][javax.enterprise.system.core][tid:_ThreadID=46 _ThreadName=admin listener(4)][timeMillis:1519315624135][levelValue:1000][加载应用时

    • 22. 初始化容器 上节课我们学习了容器的健康检查的两个探针:liveness probe(存活探针)和readiness probe(可读性探针)的使用方法,我们说在这两个探针是可以影响容器的生命周期的,包括我们之前提到的容器的两个钩子函数PostStart和PreStop。我们今天要给大家介绍的是Init Container(初始化容器)。 Init Container就是用来做初始化工作的容

    • 问题内容: 是我自己的一类。该类与主类位于同一JAR文件中。因此,这不应该是因为classpath中缺少任何JAR。 当我通过查阅JAR文件时,可以看到其中列出的内容。 顺便说一句:代码在我的本地计算机上运行良好。但是当我将其与某些脚本一起部署到Linux服务器上时无法工作。所以我认为这不是代码的问题。但是出于某种原因。部署过程很难跟踪。 可能是什么问题呢? 问题答案: 我最好的选择是这里有一个问