张小白带你体验MindSpore 1.3的新特性:MindSpore Lite端侧“伪”训练的实现(Java)

举报
张辉 发表于 2021/08/02 02:30:02 2021/08/02
【摘要】 本文介绍了MindSpore 1.3的新特性——端侧训练(Java的编译和伪训练)

根据 https://mindspore.cn/lite/docs/zh-CN/master/quick_start/train_lenet_java.html 文档,其实MindSpore 1.3也是支持Java的端侧训练的,只是这个训练张小白还没完全搞定,只好先把已经做完的部分汇报给大家。

本文是 论坛贴:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=140860&extra=page%3D1&ordertype=2&page=2 的整理版本。

根据 前面所示链接的环境要求:

安装Maven:

sudo apt install maven

...

maven版本要求3.3:安装的结果是3.6.0,够了。

安装JDK

java版本要求1.8:够了。

升级Git

git版本要求2.28.0:好像不够:

sudo add-apt-repository ppa:git-core/ppa

sudo agt update

sudo apt install git

git --version

现在够了。

mkdir mindspore-java

cd mindspore-java

下载MindSpore 1.3版本:

编译端侧训练Java包:

cd mindspore

按照文档要求,编译指令为:

bash build.sh -I x86_64 -j8

。。。

编译过程中,会卡在github.com的下载的地方。。。有的等一等能过去,有的却容易卡死,

比如,张小白试了好多次,都卡在了 OpenSSL的下载的地方。

经过咨询外国专家Emir Haleva,如果遇到Openssl问题:可以这么操作。

就按照专家的意思试试吧:

wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1k.tar.gz

cd mindspore/lite/build/_deps/

cd openssl-subbuild/

cp ~/mindspore-java/mindspore/OpenSSL_1_1_1k.tar.gz  .

bash build.sh -S on -I x86_64  -j8 -i

系统重新编译,直到遇到这个。。

张小白果断的 ctrl-c,并且重新执行: 

bash build.sh -S on -I x86_64  -j8 -i

这回报缺java。

原来前面装了JDK,却没有配置JAVA_HOME

找到java的安装路径:

加入 ~/.bashrc

重新编译。。

。。。

结果遇到下面这个问题:

好奇怪的错误。。

有同学说,是内存不够,需要加大内存。。。

那就把虚拟机内存扩到16G看看:

再来编译一下:

bash build.sh -S on -I x86_64  -j8 -i

。。。

成功走到了99%

。。。

报gradle没装:

那就装gradle吧。。。

。。。

不过看到apt 自动安装的是4.4.1啊,而根据 https://www.mindspore.cn/lite/docs/zh-CN/r1.3/use/build.html

好像版本不够,那就根据上面的链接装Gradle 6.6.1吧。

下载

传输到ubuntu虚拟机,解压。

在~/.bashrc设置环境变量GRADLE_HOME和PATH:

source ~/.bashrc

重新执行编译。。。

bash build.sh -S on -I x86_64  -j8 -i

gradle好像在工作的样子。。

它似乎在自己Download自己。。。

终于编译成功了。。。

检查下生成的文件:

cd mindspore/lite/examples/train_lenet_java/

先将VMWare虚拟机接上荣耀30手机:

执行:

./prepare_and_run.sh -D /home/ascend/mindspore1.3/MNIST_Data -r ../../../../output/mindspore-lite-1.3.0-linux-x64.tar.gz

。。。

好像一直还在下载啥。。。

失败了,好像是读数据集失败了。

官方的结果是这样的:

应该是在加载数据集的时候出错了。

张小白决定看下代码到底是咋回事儿:

检查 ~/mindspore-java/mindspore/mindspore/lite/examples/train_lenet_java/src/main/java/com/mindspore/lite/train_lenet/DataSet.java

发现这四个文件名好像跟 mindspore1.3/MNIST_Data下的不一样:

检查了官方的名字:

http://yann.lecun.com/exdb/mnist/

那就是名字不对。奇怪的是C++代码的端侧训练 ( https://bbs.huaweicloud.com/blogs/288297  )为啥没报错呢(用的都是同一个数据集)

改名吧:

这下修改下MNIST_Data的新路径:

./prepare_and_run.sh -D /home/ascend/mindspore-java/MNIST_Data -r ../../../../output/mindspore-lite-1.3.0-linux-x64.tar.gz

再来一遍:

终于开始训练了:

。。。

训练完毕,acc=0.981 还不错。

但是,怎么知道这就是在手机上完成的训练呢?

拔掉手机线,再试一下会是什么结果:

好像还是可以继续的啊。。。

完了,这次真的不是在手机上做的训练啊。。。

再看下训练部分的代码:好像并没有连接手机这部分的处理:

感觉这块Java的训练代码,还是应该搬到 Android上运行才算是真正的端侧训练,但是这已经超出张小白目前的能力了。

所以让大家看到了一次“伪训练”,真不好意思。

(全文完,耻辱结贴)

相关链接:

张小白带你体验MindSpore 1.3的新特性:MindSpore Lite端侧训练的实现(C++)https://bbs.huaweicloud.com/blogs/288297 (只有这个是真的端侧训练哦。。)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。