为什么即使在使用 cuda 安装 pytorch 后,`torch.cuda.is_available()` 仍返回 False?

Ami*_*adi 20 python pytorch

在装有 NVidia GeForce 820M 的 Windows 10 PC 上,我成功安装了 CUDA 9.2 和 cudnn 7.1,然后使用 pytorch.org 上的说明安装了 PyTorch。

具体我使用了命令

pip install torch==1.4.0+cu92 torchvision==0.5.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html
Run Code Online (Sandbox Code Playgroud)

因为我使用 pip 而不是 Anaconda。

但我得到以下

>>> import torch
>>> torch.cuda.is_available()
False
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

jod*_*dag 52

您的显卡不支持 CUDA 9.0。

由于我已经看到很多与此类问题相关的问题,因此我正在写一个关于如何检查您的系统是否与 CUDA 兼容的广泛答案,特别是针对使用具有 CUDA 支持的 PyTorch。本答案的最后一部分描述了解决问题的各种依赖于环境的选项。


将 PyTorch 与 CUDA 结合使用的系统要求如下:

  • 您的显卡必须支持所需版本的 CUDA
  • 您的显卡驱动程序必须支持所需版本的 CUDA
  • PyTorch 二进制文件的构建必须支持显卡的计算能力

:如果您安装预建的二进制文件(使用PIP或畅达),那么你就不会需要CUDA支持安装PyTorch之前安装在系统上的CUDA工具包或运行。这是因为 PyTorch 除非从源代码编译,否则始终与 CUDA 库的副本一起交付。


1. 如何检查您的 GPU/显卡是否支持特定的 CUDA 版本

首先,确定您的显卡型号。

在继续之前,请确保您拥有 NVidia 显卡。AMD 和 Intel 显卡不支持 CUDA

NVidia 在单个位置提供 CUDA 兼容性信息方面做得并不好。最好的资源可能是 CUDA 维基百科页面上的这一部分。确定支持哪些 CUDA 版本

  1. 在大表中找到您的显卡型号并记下计算能力版本。例如,GeForce 820M 的计算能力是 2.1。
  2. 在表格前面的项目符号列表中,检查您的图形卡的计算能力是否支持所需的 CUDA 版本。例如,计算兼容性 2.1 不支持 CUDA 9.2。

如果您的卡不支持所需的 CUDA 版本,请参阅本答案第 4 节中的选项。

注意:计算能力是指您的显卡支持的计算功能。较新版本的 CUDA 库依赖于较新的硬件功能,这就是我们需要确定计算能力以确定支持的 CUDA 版本的原因。


2. 如何检查您的 GPU/图形驱动程序是否支持特定版本的 CUDA

图形驱动程序是允许您的操作系统与您的图形卡进行通信的软件。由于 CUDA 依赖于与显卡的低级通信,因此您需要拥有最新的驱动程序才能使用最新版本的 CUDA。

首先,确保您的系统上安装了 NVidia 图形驱动程序。您可以从NVidia 的网站获取适用于您系统的最新驱动程序。

如果您安装了最新的驱动程序版本,那么您的图形驱动程序可能支持与您的图形卡兼容的每个 CUDA 版本(请参阅第 1 节)。要进行验证,您可以查看CUDA 发行说明中的表 2 。在极少数情况下,我听说最新推荐的图形驱动程序不支持最新的 CUDA 版本。您应该能够通过为所需的 CUDA 版本安装 CUDA 工具包并选择安装兼容驱动程序的选项来解决这个问题,尽管这通常不是必需的。

如果你不能,或者不想升级显卡驱动,那么你可以检查你当前的驱动是否支持特定的 CUDA 版本,如下所示:

