之前跑深度学习项目总报错环境不匹配,折腾半天才搞懂怎么查看cuda版本,还踩了好几个混淆版本的大坑。
很多人搞不清楚自己电脑到底装的什么CUDA版本,就是因为混用了两个不同的查询命令,得出的结果完全不一样,适配的场景也天差地别,我之前就是栽在这一步。
查看cuda版本:nvcc命令查本地安装运行版本
最开始我只会无脑输网上搜到的命令,打开Windows的cmd或者Linux的终端,敲nvcc-V之后,跳出一串版本信息,当时天真的以为这就是全部的CUDA版本参数。后来部署模型一直失败,才发现这个命令查出来的,是你系统里实际安装、正在运行的CUDAToolkit版本,是编译代码、运行程序时生效的核心版本,来自NVIDIA官方工具的标准查询方式。
这个操作没有任何门槛,不管是Windows、Linux还是macOS系统都能直接用,输入nvcc--version也能得到一模一样的结果。正常输出的内容里,会明确标注release后的版本号,比如Release11.8,这就是实打实的本地CUDA运行版本,适配代码编译、模型训练的环境匹配需求。
但这里有个很常见的坑,如果输入命令提示不是内部或外部命令,大概率是安装CUDA后没配置系统环境变量,系统识别不到nvcc工具,并不是没装CUDA。我当初重装了两次软件,最后才发现只是环境变量没添加,纯粹白费功夫。
查看cuda版本:nvidia-smi命令查驱动支持版本
身边做算法开发的朋友,他排查环境问题的习惯和我完全不一样,他从来不用nvcc命令第一步排查,而是直接敲nvidia-smi。最开始我特别疑惑,两个命令查出来的版本号不一样,到底以哪个为准?
反复对比测试后才明白,nvidia-smi查询到的是显卡驱动最高兼容支持的CUDA版本,不是你本地安装的版本。简单说就是显卡能扛住的最高版本,你电脑实际安装的CUDA版本,只要低于或等于这个版本都可以兼容使用。
这也是绝大多数环境报错的根源,我之前装了12.2版本的CUDA,但是显卡驱动最高只支持12.0,导致程序一直运行异常,自己却完全找不到问题。朋友告诉我,开发时优先看smi的兼容版本,再匹配安装对应的CUDA,绝对不会出现版本冲突。
| 查询命令 | 查询版本类型 | 核心适用场景 | 结果优先级 |
|---|---|---|---|
| nvcc-V | 本地CUDA运行版本 | 代码编译、项目运行、环境配置核对 | 项目适配优先参考 |
| nvidia-smi | 显卡驱动兼容版本 | 判断CUDA版本是否可安装、兼容 | 硬件适配优先参考 |
很多新手会把两个版本混为一谈,以为版本不一致就是安装出错,其实这是正常现象,驱动支持版本永远大于等于本地运行版本。
不用追求两个版本完全一致,只要本地安装的CUDA版本在驱动兼容范围内,环境就是稳定可用的。
我现在排查环境,都是先敲nvidia-smi看硬件上限,再用nvcc-V核对当前运行版本,两步就能精准定位版本问题,再也没出现过莫名其妙的环境报错。
上次调试完环境,关掉终端的时候,屏幕上还停着两行版本信息,一个是驱动兼容的最高版本,一个是本地正在运行的实际版本。