Nvidia Jetson Nano B01初体验(四)
前情回顾:
Nvidia Jetson Nano B01初体验(一) https://bbs.huaweicloud.cn/blogs/330158
Nvidia Jetson Nano B01初体验(二)https://bbs.huaweicloud.cn/blogs/330177
Nvidia Jetson Nano B01初体验(三)https://bbs.huaweicloud.cn/blogs/330290
(二十)关于Nano上源码安装MindSpore 1.6.0 GPU版本的尝试终结版
在 第三篇的 “(十七)再次探索:源码编译MindSpore 1.6.0”中,张小白曾经尝试了在Jetson Nano上源码安装MindSpore 1.6.0的GPU版本。
最后遇到的错误是这个:
在张小白发了问题贴之后,并没有得到什么解决方案。张小白一度想放弃,但一度又不甘心。
最近张小白趟坑的事情还少吗?
张小白树莓派4B踩坑记(一) https://bbs.huaweicloud.cn/blogs/330786
张小白DataX踩坑记(一)待发表
哪一个不是困难重重?
于是张小白在MindSpore论坛继续发了一个试验贴:
Jetson Nano源码编译MindSpore 1.6 GPU版编译的再次尝试(连载中)https://bbs.huaweicloud.cn/forum/forum.php?mod=viewthread&tid=179276
由于张小白只有周末时间会宽裕一点,白天要上班处理公务,但对此又念念不忘,只好晚上继续探索:
先将现有的mindspore目录改名
mv mindspore mindspore.old
git clone https://gitee.com/mindspore/mindspore.git -b r1.6
修改 ~/mindspore/scripts/build/build_mindspore.sh,加入-DENABLE_GITEE=ON参数
(后面发现第二个改的不对,这是后话,暂且不提)
bash build.sh -e gpu -j12
这就又开始了漫长的编译历程。。。
结果编译到这里报错:
************ build core ***************
-- Configuring done
CMake Warning (dev) in mindspore/ccsrc/CMakeLists.txt:
Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC,
empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104"
for policy details. Use the cmake_policy command to set the policy and
suppress this warning.
CUDA_ARCHITECTURES is empty for target "gpu_cuda_lib".
This warning is for project developers. Use -Wno-dev to suppress it.
查了一下,需要在CMakeLists.txt中追加对CUDA_ARCHITECTURES的设置。
根据nvidia的编译规则:貌似对于Nano设备而言,CUDA_ARCHITECTURES设为50应该比较合适。
所以,张小白做了如下处理
cp CMakeList.txt CMakeList.txt.old
vi CMakeList.txt
增加以下几行:
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES 50 52 53)
endif(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
修改后后继续编译:
报错如下:
这个已经跑到了build_mindspore.sh中的第二个改动的地方,显然这里是不支持 -DENABLE_GITEE参数,所以果断去掉这个参数,继续编译。。。
进入到了有颜色的百分率编译历程,这个张小白非常熟悉。。
。。。
。。。
。。。
。。。
照这个速度,如果不出错的话,估计要编译一晚上。。。张小白当时决定睡了。。(当时是 2022年02月10日 02:36:43,有论坛发帖为证)
早上7点左右,张小白被闹钟惊醒,正在跑编译代码的笔记本电脑需要,但是编译仅仅进度到了 34%。。
无奈只好CTRL-C中断编译。。
(好在编译过的内容下一次再编译时会跳过去。。。)
特意在家里的电脑上安装了teamviewer.
然后在带走的笔记本电脑上也装了teamviewer.
然后远程控制家里的电脑,通过家里电脑的mobaxterm连接Nano。
这样就可以白天间歇性地远程控制Nano的编译过程了。
张小白通过teamviewer远程登录到Nano上,重新开始编译:
2022.2.10 19:30,进度74%
2022.2.10 22:26 进度79%
2022.2.11 0:19 进度85%
2022.2.11 6:16 97%
2022.2.11 6:23 100%
2022.2.11 6:32 100%
2022.2.11 6:39 100%
2022.2.11 6:46 100%
正当张小白以为“大功告成”的时候,居然报了这样一个致命的错误。
张小白度娘了以下这个错误:
说应该是内存资源不足引起的:
尽管在 (三)中( https://bbs.huaweicloud.cn/blogs/330290 ),张小白已经扩了4G的虚拟内存:
扩完之后,SWAP空间有了6G左右:
所以张小白一口气将虚拟内存扩大了16G(变成了18G左右):
然后再开始编译:
bash build.sh -e gpu -j12
到了 2022.2.12 0:28,张小白看到编译还卡在98%一动不动,于是就CTRL-C暂停了编译:
张小白后面就去忙树莓派去了。
当然,不死心的张小白开着Nano,采用j4方式重新进行编译,就把终端一直开在那边,野蛮生长。
结果到了 2022.2.13 7:09 ,居然有了新的变化:
张小白心想,难道死马当活马医,这里有戏?
2022.2.13 8:05
报了这个错,张小白却是很熟悉。
安装wheel就可以了:
pip3 install wheel --user
再来编译:bash build.sh -e gpu -j4
。。。
居然编译成功了!
赶紧将编译好的whl文件备份一下:
那就开始安装吧:
python3 -m pip install mindspore_gpu-1.6.0-cp37-cp37m-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
在安装numpy的时候会比较慢,需要耐心等待:
安装到scipy的时候也是一样的慢:
结果到最后:
居然有权限问题。对,那只能安装在这个用户下了:
python3 -m pip install mindspore_gpu-1.6.0-cp37-cp37m-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple --user
好在编译的时候,它也用到了cache.
那么,常规做法,编辑test.py文件:
import numpy as np
from mindspore import Tensor
import mindspore.ops as ops
import mindspore.context as context
context.set_context(device_target="GPU")
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))
然后执行看看:
python3 test.py
这就表明mindspore成功地调用到了Nvidia Jetson Nano B01的GPU模块了!
至此也排除了MindSpore团队提到了暂不支持ARM GPU版本的问题:
张小白已经将编译好的安装包放到了网盘上:https://pan.baidu.com/s/1Eb5tSv-e1z4GNk005wlDSQ (提取码:eyxe)
欢迎有Jetson Nano设备的童鞋下载试用!
最后感谢在编译过程中MindSpore团队给予的帮助,特别是月月鸟大大的鼓励,还有姐夫哥的支持。没有你们,也许张小白坚持不下去,也完成不了这一首发。
至于几位大大询问为啥张小白不编译Lite版本,张小白只能回答:full版本都可以的话,lite版本还怕不支持吗?(张小白胆战心惊的回答,却也可能给自己后续的任务留下了伏笔。。。这是后话,暂且不提。)
撒花!
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)