看这个就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用

news2024/12/23 12:30:05

一.基本概念

1.1 nvidia独立显卡

独立显卡是指以独立板卡形式存在,可在具备显卡接口的主板上自由插拔的显卡。独立显卡具备单独的显存,不占用系统内存,而且技术上领先于集成显卡,能够提供更好的显示效果和运行性能。显卡作为电脑主机里的一个重要组成部分,对于喜欢玩游戏和从事专业图形设计的人来说显得非常重要。以前民用显卡图形芯片供应商主要包括ATI和NVIDIA两家。

ubuntu需要自己安装nvidia驱动才能使用nvidia,安装nvidia驱动程序,可以让系统正确识别nVIDIA的图形显示卡,,进行2D/3D渲染,发挥显示卡应有的效能。

1.2 CUDA

        CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

一个电脑里可以拥有两个CUDA API,一个是dirver CUDA(显示屏幕用的),一个是runtime CUDA(加速深度学习)

安装nvidia驱动后,在终端输入nvidia-smi会出现下面界面,其中的CUDA Version是11.4,这里的CUDA是dirverCUDA。也就是说现在电脑里有CUDA但只是显示屏幕用的,所以不能深度学习加速。那么想要加速深度学习需要再安装runtime CUDA,可以通过两种方式,一个是conda环境中安装,另一个是安装cudatoolkit,后面进行详解。

1.3 CUDA Toolkit (nvidia)

  CUDA Toolkit (nvidia)是 CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。简单来讲就是CUDA Toolkit包含了dirver CUDA和runtimeCUDA。

所以一般意义上的ubuntu安装CUDA实际上是安装CUDA Toolkit,但一般我们会先安装nvidia显卡驱动(带有dirverCUDA),所以再安装CUDA Toolkit时会将Driver前面的X去掉,也就是不安装,因为电脑中已经有dirver CUDA了。

由上图可以看到一个完整的cuda toolkit包括

  1. Driver:显卡驱动

  1. Toolkit: 提供一些像profiler,debuggers等工具和科学库和实用程序库

  • cudart: CUDA Runtime

  • cudadevrt: CUDA device runtime

  • cupti: CUDA profiling tools interface ion

  • nvml: NVIDIA management library

  • nvrtc: CUDA runtime compilation

  • cublas: BLAS (Basic Linear Algebra Subprograms,基础线性代数程序集)

  • cublas_device: BLAS kernel interface

  1. CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。

  1. CUDA documentat

1.4 CUDA Toolkit (Pytorch)

我们在pytorch环境中常使用如下指令去安装cudatoolkit,这里我们称为CUDA Toolkit (pytorch)

conda install pytorch torchvision cudatoolkit=11.3 -c pytorch

这是CUDA不完整的工具安装包,其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序。个人理解就是只安装了runtime cuda,这种安装方式可以在多个conda环境中安装不同的cudatoolkit版本以适用深度学习代码。

1.5 cudnn

cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算,再安装cudatoolkit(pytorch)时候,cuDNN会自动安装。安装cudatoolkit(nvidia)时候需要自己安装cuDNN

1.6 pytorch

pytorch是基于CUDA的深度学习框架,因此,pytorch的版本必须依赖于cuda toolkit的版本。由于我们经常使用别人的代码,所以常会感觉是根据pytorch版本来选择CUDA版本。

二.这一堆到底怎么选

2.1 nvcc -V与nvidia-smi

不少人都会产生这种疑惑,为什么nvcc -V和nvidia-smi输出的CUDA版本号不同,相信看过上面的基本概念就清楚了,因为一个显示的是runtime CUDA(用于计算) 一个是 dirver CUDA(用于显示),而我们总是将两者分开两次独立进行安装。

那可以让它们显示的版本相同吗?答案是可以,只需要安装完整版的CUDAtookit(nvidia)一次性安装,就是把CUDA Toolkit安装时Driver前面的X加上,在这之前如果安装过nvidia驱动需要将它卸载,否则会安装失败,失败原因是两个driver CUDA冲突。

那两者版本有什么关系呢?通常情况如果先安装了显卡驱动,nvidia-smi显示的版本要比nvcc-V的高,在选择runtime CUDA时需要查看显卡的型号和pytorch的需要版本确定,并没有特别严格必须一个版本的限制,也就是说一个电脑上conda每个环境都可以拥有不同版本的cuda。

2.2 只加速深度学习

如果你的目的是用CUDA只加速深度学习,深度学习往往不同代码需要不同的cuda版本,如果安装cudatookit(nvidia)电脑上只有一个版本是不方便的,因此针对深度学习,安装的策略是:

nvidia显卡驱动+cudatoolkit(pytorch)

不需要在电脑上再安装cudatoolkit(nvidia)就能加速深度学习,遇到需要新版本的cuda加速就再建立一个conda环境安装。

conda install pytorch torchvision cudatoolkit=11.3 -c pytorch

