当前位置: 首页 > news >正文

CentOS 7.9安装NVIDIA P40显卡驱动、CUDA和cuDNN

文章目录

  • 1、安装P40显卡驱动
    • 1.1 查看机器上有哪些显卡
    • 1.2 禁用nouveau
    • 1.3 安装依赖
    • 1.4 安装驱动
  • 2、安装CUDA
    • 2.1 安装
    • 2.2 测试是否安装成功
  • 3、安装cuDNN
    • 3.1 安装
    • 3.2 测试是否安装成功
  • 4、总结


1、安装P40显卡驱动

1.1 查看机器上有哪些显卡

lspci | grep -i vga
lspci | grep -i nvidia

在这里插入图片描述

1.2 禁用nouveau

nouveau是N卡的开源驱动,linux会自动安装,不是NVIDIA官方的,安装官方驱动前需先禁止掉它。
执行

lsmod | grep nouveau

如果有输出,说明未禁用;如果没有输出,说明已禁用。
如果未禁用则执行如下操作:

vim /usr/lib/modprobe.d/dist-blacklist.conf

注释掉 blacklist nvidiafb 这一行,然后添加下面两行:

blacklist nouveau
options nouveau modeset=0

然后重建initramfs image,执行下面的命令:

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut /boot/initramfs-$(uname -r).img $(uname -r)

重启系统:

reboot

再执行:

lsmod | grep nouveau

在这里插入图片描述

如果没有输出,说明已禁用。

1.3 安装依赖

yum install kernel-devel kernel-headers gcc dkms gcc-c++
  • 可能出现问题的解决(是因为我安装了anaconda3引起的)
(base) [root@clang ~]# yum install kernel-devel kernel-headers gcc dkms gcc-c++
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:/home/anaconda3/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)Please install a package which provides this module, or
verify that the module is installed correctly.It's possible that the above module doesn't match the
current version of Python, which is:
2.7.5 (default, Jun 20 2023, 11:36:40) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]If you cannot solve this problem yourself, please go to 
the yum faq at:http://yum.baseurl.org/wiki/Faq

找了一些方案是做软链接,但是这个问题修复之后,还会出现其他库找不到的情况。这时简单的处理方法就是先卸载anaconda3,安装完之后再重装上。

1.4 安装驱动

官方下载页,根据你的显卡型号搜索。我的显卡是Tesla P4,用的是CUDA 11.2,所以这是我的型号的下载链接。
在这里插入图片描述
下载完后执行:

chmod +x NVIDIA-Linux-x86_64-460.106.00.run
./NVIDIA-Linux-x86_64-460.106.00.run --kernel-source-path=/usr/src/kernels/3.10.0-1160.83.1.el7.x86_64 -no-x-check --no-opengl-files
# --kernel-source-path的值是装完依赖后才有这个路径
# 远程安装会检测x server,要让它不检测
# 不安装opengl,因为安装opengl,CentOS界面UI不能正常启动

–kernel-source-path=/usr/src/kernels/3.10.0-1160.83.1.el7.x86_64 参数的路径需要根据自己内核的目录来修改

  • 安装过程中

Would you like to register the kernel module sources with DKMS? 选yes(服务器选yes,本地选no)

Install NVIDIA’s 32-bit compatibility libraries? 选yes

安装完成后执行:

nvidia-smi

如果有输出,说明驱动已安装。
在这里插入图片描述

  • 安装过程中可能出现异常的解决
    在安装驱动的过程中,我遇到了找不到内核的问题,这时可以通过yum命令安装相应内核来解决,可能用到的命令(需根据自己报错来修改内核版本名称)
sudo yum install linux-headers-3.10.0-1160.92.1.el7.x86_64
sudo yum install kernel-devel-3.10.0-1160.92.1.el7.x86_64

2、安装CUDA

2.1 安装

官方下载页,我下载的是11.2.2的run版本。

chmod +x cuda_11.2.2_460.32.03_linux.run
./cuda_11.2.2_460.32.03_linux.run --no-opengl-libs

安装时,X表示选中,即安装,空白表示不选中,即不安装。驱动前面已经安装了,不用再安装。设成下面的样子,再Install。

CUDA Installer
- [ ] Driver[ ] 460.32.03
+ [X] CUDA Toolkit 11.2[X] CUDA Samples 11.2[X] CUDA Demo Suite 11.2[X] CUDA Documentation 11.2OptionsInstall