在 Windows 上

  1. 确定您当前的图形驱动程序版本(来源https://www.nvidia.com/en-gb/drivers/drivers-faq/

右键单击您的桌面并选择 NVIDIA 控制面板。从 NVIDIA 控制面板菜单中,选择帮助 > 系统信息。驱动程序版本列在“详细信息”窗口的顶部。对于更高级的用户,您还可以从 Windows 设备管理器中获取驱动程序版本号。右键单击显示适配器下的图形设备,然后选择属性。选择驱动程序选项卡并阅读驱动程序版本。最后 5 位数字是 NVIDIA 驱动程序版本号。

  1. 访问CUDA 发行说明并向下滚动到表 2。使用此表来验证您的图形驱动程序是否足够新以支持所需的 CUDA 版本。

在 Linux/OS X 上

在终端窗口中运行以下命令

nvidia-smi
Run Code Online (Sandbox Code Playgroud)

这应该会导致如下结果

nvidia-smi
Run Code Online (Sandbox Code Playgroud)

Driver Version: ###.##是您的图形驱动程序版本。在上面的示例中,驱动程序版本是435.21.

CUDA Version: ##.#是您的图形驱动程序支持的最新版本的 CUDA。在上面的示例中,图形驱动程序支持 CUDA 10.1以及10.1之前的所有兼容 CUDA 版本

注意CUDA Version此表中显示的内容并不表示您的系统上实际安装了 CUDA 工具包或运行时。这仅表示您的图形驱动程序兼容的最新版本的 CUDA。

为了确保您的驱动程序支持所需的 CUDA 版本,您可以访问CUDA 发行说明页面上的表 2 。


3. 如何检查特定版本的 PyTorch 是否与您的 GPU/显卡计算能力兼容

即使您的显卡支持所需的 CUDA 版本,预编译的 PyTorch 二进制文件也可能未编译为支持您的计算能力。例如,在 PyTorch 0.3.1 中,对计算能力 <= 5.0 的支持被删除了

首先,验证您的显卡和驱动程序是否都支持所需的 CUDA 版本(请参阅上面的第 1 节和第 2 节),本节中的信息假设是这种情况。

检查 PyTorch 是否支持您的计算能力的最简单方法是安装具有 CUDA 支持的所需版本的 PyTorch 并从 python 解释器运行以下命令

>>> import torch
>>> torch.zeros(1).cuda()
Run Code Online (Sandbox Code Playgroud)

如果您收到一条错误消息,内容为

Sat Apr  4 15:31:57 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   35C    P8    16W / 175W |    502MiB /  7974MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1138      G   /usr/lib/xorg/Xorg                           300MiB |
|    0      2550      G   /usr/bin/compiz                              189MiB |
|    0      5735      G   /usr/lib/firefox/firefox                       5MiB |
|    0      7073      G   /usr/lib/firefox/firefox                       5MiB |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

那么这意味着 PyTorch 没有在编译时支持您的计算能力。如果这运行没有问题,那么你应该很高兴。

更新如果您在具有较新 GPU 的系统上安装旧版本的 PyTorch,那么旧的 PyTorch 版本可能未编译为支持您的计算能力。假设您的 GPU 支持 PyTorch 使用的 CUDA 版本,那么您应该能够使用所需的 CUDA 版本从源代码重建 PyTorch,或者升级到更新版本的 PyTorch,该版本编译后支持更新的计算功能。


4。结论

如果您的显卡和驱动程序支持所需版本的 CUDA(第 1 部分和第 2 部分),但 PyTorch 二进制文件不支持您的计算能力(第 3 部分),那么您的选择是

  • 从源代码编译 PyTorch,支持您的计算能力(请参阅此处
  • 在不支持 CUDA 的情况下安装 PyTorch(仅限 CPU)
  • 安装支持计算能力的旧版 PyTorch 二进制文件(不推荐,因为 PyTorch 0.3.1 在这一点上已经过时了)。预先构建的二进制文件从未支持 3.X 之前的 AFAIK 计算能力
  • 升级你的显卡

如果您的显卡不支持所需版本的 CUDA(第 1 节),那么您的选择是

  • 在不支持 CUDA 的情况下安装 PyTorch(仅限 CPU)
  • 安装支持图形卡支持的 CUDA 版本的旧版 PyTorch(如果二进制文件不支持您的计算能力,仍可能需要从源代码编译)
  • 升级你的显卡

  • 很好的答案!这帮助我很容易地查明问题 (2认同)

Sal*_*lio 7

为了解决这个问题,以下方法为我解答:

1-首先你必须更新 Anaconda。

2- 在您的笔记本中,根据您的系统选择以下选项。

https://pytorch.org/
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Windows 示例:(这可能需要一些时间。请耐心等待)

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
Run Code Online (Sandbox Code Playgroud)

3- 通过以下站点查找并安装适合您系统的最新显卡:

https://www.nvidia.com/Download/index.aspx
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

4-支持CUDA级别的GPU和卡。看到 这个