Pytorch 说 CUDA 不可用(在 Ubuntu 上)

2024-03-08

我正在尝试在我拥有的笔记本电脑上运行 Pytorch。这是一个较旧的型号,但它确实有 Nvidia 显卡。我意识到这可能不足以实现真正的机器学习,但我正在尝试这样做,以便我可以了解安装 CUDA 的过程。

我已按照上面的步骤操作安装指南 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html适用于 Ubuntu 18.04(我的特定发行版是 Xubuntu)。

我的显卡是GeForce 845M,经过验证lspci | grep nvidia:

01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce 845M] (rev a2)
01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)

我还安装了 gcc 7.5,经验证gcc --version

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我已经安装了正确的标头,通过尝试安装它们来验证sudo apt-get install linux-headers-$(uname -r):

Reading package lists... Done
Building dependency tree       
Reading state information... Done
linux-headers-4.15.0-106-generic is already the newest version (4.15.0-106.107).

然后,我按照安装说明使用 10.1 版的本地 .deb 文件。

现在,当我跑步时nvidia-smi, I get:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.00    Driver Version: 418.87.00    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 845M        On   | 00000000:01:00.0 Off |                  N/A |
| N/A   40C    P0    N/A /  N/A |     88MiB /  2004MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       982      G   /usr/lib/xorg/Xorg                            87MiB |
+-----------------------------------------------------------------------------+

我跑nvcc -V I get:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

然后我执行了安装后说明第 6.1 节 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#mandatory-post,因此,echo $PATH看起来像这样:

/home/isaek/anaconda3/envs/stylegan2_pytorch/bin:/home/isaek/anaconda3/bin:/home/isaek/anaconda3/condabin:/usr/local/cuda-10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

echo $LD_LIBRARY_PATH看起来像这样:

    /usr/local/cuda-10.1/lib64

and my /etc/udev/rules.d/40-vm-hotadd.rules文件看起来像这样:

    # On Hyper-V and Xen Virtual Machines we want to add memory and cpus as soon as they appear
    ATTR{[dmi/id]sys_vendor}=="Microsoft Corporation", ATTR{[dmi/id]product_name}=="Virtual Machine", GOTO="vm_hotadd_apply"
    ATTR{[dmi/id]sys_vendor}=="Xen", GOTO="vm_hotadd_apply"
    GOTO="vm_hotadd_end"
    
    LABEL="vm_hotadd_apply"
    
    # Memory hotadd request
    
    # CPU hotadd request
    SUBSYSTEM=="cpu", ACTION=="add", DEVPATH=="/devices/system/cpu/cpu[0-9]*", TEST=="online", ATTR{online}="1"
    
    LABEL="vm_hotadd_end"

在完成所有这些之后,我什至编译并运行了示例。./deviceQuery返回:

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce 845M"
  CUDA Driver Version / Runtime Version          10.1 / 10.1
  CUDA Capability Major/Minor version number:    5.0
  Total amount of global memory:                 2004 MBytes (2101870592 bytes)
  ( 4) Multiprocessors, (128) CUDA Cores/MP:     512 CUDA Cores
  GPU Max Clock rate:                            863 MHz (0.86 GHz)
  Memory Clock rate:                             1001 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 1048576 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Compute Preemption:            No
  Supports Cooperative Kernel Launch:            No
  Supports MultiDevice Co-op Kernel Launch:      No
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1
Result = PASS

and ./bandwidthTest返回:

