本篇文章会介绍jetson nano系统的安装及简单测试,本文结束后完整的系统就搭好了。
文章较长,read用时较长,有硬件的小伙伴可同步实现使用,具体细节灵活应用,不必完全按照本文。
所写内容全部原创,经过实测,参考请添加引用说明。
先让大家看看长啥样,各位观众!!!
建议从某东或某宝购买时带个Micro usb电源和64G的 SD卡,供电稳定,存储够用。
一、在你启动NVIDIA Jetson Nano前,你需要做三件事:
二、下载 并flash .img 文件到你的micro-SD 卡里
2、下载的文件是
3、解压前有5G(解压后10多个G,所以推荐64G卡), 系统是Ubuntu18.04LTS,就用官方推荐的Etcher来烧进去。
我是买了官方的SD卡的,所以这个卡是做好的,直接可用。但还是格式化后走了一遍(不怕累)
4、将SD卡放到nano卡槽中,连接好鼠标、键盘、网线和显示器就可以上电了。
上电后,一路安装,会有ubuntu的一些设置,比如时区,键盘,用户名啥的,系统我选中国,会有中文输入法(下载很久,等不及了直接跳过,所以拼音不能用)。
5. 完成后的效果
包括四个方面的内容
4.1. 增加交换空间大小
4.2. ssh远程连jetson nano
4.3. 安装系统所需的包,配置python环境
4.4. 安装jetson inference engine
这一步是必须的,显存个内存是共享受的,物理内存只有4G,所以个人感觉加上好一些。Swap交换空间是在硬盘上,当物理内存RAM用完时,会开始使用。交换空间可以采用专用交换分区或交换文件的形式。在大多数情况下,不存在交换分区,因此唯一的选择是创建交换文件。创建教程参考1和参考2该链接,将添加swap file到ubuntu 18.04系统上。
sudo swapon --show
free -h
sudo fallocate -l 2G /swapfile
如果fallocate没有安装,将得到fallocate failed:Operation not supported的报错信息。可以用以下命令创建:
sudo dd if=/dev/zero of=/swapfile bs=2048 count=1048576
b. 所有用户都可以读写swap file,设置正确的权限:
sudo chmod 666 /swapfile
c. 设置交换空间
sudo mkswap /swapfile
d. 激活交换空间
sudo swapon /swapfile
#为了使这个激活永久有效
sudo vi /etc/fstab
#粘贴 /swapfile swap swap defaults 0 0
sudo swapon --show
sudo free -h
有显示器,但还是要用ssh ,有两个好处
查看用户名使用命令:
whoami
查看ip地址用:
ifconfig
连接时还可以打开cmd,输入:
ssh username@ip
会要输入密码的
有两种供电方式,10W和5W。
#查看当前是那个模式
sudo nvpmodel -q
#将当前模式切换到5W模式,将会自动关掉两个cpu,只使用cpu1,2
sudo nvpmodel -m 1
两种模式,0 是高功率10w,1是低功率5w,默认状态是高功率。安装时,切换到最大功率,因为安装时会用到许多外设,耗电量大,在执行完功率状态切换后往往还要加一行:
sudo nvpmodel -m 0
sudo jetson_clocks
jetson_clocks
将会使cpu频率固定。另外nano有两种供电方式,一种是5V 2.5A(10W)的microUSB供电;但如果你要有很多外设在(键盘、鼠标、wifi、显示器)在使用,最好用5V 4A(20W)的供电方式,来保证nano的正常工作。
移除LibreOffice会为系统省很多空间,这个软件对做深度学习和计算机视觉算法也没有太多用
sudo apt-get purge libreoffice*
sudo apt-get clean
接着,更新系统:
sudo apt-get update && sudo apt-get upgrade
本节将配置系统所需的包
sudo apt-get install git cmake
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo apt-get install python3-dev
sudo apt-get install nano locate
联网成功,网速顺利的话,将花费几分钟(可以改安装源,请自行百度)。
接着安装scipy的依赖和系统级别的cython:
sudo apt-get install libfreetype6-dev python3-setuptools
sudo apt-get install protobuf-compiler libprotobuf-dev openssl
sudo apt-get install libssl-dev libcurl4-openssl-dev
sudo apt-get install cython3
如果要装TensorFlow Object Detection (TFOD) API ,还要装xml的工具:
sudo apt-get install libxml2-dev libxslt1-dev
更新cmake,能帮助正确从源码来编译安装opencv(尽管nano装完后自带opencv):
wget http://www.cmake.org/files/v3.13/cmake-3.13.0.tar.gz #下载,版本号可到官网上查
tar xpvf cmake-3.13.0.tar.gz cmake-3.13.0/ #解压
cd cmake-3.13.0/
./bootstrap --system-curl
make -j4 #编译
echo 'export PATH=~/cmake-3.13.0/bin/:$PATH' >> ~/.bashrc
source ~/.bashrc #更新.bashrc
这样就更新完cmake.
先安装pip,python的包管理工具,(如果有pip,这一步可以不执行)
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
rm get-pip.py
下文中将使用pip来安装python的一些包,对于一些网络不好的情况,建议先改变pip的安装源到国内:
#如清华的源
https://pypi.tuna.tsinghua.edu.cn/simple
#豆瓣源
https://pypi.doubanio.com/simple
#临时改源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
#持久的设为默认源
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#如果您到 pip 默认源的网络连接较差,临时使用镜像站来升级 pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
我们将使用python的虚拟环境,来保证你使用的环境互相独立。
使用virtualenv和virtualenvwrapper,(之前尝试过anaconda,由于各种包编译的问题 ,安装过程不是很顺利,为了快速使用,没有去做过深研究),安装命令:
pip install virtualenv virtualenvwrapper
安装完之后,需要更新.bashrc
vim ~/.bashrc
在文件底部输入
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs #指定所有的需拟环境的安装位置
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #指定解释器
source /usr/local/bin/virtualenvwrapper.sh#进行激活生效
保存并退出,使用source 重新载入
source ~/.bashrc
接着创建python的虚拟环境,
mkvirtualenv nano -p python3 #-p 是指定解释器是python3
创建后直接进入了。
我的名字是nano,你可以自己定义。
一些virtualenvwrapper的常用命令:
#创建一个环境
mkvirtualenv name #在~/.virtualenvs下安装name的需拟环境
#激活工作环境
workon name
#workon后不加任何东西可以列出所有虚拟环境
#退出当前虚拟环境
deactivate
#删除虚拟环境,需先退出
rmvirtualenv name
#列出所有虚拟环境
lsvirtualenv
Jetson Nano中有个工具jtop, 可以同时查看CPU和GPU资源以及温度,另外就是可以把你当前的library show出来
sudo pip install --upgrade pip
sudo -H pip install jetson-stats
sudo jtop
选1ALL的内容
2GPU的内容
3CTRL的内容
4INFO的内容
按q退出。
下图为低功耗下的图:
进入虚拟环境
workon nano
安装numpy
pip install numpy ##这个版本会在后边有可能有报错,是版本不匹配的原因,继续看本文后续内容
因为需要编译,大约需要花20多分钟
接着安装tensorflow,不要使用pip install tensorflow-gpu,因为NVIDIA提供了官方的版本(官方会逐渐更新,安装合适自己的就可以),安装时会把必须的包都安装上,整个过程比较耗时,网络原因需多次尝试,当前对tensorflow2.x版本可能还不是很好,这个希望大家自己试试,1.14中也加入了tf.keras功能,还稳定可用。
pip install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.14.0+nv19.7
有个报错:
在h5py的地方会花费很长时间,建意单独安装。而且会有一个包的安装报错(也可能是国内网不好或其它原因),单独安装。
接着再次安装tensorflow,耗时很长,大约40分钟:
接着安装其它包,每个包都很耗时,耐心等待,若不成功,多次尝试,考虑到安装太慢,可以多开几个shell来实现(keras还有scikit-learn jupyter-notebook是需要先安装scipy的,所以可以先安装其它的):
pip install scipy
pip install keras
pip install sklearn #scikit-learn
pip install pillow
pip install matplotlib
pip install jupyter #jupyter notebook
pillow安装几分钟
scipy安装了一个多小时
接着安装keras用了几分钟:
接着安装sklearn,报错,定位到少包:
不报错就不用下面的命令来安装
pip install Cython
大约安装用了20分钟
jupyter 大约10分钟
安装matplotlib会报错:
看起来是字体的问题,通过以下命令实现:
sudo apt-get install libfreetype6-dev
大约3分钟完成所有安装
如果个人还有什么么需要的包,可以自己用pip来安装就可以
python -c 'import numpy; print(numpy.__version__)'
python -c 'import jupyter; print(jupyter.__version__)'
python -c 'import PIL; print(PIL.__version__)'
python -c 'import matplotlib; print(matplotlib.__version__)'
python -c 'import tensorflow; print(tensorflow.__version__)'
python -c 'import keras; print(keras.__version__)'
其它都没有问题,只有tensorflow会报错,同时以tensorflow为backend的keras报同样错:
查询后发现,是numpy版本太高原因(当前1.17)
所以
pip install numpy==1.16
又一个20分钟过去了。。。。
安装成功,大功告成
再次测试,全部通过。
Jetson nano .img 已经在jetpack 安装(JetPack,cuda,cudnn,opencv这些都安装了),所以直接来到构建jetson推理engine位置。
git clone https://github.com/dusty-nv/jetson-inference
cd jetson-inference
git submodule update --init
mkdir build
cd build
cmake ..
在执行cmake过程中要下载几个G的数据,有各种模型(所以要用64G 的SD卡),但是网络原因,都没有下载下来,所以个人建意全部跳过(能上外网的除外)
直接quit 后期单独处理
当然也是直接quit了。
make
sudo make install
make
sudo make install
也要可以看来jetson包安装到/usr/lib/python3.6/dist-packages下边
单独下载模型及pytorch可以参见说明1和说明2,但上不了外网是下载不下来的。
cd jetson-inference/tools
./download-models.sh
./install-pytorch.sh
对于下载模型部分,解决方法是,参见说明:
(1)安装git和cmake, 并检出库到本地:
sudo apt-get install git cmake
git clone https://github.com/dusty-nv/jetson-inference
(2)更新submodule
cd jetson-inference
git submodule update --init
(3)切换到国内镜像:
sed -in-place -e ‘s@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g’ CMakePreBuild.sh
(修改文件目录:jetson-inference/CMakePreBuild.sh)
文件里面:https://nvidia.box.com/shared/static 替换成:https://bbs.gpuworld.cn/mirror
也可以替换成https://github.com/dusty-nv/jetson-inference/releases
make install 之后也可以单独打开https://github.com/dusty-nv/jetson-inference/releases
从上边直接下载想要使用的模型下载到path/jetson-inference/data/networks,然后:
cd <jetson-inference>/data/networks/
tar -zxvf <model-archive-name>.tar.gz
对于pytorch 的下载没有办法,放到网盘下载需要的进行安装就可以。
里边还有一个anaconda for aarch64 archiconda的版本,可以结合pip和conda来安装相关python包,有兴趣的可以试一下。
以下是说明文档中的内容,我们照着实现。
验证
大概十几分钟安装完成
安装 torchvision
sudo apt-get install libjpeg-dev zlib1g-dev
git clone -b v0.3.0 https://github.com/pytorch/vision torchvision
cd torchvision
python setup.py install #在虚拟环境中安装,不需要sudo
cd ../ # attempting to load torchvision from build dir will result in import error
import torch
print(torch.__version__)
print(touch.cuda.is_available())
import torchvision
print(torchvision.__version__)
以上部分完成所有必备安装,还需要的几个小修正如下:
默认环境是可以导入这些包的,但是使用virtualenv会失败,这里主要针对这个使可以import cv2成功,也可以使用import jetson(/home/jetnano/jetson-inference/python/examples下有python的example,都会导入jetson)
不配置的状态下:
会报ModuleNotFoundError: No module named 'cv2’以及ModuleNotFoundError: No module named 'jetson’的错。
以下为修正方式,从而将openvc 和jetson与virtualenv联接:
先找到opencv和jetson的位置,有两种方法;
sudo find / -name jetson
sudo find / -name jetson*
sudo find / -name cv2
sudo find / -name cv2*
加*还是不加这个就是试的,如图所示:
找到jetson路径是:/usr/lib/python3.6/dist-packages/jetson,opencv的路径是:/usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so,(这个名字可以看出这是支持cuda的)同理,tensorrt路径是:/usr/lib/python3.6/dist-packages/tensorrt
另外一种找路径的方法是:在非虚拟环境下,直接导入cv2和jetson成功,打印出此时python的环境变量
所以这两个包必然在这些环境变量中的一个,接着打开别一个shell,进入虚拟环境,逐个把系统python的环境变量加入并导入库做尝试:
import sys
print(sys.path)
paths = ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
for p in paths:
try:
sys.path.append(p)
import sys
print(p)
except:
pass
同理,找jetson的路径.
所以找到环境变量地址是同一个:/usr/lib/python3.6/dist-packages
** 接着添加环境变量到虚拟环境**
在以后执行的过程中,都要加入以下代码:
import sys
sys.path.append('/usr/lib/python3.6/dist-packages')
或者借助virtualenvwrapper的功能:
add2virtualenv /usr/lib/python3.6/dist-packages
lssitepackages
可以看到,sys.path里多了我们添加的内容
可以通过以下命令删除
rm ~/.virtualenvs/nano/lib/python3.6/site-packages/_virtualenv_path_extensions.pth
lssitepackages
cd ~/.virtualenvs/nano/lib/python3.6/site-packages/
ln -s /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so
ln -s /usr/lib/python3.6/dist-packages/jetson
ls -l
rm -rf #软链地址
填加PYTHONPATH可以被sys.path找到,
在虚拟环境bin/activate文档末尾添加 export PYTHONPATH="/the/path/you/want"
vi ~/.virtualenvs/nano/bin/activate
export PYTHONPATH=/usr/lib/python3.6/dist-packages:$PYTHONPATH
最后不用可以把这一行注释掉
最后,查看一下/usr/lib/python3.6/dist-packages下边都有什么库:
后期还要用tensorrt,uff这一类的,所以综上所述,我们选择方法二(我的选择)或方法四
pycuda会在使用tensorrt的python api时用到
填加PATH到.bashrc,具体路径,看自己cuda版本,具体写适合自己的
vi ~/.bashrc
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_ROOT=/usr/local/cuda
source ~/.bashrc
然后安装pycuda
pip insatll pycuda
大约用时10分钟
到此,Jetson nano的配置就讲完了,关于应用,会写一系列的应用项目.
本文系原创,如有引用,请注明标注出处。
文中所有链接部分都是引用参考内容及出处,一并致谢,些处不再过多罗列.如有侵权,请联系本人.
[1] https://www.pyimagesearch.com/2019/05/06/getting-started-with-the-nvidia-jetson-nano/
[2] https://medium.com/@jackycsie/jetson-nano-9d89cbf2fc18
[3] https://chtseng.wordpress.com/2019/05/01/nvida-jetson-nano-%E5%88%9D%E9%AB%94%E9%A9%97%EF%BC%9A%E5%AE%89%E8%A3%9D%E8%88%87%E6%B8%AC%E8%A9%A6/
[4] https://www.dlology.com/blog/how-to-run-keras-model-on-jetson-nano/
[5] https://thenewstack.io/tutorial-configure-nvidia-jetson-nano-as-an-ai-testbed/
[6] https://stackoverflow.com/questions/4757178/how-do-you-set-your-pythonpath-in-an-already-created-virtualenv/17963979
[7] https://www.pyimagesearch.com/2020/03/25/how-to-configure-your-nvidia-jetson-nano-for-computer-vision-and-deep-learning/