ubuntu22.04 安装 NVIDIA 驱动以及CUDA

目录

1、事前问题解决

2、安装 nvidia 驱动

3、卸载 nvidia 驱动方法

4、安装 CUDA

5、安装 Anaconda

6、安装 PyTorch


1、事前问题解决

在安装完ubuntu之后,如果进入ubuntu出现黑屏情况,一般就是nvidia驱动与linux自带的不兼容,可以通过以下方式解决:

1、启动电脑,进入引导菜单,将光标移动到 Ubuntu项,按键盘上的 "E" 键,进入GRUB页面

2、选择首单词为 linux 对应的行,将光标移动到该行的末尾(一般这行的倒数第2、3个参数为:quiet splash),在这行末尾空一个后输入:nomodeset ,按下键盘的 “Ctrl + X” 或者 F10启动,就能进入Ubuntu系统桌面了。
3、之后需要将系统自带的 nouveau 驱动加入系统黑名单中,输入:sudo gedit /etc/modprobe.d/blacklist.conf ,在文件的末尾添加以下字段:blacklist nouveau,该操作就是将 nouveau 驱动加入系统黑名单
4、最后更新黑名单:sudo update-initramfs -u

2、安装 nvidia 驱动

接下来查询系统推荐的nvidia显卡版本号:

// 先执行这两行 cmd,否则可能出现 ubuntu-drivers devices 执行后没反映的现象
sudo apt update
sudo apt upgrade 
// 查询系统建议安装的nvidia版本
ubuntu-drivers devices
/// 例如  
wsx@wsx:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0 ==
modalias : pci:v000010DEd00002520sv00001043sd00001722bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA106M [GeForce RTX 3060 Mobile / Max-Q]
driver   : nvidia-driver-545-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-535 - distro non-free recommended   // 建议安装版本
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-545 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

然后首先确保 BIOS 的 security boot 是 disable 状态的,以华硕电脑为例,操作如下:

安装过程中可能在进入BIOS时找不到U盘启动项,这时可以尝试将电脑的 Secure Boot Control 关掉。具体的做法为:进入BIOS -> Advanced Mode -> Security -> Secure Boot -> Secure Boot Control -> Disabled。如下所示:

然后执行以下命令安装,最后需要执行 reboot 重启电脑(必须重启,否则后面执行 nvidia-smi 会报错):

sudo apt install nvidia-driver-535
reboot

重启之后执行 nvidia-smi,正常情况下可以看到 nvidia driver 信息以及显卡信息:

注意,这里右上角所显示的 cuda version 是指当前 nvidia 所支持的 cuda 的最高版本,也就是说是可以兼容 cuda 12.1 的。

nvidia-smi 显示的的 cuda version 是当前驱动支持的最大 cuda toolkit 的版本。

CUDA有两种API,分别是运行时API和驱动API,即所谓的Runtime API与Driver API。[可参考:CUDA Compatibility]

nvidia-smi 的结果除了有 GPU 驱动版本型号,还有 CUDA Driver API 的版本号,而 nvcc -V 的结果是对应 CUDA Runtime API。CUDA Runtime API 依赖 CUDA Driver API。

使用conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia 命令安装 pytorch 时,附带的 CUDA 和从官网安装的 CUDA 有何不同?一言以蔽之:前者是后者的子集,是 pytorch 所必须的那一部分子集,而像编译器 nvcc 等非必须的 CUDA 组件则没有。

Pytorch往往只需要使用 CUDA 的动态链接库使程序顺利运行,因为其中利用 CUDA 计算的部分是提前编译好的 ,就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。

当两者同时安装时,pytorch 深度学习环境会优先使用前者。当没有单独安装CUDA时,如果在安装pytorch时安装了 CUDA 子集,那么环境也是可以正常使用的,这在pytorch的源码中可以发现。因此建议使用深度学习环境的同学非必要不安装单独的CUDA,只需保持显卡驱动的正常更新即可。


参考:https://www.zhihu.com/question/622711856/answer/3339303390

3、卸载 nvidia 驱动方法

卸载nvidia驱动的方法: 

