在NVIDIA Jetson TX2上安裝TensorFlow

本文內容安排如下:

  • 刷機
  • 刷機完成后的操作
  • 安裝TensorFlow1.0.1
  • install TensorFlow v1.2.1

刷機

刷機的目的是把Ubuntu操作系統和JetPack SDK安裝到Jetson TX2上。刷機的操作按照官方教程即可,比較容易。這個過程中有一點需要注意:Jetson TX2和宿主機Host必須連接在同一個路由器之下。Host會先把操作系統刷到TX2上,這一步是通過數據線連接的方式完成,然后使用SSH的方式安裝Host上的SDK到TX2,所以Host和TX2需要連接在同一個路由器下,方便Host找到TX2的ip地址。

刷機開始的時候需要將TX2設置到RECOVRY MODE,設置方法在安裝過程中會給出提示,請仔細閱讀該提示即可完成操作。

另外一個問題是關于從網絡下載安裝文件到Host上過程中,因為我們公司網絡為內網環境,無法連接到網絡下載源,從而導致下載失敗。如果遇到這種情況,更換網絡環境就可以了。

刷機完成后的操作

這一部分主要是卸載Ubuntu里面一些不必要的軟件,騰出更多磁盤空間。具體請參照jetsonHacks的postFlashTX1。我只是卸載了Libre Office,因為在以后的開發過程中不會用到這些。

另外,上面的教程也提供了添加swap file的腳本。添加swap file是為了在硬盤上創建虛擬內存,給編譯像TensorFlow這種大型的項目提供足夠的內存。例如TX2的真實內存只有8G,編譯TF也需要至少8G的內存,所以有必要創建虛擬內存空間。

添加虛擬內存空間的操作,我直接參考了“How to install TensorFlow on the NVIDIA Jetson TX2?”中的Step 4:Create a Swap File,在磁盤上創建了8G的虛擬空間。
1. 創建8G大小的swapfile
fallocate -l 8G swapfile
2. 更改swapfile的權限
chmod 600 swapfile
3. 創建swap區
mkswap swapfile
4. 激活swap區
sudo swapon swapfile
5. 確認swap區在用
swapon -s
執行第五步,輸出中會有新建立的虛擬空間,否則確認是否正確執行了上面的命令。

創建虛擬內存空間成功

如果你沒有建立虛擬內存空間,可能在build TF的時候會遇到如下類似的錯誤,在報錯之前INFO的提示'Killed',正是由于內存不夠用導致的。
out of memory導致的錯誤

伴隨著這個錯誤的出現,系統還會有一些軟件崩潰的癥狀,例如瀏覽器打開的網頁全部崩潰。如果出現這種癥狀,你一定是忘記分配虛擬空間了。

安裝TensorFlow

對于普通的Ubuntu、Windows等系統,TensorFlow提供了簡單的pip方式,分為有GPU和無GPU版本,但是pip安裝方式存在一個問題,TensorFlow執行CPU計算的效率低,沒有優化,所以最好的安裝方式是重新編譯源碼。另外,TX2的CPU是ARM架構,混合NVIDIA自家的CPU,所以目前只能重新編譯、再安裝TensorFlow。安裝步驟直接按照TensorFlow on NVIDIA Jetson TX2 Development Kit即可。

如果你參考了How to install TensorFlow on the NVIDIA Jetson TX2?”中修改TF源碼關于NUMA的部分。可能在你修改的時候,你會發現有所不同,文件tensorflow/stream_executor/cuda/cuda_gpu_executor.cc中的TryToReadNumaNode()函數源碼中已經添加了對aarch64架構的識別和處理,

  static int TryToReadNumaNode(const string &pci_bus_id, int device_ordinal){
  #ifdef __aarch64__
      LOG(INFO) << "ARM64 does not support NUMA - returning NUMA node zero";
      return 0;
  ...
  }

如果是這樣,就不必修改源碼。
否則,請閱讀下面內容,完成類似修改

由于TX2的ARM架構不支持NUMA,所以在build TensorFlow之前需要修改一下clone到本地的源碼,具體中添加如下兩行內容,避免后面使用TF的時候出現錯誤

   LOG(INFO) << "ARM has no NUMA node, hardcoding to return zero";
   return 0;

如圖:
ARM不支持NUMA,添加硬編碼,返回0

install TensorFlow v1.2.1 on TX2

To use mobilenet on TX2 for object detection task, I have to use a newer TensorFlow than version 1.0.1. TF 1.2.1 is good for me, while JetsonHacks does not give guide to install TF 1.2.1 or some other versions but 1.0.1. After searching the Internet and read many talks on nvidia jetson forum, I get TF 1.2.1 working on TX2. Here is the steps:

  1. install Bazel 0.5.2 from official website
nvidia@tegra-ubuntu:~$ bazel version
Build label: 0.5.2- (@non-git)
Build target: bazel-out/local-  opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Aug 4 08:22:07 2017 (1501834927)
Build timestamp: 1501834927
Build timestamp as int: 1501834927
  1. clone and checkout v1.2.1 for tensorflow
# from $HOME/
git clone https://github.com/tensorflow/tensorflow
cd ./tensorflow
git checkout v1.2.1
  1. ./configure
./configure

All setting is default (just type ENTER) except for CUDA set to 'y'

  1. fix workspace.bzl to get the right Eigen version for out ARMv8 on TX2
    worksapce.bzl is in ./tensorflow/tensorflow/ , feel free to open it use some text editor or vim, find lines as follows:
  native.new_http_archive(
      name = "eigen_archive",
      urls = [
          # "http://mirror.bazel.build/bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz",
          # "https://bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz",
          "http://mirror.bazel.build/bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
          "https://bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
      ],
      # sha256 = "ca7beac153d4059c02c8fc59816c82d54ea47fe58365e8aded4082ded0b820c4",
      # strip_prefix = "eigen-eigen-f3a22f35b044",
      sha256 = "a34b208da6ec18fa8da963369e166e4a368612c14d956dd2f9d7072904675d9b",
      strip_prefix = "eigen-eigen-d781c1de9834",
      build_file = str(Label("http://third_party:eigen.BUILD")),
  )

the lines above those starting with # are the source text, and I just use # to commet these lines and new urls, sha256 and strip_prefix are added.

  1. bazel build
    If you do not swapon swapfile, do it before build TF and then bazel build as following.
bazel build -c opt --local_resources 3072,4.0,1.0 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --verbose_failures --config=cuda //tensorflow/tools/pip_package:build_pip_package

then

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

now you get tensorflow 1.2.1 on /tem/tensorflow_pkg/, use
sudo pip install tensorflow-1.2.1-cp27-cp27mu-linux_aarch64.whl

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容

  • 安裝tensorflow 下載tensorflow源文件 Gitclone--recurse-submodules...
    風果閱讀 1,962評論 0 2
  • 1. 介紹 首先讓我們來看看TensorFlow! 但是在我們開始之前,我們先來看看Python API中的Ten...
    JasonJe閱讀 11,782評論 1 32
  • 美團的知識庫上已經有在CentOS 7上安裝TF的詳細教程,但是有很多坑還是不踩不知道,現在記錄一下安裝過程遇到的...
    董春磊閱讀 3,383評論 0 1
  • 想讓你為了我睡不著覺,一晚抽掉兩包煙。 ——不讀笑忘書 我...
    羥羊閱讀 147評論 0 0
  • 初入職場的人,未來職業發展的前景很大程度上在最初的幾年內(通常是3-5年)就已經決定了。最初的這幾年是至關重要的時...
    HR管理小幫手閱讀 220評論 0 0