張小白樹莓派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.com/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這塊暫時也試驗不下去了。張小白想想還有別的事兒要做,就暫停現在的嘗試吧。
但愿下次能解決問題。
(未完待續)
Keras Linux 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。