sudo apt-get purge nvidia-*
sudo apt-get update
sudo apt-get autoremove

4、安装 CUDA

 CUDA 版本与 NVIDIA 驱动的兼容关系可以参考:CUDA 12.5 Update 1 Release Notes

CUDA 的下载地址: CUDA Toolkit Archive | NVIDIA Developer

这里我装 12.1.1 版本

选择 runfile 来安装,deb 那个看起来命令太多了,吓人。。。 

 这里我在 wget 后面加一个 -P 参数可以制定安装文件夹路径,对应的在执行 .run 文件时也需要加上指定的路径才行:

wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run -P Downloads/
sudo sh Downloads/cuda_12.1.1_530.30.02_linux.run

安装的时候记得去掉安装 driver 的选项,因为上面已经装过了。安装完成之后会出现:

然后添加系统环境变量,根据自己安装的实际版本修改:

export PATH=$PATH:/usr/local/cuda-12.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.1/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-12.1/lib64

然后输入 nvcc -V 来查看是否安装成功:

source .bashrc // 刷新刚才写入的环境变量
nvcc -V

Ubuntu 安装NVIDIA显卡驱动、安装对应的CUDA_ubuntu安装nvidia显卡驱动-CSDN博客

接下来:

5、安装 Anaconda

Download Anaconda Distribution | Anaconda

创建conda环境:

conda create -n name python=3.12

 6、安装 PyTorch

Start Locally | PyTorch

嫌弃 ubuntu pip 安装太慢的话,可以换一下国内的源:

cd ~
mkdir .pip
cd .pip
touch pip.conf
sudo chmod 755 pip.conf
gedit pip.conf

填入以下内容并保存,我这里选择aliyun的源:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

下载直接起飞~

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

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

相关文章

[ECharts] There is a chart instance already initialized on the dom. 已存在图表,渲染重复

报错:已存在图表,渲染重复 解决: 在合适的时机执行 dispose 方法即可 // echarts 全局存入 实例 let myChart: any;// 在你的 initChart 初始化 Echarts 方法中 先执行清理方法 const initChart () > {// 执行清理方法然后初始化if(myChart){cons…

MATLAB怎么实现多条曲线共用一个图例

y1 sin(x); y2 3*sin(x); y3 cos(x); y4 3*cos(x); 例子:如果我们有4条曲线,分布是cos类和sin类,我们的图例就想区分是cos类还是sin类。 第一步(关键步骤) 我们要把我们所需要的类别曲线先画一遍, …

揭秘Django与Neo4j:构建智能知识图谱的终极指南

揭秘Django与Neo4j:构建智能知识图谱的终极指南 前言 图是一种用于对象之间的成对关系进行建模的数学结构。 它由两个主要元素组成:节点和关系。 节点:节点可以看作是传统数据库中的记录。每个节点代表一个对象或实体,例如一个人或一个地方。节点按标签分类,这有助于根…

【SpringBoot】1 Gitee

本项目 Gitee 地址:https://gitee.com/Lin_DH/system idea中可能装个gitee的插件,这样操作起来比较方便。 1)登录 Gitee 官网(https://gitee.com/),新建仓库。 2)复制新建的 Gitee 仓库地址&am…

Intellij IDEA多模块分组 实现move to group

新版本idea,没有了move to group的功能,导致模块很多的时候不能分组。2018版本有。 这个分组是虚拟的,不会在磁盘中实际存在。 要实现这个功能,只需要改modules.xml即可。 步骤 1. 找到配置文件 .idea目录下的moudules.xml 2.…

2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享

初赛A:烟草营销案例数据分析 AB题综合难度不大,难度可以视作0.4个国赛,题量可以看作0.35个国赛题量。适合于国赛前队伍练手,队伍内磨合。竞赛获奖率50%,八月底出成绩,参赛人数3000队左右。本文将为大家进行…

古训如金,指引前行(感受古人的智慧与洞见)

文章目录 古语佳句我与我周旋久,宁作我。花看半开,酒饮微醉,毋意,毋必,毋固,毋我。居逆境中,周身皆针砭药石,好而知其恶,恶而知其美。天下皆知取之为取,而莫知与之为取。喜时之言多失信,怒时之言多失体。仁者如射,射者正己而后发。私视使目盲,达人撒手悬崖,俗子沉…

