題圖:攝於武大凌波門python
做爲一名天天對着各類裸板的系統工程師,對Jetson Nano會踩到各類坑是作好了充分準備的,本着踩坑填坑的精神,在這裏記錄一下踩坑經歷,供你們一樂。如何避開這些坑?想多了,由於之後大家即便繞開了這些坑,也會有其它的坑等着你:) 重要的是要作到人擋殺人、佛擋殺佛,遇到坑直接趟過去。linux
使用apt-get install命令安裝軟件包,遇到以下提示:程序員
alex@alex-jetson-nano:~$ sudo apt-get install xrdp
[sudo] password for alex:
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
複製代碼
重啓後什麼操做也不作,安裝軟件包,提示依舊。redis
填坑指南:bash
首先查看一下是否有apt進程在工做:架構
alex@alex-jetson-nano:~$ ps aux | grep -i apt
root 6569 0.0 0.0 1912 496 ? Ss 10:37 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
root 6582 0.0 0.0 1912 1272 ? S 10:37 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
_apt 7736 5.4 0.1 19552 8036 ? S 10:41 0:20 /usr/lib/apt/methods/http
alex 7883 0.0 0.0 7416 640 pts/0 R+ 10:47 0:00 grep --color=auto -i apt
複製代碼
能夠看到系統在作每日檢查更新,解決的方法很簡單,關閉每日更新檢查:app
System Settings | Software & Updates,在Updates頁,Automatically check for updates,選擇Neverfrontend
沒有爲Jetson Nano單獨配顯示器,和開發機共用,但二者都是用的HDMI接口,這樣每次切換顯示都必須插拔HDMI線,非常麻煩,這個時候就須要遠程鏈接。工具
有兩種使用遠程登陸Jetson Nano的方法,一種是經過SSH協議登陸,這種方法時延小,佔用資源少,但只支持命令行。另外一種就是經過RDP(Remote Desktop Protocol)協議,支持GUI,熟悉Windows的朋友可能知道Windows支持遠程登陸,在Ubuntu系統上,也能達到一樣的效果。性能
Jetson Nano採用的是Ubuntu桌面系統,要支持遠程桌面協議很簡單:
sudo apt-get update
sudo apt-get install xrdp
複製代碼
然而在個人開發機上使用Remmina Remote Desktop Client軟件,配置好各類參數進行鏈接,老是一閃而過,退出應用。開始懷疑是Remmina Remote Desktop Client兼容性存在問題,後來換Windows下的遠程登陸,依然如此。查看$HOME/.xorgxrdp.10.log日誌,能夠看到Server端主動退出。
填坑指南:
和普通Ubuntu桌面系統不一樣的是,Jetson Nano並不支持兩個客戶端同時登陸。安裝時爲了省事,選擇了自動登陸系統,這樣每次Jetson Nano每次啓動,就會有一個用戶登陸進去,這個時候我再遠程登陸就會被拒絕。解決方法是,編輯 /etc/gdm3/custom.conf 文件,找到AutomaticLoginEnable和Automatic Login行,註釋掉:
sudo vi /etc/gdm3/custom.conf
# AutomaticLoginEnable=true
# Automatic Login=[user1]
複製代碼
Jetson Nano系統默認python爲2.7版本,然而安裝tensorflow-gpu卻須要Python3,在Python3下導入opencv模塊,出現以下錯誤:
(tensorflow-gpu) alex@alex-jetson-nano:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
>>>
複製代碼
使用默認的2.7版本python,則無此問題。
填坑指南:
系統默認爲python 2.7安裝了opencv模塊,但python3沒有,須要本身安裝:
sudo apt-get install python3-opencv
複製代碼
這樣安裝到系統python3的環境中,若是你使用了python虛擬環境,而建立虛擬環境時沒有添加 --system-site-package 參數,在虛擬環境中依然會有問題,解決方法,刪除掉虛擬環境中的no-global-site-packages.txt文件。假如虛擬環境名爲tensorflow-gpu,命令以下:
rm ~/.virtualenvs/tensorflow-gpu/lib/python3.6/no-global-site-packages.txt
複製代碼
要說到python的版本問題,python程序員絕對一把鼻涕一把淚。python 2和python 3之間不兼容的問題由來已久,到目前,python 3也沒有把python 2幹掉,二者尷尬的共存着。除了python自己,python第三方軟件包的版本問題也是讓人頭大。好在咱們能夠藉助python虛擬環境來解決這一問題。python虛擬環境和虛擬機不一樣,僅僅是作一個環境隔離,徹底不存在性能損失,很是適用於python 程序。在開發機上,我使用的是anaconda包,然而,anaconda的linux版本只出了x86 32位和64位架構的包,並無arm64的包。無奈之下,我只能選擇python的virtualenv工具。
填坑指南:
virtualenv自己就已經夠用,不過爲了方便管理,我仍是使用了一個wrapper,這實際上就是用腳本在virtualenv上封裝了一層,方便使用:
sudo apt-get install virtualenvwrapper
複製代碼
爲了方便使用這些腳本,我在 $HOME/.profile 文件中添加了一行:
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
複製代碼
建立虛擬名爲tensorflow-gpu的虛擬環境:
mkvirtualenv -p /usr/bin/python3 --system-site-package tensorflow-gpu
複製代碼
激活虛擬環境
workon tensorflow-gpu
複製代碼
退出虛擬環境
deactivate
複製代碼
Jetson Nano出廠系統並無自帶TensorFlow環境,早先甚至連官方支持都沒有,因此網上有不少安裝Tensorflow的指南,及其複雜,好在Nvidia意識到了這個問題,給出了官方支持。
填坑指南:
安裝依賴包:
sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo apt-get install python3-pip
pip3 install -U pip
sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev
sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor
複製代碼
注意有些步驟特別慢,以致於我覺得安裝包被牆了,重試了幾回仍然這樣,後來才弄清楚有些包是須要即時編譯的,因此會比較慢,須要耐心等待。
而後安裝最新的tensorflow-gpu:
pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu
複製代碼
若是要安裝指定版本:
pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==$TF_VERSION+nv$NV_VERSION
複製代碼
其中,TF_VERSION是TensorFlow的發佈版本,好比1.12.0。NV_VERSION爲Tensorflow的NVIDIA容器版本,好比19.01。
在使用Jetson Nano中,還碰到不少稀奇古怪的問題,這裏無法一一寫出,解決問題主要靠Google,固然Nvidia開發者論壇的Nano版塊也值得去看一看,其地址爲:devtalk.nvidia.com/default/boa… 在上面我試着用蹩腳的英文向其餘開發者提問,收到了很多回應。
生命不息,折騰不止,其實Jetson nano最大的樂趣就是折騰,能夠預料之後還會踩各類坑,不過相比軟件的坑,硬件的坑更大,畢竟那還要投入真金白銀,下一篇我將寫寫硬件上的坑,敬請關注。