Nvidia Jetson Nano B01初体验(三)

举报
张辉 发表于 2022/02/06 13:43:37 2022/02/06
【摘要】 本文介绍了在Jetson Nano上源码编译MindSpore 1.6.0的失败尝试。。

前情回顾:

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

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


(十七)再次探索:源码编译MindSpore 1.6.0

当张小白向群里诉苦说,MindSpore没有GPU+aarch64版本的时候,小口鸟大大的哥哥月月鸟大大指出了一条康庄大道:

尽管张小白一百万个不情愿,还是觉得跟着大大的方向是没错的。所以开玩笑归开玩笑,迈向披荆斩棘的道路中,总要遵循灯塔或者看一下交通标志灯。。

先看了一下32G TF卡的剩余空间:

还有13G可用,按理说应该是够了(够折腾的了)。

那就开干吧。

参考 https://bbs.huaweicloud.cn/blogs/198349  张小白上次源码编译V1.0的时候还是在一年半前。

查看编译所需的环境要求:

(1)gcc 7.3.0

当前是7.5.0,从张小白以前的经验来看,7.5应该也是可以的。

(2)gmp 6.1.2 

在上一篇博客中已经安装过了:

此处不再赘述。

(3)Python 3.9.0 

这个进入vitualenv环境就可以了。

我们可以另外创建一个给源码编译用。

virtualenv -p ~/.pyenv/versions/3.9.0/bin/python mindspore-source

source ~/mindspore-source/bin/activate

(4)cmake 大于3.18.3

够了。

(5)patch 大于2.5

wget http://ftp.gnu.org/gnu/patch/patch-2.5.4.tar.gz
tar zxvf patch-2.5.4.tar.gz
./configure
make -j8


sudo make install -j8

patch --version

够了。

(6)flex 大于2.5.35

wget https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz

tar zxvf flex-2.6.4.tar.gz

./configure

make -j8

coredump了!

可能是交换分区不够,改为make (不带-j参数)编译试试。

一样的结果。

小技巧:如何给Nano增加虚拟内存:

那看看如何增加虚拟内存吧!

free -m

sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

free -m

再试一遍吧:

make -j8

sudo make install -j8

一样的。


换个方式呢?

sudo apt-get install flex

flex --version

真是多此一举啊。。

但是这个问题好奇怪,怎么会编译不过去呢?张小白百思不得其解。

(7)wheel 大于0.32.0

pip3 install wheel==0.32.0

其实已经有了wheel.

还原吧!

pip3 install wheel==0.37.1

(8)openssl 大于1.1.1

wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz


tar -zxvf OpenSSL_1_1_1g.tar.gz
./config --prefix=/usr/local/openssl


make -j8


sudo make install -j8

编辑 ~/.bashrc,追加一行:
export OPENSSL_ROOT_DIR=/usr/local/openssl

source ~/.bashrc 使其生效。

当然需要再回到virtualenv环境:

source ~/mindspore-source/bin/activate

(9)NUMA大于2.0.11

sudo apt-get install libnuma-dev

(10)下载mindspore源码:

git clone https://gitee.com/mindspore/mindspore.git -b r1.6

(11)开始编译(遇到Python找不到的问题)

bash build.sh -e gpu -j12

好像是老问题了。

换成virtualenv 3.7.5 的环境试试呢?

deactivate

virtualenv -p ~/.pyenv/versions/3.7.5/bin/python mindspore-source375

source ~/mindspore-source375/bin/activate

bash build.sh -e gpu -j12

好像依然如此。

(12)源码编译Python3.7.5

还是先源码编译 Python3.7.5吧!

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

tar -xzf Python-3.7.5.tgz

进入Python-3.7.5目录后

./configure --prefix=/usr/local/python3.7.5 --with-openssl=/usr/local/openssl --enable-shared

make -j 12


sudo make install -j 12

export PATH=/usr/local/python3.7.5/bin:$HOME/.local/bin:$PATH

python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"

python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))"

(13)再次尝试解决Python找不到的问题

张小白突然想起当年编译的时候遇到的坑:https://bbs.huaweicloud.cn/forum/forum.php?mod=viewthread&tid=80520&ordertype=2&page=4

唉,看来还是得这样操作才行。

跟踪build.sh代码:

