WSL-Ubuntu20.04部署环境配置

news2024/9/21 4:34:29

1.更换Ubuntu软件仓库镜像源

        为了在WSL上使用TensorRT进行推理加速,需要安装以下环境,下面将按以下顺序分别介绍安装、验证以及删除环境:

#1.C++环境配置
gcc、gdb、g++
#2.gpu环境
cuda、cudnn
#3.Cmake环境
CMake
#4.OpenCV环境
OpenCV
#5.TensorRT环境
TensorRT

        在安装这些库之前,需要先更换清华镜像,可以加速Ubuntu下载速度,使用指令lsb_release -a查看Linux 发行版的信息,如下所示:

        其中关注一下Codename:focal ,参照博客WSL不同版本的Ubuntu更换清华镜像-CSDN博客,如果是focal的话,则修改镜像源为下面内容,如果是其他的codename的话,需要将https://mirrors.tuna.tsinghua.edu.cn/ubuntu,后面的focal修改为对应的内容,比如还可能是jammy、lunar、kinetic和bionic。

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

        现在来看一下如何修改,分成两个步骤,第一:备份该配置文件,避免镜像替换后不可用,还可以恢复到原始版本;第二:修改镜像源。

        首先来看备份配置文件:配置文件放在/etc/apt路径下,执行以下指令备份配置文件sources.list.

 cp sources.list sources.list.bak

         然后修改镜像源,执行以下指令:

vim source.list

         最后把前面的镜像源地址复制进去,然后在一般模式下使用:wq,保存并退出,如下所示:

2.C++环境配置

        安装:

sudo apt update
sudo apt install build-essential

        验证:

gcc --version

3.CUDA和CUDNN安装 

        前面也提到了wsl-ubuntu20.04的显卡驱动和本机的显卡驱动是一样的,再利用nvidia-smi查看下显卡驱动版本,再决定安装什么版本的CUDA和cuDNN.

        显卡驱动版本号为12.2,可以理解为可以支持的CUDA最大版本号,但是我们也不需要安装那么高的CUDA,可以选择一个稳定点的比如CUDA11.6.

3.1CUDA-11.6安装 

        CUDA下载:CUDA Toolkit Archive | NVIDIA Developer,选择cuda11.6下载,如下所示。

         安装: 接下来执行以下指令来进行安装;

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

        以上的指令分别代表:(1)下载 cuda-wsl-ubuntu.pin 文件;(2)移动 cuda-wsl-ubuntu.pin 文件到 /etc/apt/preferences.d/ 目录;(3)下载 CUDA 11.6 的本地安装包;(4)安装 CUDA 仓库包;(5)添加 CUDA 仓库的公钥;(6)更新包列表;(7)安装 CUDA。

        其中第三步中,如果网络不顺畅的话可以直接复制链接到浏览器中进行下载,然后再放到你的安装路径下,我这里直接是放在/root路径下,然后继续执行后面的步骤。

        验证:

        CUDA默认安装在/usr/local路径下,进入到该路径下,其中cuda-11.6文件夹即为安装好的cuda,里面会包含有bin、lib及include文件,其中nvcc指令在bin路径下,即/usr/local/cuda-11.6/bin.

        下面需要把bin路径下的常用指令添加在home/.bashrc环境变量文件中,然后再使用nvcc -V来验证cuda是否安装成功:

       首先使用下面指令打开.bashrc:

vim ~/.bashrc

        然后直接在最后一行插入下面代码,指示了cuda-11.6的路径:

export CUDA_HOME=/usr/local/cuda-11.6  # 新建环境变量CUDA_HOME
export PATH=$PATH:$CUDA_HOME/bin       # 将bin目录添加到PATH这个环境变量

         最后执行下面指令来验证cuda是否已经安装成功: 

source ~/.bashrc 
nvcc -V

