在NVIDIA Jetson TX2上安裝TensorFlow

2021-02-15 LeadAI OpenLab

正文共3070個字,3張圖,預計閱讀時間14分鐘。

本文內容安排如下:

刷機

刷機完成後的操作

安裝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導致的錯誤

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

對於普通的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架構的識別和處理,

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

如果是這樣,就不必修改源碼。


否則,請閱讀下面內容,完成類似修改由於TX2的ARM架構不支持NUMA,所以在build TensorFlow之前需要修改一下clone到本地的源碼,具體中添加如下兩行內容,避免後面使用TF的時候出現錯誤:

1LOG(INFO) << "ARM has no NUMA node, hardcoding to return zero";
2return 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

1nvidia@tegra-ubuntu:~$ bazel version
2Build label: 0.5.2- (@non-git)
3Build target: bazel-out/local-  opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
4Build time: Fri Aug 4 08:22:07 2017 (1501834927)
5Build timestamp: 1501834927
6Build timestamp as int: 1501834927

2、clone and checkout v1.2.1 for tensorflow

1
2git clone https://github.com/tensorflow/tensorflow
3cd ./tensorflow
4git checkout v1.2.1

3、/configure

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

4、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:

1native.new_http_archive(
2name = "eigen_archive",
3urls = [
4  
5  
6  "http://mirror.bazel.build/bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
7  "https://bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
8],
9
10
11sha256 = "a34b208da6ec18fa8da963369e166e4a368612c14d956dd2f9d7072904675d9b",
12strip_prefix = "eigen-eigen-d781c1de9834",
13build_file = str(Label("//third_party:eigen.BUILD")),
14)

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.

5、bazel build


If you do not swapon swapfile, do it before build TF and then bazel build as following.

1bazel build -c opt --local_resources 3072,4.0,1.0 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --verbose_failures --config=cuda

then

1bazel-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

TensorFlow on NVIDIA Jetson TX2 Development Kit

Jetson TX1 Swap File and Development Preparation

installTensorFlowTX2

How to install TensorFlow on the NVIDIA Jetson TX2?

TensorFlow on Jetson TX2

原文連結:https://www.jianshu.com/p/d3c50b7a00a7


查閱更為簡潔方便的分類文章以及最新的課程、產品信息,請移步至全新呈現的「LeadAI學院官網」:

www.leadai.org


請關注人工智慧LeadAI公眾號,查看更多專業文章

大家都在看