2.3 全都用

如果你不止在pytorch中使用,还想在C++中使用,那就需要安装cudatoolkit(navidia),一般的步骤是1、安装nvidia驱动2、安装cudatoolkit(去掉driver)3、conda 安装cudatoolkit(pytorch)

这样可以理解为你的ubuntu系统中有一个driverCUDA和多个runtimeCUDA,那么这时在pytorch环境运行代码是会报错的,也很好理解因为有多个runtimeCUDA产生了冲突,报错。

OSError: /home/cxl/anaconda3/envs/yolo/lib/python3.8/site-packages/nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11

那么最简单的做法就是把bashrc中cuda的环境配置注释掉,打开一个新终端就可以重新运行了。

1.打开bashrc
sudo gedit ~/.bashrc
2.注释cuda环境配置
#export PATH=$PATH:/usr/local/cuda-11.3/bin
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
#export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.3/lib64
3.source ~/.bashrc

在运行别的代码时再将bashrc中的cuda环境配置恢复。我们可以理解为在bashrc中的cuda是全局cuda,而在conda环境中的cuda是局部cuda。

三. 安装

3.1 显卡驱动

关于显卡驱动的安装在我之前的博客写的已经很清楚

https://blog.csdn.net/HUASHUDEYANJING/article/details/128838393?spm=1001.2014.3001.5502

3.2 cudatoolkit(nvidia)

1.从nvidia官网选择cudatoolkit

https://developer.nvidia.com/cuda-toolkit-archive

版本的选择一般低于nvidia-smi中的版本,选择runfile的安装包

2.安装cuda

首先安装一些依赖

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

安装cuda

wget https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run
sudo sh cuda_11.4.4_470.82.01_linux.run
在这一步将driver去掉X

3.配置bashrc

1.打开bashrc
sudo gedit ~/.bashrc
2.添加cuda环境配置
export PATH=$PATH:/usr/local/cuda-11.3/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.3/lib64
3.source ~/.bashrc

3.3 cudatoolkit(pytorch)

conda create -n torch
conda activate torch
conda install cudatoolkit=11.3

直接使用命令安装

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

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

相关文章

GooFuzz:一款基于OSINT方法的模糊测试工具

关于GooFuzz GooFuzz是一款基于OSINT方法的模糊测试工具,该工具基于Google Dork实现其功能。本质上来说,GooFuzz是一个Bash脚本,该脚本使用了Google Search技术来获取文件或目录中的敏感信息,而无需向目标Web服务器发送请求。 工…

ESP-IDF:字符和整形二维指针测试

