一、安装Tensorflow

      以前,在Jetson上安装Tensorflow是一个复杂的过程。由于Tensorflow占用的内存较大,安装时还需要配置虚拟内存。最近,NVIDIA官方推出了针对Jetson的轻量化Tensorflow安装包,使得安装过程极为简化。下面是我在Jetson TX2上的安装过程。

      在安装前,首先确保Jetson TX2上已经刷了Jetpack 3.3或更新的版本。由于系统上自带了Python 2和Python 3,默认的版本是Python 2,而我主要使用Python 3,所以需要先切换默认的Python版本。打开终端(Ctrl+Alt+T),输入以下命令切换默认Python版本至Python 3:

echo alias python=python3 >> ~/.bashrc
source ~/.bashrc

      切换完成后,输入 :

python --version

      查看当前默认Python版本,应该已经是Python 3了。接着,安装pip3,用于后续安装包的查找、下载和管理,输入:

sudo apt install python3-pip

       接下来可以安装Tensorflow了。NVIDIA官方推出了针对Jetson的Tensorflow安装包,只需一行命令,就可以完成安装(前提是已经刷好Jetpack 3.3以上),简直太赞了。在终端输入:

pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp33 tensorflow-gpu

      如果你主要用Python 2, 那么就用以下命令:

pip install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp33 tensorflow-gpu

      经过几十分钟的等待,Tensorflow就安装完成了。可以测试一下,输入:

python
import tensorflow

     假如不报错,则说明安装成功,这时就可以愉快地跑你的Tensorflow程序了。  

二、安装Opencv 3

      我的程序中用到了Opencv, 在测试的时候出现cv2模块导入失败。原因是Jetpack虽然包含了Opencv 3,但是只提供了Python 2.7的编译版本,所以也只能在Python 2.7下使用。解决办法是重新安装Opencv。由于Nvidia tx2使用的是aarch(armv8)架构,不支持pip和conda的方式安装Opencv,因而只能采用源码的方式安装。我找到的这个解决方案应该是众多方法中操作较为简单的,但安装过程比较费时。打开终端,依次输入以下命令:

git clone https://github.com/jetsonhacks/buildOpenCVTX2.git
cd buildOpenCVTX2
./buildOpenCV.sh 
cd $HOME/opencv/build
make
sudo make install

    经过漫长的等待,就安装完了。测试一下:

python
import cv2
print(cv2.__version__)

      若能正确得到版本号,说明安装成功。

三、GPU内存分配

       最后,附带说一下GPU内存分配问题。我把训练好的网络放到Jetson上做测试时,系统报出了Killed,就是线程被杀死。主要是因为GPU内存不足。解决办法时设置内存分配。在程序中添加以下代码:

import os  
os.environ["CUDA_VISIBLE_DEVICES"] = '0'   #指定第一块GPU可用  
config = tf.ConfigProto()  
config.gpu_options.per_process_gpu_memory_fraction = 0.5  # 程序最多只能占用指定GPU50%的显存。具体比例自己根据实际设置,若报Killed,就减小这个数值
config.gpu_options.allow_growth = True      #程序按需申请内存  
sess = tf.Session(config = config)

      另外,在Jetson上查看GPU状态,不能用nvidia-smi命令,Tegra不支持这个命令,要用:  

sudo ./tegrastats

      要想让Jetson开足马力做计算,可以开启高功耗模式:

sudo  ~/jetson_clocks.sh