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

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

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

但是,当我打电话给ai.h2o.mojos.runtime.MojoPipeline.loadFrom(...)时,遇到以下错误:

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)
...

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

  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;
    }
  }

有人可以帮助我调试此错误吗?我一直无法在线找到任何东西。

java aws-lambda h2o automl
1个回答
0
投票

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

<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>mojo2-runtime-api</artifactId>
    <version>2.3.1</version>
</dependency>

使用以下内容代替:

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

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中添加以下代码块:

<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的路径正确。

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