我之前在这个运行 Win 10 64 位 Home 系统(针对 1080Ti 显卡)上安装了 CUDA 9.x,但需要更新到 CUDA 10.0 以支持 TensorFlow 2。一开始我以为 TF2 可以使用 CUDA 10.1,于是先安装了 10.1,后来才发现必须是 CUDA 10。
但是我无法使其正常工作...
为了测试 TF,我运行了以下代码以验证安装(使用 Anaconda 中的 Jupyter Notebook - 全新构建的 TF2 环境)
import tensforflow as tf
print(tf.reduce_sum(tf.random.normal([1000, 1000])))
我在基本Python测试中遇到了这个错误
InternalError:cudaGetDevice()失败。状态:未找到cudaGetErrorString符号
这表明找不到关键文件,但是我无法找出根本原因 - 而且那个错误信息很少,其中没有一个对我有帮助。
当前配置
CUDA 10.0已安装 Nvidia驱动程序436.48适用于游戏的准备好的驱动程序
可能存在的问题和迄今为止的解决措施
显然,它们都没有解决问题
- 旧CUDA安装 - 9.0、9.1、10.0、10.1:卸载除了10.0之外的所有内容并重新启动PC;然后再运行10.0安装程序
- 更新cudnn文件:首先尝试使用原始文件,然后将cudnn文件v7.6.3.30复制到相应的bin、include、lib中
- 从游戏准备好的驱动程序切换到"Studio"驱动程序
- 检查所有环境变量 - 删除所有引用CUDA!= 10.0的内容
- 更新在system32中将nvcuda.dll重命名为.old,并重新运行CUDA 10.0安装程序...没有生成新的nvcuda。
- 更新2我在驱动程序存储库中找到了nvcuda64.dll v 10.0.132,并将其替换为system32中的nvcuda.dll;重启后,nvidia-smi现在报告根本没有CUDA版本:(
已知异常
[已取代由Update 2] nvidia-smi.exe报告CUDA 10.1(是的,在我的Win 10上可用) - 但是通过注册表检查,我找不到任何提示CUDA 10.1还在那里.. 更新在C:\ Windows \ System32中找到它
尽管进行了卸载,但我仍然在注册表中拥有CudaXYZWizardsPackage,该键位于Computer \ HKEY_USERS.DEFAULT \ Software \ Microsoft \ VisualStudio \ 14.0_Config \ InstalledProducts下,其中XYZ = 90、91、100、101 - 但我怀疑这不是 Python中的TF问题;) 更新在C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Extensions \ NVIDIA中除了10.0之外,没有其他内容,因此只是孤立的reg条目。
其他信息
- 在执行所有卸载等操作之前,我成功地在VS 2017中构建并运行了Nvidia示例时钟项目,因此基础知识是正确的(那时)
问题
- 我应该如何完全删除CUDA的所有痕迹以便从干净的状态重新开始?
- 今后如何诊断此类问题以确定问题所在/该做什么?
- 是否有更简单的方法来解决这个特定的问题?
- (新)我在哪里可以获取nvcuda.dll 10.0以替换system32中的文件?- 答案一种可能是从C:\Windows\System32\DriverStore\FileRepository中获取。