安装TensorFlow GPU版CUDA 8时,运行示例遇cudaGetDevice错误(代码30)求助
分析CUDA 8示例报错cudaErrorUnknown的可能原因及解决方法
让我帮你排查下这个棘手的问题——我之前处理过几次类似的CUDA版本残留冲突,给你列几个最可能的方向:
1. 旧CUDA版本的环境变量/软链接残留
虽然你说已经卸载了CUDA9.1,但很可能还有残留的路径没清理干净:
- 先检查环境变量:运行
echo $PATH和echo $LD_LIBRARY_PATH,看看有没有/usr/local/cuda-9.1相关的条目。如果有,打开~/.bashrc或/etc/profile删掉对应的行,然后执行source ~/.bashrc刷新。 - 检查
/usr/local/cuda软链接:这个默认是指向当前激活的CUDA版本,执行ls -l /usr/local/cuda,如果显示指向cuda-9.1,就重新创建软链接:sudo ln -sf /usr/local/cuda-8.0 /usr/local/cuda。
2. GPU驱动版本不兼容
CUDA8.0对驱动版本有严格要求,一般需要367.x到396.x之间的NVIDIA驱动。如果你装CUDA9.1时升级了驱动,现在的驱动版本可能太高或太低:
- 用
nvidia-smi查看当前驱动版本,如果不在兼容范围内,先卸载现有驱动:sudo apt-get purge nvidia*,重启后安装兼容版本,比如sudo apt-get install nvidia-384(这个版本亲测适配CUDA8.0)。
3. CUDA8安装不完整或损坏
卸载旧版本时可能误删了系统依赖,导致CUDA8安装不完全:
- 重新运行CUDA8的安装包,选择自定义安装,取消勾选“Driver Components”(如果已经装了兼容驱动),只安装CUDA Toolkit和Samples。
- 安装完成后,执行
nvcc --version确认显示的是V8.0.x的版本,确保编译器路径正确。
4. GPU设备权限问题
普通用户可能没有访问GPU设备的权限,导致cudaGetDevice失败:
- 查看设备权限:
ls -l /dev/nvidia*,如果所有者是root:root,把当前用户加入video组:sudo usermod -aG video $USER,重启后再测试示例。
5. 系统内核版本不兼容
Ubuntu16.04的高版本内核(比如4.15+)可能和CUDA8.0存在兼容问题:
- 用
uname -r查看当前内核版本,如果是4.15以上,建议降级到4.4或4.8的稳定内核:
重启后在GRUB菜单选择旧内核启动,再重新安装CUDA和驱动。sudo apt-get install linux-image-4.4.0-179-generic linux-headers-4.4.0-179-generic
6. Makefile路径配置错误
Samples的Makefile可能还残留着旧CUDA版本的路径:
- 打开示例目录的Makefile,搜索
CUDA_PATH,确认指向/usr/local/cuda-8.0;如果没找到,编译时手动指定:make CUDA_PATH=/usr/local/cuda-8.0,看是否能正常编译。
如果以上方法都试过还是不行,可以尝试重启系统后再测试,有时候残留的进程会影响CUDA设备的初始化。
内容的提问来源于stack exchange,提问作者Mauricio Martinez
相关产品推荐
相关产品推荐

