Nvidia Jetson Nano B01初体验(四)

举报
张辉 发表于 2022/02/13 17:51:27 2022/02/13
【摘要】 MindSpore首次支持aarch64(ARM)的GPU!

前情回顾:

Nvidia Jetson Nano B01初体验(一) https://bbs.huaweicloud.com/blogs/330158

Nvidia Jetson Nano B01初体验(二)https://bbs.huaweicloud.com/blogs/330177

Nvidia Jetson Nano B01初体验(三)https://bbs.huaweicloud.com/blogs/330290


(二十)关于Nano上源码安装MindSpore 1.6.0 GPU版本的尝试终结版


在 第三篇的 “(十七)再次探索:源码编译MindSpore 1.6.0”中,张小白曾经尝试了在Jetson Nano上源码安装MindSpore 1.6.0的GPU版本。

最后遇到的错误是这个:

在张小白发了问题贴之后,并没有得到什么解决方案。张小白一度想放弃,但一度又不甘心。

最近张小白趟坑的事情还少吗?

张小白树莓派4B踩坑记(一) https://bbs.huaweicloud.com/blogs/330786

张小白DataX踩坑记(一)待发表 

哪一个不是困难重重?

于是张小白在MindSpore论坛继续发了一个试验贴:

Jetson Nano源码编译MindSpore 1.6 GPU版编译的再次尝试(连载中)https://bbs.huaweicloud.com/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.com/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版本还怕不支持吗?(张小白胆战心惊的回答,却也可能给自己后续的任务留下了伏笔。。。这是后话,暂且不提。)

撒花!

(全文完,谢谢阅读)

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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