ESP-IDF:字符和整形二维指针测试 /字符和整形二维指针测试/ void print19a(void ** cp) { cout<<"test char ** "<<endl; cout<<"cp "<<*((char **)cp)<<endl; char *s *((char **)cp); cout<<"cp "<&…

可信数字仓储(TDR)及其实践应用案例

数字资源长期保存活动是为了保存人类的科学文化遗产&#xff0c;为公众提供持续服务&#xff0c;并为未来提供历史证据。在对数字资源进行长期保存的过程中&#xff0c;不可避免地要面对环境、技术、人员等方面的改变&#xff0c;要让用户信任所获得的信息&#xff0c;保存活动…

华为车BU王军被停职,余承东独掌智能车业务丨HiEV独家

来自多个信息源的消息显示&#xff0c;华为智能汽车解决方案BU&#xff08;简称「车BU」&#xff09;正迎来多项人事调整。 据HiEV得知的信息&#xff0c;车BU COO、智能驾驶解决方案产品线总裁王军已被停职。这距王军最近一次公开露面&#xff0c;仅相隔半个月。1月14日&#…

haproxy相关

docker编译运行 创建Dockerfile文件FROM haproxy:2.6.8 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg编译docker镜像 docker build -t my-haproxy .测试配置文件 docker run -it --rm --name haproxy-syntax-check my-haproxy haproxy -c -f /usr/local/etc/haproxy/…

【FreeRTOS】详细讲解FreeRTOS里中断管理并通过示例讲述其用法

文章目录中断函数解析FreeRTOS中断使用示例中断 大家看到中断后&#xff0c;有没有想到一个名词——异常呢&#xff1f;若大家想到了&#xff0c;但是记不起相关概念&#xff1b;或者是&#xff0c;大家没想到这个名词&#xff0c;没关系&#xff0c; 下面小编就给大家伙讲讲中…

VMware 虚拟机无法开机

在windows下安装VMware虚拟机&#xff0c;使用ubuntu18.04系统时&#xff0c;由于非正常关机或者硬盘内存不够&#xff0c;导致无法正常开机&#xff0c;现象如下&#xff1a;问题原因&#xff1a;第一&#xff1a;pillx4_smbus异常&#xff0c;需要禁用&#xff1b;第二&#…

全网最细------爬取4k高清大图

本次案例将教大家免费爬取4k高清大图&#xff0c;即使你是爬虫新手&#xff0c;也可以食用本次文章实现你的免费下载梦,话不多说&#xff0c;先看效果 网站视图: 看到这些图片你是否怦然心动&#xff0c;跟着我一起看下去. 一.思路分析 首先最基本的是获取每张图片的链接&a…

【JavaEE】并发编程(多线程)线程安全问题内存可见性指令重排序

目录 第一个问题&#xff1a;什么是线程安全问题&#xff1f; 第二个问题&#xff1a;为什么会出现线程安全问题&#xff1f; 第三个问题&#xff1a;如何解决多线程安全问题&#xff1f; 第四个问题&#xff1a;产生线程不安全的原因有哪些&#xff1f; 第五个问题&am…

模板进阶(包含特化)

非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

CSS(基础,面试,常见用例)

CSS规则【*】CSS选择器一、 CSS选择器二、选择器匹配原理三、优先级 / 权重四、可继承 / 不可继承样式属性【*】盒模型一、盒模型二、box-sizing属性三、offsetWidth、clientWidth、scrollWidth**【*】em/px/rem/vh/vw的区别一、CSS单位二、px三、em四、rem五、vh、vw六、%百分…

基于spring生态的基础后端开发及渗透测试流程

这是一篇记录如何从建仓开始到最后安全测试完整流程的笔记&#xff0c;使用的spring生态&#xff0c;目的是为spring的基础后端开发及后期渗透测试打一个模板。本篇采用springSecurity作为安全框架&#xff0c;搭载了redis-cache、spring-valid等功能&#xff0c;并开放了OAuth…

实测十款连锁店管理系统,专为纠结的连锁店老板打造!

普通的数据工具、人工管理难以满足连锁店老板们的需求&#xff0c;正所谓“有需求就有市场”&#xff0c;随着连锁店、加盟店如雨后春笋般在城市里出现&#xff0c;连锁店管理系统也越来越多。究竟哪一款连锁店管理系统&#xff0c;才能满足老板们的需求&#xff1f;不用纠结了…

park unpark 原理

1、基本使用 // 暂停当前线程 LockSupport.park();// 恢复某个线程的运行 LockSupport.unpark(暂停线程对象) 先 park 再 unpark public class Test1 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {log.debug(&q…

「自控元件及线路」1.2 电机中的磁性材料与磁场

本节介绍磁性材料的性能、分类 本节介绍电机中永磁材料的工作曲线 本节介绍电机中主磁极、电枢的磁场及电枢反应 文章目录磁性材料的基本概念磁性材料的磁性能高导磁性 饱和性 磁滞性 非线性温度特性 电阻率特性铁耗磁性材料的分类电机中的永磁材料永磁电机概述永磁材料的磁性能…

mysql:聊聊mysql学完之后心得,从哪里学,学哪些,怎么选课程,学到什么程度。

mysql&#xff1a;聊聊mysql学完之后心得&#xff0c;从哪里学&#xff0c;学哪些&#xff0c;怎么选课程&#xff0c;学到什么程度。 学习完一套课程之后习惯性总结一下。首先说一下&#xff0c;咕咕是跟着尚硅谷的康老师学习的mysql&#xff0c;大家想学习的话可以直接去b站…

Java文件IO操作及案例

文章目录一. 文件概述1. 狭义和广义上的文件2. 文件的分类3. 文件的路径二. 针对文件系统的操作1. File类的属性和构造2. File类的获取操作3. File类的判断操作4. 文件的创建和删除5. 其他的常用方法三. 对文件内容进行读写1. IO流对象2. 文件的读操作3. 文件的写操作4. Scanne…

vim使用入门

目录vim模式介绍1.1 模式介绍1.2 模式之间切换1.3 进入vim1.4 退出vimvim模式介绍 1.1 模式介绍 vim具有6种基本模式和5种派生模式。 6种基本模式如下&#xff1a; 普通模式 vim启动后的默认模式。使用编辑器命令&#xff0c;比如移动光标&#xff0c;删除文本等等 普通模式进…

智能指针(二)—— unique_ptr、shared_ptr 的简单模拟实现

智能指针其实就是资源管理权限的转移&#xff0c;自己不想手动释放&#xff0c;交给一个对象管理&#xff0c;对象什么时候被销毁&#xff0c;这块资源也就什么时候被释放。unique_ptr 、shared_ptr 和weak_ptr 之间的区别如下&#xff1a; unique_ptr&#xff1a;字面意思是…

非全研究生开题-室内定位最新研究论文总结-1

序言 时间飞逝,23年3月底之前要把开题报告和综述写好。开学后研究了2个方向:serverless冷启动和室内定位; 春节期间在这2个选题之间犹豫不决,不断在心里面分析 经过反复比较对比,决定研究室内定位,也可以为后续完善产品,甚至后面创业打下基础。 后面我会持续深入,在…