相關焦點

  • Nvidia Jetson Nano:使用Tensorflow和OpenCV從頭開始自定義對象檢測
    本文作者:轉載自:https://medium.com/swlh/nvidia-jetson-nano-custom-object-detection-from-scratch-using-tensorflow-and-opencv
  • TensorFlow Profiler安裝指南(真香)
    如上圖黃框中所述,若driver=nvidia則代表成功安裝。安裝完查看CUDA版本請執行:cat /usr/local/cuda/version.txt2.5 nvidia-docker要使docker啟動的TensorFlow容器能正確識別和利用物理機的GPU設備,我們還需要在物理機上安裝nvidia-docker。
  • 如何在 Windows 系統玩 TensorFlow
    系統安裝請參考網上其他教程,本文不再贅述。推薦系統安裝後,第一時間安裝 Visual Studio 2015,這樣以後安裝 CUDA 時可以直接生成相應的工程模板,便於將來開發。如果你的機器上安裝了 NVIDIA GPU,還需要事先依次安裝:最新驅動http://www.nvidia.cn/Download/index.aspx?
  • TensorFlow_GPU On OpenShift部署實踐
    NVIDIA驅動程序安裝首先安裝kernel-devel軟體包。# yum install kernel -devel-`uname -r` -yxorg-x11-drv-nvidia包需要DKMS包。Red Hat不支持或打包DKMS。目前正在努力刪除針對Red Hat發行版的DKMS上的NVIDIA驅動程序要求。
  • Jetson-inference的安裝
    2021-01-22   15:56前日給jetson nano安裝jetson-inference
  • TensorFlow 安裝手冊 — 使用 pip 安裝 TensorFlow
    可用安裝包tensorflow — 僅限 CPU 的當前版本(推薦給初學者)tensorflow - gpu — 支持 GPU 的當前版本(Ubuntu 和 Windows)tf - nightly — Nightly 僅為 CPU 構建(不穩定)tf - nightly - gpu — 使用 GPU
  • 在 Ubuntu 16.04 中安裝支持 CPU 和 GPU 的 Google TensorFlow 神經網絡軟體
    由於訓練所需的計算是非常巨大的,在大多數情況下需要 GPU 支持,這時 TensorFlow 就派上用場了。啟用了 GPU 並安裝了支持 GPU 的軟體,那麼訓練所需的時間就可以大大減少。本教程可以幫助你安裝只支持 CPU 的和同時支持 GPU 的 TensorFlow。要使用帶有 GPU 支持的 TensorFLow,你必須要有一塊支持 CUDA 的 Nvidia GPU。
  • NVIDIA Jetson: 實現一切自主的 AI 平臺.1
    https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.htmlhttps://developer.nvidia.com/embedded/learn/get-started-jetson-nano-2gb-devkit這裡給出一個無頭模式的連接示意圖
  • Mac系統安裝TensorFlow
    安裝 Python,你可能需要禁用系統完整性保護(SIP)來獲得從 Mac App Store 外安裝軟體的許可。必備: pipPip安裝和管理 Python寫的軟體包,如果你要使用本地 pip 安裝,系統上必須安裝下面的任一 pip 版本:pip, for Python 2.7pip3, for Python 3.n.
  • TensorFlow gpu版本安裝
    Tensorflow一款深度學習的框架,可以可視化訓練過程,方便進行模型的訓練以及部署,支持c/
  • Tensorflow執行pip升級安裝的坑
    Tensorflow是Google的深度學習框架,目前在工業界和學術界都很受歡迎。剛推出的時候,Tensorflow的安裝和使用都非常麻煩。幸好迭代到目前,tensorflow(寫作本文時最新版本為1.2.0)的安裝已經非常簡便了。如果你的系統已經安裝好了Anaconda(安裝方式請參考《如何用Python做詞雲?》
  • 9步教你安裝完成tensorflow與pytorch
    ▍第四步:tensorflow的安裝使⽤conda install tensorflow=1.14進⾏tensorflow cpu版本的安裝,▍第五步:查看變化(python什麼也都安裝好了,使⽤這種⽅法最愜意的點是tensorflow會⾃動適配⼀些庫進⾏安裝,在以後搬磚的⽇⼦⾥,不會有不良衝突)看這⾥
  • 使用conda安裝tensorflow-gpu | ubuntu系統
    大部分時候,如果我們電腦中已經安裝了anaconda,便可以使用 conda 進行安裝 tensorflow-gpu,還是使用 conda 進行安裝
  • 為了性能,別再用pip安裝TensorFlow了!
    你可以看到,與pip安裝相比,conda安裝的性能可以提供8X以上的速度提升。對於仍然經常使用CPU進行訓練和推斷的人來說,這個非常好。作為一名機器學習工程師,我使用我的CPU在我的代碼上進行訓練,然後把它放到一個支持GPU的機器上。這種速度的增加將幫助我更快地迭代。
  • Windows系統如何安裝Tensorflow Object Detection API
    節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯繫的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),伺服器,行動裝置等等。
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第9章 (上)啟動並運行TensorFlow
    最重要的是,Tensorflow 可以將圖分解為多個塊並在多個 CPU 或 GPU 上並行運行(如圖 9-2 所示)。 TensorFlow 還支持分布式計算,因此您可以在數百臺伺服器上分割計算,從而在合理的時間內在龐大的訓練集上訓練龐大的神經網絡(請參閱第 12 章)。 TensorFlow 可以訓練一個擁有數百萬個參數的網絡,訓練集由數十億個具有數百萬個特徵的實例組成。
  • 如何在windows系統上安裝Tensorflow Object Detection API?
    之前一直在雲伺服器上跑代碼,近期接手了師兄的臺式機(GTX 1050),雖然配置很渣,但想在本地玩玩看,於是乎先安裝一波Tensorflow Object Detection API。之前雲服上配置的時候十分順利,可是到了windows下很容易進坑,這裡簡單整理下踩坑後的總結。目錄大致的安裝步驟其實差不多,只是在些細節上會遇到坑,在這些坑上注意避免即可。
  • TensorFlow Serving入門
    準備TF Serving的Docker環境目前TF Serving有Docker、APT(二級制安裝)和源碼編譯三種方式,但考慮實際的生產環境項目部署和簡單性,推薦使用Docker方式。docker pull tensorflow/serving2.
  • Tensorflow Object Detection API 終於支持tensorflow1.x與tensorflow2.x了
    基於tensorflow框架構建的快速對象檢測模型構建、訓練、部署框架,是針對計算機視覺領域對象檢測任務的深度學習框架。之前tensorflow2.x一直不支持該框架,最近Tensorflow Object Detection API框架最近更新了,同時支持tensorflow1.x與tensorflow2.x。
  • 當ROS2遇到NVIDIA Jetson平臺,這些開原始碼你必須要知道的.
    讓我們擼一擼NVIDIA到底了開源了哪些基於ROS2的代碼:ROS 2 Jetson statsGithub:https://github.com/NVIDIA-AI-IOT/ros2_jetson_statsros2_jetson_stats軟體包是一個社區構建軟體包,用於監視和控制您的Jetson設備。