Nvidia Jetson Nano B01初体验(三)
前情回顾:
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的学习上来吧!
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)