首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >H2O MOJO运行时:找不到MOJO实现后端

H2O MOJO运行时:找不到MOJO实现后端
EN

Stack Overflow用户
提问于 2019-10-23 12:39:38
回答 1查看 213关注 0票数 1

我正在尝试在AWS Lambda上运行一个函数,该函数从S3加载我的H2O MOJO模型,并根据函数输入进行预测。我的计划是使用API Gateway创建一个预测端点。

然而,当我调用ai.h2o.mojos.runtime.MojoPipeline.loadFrom(...)时,我遇到了以下错误:

代码语言:javascript
复制
java.lang.RuntimeException: Cannot find MOJO implementation backend!
at ai.h2o.mojos.runtime.MojoPipelineFactoryService.getMojoPipelineFactory(MojoPipelineFactoryService.java:46)
at ai.h2o.mojos.runtime.MojoPipeline.loadFrom(MojoPipeline.java:58)
...

下面是我抛出异常的方法:

代码语言:javascript
复制
  private static MojoPipeline loadMojoPipelineFromS3(LambdaLogger logger)
      throws IOException, LicenseException {
    try (S3Object s3Object = s3Client.getObject(DEPLOYMENT_S3_BUCKET_NAME, MOJO_S3_OBJECT_KEY)) {
        logger.log(
          String.format(
              "Loading Mojo pipeline from S3 object %s/%s",
              DEPLOYMENT_S3_BUCKET_NAME, MOJO_S3_OBJECT_KEY));

        S3ObjectInputStream s3is = s3Object.getObjectContent();
        FileOutputStream fos = new FileOutputStream(new File("/tmp/model"));
        byte[] read_buf = new byte[1024];
        int read_len = 0;

        while ((read_len = s3is.read(read_buf)) > 0) {
            fos.write(read_buf, 0, read_len);
        }

        s3is.close();
        fos.close();

      MojoReaderBackend mojoReaderBackend =
          MojoPipelineReaderBackendFactory.createReaderBackend("/tmp/model");
      MojoPipeline mojoPipeline = MojoPipeline.loadFrom(mojoReaderBackend);

      logger.log(String.format("Mojo pipeline successfully loaded (%s).", mojoPipeline.getUuid()));

      return mojoPipeline;
    }
  }

有人能帮我调试这个错误吗?我在网上找不到任何东西。

EN

回答 1

Stack Overflow用户

发布于 2020-03-29 01:44:35

我不确定您使用的mojo运行时库。使用从H2O DAI下载MOJO管道时获得的管道。mojo2-runtime-api还提供了加载MOJO管道(MojoPipeline.loadFrom())的相同方法。例如,如果它是一个maven项目,并且您使用的是mojo运行时api,如下所示:

代码语言:javascript
复制
<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>mojo2-runtime-api</artifactId>
    <version>2.3.1</version>
</dependency>

请使用以下代码:

首先使用以下命令将依赖项安装到本地文件存储库:

代码语言:javascript
复制
mvn install:install-file -Dfile=<<folder where the mojo runtime jar is stored>>/mojo2-runtime.jar -DgroupId=ai.h2o -DartifactId=mojo2-runtime -Dversion=1.0.0 -Dpackaging=jar

然后在您的pom.xml中添加以下代码块:

代码语言:javascript
复制
<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>mojo2-runtime</artifactId>
    <version>1.0.0</version>
    <!-- NOT RECOMMENDED THE SYSTEM SCOPE WAY. INSTEAD, INSTALL IT IN YOUR LOCAL REPO
         USING THE COMMANDS GIVEN ABOVE
        <scope>system</scope>
        <systemPath>${project.basedir}/<<h2o>>/mojo2-runtime.jar</systemPath>
        OR
        <url>file://${basedir}/my-repo</url>
    -->
</dependency>

希望上面的方法能起作用!确保pipeline.mojo的路径正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58515602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档