【React】useEffect 钩子详解

文章目录 一、useEffect 概念二、useEffect 的基本用法1. 无依赖项2. 空依赖项数组3. 带依赖项的 useEffect 三、useEffect 的常见应用场景1. 数据获取2. 订阅与清除3. 动画与定时器 四、useEffect 的进阶用法1. 多个 useEffect2. 条件执行副作用 五、注意事项 useEffect 是 Re…

微信公众号获取用户openid(PHP版,snsapi_base模式)

微信公众号获取用户openid的接口有2个:snsapi_base、snsapi_userinfo 详情见微信公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 本文介绍用PHP方式调用snsapi_base接口获取微信用户…

Tomcat中的WebSocket是如何实现的?

Tomcat中的WebSocket是如何实现的? WebSocket是一种在客户端和服务器之间提供长期、双向、实时通信的协议 全双工通信:WebSocket允许数据同时在客户端和服务器双向通信,无需像HTTP等待请求和响应的循环 单个TCP连接:建立一次连…

Golang | Leetcode Golang题解之第287题寻找重复数

题目: 题解: func findDuplicate(nums []int) int {slow, fast : 0, 0for slow, fast nums[slow], nums[nums[fast]]; slow ! fast; slow, fast nums[slow], nums[nums[fast]] { }slow 0for slow ! fast {slow nums[slow]fast nums[fast]}return s…

【漏洞复现】Jenkins CLI 接口任意文件读取漏洞(CVE-2024-23897)

漏洞简介 Jenkins是一款基于JAVA开发的开源自动化服务器。 Jenkins使用args4j来解析命令行输入,并支持通过HTTP、WebSocket等协议远程传入命令行参数。在args4j中,用户可以通过字符来加载任意文件,这导致攻击者可以通过该特性来读取服务器上…

物联网主机 E6000:智慧应急领域的创新力量

在当今瞬息万变的世界中,突发事件和紧急情况时有发生。如何迅速、准确地应对这些挑战,保障人民生命财产安全,成为了社会发展的重要课题。而物联网主机 E6000 的出现,为智慧应急领域带来了全新的解决方案。 一、强大的性能与功能 物…

好用的缺陷(BUG)跟踪管理系统有哪些?

以下是一些常用的缺陷(BUG)跟踪管理系统,并对它们进行详细列出和比较,同时讨论哪些系统与LabVIEW兼容或常用于LabVIEW项目中。 1. Jira 功能 强大的问题跟踪和项目管理功能。丰富的自定义选项和插件支持。适用于敏捷开发的看板和…

第七章:贝叶斯分类器

目录 7.1 贝叶斯决策论 7.2 极大似然估计 7.3 朴素贝叶斯分类器 7.4 半朴素贝叶斯分类器 7.5 贝叶斯网 7.5.1 结构 7.5.2 学习 7.5.3 推断 7.6 EM算法 7.1 贝叶斯决策论 概率框架下实施决策的基本理论 给定N个类别,令代表将第j类样本误分类为第i类所产生的…

BFS实现迷宫最短路径

结合队列的知识利用 广度优先遍历,通过对能走的路径的记录以及对走过路径的标记,进行多条路搜查 一、理论基础 如下图的迷宫: 选取所走方向(针对某一个位置)下,右,上,左&#xff0…

如何进行小程序的调试

Errno错误码 在使用部分小程序 API / 组件时,抛出的异常(fail 回调 / Promise reject)Error 对象中除了带有 errMsg,还会带有通用错误码 errno。 代码示例 wx.openBluetoothAdapter({success (res) {console.log(res)}fail (er…

测试工作中常听到的名词解释 : )

背景 很多名称其实看字面意思都挺抽象的,有时看群里的测试大佬在不停蹦这类术语,感觉很高大上,但其实很多你应该是知道的,只不过没想到别人是这样叫它的。又或者你的主编程语言不是 Java,所以看不懂他们在讲啥&#x…

微服务安全——OAuth2.1详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码: package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…