Anaconda 读取错误的 CUDA 版本

Posted

技术标签:

【中文标题】Anaconda 读取错误的 CUDA 版本【英文标题】:Anaconda reading wrong CUDA version 【发布时间】:2020-12-29 17:38:29 【问题描述】:

我有一个带有 PyTorch 和 Tensorflow 的 conda 环境,它们都需要 CUDA 9.0(~cudatoolkit 9.0 from conda)。在使用 torchvision 和 cudatoolkit 安装 pytorch(就像他们在他们的网站上提供的那样)之后,我想安装 Tensorflow,这里的问题是我收到了这个错误:

Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: / 
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
failed                                                                                                   

UnsatisfiableError: The following specifications were found
to be incompatible with the existing python installation in your environment:

Specifications:

  - tensorflow==1.12.0 -> python[version='2.7.*|3.6.*']
  - tensorflow==1.12.0 -> python[version='>=2.7,<2.8.0a0|>=3.6,<3.7.0a0']

Your python: python=3.5

If python is on the left-most side of the chain, that's the version you've asked for.
When python appears to the right, that indicates that the thing on the left is somehow
not available for the python version you are constrained to. Note that conda will not
change your python version to a different minor version unless you explicitly specify
that.

The following specifications were found to be incompatible with your system:

  - feature:/linux-64::__cuda==10.2=0
  - feature:|@/linux-64::__cuda==10.2=0

Your installed version is: 10.2

如果我在我的主机或激活的 conda 环境上运行 nvccnvidia-smi,我知道我已经安装了 CUDA 10.2,即使 conda list 显示我安装了 cudatoolkit 9.0。有什么解决办法吗?

编辑:

运行此代码示例时:

# setting device on GPU if available, else CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
print()

#Additional Info when using cuda
if device.type == 'cuda':
    print(torch.cuda.get_device_name(0))
    print('Memory Usage:')
    print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')
    print('Cached:   ', round(torch.cuda.memory_cached(0)/1024**3,1), 'GB')


print(torch.version.cuda)

我得到这个输出:

GeForce GTX 1050
Memory Usage:
Allocated: 0.0 GB
Cached:    0.0 GB
9.0.176

所以 PyTorch 确实获得了正确的 CUDA 版本,我只是无法安装 tensorflow-gpu。

【问题讨论】:

编辑:我正在使用驱动程序版本 440.100 运行移动 1050。 请注意,不要将 StackSnippets 用于 html、CSS 和 JS 以外的内容。特别是不要将 Python 放在 javascript 部分。它在问题中占用了更多空间,并且无论如何在运行时都会产生错误。目前,我建议进行修改。 【参考方案1】:

如果我在我的主机或激活的conda 环境上运行nvccnvidia-smi,我知道我已经安装了CUDA 10.2,即使conda list 显示我安装了cudatoolkit 9.0。有什么解决办法吗?

cudatoolkit 不附带编译器 (nvcc),因此当您运行 nvcc 时,您会从系统范围的安装中启动编译器。这就是为什么它打印10.2 而不是9.0,而pytorch 看到的是本地的cudatoolkit

anaconda / packages / cudatoolkit :

此 CUDA 工具包包括 GPU 加速库和适用于 Conda 生态系统的 CUDA 运行时。有关带有编译器和开发工具的完整 CUDA 工具包,请访问 https://developer.nvidia.com/cuda-downloads

根据您上面的评论,我了解到您正在使用python=3.5.6。所以,首先你应该搜索可用的 tensorflow py35 构建使用:

conda search tensorflow | grep py35

我有以下输出:

tensorflow                     1.9.0 eigen_py35h8c89287_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35h42d5ad8_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35h60c0932_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35hb39db67_1  pkgs/main           
tensorflow                     1.9.0 mkl_py35h5be851a_1  pkgs/main           
tensorflow                    1.10.0 eigen_py35h5ed898b_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35h566a776_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35ha6119f3_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35hd9c640d_0  pkgs/main           
tensorflow                    1.10.0 mkl_py35heddcb22_0  pkgs/main

如您所见,py35 没有 tensorflow 1.12.0 构建,这就是您收到该错误的原因。您可以尝试检查其他conda 频道,例如conda-forge

conda search tensorflow -c conda-forge | grep py35

但这并没有帮助:

tensorflow                     0.9.0          py35_0  conda-forge         
tensorflow                    0.10.0          py35_0  conda-forge         
tensorflow                 0.11.0rc0          py35_0  conda-forge         
tensorflow                 0.11.0rc2          py35_0  conda-forge         
tensorflow                    0.11.0          py35_0  conda-forge         
tensorflow                    0.12.1          py35_0  conda-forge         
tensorflow                    0.12.1          py35_1  conda-forge         
tensorflow                    0.12.1          py35_2  conda-forge         
tensorflow                     1.0.0          py35_0  conda-forge         
tensorflow                     1.1.0          py35_0  conda-forge         
tensorflow                     1.2.0          py35_0  conda-forge         
tensorflow                     1.2.1          py35_0  conda-forge         
tensorflow                     1.3.0          py35_0  conda-forge         
tensorflow                     1.4.0          py35_0  conda-forge         
tensorflow                     1.5.0          py35_0  conda-forge         
tensorflow                     1.5.1          py35_0  conda-forge         
tensorflow                     1.6.0          py35_0  conda-forge         
tensorflow                     1.8.0          py35_0  conda-forge         
tensorflow                     1.8.0          py35_1  conda-forge         
tensorflow                     1.9.0 eigen_py35h8c89287_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35h42d5ad8_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35h60c0932_1  pkgs/main           
tensorflow                     1.9.0 gpu_py35hb39db67_1  pkgs/main           
tensorflow                     1.9.0 mkl_py35h5be851a_1  pkgs/main           
tensorflow                     1.9.0          py35_0  conda-forge         
tensorflow                    1.10.0 eigen_py35h5ed898b_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35h566a776_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35ha6119f3_0  pkgs/main           
tensorflow                    1.10.0 gpu_py35hd9c640d_0  pkgs/main           
tensorflow                    1.10.0 mkl_py35heddcb22_0  pkgs/main           
tensorflow                    1.10.0          py35_0  conda-forge

因此,可能的解决方案是:

    安装较早的可用tensorflow 1.10.0 gpu_py35 版本之一。 切换到python 3.6
conda search tensorflow | grep py36

...
tensorflow                    1.11.0 gpu_py36h4459f94_0  pkgs/main           
tensorflow                    1.11.0 gpu_py36h9c9050a_0  pkgs/main           
...        
tensorflow                    1.12.0 gpu_py36he68c306_0  pkgs/main           
tensorflow                    1.12.0 gpu_py36he74679b_0  pkgs/main
...         

请注意 >=1.13.1 版本不支持CUDA 9

    conda env 中使用pip install 安装缺少的tensorflow 构建,因为pip 托管更多构建组合:Tested build configurations

这里有一些来自 Anaconda 的最佳实践,如何使用 pip w/ conda: Using Pip in a Conda Environment

    最后一个选项是使用conda-build 构建您自己缺少的conda

【讨论】:

但是 pip 并没有给您在系统的不同部分快速使用不同 cuda 版本的好处:/ 太棒了!顺便说一句,我的意思是在 conda env 中使用pip install tensorflow,而不是用pip 替换conda,只是为了清楚 啊,我明白了,但你不觉得也像个黑客吗? @filip 实际上,还有另一种选择:使用conda-build 为丢失的软件创建 conda 包。但是我从来没有机会尝试过,另外我想向你推荐这个来自 anaconda 的 Using Pip in a Conda Environment 帖子 谢谢,需要时会使用,与 npm 包管理相比,python 真的很糟糕。 (好吧,他们没有那么多像 python 这样的编译包(在数据科学类别中越来越多))【参考方案2】:

我的经验是,即使 conda 检测到的 cuda 版本不正确,重要的是 cudatoolkit 版本。

对我来说真正的问题是 不兼容的 python 版本。 例如。您可能拥有 Python 3.7/3.8,但此版本的 tensorflow 不支持:

tensorflow==1.12.0 -> python[version='>=2.7,=3.6,

试试旧的conda环境或者更新的tensorflow,2.0之前的最新版本是1.15

【讨论】:

我使用的是 Python 3.5.6 那么这是一个不同的问题。我最终用 cuda 10.0 安装了 PyTorch 和 Tensorflow【参考方案3】:

如果我没有误解,您使用的是安装包

conda install

来自https://pytorch.org/get-started/locally/ 我曾经在安装 PyTorch 和 Cuda 时遇到问题:我通过删除使用 conda 安装的软件包并通过 pip 重新安装来解决。

如果你害怕使用 pip 搞乱 conda 环境,我建议你创建另一个环境来测试这个解决方案。

    使用 conda 删除 pytorch 和 cuda。请参阅Conda Managing packages 删除包 安装您需要的cuda toolkit。请注意,pytorch 仅支持 cuda 9.2、10.1 和 10.2,您可以在 Pytorch 下载页面上看到。 如果您的操作系统是 ubuntu 19,请按照 ubuntu 18 的 CUDA 说明进行操作。另请注意,由于驱动程序原因,并非所有 gpus 都支持最新版本的工具包(1050 应该足够新以支持所有这些,因为我使用了最高 10.1它)。 按照说明安装具有适当 cuda 支持的 pytorch 通过 pip Pytorch download page。请参阅Conda Managing packages在环境中使用 pip

【讨论】:

我目前使用 pip 安装它,这对我来说似乎是一个 hack。我自己安装了包,没有 requirements.txt 或 environment.yaml

以上是关于Anaconda 读取错误的 CUDA 版本的主要内容,如果未能解决你的问题,请参考以下文章

使用 Anaconda install 在 Windows 上获取 CUDA 和 CUDNN 版本

win10-Anaconda2-Theano-cuda7.5-VS2013

Anaconda 与 Cuda 9.0 的集成显示不兼容的包错误

01 Pytorch和CUDA对应的版本及Pytorch和Python对应的版本及Python与Anaconda的对应关系

如何在anaconda虚拟环境中安装多个版本的CUDA,cudnn,pytorch,torchvision,torchaudio及进行环境配置手把手教学

Anaconda 安装Tensorflow-gpu 版本详细教程