张小白带你体验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)