[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce 845M
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         11.7

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         11.8

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000         14.5

Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

但在这一切之后,这个 Python 片段(在安装了所有依赖项的 conda 环境中):

    import torch
    torch.cuda.is_available()

returns False

有人知道如何解决这个问题吗?我尝试添加/usr/local/cuda-10.1/bin to etc/environment像这样:

    PATH=$PATH:/usr/local/cuda-10.1/bin

并重新启动终端,但这并没有解决问题。我真的不知道还能尝试什么。

编辑 - @kHarshit 的collect_env 结果

Collecting environment information...
PyTorch version: 1.5.0
Is debug build: No
CUDA used to build PyTorch: 10.2

OS: Ubuntu 18.04.4 LTS
GCC version: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
CMake version: Could not collect

Python version: 3.6
Is CUDA available: No
CUDA runtime version: 10.1.243
GPU models and configuration: GPU 0: GeForce 845M
Nvidia driver version: 418.87.00
cuDNN version: Could not collect

Versions of relevant libraries:
[pip] numpy==1.18.5
[pip] pytorch-ranger==0.1.1
[pip] stylegan2-pytorch==0.12.0
[pip] torch==1.5.0
[pip] torch-optimizer==0.0.1a12
[pip] torchvision==0.6.0
[pip] vector-quantize-pytorch==0.0.2
[conda] numpy                     1.18.5                   pypi_0    pypi
[conda] pytorch-ranger            0.1.1                    pypi_0    pypi
[conda] stylegan2-pytorch         0.12.0                   pypi_0    pypi
[conda] torch                     1.5.0                    pypi_0    pypi
[conda] torch-optimizer           0.0.1a12                 pypi_0    pypi
[conda] torchvision               0.6.0                    pypi_0    pypi
[conda] vector-quantize-pytorch   0.0.2                    pypi_0    pypi

PyTorch 不使用系统的 CUDA 库。当您使用预编译的二进制文件安装 PyTorch 时pip or conda它附带了本地安装的指定版本的 CUDA 库的副本。事实上,您甚至不需要在系统上安装 CUDA 即可使用支持 CUDA 的 PyTorch。

有两种情况可能会导致您的问题。

  1. 您安装了仅 CPU 版本的 PyTorch。在这种情况下,PyTorch 编译时未支持 CUDA,因此它不支持 CUDA。

  2. 您安装了 PyTorch 的 CUDA 10.2 版本。在这种情况下,问题是您的显卡当前使用 418.87 驱动程序,该驱动程序最高仅支持 CUDA 10.1。在这种情况下,两个潜在的修复方法是安装更新的驱动程序(版本 >= 440.33,根据Table 2 https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html)或安装针对 CUDA 10.1 编译的 PyTorch 版本。

要确定安装 PyTorch 时使用的适当命令,您可以使用“安装 PyTorch”部分中的便捷小部件:pytorch.org https://pytorch.org。只需选择适当的操作系统、包管理器和 CUDA 版本,然后运行推荐的命令即可。

在你的情况下,一种解决方案是使用

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

它向 conda 明确指定您要安装针对 CUDA 10.1 编译的 PyTorch 版本。

有关 PyTorch CUDA 与相关驱动程序和硬件的兼容性的更多信息,请参阅这个答案 https://stackoverflow.com/a/61034368/2790047.


Edit添加输出后collect_env我们可以看到问题是你安装了 CUDA 10.2 版本的 PyTorch。基于此,替代解决方案是更新图形驱动程序,如第 2 项和链接答案中所述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch 说 CUDA 不可用(在 Ubuntu 上) 的相关文章

  • 如何让 PHP、符号链接和 __FILE__ 很好地协同工作?

    在本地主机上 我有以下目录结构 share www trunk wp content plugins otherfolders share www portfolio wp content symlink Where symlink是一个符
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • :: 右侧的非法标记

    我有以下模板声明 template
  • 命令行参数中的“-”(破折号)有什么魔力?

    例子 创建 ISO 映像并将其直接刻录到 CD mkisofs V Photos r home vivek photos cdrecord v dev dev dvdrw 更改到上一个目录 cd 侦听端口 12345 并解压发送到该端口的数
  • 类似 wget 的 BitTorrent 客户端或库? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 是否有任何
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • 使用 linux perf 工具测量应用程序的 FLOP

    我想使用 perf Linux 性能计数器子系统的新命令行接口命令 来测量某些应用程序执行的浮点和算术运算的数量 出于测试目的 我使用了我创建的一个简单的虚拟应用程序 请参见下文 因为我找不到任何为测量 FP 和整数运算而定义的 perf
  • 如何修改s_client的代码?

    我正在玩apps s client c in the openssl源代码 我想进行一些更改并运行它 但是在保存文件并执行操作后 我的更改没有得到反映make all or a make 例如 我改变了sc usage函数为此 BIO pr
  • 访问 Linux 线程(pthreads)的本地堆栈

    我目前正在实现一个使用多线程但对总内存消耗有要求的应用程序 我希望有一个主线程执行 I O 并有几个工作线程执行计算 目前 我在主堆栈上有几个可供工作人员访问的数据结构 我使用 OpenMP 进行工作分配 由于主 工作者模式不能很好地与 O
  • Linux shell 命令逐块读取/打印文件

    是否有一个标准的 Linux 命令可以用来逐块读取文件 例如 我有一个大小为 6kB 的文件 我想读取 打印第一个 1kB 然后是第二个 1kB 看来猫 头 尾在这种情况下不起作用 非常感谢 你可以这样做read n在循环中 while r
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • Linux下的C#,Process.Start()异常“没有这样的文件或目录”

    我在使用 Process 类调用程序来启动程序时遇到问题 可执行文件的层次结构位于 bin 目录下 而当前工作目录需要位于 lib 目录下 project bin a out this is what I need to call lib
  • 即使 makefile 和源代码存在,为什么“Build Project”在 Eclipse Helios CDT 中显示为灰色?

    我无法构建我的项目 我在 Eclipse Helios 中创建了一个新的 CDT 项目 并告诉它使用现有的源代码和 makefile 这两者都正确显示在 Package 和 Project 视图中 然而 项目 菜单中的 构建全部 和 构建项
  • Mono 和 WebRequest 速度 - 测试

    在 mono 4 6 2 linux 中 我注意到 wget 下载文件的速度与webclient DownloadString 所以我做了一个小测试来调查 为什么 wget 明显比 C 快 根据我自己的实验 使用 wget 下载 手动读取文
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是
  • 使用 sed 将 old-link-url 替换为 new-link-url

    我正在 bash 中编写一个脚本 将 old link url 替换为 new link url 我的问题是 sed 由于斜杠而无法替换 url 如果我只输入一些文字就可以了 my code sed e s old link new lin
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123

随机推荐

  • Javascript正则表达式删除空格

    所以我正在为 JQuery 编写一个小插件来删除字符串中的空格 see here http jsfiddle net rlemon ge59E function stripSpaces function str var reg new Re
  • 在 grep/ack 中转义括号

    我想查找字符串 methodname 但我无法转义 我怎样才能得到 grep methodname or ack grep methodname to work 有两件事可以解释 外壳 以及ack grep 您可以使用 or 为了逃避 来自
  • python信号,中断系统调用

    我正在用 python 编写一个程序 我希望从 stdin 读取并处理 sigchld 我想在输入时处理任一输入 而不旋转 推测性地对输入进行采样 我无法在每次调用时捕捉到被信号中断的系统调用 我是否以错误的方式处理这个问题 我可以在不尝试
  • VBA 宏 (Excel) 中出现错误“过程太大”

    我正进入 状态Procedure too Large Error在 VBA 宏中 我使用的是 MS Excel 2003 如果您的程序超过 64kb 您将收到该错误 这些是您可以压缩代码的一些事情 1 摆脱重复的代码 看这个例子 Sub S
  • 如何获得SQL Server 2005数据库的独占访问权限来恢复?

    每当我在 SQL Server 中恢复数据库备份时 都会出现以下错误 Msg 3101 Level 16 State 1 Line 1 Exclusive access could not be obtained because the d
  • 如何使用 Java 在 Play Framework 2.0 中测试文件上传的多部分表单数据请求?

    据我所知 您可以按照此处的建议使用 Scala API 来执行此操作 https groups google com forum fromgroups topic play framework 1vNGW lPi9I https group
  • 在 Spring-boot 上将 Spring Batch 与 spring-batch-admin-manager 集成时出错

    我正在尝试使用 spring boot 嵌入式 tomcat 配置将 spring batch admin manager 与 spring boot starter batch 集成在一起 但是我有这个错误跟踪 我无法确定 org spr
  • 如何在 scala 中解析 json 列表或数组以用于 play 框架 2.2

    我正在编写一些 RESTful API 测试用例 并且对 scala playframwork 的使用经验很少 这是我的 JSON 的示例 size 5082 date created Wed Nov 19 17 10 39 CST 201
  • 选择复选框 Angular 中的所有项目

    我有一个包含多个复选框的列表 我做了一个单选和多选的功能 用户可以获取单选和多选的数据 现在我遇到的问题是 当我删除列表中一个复选框的选择 然后选择所有复选框时 应该取消选择 但我无法做到这一点 下面是我的代码 超文本标记语言 div cl
  • AVAudioPlayer 播放时游戏滞后

    我正在创建一个游戏 用户用喷气背包控制角色 当喷气背包与钻石相交时 我将钻石添加到它们的总数中 然后播放声音 然而 声音会使游戏暂停十分之一秒左右并扰乱流程 这是我正在使用的代码 var diamondSound NSBundle main
  • 从打字稿中的对象获取特定类型的所有键[重复]

    这个问题在这里已经有答案了 标题说明了一切 但最好举个例子 interface A key1 string key2 string key3 number type KeysOfType
  • 未找到 Media type=text/html 的 MessageBodyWriter,但适用于 JSON

    问题是 每当我尝试生成 JSON 以外的媒体类型响应时 我都会收到 MessageBodyWriter 未找到错误 但响应对于 Application JSON 输出效果很好 我在 Maven POM 中使用了多个依赖项 因此 Messag
  • 本地安装的 gulp 无法在命令行中运行?

    我是 Nodejs 和 gulp 的新手 我正在开发一个 Nodejs 项目 其中我必须对所有文件运行 jslint 我正在使用 gulp 来达到这个目的 我的问题是 为了在 cli 上运行 gulp 我不想全局安装 gulp 也不想更新我
  • SWIG 在 AIX 上崩溃(使用 python,可能还有其他所有 SWIG 支持)

    SWIG 在 AIX 上可以轻松编译和安装 不幸的是 一个简单的SWIG 你好世界 http www swig org tutorial html 也可以编译 但不是那么容易 因分段错误或非法指令而崩溃 取决于编译 链接器过程的一些细节 g
  • 有没有办法在父小部件上覆盖多个项目(PySide/Qt)

    我有一个主要的父窗口小部件 并且我想要在父窗口小部件之上有多个布局 使用父窗口小部件初始化布局会将布局放置在父窗口小部件的顶部 我喜欢这个 并且想为同一个父小部件多次执行此操作 左侧 顶部 底部和右侧 我使用了具有不同子布局的 QGridL
  • C++工作草案的措辞可能存在缺陷(整数转换等级规则)

    我发现其中可能存在矛盾标准C 工作草案 https eel is c draft 首先我陈述事实 最后提出我的问题 当 的时候整数转换等级成立 转化排名 1 1 http eel is c draft basic types conv ra
  • 在 PHP 中合并 XML 文件

    我有2个文件1 xml and 2 xml两者都有相似的结构 我想要一个 我尝试了很多解决方案 但只有错误 坦率地说 我不知道这些脚本是如何工作的 1 xml
  • Mongodb find方法可以动态查询吗?

    我是 mongodb 的初学者 所以如果有人建议我如何有效地编写以下查询 那就太好了 我有一个集合 其中包含位置和日期作为字段 搜索条件有4个 用户无需任何参数即可搜索 用户可以仅使用日期进行搜索 用户可以仅通过位置进行搜索 用户可以使用日
  • 删除 Azure Blob 存储容器内的文件夹

    我有一个名为 图片 并有一些名为 文件夹1 文件夹2 在它里面 所以我的 blob 的文件将这样处理 http optimus blob core windows net pictures Folder1 IMG123 png http o
  • Pytorch 说 CUDA 不可用(在 Ubuntu 上)

    我正在尝试在我拥有的笔记本电脑上运行 Pytorch 这是一个较旧的型号 但它确实有 Nvidia 显卡 我意识到这可能不足以实现真正的机器学习 但我正在尝试这样做 以便我可以了解安装 CUDA 的过程 我已按照上面的步骤操作安装指南 ht