如何获取GPU信息?

我正在寻找一个命令,它能给我提供与以下信息相同的内容:
cat /proc/cpuinfo 

除了GPU(芯片类型和内存,频率)之外。

cat /proc/cpuinfo 做什么?你要寻找哪些信息? - Charlie Parker
5@CharlieParker 它输出了CPU的信息... - Emobe
我个人使用:python -c "import torch; print(torch.cuda.get_device_name(0));" - Charlie Parker
25个回答

我不知道是否有直接相等的功能,但是lshw应该能给你想要的信息,请尝试一下:
sudo lshw -C display

(没有使用sudo也可以,但是信息可能不够完整/准确)
你还可以安装lshw-gtk软件包来获得图形界面。

3在菜单中的命令前面加上gksu才能使lshw-gtk正常工作。 - robin0800
有任何更新吗?我是这个命令的粉丝,但它似乎只提供了基本总线时钟33MHz的时钟频率。我正在努力使这个问答内容更新。谢谢! - Elder Geek
3抱歉,我对深度学习还不太了解。如果我有一个GPU,它应该显示什么呢?它显示的是“产品:第二代酷睿处理器家族集成显卡控制器”。 - Nathan majicvr.com
2@Nathan 这意味着你有一个显卡...可能是一个非常弱的显卡。你的显卡显示为“集成图形”,这意味着它集成在CPU中。你的CPU有自己的组件,可以充当显卡,并且可能(为了节省成本)使用普通内存来存储缓冲区。你没有单独的可拆卸显卡。 - Jack G
这并不总是为某些笔记本电脑上的离散NVidia显卡提供内存(例如HP G7 Firefly)。 - AntonOfTheWoods

那种类型的信息是非标准的,而且你用来收集它的工具也各不相同。
命令glxinfo将为图形处理器提供所有可用的OpenGL信息,包括其供应商名称(如果驱动程序已正确安装)。
要获取时钟速度信息,没有标准工具。
对于运行旧Catalyst驱动程序的ATI/AMD GPU,aticonfig --odgc应该获取时钟速率,aticonfig --odgt应该获取温度数据。我不熟悉AMDGPU-Pro,但应该存在类似的工具。
对于NVIDIA GPU,nvidia-smi工具将显示您想要的所有信息,包括时钟速度和使用统计信息。
我不知道开源驱动程序或英特尔或其他GPU的等效工具,但可以从lspcilshw工具中获取有关硬件的其他信息。

3如何安装glxinfo? - stiv
12@stiv:这是Mesa库的一部分,并且在Ubuntu上随mesa-utils软件包一起提供。 - greyfade
4自从fglrx退役以来,aticonfig似乎不再可用。nvclock也似乎已经被放弃,因为最后一个版本是针对trusty的。你有没有更新的解决方案?这是我目前所拥有的链接 - Elder Geek
8glxinfo | grep "Device" 在我的 Intel GPU 上运行得很好。 - John Hamilton
7我使用的命令是:glxinfo | egrep -i 'device|memory' - Melroy van den Berg
所有这些grep在我的系统上都会返回“llvmpipe”。非常奇怪的模型... - Torsten Bronger
1@stiv glxinfo 可以通过以下命令进行安装:sudo apt install mesa-utils - Nayantara Jeyaraj
nvidia-smi 也会显示统计信息,包括以 GB 为单位的大小。 - IT_User
lspci对我来说起了作用。 - steoiatsl
据我所知,只有在安装了驱动程序的情况下,才能使用nvidia-smi。如果不想使用驱动程序(例如libvirt和GPU的PCI透传),由于GPU已从主机中分离,这是不可能的。 - rbaleksandar

这里有一篇关于命令行工作的博客文章。

http://www.cyberciti.biz/faq/howto-find-linux-vga-video-card-ram/

找出设备ID:
 lspci | grep ' VGA ' | cut -d" " -f 1
03:00.0

您可以再次使用lspci命令来处理此输出,形成两个嵌套的命令
lspci  -v -s  $(lspci | grep ' VGA ' | cut -d" " -f 1)

如果您有多个GPU卡,请尝试使用以下等效命令: ``` lspci | grep ' VGA ' | cut -d" " -f 1 | xargs -i lspci -v -s {} ``` 我的系统输出结果为:
03:00.0 VGA compatible controller: NVIDIA Corporation G98 [Quadro NVS 295] (rev a1) (prog-if 00 [VGA controller])
    Subsystem: NVIDIA Corporation Device 062e
    Flags: bus master, fast devsel, latency 0, IRQ 24
    Memory at f6000000 (32-bit, non-prefetchable) [size=16M]
    Memory at ec000000 (64-bit, prefetchable) [size=64M]
    Memory at f4000000 (64-bit, non-prefetchable) [size=32M]
    I/O ports at dc80 [size=128]
    [virtual] Expansion ROM at f7e00000 [disabled] [size=128K]
    Capabilities: <access denied>
    Kernel driver in use: nvidia

