马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
给裸机部署深度学习环境时,最怕的就是版本对不上——开发机上跑得好好的模型,换台机器报 libcudart 找不到或是性能异常。最省事的做法是让新环境与开发机的 CUDA、cuDNN 完全一致,于是前提就是先把开发机上这两个版本查准。本文把 CUDA、cuDNN、GPU 驱动三类信息的查询方法整理齐,包括几种查不到时的替代手段。
一、查 CUDA 版本
最直接的两条命令(等价,任选其一):
nvcc --version
nvcc -V
输出里 release 那一行就是 CUDA Toolkit 的版本,形如 release 11.8。这里有个容易混淆的点:nvcc 显示的是 Toolkit 版本,而 nvidia-smi 里显示的是驱动支持的最高 CUDA 版本,两者可以不一致,实际用的是 Toolkit 那一个。
二、查 cuDNN 版本
cuDNN 没有统一的 --version 参数,得从版本头文件里抠:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
旧版本布局里是另一个文件名:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果第一个文件不存在会报 No such file or directory,别慌,换第二个命令再试。命中时输出大致是这样:
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 4
#define CUDNN_PATCHLEVEL 2
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
三个宏拼起来就是版本号,上面这个例子对应 7.4.2。
三、查 GPU 与驱动信息
nvidia-smi
这张表信息量最大:右上角显示 Driver Version(驱动版本,例如 450.80.02)和 CUDA Version(驱动能支持的最高 CUDA 版本),下方是显存占用、温度、进程占用情况。显卡型号、显存总量也都能看到。
四、cuDNN 查不到时的四种替代方法
方法 1:确认安装路径
cuDNN 的头文件一般在 /usr/local/cuda/include,库文件在 /usr/local/cuda/lib64。先确认这两个目录存在且有内容:
ls -l /usr/local/cuda/include | grep -i cudnn
ls -l /usr/local/cuda/lib64 | grep -i cudnn
方法 2:用包管理器反查
如果是通过 apt 或 yum 装的 cuDNN,直接让包管理器告诉你版本:
dpkg -l | grep cudnn
rpm -qa | grep cudnn
Debian/Ubuntu 用第一条,RedHat/CentOS 用第二条。
方法 3:从库文件里抠字符串
strings /usr/local/cuda/lib64/libcudnn.so | grep CUDNN_MAJOR
ldconfig -p | grep cudnn
新建 cudnn_version.cpp:
#include <iostream>
#include <cudnn.h>
int main() {
std::cout << "cuDNN Version: " << CUDNN_MAJOR << "." << CUDNN_MINOR << "." << CUDNN_PATCHLEVEL << std::endl;
return 0;
}
编译运行:
nvcc -o cudnn_version cudnn_version.cpp -lcudnn
./cudnn_version
这个方法最可靠,因为它是直接让预处理器把头文件里的宏展开出来,不存在文件名对不上的问题。
五、把这套查询用在实际部署里
- 先在新旧机器各跑一遍上面几条命令,把三组版本号列成表比对。
- CUDA 主版本必须一致;cuDNN 建议小版本也一致,框架对它有硬性要求。
- 驱动版本只需满足「不低于该 CUDA 要求的最低驱动」,新一点没关系。
- 把查出来的结果记进部署文档,下次克隆环境不用重新摸索。
- 用 docker 部署时,nvidia-container-toolkit 传进去的驱动来自宿主机,容器内只需要保证 CUDA/cuDNN 与镜像一致。
六、两个容易搞混的点
第一,nvcc -V 显示的是你装的 Toolkit,nvidia-smi 右上角的 CUDA Version 是驱动支持上限,两者不是一个东西,部署时以前者为准。第二,机器上可能装了多份 CUDA(/usr/local 下 cuda-11.8、cuda-12.1 并列,cuda 是个软链),要确认软链指向哪一个:
ls -l /usr/local/cuda
这决定了编译时实际用哪套头文件与库。
qidao123.com企服评测-应用市场 编辑提示
|