实际上,整个过程实在容器中进行的
检查环境
首先,Ubuntu下查看Nvidia显卡的详细信息:
nvidia-smi
可见:
$ nvidia-smi
Fri Aug 16 08:46:25 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26 Driver Version: 430.26 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce 940MX Off | 00000000:3C:00.0 Off | N/A |
| N/A 46C P0 N/A / N/A | 183MiB / 2004MiB | 3% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 3038 G /usr/lib/xorg/Xorg 94MiB |
| 0 4709 G /usr/bin/gnome-shell 86MiB |
+-----------------------------------------------------------------------------+
查看cuda 版本:
cat /usr/local/cuda/version.txt
or
nvcc -V
可见:
$ cat /usr/local/cuda/version.txt
CUDA Version 10.1.243
查看cudnn版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果上述命令你都没有输出,那么请往下看(容器里面不用装显卡驱动,容器本身有cuda,实际只操作了安装cudnn和opencv):
Ubuntu下双显卡笔记本如何安装NVIDIA卡驱动
安装显卡驱动
检查自己电脑的gpu是否CUDA-capable
lspci | grep -i nvidia
#没有lspci就安装
apt install pciutils
可见:
禁用nouveau并重启
(安装Nvidia显卡的官方驱动和系统自带的nouveau驱动冲突)
lsmod | grep nouveau
#没有lsmod就安装
apt install module-init-tools
如果有输出说明nouveau正在加载
打开禁用列表
sudo gedit /etc/modprobe.d/blacklist.conf
在打开文本的最后一行添加:
blacklist nouveau
options nouveau modeset=0
更新,重启:
sudo update-initramfs -u
reboot
再次查看是否禁用nouveau
lsmod | grep nouveau
重点:
1、 先安装 gcc :
sudo yum -y install gcc-c++
或者
sudo apt install build-essential
2、删除旧的NVIDIA驱动:
$sudo apt-get remove nvidia-*
$sudo apt-get autoremove
或者
sudo apt-get --purge remove nvidia-*
# sudo ./NVIDIA-Linux-x86_64-410.57.run -uninstall
sudo update-initramfs -u
sudo reboot now
3、更新系统软件仓库列表
~$ sudo apt-get update
4、使用下面的命令查看系统推荐安装哪个版本的N卡驱动
ubuntu-drivers devices
qyh@qyh-mas$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1d.0/0000:3c:00.0 ==
modalias : pci:v000010DEd0000134Dsv000017AAsd000039C8bc03sc02i00
vendor : NVIDIA Corporation
model : GM108M [GeForce 940MX]
driver : nvidia-driver-410 - third-party free
driver : nvidia-driver-415 - third-party free
driver : nvidia-driver-390 - third-party free
driver : nvidia-driver-430 - third-party free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
在上面这些输出中可以看到recommended关键词,说明系统推荐安装的N卡驱动是"nvidia-driver-430"
5、选择你看到推荐版本安装,本例使用nvidia-driver-430,然后安装几个必要组件,命令如下
$ sudo apt-get install nvidia-settings nvidia-driver-430 nvidia-prime
我的建议安装的是nvidia-440版本驱动,然后继续在命令行输入:
$ sudo ubuntu-drivers autoinstall
将会自动安装所推荐的nvidia-440版本驱动
6、安装双显卡切换指示器
~$ sudo add-apt-repository ppa:nilarimogard/webupd8
~$ sudo apt-get update
~$ sudo apt-get install prime-indicator
7、重新启动
~$ sudo reboot
新启动后会在右上角看到一个显卡指示器,默认情况下是Nvidia图标,说明现在使用的是N卡,点击这个图标选择"Quick switch graphics…",按下确认后会自动重启桌面,此时就会切换到Intel显卡了,图标也变成了Intel。
大家可以尝试着在两个显卡之间切换,并使用下面的命令查看是否切换成功,然后测试其性能
切换到Intel卡后,查看N卡是否关闭,如果N卡末尾是(rev ff),则表示成功关闭了N卡,现在使用的是I卡,如果末尾不是ff,则说明现在使用的是N卡
~$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation .... (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation .... (rev ff)
如果上面的命令没有看到NVIDIA卡,可以直接使用下面的命令来查看N卡状态
~$ lspci | grep NVI
qyh@qyh-mas:$ lspci | grep NVI
3c:00.0 3D controller: <font color="#EF2929"><b>NVI</b></font>DIA Corporation GM108M [GeForce 940MX] (rev a2)
qyh@qyh-mas: $ lspci | grep VGA
00:02.0 <font color="#EF2929"><b>VGA</b></font> compatible controller: Intel Corporation Skylake GT2 [HD Graphics 520] (rev 07)
使用下面的命令来测试显卡的性能,数字越大代表显卡性能越好,这条命令可以明显看到N卡的性能强于I卡
~$ glxspheres64
安装CUDA 10.1
1.在http://developer.nvidia.com/cuda-downloads上下载安装包
你自己可以建个文件夹,然后在文件夹中输入上述两条命令:
$:sudo wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
$:sudo sh cuda_10.1.243_418.87.00_linux.run
2.再出现的提示中选择continue和accept,直到出现如下画面:
由于之前已经安装了Nvidia的显卡驱动,这里不安装driver,那么只需要移动到Driver,按enter键,将"[]"中的X去掉即是不选择.然后在Install.因为我们只是调用CUDA,不去写CUDA程序,所以Samples也可以选择不安装.3.安装成功
4.添加环境变量
vi ~/.bashrc
在文件末尾添加
export PATH="/usr/local/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/lcoal/cuda-10.1/lib64:$LD_LIBRARY_PATH"
最后使其生效
source ~/.bashrc
5.终端输入
cd /usr/local/cuda-10.1/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
结果如图:
出现Result = PASS则表示安装成功通过!!
6.在终端输入命令,实时查看GPU的使用情况:
watch -n 1 nvidia-smi
安装CUDNN
(实际容器中没有sudo,指令不加这个也行)
1.下载cuDNN v7.6.1 (June 24, 2019), for CUDA 10.1
https://developer.nvidia.com/rdp/cudnn-archive
进入解压后的cudnn目录 应该能看到cuda文件夹
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
若是在无界面环境下,下载cuDNN Library for Linux
查看cudnn版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
可见
从上到下输出7 6 4 即表示cudnn7.6.4
(下面这部分问题实际没遇到)
注意:
假如你不禁用nouveau驱动遇到的问题和解决方案
安装Nvidia显卡的官方驱动和系统自带的nouveau驱动冲突。 安装网上方法尝试了modprob.d/blacklist.conf里的各种修改,重启以后还是没有成功禁用nouveau驱动
最后看见一个方法:
直接移除这个驱动(备份出来)
# mv /lib/modules/3.0.0-12-generic/kernel/drivers/gpu/drm/nouveau/nouveau.ko /lib/modules/3.0.0-12-generic/kernel/drivers/gpu/drm/nouveau/nouveau.ko.org
重新加载一下
# update-initramfs -u
重启发现字体已经变大了,卸载成功。
安装配置OpenCV 4.4.0
OpenCV下载
下载地址:https://opencv.org/releases/
选择最新的4.4.0版本(如果下载速度太慢,复制链接地址,使用迅雷)
将下载好的压缩文件拷贝到虚拟机中
编译与安装
- 安装cmake
OpenCV需要使用cmake进行编译
sudo apt-get install cmake
- 安装依赖
sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
- 解压
unzip opencv-4.4.0
- 进入文件目录,创建build目录并进入
cd opencv-4.4.0/
mkdir build
cd build
- 使用cmake生成makefile文件
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..
CMAKE_BUILD_TYPE=RELEASE:表示编译发布版本
CMAKE_INSTALL_PREFIX:表示生成动态库的安装路径,可以自定义
WITH_GTK=ON:这个配置是为了防止GTK配置失败:即安装了libgtk2.0-dev依赖,还是报错未安装
OPENCV_GENERATE_PKGCONFIG=YES:表示自动生成OpenCV的pkgconfig文件,否则需要自己手动生成。
- 编译
make -j8
-j8表示使用多个系统内核进行编译,从而提高编译速度,不清楚自己系统内核数的,可以使用make -j$(nproc)
如果编译时报错,可以尝试不使用多个内核编译,虽然需要更长的编译时间,但是可以避免一些奇怪的报错
- 安装
sudo make install
注:如果需要重新cmake,请先将build目录下的文件清空,再重新cmake,以免发生错误
环境配置
- 将OpenCV的库添加到系统路径(实际用的方法一)
方法一:配置ld.so.conf文件
sudo vim /etc/ld.so.conf
在文件中加上一行 include /usr/loacal/lib,这个路径是cmake编译时填的动态库安装路径加上/lib
方法二:手动生成opencv.conf文件
sudo vim /etc/ld.so.conf.d/opencv.conf
是一个新建的空文件,直接添加路径,同理这个路径是cmake编译时填的动态库安装路径加上/lib
/usr/local/lib
以上两种方法配置好后,执行如下命令使得配置的路径生效
sudo ldconfig
- 配置系统bash
因为在cmake时,选择了自动生成OpenCV的pkgconfig文件,在/usr/local/lib/pkgconfig路径可以看到文件
确保文件存在,执行如下命令
sudo vim /etc/bash.bashrc
在文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
如下:
保存退出,然后执行如下命令使配置生效
source /etc/bash.bashrc
至此,Linux\Ubuntu18.04环境下OpenCV的安装以及配置已经全部完成,可以使用以下命令查看是否安装和配置成功
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4
测试
(实际测试未成功,不知道为什么)
新建一个demo.cpp文件,代码如下
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("opencv.jpg");
imshow("Display Image window",srcImage);
waitKey(0);
return 0;
}
同级目录放一张图片,名为opencv.jpg,编译
g++ `pkg-config opencv4 --cflags` demo.cpp -o demo `pkg-config opencv4 --libs`
运行
./demo
结果如下:
安装Darknet
Clone项目文件
git clone https://github.com/AlexeyAB/darknet.git
cd darknet
根据环境,修改Makefile 文件
首先
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0
# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
# set ZED_CAMERA=1 to enable ZED SDK 3.0 and above
# set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X
USE_CPP=0
DEBUG=0
ARCH= -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52] \
-gencode arch=compute_61,code=[sm_61,compute_61]
(实际这块并没有修改:更改ARCH配置的时候,根据自己的GPU型号来定。我的GPU是GTX1050Ti的计算能力是6.1。
compute_30表示显卡的计算能力是3.0。
注意:每次修改完makefile都要重新Make一下才能生效。)
然后:
修改NVCC的路径:
NVCC=/usr/local/cuda-10.1/bin/nvcc
最后(实际未更改)
确认48~51行,在”ifeq ((GPU),1)”语句块中修改为自己的CUDA安装路径,更改前默认路径如下:ifeq((GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
将三处的cuda路径改为自己本机上的路径即可。
给系统加入opencv库的环境变量
(编译时报过错:error while loading shared libraries: libopencv_highgui.so.2.4 linux)
用vim打开/etc/ld.so.conf,注意要用sudo打开获得权限,不然无法修改,如:
sudo vim /etc/ld.so.conf
(本来用不了sudo,这里又可以用了,不知道为什么)
在文件中加上一行 /usr/loacal/lib,
/user/loacal是opencv安装路径(我的是/opencv),就是makefile中指定的安装路径,再运行sudo ldconfig,
修改bash.bashrc文件,sudo gedit /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
然后source /etc/bash.bashrc
编译
在darknet下
make
检验
./darknet
若出现下图,则说明编译成功: