AWS EC2环境下Theano无法调用GPU问题求助
看起来你在AWS EC2 GPU实例上运行Theano时遇到了GPU初始化失败的问题,最终只能 fallback 到CPU执行。报错里的cuInit: CUDA_ERROR_UNKNOWN是CUDA初始化时的通用未知错误,结合AWS EC2的GPU环境,我整理了几个针对性的排查和修复步骤:
确认CUDA版本与实例驱动匹配
你运行命令时指定了GPUARRAY_CUDA_VERSION=80,但首先得确认你的EC2 GPU实例(比如p2、p3系列)当前的NVIDIA驱动支持的CUDA版本。先在终端执行nvidia-smi,查看输出里的CUDA Version字段,然后把GPUARRAY_CUDA_VERSION改成对应的版本号(比如如果显示10.2,就设为102)。如果版本不匹配,要么调整环境变量,要么重新安装适配驱动版本的CUDA工具包。检查NVIDIA驱动是否正常运行
先跑nvidia-smi命令,如果报错或者看不到GPU的详细信息,说明驱动没装对。AWS的GPU实例推荐用官方的Deep Learning AMI创建,这类镜像已经预装了适配的NVIDIA驱动和CUDA环境,省得自己折腾。如果是自定义镜像,得手动下载对应实例GPU型号的驱动(比如p2用Tesla K80,p3用Tesla V100),在无桌面环境下安装,别用apt-get装通用驱动,容易出问题。验证pygpu与Theano的版本兼容性
你用的是Python2.7环境,Theano和pygpu的版本匹配很重要。建议先卸载现有pygpu,再装一个兼容性好的版本:pip uninstall pygpu -y pip install pygpu==0.7.6同时把Theano更到最新稳定版:
pip install --upgrade theano配置Theano全局参数
别只在运行时临时传环境变量,建议创建~/.theanorc配置文件,写入以下内容,让配置全局生效:[global] floatX = float32 device = cuda0 [gpuarray] cuda_version = 80 # 替换成nvidia-smi显示的CUDA版本号另外,检查用户权限:执行
ls -l /dev/nvidia*,如果ubuntu用户没有读写权限,临时修复可以用sudo chmod 666 /dev/nvidia*,永久解决就把用户加入video组:sudo usermod -aG video ubuntu,然后重新登录。先测试CUDA基础功能
先抛开Theano,验证CUDA本身能不能正常工作。找到NVIDIA的CUDA示例程序(通常在/usr/local/cuda/samples目录),编译并运行deviceQuery,如果这个程序能成功识别GPU并输出详细信息,说明CUDA环境没问题,问题出在Theano和pygpu的适配;如果这个程序也报错,那就是驱动或CUDA工具包的安装问题,得先搞定这个。
最后,调整你的测试命令,确保环境变量正确传递:
CUDA_VISIBLE_DEVICES=0 GPUARRAY_CUDA_VERSION=80 python test.py
内容的提问来源于stack exchange,提问作者Saw