安装完后配置环境变量:

vim /etc/profile
# 添加下面两行,路径要和上图中一样
export PATH=/usr/local/cuda-11.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH# 保存并重新加载
source /etc/profile

2.2 测试是否安装成功

终端输入cuda并连按两次tab,若有候选命令,则再执行nvcc --version,有输出版本信息就是安装成功。
在这里插入图片描述
在这里插入图片描述

3、安装cuDNN

3.1 安装

官方下载页,在页面内下载针对前面匹配的11.x版本,下载时会提示登录NVIDIA账号,注册账号并登录就可以下载了,下载后执行下面的命令:

tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
# 以下三行命令from https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
# 参考链接中这一步复制的文件和官方文档中不太一样
cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

3.2 测试是否安装成功

新建一个cudnn_test.cu文件:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#include <cudnn.h>#define CHECK_CUDA_ERROR(call) { \cudaError_t error = call; \if (error != cudaSuccess) { \printf("CUDA error: %s, line %d\n", cudaGetErrorString(error), __LINE__); \exit(1); \} \
}#define CHECK_CUDNN_ERROR(call) { \cudnnStatus_t status = call; \if (status != CUDNN_STATUS_SUCCESS) { \printf("CUDNN error: %s, line %d\n", cudnnGetErrorString(status), __LINE__); \exit(1); \} \
}void initialize(float *matrix, int size) {for (int i = 0; i < size; ++i) {matrix[i] = rand() / (float)RAND_MAX; // Initialize with random values}
}int main() {const int N = 1024; // Matrix sizeconst int K = 1024;const int M = 1024;// Allocate memory on hostfloat *A = (float*)malloc(N * K * sizeof(float));float *B = (float*)malloc(K * M * sizeof(float));float *C = (float*)malloc(N * M * sizeof(float));// Initialize matricesinitialize(A, N * K);initialize(B, K * M);// Allocate memory on devicefloat *d_A, *d_B, *d_C;CHECK_CUDA_ERROR(cudaMalloc(&d_A, N * K * sizeof(float)));CHECK_CUDA_ERROR(cudaMalloc(&d_B, K * M * sizeof(float)));CHECK_CUDA_ERROR(cudaMalloc(&d_C, N * M * sizeof(float)));// Copy data from host to deviceCHECK_CUDA_ERROR(cudaMemcpy(d_A, A, N * K * sizeof(float), cudaMemcpyHostToDevice));CHECK_CUDA_ERROR(cudaMemcpy(d_B, B, K * M * sizeof(float), cudaMemcpyHostToDevice));// Create CUDNN contextcudnnHandle_t cudnn;CHECK_CUDNN_ERROR(cudnnCreate(&cudnn));// Define tensor descriptorscudnnTensorDescriptor_t descA, descB, descC;CHECK_CUDNN_ERROR(cudnnCreateTensorDescriptor(&descA));CHECK_CUDNN_ERROR(cudnnCreateTensorDescriptor(&descB));CHECK_CUDNN_ERROR(cudnnCreateTensorDescriptor(&descC));CHECK_CUDNN_ERROR(cudnnSetTensor4dDescriptor(descA, CUDNN_TENSOR_NCHW, CUDNN_DATA_FLOAT, 1, N, K, 1));CHECK_CUDNN_ERROR(cudnnSetTensor4dDescriptor(descB, CUDNN_TENSOR_NCHW, CUDNN_DATA_FLOAT, 1, K, M, 1));CHECK_CUDNN_ERROR(cudnnSetTensor4dDescriptor(descC, CUDNN_TENSOR_NCHW, CUDNN_DATA_FLOAT, 1, N, M, 1));// Define convolution descriptors (in this case, it's just matrix addition)cudnnOpTensorDescriptor_t opDesc;CHECK_CUDNN_ERROR(cudnnCreateOpTensorDescriptor(&opDesc));CHECK_CUDNN_ERROR(cudnnSetOpTensorDescriptor(opDesc, CUDNN_OP_TENSOR_ADD, CUDNN_DATA_FLOAT, CUDNN_NOT_PROPAGATE_NAN));// Perform the operationfloat alpha = 1.0f;float beta = 0.0f;CHECK_CUDNN_ERROR(cudnnOpTensor(cudnn, opDesc, &alpha, descA, d_A, &alpha, descB, d_B, &beta, descC, d_C));// Copy the result back to hostCHECK_CUDA_ERROR(cudaMemcpy(C, d_C, N * M * sizeof(float), cudaMemcpyDeviceToHost));// CleanupcudaFree(d_A);cudaFree(d_B);cudaFree(d_C);cudnnDestroyTensorDescriptor(descA);cudnnDestroyTensorDescriptor(descB);cudnnDestroyTensorDescriptor(descC);cudnnDestroyOpTensorDescriptor(opDesc);cudnnDestroy(cudnn);free(A);free(B);free(C);printf("Operation completed successfully.\n");return 0;
}

编译:

nvcc -o cudnn_test cudnn_test.cu -lcudnn

执行:

./cudnn_test

4、总结

至此显卡驱动、CUDA和cuDNN就安装完成了,安装过程中主要是禁用开源显卡驱动和操作系统内核版本的匹配安装。

提示:更多内容可以访问Clang’s Blog:https://www.clang.asia

相关文章:

CentOS 7.9安装NVIDIA P40显卡驱动、CUDA和cuDNN

文章目录 1、安装P40显卡驱动1.1 查看机器上有哪些显卡1.2 禁用nouveau1.3 安装依赖1.4 安装驱动 2、安装CUDA2.1 安装2.2 测试是否安装成功 3、安装cuDNN3.1 安装3.2 测试是否安装成功 4、总结 1、安装P40显卡驱动 1.1 查看机器上有哪些显卡 lspci | grep -i vga lspci | gr…...

SpringBoot多数据源启动出现循环依赖问题

在使用SpringBoot的项目中&#xff0c;如果是有使用多数据源&#xff0c;可能会存在启动时数据源循环依赖的报错&#xff0c;是因为使用了多数据源注入&#xff0c;和DataSourceAutoConfiguration数据源自动配置的DataSourceInitializerInvoker互相产生循环依赖导致。 这种错误…...

【一步一步了解Java系列】:何为数组,何为引用类型

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 数组 数组是一推相同数据…...

2024年5月份最新独角数卡使用USDT详细小白教程

直观配套视频教程 2024年5月份最新独角数卡安装及USDT使用详细小白教程 1、创建服务器 Centos或者Ubuntu2、宝塔面板开心版安装寶塔 Linux 面版 8.0.5 開心版 - 2024年1月12日 - 开心专区 - 异次元 - Powered by Discuz!Centos安装命令&#xff08;默认安装是 8.0.1 直接在线升…...

【idea】idea2024最新版本下载_安装_破解

1、下载 下载地址&#xff1a;下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 下载完成&#xff1a; idea破解脚本下载链接&#xff1a;https://pan.baidu.com/s/1L5qq26cRABw8XuEn_CngKQ 提取码&#xff1a;6666 下载完成&#xff1a; 2、安装 1、双击idea的安装包&…...

部署CNI网络组件+k8s多master集群部署+负载均衡

一、环境部署 主机服务 192.168.91.5 K8S集群master01192.168.91.8 K8S集群master02192.168.91.6K8S集群node01192.168.91.7K8S集群node02192.168.91.9 负载均衡nginxkeepalive01&#xff08;master&#xff09;192.168.91.10 负载均衡nginxkeepalive02&#xff08;backup&am…...

一个和蔼可亲的Python库,用Gooey为你的程序添加GUI

大家好&#xff0c;你有没有遇到过这样的情况&#xff1a;你写了一个非常棒的命令行程序&#xff0c;但当你分享给朋友或同事时&#xff0c;他们却因为害怕命令行而不愿意使用&#xff1f;这时候&#xff0c;一个简洁美观的图形用户界面&#xff08;GUI&#xff09;就派上用场了…...

java抽象类,接口,枚举练习题

第一题&#xff1a; 答案&#xff1a; class Animal{//成员变量protected String name;protected int weight;//构造方法public Animal(){this.name"refer";this.weight50;}public Animal(String name,int weight){this.namename;this.weightweight;}//成员方法publ…...

探索Python技巧:零基础学习缩进与逻辑关系

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、理解Python的缩进语法 缩进规则详解 二、缩进在逻辑关系中的应用 逻辑块示例 三、实…...

【设计模式】JAVA Design Patterns——Callback(回调模式)

&#x1f50d;目的 回调是一部分被当为参数来传递给其他代码的可执行代码&#xff0c;接收方的代码可以在一些方便的时候来调用它。 &#x1f50d;解释 真实世界例子 我们需要被通知当执行的任务结束时。我们为调用者传递一个回调方法然后等它调用通知我们。 通俗描述 回调是一…...

Pandas高效数据清洗与转换技巧指南【数据预处理】

三、数据处理 1.合并数据&#xff08;join、merge、concat函数&#xff0c;append函数&#xff09; Concat()函数使用 1.concat操作可以将两个pandas表在垂直方向上进行粘合或者堆叠。 join属性为outer&#xff0c;或默认时&#xff0c;返回列名并集&#xff0c;如&#xff…...

kafka防止消息丢失配置

无消息丢失最佳实践配置&#xff1a; 不要使用 producer.send(msg)&#xff0c;而要使用 producer.send(msg, callback) API。设置 acks all。是 Producer 参数。设置成 all&#xff0c;表明所有副本 Broker 都要接收到消息&#xff0c;g该消息才算是“已提交”。设置 retrie…...

Socket CAN中ctrlmode有哪些?

在Linux中,socketcan 的 ctrlmode 是一个用于配置CAN设备控制模式的标志字段。该字段的值由一组标志位组成,这些标志位控制CAN设备的各种操作模式。以下是一些常见的 ctrlmode 标志及其含义: CAN_CTRLMODE_LOOPBACK: 描述:启用回环模式。作用:设备在发送帧的同时会接收它…...

find 几招在 Linux 中高效地查找目录

1. 介绍 在 Linux 操作系统中&#xff0c;查找目录是一项常见的任务。无论是系统管理员还是普通用户&#xff0c;都可能需要查找特定的目录以执行各种操作&#xff0c;如导航文件系统、备份数据、删除文件等。Linux 提供了多种命令和工具来帮助我们在文件系统中快速找到目标目…...

【ELK日志收集过程】

文章目录 为什么要使用ELK收集日志ELK具体应用场景ELK日志收集的流程 为什么要使用ELK收集日志 使用 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;进行日志收集和分析有多种原因。ELK 堆栈提供了强大、灵活且可扩展的工具集&#xff0c;能够满足现代 IT 系统对…...

设计模式—23种设计模式重点 表格梳理

设计模式的核心在于提供了相关的问题的解决方案&#xff0c;使得人们可以更加简单方便的复用成功的设计和体系结构。 按照设计模式的目的可以分为三大类。创建型模式与对象的创建有关&#xff1b;结构型模式处理类或对象的组合&#xff1b;行为型模式对类或对象怎样交互和怎样…...

Vue学习穿梭框Transfer组件

Vue学习Transfer组件 一、前言1、案例一2、案例二 一、前言 在 Vue 3 中使用 el-transfer 组件可以帮助你实现数据的穿梭功能&#xff0c;让用户可以将数据从一个列表转移到另一个列表。下面是一个简单示例&#xff0c;演示如何在 Vue 3 中使用 el-transfer 组件&#xff1a; …...

Android 项目中自定义多个 RadioButton 并排一列选择效果实现

文章目录 1、静态版实现1.1、实现要求1.2、实现步骤1.3、代码实现1.4、代码实现说明1.5、结论 2、项目版实现(动态)1、先看效果图2、main的布局文件3、定义RadioButton的属性4、最后在代码中生成我想要的东东5、说明 3、后续优化方向 1、静态版实现 1.1、实现要求 我们需要在…...

解决win系统msvcp140.dll丢失的多种常用方法,亲测有效!

msvcp140.dll 是一个重要的Windows系统文件&#xff0c;属于Microsoft Visual C Redistributable runtime components的一部分&#xff0c;特别与Visual Studio 2015及之后版本编译的C应用程序相关联。这个动态链接库&#xff08;DLL&#xff09;文件包含了一系列C标准库的功能…...

使用keepalived实现mysql主从复制的自动切换

使用Keepalived实现MySQL主从复制的自动切换通常涉及配置一个虚拟IP&#xff08;VIP&#xff09;作为MySQL服务器对客户端的访问点。Keepalived会监控MySQL主服务器的健康状况&#xff0c;如果主服务器宕机&#xff0c;Keepalived会自动将虚拟IP移至备用服务器&#xff0c;从而…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...