张小白带你体验MindSpore 1.3的新特性:MindSpore Lite端侧“伪”训练的实现(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 (只有这个是真的端侧训练哦。。)
- 点赞
- 收藏
- 关注作者
评论(0)