首先要安装好YOLO,再进行下面的GPU识别与训练环境的搭建。
如果还未安装YOLO的,请先参考下面链接进行安装:
https://blog.csdn.net/yumening77/article/details/97133794
以下环境搭建基于ubuntu系统,主要分为三个步骤:
- 显卡驱动的安装
- CUDA的安装
- CUDNN的安装
- 修改makefile文件
一、显卡驱动的安装
非阿里云vgn5i 型实例适用
1.查看GPU型号
lspci | grep -i nvidia
如上图所示,可以看到GPU型号是Tesla P100
2.下载对应的显卡驱动
https://www.nvidia.com/Download/index.aspx?lang=cn
然后点击搜索,再点击产品支持列表,可以看到,该显卡驱动支持Tesla P100
下载对应的显卡驱动并传输到ubuntu系统中
3.安装显卡驱动
sudo chmod a+x NVIDIA-Linux-x86_64-384.183.run
sudo ./NVIDIA-Linux-x86_64-384.183.run
选择ok和yes
最后如果出现如下错误:
WARNING: nvidia-installer was forced to guess the X library path '/usr/lib' and X module path '/usr/lib/xorg/modules'; these paths were not queryable from the system. If X fails to find the NVIDIA X driver module, please install the
`pkg-config` utility and the X.Org SDK/development package for your distribution and reinstall the driver
安装依赖:sudo apt install dkms build-essential linux-headers-generic
执行:sudo apt-get install pkg-config
然后再执行:nvidia-smi
看到如下界面说明显卡驱动安装成功
阿里云vgn5i(云虚拟机、最便宜那种) 型实例适用
方法一(阿里云文档给出的,但是我试过好像不行,我用的是方法二):
1.禁用nouveau
a. 查看是否存在blacklist-nouveau.conf文件。
ls /etc/modprobe.d/blacklist-nouveau.conf
如果文件存在,则跳过本步骤。如果文件不存在,则执行命令:
vim /etc/modprobe.d/blacklist-nouveau.conf
b. 创建文件,并在文件中添加以下内容禁用nouveau。
blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0
c. 生成kernel initramfs。
rmmod nouveau update-initramfs -u
d. 重启实例。
reboot
2.下载GRID驱动包(GRID就是GPU驱动)
a. 下载GRID驱动安装包。
-
-
- 如果实例位于华南1 可用区C、可用区D下,请下载GRID 7.0 Guest驱动:
-
wget http://nvdia-driver-410.oss-cn-shenzhen.aliyuncs.com/NVIDIA-Linux-x86_64-410.39-grid.run
-
-
- 如果实例位于其它地域和可用区,请下载GRID 8.0 Guest驱动:
-
wget http://nvidia-418.oss-cn-shenzhen.aliyuncs.com/NVIDIA-Linux-x86_64-418.70-grid.run
b. 安装GRID驱动。
chmod +x NVIDIA-Linux-x86_64-410.39-grid.run ./NVIDIA-Linux-x86_64-410.39-grid.run
c. 测试GRID驱动是否安装成功。
nvidia-smi
如果返回以下GRID驱动信息,说明驱动安装成功。
方法二:
1.修改内核
Ubuntu切换内核到4.4.0-131-generic:
vi /etc/default/grub
设置GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'
然后更新一下
update-grub
2.升级系统并安装KDE桌面
升级系统并安装KDE桌面
apt-get update
apt-get upgrade
apt-get install kubuntu-desktop
重启系统
reboot
3.安装GRID驱动
wget http://nvdia-driver-410.oss-cn-shenzhen.aliyuncs.com/NVIDIA-Linux-x86_64-410.39-grid.run
chmod 777 NVIDIA-Linux-x86_64-410.39-grid.run
./NVIDIA-Linux-x86_64-410.39-grid.run
nvidia-smi
如果返回以下类似结果,说明驱动已经成功安装。
二、CUDA的安装
1.下载CUDA
https://developer.nvidia.com/cuda-toolkit-archive
如果没有账号需要先注册登录
在安装显卡驱动时,选择的CUDA Toolkit版本为9.0的,如下图
所以要下载对应版本的CUDA
2.安装cuda
若是cuda10.1则参考:https://www.cnblogs.com/zmbreathing/p/CUDA.html
执行如下命令:
sudo sh cuda_9.0.176_384.81_linux.run
cuda_9.0.176_384.81_linux.run是对应cuda的文件,根据版本不同文件名也会不同。
然后用一本书的书角压住回车键,直到服务条款显示到100%。接着按下面的步骤选择:
accept
n(不要安装driver)
y
y
y
如下图:
3.设置环境变量。
安装完成后,设置环境变量。
打开主目录下的 .bashrc文件添加如下路径,例如我的.bashrc文件在/root下(默认安装路径),如果没有找到,则按Ctrl+H键显示隐藏文件。
以下都是默认安装路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64
export PATH=$PATH:/usr/local/cuda-9.0/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-9.0
终端运行:source ~/.bashrc
检查:nvcc --version,如果显示下面的文子就说明安装成功了。
三、CUDNN的安装
1.下载CUDNN
https://developer.nvidia.com/rdp/cudnn-archive
下载与CUDA版本对应的CUDNN
然后选择Linux的CUDNN库(别选Ubuntu的,deb文件不好安装)
2.解压
由于下载的文件是solitairetheme8 格式,需要修改后缀后再进行解压。
cp cudnn-9.0-linux-x64-v7.6.1.34.solitairetheme8 cudnn-9.0-linux-x64-v7.6.1.34.tgz
tar -xvf cudnn-9.0-linux-x64-v7.6.1.34.tgz
ls
确保可以看到cuda文件加被解压了出来
3.配置
输入如下命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
4.查看CUDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如下出现如下界面,说明安装成功。
四、修改Makefile文件
打开darknet/MakeFile文件,进行如下修改:
GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=1 #如果使用CUDNN设置为1,否则为0
OPENCV=0 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0 #如果使用OPENMP设置为1,否则为0
DEBUG=0 #如果使用DEBUG设置为1,否则为0
CC=gcc
NVCC=/usr/local/cuda-9.0/bin/nvcc #NVCC=nvcc 修改为自己的路径
AR=ar
ARFLAGS=rcs
OPTS=-Ofast
LDFLAGS= -lm -pthread
COMMON= -Iinclude/ -Isrc/
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC
...
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/ #修改为自己的路径
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand #修改为自己的路径
endif
修改后进行保存,然后在darknet目录下再次编译:
make
编译结束后,再次执行:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
注意:虚拟机或者云虚拟机(阿里云vgn5i)要使用GPU和CUDA的话
假如在检测实例的时候,出现如下报错:
Error: all CUDA-capable devices are busy or unavailable
可能需要按以下步骤。
1.安装GRID,上面已有描述
2.申请一个 License,并搭建对应的服务器(或者在阿里云工单里面向他们要一个测试用的License)
申请参考:https://forum.huawei.com/enterprise/zh/thread-475551.html
3.参考下面链接中的第5到第7步
https://help.aliyun.com/document_detail/118852.html?spm=a2c4g.11186623.6.608.7ff5674dboosfc
error while loading shared libraries: libcudart.so.9.0: cannot open shared object file: No such file
解决方案:
sudo cp /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/local/lib/libcudart.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/local/lib/libcublas.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/local/lib/libcurand.so.9.0 && sudo ldconfig
error while loading shared libraries: libcudnn.so.7: cannot open shared object file: No such file or directory.
解决方案:
sudo cp /usr/local/cuda/lib64/libcudnn.so.7 /usr/local/lib/libcudnn.so.7 sudo ldconfig
如果出现如下错误:
vi cfg/yolov3.cfg
修改
batch=1
subdivisions=1
保存
如果还是报错,使用更小的权重向量
yolov3-tiny.cfg
下载:
wget https://pjreddie.com/media/files/yolov3-tiny.weights