pp-tracking ubuntu 18.04使用GPU推理出现Segmentation fault

目录

        • 1. 报错
        • 2. 报错原因
        • 3. conda环境指定cuda 10.2和cudnn 7.6.5
          • 3.1. 安装cuda 10.2
          • 3.2. 安装cudnn 7.6.5
          • 3.3. conda环境指定cuda 10.2
          • 3.4. conda环境安装cuda 10.2
        • 4. 测试

听说pp-tracking做跟踪比较好,试用,发现使用gpu做推理会发生报错,遂记录报错排除方法。

1. 报错

按照《PP-Tracking之手把手玩转多目标跟踪》教程,输入如下命令进行推理

python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_dla34_30e_1088x608 --video_file=person.mp4 --device=GPU

出现Segmentation fault报错,如下

-----------  Model Configuration -----------
Model Arch: FairMOT
Transform Order:
--transform op: LetterBoxResize
--transform op: NormalizeImage
--transform op: Permute
--------------------------------------------
fps: 25, frame_count: 200


--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
No stack trace in paddle, may be caused by external reasons.

----------------------
Error Message Summary:
----------------------
FatalError: `Segmentation fault` is detected by the operating system.
  [TimeInfo: *** Aborted at 1644644745 (unix time) try "date -d @1644644745" if you are using GNU date ***]
  [SignalInfo: *** SIGSEGV (@0x0) received by PID 3997 (TID 0x7f8be26b7240) from PID 0 ***]

Segmentation fault (core dumped)

2. 报错原因

参考github上pp-detection项目issue《[BUG] 使用GPU推理出现Segmentation fault》,上述报错原因在于cuda和cudnn版本。
pp-tracking ubuntu 18.04使用GPU推理出现Segmentation fault_第1张图片

pp-tracking项目指定的cuda和cudnn版本为

  • cuda: 10.2
  • cudnn: 7.6.5

3. conda环境指定cuda 10.2和cudnn 7.6.5

由于机器上已经安装cuda 11.0,运行着其他项目,因此,考虑在pp-tracking的conda环境中,指定cuda版本为10.2。

安装cuda 10.2和cudnn 7.6.5的过程参考博客《ubuntu安装cuda10.2以及cudnn7.6.5》,如下。

3.1. 安装cuda 10.2

cuda 10.2的下载地址(仅限ubuntu 18.04,如果是其他ubuntu版本,参考上面的博客):https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run

安装过程中,由于我只想在pp-tracking的conda环境中使用cuda 10.2,因此不更新cuda软链接,如下(选择No)
pp-tracking ubuntu 18.04使用GPU推理出现Segmentation fault_第2张图片
其余选择默认,安装完毕后,默认路径为/usr/local/cuda-10.2

3.2. 安装cudnn 7.6.5

cudnn 7.6.5的下载地址(仅限cuda 10.2):https://developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.5.32/Production/10.2_20191118/cudnn-10.2-linux-x64-v7.6.5.32.tgz

下载后,完整文件名为cudnn-10.2-linux-x64-v7.6.5.32.tgz,将该压缩文件上传至ubuntu。

解压,如下

tar -xvf cudnn-10.2-linux-x64-v7.6.5.32.tgz

解压后的文件夹为cuda

执行以下命令

sudo cp cuda/include/cudnn.h /usr/local/cuda-10.2/include/

sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64/

sudo chmod a+r /usr/local/cuda-10.2/include/cudnn.h

sudo chmod a+r /usr/local/cuda-10.2/lib64/libcudnn*
3.3. conda环境指定cuda 10.2

参考博客《【引路帖】【conda虚拟环境】【cuda】多个cuda版本路径切换》

我的conda环境名称为pptracking

3.3.1. 查询当前环境路径

conda activate pptracking
echo ${CONDA_PREFIX}

得到环境路径,我的为/home/username/anaconda3/envs/pptracking

3.3.2. 建立激活环境下的文件夹,写入脚本

#建立激活环境下的文件夹
mkdir -p /home/username/anaconda3/envs/pptracking/etc/conda/activate.d
#写入脚本
vim /home/username/anaconda3/envs/pptracking/etc/conda/activate.d/activate.sh

写入内容

ORIGINAL_CUDA_HOME=$CUDA_HOME
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

3.3.3. 建立退出激活环境下的文件夹,写入脚本

#建立退出激活环境下的文件夹
mkdir -p /home/username/anaconda3/envs/pptracking/etc/conda/deactivate.d
#写入脚本
vim /home/username/anaconda3/envs/pptracking/etc/conda/deactivate.d/deactivate.sh

写入内容

export CUDA_HOME=$ORIGINAL_CUDA_HOME
export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH
unset ORIGINAL_CUDA_HOME
unset ORIGINAL_LD_LIBRARY_PATH
3.4. conda环境安装cuda 10.2

在conda环境下执行以下命令

conda install cudatoolkit=10.2 cudnn=7.6.5

4. 测试

输入如下命令进行推理

python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_dla34_30e_1088x608 --video_file=person.mp4 --device=GPU

运行成功,如下
pp-tracking ubuntu 18.04使用GPU推理出现Segmentation fault_第3张图片

你可能感兴趣的:(ubuntu,pp-tracking)