CUDA问题-如何在Win 10中全新安装CUDA以解决cudaGetDevice()失败

时间:2019-10-04 10:55:03

标签: python windows tensorflow cuda

我以前曾在此Win 10 64位家庭系统(针对1080Ti卡)上运行CUDA 9.x,但需要针对TensorFlow 2更新到CUDA 10.0。我最初以为TF2在CUDA 10.1上还可以,所以首先安装了10.1,直到后来才发现它必须是CUDA 10。

无法正常工作...

要测试TF,我运行了此程序以验证安装(通过Anaconda的Jupyter笔记本-新建的TF2环境)

import tensforflow as tf
print(tf.reduce_sum(tf.random.normal([1000, 1000])))

我在基本的Python测试中收到此错误

  

内部错误:cudaGetDevice()失败。状态:找不到cudaGetErrorString符号

这表明找不到密钥文件,但是我无法找出根本原因-而且该错误信息的命中很少,没有一个对我有帮助。

当前配置

已安装CUDA 10.0 Nvidia驱动程序436.48游戏就绪驱动程序

到目前为止的潜在问题和解决方案

显然他们都没有固定的东西

  1. 旧的CUDA安装-9.0、9.1、10.0、10.1:除10.0卸载并重新启动PC外,所有安装; 10.0安装程序,然后再次运行
  2. 更新cudnn文件:首先尝试使用原始文件,然后将cudnn文件v7.6.3.30复制到bin,include和lib(视情况而定)
  3. 从游戏就绪驱动程序切换到“ Studio”驱动程序
  4. 检查所有环境变量-删除所有涉及CUDA!= 10.0的内容
  5. 更新在system32中将nvcuda.dll重命名为.old,然后重新运行CUDA 10.0安装程序... 未生成新的nvcuda。
  6. 更新2 :我在驱动程序存储区中找到了nvcuda64.dll v 10.0.132,并用它替换了system32中的nvcuda.dll。重新启动后,nvidia-smi现在根本没有报告CUDA版本:(

已知的可能性

  1. [已由更新2取代] nvidia-smi.exe报告了CUDA 10.1(是的,它在Win 10上可用)-但是通过注册表检查我找不到任何东西暗示CUDA 10.1在那里徘徊... 更新在C:\ Windows \ System32

  2. 中找到它
  3. 尽管已卸载,但是注册表中的Computer \ HKEY_USERS.DEFAULT \ Software \ Microsoft \ VisualStudio \ 14.0_Config \ InstalledProducts项下的XYZ仍为CudaXYZWizardsPackage-XYZ = 90、91、100、101-但我对此表示怀疑是Python中TF的问题;)更新 C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Extensions \ NVIDIA中没有任何内容,只有10.0,所以孤儿注册表项。

其他信息

  1. 在执行所有卸载等操作之前,我确实在VS 2017中成功构建并运行了Nvidia示例时钟项目,因此基础知识还可以(然后)

问题

  1. 如何从干净的状态完全删除所有CUDA痕迹以重新开始?
  2. 我将来如何诊断此类问题,以弄清问题的根源/应该做什么
  3. 可以更简单地解决这个特定问题吗?
  4. (新)在哪里可以找到要在system32中替换的nvcuda.dll 10.0? -回答,一种可能性来自C:\ Windows \ System32 \ DriverStore \ FileRepository

2 个答案:

答案 0 :(得分:1)

  1. 下载并安装Anaconda(Python 3.7):https://www.anaconda.com/distribution/

  2. 在命令提示符下:

conda update conda
conda update python

conda create --name tensorflow-gpu
conda activate tensorflow-gpu
conda install pip jupyter
pip install tensorflow-gpu
conda install cudatoolkit=10.0 -c pytorch
  1. 在“开始”菜单中选择Anaconda3 (64-bit) -> Jupyter Notebook (tensorflow-gpu)
import tensorflow as tf
%%time
with tf.device('/CPU:0'):
    a = tf.random.uniform([1000,1000])
    b = tf.random.uniform([1000,1000])
c = tf.matmul(a, b)
  

墙壁时间:18.9毫秒

%%time
with tf.device('/GPU:0'):
    a = tf.random.uniform([1000,1000])
    b = tf.random.uniform([1000,1000])
c = tf.matmul(a, b)
  

挂墙时间:2.99毫秒

答案 1 :(得分:0)

这主要是扩展评论,因为@diego要求更新...

我现在已安装CUDA 10.0,并且nVidia控制面板将nvcuda.dll报告为v 10.0.132

我已使用Visual Studio 2017从C:\ ProgramData \ NVIDIA Corporation \ CUDA Samples \ v10.0 \ 1_Utilities \ deviceQuery中的vs解决方案构建了推荐的演示devicequery.exe(请注意.exe最终以C: \ ProgramData \ NVIDIA Corporation \ CUDA Samples \ v10.0 \ bin \ win64 \ Debug)

然后该程序从cmd提示符运行,并给出以下输出。

  

devicequery正在启动...

     

CUDA设备查询(运行时API)版本(CUDART静态链接)

     

检测到1个支持CUDA的设备

     

设备0:“ GeForce GTX 1080 Ti” CUDA驱动程序版本/运行时   版本10.0 / 10.0 CUDA功能主要/次要版本   数:6.1全局内存总数:11264   MBytes(11811160064 bytes)(28)多处理器,(128)CUDA   核心/ MP:3584 CUDA核心GPU最大时钟速率:
  1607 MHz(1.61 GHz)内存时钟频率:
  5505 Mhz内存总线宽度:352位L2   缓存大小:最大2883584字节   纹理尺寸大小(x,y,z)1D =(131072),2D =(131072,   65536),3D =(16384、16384、16384)最大分层1D纹理大小,   (num)层1D =(32768),2048层最大分层2D纹理   大小(num)层2D =(32768,32768),2048层   恒定内存:65536字节共享总量   每块内存:49152字节寄存器总数   每块可用:65536变形尺寸:
  每个多处理器32个线程的最大数量:最大2048个   每个块的线程数:1024的最大尺寸   线程块(x,y,z):(1024、1024、64)网格的最大尺寸   大小(x,y,z):(2147483647、65535、65535)最大内存间距:
  2147483647字节纹理对齐:512   字节并发复制和内核执行:是,有2个副本   引擎在内核上的运行时间限制:是
  集成GPU共享主机内存:不支持主机   页面锁定的内存映射:是对齐要求   表面:是设备具有ECC支持:
  禁用的CUDA设备驱动程序模式(TCC或WDDM):WDDM   (Windows显示驱动程序模型)设备支持统一寻址   (UVA):是设备支持计算抢占:否
  支持合作内核发布:无支持   MultiDevice Co-op内核启动:无设备PCI域ID /总线   ID /位置ID:0/1/0计算模式:        <默认(多个主机线程可以同时将:: cudaSetDevice()与设备一起使用)>

     

deviceQuery,CUDA驱动程序= CUDART,CUDA驱动程序版本= 10.0,CUDA   运行时版本= 10.0,NumDevs = 1结果= PASS

我是怎么做到的?很难具体说明,因为我没有意识到自己成功了,但是我记得将显示驱动程序设置为VGA,重新启动(为安全起见两次),然后卸载CUDA 10.0,重新启动然后安装10.0。

我确实注意到我使用vs 2012解决方案构建了deviceQuery,但是我确实同意在解决方案打开时进行VS更新。