首先要安裝好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