编辑:您可以通过使用sudo启动来避免。
因此,(prefetchable) [size=64M)表示我有一张64MB的NVIDIA显卡。然而,实际上不是这样,它是256MB。为什么呢?请看下面。
要了解如何获取最多的信息和性能,请阅读Arch-Linux Wiki上的一篇非常全面的文章。

https://wiki.archlinux.org/index.php/NVIDIA

对于NVIDIA用户,请从以下步骤开始:
nvidia-smi

这适用于安装了Nvidia驱动程序的系统,但不适用于运行开源的“nouveau”驱动程序的系统。

输出

Thu Dec 19 10:54:18 2013       
+------------------------------------------------------+                       
| NVIDIA-SMI 5.319.60   Driver Version: 319.60         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro NVS 295      Off  | 0000:03:00.0     N/A |                  N/A |
| N/A   73C  N/A     N/A /  N/A |      252MB /   255MB |     N/A      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Compute processes:                                               GPU Memory |
|  GPU       PID  Process name                                     Usage      |
|=============================================================================|
|    0            Not Supported                                               |
+-----------------------------------------------------------------------------+

这意味着我有一张256MB的GDDR3显卡。
目前,我不知道如何获取适用于Intel和AMD/ATI GPU的显卡。

30+1 对于 nvidia-smi(在我看来应该稍作强调) - Martin Thoma
1如果有人有任何想法:nvidia-smi无限挂起:可能是什么问题? - Franck Dernoncourt
5nvidia-smi 没有显示完整的 GPU 名称。 - mrgloom
10nvidia-smi -q,如@Quanlong建议的(https://askubuntu.com/a/929163/432288),使用更合理的输出格式。 - Nickolay
你还可以使用$ nvidia-smi --query-gpu=gpu_name --format=csv来仅获取GPU名称。 - Eric Wiener

运行google-chrome并导航到URLabout:gpu。 如果Chrome已经找出如何使用OpenGL,您将获得有关您的GPU的极其详细的信息。

7这在Chromiumchromium-browser)中也可以工作。 - Eliah Kagan
1聪明。沿着这条线,我还去了chromeexperiments.com看看那里的性能。像黄油一样顺畅 - 我绝对在使用GPU。 - Jacksonkr

因为你指定了像cat这样的命令用于CPU,所以这是GPU的等效命令。特别适用于Nvidia显卡。它只需要加载Nvidia设备驱动程序,无需其他软件。
这里的路径适用于我拥有的显卡。但是你的可能会有所不同,正如其他人在评论中指出的那样。
第一个GPU
> cat /proc/driver/nvidia/gpus/0/information
Model:       GeForce GTX 680
IRQ:         24
GPU UUID:    GPU-71541068-cded-8a1b-1d7e-a093a09e9842
Video BIOS:      80.04.09.00.01
Bus Type:    PCIe
DMA Size:    40 bits
DMA Mask:    0xffffffffff
Bus Location:    0000:01.00.0

第二个GPU

> cat /proc/driver/nvidia/gpus/1/information
Model:       GeForce GTX 580
IRQ:         33
GPU UUID:    GPU-64b1235c-51fc-d6f1-0f0e-fa70320f7a47
Video BIOS:      70.10.20.00.01
Bus Type:    PCIe
DMA Size:    40 bits
DMA Mask:    0xffffffffff
Bus Location:    0000:08.00.0

