ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

显卡驱动、CUDA、cuDNN 依赖关系与版本匹配安装排错指南

显卡驱动、CUDA、cuDNN 依赖关系与版本匹配安装排错指南 显卡驱动、CUDA、cuDNN 这三个词基本是每个刚上手深度学习的人都要被绊一跤的地方。我自己第一次装的时候折腾了整整两天先是 ubuntu 装完显卡驱动黑屏进不去图形界面接着是 CUDA 下到一半报gzip: stdin: invalid compressed>----------------------------------------------------------------------------- | NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | || | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A | -----------------------------------------------------------------------------这里的CUDA Version: 12.2不是你机器上装好的 CUDA 版本而是这个驱动最高能支持到哪个 CUDA Runtime 版本。它是驱动的一个能力上限声明跟/usr/local/下面躺了哪些文件夹半毛钱关系都没有。真正代表我装了哪个 CUDA的命令是nvcc -V或者看/usr/local/cuda这个软链接指向哪个目录。所以完全可能出现这种组合nvidia-smi显示 12.2nvcc -V显示 11.8而 PyTorch 打印torch.version.cuda是 12.1。三个数字全不一样但环境是健康的。第一次看到会很慌理解了上面的规则就踏实了。1.4 版本选型的正确顺序从框架倒推绝大多数人安装失败是因为安装顺序是先装驱动再装最新 CUDA最后随便挑个 cuDNN这是从下往上装一旦框架不支持就得推倒重来。正确做法是从上往下倒推四步先确定你要用的框架和版本。比如你要跑某个开源项目它requirements.txt里写了torch2.4.0那 CUDA 就被框定在 12.1/12.4 这个区间。根据框架官方给的对应表确定 CUDA 版本。PyTorch 官网的安装页会直接告诉你cu118、cu121、cu124、cu126、cu128这些轮子分别对应哪个 CUDA Runtime。根据 CUDA 版本反查所需的最低驱动版本NVIDIA 官方的 CUDA Release Notes 里有一张对应表也可以在目标机器上直接看nvidia-smi的上限够不够。cuDNN 跟着 CUDA 走大版本对齐即可小版本挑最新的稳定版。这个顺序颠倒过来就是无穷无尽的返工。我见过最惨的一个同学为了用最新的 CUDA 13把驱动升到了最新结果他那张 Maxell 架构的老卡直接不在支持列表里机器当场罢工。2. 显卡驱动一切的底座2.1 装之前先摸清硬件和系统底细动手之前先收集信息这一步花三分钟能省掉后面三小时。Ubuntu 下常用这几条lspci | grep -i -E vga|3d|nvidia lsb_release -a uname -r ubuntu-drivers devices dpkg -l | grep -i nvidia第一条告诉你机器上有几块显示设备、都是什么型号。这里有个坑很多带独显的笔记本或者台式机同时有 Intel 核显和 NVIDIA 独显输出里会同时出现Intel Corporation HD Graphics 630和NVIDIA Corporation ...两条。这不代表你要给核显装 NVIDIA 驱动也不代表必须禁用核显——两者可以共存只是显示输出走谁的问题后面会讲。第二条看系统版本20.04、22.04、24.04 的包名和内核行为差别不小。第三条看内核版本因为 NVIDIA 驱动是内核模块装了之后每次内核升级都要重新编译模块心里要有数。第四条是最省事的它会直接推荐一个适合你当前硬件和系统版本的驱动版本号。还要特别留意一件事如果机器是品牌工作站或者服务器比如某些国产工作站机型原厂驱动包里的显卡型号信息经常滞后甚至给的还是几年前的旧版本。这种情况别偷懒用原厂包直接lspci看清显卡真实型号去 NVIDIA 官方找对应驱动。2.2 Ubuntu 上装驱动的三条路线怎么选Ubuntu 装 NVIDIA 驱动主要有三条路各有适用场景安装方式命令 / 入口优点缺点适用场景附加驱动图形界面软件和更新 → 附加驱动图形化、零学习成本可选版本少、依赖网络桌面用户首次安装apt 包管理apt install nvidia-driver-535自动处理内核模块、自动禁用 nouveau、可卸载版本受仓库限制绝大多数场景推荐官方 runfile.run可执行文件版本最全、可离线需手动禁 nouveau、升级内核易失效无网络、特殊版本需求我的建议很直接能联网就用 apt不能联网才用 runfile。apt 方式会自动把 nouveau 加进黑名单、自动配置 DKMSDynamic Kernel Module Support内核升级后自动重编译模块省掉一大半麻烦。runfile 方式虽然灵活但每次系统内核更新之后nvidia-smi就可能报Failed to initialize NVML: Driver/library version mismatch得手动重装一遍长期维护成本高。至于附加驱动那个图形界面适合完全不想碰命令行的桌面用户可选的版本就是 Ubuntu 仓库里那几个对应 CUDA 上限往往偏低做深度学习通常不够用。2.3 apt 方式完整实操以 Ubuntu 22.04 535 为例先装编译环境这是必须的NVIDIA 内核模块需要现场编译sudo apt update sudo apt install -y build-essential linux-headers-$(uname -r) sudo apt install -y nvidia-driver-535 sudo reboot重启之后执行nvidia-smi如果能看到显卡型号、显存、温度、驱动版本就成了。整个过程不需要手动去改blacklist-nouveau.conf因为nvidia-driver-535这个包在安装时会自动把 nouveau 拉黑并执行update-initramfs。这里有几个必须知道的细节。第一linux-headers-$(uname -r)一定要跟当前运行的内核版本严格对应如果你之前升级过内核但没重启装上的 headers 可能是新内核的而当前跑的是旧内核编译就会失败。第二笔记本用户如果发现装完驱动之后nvidia-smi正常但图形界面用的是核显那是 Optimus 混合输出机制可以用prime-select query查看当前模式prime-select nvidia切换成独显直连功耗变高续航变短prime-select on-demand让程序按需调用。第三如果你的主板开了 Secure Boot安装过程中会弹出一个蓝底界面要求你设置 MOK 密码设一个简单的记下来重启后还要在同一个界面里输入一遍完成签名否则驱动模块加载会被安全启动拦下来。2.4 离线场景与 runfile 安装的关键参数无网络的机器比如内网服务器、离线工作站只能走 runfile。流程大概是在能联网的机器上下载对应版本的.run文件拷到目标机先禁 nouveau再切到文本模式安装。sudo bash -c echo -e blacklist nouveau\noptions nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u sudo reboot # 重启后 CtrlAltF3 切到 tty登录 sudo systemctl stop gdm3 # 或 lightdm / sddm看你用什么显示管理器 sudo sh NVIDIA-Linux-x86_64-535.183.01.run \ --no-opengl-files \ --no-x-check \ --dkms \ --silent sudo reboot参数含义值得单独说一下。--no-opengl-files是不覆盖系统自带的 OpenGL 库笔记本双显卡环境加上它能避免装完进不去桌面。--no-x-check跳过 X 服务检查因为你已经把显示管理器停了不加这个参数它可能误判。--dkms让驱动注册进 DKMS内核升级后自动重建模块强烈建议加上。--silent是静默安装批量部署时用。如果装完黑屏进不去图形界面别慌CtrlAltF3进 tty先看dmesg | grep -i nvidia和cat /var/log/nvidia-installer.log八成是 OpenGL 库冲突或者 Secure Boot 没签名。2.5 Windows 平台的清理与安装Windows 上装驱动本身很简单去 NVIDIA 官网按显卡型号下载安装包一路下一步即可。麻烦在于换卡或者降版本的时候旧驱动的残留会让新驱动装不上或者装上了也不正常。这时候需要 DDUDisplay Driver Uninstaller。正确姿势是先把 DDU 下载好放在桌面然后进安全模式按住 Shift 点重启 → 疑难解答 → 高级选项 → 启动设置 → 重启 → 按 4在安全模式下运行 DDU选择清除并重启重启后再装新驱动。直接在正常模式下用 DDU 清理也行但偶尔会有残留文件删不掉。还有一个 Windows 用户经常忽略的点如果用 WSL2 跑 GPU 任务Windows 侧只需要装普通显卡驱动WSL 内部不要再装一遍 Linux 版驱动。WSL 用的是 Windows 驱动透传进来的libcuda.so你在 WSL 里装一遍反而会把透传的库覆盖掉nvidia-smi直接挂掉。2.6 不同显卡架构该选哪个驱动分支这是一个必须看表的问题选错了就是白装。下面这张表是基于公开支持信息整理的常见情况实际以 NVIDIA 官方驱动页的支持产品列表为准显卡示例架构常见驱动分支CUDA 上限参考说明GTX 750 / 750TiMaxwell470.x 长期分支11.4 左右算力 5.0别追新锁旧组合最稳Quadro P600Pascal5xx 系列视架构支持情况12.x视驱动老专业卡建议锁 CUDA 11.8RTX 4060TiAda Lovelace535 / 550 / 57012.2 ~ 12.8主流选择新驱动随便上RTX 50 系列Blackwell570 及以上12.8 及以上老驱动完全不认这张卡Intel HD 630核显Intel 图形栈不适用只负责显示输出不参与 CUDA关于 750Ti 我要多说一句这张卡算力是 5.0能跑的 CUDA 版本有天花板很多人拿着 750Ti 想装 CUDA 12结果卡在驱动支持列表外面。老老实实用 CUDA 11.8 配 470 或 535 分支的驱动PyTorch 用cu118的轮子能跑得挺稳。同样P600 也是这个思路它是给专业图形和轻量推理用的别指望它跑大模型训练。至于 Intel HD 630 这种核显它的驱动是 Intel 图形栈自己管的跟 NVIDIA 那套完全并行。它存在的意义是省电和显示输出你不需要为它做任何 CUDA 相关的操作。笔记本上如果出现装了 NVIDIA 驱动之后桌面变卡通常是显示输出还挂在核显上或者 PRIME 模式没切对。3. CUDA Toolkit 安装从下载到验证3.1 版本怎么定再次强调倒推再重复一次核心逻辑先定框架版本再定 CUDA 版本。举个具体例子你手上有个项目要torch2.4.0那基本上就在 CUDA 12.1 / 12.4 里挑要torch2.1.x那 CUDA 11.8 和 12.1 都能选如果是llama-cpp-python这类带 CUDA 的 whl 包就得看清楚包名里的编译选项和它依赖的运行时版本cu12的轮子需要一个能跑 12.x 的驱动环境。热词里提到cuda version: 13.0 需要安装 pytorch 的版本这里要提醒一句CUDA 主版本刚更新的时候官方轮子往往还没跟上别急着升。查框架支持的 CUDA 列表永远以框架官网安装页给的命令为准那是唯一可靠来源。3.2 apt 仓库安装联网环境首选NVIDIA 官方为常见发行版维护了 apt 仓库装起来干净、可升级、可卸载。以 Ubuntu 22.04 装 12.4 为例wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update sudo apt install -y cuda-toolkit-12-4请注意包名的选择这是个大坑cuda元包会把完整工具链加上驱动一起装还可能顺手升级你现有的驱动在已经装好驱动的机器上容易出乱子。cuda-toolkit-12-4只装工具链不动驱动已经装好驱动的情况下选这个。cuda-runtime-12-4只装运行时库不带编译器给纯部署环境用。装完之后到/usr/local/cuda-12.4看一眼目录结构对就成功了一半。想装多个版本就重复上面的步骤把版本号换掉即可各版本会各自躺在一个目录里互不干扰。3.3 runfile 安装与那个经典的 gzip 报错离线或者需要精确控制组件的时候用 runfilewget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run --toolkit --silent --override--toolkit表示只装工具链不装驱动--silent静默--override忽略编译器版本检查。这个检查经常误伤——你的 GCC 版本比 CUDA 支持列表里的新一点它就拒绝安装--override直接跳过。不过要意识到风险跳过检查后如果 GCC 版本确实太新编译某些示例代码可能真的报错。然后说说热词里反复出现的那个报错gzip: stdin: invalid compressed>export CUDA_HOME/usr/local/cuda export PATH$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_HOME/lib64:$LD_LIBRARY_PATHPATH是为了让 shell 找到nvcc、nvprof这些可执行文件。LD_LIBRARY_PATH是为了让动态链接器找到libcudart.so、libcudnn.so这些共享库。CUDA_HOME是给某些构建脚本比如 OpenCV 编译、llama.cpp 编译用的它们会读这个变量去找 CUDA 头文件。关于LD_LIBRARY_PATH我有个经验之谈不要无脑往里面塞一长串路径。有些朋友为了多版本共存把七八个目录都塞进这个变量结果编译别的软件时链接器从错误的目录抓到了不兼容的库版本报一堆莫名其妙的symbol lookup error。更好的做法是在需要的时候临时设置比如写个source setcuda.sh 11.8的小脚本用完就退出终端。3.5 多版本共存与切换的三种做法实际工作中经常需要在 CUDA 11.8 和 12.4 之间来回切比如一个老模型要 11.8一个新库要 12.4。三种方案方案一软链接切换。/usr/local/cuda本身是个指向具体版本的符号链接切换就是重指一下sudo rm -f /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda简单粗暴全局生效缺点是同一时刻只能有一个版本。方案二update-alternatives。系统级的多版本管理工具能统一管理nvcc和cuda这两个入口切换有记录适合长期维护的机器。sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.8 100 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.4 200 sudo update-alternatives --config cuda方案三环境变量临时覆盖。不改系统状态每个终端独立export PATH/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH export CUDA_HOME/usr/local/cuda-11.8我平时最常用第三种因为容器化部署和多人共用机器的情况下改全局状态容易影响到别人。写个use_cuda.sh脚本前面说过几行就够。3.6 装完必须验证别跳验证分三步缺一不可nvcc -V # 应该输出 Cuda compilation tools, release 12.4, V12.4.xx ls -l /usr/local/cuda # 确认软链接指向你想要的版本 cat /usr/local/cuda/version.json # CUDA 12 之后有 version.json比 nvcc 更权威再跑一次实机验证这步最关键因为它证明驱动和 CUDA 真的能协同工作。CUDA 12 之后 runfile 不再自带 samples需要单独拉git clone https://github.com/NVIDIA/cuda-samples.git cd cuda-samples mkdir build cd build cmake .. -DCMAKE_CUDA_COMPILER/usr/local/cuda/bin/nvcc make -j$(nproc) ./Samples/1_Utilities/deviceQuery/deviceQuerydeviceQuery输出的最后一行如果是Result PASS说明驱动、CUDA、硬件三方都通了。如果 apt 安装的方式示例程序可能在/usr/local/cuda/extras/demo_suite/下直接跑deviceQuery和bandwidthTest也行。热词里提到的cuda samples 找不到多半是找错路径了现在官方推荐自己 clone 下来编译。4. cuDNN装法、验证与框架对接4.1 先搞清楚 cuDNN 跟 CUDA 的对应关系cuDNN 是跟着 CUDA 大版本走的它不像 CUDA 那样有明确的次版本兼容规则大版本必须对齐。给 CUDA 11.x 用的 cuDNN 9 和给 CUDA 12.x 用的 cuDNN 9是两份不同的包下载页面上会明确标出for CUDA 11.x和for CUDA 12.x。版本命名上cuDNN 8 时代的包名是libcudnn8cuDNN 9 时代变成libcudnn9-cuda-12这种带 CUDA 主版本后缀的形式比以前清晰很多。下载需要在 NVIDIA 开发者站点注册账号虽然不需要付费但首次操作会绕一点。4.2 tar 包手动布局经典但不好卸载这是流传最广的一种做法把库文件直接拷进 CUDA 目录tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive sudo cp include/cudnn*.h /usr/local/cuda/include/ sudo cp lib/libcudnn* /usr/local/cuda/lib64/ sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*它的优点是简单直接不挑系统版本一份 tar 包哪个发行版都能用。缺点也很明显没有包管理记录想升级或者卸载的时候你得自己记住拷了哪些文件进去一个个删。时间长了谁还记得最后只能整个 CUDA 目录重装。另外要注意如果你装了两个版本的 CUDA这样拷贝只会拷到你指定的那个目录前提是你得把路径写对别想当然写成/usr/local/cuda结果实际在 11.8 的目录里多版本环境下手动管理很容易搞混。4.3 deb 包安装我更推荐的方案现在官方主推 deb 方式干净、可查、可卸载sudo dpkg -i cudnn-local-repo-ubuntu2204-9.x.x.x_1.0-1_amd64.deb sudo cp /var/cudnn-local-repo-ubuntu2204-9.x.x.x/cudnn-*-keyring.gpg /usr/share/keyrings/ sudo apt update sudo apt install -y libcudnn9-cuda-12装完之后apt list --installed | grep cudnn能看到完整的包记录卸载直接apt remove就行。deb 方式还有个好处它会自动把库文件放到系统标准库路径里/usr/lib/x86_64-linux-gnu/不用再依赖LD_LIBRARY_PATH去找。对你没看错这就是为什么有些人没配LD_LIBRARY_PATH也能跑起来——他们装的是 deb 版。如果同时还想装开发用的一些附加组件比如 samples、静态库可以再装libcudnn9-samples之类。4.4 验证 cuDNN 版本的两个办法验证 cuDNN 是否装好、装的是哪个版本有两种途径# 方法一看头文件tar 方式装的库在这找 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 # 方法二看包管理记录deb 方式装的库用这个 dpkg -l | grep cudnn方法一输出的是CUDNN_MAJOR、CUDNN_MINOR、CUDNN_PATCHLEVEL三个宏拼起来就是版本号。方法二出来的是包名和版本更直观。注意 cuDNN 9 之后头文件路径可能有调整有些发行版放在/usr/include/下面找不到就往系统 include 目录看一眼。4.5 一个重要认知pip 装的 PyTorch 自带 CUDA 和 cuDNN这是很多人绕不出来的弯。你用pip install torch或者conda install pytorch-cuda11.8装下来的 PyTorch包里已经打包了一份 CUDA Runtime 和 cuDNN它们装在 conda 环境或者 site-packages 里面运行时优先加载自己那份不看你系统装的 CUDA。这就解释了两个看似矛盾的现象第一个现象一台干干净净的机器没装系统 CUDAnvcc -V报 command not found但torch.cuda.is_available()返回 True模型跑得飞快。因为驱动装了PyTorch 自带运行时能通过驱动调到 GPU。第二个现象你认认真真装了 CUDA 12.4 和 cuDNN 9结果torch.cuda.is_available()还是 False。原因是装的是cpu版本的 Pyramid或者装的是配 CUDA 11.8 的轮子但系统驱动太老。所以调试时先打印这几个值import torch print(torch.__version__) print(torch.version.cuda) print(torch.backends.cudnn.version()) print(torch.cuda.is_available())torch.version.cuda是 PyTorch 编译时用的 CUDA 版本torch.backends.cudnn.version()是它打包的 cuDNN 版本。这两个数字跟系统里装的 CUDA/cuDNN 可以完全无关这是正常的不要试图把它们对齐。那什么时候真的需要系统 CUDA两种场景一是要从源码编译带 CUDA 支持的扩展比如编译 OpenCV 的 CUDA 版本、编译llama.cpp、编译自定义算子这时候必须要有完整的 CUDA Toolkit带 nvcc二是用 TensorRT、DeepStream 这类 NVIDIA 原生 SDK它们会明确要求系统 CUDA 版本。5. 版本匹配矩阵与排错实录5.1 常见版本组合速查下面这张表是我在不同机器上验证过、或者被问得最多的组合可以作为起点但最终以官方对应表为准硬件/场景推荐驱动推荐 CUDA推荐 cuDNN框架轮子RTX 30/40 系 新项目550 及以上12.4 / 12.69.x for CUDA 12cu124 / cu126RTX 50 系570 及以上12.8 及以上9.x for CUDA 12cu128老卡750Ti / P600470 / 535 分支11.88.9.x for CUDA 11cu118单位内网服务器视显卡型号11.8兼容性最好8.9.xcu118WSL2Windows 侧驱动12.x跟随框架cu12x为什么内网服务器我总推荐 11.8因为它是 CUDA 11 系列的最后一个大版本兼容性覆盖了绝大多数还在维护的框架版本而且对老架构显卡友好。新卡新项目当然可以上 12.x但如果是多人共用、要求稳定的环境11.8 的坑最少。5.2 排错速查表这张表建议直接收藏九成的报错都在里面报错 / 现象大概率原因处理办法nvidia-smi: command not found驱动没装或 PATH 里没有apt install nvidia-driver-xxx后重启Failed to initialize NVML内核升级后模块没重建重装驱动或用 DKMS 版Driver/library version mismatch驱动版本和已加载模块不一致重启不行就重装驱动torch.cuda.is_available() False装了 CPU 版轮子或驱动太老重装对应 cu 版本的 torchlibcudnn.so.8: cannot open shared object file库路径没配或 cuDNN 没装配 LD_LIBRARY_PATH 或装 deb 版undefined symbol: cudnnXxxcuDNN 与 CUDA 大版本不匹配换成对应 for CUDA xx 的包gzip: stdin: invalid compressed data安装包下载不完整校验 sha256 后重新下载no supported version of visual studio was foundWindows 装 CUDA 时 VS 版本太新安装时取消 VS 集成勾选跳过装了驱动后进不去桌面OpenGL 库冲突 / Secure Boot 未签名tty 登录排查重装加--no-opengl-filesWSL 里nvidia-smi挂掉在 WSL 内装了 Linux 驱动卸载 WSL 内的驱动用 Windows 侧透传编译 OpenCV 报 CUDA 相关错误CUDA_ARCH_BIN 没设对按显卡算力设-DCUDA_ARCH_BIN8.9cuda by example代码编译失败示例来自 CUDA 5 时代加-archsm_xx并改老语法关于cuda by example这类老书里的示例我得说一句书本身讲原理很好但配套代码是基于十几年前的 CUDA 版本写的里面有大量现在已废弃的语法比如cutil.h这种早就没有的头文件。想跑的话得自己大改不如直接看官方 cuda-samples 里的现代写法。学习原理和跑通代码是两件事。5.3 几个只有踩过才知道的细节第一个是内核升级导致的驱动失效。Ubuntu 隔一段时间就推内核更新重启之后nvidia-smi突然报Failed to initialize NVML。原因就是新内核下没有对应的驱动模块。DKMS 版本的驱动会自动重编译非 DKMS 的就得手动处理。判断方法dkms status看有没有 nvidia 条目。所以我在 2.4 节强调 runfile 安装一定要加--dkms。第二个是 conda 环境之间的 CUDA 版本污染。同一个用户下有多个 conda 环境每个环境里装的 PyTorch 可能对应不同 CUDA 版本而系统级的LD_LIBRARY_PATH是共享的。如果你把某个环境自带的库路径写进了全局变量另一个环境就可能加载到错误的库。解决办法就是不要把 conda 环境里的 lib 目录写进.bashrc让 conda activate 自己去管。第三个是 4060Ti 这类新卡在旧驱动上的表现。热词里有4060ti 支持的 cuda 版本答案是只要驱动够新535 以上CUDA 12.x 全系列都能用。但如果你从旧机器上直接把硬盘搬过来里面的驱动还是 470卡根本认不出来lspci能看到设备但nvidia-smi报错。这时候别怀疑硬件先升驱动。第四个是离线安装。内网机器上apt 仓库那套走不通得提前在联网机器上把.run文件、cuDNN 的 tar 或 deb、以及一堆依赖build-essential、dkms、linux-headers全部下好打包。这里有个技巧apt-get install --download-only -o Dir::Cache::archives/tmp/debs可以把包连同依赖一起下到本地目录拷过去用dpkg -i *.deb批量装比一个个找依赖省事得多。第五个是 OpenCV 带 CUDA 编译。这事本身不难但有几个参数必须设对-DWITH_CUDAON、-DOPENCV_DNN_CUDAON要用 DNN 模块的 CUDA 加速就必须开、-DCUDA_ARCH_BIN填你自己显卡的算力4060Ti 是 8.93090 是 8.6750Ti 是 5.0-DCUDA_FAST_MATHON可以提速。编译时间很长四核机器上可能要一两个小时用make -j$(nproc)并行编译能快不少。另外注意 OpenCV 每个大版本对 CUDA 版本的要求不同别拿 4.10 去配一个过老的 CUDA。最后再提一个日常维护的小习惯装完环境之后把这几条命令的输出记录到一个文本文件里随手存着。nvidia-smi ~/env-backup.txt nvcc -V ~/env-backup.txt python -c import torch; print(torch.__version__, torch.version.cuda, torch.backends.cudnn.version()) ~/env-backup.txt dpkg -l | grep -E cuda|cudnn|nvidia-driver ~/env-backup.txt下次环境出问题、或者要给同事复现你的环境时这份记录就是最快的排查起点。我自己维护过的一台多卡训练机前后换过四五次 CUDA 版本靠的就是这些记录出问题五分钟就能定位到是哪次改动引入的。
返回列表