在装有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
因为我使用点子而不是Anaconda。
然而我得到以下
>>> import torch
>>> torch.cuda.is_available()
False
为什么会这样呢?
您的图形卡不支持CUDA 9.0。
由于我已经看到很多涉及此类问题的问题,因此我就如何检查您的系统是否与CUDA兼容,写了一个广泛的答案,专门针对使用带有CUDA支持的PyTorch。该答案的最后一部分描述了各种与情况有关的解决方案。
将PyTorch与CUDA一起使用的系统要求如下:
注 :如果您安装预建的二进制文件(使用PIP或畅达),那么你就 不会
需要CUDA支持安装PyTorch之前安装在系统上的CUDA工具包或运行。这是因为,除非从源代码编译,否则PyTorch始终与CUDA库的副本一起提供。
首先,确定您的显卡型号。
继续之前,请确保您已经拥有NVidia显卡。 AMD和Intel显卡不支持CUDA 。
NVidia在单个位置提供CUDA兼容性信息方面做得不好。最好的资源可能是CUDA
Wikipedia页面上的此部分
。确定支持哪些版本的CUDA
如果您的卡不支持所需的CUDA版本,请参阅此答案第4节中的选项。
注意 :计算能力是指图形卡支持的计算功能。较新版本的CUDA库依赖于较新的硬件功能,这就是为什么我们需要确定计算能力才能确定受支持的CUDA版本的原因。
图形驱动程序是允许您的操作系统与图形卡进行通信的软件。由于CUDA依赖与图形卡的低级通信,因此您需要具有最新的驱动程序才能使用最新版本的CUDA。
首先,请确保您的系统上安装了NVidia图形驱动程序。您可以从NVidia的网站上获取系统的最新驱动程序。
如果您安装了最新的驱动程序版本,则您的图形驱动程序 可能
支持与您的显卡兼容的每个CUDA版本(请参阅第1节)。要进行验证,您可以检查CUDA发行说明中的表2
。在极少数情况下,我听说过不支持最新CUDA版本的最新推荐图形驱动程序。您可以通过安装所需CUDA版本的CUDA工具包并选择安装兼容驱动程序的选项来解决此问题,尽管通常不需要这样做。
如果不能,或者不想升级图形驱动程序,则可以检查当前驱动程序是否支持特定的CUDA版本,如下所示:
右键单击桌面,然后选择“ NVIDIA控制面板”。从“
NVIDIA控制面板”菜单中,选择“帮助”>“系统信息”。驱动程序版本列在“详细信息”窗口的顶部。对于更高级的用户,您还可以从Windows设备管理器中获取驱动程序版本号。右键单击显示适配器下的图形设备,然后选择属性。选择驱动程序选项卡,然后阅读驱动程序版本。后5位数字是NVIDIA驱动程序的版本号。
在终端窗口中运行以下命令
nvidia-smi
这应该导致类似以下内容
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 |
+-----------------------------------------------------------------------------+
Driver Version: ###.##
是您的图形驱动程序版本。在上面的示例中,驱动程序版本为435.21
。
CUDA Version: ##.#
是您的图形驱动程序支持的最新版本的CUDA。在上面的示例中,图形驱动程序支持CUDA 10.1 以及 10.1
之前的所有兼容CUDA版本 。
注意 :CUDA Version
此表中显示的内容 并不
表示您的系统上实际安装了CUDA工具包或运行时。这仅表示您的图形驱动程序兼容的最新版本的CUDA。
要确保驱动程序支持所需的CUDA版本,请访问CUDA发行说明页上的表2 。
即使您的图形卡支持所需的CUDA版本,也可能未在支持计算功能的情况下编译预编译的PyTorch二进制文件。例如,在PyTorch
0.3.1中,放弃了对计算能力<=
5.0的支持。
首先,确认您的图形卡和驱动程序都支持所需的CUDA版本(请参阅上面的第1和第2节) ,本节中的信息假定是这种情况。
检查PyTorch是否支持您的计算能力的最简单方法是安装具有CUDA支持的PyTorch所需版本,并从python解释器运行以下命令
>>> import torch
>>> torch.zeros(1).cuda()
如果您收到一条错误消息,内容为
Found GPU0 XXXXX which is of cuda capability #.#.
PyTorch no longer supports this GPU because it is too old.
那么这意味着PyTorch并未在您的计算能力支持下进行编译。如果运行没有问题,那么您应该很好。
更新
如果要在具有较新GPU的系统上安装旧版本的PyTorch,则可能是旧的PyTorch版本未编译为支持您的计算能力。假设您的GPU支持PyTorch使用的CUDA版本,那么您应该能够从源代码中使用所需的CUDA版本重建PyTorch,或升级到支持新的计算功能而编译的PyTorch的最新版本。
如果您的图形卡和驱动程序支持所需的CUDA版本(第1节和第2节),但PyTorch二进制文件不支持您的计算能力(第3节),则您的选择是
如果您的图形卡不支持所需的CUDA版本(第1节),则您的选择是
所以当我第一次在控制台输入g检查时,会发生这样的情况: 正如建议的那样,我安装了g(之前sudo是否获得了更新和-f)。 但即使在它显示安装了g之后,这也是我在命令行中得到的: 请帮忙!(我在Ubuntu 14.04上)。 编辑1(回应评论) sudo update alternatives--config g提供以下输出: 更新备选方案:错误:g无备选方案
当线程被终止()时,它仍然不会被中断。为什么? 我找到了这个,我找到了这个,但都没有回答我的问题。我在OpenJDK 11和Oracle JDK 16上试用过这个方法--没有区别,结果一样。 我现在已经用Java工作了10多年,多线程任务对我来说一直很清楚;然而,意外地,我遇到了一些奇怪的事情(对我来说),这让我感到奇怪。 我理解,只是类的一个标志(字段),我可以将它与结合使用,以便在获得的情况下
问题内容: 考虑一下这个功能: 有人可以解释一下为什么L1和L2显然无法到达时没有给出警告,而L3却给出了警告。 问题答案: 因为就编译器而言,这只是另一个方法调用。 它所做的是结束过程这一事实只能从实现中找到(这是本机代码,而没有任何区别)。 如果你必须把你的代码(通常也最好避免它,除非你想返回0以外的代码),它应该是一个方法,返回,例如。这样更好。 关于可达性,解释是相同的:是Java语言的关
问题内容: 这是我非常简单的表格(Postgres): 如果我尝试使用FROM数据库下面的命令插入String,那么一切都会按预期工作,不足为奇的是,数据库中会出现一个新行。 但是,如果我想通过JDBC插入字符串,则不会插入任何内容,尽管prepareStatement.executeUpdate()始终返回1。 下面是我的方法应该起作用,但是没有起作用。请告诉我是否缺少明显的东西。我想补充一点,
这是我的代码: 因为我使用POM设计模式,所以我为此创建了一种方法: 这是超文本标记语言标签: 我的问题是,即使存在WebElement,isDisplayed()也返回false。
我还检查了调试,它将语句=>if(sum==1)返回true;但它也在执行更多的语句。