目录

Ubuntu20.04 软件安装大全前言1. Windows和Ubuntu双系统安装1.1 下载Ubuntu系统镜像1.2 磁盘分区1.3 GPT分区安装Ubuntu1.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常用指令10.4 conda换源

11. Netron安装12. 编译OpenCV4.6.012.1 安装依赖项12.2 下载OpenCV 4.6.0源文件12.3 Cmake配置和编译OpenCV12.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. 编译protobuf16.1 安装16.2 环境变量的配置

17. Pytorch安装17.1 介绍17.2 准备工作17.3 安装17.4 验证

18. 编译OpenBLAS18.1 准备工作18.2 编译18.3 验证

19. 编译FFmpeg19.1 下载FFmpeg19.2 编译FFmpeg19.3 设置环境变量19.4 验证19.5 卸载FFmpeg

20. NVIDIA VIDEO_CODEC_SDK21. Eigen21.1 下载Eigen21.2 使用Eigen

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:远程SSHvscode-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 update

sudo 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

Currently supported shells are:

- bash

- fish

- tcsh

- xonsh

- zsh

- powershell

See '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

10.4 conda换源

利用 conda 指令创建虚拟环境或者安装第三方库时默认是访问外网的源,非常慢,因此我们有必要将其替换为国内源来提高速度

copy自:linux中anaconda更换源

1. 查看现有 conda 源,在终端输入如下命令:

conda info

可以看到 conda 默认使用的源,如下图所示:

2. 检查 home 目录下是否存在 .condarc 文件

3. 如果没有 2 中所述文件,那么执行如下命令:

conda config --set show_channel_urls yes

4. 再次检查 home 目录下是否有 2 中所述文件,可以发现此时已经有了该文件

5. 打开 2 中所述文件,添加如下内容:

default_channels:

- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r

- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

custom_channels:

conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

6. 保存并退出

7. 再次执行步骤 1 查看 conda 源,如下图所示,可以看到已经切换为清华源了

8. 执行如下命令来清楚 conda 的缓存:

conda clean -i

9. 至此 conda 国内源设置完成,现在可以愉快的使用 conda 创建虚拟环境和安装软件了

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

#include

#include

#include

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_imgcodecs

because files in some directories may conflict with libraries in implicit

directories:

runtime library [libpng16.so.16] in /usr/lib/x86_64-linux-gnu may be hidden by files in:

/home/jarvis/anaconda3/lib

runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:

/home/jarvis/anaconda3/lib

runtime 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=ISTANBUL

Supported List:

1.X86/X86_64

a)Intel CPU:

P2

KATMAI

COPPERMINE

NORTHWOOD

PRESCOTT

BANIAS

YONAH

CORE2

PENRYN

DUNNINGTON

NEHALEM

SANDYBRIDGE

HASWELL

SKYLAKEX

ATOM

COOPERLAKE

b)AMD CPU:

ATHLON

OPTERON

OPTERON_SSE3

BARCELONA

SHANGHAI

ISTANBUL

BOBCAT

BULLDOZER

PILEDRIVER

STEAMROLLER

EXCAVATOR

ZEN

c)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/bash

set -e

if [ "$(whoami)" == "root" ];

then

apt install cmake gfortran libblas-dev libblas3 -y

else

echo Please input password to execute \"sudo apt install cmake gfortran libblas-dev libblas3 -y\"

sudo apt install cmake gfortran libblas-dev libblas3 -y

fi

cd OpenBLAS-0.3.17

make TARGET=HASWELL -j

make PREFIX=../OpenBLAS install -j

cd ../

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

└── workspace

6 directories, 4 files

src/main.cpp 内容如下:

#include

#include

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-dev

sudo apt install clang libfdk-aac-dev libspeex-dev libx264-dev libx265-dev libnuma-dev

sudo 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/bin

ffmpeg -version

查看 FFmpeg 帮助文档

ffmpeg -h

ffmpeg -h long

ffmpeg -h full

19.5 卸载FFmpeg

卸载非常简单,指令如下:

# 首先进入 ffmpeg 源码编译的路径

cd ffmpeg-4.2

sudo 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 文件进行其头文件和库文件的指定。

21. Eigen

描述:最近在学习 CPD 点集配准方法,在学习 https://github.com/gadomski/cpd 项目时需要使用到 Eigen 库用于进行数学运算。值得注意的是,Eigen 库本身不需要编译,它是一个头文件,这意味着你无需单独编译它,只要将相应的头文件包含在项目中,就可以直接使用它的功能了。

Eigen介绍:Eigen 是一个用于 C++ 的开源线性代数库,它提供了丰富的线性代数运算功能,包括矩阵运算、向量运算、线性方程求解、特征值和特征向量计算等。Eigen 库是一个纯头文件库,因此使用起来非常方便,无需编译额外的库文件,只需将相应的头文件包含在你的项目中即可。

以下是 Eigen 库的一些特点和优势:

1. 简洁易用:Eigen 的 API 设计简单直观,易于学习和使用,提供了类似于 MATLAB 的矩阵和向量表示方式,使得代码编写更加清晰和易读。

2. 高性能:Eigen 库在设计上注重运行时性能,采用了各种优化技术,同时支持向量化指令,使得它在进行大规模线性代数计算时表现出色。

3. 功能丰富:Eigen 提供了大量的线性代数运算函数,包括基本的矩阵和向量操作,以及线性方程组求解、特征值和特征向量计算、矩阵分解等高级功能。

4. 跨平台:Eigen 是一个跨平台的库,可以在各种操作系统和编译器上运行,无需担心兼容性问题。

5. 自由开源:Eigen 遵循 MPL2.0 协议,可以免费用于商业和非商业项目。

由于 Eigen 库的优雅设计和高性能,它被广泛应用于各种领域,如科学计算、机器学习、计算机图形学等

21.1 下载Eigen

你需要从 Eigen 官方网站 https://eigen.tuxfamily.org/index.php?title=Main_Page 中下载对应的源文件压缩包,如下图所示:

在这里博主选择了一个相对稳定的版本 Eigen-3.4.0

21.2 使用Eigen

我们把下载好的 Eigen 进行解压后就可以使用了,我们来写一个简单的示例代码看看效果

main.cpp 内容如下:

#include

#include

int main() {

Eigen::MatrixXd matrix(2, 2);

matrix << 1, 2,

3, 4;

Eigen::VectorXd vector(2);

vector << 5, 6;

Eigen::VectorXd result = matrix * vector;

std::cout << "Matrix * Vector = \n" << result << std::endl;

return 0;

}

CMakeLists.txt 文件如下:

cmake_minimum_required(VERSION 3.5)

project(EigenExample)

# 设置编译器

set(CMAKE_CXX_STANDARD 11)

# 指定Eigen3的头文件路径

include_directories(/path/to/custom_eigen3)

# 设置可执行文件

add_executable(eigen_example main.cpp)

你需要修改 Eigen 库的路径为你使用的路径,然后将上述两个文件(main.cpp和CMakeLists.txt)放在同一个目录下,执行以下命令来编译你的程序:

mkdir build

cd build

cmake ..

make

编译运行效果如下图所示:

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。