基于AWS云DJL平台,使用java部署深度学习模型

文章目录

  • 基于AWS云DJL平台,使用java部署深度学习模型
    • 环境准备
    • Linux导入项目
    • 配置依赖信息
    • 结果展示

基于AWS云DJL平台,使用java部署深度学习模型

本文主要是总结跑通AWS发布的DJL的一个简介Demo而踩过的坑,他们官方文档的可读性(个人感觉)有点差,自己踩得很多坑都没有在官方文档里找到解决方法。以下链接是官方Demo在zhihu的中文地址。
5分钟!用Java实现目标检测 (PyTorch)

环境准备

项目部署环境:Linux(CentOS7)、jdk8、idea2020,对!只是用java就可以部署深度学习模型~在linux上安装jdk和idea可以参考其他博客,网上有很多。这里总结一些自己配环境时踩的坑:

  1. 我在操作虚拟机的时候是用MobaXterm这个工具通过SSH连接,SSH连接支持命令行,但不支持图形界面,而idea是需要在linux系统的图形界面才可以启动。因此需要在虚拟机端安装图形化界面。

  2. 图形化界面的安装可以参考这个博客(Linux系统有图形化界面的可以忽略):我安装了:X Window System+KDE,Linux图形界面的安装和卸载。图形化界面安装成功后,命令行输入:startx ,就可以启动图形化界面。

  3. 安装好图形化界面后:进入idea安装目录的bin目录下:输入./idea.sh,启动idea。

    [root@localhost bin]# ./idea.sh
    

Linux导入项目

最开始跑demo是在windows端创建的gradle项目,按照demo里的步骤,直接运行会报错No deep learning engine found exception.
具体是在构建criteria 对象,执行Criteria.builder()静态方法的时候报错,

Criteria<BufferedImage, DetectedObjects> criteria =
            Criteria.builder()
                    .optApplication(Application.CV.OBJECT_DETECTION)
                    .setTypes(BufferedImage.class, DetectedObjects.class)
                    .optFilter("backbone", "resnet50")
                    .optProgress(new ProgressBar())
                    .build();

错误信息:基于AWS云DJL平台,使用java部署深度学习模型_第1张图片
在网上没有找到解决办法,突然发现官方有总结这个报错的解决方案。
故障排除-Deep Java库,然而按照上面的一通操作并没有什么luan用,于是乎把项目文件在Linux中打开,运行同样报错No deep learning engine found exception

基于AWS云DJL平台,使用java部署深度学习模型_第2张图片
但是Linux直接在错误信息中说明是缺少了CXXXABI_1.3.9的版本,直接升级gcc动态库就可以解决了,参考升级gcc。
升级后还报错缺少GLIBC_2.23版本的动态库,解决方法类类似,参考升级glibc库。

在这里插入图片描述
以上两个问题都是由于Linux版本低造成的,如果内置库都有高版本,项目就可以直接迁移在Linux上。

配置依赖信息

接下来就是依赖问题了,这一块需要重点说明,依赖版本一定要一致!!!先放出最后成功运行的依赖信息:

基于AWS云DJL平台,使用java部署深度学习模型_第3张图片

官方给的依赖如下:

plugins {
    id 'java'
}
repositories {                           
    jcenter()
}
dependencies {
    implementation "ai.djl:api:0.4.0"
    implementation "ai.djl:repository:0.4.0"
    runtimeOnly "ai.djl.pytorch:pytorch-model-zoo:0.4.0"
    runtimeOnly "ai.djl.pytorch:pytorch-native-auto:1.4.0"
}

这里总结一下由于依赖添加错误而踩的坑,官方所有包的依赖说明可以参考:Deep Java Library。

  1. 只有以上的依赖信息,我记得运行会报slf4j包的错误,添加上slf4j的相关依赖就可以。
  2. 还有一个要尤为说明的,demo里BufferedImage是 0.4.0版本的实体类,后面我用的ai.djl:api:0.8.0版本已经取消了这个实体类,图片类的导入参考:
    在这里插入图片描述
    而且ai.djl:repository:0.4.0这个包更新到了0.4.1就没有继续更新单独的包了,后面都集成到了ai.djl:api:0.8.0一个包内了,所以同时导入两个包就会在导包和调用方法的时候找不到正确的位置而报错。

结果展示

解决了依赖问题,就可以跑通demo了:
基于AWS云DJL平台,使用java部署深度学习模型_第4张图片

你可能感兴趣的:(Deep,Java,linux,java,gradle,深度学习)