文章目錄
本篇文章會介紹jetson nano系統的安裝及簡單測試,本文結束後完整的系統就搭好了。
文章較長,read用時較長,有硬件的小夥伴可同步實現使用,具體細節靈活應用,不必完全按照本文。
所寫內容全部原創,經過實測,參考請添加引用說明。
先讓大家看看長啥樣,各位觀衆!!!
1、外觀
簡簡單單來個6視圖。
2、 Jetson Nano的規格
建議從某東或某寶購買時帶個Micro usb電源和64G的 SD卡,供電穩定,存儲夠用。
3、Jetson Noao 激活
一、在你啓動NVIDIA Jetson Nano前,你需要做三件事:
- 一個 micro-SD card (最小16GB)
- 一個 5V 2.5A MicroUSB 電源
- 網線
二、下載 並flash .img 文件到你的micro-SD 卡里
-
1、 官方提供了三種方式format,分別用於windows,MAC,linux系統,我用的是windows。
-
2、下載的文件是
-
3、解壓前有5G(解壓後10多個G,所以推薦64G卡), 系統是Ubuntu18.04LTS,就用官方推薦的Etcher來燒進去。
我是買了官方的SD卡的,所以這個卡是做好的,直接可用。但還是格式化後走了一遍(不怕累) -
4、將SD卡放到nano卡槽中,連接好鼠標、鍵盤、網線和顯示器就可以上電了。
上電後,一路安裝,會有ubuntu的一些設置,比如時區,鍵盤,用戶名啥的,系統我選中國,會有中文輸入法(下載很久,等不及了直接跳過,所以拼音不能用)。
5. 完成後的效果
4、 安裝系統包和prerequisites
包括四個方面的內容
4.1. 增加交換空間大小
4.2. ssh遠程連jetson nano
4.3. 安裝系統所需的包,配置python環境
4.4. 安裝jetson inference engine
4.1增加交換空間大小
這一步是必須的,顯存個內存是共享受的,物理內存只有4G,所以個人感覺加上好一些。Swap交換空間是在硬盤上,當物理內存RAM用完時,會開始使用。交換空間可以採用專用交換分區或交換文件的形式。在大多數情況下,不存在交換分區,因此唯一的選擇是創建交換文件。創建教程參考1和參考2該鏈接,將添加swap file到ubuntu 18.04系統上。
- first,檢查當前系統的效換空間
sudo swapon --show
檢查內存
free -h
內存有4G,交換空間2G.
- second,增加2G交換空間
a. 創那用於swap的文件
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
e. 驗證增加空間是否有效
sudo swapon --show
sudo free -h
4.2 ssh遠程連接nano並設置最大功率
4.2.1 遠程連接nano
有顯示器,但還是要用ssh ,有兩個好處
- 可以降低因爲顯示而喫的GPU資源
- 電流不夠的風險可以降低
查看用戶名使用命令:
whoami
查看ip地址用:
ifconfig
連接時還可以打開cmd,輸入:
ssh username@ip
會要輸入密碼的
4.2.2 切換高低功率
有兩種供電方式,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的正常工作。
4.2.3 更新系統並移除無用軟件
移除LibreOffice會爲系統省很多空間,這個軟件對做深度學習和計算機視覺算法也沒有太多用
sudo apt-get purge libreoffice*
sudo apt-get clean
接着,更新系統:
sudo apt-get update && sudo apt-get upgrade
4.3 安裝系統所需的包:
本節將配置系統所需的包
4.3.1配置系統級的安裝包
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
4.3.2 更新CMake
更新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.
4.3.3 配置python環境
先安裝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
4.3.4 系統工具jtop和nvidia-smi的結合
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退出。
下圖爲低功耗下的圖:
4.3.5 安裝tensorflow,kears,scikit-learn等必須包
進入虛擬環境
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來安裝就可以
4.3.6安裝包是否生效測試
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分鐘過去了。。。。
安裝成功,大功告成
再次測試,全部通過。
5、 安裝jetson inference engine
5.1 inference engine的安裝
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下邊
5.2 模型下載和pytorch相關安裝
單獨下載模型及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
安裝十幾分鍾,完成。
cd … 後是這個樣的:
5.3 驗證pytorch 和torchvision
import torch
print(torch.__version__)
print(touch.cuda.is_available())
import torchvision
print(torchvision.__version__)
5.4 虛擬環境環境變量的改變
以上部分完成所有必備安裝,還需要的幾個小修正如下:
5.4.1 配置opencv, jetson,tensorrt
默認環境是可以導入這些包的,但是使用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的位置,有兩種方法;
- 方法一:find的方法
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
- 方法二:sys.path的方法
另外一種找路徑的方法是:在非虛擬環境下,直接導入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
** 接着添加環境變量到虛擬環境**
- 方法一:使用sys.append
在以後執行的過程中,都要加入以下代碼:
import sys
sys.path.append('/usr/lib/python3.6/dist-packages')
- 方法二:使用virtualenvwrapper的add2virtualenv
或者藉助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
填加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這一類的,所以綜上所述,我們選擇方法二(我的選擇)或方法四
5.4.2 pycuda安裝
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/