3.2cuDNN-8.9.5安装 

          cuDNN下载:链接,我这里选择符合版本要求的v8.9.5,选择Linux_x86_64(Tar)下载。

        我这里选择把下载好的文件放在/root路径下,如下所示: 

         安装: 首先解压得到lib和include文件夹,然后将解压后的文件夹分别复制到前面的cuda-11.6里面对应的lib64和include路径下,指令如下所示:

tar -xvf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.9.5.30_cuda11-archive/ #进入解压路径
cp ./lib/* /usr/local/cuda-11.6/lib64          # 拷贝lib
cp ./include/* /usr/local/cuda-11.6/include    # 拷贝头文件

        验证: 执行以下指令,显示如下内容说明cuDNN安装成功。

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

 4.CMake-3.30.0安装

        CMake下载:Download CMake,这里我选择的是3.30.0版本进行下载,下载得到cmake-3.30.0.tar.gz压缩包,然后找个路径进行解压,如下所示:

         安装:

        首先将cmake-3.30.0.tar.gz这个压缩包放在/root路径下,使用以下指令来解压缩cmake包.

tar -zxvf cmake-3.30.0.tar.gz

        然后进入解压后的文件夹,进行编译和安装,其中make -j4中的-j4表示使用4个进程,可以提升生成的速度: 

cd cmake-3.30.0/
./bootstrap
make -j4
make install 

        问题: 我在执行./bootstrap遇到了Error:Could not find OpenSSL,如下所示:

        解决: 那么需要安装libssl-dev,然后重新再执行一遍./bootstrap指令,执行成功后是下面这样子的.

sudo apt-get install libssl-dev

         验证: 执行以下指令,查看Cmake版本及Cmake位置,没有问题的话说明Cmake安装成功了。 

cmake --version
which cmake

5.OpenCV-4.8安装

        OpenCV下载:Releases - OpenCV,这里我选择一年前发布的OpenCV-4.8,点击sources,下载得到opencv-4.8.0.zip压缩包,然后找个路径进行解压,如下所示:

         安装:

        第一步:把opencv-4.8.0.zip这个压缩包放在/root路径下,使用unzip指令来解压缩opencv包.

unzip opencv-4.8.0.zip

         第二步:进入opencv路径,创建build文件,用来保存编译的文件。

cd opencv-4.8.0/
mkdir build
cd build

         第三步:依次执行以下指令,使用CMake来配置、生成和安装OpenCV,其中make生成这一步的时间稍微会长一点,大概15分钟左右,可以在make后面加入-j4来加快生成,其中4指同时使用4个进程。 

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
make -j4
make install

        问题: 我在执行make -j4指令的时候,报错fatal error: openjpeg.h: No such file or directory,那么需要安装libopenjp2-7-dev。

        解决: 如果你和我遇到了一样的问题,那么安装完之后为了保险起见,需要删除build文件夹,重新配置生成,即重新执行第二步和第三步的指令。

apt-get install libopenjp2-7-dev

        验证:

        安装完OpenCV后需要知道OpenCV的bin、lib及include文件放在哪个路径下:

        其中include头文件放在路径下:/usr/local/include/opencv4/opencv2;bin文件放在路径下:/usr/local/bin;lib文件放在路径下:/usr/local/lib.

        下面来验证OpenCV是否安装成功,由于我们不是在ubuntu主机上操作,而是相当于链接一个远程主机,所以使用imshow报错是很正常的,如下所示,但是我们不需要imshow函数,只需要用到opencv来处理图片,所以我需要修改一下样例的代码。 

        首先时进入到一开始解压缩的文件夹中,并使用vim来编辑一下代码,只需要把imshow修改为imwrite,并且注释掉waitKey(0)代码即可,如下所示。 

cd /root/opencv-4.8.0/samples/cpp/example_cmake
vim  example.cpp

        然后再执行以下指令编译和生成可执行文件,如下所示.

cmake -S . -B build
cmake --build build

        最后运行可执行文件,发现在当前路径下会生成一个Sample.jpg的图片,显示如下则说明安装成功了(查看图片可以直接通过\wsl.localhost\Ubuntu-2004\root\opencv-4.8.0\samples\cpp\example_cmake路径,在window上直接查看): 

./build/opencv_example 

6.TensorRT-8.5安装

        TensorRT下载:NVIDIA TensorRT 8.x Download | NVIDIA Developer,EA 版本代表抢先体验,而GA 代表通用性,表示稳定版,所以我们还是下载TensorRT8.5GA稳定版的,

        安装:

        第一步:把TensorRT-8.5.1.7.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz这个压缩包放在/root路径下,解压缩TensorRT包.

 tar -zxvf TensorRT-8.5.1.7.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz

        第二步: 将TensorRT/lib的绝对路径添加到在home/.bashrc环境变量文件中.

        首先使用以下指令打开.bashrc.

vim ~/.bashrc

        然后添加以下代码到文件中,如下所示: 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/TensorRT-8.5.1.7/lib

        最后使用以下指令更新一下: 

source ~/.bashrc

        验证:

        第一步:进入到/root/TensorRT-8.5.1.7/samples/sampleOnnxMNIST路径下.

cd /root/TensorRT-8.5.1.7/samples/sampleOnnxMNIST

        第二步:编译并执行可执行文件,如下所示即安装成功。 

make
../../targets/x86_64-linux-gnu/bin/sample_onnx_mnist

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1933332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13.8和13.11哪个大?网友吵翻!多个大模型翻车

13.8和13.11哪个更大? 没想到 这样一道简单的数学题 竟引发网友激烈讨论 还难倒了不少大模型 13.8%和13.11%哪个大? 《歌手》排名引网友热议 上周 最新一期的《歌手》公布排名 孙楠得票13.8% 外国歌手香缇莫得票13.11% 引发了网友对排名的质疑…

3.动态规划.题目3

3.动态规划.题目3 题目23.买卖股票的最佳时机3-困难24.买卖股票的最佳时机425.买卖股票的最佳时机含冷冻期26.买卖股票的最佳时机含手续费27.最长递增子序列28.最长连续递增序列29.最长重复子数组30.最长公共子序列31.不相交的线 编辑距离总结 题目 23.买卖股票的最佳时机3-困…

探索LangFlow 1.0:多代理RAG应用程序的未来

在当今快速发展的科技时代,自动化和人工智能(AI)已经成为了许多企业和个人提高效率的关键工具。对于那些对科技有兴趣的用户来说,寻找一种既创新又易于使用的解决方案是非常重要的。今天,我们将介绍一款名为LangFlow的…

排序算法(4)之快速排序(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 排序算法(4)之快速排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

【HarmonyOS】HarmonyOS NEXT学习日记:三、初识ArkUI

【HarmonyOS】HarmonyOS NEXT学习日记:三、初识ArkUI 忘掉HTML和CSS,ArkUI里构建页面的最小单位就是 “组件”,所以今天的目标就是认识一些常用的基础组件,以及他们的用法,对ArkUI形成一个基本认识。 基本组成 了解…

Java反射机制基础知识赏析、接口、实现类、方法

前言 最近打算手写一个RPC,但奈何自己Java基础知识中的反射就很欠缺,第一章就看不太懂了,特地编写了几个小Demo验证一下Java中关于反射的基础知识。 目录组织结构 代码编写 // TestService接口 package reflect.testServices;import main.v…

图神经网络实战(17)——深度图生成模型

图神经网络实战(17)——深度图生成模型 0. 前言1. 变分图自编码器2. 自回归模型3. 生成对抗网络小结系列链接 0. 前言 我们已经学习了经典的图生成算法,虽然它们能够完成图生成任务,但也存在一些问题,促使基于图神经网…

pytorch学习(四)绘制loss和correct曲线

这一次学习的时候静态绘制loss和correct曲线,也就是在模型训练完成后,对统计的数据进行绘制。 以minist数据训练为例子 import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets from torchvisi…

GESP CCF C++ 三级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有()种。 A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月是29天 &#x…

python-字符金字塔(赛氪OJ)

[题目描述] 请打印输出一个字符金字塔,字符金字塔的特征请参考样例。输入格式: 输入一个字母,保证是大写。输出格式: 输出一个字母金字塔,输出样式见样例。样例输入 C样例输出 A ABA …

【前端8】element ui常见页面布局:注意事项

【前端8】element ui常见页面布局:注意事项 写在最前面遇到的问题Element UI 常见页面布局:注意事项1. 了解基本布局组件常用的菜单1多一个下角 常用的菜单2 2. 栅格系统的使用3. 响应式布局4. Flex 布局的应用5. 避免滥用嵌套6. 处理边距和填充 小结 &a…

基于STC89C51单片机的烟雾报警器设计(煤气火灾检测报警)(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于STC89C51单片机的烟雾报警器设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。 目录 摘要 原理图 实物图 仿真图 元件清单 代码 系统论文 资源下载 摘要 随着现代家庭用火、…

TikTok内嵌跨境商城全开源_搭建教程/前端uniapp+后端源码

多语言跨境电商外贸商城 TikTok内嵌商城,商家入驻一键铺货一键提货 全开源完美运营,接在tiktok里面的商城内嵌,也可单独分开出来当独立站运营 二十一种语言,可以做很多国家的市场,支持商家入驻,多店铺等等…

服务器IP和电脑IP有什么不同

服务器IP和电脑IP有什么不同?在当今的信息化时代,IP地址作为网络世界中不可或缺的元素,扮演着举足轻重的角色。然而,对于非专业人士来说,服务器IP和电脑IP之间的区别往往模糊不清。本文旨在深入探讨这两者之间的不同&a…

若依前端和后端时间相差8小时

原因基类未设置时区 实体类继承 BaseEntity 加上timezone"GMT8" /** 创建时间 */ JsonFormat(pattern "yyyy-MM-dd HH:mm:ss" , timezone"GMT8") private Date createTime; 解决

