生命不息,折騰不止:Jetson Nano填坑之軟件篇

題圖:攝於武大凌波門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 文件,找到AutomaticLoginEnableAutomatic Login行,註釋掉:

sudo vi /etc/gdm3/custom.conf

# AutomaticLoginEnable=true
# Automatic Login=[user1]
複製代碼

沒法導入cv2模塊

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程序員絕對一把鼻涕一把淚。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
複製代碼

安裝tensorflow

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最大的樂趣就是折騰,能夠預料之後還會踩各類坑,不過相比軟件的坑,硬件的坑更大,畢竟那還要投入真金白銀,下一篇我將寫寫硬件上的坑,敬請關注。

image
相關文章
相關標籤/搜索