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)