我正在尝试在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;
}
}
有人可以帮助我调试此错误吗?我一直无法在线找到任何东西。
我不确定您使用的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
的路径正确。