目录
- Ubuntu20.04 软件安装大全
- 前言
- 1. Windows和Ubuntu双系统安装
- 1.1 下载Ubuntu系统镜像
- 1.2 磁盘分区
- 1.3 GPT分区安装Ubuntu
- 1.4 系统完成后的一些设置
- 1.5 遇到的一些小bug
- 2. 换源
- 2.1 apt换源
- 2.2 pip换源
- 3. 显卡驱动安装
- 3.1 卸载显卡驱动
- 3.2 准备工作
- 3.3 驱动安装
- 3.4 验证
- 4. VScode安装
- 4.1 安装包下载
- 4.2 插件下载
- 4.3 常用设置
- 5. 百度网盘安装
- 6. Google Chrome安装
- 6.1 安装包下载
- 6.2 常用设置
- 7. 截图工具安装
- 7.1 安装
- 7.2 配置
- 7.3 设置快捷方式
- 8. Typora安装
- 8.1 vim安装
- 8.2 Typora安装
- 8.3 偏好设置
- 8.4 主题
- 9. Pycharm安装
- 9.1 安装包下载
- 10. Anaconda安装
- 10.1 安装包下载
- 10.2 首次激活环境遇到的问题
- 10.3 conda常用指令
- 11. Netron安装
- 12. 编译OpenCV4.6.0
- 12.1 安装依赖项
- 12.2 下载OpenCV 4.6.0源文件
- 12.3 Cmake配置和编译OpenCV
- 12.4 环境配置
- 12.5 验证
- 12.6 问题解决(与Anaconda冲突)
- 13. CUDA安装
- 13.1 准备工作
- 13.2 CUDA下载
- 13.3 CUDA安装
- 13.4 配置环境变量
- 13.5 验证
- 13.6 小结
- 14. cuDNN安装
- 14.1 cuDNN下载
- 14.2 cuDNN安装
- 14.3 小结
- 15. TensorRT安装
- 15.1 TensorRT下载
- 15.2 TensorRT安装
- 15.3 配置环境变量
- 15.4 验证
- 15.5 小结
- 16. 编译protobuf
- 16.1 安装
- 16.2 环境变量的配置
- 17. Pytorch安装
- 17.1 介绍
- 17.2 准备工作
- 17.3 安装
- 17.4 验证
- 18. 编译OpenBLAS
- 18.1 准备工作
- 18.2 编译
- 18.3 验证
- 19. 编译FFmpeg
- 19.1 下载FFmpeg
- 19.2 编译FFmpeg
- 19.3 设置环境变量
- 19.4 验证
- 19.5 卸载FFmpeg
- 20. NVIDIA VIDEO_CODEC_SDK
Ubuntu20.04 软件安装大全
前言
最近在自己主机上安装了双系统,记录下自己在Ubuntu20.04系统中安装的软件及遇到的问题,方便下次查看,安装的软件大多是跟深度学习相关的以及个人平时习惯使用的,仅供自己参考。
这里分享下博主安装过程中的软件安装包下载链接[pwd:yolo]🚀🚀🚀
1. Windows和Ubuntu双系统安装
参考自UP主机器人工匠阿杰的Windows和Ubuntu双系统的安装和卸载
描述:安装流程非常详细,UP主演示的是笔记本,而博主是主机,在BIOS界面相差较大,安装完成后存在一个小bug,但不影响使用。下面只说下流程中博主操作不同的地方,大家务必根据自己的实际情况来。
1.1 下载Ubuntu系统镜像
博主并没有选择从Ubuntu官网下载,而是选择从清华大学开源软件镜像站下载,不用访问外网,速度快。清华大学开源镜像站Ubuntu-releases网址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/
选择你想要安装的Ubuntu版本(比如20.04),点击下载.iso
为结尾的蓝色字体即可(比如ubuntu-20.04.6-desktop-amd64.iso)
如果不会操作的可查看这篇Ubuntu系统下载(清华大学开源软件镜像战)博客的图文描述
1.2 磁盘分区
博主选择的是分区方案一,将/home挂载节点和/根挂载节点分开。
博主有两块硬盘,一个3TB的机械和一个1TB的的固态,我从机械硬盘中压缩了500GB的空间(即512,000MB)和固态硬盘中压缩了250GB的空间(即256,000MB),我将固态硬盘的250个GB用做引导区、内存交换分区以及/根挂载节点,将500GB的空间用做/home挂载点(主要我感觉/根挂载节点像系统盘,所以分配的是固态,而/home挂载点像非系统盘,所以分配的是机械)
博主分区秉承一个原则,能多分就多分,所以和UP主的分配不同(根据自己实际情况来)。具体如下:
分区 | 大小 |
---|---|
引导区 | 5GB(5,120MB) |
内存交换分区 | 40GB(40,960MB) |
/根挂载节点 | 205GB(209,920MB) |
/home挂载节点 | 500GB(512,000MB) |
1.3 GPT分区安装Ubuntu
博主是微星主板(F11按键进入启动选项),按键盘的Delete按键进入BIOS,在BIOS中修改两个地方,一个是将修改启动项目让U盘作为启动项,一个是关闭安全引导
- 在BIOS的主界面中,有一个Boot Priority,可以看到有一个USB和一个硬盘图标是亮着的,将亮着的USB拖到最前面即可
- 可以参考UP主硬件茶谈的WIN10系统安装教程,将U盘作为启动项
- 在BIOS的主界面中,有一个SETTINGS,点击进去,选择安全,选择安全启动,禁止。(BIOS中的安全引导一定要关闭,不然后续显卡驱动无法安装)
- 退出保存更改即可
1.4 系统完成后的一些设置
启动菜单的默认项
博主并没有选择设置
时间同步
打开一个终端,执行如下指令:
sudo apt install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc
1.5 遇到的一些小bug
在博主使用的过程中主要存在两个bug
bug1:Ubuntu重启后无法进入到grud的选择界面,直接进到Ubuntu界面,但是关机再开机可以
解决方案:在Ubuntu中打开grub,将Timeout时间修改为20,具体指令如下:
sudo gedit /etc/default/grub
将第8行的GRUB_TIMEOUT
修改为20
GRUB_TIMEOUT=20
保存并退出,更新配置,指令如下:
sudo update-grub
重启后即可进入到grub界面
bug2:Ubuntu重启后分辨率偶尔会变得非常小,图标变得非常大
解决方案:未解决,只能通过重启
2. 换源
参考自Ubuntu配置apt安装源为清华源、Linux下配置pip为国内清华源
描述:安装软件时最好先进行换源,确保后续软件在下载过程中不会存在网络问题,apt换源博主是直接在Ubuntu的设置中完成的,也可以按照上面的方式进行修改,配置流程按照上文走没有问题,下面简单过一遍
2.1 apt换源
点击系统中的设置(Settings),点击最下面的关于(About),点击Software Updates
在第一栏Ubuntu Software页面中,前四个main,universe,restricted,multiverse都打勾上,找到Download from,选择=>Others=>China=>mirrors.aliyun.com(阿里源)或者mirrors.tuna.tsinghua.edu.cn(清华源),点击确认,输入自己的密码,完成。
换源成功后打开终端,执行如下语句:
cat /etc/apt/sources.list
在终端上会打印apt的源,可以看到原始的Ubutnu的源会被替换成之前选择的阿里源或者清华源
2.2 pip换源
首先打开终端使用小写的ll
查看所有隐藏文件夹和文件,看是否存在**.pip**文件夹,如果没有,则使用下面命令创建:
mkdir .pip
cd .pip/
然后通过vim pip.conf
创建配置文件,指令如下:
sudo vim pip.conf
添加如下内容(这里添加清华源,其他的也可以)
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
最后Esc,:wq保存并退出,结束配置
3. 显卡驱动安装
参考自:拯救者Y9000K2021H在ubuntu18.04安装显卡驱动、Ubuntu卸载Nvidia驱动和安装最新驱动
描述:显卡驱动安装主要参考文章1,流程按照上面走没有问题,博主显卡为RTX3060,切记在安装显卡驱动的时候要在BIOS中将安全启动关闭,具体操作可看1.3小节内容
3.1 卸载显卡驱动
进行该步目的是防止系统中已经存在旧版本的驱动,或者存在没有完全安装成功的驱动。
在终端输入如下指令:
sudo apt-get purge nvidia*
3.2 准备工作
点击系统中的设置(Settings),点击最下面的关于(About),点击Software Updates
- 在第一栏Ubuntu Software页面中,前四个main,universe,restricted,multiverse都打上勾,找到Download from,选择=>Others=>China=>mirrors.aliyun.com,点击确认,输入自己的密码,完成。(该步主要是换源,和之前的apt换源一致)
- 在第二栏Other Software页面中,将Canonical Partners勾选上
- 在第三栏Updates页面中,将Automatic check for updates修改为Never
3.3 驱动安装
本次采用的方式是使用图形驱动程序PPA存储库完成NVIDIA驱动程序的快捷安装工作。
1.将ppa存储库添加到当前系统当中,指令如下:
sudo add-apt-repository ppa:graphics-drivers/ppa
2.更新软件列表,指令如下:
sudo apt-get update
3.查看检测到的驱动程序,指令如下,推荐下载带有recommended标志的驱动
sudo ubuntu-drivers devices
4.根据第3步检测到的驱动,选择一个合适的版本号(博主选择的是510),安装指令如下:
sudo apt install nvidia-driver-510
执行完成之后执行命令sudo reboot重启
3.4 验证
重新启动之后在命令输入nvidia-smi
,如果出现对应的驱动版本和CUDA版本说明安装成功。
同时可以点击设置(Settings),点击最下面的关于(About),查看下Graphics这一栏是否已经变为NVIDIA Corporation,如果是,代表安装全部完成。
4. VScode安装
描述:Ubuntu20.04安装VScode较简单,按照下面步骤来就行
4.1 安装包下载
去官网选择Ubuntu的.deb包下载即可,外网下载慢,需要代理,大家可以在Windows下面通过代理下载好后传到Ubuntu下面。
VScode官网下载链接:https://code.visualstudio.com/Download
先cd到安装包路径下,然后进行安装即可,指令如下:
cd Downloads
sudo apt get install ./code_1.77.3-1681292746_amd64.deb
sudo dpkg -i ./code_1.77.3-1681292746_amd64.deb
4.2 插件下载
大家根据自己的需求来就行,下面是博主下载的一些插件
- Chinese(Simplified):中文简体
- python:Python语言扩展
- C/C++:C/C++语言扩展
- Remote Development:远程SSH
- vscode-cudacpp:CUDA扩展
- CMake Tools:CMakeLists.txt扩展
4.3 常用设置
通过Ctrl+鼠标滚动改变字体大小
打开设置 => 输入"editor.mouseWheelZoom" => 勾选上
5. 百度网盘安装
描述:经常需要将Windows和Ubuntu的文档相互传递,通过U盘有时候不方便,还是选择安装个百度网盘,安装流程较简单,按照下面的步骤就行
去官网选择Linux的.deb包下载即可
百度网盘官网下载链接:https://pan.baidu.com/download#linux
先cd到安装包路径下,然后进行安装即可,指令如下:
cd Downloads
sudo dpkg -i ./baidunetdisk_4.17.7_amd64.deb
6. Google Chrome安装
参考自如何在 Ubuntu 20.04 上安装 Google Chrome 网络浏览器
描述:博主习惯使用Chrome浏览器,有时候可以打开一些关闭的标签页,有时可以收藏一些标签等比较方便的功能,安装流程按上面的文章走即可,下面简单过一遍
6.1 安装包下载
进入官网,点击下载Chrome,选择64位.deb(适用于Debian/Ubuntu)
Google Chrome官网下载链接:https://www.google.cn/intl/zh-CN/chrome/
先cd到安装包路径下,然后进行安装即可,指令如下:
sudo apt install ./google-chrome-stable_current_amd64.deb
6.2 常用设置
Chrome标签页设置
添加的标签页并没有在菜单栏中显示,可根据下面的方法修改
点击右上角的三个点,选择Booksarks,点击Show bookmarks bars即可
搜索引擎选择设置
每次搜索的时候,默认使用Google搜索引擎,由于没有代理,所以无法使用,修改为bing,修改方法如下
点击右上角的三个点,选择Settings,选择Search engine,将Google选项修改为Bing
简体中文设置
未解决
博主尝试选择Settings中的Languages,在Preferred languages中Add languages添加简体中文,并Move to the top,然而并不管用
7. 截图工具安装
参考自snipaste替代品 & Linux截图解决方案-截图、贴图工具Flameshot
描述:在记录问题时经常需要截图,而Windows的截图贴图神器snipaste在Linux下并不支持,所以找了一个替代品Flameshot,安装流程可按照上面的文章走,下面简单介绍下
7.1 安装
Ubuntu下安装非常简单,打开终端执行如下指令:
sudo apt install flameshot
7.2 配置
在Show Application中找到flameshot,点击图标打开(打开后右上角会出现对应小图标),点击小图标,选择Configuration配置,大家按照上文的说明和自己喜好自行配置即可。
博主在General选项中,关闭了show help message
帮助信息并打开了Launch at startup
开机自启动选项。
7.3 设置快捷方式
将截图局部快捷键设置为ctrl+alt+a
在Settings => Keyboard Shorcuts中,点击最下方的加号,添加Custom Shortcus(自定义快捷键)
-
1.快捷键名词(Name):自定义即可
-
2.命令(Command):如下,–path后面跟的是保存的截图路径
flameshot gui --path /home/jarvis/Pictures/Screenshots
-
3.快捷键(Shortcut):将局部截图快捷键设置为
ctrl+alt+a
8. Typora安装
参考自Linux免费安装Typora
描述:经常需要记录一些问题,非常喜欢Typora这款Markdown编辑器,可以选择去官网下载最新版本并购买激活,博主这里使用的是老版本免费的Typora,够用了,安装流程按照上文走就行,这里主要介绍下主题和个人的一些设置
8.1 vim安装
vim安装指令如下:
sudo apt-get updatesudo apt-get install vim
8.2 Typora安装
将安装包下载好后,cd到安装包目录下进行安装,指令如下:
cd Downloads
tar xzvf Typora-linux-x64.tar.gz
cd bin
sudo cp -ar Typora-linux-x64 /opt
cd /opt/Typora-linux-x64/
#启动
./Typora
为了在任意位置启动,我们设置下环境变量
sudo vim ~/.bashrc
打开.bashrc配置文件,添加:
#Typora环境变量
export PATH=$PATH:/opt/Typora-linux-x64
source一下,让配置生效
source ~/.bashrc
OK了,可以在任意位置启动typora
./Typora
添加桌面快捷方式
cd /usr/share/applications
sudo vim typora.desktop
添加以下内容:
[Desktop Entry]
Name=Typora
Comment=Typora
Exec=/opt/Typora-linux-x64/Typora
Icon=/opt/Typora-linux-x64/resources/app/asserts/icon/icon_256x256.png
Terminal=false
Type=Application
Categories=Developer;
重启电脑就ok了
右键打开
sudo gedit ~/.config/mimeapps.list
添加如下内容:
text/markdown=typora.desktop
8.3 偏好设置
有一些设置可以根据个人习惯调整
- 1.语言设置
- File(文件) => Preference(偏好设置) => General(通用) => Language(语言) => 简体中文
- 重启Typora
- 2.状态栏显示
- 文件 => 外观 => 状态栏 => 显示状态栏(勾选上)
- 文件 => 外观 => 侧边栏 => 侧边栏的大纲视图允许折叠和展开(勾选上)
- 3.拼写检查
- 文件 => 编辑器 => 拼写检查 => 不使用拼写检查
- 4.Markdown
- 文件 => Markdown => Markdown 扩展语法(全勾选上)
- 文件 => Markdown => 代码块 => 显示行号(勾选上)
- 重启Typora
8.4 主题
下载
主题下载自https://github.com/liangjingkanji/DrakeTyporaTheme
主题使用
-
通过文件 => 偏好设置 => 外观 => 主题 => 打开主题文件夹 打开theme目录
-
下载好的压缩包解压后将目录内的所有文件复制到theme目录
-
重启Typora,选择菜单栏 => 主题即可
字体大小设置
- 通过文件 => 偏好设置 => 外观 => 主题 => 打开主题文件夹 打开theme目录
- 在theme目录中找到drake文件夹下的font.css用于配置自定义字体
- 在font.css最后有字体大小、行间距等配置,根据自己喜好设置即可
- 博主在这里将–text-size大小 由12px修改为18px
- 重启Typora
9. Pycharm安装
参考自ubuntu20.04安装Pycharm2021
描述:Pycharm安装较简单,按照上文的步骤就行
9.1 安装包下载
进入Pycharm官网下载Linux版本社区版本的.tar.gz压缩包
Pyacharm官网下载链接:https://www.jetbrains.com/pycharm/download/#section=linux
先cd进入到安装包目录,先解压,指令如下:
cd Downloads
tar -xzf pycharm-community-2023.1.tar.gz
创建文件夹
sudo mkdir /opt/pycharm
移动文件夹
cd download
sudo mv pycharm-community-2023.1.tar.gz /opt/pycharm
安装
sh /opt/pycharm/pycharm-community-2023.1.tar.gz/bin/pycharm.sh
将I confirm that I have read and ...
勾选上,点击continue即可
创建桌面图标
点击右下角的设置,点击Create Desktop Entry创建桌面图标
10. Anaconda安装
参考自从零开始搭建深度学习环境:CUDA+Pyotrch+Anaconda+VScode
描述:Anaconda安装较简单,按照上面视频的步骤就行,下面简单过一遍
10.1 安装包下载
进入Anaconda官网下载Linux版本社区版本的.sh文件
Anaconda官网下载链接:https://www.anaconda.com/products/distribution#Downloads
首先cd到安装包目录下,然后安装,指令如下:
cd Downloads
bash Anaconda3-2023.03-Linux-x86_64.sh
添加环境变量
sudo gedit ~/.bashrc
末尾添加(xxx修改为你的用户名)
export PATH="/home/xxx/anaconda3/bin:$PATH"
source
source ~/.bashrc
10.2 首次激活环境遇到的问题
但你执行conda activate base
会出现如下错误:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run$ conda init <SHELL_NAME>Currently supported shells are:- bash- fish- tcsh- xonsh- zsh- powershellSee 'conda init --help' for more information and options.IMPORTANT: You may need to close and restart your shell after running 'conda init'.
原因在于当前使用的shell没有配置好conda activate
需要先使用conda init shell
初始化,然后就可以正常使用了,如下所示:
conda init shell
关闭终端重新打开即可
10.3 conda常用指令
conda info --envs // 查看当前环境
conda create -n myenv python=3.7 // 创建新环境
conda activate myenv // 激活环境
conda clean -a // 清除无用包
pip list // 查看已安装的包(只有当前虚拟环境的包)
conda list // 查看已安装的包(除了当前虚拟环境下的,还有关联环境的包)
pip install numpy // 安装numpy
python // 检查安装的numpy
>>> import numpy as np
11. Netron安装
参考自如何在Linux上快速使用Netron模型可视化工具
描述:经常需要查看ONNX网络结构,安装非常简单,使用有点麻烦
去Github下载对应的Linux版本,后缀为.AppImage文件
GitHub链接:https://github.com/lutzroeder/netron
将下载好的AppImage文件赋予权限并直接运行
chmod a+x Netron-5.5.3.AppImage
./Netron-5.5.3.AppImage
它并不能像Windows一样直接点开ONNX模型,必须先进入对应的目录在终端执行./Netron-5.5.3.AppImage
,然后将对应的ONNX模型直接拖过来就行。
12. 编译OpenCV4.6.0
参考自Ubuntu 20.04搭建OpenCV 4.5.0 & C++环境、Ubuntu 安装 OpenCV 4.5.5、关于安装opencv编译报错:runtime library * hidden by 等若干问题、cmake编译出错hidden by files
描述:注意!!!如果你在编译opencv之前安装了annaconda,请先看问题解决(与Anaconda冲突),除了上述冲突问题之外,没有其他问题,按照上文的操作即可。博主主要参考上文1中的opencv安装(即前3项)以及上文2中的opencv环境配置和验证。下面简单过一遍整个编译流程
12.1 安装依赖项
1.安装g++,cmake,make,wget,unzip,若已安装,此步跳过
sudo apt install g++
sudo apt install cmake
sudo apt install make
sudo apt install wget unzip
2.安装opencv依赖的库
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
3.安装一些可选的库
# python3支持(首次安装了python的库,但make报错了,之后删了这两个库,若不使用python,建议不安装)
sudo apt install python3-dev python3-numpy
# streamer支持
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
# 可选的依赖
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
12.2 下载OpenCV 4.6.0源文件
可以在官网下载相应版本的OpenCV,主要有Source和GitHub两种方式下载
1.Source:https://opencv.org/releases/
点击Source进行下载,外网访问慢,可在Windows下通过代理下载后传到Linux;也可通过我一开始提供的下载链接进行下载
2.Github下载方式:
# 安装4.6.0版本
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.6.0.zip
# 安装最新版本
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
下载完成后,解压到主目录,将解压后的文件重命名为opencv
12.3 Cmake配置和编译OpenCV
1.在主目录下打开终端
2.进入到下载好的opencv目录,新建并进入目录build
cd opencv
mkdir build
cd build
3.使用cmake配置opencv
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
4.用make进行编译
make -j24
5.用make安装
sudo make install
默认安装路径如下:
/usr/local/bin
- executable files/usr/local/bin
- libraries (.so)/usr/local/cmake/opencv4
- cmake package/usr/local/include/opencv4
- headers/usr/local/share/opencv4
- other files (e.g. trained cascades in XML format)
12.4 环境配置
动态库配置
sudo gedit /etc/ld.so.conf.d/opencv.conf
添加
/usr/local/lib
保存后,终端内执行
sudo ldconfig
更新PKG_CONFIG_PATH
sudo gedit /etc/bash.bashrc
文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存后,终端执行
source /etc/bash.bashrc
sudo updatedb
若出现
sudo: updatedb: command not found
,执行sudo apt install mlocate
后再次操作即可。
12.5 验证
pkg-config
在终端输入如下指令,会显示对应的opencv版本4.6.0
pkg-config --modversion opencv4
程序验证,代码如下
test.cpp
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>using namespace cv;
using namespace std;/*** 读写与显示* @return*/
int main() {cout << CV_VERSION << endl;Mat src = cv::imread("test.png", IMREAD_GRAYSCALE);if (src.empty()) {cout << "Could not load image\n" << endl;return -1;}namedWindow("gray", WINDOW_AUTOSIZE);imshow("gray", src);waitKey(0);return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(test)
find_package(OpenCV REQUIRED)
add_executable(test test.cpp)
target_link_libraries(test ${OpenCV_LIBS})
编译运行
cmake .
make
./test
运行后屏幕会显示目录下test.png
的灰度图像
12.6 问题解决(与Anaconda冲突)
特别注意!!!在安装完成anaconda之后再编译opencv时,cmake后会出现如下提示信息,导致最终编译不通过
错误信息如下:
CMake Warning at cmake/OpenCVUtils.cmake:1547 (add_library):Cannot generate a safe runtime search path for target opencv_imgcodecsbecause files in some directories may conflict with libraries in implicitdirectories:runtime library [libpng16.so.16] in /usr/lib/x86_64-linux-gnu may be hidden by files in:/home/jarvis/anaconda3/libruntime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:/home/jarvis/anaconda3/libruntime library [libtiff.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:/home/jarvis/anaconda3/lib
问题分析:安装anaconda的时候造成了之前的编译的库重新编译的时候,报.so文件被隐藏的问题,这是cmake在找库时的算法问题
问题解决:将anaconda/lib修改为anaconda/lib_bk,在opencv中重新创建build并cmake,等待opencv编译完成之后,再改回来即可
切记!!!在编译完opencv后,将anaconda/lib_bk重新修改为lib
13. CUDA安装
参考自linux安装tensorflow,cuda,cudnn安装,pytorch兼容,RTX30系列GPU兼容cuda
描述:本来想体验下kiwi一键安装CUDA+cuDNN+TensorRT的,但现在还处于内测阶段,还未公测,等kiwi公测吧,只能先自己来了。CUDA的安装按照上面视频的操作来就行,没有问题,下面简单过一遍流程。切记!!!CUDA的安装依赖于显卡驱动的安装,请务必安装完显卡驱动后再来安装CUDA
13.1 准备工作
首先确定我们要安装的CUDA版本,它是根据你的驱动程序版本来安装的,打开终端输入如下指令:
cat /proc/driver/nvidia/version
# 或者
nvidia-smi
通过上面两种方法都可以获取nvidia-driver的版本,如下图所示,博主的驱动程序版本是510.108.03,记住这个数字,后续会用到
我们知道了驱动版本后就需要确认CUDA下载的版本了,查看CUDA版本与驱动版本对应关系见下面的链接(查看表3即可):
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
下面是表3的部分截图,左边一列是CUDA版本,后面两列分别对应Linux下和Windows下驱动版本的要求,GA = General Availability,通用版本,指软件的通用版本(可以理解为稳定版本吧🤔),后续我们就安装GA版本,那么怎么查看自己要下载的CUDA版本呢?看对应的驱动要求就像,比如说在下面的红色框内就是我想要下载的CUDA版本,即CUDA 11.6 GA,驱动版本要求大于等于510.39.01,而我的驱动版本之前提到过是510.108.03,显然是满足要求的。根据表中来看,我还可以选择CUDA 11.5GA、CUDA 11.4等CUDA版本,因为我的驱动版本是满足要求的。具体选择那个根据个人情况来就行。
13.2 CUDA下载
确认了CUDA下载的版本后我们就可以去NVIDIA官网进行下载了,博主需要下载的是CUDA 11.6 GA,
NVIDIA官网CUDA下载链接:https://developer.nvidia.com/cuda-toolkit-archive
打开上面的链接后,会出现如下的界面,点击你想要下载的CUDA Toolkit就行,比如博主想要下载CUDA 11.6 GA,点击下面红色框中的CUDA Toolkit 11.6.0即可。(为什么点击11.6.0而不是其它的11.6版本呢?其实大家可以从上面的版本对应图可知CUDA 11.6 Update 2对应CUDA Toolkit 11.6.2;CUDA 11.6 Update1对应CUDA Toolkit 11.6.1;CUDA 11.6 GA对应CUDA Toolkit 11.6.0)
点进去之后选择目标平台,如下图所示,博主这里选择Linux系统、x86_64架构、Ubuntu、20.04版本、runfile(local)安装方式
选择完成后通过wget后面的地址就可以下载了,建议将网址复制到浏览器中下载,访问的是外网,下载慢,最好是开代理
13.3 CUDA安装
首先检查下前面下载的安装包,看下安装包名,博主下载的安装包名为cuda_11.6.0_510.39.01_linux.run,首先看11.6.0是CUDA版本没有问题,其次看510.39.01是要求的驱动最小版本也没有问题,最后是linux即安装的系统也没有问题,检查完毕后下面我们开始安装工作👨🏭
首先cd到安装包所在目录,执行如下指令:
sudo sh cuda_11.6.0_510.39.01_linux.run
输入密码后等待一段时间,出现下图,键盘按键上下移动,Enter按键选择确认,我们选择Continue
选择完成后跳转到如下界面,在最下面输入accept
之后跳转到如下界面,选择你想要安装的选项,
我们只考虑安装CUDA Toolkit 11.6,其他均取消(空格键取消),最后的界面如下,选择到Install,确认(等待终端一段时间,这个时候终端没有任何显示,不要关闭!!!)
最后出现如下界面,表示安装成功
安装完成之后的路径:
- /usr/local/cuda-11.6:Toolkit
- /usr/local/cuda-11.6/include:头文件
- /usr/local/cuda-11.6/lib64:库文件
13.4 配置环境变量
CUDA安装完成之后需要添加一下环境变量,输入如下指令打开配置文件:
sudo gedit ~/.bashrc
在最末尾添加如下内容(将CUDA版本替换成你自己的)
export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
点击保存退出,然后刷新一下
source ~/.bashrc
13.5 验证
环境变量配置完成后,在终端输入如下指令,有对应的输出代表安装成功:
nvcc --version
13.6 小结
CUDA的安装流程其实并不复杂,难点在于两个步骤,一是通过你的显卡驱动找到对应的CUDA版本,二是能否将外网的CUDA安装包顺利下载下来(需要代理)
14. cuDNN安装
参考自linux安装tensorflow,cuda,cudnn安装,pytorch兼容,RTX30系列GPU兼容cuda
描述:本来想体验下kiwi一键安装CUDA+cuDNN+TensorRT的,但现在还处于内测阶段,还未公测,等kiwi公测吧,只能先自己来了。cuDNN的安装按照上面视频的操作来就行,没有问题,下面简单过一遍流程。切记!!!cuDNN的安装依赖于CUDA的安装,请务必安装完CUDA后再来安装cuDNN
14.1 cuDNN下载
cuDNN的版本选择是根据CUDA版本来的,在前面CUDA的安装中,我们选择的是CUDA 11.6.0版本,依据此我们来安装cuDNN
NVIDIA官网cuDNN下载链接:https://developer.nvidia.com/rdp/cudnn-archive
打开上面的链接,会出现如下的界面(可能需要登陆,可以先注册一个NVIDIA账号,也不麻烦)
根据你的CUDA版本选择对应的cuDNN即可,CUDA 11.x代表CUDA11版本的都支持,博主这里选择的是Download cuDNN v8.4.0 (April 1st, 2022), for CUDA 11.x,如下所示,点击之后选择对应的平台安装包下载就行,如下面红色框所示,选择的是Linux,Ubuntu,x86_64的Tar安装包
注意!!!访问的是外网,下载慢,最好是开代理
14.2 cuDNN安装
首先检查下前面下载的安装包,看下安装包名,博主下载的安装包名为cudnn-linux-x86_64-8.4.0.27_cuda11.6-archive.tar.xz,首先看linux-x86_64即安装的系统没有问题,其次看cuda11.6是依赖的cuda版本也没有问题,检查完毕后下面我们开始安装工作👨🏭
首先cd到安装包所在目录,进行解压,执行如下指令:
tar -xf cudnn-linux-x86_64-8.4.0.27_cuda11.6-archive.tar.xz
等待解压完成,解压完成之后在目录下有一个cudnn-linux-x86_64-8.4.0.27_cuda11.6-archive文件夹,这个文件夹中又包含include和lib两个文件夹,分别代表cuDNN头文件和cuDNN库文件。
cuDNN非常简单,就是将这两个文件中的所有内容复制到CUDA对应的文件夹中,我们来看下接下来的操作
首先输入如下指令,打开一个超级窗口(直接复制权限不够):
sudo nautilus
- 在超级窗口中找到之前安装好的CUDA路径,在/usr/local/cuda-11.6
- 将cudnn解压包中include文件全部复制到/usr/local/cuda-11.6/include中
- 将cudnn解压包中lib文件全部复制到/usr/local/cuda-11.6/lib64中
至此,cuDNN的安装完毕
14.3 小结
cuDNN的安装流程其实并不复杂,其实都不能称之为安装,就是根据CUDA版本找到对应的cuDNN版本,下载后把其头文件和库文件复制到对应CUDA目录即可。难点在于两个步骤,一是通过你的CUDA版本找到对应的cuDNN版本,二是能否将外网的cuDNN安装包顺利下载下来(需要代理)
15. TensorRT安装
参考自Linux安装TensorRT、Ubuntu20.04安装TensorRT
描述:本来想体验下kiwi一键安装CUDA+cuDNN+TensorRT的,但现在还处于内测阶段,还未公测,等kiwi公测吧,只能先自己来了。TensorRT的安装按照上面视频的操作来就行,没有问题,下面简单过一遍流程。切记!!!TensorRT安装的版本依赖于CUDA和cuDNN的版本,请先确认下CUDA和cuDNN版本
15.1 TensorRT下载
TensorRT的版本是根据CUDA版本和cuDNN版本来的,在前面的CUDA的安装中,我们选择的是CUDA 11.6.0版本,依据此来安装TensorRT
NVIDIA官网TensorRT下载链接:https://developer.nvidia.com/nvidia-tensorrt-8x-download
打开上面的链接,会出现如下的界面(需要登陆,可以先注册一个NVIDIA账号,也不麻烦,可能需要开代理)
登陆完成之后,可以看到下面的界面,点击**I Agree To the Terms of the …**即下面的红色框,就可以显示各种TensorRT版本(其中GA版本=>稳定版本 EA版本=>测试版本),
点开之后就是对应TensorRT版本的各种形式的安装包(包名有提示适合的对应的CUDA版本),比如博主选择的是TensorRT 8.4 GA,选择的是x86_64架构,系统是Linux操作系统,下载形式选择压缩包形式(即TAR Package)下载,适用于CUDA 11.6版本,即TensorRT 8.4 GA for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package,如下面的红色框所示。
注意!!!访问的是外网,下载慢,最好是开代理
15.2 TensorRT安装
首先检查下前面下载的安装包,看下安装包名,博主下载的安装包为TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz,首先看Linux.x86_64即安装的系统没有问题,其次看cuda-11.6是依赖的cuda版本也没有问题,最后看cudnn8.4是依赖的cudnn版本也没有问题,检查完毕后下面我们开始安装工作👨🏭
首先cd到安装包所在目录,进行解压,执行如下指令:
tar zxf TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
等待解压完成。解压完成之后在目录下有一个TensorRT-8.4.1.5的文件夹
可以移动该文件夹存放在自己想放的目录下(也可以重命名),如:
mv TensorRT-8.4.1.5 /opt
至此,TensorRT安装完成
15.3 配置环境变量
TensorRT安装完成之后需要添加一下环境变量,输入如下指令打开配置文件:
sudo gedit ~/.bashrc
在最末尾添加如下内容(将TensorRT版本替换成你自己的)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/TensorRT-8.4.1.5/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=/opt/TensorRT-8.4.1.5/bin${PATH:+:${PATH}}
点击保存退出,然后刷新一下
source ~/.bashrc
15.4 验证
测试代码:/opt/TensorRT-8.4.1.5/samples/sampleMNIST
在安装的tensorRT目录下samples文件夹下用sampleMNIST示例测试
首先进入该文件夹
cd /opt/TensorRT-8.4.1.5/samples/sampleMNIST
编译
make
如下图所示
编译成功后执行如下指令会有对应的结果输出:
./../../bin/sample_mnist
15.5 小结
TensorRT的安装流程其实并不复杂,其实都不能称之为安装,就是根据CUDA版本找到对应的TensorRT版本,下载后添加下环境变量即可。难点在于两个步骤,一是通过你的CUDA版本找到对应的TensorRT版本,二是是否能将外网的TensorRT安装包顺利下载下来(需要代理)
16. 编译protobuf
参考自Linux下编译protobuf、Linux下添加protobuf的环境变量
描述:由于要经常使用到tensorRT_Pro这个repo,因此需要编译特定版本的protobuf-3.11.4,编译流程看我下面的即可
16.1 安装
首先获取压缩包,通过我提供的软件安装包下载链接,里面就有protobuf-3.11.4
解压
先cd到安装包路径,然后解压,指令如下:
unzip protobuf-3.11.4.zip
编译
cd protobuf-3.11.4/cmake
cmake . -Dprotobuf_BUILD_TESTS=OFF
cmake --build .
耐心等待编译完成(需要一段时间)
创建安装目录
我们先要创建一个文件用于存放安装后的protobuf的头文件和库文件,我们选择在/home
目录下创建一个protobuf文件,指令如下:
mkdir protobuf
安装
安装的位置选择上面创建的protobuf路径即可,指令如下:
make install DESTDIR=/home/jarvis/protobuf
注意:编译完成后的protobuf文件夹下仅仅只有一个user一个文件夹,需要将编译好的protobuf/user/local
下的bin、include、lib文件夹复制到protobuf
当前文件夹下,方便后续tensorRT_Pro项目的CMakeLists.txt的指定。
16.2 环境变量的配置
首先打开配置文件,指令如下:
sudo vim /etc/profile
添加如下内容保存并退出(注意路径修改为自己的路径)
export PATH=$PATH:/home/jarvis/protobuf/bin
export PKG_CONFIG_PATH=/home/jarvis/probobuf/lib/pkgconfig
source生效
source /etc/profile
配置动态路径
sudo vim /etc/ld.so.conf
追加如下内容(注意路径修改为自己的路径)
/home/jarvis/protobuf/lib
验证
protoc --version
输出对应版本信息说明安装成功
17. Pytorch安装
参考自Ubuntu20.04深度学习环境:CUDA+Pyotrch+Anaconda+VScode、Pytorch-gpu安装教程
描述:本次介绍pytorch-gpu版本安装,在安装GPU版本的pytorch之前,请先确保你安装了显卡驱动,安装GPU版本的Pytorch只需要你拥有一张显卡和对应的显卡驱动即可。切记!!!Pytorch的安装依赖于显卡驱动和Anaconda的安装,请务必安装完显卡驱动和Anaconda后再来安装Pytorch
17.1 介绍
首先我们来明确一个概念,那就是安装GPU版本pytorch之前需不需要安装cuda和cudnn呢?,答案是不需要。以下内容copy自一文搞懂PyTorch与CUDA那些事
许多同学误以为Pytorch和Tensorflow一样,运行时需要本机环境内的CUDA和cuDNN支持,但其实在一台没有安装CUDA的环境中按照官网的指南安装PyTorch也是可以正常在GPU上运行的。
安装GPU版本的PyTorch版本号尾部会出现cuxxx
的字样,也就是说,PyTorch在安装时会自动安装所需的CUDA运行库,用户只需要保持PyTorch版本(包含其内部的CUDA版本)、Nvidia驱动版本和GPU型号相匹配。
CUDA版本与驱动版本对应关系见下面的链接(查看表3即可):
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
通常情况下,只要驱动满足要求,并且PyTorch官方有预编译相应的CUDA版本,直接安装对应版本的PyTorch即可。
注意:安培(Ampere)架构GPU(GeForce RTX 30系列显卡,例如RTX3060)只支持CUDA11.0即以上版本,PyTorch官方只有1.7及以上版本才有预编译CUDA11,因此建议使用安培架构GPU的同学使用PyTorch1.7及以上版本
17.2 准备工作
首先确认下安装的Pytorch版本及其指令。先要查看显卡驱动版本和其对应的CUDA版本,第13节有详细流程,这里不再赘述,博主的显卡驱动为510.108.03,CUDA版本最高支持CUDA 11.6,因此我安装的GPU版本的Pytorch中的CUDA运行库大于11.0且小于等于11.6都可以。
因此去Pytorch官网:https://pytorch.org/ 找一个适合我的版本,我选择从历史版本中寻找,如下图所示:
根据我的CUDA版本限制,我找到了一个torch版本为v1.12.0,其pip安装指令如下:
pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116
pytorch的版本确定了,那对于python版本有没有要求呢?其实是有的,比如说你的torch-1.12.0+cu116就不能安装在python3.6下,具体可查看torch的各种whl文件
torch和对应python版本查看链接:https://download.pytorch.org/whl/torch/
点击上面的链接,你就可以看到所有的torch安装包,注意!!!我们并不是要下载安装,我们只是来确认下torch-1.12.0+cu116对应的python版本,点击键盘上的ctrl+f
输入cu116就可以找到对应CUDA11.6版本的torch了,如下图所示:
其中cu116
就是对应CUDA-11.6,cp-38-cp-38
就是对应python-3.8版本,因此,从上图的红色框中可知,torch-1.12.0+cu116可以安装的python版本为3.7/3.8/3.9/3.10均可,大家根据自己的实际情况来进行选择
17.3 安装
1.创建虚拟环境
conda create -n yolov8 python=3.8
其中,yolov8
为虚拟环境名,可以自己设置,python版本如果不指定默认安装最新的,而在之前的分析中,我们知道了后续的torch-1.12.0+cu116的安装对应的python版本为3.7/3.8/3.9/3.10,因此我们指定创建的虚拟环境的python版本为3.8
2.切换到新建虚拟环境下
conda activate yolov8
3.查看对应的pip源
pip config list
确保pip安装的源是清华源或阿里云的源,可以查看2.2小节的pip换源,也可以在每次pip install软件的时候加上-i https://pypi.tuna.tsinghua.edu.cn/simple
,不过这样比较麻烦,博主输入pip coinfig list
后的输出如下
global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'
4.输入选择的安装命令
pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116
安装包很大,耐心等待安装完成即可,如下图所示
特别注意!!!如果安装失败,则可以将创建的虚拟环境完全移除,重新在pytorch官网选择一个合适的torch安装指令,按照上面步骤重新来过,移除指令如下:
conda activate base
conda remove -n pytorch-gpu --all
17.4 验证
1.激活虚拟环境
conda activate yolov8
2.进入python环境
python
3.导入torch
import torch
torch.cuda.is_available()
输出为True,说明安装成功,如下图所示:
18. 编译OpenBLAS
描述:最近在学习 Algo C++ 课程时需要使用到 OpenBLAS 第三方库,因此需要编译该库方便后续使用,编译流程看我下面的即可
OpenBLAS介绍:OpenBLAS 是一个快速的、开源的、高性能的基础线性代数库,其主要提供矩阵运算相关的函数和 API。OpenBLAS 支持一些常见的矩阵运算,如矩阵相乘、矩阵向量相乘、矩阵的转置、求解线性方程组、特征值分解等等,其内部实现了多线程技术和 SIMD 指令加速,可以有效地利用多核 CPU 的计算能力,提高计算速度。在机器学习和科学计算等领域中,OpenBLAS 是一个广泛应用的高性能数学库之一。而对于 CUDA 上的矩阵运算操作,我们也可以调用对应的 cuBLAS 第三方库进行运算。(from chatGPT)
18.1 准备工作
在编译之前需明确自己的 TARGET 即 CPU 设备型号,首先打开终端使用如下指令可查看对应的CPU
cat /proc/cpuinfo | grep 'model name' | uniq
博主的 CPU 如下图所示:
接下来查看 CPU 型号所对应的 TARGET 名称,具体查看 OpenBLAS 源码的 TargetList.txt 文档,下面是 X86/X86_64
架构支持的列表,更多支持可查看源文档
Force Target Examples:make TARGET=NEHALEM
make TARGET=LOONGSON3A BINARY=64
make TARGET=ISTANBULSupported List:
1.X86/X86_64
a)Intel CPU:
P2
KATMAI
COPPERMINE
NORTHWOOD
PRESCOTT
BANIAS
YONAH
CORE2
PENRYN
DUNNINGTON
NEHALEM
SANDYBRIDGE
HASWELL
SKYLAKEX
ATOM
COOPERLAKEb)AMD CPU:
ATHLON
OPTERON
OPTERON_SSE3
BARCELONA
SHANGHAI
ISTANBUL
BOBCAT
BULLDOZER
PILEDRIVER
STEAMROLLER
EXCAVATOR
ZENc)VIA CPU:
SSE_GENERIC
VIAC3
NANO
具体如何查看自己 CPU 型号对应的 Target 呢?
博主也没有找到合适的方法,只能问问 chatGPT,希望它不要犯病😂。博主是 Inter CPU 从其中选择的是 HASWELL
18.2 编译
本次编译选择从源码编译,首先获取压缩包,可以通过我提供的软件安装包下载链接,里面有 OpenBLAS-0.3.17,也可以通过 https://github.com/xianyi/OpenBLAS/tags 选择不同的版本进行编译
解压
先 cd 到安装包路径,然后解压,指令如下:
unzip OpenBLAS-0.3.17
创建安装目录
我们先要创建一个文件用于存放安装后的 OpenBLAS 的头文件和库文件,我们选择在当前目录下创建一个 OpenBLAS 文件夹,指令如下:
mkdir OpenBLAS
创建auto.sh
这次按照杜老师写的脚本来自动完成整个编译过程,在与 OpenBLAS-0.3.17 的同级目录下创建一个脚本文件 auto.sh
用于完成自动编译 OpenBLAS-0.3.17 的过程,其脚本文件中的内容如下:
#!/bin/bashset -eif [ "$(whoami)" == "root" ];
thenapt install cmake gfortran libblas-dev libblas3 -y
elseecho Please input password to execute \"sudo apt install cmake gfortran libblas-dev libblas3 -y\"sudo apt install cmake gfortran libblas-dev libblas3 -y
ficd OpenBLAS-0.3.17
make TARGET=HASWELL -j
make PREFIX=../OpenBLAS install -jcd ../
rm -rf OpenBLAS-0.3.17
- 脚本首先检查当前用户是否为 root 用户,如果是,则直接安装必要的依赖库,否则需要用户输入密码以执行 sudo 命令安装依赖库。
- 接着进入 OpenBLAS 源码目录,执行 make 命令进行编译,通过参数
-j
指定使用多线程加速编译,-j
后面的数字表示并行编译线程数,根据机器配置合理设置。注意TARGET修改为你自己所选择的 - 然后执行 make install 命令安装编译好的 OpenBLAS 库到指定路径。注意PEEFIX为安装的路径,如果你想将 OpenBLAS 安装到别的目录请修改
- 最后删除 OpenBLAS 源码目录,清理环境。这个脚本适用于 Ubuntu 等基于 Debian 的 Linux 系统。
- 切记!!!当需要编译其它版本的OpenBLAS库的时候,需要简单修改下 auto.sh 脚本文件的内容,将 cd 到的文件夹修改为你解压的文件夹
安装
将 auto.sh
和 解压后的 OpenBLAS-0.3.17 文件夹放在同一级目录下,执行如下代码:
bash auto.sh
编译安装过程可能有点慢,请耐心等待
安装完成后会出现如下提示,且在当前目录下会存在编译好的 OpenBLAS 的头文件和库文件
18.3 验证
利用OpenBLAS的cblas_sgemm写一个简单矩阵相乘的示例
创建一个 workspace 文件夹存放编译后的程序文件,创建一个 src 文件夹存放源文件,创建一个makefile 文件用于编译。整个项目的整体结构如下:
.
├── auto.sh
├── makefile
├── OpenBLAS
│ ├── bin
│ ├── include
│ └── lib
├── OpenBLAS-0.3.17.zip
├── src
│ └── main.cpp
└── workspace6 directories, 4 files
src/main.cpp 内容如下:
#include <iostream>
#include <cblas.h>int main()
{const int N = 3;const float alpha = 1.0;const float beta = 0.0;float A[N][N] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};float B[N][N] = {{1, 1, 1},{0, 1, 0},{0, 0, 1}};float C[N][N] = {0};cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,N, N, N, alpha, &A[0][0], N, &B[0][0], N, beta, &C[0][0], N);std::cout << "A x B = " << std::endl;for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){std::cout << C[i][j] << " ";}std::cout << std::endl;}return 0;
}
makefile 内容如下:
# 1.参数定义
cc := g++
name := pro
workdir := workspace
srcdir := src
objdir := objs
stdcpp := c++11# 定义cpp的路径查找和依赖项mk文件
cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
cpp_mk := $(cpp_objs:.cpp.o=.cpp.mk)# 定义cu文件的路径查找和依赖项mk文件
cu_srcs := $(shell find $(srcdir) -name "*.cu")
cu_objs := $(cu_srcs:.cu=.cu.o)
cu_objs := $(cu_objs:$(srcdir)/%=$(objdir)/%)
cu_mk := $(cu_objs:.cu.o=.cu.mk)# 定义opencv和cuda需要用到的库文件
link_sys := stdc++ dl openblas
link_librarys := $(link_sys)# 定义头文件路径,请注意斜杠后边不能有空格
# 只需要写路径,不需要写-I
include_paths := src OpenBLAS/include # 注意!!! 如果OpenBLAS安装在其他目录,请修改头文件路径# 定义库文件路径,只需要写路径,不需要写-L
library_paths := $(shell pwd)/OpenBLAS/lib # 注意!!! 如果OpenBLAS安装在其他目录,请修改库文件路径# 把library path给拼接为一个字符串,例如a b c => a:b:c
# 然后使得LD_LIBRARY_PATH=a:b:c
empty :=
library_path_export := $(subst $(empty) $(empty),:,$(library_paths))# 把库路径和头文件路径拼接起来成一个,批量自动加-I、-L、-l
run_paths := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
include_paths := $(foreach item,$(include_paths),-I$(item))
library_paths := $(foreach item,$(library_paths),-L$(item))
link_librarys := $(foreach item,$(link_librarys),-l$(item))# 如果是其他显卡,请修改-gencode=arch=compute_75,code=sm_75为对应显卡的能力
# 显卡对应的号码参考这里:https://developer.nvidia.com/zh-cn/cuda-gpus#compute
# 如果是 jetson nano,提示找不到-m64指令,请删掉 -m64选项。不影响结果
cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -m64 -fPIC -fopenmp -pthread
link_flags := -pthread -fopenmp -Wl,-rpath='$$ORIGIN'cpp_compile_flags += $(include_paths)
link_flags += $(library_paths) $(link_librarys) $(run_paths)# 如果头文件修改了,这里的指令可以让他自动编译依赖的cpp或者cu文件
ifneq ($(MAKECMDGOALS), clean)
-include $(cpp_mk) $(cu_mk)
endif$(name) : $(workdir)/$(name)all : $(name)
run : $(name)@cd $(workdir) && ./$(name) $(run_args)$(workdir)/$(name) : $(cpp_objs) $(cu_objs)@echo Link $@@mkdir -p $(dir $@)@$(cc) $^ -o $@ $(link_flags)$(objdir)/%.cpp.o : $(srcdir)/%.cpp@echo Compile CXX $<@mkdir -p $(dir $@)@$(cc) -c $< -o $@ $(cpp_compile_flags)# 编译cpp依赖项,生成mk文件
$(objdir)/%.cpp.mk : $(srcdir)/%.cpp@echo Compile depends C++ $<@mkdir -p $(dir $@)@$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)# 定义清理指令
clean :@rm -rf $(objdir) $(workdir)/$(name)@rm -rf $(workdir)/mnist# 防止符号被当做文件
.PHONY : clean run $(name)# 导出依赖库路径,使得能够运行起来
export LD_LIBRARY_PATH:=$(library_path_export)
在终端执行 make run
即可看到两个矩阵相乘的结果,如下图所示:
19. 编译FFmpeg
参考自FFMpeg学习笔记–Ubuntu20.04编译FFmpeg、FFplay和FFprobe
描述:最近在学习视频流媒体的编解码,在学习 hard_decode_trt 项目时需要使用到 FFMpeg 第三方库,因此需要编译该库方便后续使用。编译流程按照上文的操作即可,值得注意的是 hard_decode_trt 使用的 FFmpeg-4.2 版本,博主编译过 FFmpeg-5.1 版本,发现在 FFmpeg 中有一些 API 发生了改变,导致 hard_decode_trt 项目无法运行起来,所以为了让问题更加简单化,博主也是编译的 FFmpeg-4.2,其它版本的编译也可以按照上文的流程走,没有问题。
FFmpeg介绍:FFmpeg 是一款跨平台的、开源的音视频处理软件。它可以对音视频进行编解码、转码、剪辑、合并等处理,支持多种格式的音视频文件。在视频流媒体编解码中,FFmpeg 通常被用来进行解封装、编码、解码、转换等操作。它通过将原始的音视频数据流解封装成一帧一帧的数据,然后将这些数据传输给硬件编码器(例如 NVIDIA 的 NVDEC)。硬件编码器将编码后的数据传输回 FFmpeg,再由 FFmpeg 将编码后的数据封装称所需要的视频格式,例如 MP4、AVI 等。FFmpeg 提供了必要的解封装和编解码功能,使得视频编解码更加高效、简单和方便。
19.1 下载FFmpeg
下载 4.2 版本的 ffmpeg,指令如下:
wget http://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gz
可以将链接复制到浏览器中下载,外网访问慢,建议开代理。也可以点击 here[pwd:yolo] 下载博主准备好的安装包
解压下载好的压缩包
tar -zxvf ffmpeg-4.2.tar.gz
19.2 编译FFmpeg
进入解压后的文件夹
cd ffmpeg-4.2
安装依赖
# 安装ffplay需要的依赖
sudo apt-get install libx11-dev xorg-dev libsdl2-2.0 libsdl2-devsudo apt install clang libfdk-aac-dev libspeex-dev libx264-dev libx265-dev libnuma-devsudo apt install yasm pkg-config libopencore-amrnb-dev libopencore-amrwb-dev
编译FFmpeg
# 查看帮助文档确定需要安装的相关参数
./configure --help
配置相关参数
./configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-ffplay --enable-ffprobe --enable-libx264 --enable-libx265 --enable-debug
注意这里博主与参考的博文设置不太一样,博主新增了 --disable-static
--enable-shared
参数,让其编译成动态库且不需要静态库,方便后续 hard_decode_trt 项目的指定。
make编译
make -j24
注:make 这步需要的时间一般比较长
安装
sudo make install
耐心等待安装完成即可。
安装完成后的 FFmpeg 头文件在 /usr/local/include 目录下,库文件在 /usr/local/lib 目录下,可执行文件在 /usr/local/bin 目录下
19.3 设置环境变量
博主并未设置,若有需求见参考博文
19.4 验证
查看 FFmpeg 的版本,由于博主未设置环境变量,所以先要 cd 到 /usr/local/bin 目录下
cd /usr/local/binffmpeg -version
查看 FFmpeg 帮助文档
ffmpeg -hffmpeg -h longffmpeg -h full
19.5 卸载FFmpeg
卸载非常简单,指令如下:
# 首先进入 ffmpeg 源码编译的路径
cd ffmpeg-4.2sudo make uninstall
执行完成后可以发现在 /usr/local/include 中 FFmpeg 的头文件没有了,在 /usr/local/lib 中 FFmpeg 的库文件没有了,在 /usr/local/bin 中 FFmpeg 的可执行文件没有了。
这个需求非常有必要,当你发现编译后的 FFmpeg 缺少某些库时,你可以通过 sudo make uninstall
卸载,然后通过 ./configure
重新配置参数编译。当你需要替换其它版本的 FFmepg 时,也可以先通过 sudo make uninstall
卸载,然后下载其它版本的 FFmpeg,通过上述操作重新编译。
20. NVIDIA VIDEO_CODEC_SDK
在学习视频流硬解码过程中需要用到视频解码的 GPU 硬件加速器引擎,而 NVIDIA 提供了一个用于视频编解码的 SDK 即 NVIDIA VIDEO_CODEC_SDK,它是一个 API 套件,包含高性能工具、样本和文档,适用于 Windows 和 Linux 的硬件加速型视频编码和解码。此 SDK 包含两个硬件加速接口:
- 用于视频编码加速的 NVENCODE API
- 用于视频解码加速的 NVDECODE API(旧称 NVCUVID API)
NVENC:硬件加速的视频编码
从 Kepler 这一代开始,NVIDIA GPU 包含基于硬件的编码器(简称为 NVENC),可提供基于硬件的全加速视频编码,且独立于图形性能。由于计算复杂的编码工作流完全卸载至 NVENC,图形引擎和 CPU 可以有更多的事件执行其它操作。
NVDEC:硬件加速的视频解码
NVIDIA GPU 包含基于硬件的解码器(简称为 NVDEC),可为几种热门的编解码器提供基于硬件的全加速视频解码。由于解码工作流完全卸载至 NVDEC,图形引擎和 CPU 可以有更多的事件执行其它操作。NVDEC 比实时解码速度更快,非常适合于转码应用以及视频播放应用。
Copy 自 NVIDIA 视频编解码器 SDK
由于是 SDK 不需要编译,直接下载解压拿来用就行,其下载地址为:
- https://developer.nvidia.com/nvidia-video-codec-sdk/download
现在最新的 SDK 为 12.0 版本,其系统要求如下图,Linux 下显卡驱动要求为 520.56.06 或者更新,且只支持 NVIDIA Quadro,Tesla,GRID 以及 GeForce 系列产品
其历史版本可通过 https://developer.nvidia.com/video-codec-sdk-archive 下载,也可以点击 here[pwd:yolo] 下载博主准备好的安装包(提供 10.0、11.0、11.1、12.0 四个版本的 SDK,根据自己的需求下载即可) ,每个版本都有对应的显卡驱动要求,例如 11.0 要求 Linux 下显卡驱动大于等于 455.27。下载完成后解压即可,后续可通过 makefile 文件进行其头文件和库文件的指定。