张小白树莓派4B踩坑记(一)
(零)背景:
在张小白上次介绍Jetson Nano B01的系列文章中,张小白本想尝试在CUDA+aarch64下完成MindSpore GPU版本的源码编译,但是编译到98%的时候卡住了:
张小白初步分析是GPU版本需要更多的内存和算力,但是Jetson Nano不具备。。。
于是,张小白拿出自己前阵子买的 树莓派4B(旁白:这转折得有点快。。。)
是的,你没看错,就是双十二买的,这只是一种仪(DUO)式(SHOU)的副产品。这其实是张小白想玩机械臂的主板之一。前面介绍的Jetson Nano也可以玩机械臂。
但是光有主板是无法开机的。还需要有:摄像头、亚克力支架、Type-C电源等等。
所以最后成型就是这样的:
其中,散热风扇的电源需要接最后一排的倒数第二个(红针)和第三个针头(黑针)。
其中type-C电源按上图所示接上,但是因为张小白没有买 MicroHDMI-HDMI转接线,所以没法通过外接显示器查看系统,而只能通过网线把有线网卡接到路由器上,
(上图最右边的网口),到路由器上查到树莓派的IP地址:
然后通过MobaXterm(ssh)和VNC viewer远程登录。
(一)制卡
当然,首先还是老样子,拿出一张32G的TF卡,进行系统烧录。
其实是可以使用跟Nano同样的烧录软件:balenaEtcher,但是张小白还是用卖家推荐的SDFormatter和Win32DiskImager
这两个软件进行烧录。前一个是进行磁盘的格式化,后一个是进行镜像的写入。
选择的镜像自然也是卖家推荐的新手镜像:
这个镜像包含了以下内容:
(1)Raspbian GNU/Linux 10 (buster) ARM系统
(2)JupyterLab(含Widgets插件)
(3)openCV 4.5
(4)TensorFlow 1.14(含Keras)
可以查看下python版本(2.7.16,3.7.3),tensorflow的版本:1.14.0
以及Keras的版本:2.2.4
查看openCV的版本:4.5
(二)使用Keras构建LeNet神经网络
然后将上次在Nano中试过的 Keras LeNet的案例(参见:Nvidia Jetson Nano B01初体验(二)https://bbs.huaweicloud.cn/blogs/330177)在树莓派上执行一遍:
。。
。。开始训练:
看来树莓派4B使用CPU训练LeNet如此简单的神经网络应该还是没问题的。
那么,MindSpore CPU能不能在树莓派4B上跑呢?要不也跟Nano安装MindSpore一样的方式,用CPU版本试一下?
这个树莓派系统Raspbian GNU/Linux 10出身于debian,很多命令跟ubuntu系统极其相似。
还是老样子,先装virualenv,然后再搭建Python 3.9.0环境,因为上次MindSpore CPU的版本就是Python 3.7.5不成功,Python 3.9.0成功了的。
(三)在Python 3.9.0环境下PIP安装MindSpore 1.6.0 CPU版的尝试
(1)安装vitualenv和virtualenvwrapper
sudo -H pip3 install virtualenv virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple/
mkdir ~/.virtualenvs
vi ~/.bashrc加入以下内容:
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
(2)安装pyenv
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
如果github连不上则使用下面的命令:
git clone https://gitee.com/ntshibin/pyenv ~/.pyenv
在~/.bashrc加入以下内容:
export PATH=~/.pyenv/bin:$PATH
export PYENV_ROOT=~/.pyenv
eval "$(pyenv init -)"
source ~/.bashrc
查看python可安装的版本:
这里需要安装openssl的库,否则安装python时会报错:
sudo apt-get install openssl libssl-dev
好像装过了。
(3)安装cmake 3.18.5
检查cmake版本:
升级到3.18吧:
wget https://github.com/Kitware/CMake/releases/download/v3.18.5/cmake-3.18.5.tar.gz
tar -zxvf cmake-3.18.5.tar.gz
cd cmake-3.18.5
。。。
make -j8
。。。
sudo make install -j8
cmake --version
不要紧,这个是因为路径不对。
cd /usr/bin
sudo mv cmake cmake.old
sudo ln -s /usr/local/bin/cmake cmake
cmake --version
(4)使用pyenv安装Python 3.9.0
pyenv install 3.9.0
耐心等待下载和安装完毕。。
可是:
两次都没下载完毕。
那只有想办法先用windows下载下来,然后再传到树莓派上安装了。
cd ~/.pyenv
mkdir cache
cd cache
cp ~/Python-3.9.0.tar.xz .
cd
pyenv install 3.9.0
pyenv rehash
pyenv versions
virtualenv -p ~/.pyenv/versions/3.9.0/bin/python mindspore-py390
source ~/mindspore-py390/bin/activate
python -V
(5)安装MindSpore CPU版本
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/aarch64/mindspore-1.6.0-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
好像这个版本并不是支持树莓派的系统。。。
难道CPU版本也需要源码编译才行吗?
(四)在Python 3.9.0环境下源码安装MindSpore 1.6.0 CPU版的尝试
(1)安装gmp 6.12
wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz
xz -d gmp-6.1.2.tar.xz
tar -xvf gmp-6.1.2.tar
cd gmp-6.1.2
./configure
。。
make
sudo make install
(2)安装patch 2.5.4
wget http://ftp.gnu.org/gnu/patch/patch-2.5.4.tar.gz
tar zxvf patch-2.5.4.tar.gz
cd patch-2.5.4
./configure
make -j8
sudo make install -j8
patch --version
(3)安装flex 2.6.4
sudo apt-get install flex
按Y继续:
flex --version
(4)安装wheel 0.37.1
发现安装得不对又换了回来。。。
pip install wheel==0.32.0
pip install wheel==0.37.1
(5)安装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
cd openssl-OpenSSL_1_1_1g
./config --prefix=/usr/local/openssl
make -j8
sudo make install -j8
编辑 ~/.bashrc,追加一行:
export OPENSSL_ROOT_DIR=/usr/local/openssl
source ~/.bashrc 使其生效。
回到virtualenv环境:
source ~/mindspore-py390/bin/activate
(6)安装libnuma-dev 2.0.12
sudo apt-get install libnuma-dev
(7)源码编译Python 3.7.5
既然是源码编译,可能需要安装Python 3.7.5(尽管现有系统提供的是Python 3.7.3)
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
tar -xzvf Python-3.7.5.tgz
cd 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
修改 ~/.bashrc
将前面virtualenv环境的内容注释掉:
export PATH=/usr/local/python3.7.5/bin:$HOME/.local/bin:$PATH
source ~/.bashrc
python -V
python3 -V
奇怪,小版本怎么了?
到编译安装好的/usr/local/python3.7.5/bin目录下查看怎么也是3.7.3的版本?怪事。。。
python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"
python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))"
感觉有点没有道理可言。
(8)安装一些依赖
sudo apt-get install -y build-essential m4 libgmp-dev libmpfr-dev libmpc-dev
(9)源码编译 gcc7.3.0
然后根据上次的经验,gcc 7.5.0编译都不如gcc 7.3.0好,更何况目前用的是gcc 8.3.0
gcc --version
g++ --version
【1】下载gcc源码包
wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
tar -xvzf 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 apt -f install
sudo apt update
【2】安装gmp-5.0.1
是不是前面漏了isl没装所以报错的呢?所以我们按照以前编译gcc的方式,顺序按照gmp-5.0.1,mpfr-3.1.0,mpc-1.1.0,
wget http://www.multiprecision.org/downloads/mpc-1.1.0.tar.gz
wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2
wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.0.tar.xz
bzip2 -d gmp-5.0.1.tar.bz2
tar xvf gmp-5.0.1.tar
cd gmp-5.0.1
sudo apt-get install m4
./configure --prefix=/usr/local/gmp-5.0.1
make -j12
sudo make install -j12
【3】安装mpfr 3.1.0
xz -d mpfr-3.1.0.tar.xz
tar xvf mpfr-3.1.0.tar
cd mpfr-3.1.0
./configure --prefix=/usr/local/mpfr-3.1.0 --with-gmp=/usr/local/gmp-5.0.1
make -j12
sudo make install -j12
【4】安装mpc 1.1.0
gzip -d mpc-1.1.0.tar.gz
tar xvf mpc-1.1.0.tar
cd mpc-1.1.0
./configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0
make -j12
sudo make install -j12
在/etc/ld.so.conf添加以下行
/usr/local/gmp-5.0.1/lib
/usr/local/mpfr-3.1.0/lib
/usr/local/mpc-1.1.0/lib
sudo ldconfig
【5】安装isl-0.18
张小白到csdn下载了isl-0.18的安装包:
xz -d isl-0.18.tar.xz
tar xvf isl-0.18.tar
cd isl-0.18
./configure --prefix=/usr/local/isl-0.18 --with-gmp-prefix=/usr/local/gmp-5.0.1
make -j12
sudo make install -j12
编辑 ~/.bashrc,追加以下内容:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/isl-0.18/lib
source ~/.bashrc
【6】安装isl-0.16.1
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
bzip2 -d isl-0.16.1.tar.bz2
tar -xvf isl-0.16.1.tar
cd isl-0.16.1
./configure --prefix=/usr/local/isl-0.16.1 --with-gmp-prefix=/usr/local/gmp-5.0.1
make -j12
sudo make install -j12
【7】编译gcc 7.3.0(失败了!)
cd gcc-7.3.0
./configure --with-gmp=/usr/local/gmp-5.0.1 --with-mpc=/usr/local/mpc-1.1.0 --with-mpfr=/usr/local/mpfr-3.1.0 --disable-multilib
。。。
configure的时候仍然报没找到isl,真奇怪。
编译试试:
make -j12
好奇怪,度娘查这个错是因为gcc没有装multilib库,可是明明configure的时候disable了multilib的。。。
好了,感觉源码编译mindspore 1.6.0这块暂时也试验不下去了。张小白想想还有别的事儿要做,就暂停现在的尝试吧。
但愿下次能解决问题。
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)