张小白树莓派4B踩坑记(一)

举报
张辉 发表于 2022/02/13 15:06:16 2022/02/13
【摘要】 记录在树莓派上的一次不成功的尝试。

(零)背景:

在张小白上次介绍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这块暂时也试验不下去了。张小白想想还有别的事儿要做,就暂停现在的尝试吧。

但愿下次能解决问题。

(未完待续)

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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