事情的起因是我运行了nvidia-smi和nvcc --version之后,发现显示的CUDA版本不一致,分别是12.2和11.5。

这说明CUDA 版本存在 ​​驱动层​​ 和 ​​编译器层​​ 的差异,这是正常现象。


一、版本差异原因解析

命令 显示版本 实际含义 典型影响场景
nvidia-smi 12.2 ​驱动支持的 CUDA API 最高版本​​(即显卡驱动能兼容的 CUDA 驱动 API 版本) 框架自动检测 GPU 驱动兼容性
nvcc --version 11.5 ​已安装的 CUDA Toolkit 运行时版本​​(即当前编译环境的 CUDA 运行时 API 版本) 代码编译时依赖的 CUDA 功能集

​根本原因​​:
系统中存在多个 CUDA Toolkit 版本,且环境变量未正确指向 CUDA 12.2 的安装路径


二、关键验证步骤

1. 确认实际生效的 CUDA 版本
# 查看当前 Shell 使用的 CUDA 路径
echo $PATH | grep cuda
# 查看动态链接库路径
echo $LD_LIBRARY_PATH | grep cuda

若输出包含 /usr/local/cuda-11.5/bin,则说明当前使用 CUDA 11.5 环境

2. 检查 CUDA Toolkit 安装路径
ls -l /usr/local/cuda*  # 查看符号链接指向

典型场景
若存在 /usr/local/cuda → /usr/local/cuda-11.5,则需更新符号链接到 CUDA 12.2

​​经过我的测试,CUDA 实际生效版本是 12.2​​,但存在环境变量配置不完整的问题。


三、解决方案:调整环境变量(推荐)

一、修改虚拟环境激活脚本

打开虚拟环境的 activate 文件,在 VIRTUAL_ENV 声明下方插入上述两行(参考位置):

VIRTUAL_ENV='/root/ldm-env~'
export VIRTUAL_ENV

# 假设 CUDA 12.2 安装在 /usr/local/cuda-12.2
# 新增以下两行
export PATH="/usr/local/cuda-12.2/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH"

二、重新加载虚拟环境

deactivate  # 退出当前虚拟环境
source bin/activate  # 重新激活

三、验证环境变量

echo $PATH | grep cuda-12.2  # 应显示 /usr/local/cuda-12.2/bin
echo $LD_LIBRARY_PATH | grep cuda-12.2  # 应显示 /usr/local/cuda-12.2/lib64
nvcc --version  # 应显示 CUDA 12.2
Logo

更多推荐