是执行到了 ./scripts/build/build_mindspore.sh

打开这个shell

加上ENABLE_GITEE=ON参数,让其走gitee而不是github

修改对应的CMakeLists.txt文件:

强行让其不执行find_package.

编辑 cmake/check_requirements.cmake

(14)解决gmp找不到的问题

再来一遍:

bash build.sh -e gpu -j12

终于没报python3.7.5找不到的错了,报了gmp找不到的错。

那就装gmp吧。

sudo apt-get install -y build-essential m4 libgmp-dev libmpfr-dev libmpc-dev

(15)再次编译

再来!

bash build.sh -e gpu -j12

终于开始编译了。。。

。。。

。。。

。。。

好像还在编译依赖库,耐心等待吧。毕竟以前github更慢。

在编译flatbuffers包的时候,突然中断了:

老革命遇到了新问题。。

在build_mindspore.sh中增加参数试试:

再次执行,好像还是一样的错:

(16)源码安装gcc7.3.0

CMAKE_CXX_COMPILER报错,张小白总感觉是gcc 7.5.0的编译器有问题,要不试一试 gcc7.3.0?

df -h

感觉32G的TF卡快不够用了。

wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz

tar -xzf gcc-7.3.0.tar.gz


cd gcc-7.3.0
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

。。

make -j 12 


sudo make install -j 12


先备份一下gcc7.5,再将软链接指向gcc7.3

cd /usr/bin

sudo mv gcc gcc7.5

sudo mv g++ g++7.5

sudo ln -s /usr/local/bin/gcc gcc

sudo ln -s /usr/local/bin/g++ g++

gcc --version

g++ --version



这次编译完之后,df -h

看来要清理一下,否则mindspore会没有足够的空间编译的。

(17)再再次编译

再来,因为前面有很多是用gcc 7.5.0编译的,现在全改为gcc 7.3.0编译吧,清空代码仓目录,重新下载重新编译吧!

rm -rf ~/mindspore

git clone https://gitee.com/mindspore/mindspore.git -b r1.6

vi ~/mindspore/scripts/build/build_mindspore.sh

箭头所示的两行都加上-DENABLE_GITEE=ON,让它不要走恐怖的github。。

bash build.sh -e gpu -j12

。。。

。。

。。。

。。。

正当张小白满怀欣喜的准备收工的时候,突然:

CUDA报错“No CMAKE_CUDA_COMPILER”

度娘了一把,这个报错是PATH缺少cuda的路径造成的。

然后查看了下现在的PATH:

难道 .bashrc中定义的路径在编译过程中被去掉了?

重新 source ~/.bashrc后,检查PATH含了 /usr/local/cuda/bin的路径后,重新编译:bash build.sh -e gpu -j12

报了pybind11_add_module错。

难道是pybind11没装?

装下看看:

sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/  pybind11

并不是,pybind11已经有了。

再试一次bash build.sh -e gpu -j12,结果跟前面一样(其实啥也没新装肯定是这样了)。

再检查错误日志中提到的CMakeList.txt:

难道不是缺pybind11,而是缺_ms_mpi的包?是因为openmpi没装吗?

装一下试试:

wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz

tar -xvzf openmpi-4.0.3.tar.gz

cd openmpi-4.0.3

./configure

make -j12

sudo make install -j12

whereis openmpi

再次编译:

bash build.sh -e gpu -j12

BUG依旧在,几度夕阳红。

看了一下安装依赖:

貌似就剩下NCCL没装了。感觉安装这个是没用的。

(好像暂时搞不定了。。。在论坛提了问题,等节后专家来看一下是怎么回事再说吧。。)


(十八)安装JupyterLab

pip3 install jupyterlab  -i https://pypi.tuna.tsinghua.edu.cn/simple

...

报了个错,还是用--user安装吧。

python -m pip install --user jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple

 

...

(十九)上传CUDA on arm冬令营作业包

将 CUDA_冬令营.tar 上传到服务器,并解压:

张小白想了想,还是暂时不要用这张TF卡做作业了,还是回归到训练营提供的镜像来吧。

这几天因为在Jetson Nano B01(4G)上编译arm版MindSpore 1.6.0的事情耽误了不少时间,还是回归到Nano的正常CUDA的学习上来吧!

(未完待续)


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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