复制代码
服务器信息:
bash
复制代码
1. ssh 连接信息:127.0.0.1 zhangsan
2. 操作系统:Ubuntu 23.10
3. 显卡信息:NVIDIA Corporation GA102 [GeForce RTX 3090]
4. cpu 架构:x86_64,13th Gen Intel(R) Core(TM) i9-13900( 使用 "uname -m" 命令查看 )
5. docker( Docker version 24.0.7, build 24.0.7-0ubuntu2~23.10.1 )
6. docker-compose( docker-compose version 1.29.2, build unknown )
复制代码
1. 安装 nvidia 显卡驱动( 535.183.01 ):
ps:
1. 参考博客:
1.1. https://zhuanlan.zhihu.com/p/662696530( Ubuntu系统下安装显卡驱动以及pytorch )
1.2. https://blog.csdn.net/m0_46825740/article/details/121418113( ubuntu篇---ubuntu20.04安装cuda和cudnn )
2. 使用 "lsmod | grep nouveau" 命令可以查看系统默认的显卡驱动 nouveau 的信息!!!
步骤:
1. 下载驱动安装包:NVIDIA-Linux-x86_64-535.183.01.run OK
2. 卸载所有驱动:sudo apt-get remove nvidia* OK
3. 更新软件列表和必要的依赖:
bash
复制代码
sudo apt-get update OK
sudo apt-get install g++ OK
sudo apt-get install gcc OK
sudo apt-get install make OK
复制代码
4. 在安装NVIDIA驱动以前需要禁止系统自带显卡驱动 nouveau:
4.1. sudo vim /etc/modprobe.d/blacklist.conf ok
4.2. 在打开的文件末尾输入如下内容并保存: ok
blacklist nouveau
options nouveau modeset=0
4.3. 更新一下系统的 initramfs 镜像文件:sudo update-initramfs -u ok
4.4. 重启电脑:sudo reboot ok
4.5. 检测系统自带显卡驱动 nouveau 是否已被禁用成功:lsmod | grep nouveau( 没有输出任何信息表示禁用成功了 ) ok
4.6. 安装显卡驱动 NVIDIA-Linux-x86_64-535.183.01.run:
1. sudo chmod +x NVIDIA-Linux-x86_64-535.183.01.run
2. sudo ./NVIDIA-Linux-x86_64-535.183.01.run -no-opengl-files -no-x-check
4.7. 验证英伟达显卡是否安装成功:nvidia-smi
2. 安装 cuda 12.2:
1. 下载 cuda_12.2.0_535.54.03_linux.run 并安装:
打开 https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local,
依次选择 Linux--》x86_64--》ubuntu-->22.04-->runfile(local),( ps:不能选择 deb(local),因为 cuda自带了显卡驱动,而且自带的还不好使,而选择 deb(local)的安装方式,安装过程中无法对
cuda自带的显卡驱动进行取消勾选安装的操作,而使用 runfile(local) 方式安装就可以勾选掉cuda自带显卡驱动 )下面会出现如下2行命令:
bash
复制代码
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run
复制代码
依次执行该2行命令
2. 安装过程中的几个选项如何选择:
2.1. "Existing package manager installation of the driver found. It is stronglyrecommended that you remove this before continuing."
提示让选择 Abort 还是 Continue 时,选择 Continue
2.2. "CUDA Installer...." 的地方将 [X]Driver 中的 X取消勾选,点击 Install
3. 配置环境变量:
3.1. vim ~/.bashrc
3.2. 在文件最后添加如下两行:
export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
3.3. source ~/.bashrc
4. 验证是否安装成功:nvcc -V
可能遇到的问题:
遇到 Package 'libtinfo5' 报错得解决方案:
libtinfo5软件包在Ubuntu 23.10的默认存储库中尚不可用。我们可以通过为Ubuntu 23.04(Lunar Lobster)添加universe回购协议来安装它。
即 sudo vim /etc/apt/sources.list,添加此行 "deb http://archive.ubuntu.com/ubuntu/ lunar universe"
3. 安装 安装cuDNN:
1. 下载 cudnn-local-repo-ubuntu2204-8.9.6.50_1.0-1_amd64.deb:
下载地址:https://developer.nvidia.com/rdp/cudnn-archive--》Download cuDNN v8.9.6 (November 1st, 2023), for CUDA 12.x--》Local Installer for Ubuntu22.04 x86_64 (Deb)
2. sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.6.50_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
3. 更新APT仓库并安装cuDNN运行时库、开发库和示例库:
bash
复制代码
sudo apt-get update
sudo apt-get install libcudnn8=8.9.6.50-1+cuda12.2
sudo apt-get install libcudnn8-dev=8.9.6.50-1+cuda12.2
sudo apt-get install libcudnn8-samples=8.9.6.50-1+cuda12.2
复制代码
4. 验证是否安装成功:
1. cp -r /usr/src/cudnn_samples_v8/ $HOME
2. cd $HOME/cudnn_samples_v8/mnistCUDNN
3. make clean && makecp
如果报大概如下错:
- 如果编译报错fatal error: FreeImage.h: No such file or directory
1 | #include "FreeImage.h"
| ^~~~~~~~~~~~~
请执行命令 "sudo apt-get install libfreeimage3 libfreeimage-dev" 后重新执行 "make clean && make"
4. ./mnistCUDNN
#显示“Test passed!”或类似的消息,表示cuDNN运行正常。
4. 安装 tensorrt 8.6.1.6:
4.1. 下载 TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz 安装包
4.2. 解压:tar xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
4.3. 配置环境变量:
4.3.1.vim ~/.bashrc,将如下一行添加到该文件最后一行:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/soft/TensorRT-8.6.1.6/lib
4.3.2. source ~/.bashrc
4.4. 为了避免其它软件找不到 TensorRT 的库,建议把 TensorRT 的库和头文件添加到系统路径下
# TensorRT路径下
bash
复制代码
4.4.1. cd /data/soft/TensorRT-8.6.1.6
4.4.2. sudo cp -r ./lib/* /usr/lib
4.4.3. sudo cp -r ./include/* /usr/include
复制代码
4.5. 测试使用 tensorRT 进行推理:
1. 下载工程:git clone https://github.com/shouxieai/tensorRT_Pro.git( 只使用 tensorRT 推理的话,只使用其中的 ./example-simple_yolo )
2. 实际使用,只需要修改 src 下 main.cpp 的主函数的参数
3. main中调用的 test 函数:
最后一个参数为 ONNX 模型的文件名,比如yolov7.onnx就输入yolov7即可,该 ONNX 模型文件需要放到可执行文件同目录下。
第二个参数为指定模型的运算精度, 可以为SimpleYolo::Mode::FP32或者SimpleYolo::Mode::FP16。更低的运算精度部署后速度更快。
4. 再修改下 CMakeLists.txt 文件:
主要需要修改下面几个参数,对于 CUDA_GEN_CODE 参数,Jetson NX 和 Jetson AGX 都为"-gencode=arch=compute_72,code=sm_72"。
# 如果你是不同显卡,请设置为显卡对应的号码参考这里:https://developer.nvidia.com/zh-cn/cuda-gpus#compute
set(CUDA_GEN_CODE "-gencode=arch=compute_72,code=sm_72")
# 如果你的opencv找不到,可以自己指定目录
set(OpenCV_DIR "/usr/include/opencv4/")
set(CUDA_DIR "/usr/local/cuda-10.2")
5. 然后编译运行即可:
1. mkdir build
2. cd build
3. cmake ..
4. make -j8 ( ps:-j8 告诉 make 同时运行最多8个编译任务 )
可能会报 "gcc later than 12 ... nvcc ..." 之类的错误,是因为 cuda12.2需要低于12版本的 gcc,可使用如下方式修复:
1. sudo apt-get install gcc-10
2. sudo apt-get install g++-10
3. sudo ln -s /usr/bin/gcc-10 /usr/local/cuda/bin/gcc
4. sudo reboot ( 重启电脑 )
5. cd ../workspace
6. ./pro
5. 安装 gstreamer 1.20.3:
ubuntu23 默认已经安装了 gstreamer 1.22.5,可以使用 "gst-inspect-1.0 --version" 或者 "gst-inspect-1.0 --version" 验证:
5.1. gst-launch-1.0 --version:
gst-launch-1.0 version 1.22.5
GStreamer 1.22.5
5.2. gst-launch-1.0 --version:
gst-launch-1.0 version 1.22.5
GStreamer 1.22.5
测试 gstreamer 是否可用:
1. gst-inspect-1.0 | grep h264:
rtp: rtph264depay: RTP H264 depayloader
rtp: rtph264pay: RTP H264 payloader
typefindfunctions: video/x-h264: h264, x264, 264
2. gst-inspect-1.0 | grep aac:
audioparsers: aacparse: AAC audio stream parser
typefindfunctions: audio/aac: aac, adts, adif, loas
6. Ubuntu系统安装opencv( 参考博客:https://blog.csdn.net/LLL_666_/article/details/136763114 ):
1. 下载 opencv 源码包:https://opencv.org/releases/--》OpenCV – 4.9.0--》Sources
2. 解压:unzip opencv-4.9.0.zip
3. 使用 cmake 安装 opencv:
1. cd opencv-4.9.0
2. 安装依赖库:sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev
3. mkdir build
4. cd build
4. sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
5. sudo make -j4 ( ps:-j4 告诉 make 同时运行最多4个编译任务 )
6. sudo make install
4. sudo vim /etc/ld.so.conf,将 "/usr/loacal/lib" 加在最后( 不用换行,直接加在最后 )
5. sudo ldconfig ( ps:更新动态链接库缓存 )
6. sudo vim /etc/bash.bashrc,在最后加入如下2行:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
7. source /etc/bash.bashrc ( ps:source /etc/bash.bashrc 和 ~/.bashrc 的区别是,前者是全局的配置文件,后者是当前用户的配置文件 )
8. 查看opencv安装情况:pkg-config opencv --modversion
出现 "Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found" 错误的解决方案:
1. cd /usr/local/lib
2. sudo mkdir pkgconfig
3. cd pkgconfig
4. sudo touch opencv.pc
5. sudo vim opencv.pc,将如下文本复制进此文件:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version:4.0.1
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
6. export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
7. 再次执行 "pkg-config opencv --modversion" 便不会报错了
9. 测试 opencv 是否可用:
测试案例1:
1. cd /data/soft/opencv-4.9.0/samples/cpp/example_cmake
2. cmake .
3. make
4. ./opencv_example
测试案例2:
1. g++ -o test_opencv test_opencv.cpp -L /usr/local/lib/ -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
2. ./test_opencv
看是否成功生成灰度图
7. 安装最新版 nvidia container toolkit( 参考博客:https://blog.csdn.net/weixin_55674987/article/details/139867794 ):
离线安装方式:
1. 提起现在好4个安装包( 下载地址:https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu20.04/amd64/ ):
libnvidia-container1_1.13.3-1_amd64.deb
libnvidia-container-tools_1.13.3-1_amd64.deb
nvidia-container-toolkit-base_1.13.3-1_amd64.deb
nvidia-container-toolkit_1.13.3-1_amd64.deb
2. 开始安装( 这4个包有依赖关系,安装顺序不能乱 ):
1. sudo dpkg -i ./libnvidia-container1_1.13.3-1_amd64.deb ok
2. sudo dpkg -i ./libnvidia-container-tools_1.13.3-1_amd64.deb ok
2. sudo dpkg -i ./nvidia-container-toolkit-base_1.13.3-1_amd64.deb ok
3. sudo dpkg -i ./nvidia-container-toolkit_1.13.3-1_amd64.deb ok
4. 重启 docker 服务:
sudo systemctl restart docker
5. 测试 nvidia container toolkit 是否安装成功:
#### Test nvidia-smi with the latest official CUDA image
$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi
# Start a GPU enabled container on two GPUs
$ docker run --gpus 2 nvidia/cuda:9.0-base nvidia-smi
# Starting a GPU enabled container on specific GPUs
$ docker run --gpus '"device=1,2"' nvidia/cuda:9.0-base nvidia-smi
$ docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:9.0-base nvidia-smi
# Specifying a capability (graphics, compute, ...) for my container
# Note this is rarely if ever used this way
$ docker run --gpus all,capabilities=utility nvidia/cuda:9.0-base nvidia-smi
一些工具命令:
1. 查看 cuda 版本:
1.1. nvcc --version
1.2. nvcc -v
1.3. cat /usr/local/cuda/version.txt
2. 查看英伟达显卡驱动版本:nvidia-smi
3. 查看英伟达显卡驱动信息:
使用 lspci 命令可以查看显卡的型号,而 nvidia-smi 命令( 如果已安装 NVIDIA 驱动 )可以提供显卡的详细信息,包括驱动版本。
# lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3090] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)