Nvidia Jetson Nano B01初体验(二)

前情回顾:
Nvidia Jetson Nano B01初体验(一) https://bbs.huaweicloud.com/blogs/330158
(十三)安装Keras
sudo pip3 install keras

验证:

报错了,改为import tensorflow.keras就好了:

(十四)使用Keras训练LeNet网络
参考:https://blog.csdn.net/mr_muli/article/details/80992600
由于上面的原因,将代码修改如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 10 20:04:03 2018
@author: muli
"""
import tensorflow.keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras import backend as K
num_classes = 10
img_rows, img_cols = 28, 28
# 通过Keras封装好的API加载MNIST数据。其中trainX就是一个60000 * 28 * 28的数组,
# trainY是每一张图片对应的数字。
(trainX, trainY), (testX, testY) = mnist.load_data()
# 根据对图像编码的格式要求来设置输入层的格式。
if K.image_data_format() == 'channels_first':
trainX = trainX.reshape(trainX.shape[0], 1, img_rows, img_cols)
testX = testX.reshape(testX.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
trainX = trainX.reshape(trainX.shape[0], img_rows, img_cols, 1)
testX = testX.reshape(testX.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
trainX = trainX.astype('float32')
testX = testX.astype('float32')
trainX /= 255.0
testX /= 255.0
# 将标准答案转化为需要的格式(one-hot编码)。
trainY = tensorflow.keras.utils.to_categorical(trainY, num_classes)
testY = tensorflow.keras.utils.to_categorical(testY, num_classes)
# 2. 通过Keras的API定义卷积神经网络
# 使用Keras API定义模型。
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(500, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
# 定义损失函数、优化函数和评测方法。
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
optimizer=tensorflow.keras.optimizers.SGD(),
metrics=['accuracy'])
# 3. 通过Keras的API训练模型并计算在测试数据上的准确率
model.fit(trainX, trainY,
batch_size=128,
epochs=10,
validation_data=(testX, testY))
# 在测试数据上计算准确率。
score = model.evaluate(testX, testY)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
开始执行:

。。。

开始训练了,一开始loss是1.98左右,

经过了几轮训练,准确率提高到了0.9808,loss降低到了0.0626左右。
(十五)安装jtop
sudo pip3 install jetson-stats

jtop会显示nano的使用情况:

当跑Keras LeNet案例时,jtop显示如下:

说明训练过程是用到了Nano的GPU的。
(十六)探索:安装昇思
尽管MindSpore没有CUDA10.2的aarch64版本。

只有aarch的CPU版本:

Python的版本也只有3.6.9。但是作为昇思开发者的张小白,仍然想在Nano的CPU上跑一下MindSpore试试。
于是,张小白心想:应该先装anaconda for aarch64,这样才能让Nano上有Python3.7.5。
打开 https://www.anaconda.com/products/individual

复制ARM64的安装链接:
wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-aarch64.sh

./Anaconda3-2021.11-Linux-aarch64.sh

按回车继续:

输入yes,回车:

按回车继续:

好像不行,core dump了。
含泪删除:rm -rf ~/anaconda3
打开 https://docs.conda.io/en/latest/miniconda.html#linux-installers

复制下链接:
wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-aarch64.sh

bash ./Miniconda3-py37_4.10.3-Linux-aarch64.sh




好像是一样的coredump,看来conda是不行了。
再次含泪删除:rm -rf ~/miniconda3。
再试下 pyenv和virtualenv吧,原理上:使用 pyenv 可以安装任何版本的 Python,用 virtualenv 创建虚拟环境时指定需要的 Python 版本路径,这样就可以创建任何版本的虚拟环境。
sudo -H pip3 install virtualenv virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple/


mkdir ~/.virtualenvs
vi ~/.bashrc

source ~/.bashrc

安装pyenv
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

在~/.bashrc加入以下内容:

source ~/.bashrc 使其生效
查看Python可用版本:
pyenv install --list


。。。

貌似有非常多。
用pyenv装个python3.7.5试试:
pyenv install 3.7.5

感觉下载要蛮长的时间,耐心等待吧。

报缺少ssl库。
sudo apt-get install openssl libssl-dev

按Y继续:

再来一遍:
pyenv install 3.7.5

可以到 /home/zhanghui/.pyenv/versions/3.7.5 目录下看到Python的版本:

刷新pyenv并查看现在的版本:
pyenv rehash
pyenv versions

创建Python 3.7.5的mindspore运行环境(命名为mindspore-py375):
virtualenv -p ~/.pyenv/versions/3.7.5/bin/python mindspore-py375

它会在当前目录下建一个mindspore-py375目录:

source ~/mindspore-py375/bin/activate

这就切换到了Python 3.7.5的环境。
安装mindspore cpu(aarch64) 1.6.0版本:
pip3 install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/aarch64/mindspore-1.6.0-cp37-cp37m-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

报错了。
先安装gmp6.1.2
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

升级下pip试试:
python -m pip install --upgrade pip

去掉清华源试试:
pip3 install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/aarch64/mindspore-1.6.0-cp37-cp37m-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com

安装速度要慢一点,耐心等待吧。

pip3 install --upgrade setuptools

pip3 install pip==21.3.1

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl

..

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
./bootstrap

...

make -j8

...

sudo make install -j8

cmake --version

发现 /usr/bin和/usr/local/bin下都有cmake。
将/usr/bin下的cmake改名,重试:

pip3 install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/aarch64/mindspore-1.6.0-cp37-cp37m-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

好像还是不行。
要不还是换成Python 3.9.0再试一次
退出mindspore-py375环境
deactivate

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

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


这个居然安装成功了!
做个测试看看:
python -c "import mindspore;mindspore.run_check()"

好了,其实CPU也没啥意义。只是张小白不服输而已。要是GPU+aarch64版本能用才是真的有用。
就此别过!
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)