一、安装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