golang程序性能提升改进篇之文件的读写---第一篇

背景:接手的项目是golang开发的(本人初次接触golang)经常出现oom。这个程序是计算和io密集型,调用流量属于明显有波峰波谷,但是因为各种原因,当前无法快速通过serverless或者动态在高峰时段调整资源&#x…

MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022

论文将Multiscale Vision Transformers (MViTv2) 作为图像和视频分类以及对象检测的统一架构进行研究,结合分解的相对位置编码和残差池化连接提出了MViT的改进版本 来源:晓飞的算法工程笔记 公众号 论文: MViTv2: Improved Multiscale Vision Transforme…

Fiddler抓包过滤host及js、css等地址

1、如上图所示 在Filter页面中勾选Hide if URL contains;输入框输入 REGEX:\.(js|css|png|google|favicon\?.*) 隐藏掉包含js、css、png、google等的地址: Hide if URL contains: REGEX:\.(js|css|png|google|favicon\?.*) 2、使Filters设置生效 A…

微软新版WSL 2.3.11子系统带来“数百个新内核模块“和新功能

微软今天发布了新版的 Windows Subsystem for Linux(WSL)。与当前的 WSL 2.2.4 稳定版相比,WSL 2.3.11 具有许多特性:它从旧版的 Linux 5.15 LTS 内核转到了 Linux 6.6LTS内核。今天的发布说明指出,WSL 2.3.11 基于 Linux 6.6.36.3&#xff0…

【C++刷题】[UVA 489]Hangman Judge 刽子手游戏

题目描述 题目解析 这一题看似简单其实有很多坑,我也被卡了好久才ac。首先题目的意思是,输入回合数,一个答案单词,和一个猜测单词,如果猜测的单词里存在答案单词里的所有字母则判定为赢,如果有一个字母是答…