前言
JetsonNano是Nvidia的一个嵌入式开发板,具备Maxwell128核心的GPU和4核心 ARM A57的CPU,可运行Ubuntu(Linux for Tegra,L4T),浮点运算能力为472GFLOPS(FP16),官方给出的功率为10W。
JetsonNano可以用来搞些机器学习相关内容。
- JetsonNano平台只支持Python3.6的TensorFlow。
- JetsonNano镜像版本:JetPack4.4
- TensroFlow API版本:r2.1.0
以上信息为当前时间更新。
关于Jetson Nano Developer Kit
硬件 | 配置 |
---|---|
GPU | NVIDIA Maxwell™ 架构,配备 128 个 NVIDIA CUDA® 核心 |
CPU | 四核 ARM® Cortex®-A57 MPCore 处理器 |
内存 | 4 GB 64 位 LPDDR4 |
存储 | Micro SD 卡卡槽(需要另购16G以上SD卡接入) |
- Micro SD 卡卡槽: 可接入TF卡(16G以上),烧写系统镜像
- 40PIN GPIO扩展接口(兼容树莓派40PIN接口)
- Micro USB接口:用于5V电源输入或者USB数据传输
- 千兆以太网口: 10/100/1000Base-T 自适应以太网端口
- USB3.0接口:4个USB3.0接口
- HDMI高清接口:用于外接HDMI屏幕
- DisplayPort接口:用于外接DP屏幕
- DC电源接口:用于外接5V电源(外径5.5, 内径2.1)
- MIPS CSI 摄像头接口:兼容树莓派摄像头接口
烧写镜像
推荐使用Etcher烧写
镜像很大,有14G,烧写很慢,但安装系统很快。
系统版本为 Ubuntu 18.04.4 LTS (GNU/Linux 4.9.140-tegra aarch64)
安装tensorflow
安装方法为官方给出
安装版本为 Python 3.6 + JetPack4.4
1 | $ sudo apt-get update |
安装h5py会出错,尝试重启单独安装,这个有点玄学,我重刷了两次,单独安装才安装成功
1 | $ sudo pip3 install -U pip testresources setuptools numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11 |
接下来是漫长的等待
1 | # TF-2.x |
1 | Successfully installed absl-py-0.9 astunparse-1.6 cachetools-4.1 gast-0.3 google-auth-1.19 google-auth-oauthlib-0.4 google-pasta-0.2 grpcio-1.30 h5py-2.10 importlib-metadata-1.7 keras-preprocessing-1.1 markdown-3.2 oauthlib-3.1 opt-einsum-3.2 pyasn1-0.4 pyasn1-modules-0.2 requests-2.24 requests-oauthlib-1.3 rsa-4.6 scipy-1.4 six-1.15 tensorboard-2.2 tensorboard-plugin-wit-1.7 tensorflow-2.2 +nv20 tensorflow-estimator-2.2 termcolor-1.1 werkzeug-1.0 wrapt-1.12 zipp-3.1 |
安装jupyter
能否安装成功也有一定的玄学,遇到的问题有,pyzmq编译出错,远程登录无法识别密码。
1 | 安装nodejs |
修改jupyter_notebook_config.py的配置,添加以下内容
1 | c.NotebookApp.ip = '*' # 就是设置所有ip皆可访问 |
启动1
$ jupyter-lab
安装openCV
自带opencv,存在一个bug,如果先导入tensorflow会出错,但先导入cv2,再导入tensorflow则没有错误。
1 | >>> import tensorflow |
测试Tensorflow
首先导入tensorflow1
import tensorflow as tf
看下版本1
tf.__version__
'2.2.0'
载入并准备好 MNIST数据集。将样本从整数转换为浮点数:
1 | mnist = tf.keras.datasets.mnist |
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
用tf.keras.Sequential构建一个模型。
为模型选择优化器和损失函数:
1 | model = tf.keras.models.Sequential([ |
开始训练
1 | model.fit(x_train, y_train, epochs=5) |
Epoch 1/5
1875/1875 [==============================] - 26s 14ms/step - loss: 0.2933 - accuracy: 0.9154
Epoch 2/5
1875/1875 [==============================] - 26s 14ms/step - loss: 0.1426 - accuracy: 0.9577
Epoch 3/5
1875/1875 [==============================] - 26s 14ms/step - loss: 0.1062 - accuracy: 0.9676
Epoch 4/5
1875/1875 [==============================] - 26s 14ms/step - loss: 0.0870 - accuracy: 0.9731
Epoch 5/5
1875/1875 [==============================] - 25s 14ms/step - loss: 0.0734 - accuracy: 0.9771
<tensorflow.python.keras.callbacks.History at 0x7f4c402710>
速度不是太慢,最后看下准确度
1 | model.evaluate(x_test, y_test, verbose=2) |
313/313 - 2s - loss: 0.0704 - accuracy: 0.9803
[0.07044795155525208, 0.9803000092506409]
98%的准确度 jetson nano 完美运行tensorflow2
坑
我想通过ssh远程运行图形程序,如何尝试都不行,直到在NVIDIA Metropolis Documentation发现了这句话。
ReleaseNotes 2.0 LIMITATIONS
1 | On Jetson, running a DeepStream application over SSH (via putty) with X11 forwarding |
总结
这个东西还是存在着许多bug,系统也不是非常稳定,开发也很麻烦,如果是想玩玩还是推荐树莓派。