0%

无 root 配置 CUDA 10 运行 YOLO v4

环境部署

在无 root 的情况下可将 cuda 安装到自己的目录中, 配置好环境变量即可使用.

服务器基础信息:

OS: Ubuntu 16.04
Kernel: x86_64 Linux 4.13.0-38-generic
CPU: Intel Xeon CPU E5-2620 v3 @ 3.2GHz
GPU: 双路 GeForce RTX 2080Ti
GPU驱动版本: 430.50
RAM: 128 GB
GCC: 5.4.1

CUDA 10 安装

到英伟达官网下载CUDA toolkit的 runfile, 本文以 10.0 版本为例

1
$ wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux

赋予可执行权限

1
$ chmod +x ./cuda_10.0.130_410.48_linux

执行安装程序

1
$ ./cuda_10.0.130_410.48_linux

按空格向下滚动, accept 许可

提示是否安装显卡驱动, 由于已安装驱动, 且无 root 不可覆盖安装, 故输入 n 跳过

按 y 安装 CUDA Toolkit, 在此需输入自己的 CUDA 安装路径, 一定要选择自己有写入权限的目录, 若文件夹不存在将会自动创建, 在此以 /server_space/zhaoym/cuda-10.0 为例.

软链接无需创建, CUDA Samples 也无需安装

若 Toolkit 为 Installed 即为安装成功.

cuDNN 安装

首先下载 cuDNN 库压缩文件, 该链接不可直接通过 wget 下载, 可先使用浏览器打开, 再复制浏览器下载时跳转的地址进行下载

解压压缩文件

1
$ tar -zxvf cudnn-10.0-linux-x64-v7.6.5.32.tgz

得到名为 cuda 的文件夹, 其目录结构与 CUDA 安装路径的目录结构相同

1
2
3
4
5
6
7
8
9
cuda
├── NVIDIA_SLA_cuDNN_Support.txt
├── include
│   └── cudnn.h
└── lib64
├── libcudnn.so -> libcudnn.so.7
├── libcudnn.so.7 -> libcudnn.so.7.6.5
├── libcudnn.so.7.6.5
└── libcudnn_static.a

将该文件夹下的文件分别复制到之前安装 CUDA 10 的对应路径中, 本例中即为 /server_space/zhaoym/cuda-10.0

配置环境变量

打开 ~/.bashrc

1
$ vi ~/.bashrc

在末尾追加

1
2
export PATH=/server_space/zhaoym/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/server_space/zhaoym/cuda-10.0/lib64:$LD_LIBRARY_PATH

若之前有配置过其它版本的 CUDA, 需先将其注释掉

退出编辑器, 使环境变量生效

1
$ source ~/.bashrc

至此 CUDA 和 cuDNN 安装结束

1
$ nvcc -V

输出

1
2
3
4
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

YOLO v4 编译

项目主页: https://github.com/AlexeyAB/darknet

预训练权重: yolov4.weights

克隆项目

1
$ git clone https://github.com/AlexeyAB/darknet.git

修改 Makefile

1
$ vi Makefile

将前三行修改为1, RTX 2080 Ti 为图灵架构, 将 CUDNN_HALF 设为 1 可进一步加速计算

1
2
3
GPU=1
CUDNN=1
CUDNN_HALF=1

服务器默认 GCC/G++ 版本为 4.9.4, 这里改为使用更高的 5.4.1, 修改 60 和 62 行

1
2
3
4
5
ifeq ($(USE_CPP), 1)
CC=g++-5
else
CC=gcc-5
endif

全局查找并替换 /usr/local/cuda/server_space/zhaoym/cuda-10.0

按 ESC 进入命令模式, 输入以下内容 , 回车完成替换

1
:%s/\/usr\/local\/cuda/\/server_space\/zhaoym\/cuda-10.0/g

编译

1
$ make -j8

若编译出错, 修改后需 make clean 再重新 make

运行 demo

1
$ ./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights

YOLO v4 的训练配置方式与 v3 相同, 可参考之前的文章: YOLO v3 环境搭建及训练入门指南