【问题标题】:CUDA issue - how to clean install CUDA in Win 10 to resolve cudaGetDevice() failedCUDA 问题 - 如何在 Win 10 中全新安装 CUDA 以解决 cudaGetDevice() 失败
【发布时间】:2020-02-02 17:03:20
【问题描述】:

我之前在这个 Win 10 64 位家庭系统(针对 1080Ti 卡)上运行了 CUDA 9.x,但需要更新到 TensorFlow 2 的 CUDA 10.0。我最初认为 CUDA 10.1 可以使用 TF2,所以首先安装了10.1,后来才发现一定是CUDA 10。

无法让它工作......

为了测试 TF,我运行它来验证安装(通过 Anaconda 的 Jupyter notebook - 全新构建的 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. 尽管卸载了,但我在注册表中仍然有 CudaXYZWizardsPackage,位于注册表项 Computer\HKEY_USERS.DEFAULT\Software\Microsoft\VisualStudio\14.0_Config\InstalledProducts 下,XYZ = 90, 91, 100, 101 - 但我对此表示怀疑是 Python 中 TF 的问题;) Update C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\NVIDIA 除了 10.0 之外什么都没有孤儿注册条目。

其他信息

  1. 在进行所有卸载等之前,我确实在 VS 2017 中成功构建并运行了 Nvidia 示例时钟项目,因此基本没问题(当时)

问题

  1. 如何完全删除所有 CUDA 痕迹以重新开始?
  2. 我以后如何诊断此类问题以找出问题出在哪里/该怎么办
  3. 能否更简单地解决此特定问题?
  4. (新)在哪里可以获取 nvcuda.dll 10.0 以替换 system32 中的? - 答案一种可能性来自 C:\Windows\System32\DriverStore\FileRepository

【问题讨论】:

  • 投反对票?? “这个q是不努力,不清楚等?”与 Q 相比,该投票更容易受到该评估的影响,因为没有解释,也没有关于如何改进它的建议等。我总是乐于接受 +ve 对如何改进事物的贡献......请告知
  • "nvidia-smi.exe 报告 CUDA 10.1" - 这只是驱动程序的兼容性,它并没有说明您安装了什么。我的观点是,这要么是一个 tensorflow 设置问题,要么是题外话。您应该相应地标记和编辑它
  • @talonmies 虽然最终目标是 TF 设置,但具体问题是:如何删除 CUDA 安装的所有痕迹以重新开始 + 密切相关的项目。我将相应地修改标题。
  • 随时向我们发布您发现的任何新内容。显然,有一个非常敏感的 cuda、tf、python、gpu 和 gpu 驱动程序版本的组合来完成这项工作。很烦人。
  • @Diego 我知道非常复杂的依赖关系......很难找到在一个地方描述的一致集合。我将重建 Windows(临时新硬盘)并从头开始。很痛苦。此外,使用 ?Revo 卸载程序的 nVidia 完全删除说明还不够完整,并且 a) 删除剩余 NVidia 应用程序等的卸载信息,除非小心,并且 b) 仍然留下无法管理的 reg 条目收集。我什至无法“正确”删除普通 VGA 版本的 nv 图形驱动程序。非常非常非常烦人

标签: python windows tensorflow cuda


【解决方案1】:
  1. 下载并安装 Anaconda (Python 3.7):https://www.anaconda.com/distribution/

  2. 在命令提示符中:

康达更新康达 康达更新蟒蛇 conda create --name tensorflow-gpu conda 激活 tensorflow-gpu conda 安装 pip jupyter 点安装 tensorflow-gpu conda install cudatoolkit=10.0 -c pytorch
  1. 在开始菜单中选择Anaconda3 (64-bit) -> Jupyter Notebook (tensorflow-gpu)
将张量流导入为 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 毫秒

【讨论】:

  • 操作系统是windows,虽然根据这个页面tensorflow.org/install/pip,Linux下支持Python 3.7,但Windows信息中明显没有。您描述的步骤已经执行;它正在执行例如tf.random.uniform([1000,1000]) 表明问题出现了。当证据似乎强烈支持 CUDA 问题(即卸载 10.1 并安装 10.0 时的 10.1 CUDA 驱动程序)时,您能否提供一些令人信服的理由来重新安装 python?
  • @JulianMoore 我有 Windows 10 (1903)、CUDA 10.1、cuDNN 7.6。 MXNet 可以看到 CUDA 10.1。但是 TensorFlow 2.0 和 PyTorch 只能与 CUDA 10.0 一起使用。我回答的主要技巧是:conda install cudatoolkit=10.0 -c pytorch。因此,我不需要删除 CUDA 10.1。是的,TensorFlow 2.0 可以在 Windows 上与 Python 3.7 一起使用。
  • 我明天试试 - 谢谢。 -c pytorch 技巧有什么作用?
  • 从 PyTorch 存储库下载。
  • 我可以建议你重新安装 Windows。我的回答中的说明适用于 3 台不同的计算机。全部使用 Windows 10 (1903)、CUDA 10.1。但不同的 GPU:940MX、GTX1050Ti、RTX2060。
【解决方案2】:

这主要是一个扩展评论,因为@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 提示符运行并给出以下输出。

设备查询开始...

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

检测到 1 个支持 CUDA 的设备

设备 0:“GeForce GTX 1080 Ti”CUDA 驱动程序版本/运行时 版本 10.0 / 10.0 CUDA 能力主要/次要版本 数量:6.1 全局内存总量:11264 MBytes(11811160064 字节)(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 纹理 Size, (num) layers 2D=(32768, 32768), 2048 layers 总量 常量内存:65536字节共享总量 每块内存:49152字节寄存器总数 每块可用:65536 经纱尺寸:
32 每个多处理器的最大线程数:2048 最大值 每个块的线程数:1024 a 的最大维度大小 线程块 (x,y,z): (1024, 1024, 64) 网格的最大维度大小 大小 (x,y,z): (2147483647, 65535, 65535) 最大内存间距:
2147483647 字节纹理对齐:512 字节并发副本和内核执行:是的,有 2 个副本 引擎对内核的运行时间限制:是
集成GPU共享主机内存:不支持主机 页面锁定内存映射:是的对齐要求 表面:是设备支持 ECC:
已禁用 CUDA 设备驱动程序模式(TCC 或 WDDM):WDDM (Windows 显示驱动模型)设备支持统一寻址 (UVA):是设备支持计算抢占:否
支持合作内核启动:不支持 多设备合作内核启动:无设备 PCI 域 ID/总线 ID / 位置 ID:0 / 1 / 0 计算模式:

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

我做了什么来实现这一目标?很难具体说明,因为我没有意识到我已经成功了,但我记得将显示驱动程序设置为 VGA,重新启动(为了安全起见两次)然后卸载 CUDA 10.0,重新启动然后安装 10.0。

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

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 2017-07-30
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多