19谢谢!(虽然对我来说,请运行cat /proc/driver/nvidia/gpus/0000\:01\:00.0/information - matt wilkie
5这是唯一正确的答案,在按需云/HPC集群环境中,glxinfo或lspci都无法正常工作(前者因为没有OpenGL和显示器,后者因为nVidia显卡被类似Matrox G200eW3的图形控制器抽象)。在gpus文件夹下,我的文件夹名称是0000:3b:00.00000:d8:00.0,所以我们应该输入:cat /proc/driver/nvidia/gpus/0000:3b:00.0/information。可爱的Tesla V100-PCIE-16GB型号表明qsub作业限制已满足要求。 - user5280911

对于Nvidia显卡,请输入以下命令:
nvidia-smi -q

这个给我在Windows上获得了Nvidia GPU的UUID。谢谢!非常有用! - rd51

clinfo

sudo apt-get install clinfo
clinfo

这是一个类似于glxinfo的OpenCL工具,我在这里描述了我的GPU设置:https://stackoverflow.com/questions/7542808/how-to-compile-opencl-on-ubuntu/33483311#33483311 输出中包含了我的GPU型号等信息。
Number of devices                                 1
  Device Name                                     Quadro M1200

Ubuntu 20.04 设置 -> 关于

你可以通过点击右上角菜单打开设置,或者直接执行以下操作:

  • 按下Super键(也称为Windows键)
  • 输入"about"并选择相应的条目

在"图形"下,我可以看到我的GPU型号是

Quadro M1200/PCIe/SSE2

enter image description here

一些其他它可以显示的东西:
- "软件渲染"(Ubuntu 23.10):显卡完全不工作 - "NV117":我认为这意味着它正在使用Nouveau nvidia-settings 将运行时信息与一些静态信息混合。

enter image description here

更多细节:如何检查Ubuntu是否正在使用我的NVIDIA显卡?

1这太完美了——这个回答应该得到更多的赞同。我认为其他的回答更偏向于关于GPU的低级技术信息,而这个选项更加适合消费者(因为它类似于Windows上大家熟悉的Nvidia控制面板程序)。 - Raleigh L.

我相信这个问题的最佳选择是neofetch
# Get neofetch
sudo add-apt-repository ppa:dawidd0811/neofetch
sudo apt update
sudo apt install neofetch
# Run neofetch
neofetch

这将产生以下输出:

5我在这个回答中没有看到视频卡的频率和内存。有更简单的方法来获取显卡型号,这似乎是你给我们的全部信息。我不确定这对现有答案有何补充。 - Elder Geek
3screenfetch程序可以做同样的事情,而且不需要安装PPA。 - Braden Best
1这是一个shell脚本。另外,我也将它链接到了GitHub上,所以你可以直接将其用作脚本。 - HaoZeke
3这是 screenfetch 的链接:https://github.com/KittyKatt/screenFetch - Camille Goudeseune

这真的不是很复杂。对于型号和内存,下面是一个适用于我测试过的所有视频卡(无论制造商是Intel、AMD还是NVIDIA)的一行代码:
GPU=$(lspci | grep VGA | cut -d ":" -f3);RAM=$(cardid=$(lspci | grep VGA |cut -d " " -f1);lspci -v -s $cardid | grep " prefetchable"| cut -d "=" -f2);echo $GPU $RAM GPU= 这部分代码只是从经过“grep”筛选的“lspci”输出中获取第三个字段,该字段对应于视频芯片。 RAM= 这部分代码只是将变量cardid设置为与匹配“VGA”的lspci输出的第一个字段相等,并将其作为请求传递给-v详细输出的lspci特定-s设备,进一步通过grep筛选输出以匹配字符串“ prefetchable”,因为这包含了卡上的内存(请注意前面的空格,我们不希望在输出中匹配“non-prefetchable”)。

关于Intel集成显卡的时钟频率(在I3和I5上测试过)

执行命令sudo find /sys -type f -name gt_cur* -print0 | xargs -0 cat 这将进入/sys目录树,找到gt_cur_freq_mhz文件,在我的I3上路径是/sys/devices/pci0000:00/0000:00:02.0/drm/card0/gt_cur_freq_mhz并打印内容。在极轻负载下,我的情况下为350,对应于/sys/devices/pci0000:00/0000:00:02.0/drm/card0/gt_min_freq_mhz中找到的最小频率,并且在运行glxgearsglmark2时结果为1050,对应于/sys/devices/pci0000:00/0000:00:02.0/drm/card0/gt_max_freq_mhz中找到的最大频率。

关于Nvidia显卡的时钟频率:

nvidia-smi -stats -d procClk 对应于GPU时钟 nvidia-smi -stats -d memClk 对应于内存时钟。

注意:由于我的可靠的GeForce 210不受支持,我无法测试上述内容。此命令仅适用于Kepler或更新的GPU,如`nvidia-smi -stats --help'中所示

目前我没有关于AMD显卡时钟速率的解决方案,并且没有可用于测试的硬件。然而,据我所知,已接受答案中提到的aticonfig不再存在,而且似乎自trusty以来也无法使用nvclock


如果你只是想要机器上的显卡名称,那么只需使用以下命令:
$ nvidia-smi --list-gpus

对于一些较新的GPU,这还列出了每个设备的内存。

1更简洁地说,使用命令$nvidia-smi -L - Shayan Amani