我正在尝试在AWS Lambda上运行一个函数,该函数从S3加载我的H2O MOJO模型,并根据函数输入进行预测。我的计划是使用API Gateway创建一个预测端点。
然而,当我调用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;
}
}有人能帮我调试这个错误吗?我在网上找不到任何东西。
发布于 2020-03-29 01:44:35
我不确定您使用的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的路径正确。
https://stackoverflow.com/questions/58515602
复制相似问题