按照《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)
参考github上pp-detection项目issue《[BUG] 使用GPU推理出现Segmentation fault》,上述报错原因在于cuda和cudnn版本。
pp-tracking项目指定的cuda和cudnn版本为
由于机器上已经安装cuda 11.0,运行着其他项目,因此,考虑在pp-tracking的conda环境中,指定cuda版本为10.2。
安装cuda 10.2和cudnn 7.6.5的过程参考博客《ubuntu安装cuda10.2以及cudnn7.6.5》,如下。
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)
其余选择默认,安装完毕后,默认路径为/usr/local/cuda-10.2
。
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*
参考博客《【引路帖】【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
在conda环境下执行以下命令
conda install cudatoolkit=10.2 cudnn=7.6.5
输入如下命令进行推理
python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_dla34_30e_1088x608 --video_file=person.mp4 --device=GPU