服务器上安装好了 GPU,同时也安装好了 nvidia drivers、cuda-toolkit、cudnn,那么如何查看 GPU 是否可以正常运行,已经如何读懂各参数信息呢?下面以 Ubuntu 18.04 来说明。
nvcc cuda 编译器驱动程序 nvcc 的目的是向开发人员隐藏 cuda 编译的复杂细节。详细介绍请参考英伟达官网
这里主要是使用该程序查看 cuda 编译器工具的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 查看 nvcc 路径 $ whereis nvcc nvcc: /usr/local/cuda-10.0/bin/nvcc.profile /usr/local/cuda-10.0/bin/nvcc /usr/share/man/man1/nvcc.1 # 查看 cuda 编译器工具的版本信息 $ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Sat_Aug_25_21:08:01_CDT_2018 Cuda compilation tools, release 10.0, V10.0.130 # 查看 cuda 编译器工具的版本信息 nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Sat_Aug_25_21:08:01_CDT_2018 Cuda compilation tools, release 10.0, V10.0.130
可以看到安装的 cuda 版本是 10.0.130
nvidia-smi nvidia-smi (NVIDIA System Management Interface) 是一种命令行实用工具,帮助管理和监控 NVIDIA GPU 设备。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 $ nvidia-smi Wed May 26 11:14:18 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.73.01 Driver Version: 460.73.01 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-PCIE... Off | 00000000:3B:00.0 Off | 0 | | N/A 22C P0 33W / 250W | 0MiB / 32510MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX TIT... Off | 00000000:AF:00.0 Off | N/A | | 20% 29C P0 70W / 250W | 0MiB / 12212MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 2 GeForce GTX TIT... Off | 00000000:D8:00.0 Off | N/A | | 20% 26C P0 64W / 250W | 0MiB / 12212MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
显示参数解释:
Wed May 26 11:14:18 2021 :表示命令运行时间,也是指代 GPU 运行情况的具体时间
NVIDIA-SMI 460.73.01 Driver Version: 460.73.01 CUDA Version: 11.2 :表示安装的 cuda 驱动器版本和 cuda 版本
GPU :表示 GPU 编号,从0开始
Fan :表示 GPU 风扇转速,0-100%,当为 N/A 时表示设备不依赖风扇降温
Name :表示 GPU 名称
Temp :表示 GPU 当前运行温度
Perf :表示 GPU 性能状态,P0 ~ P12,P0 表示性能最大(一般 GPU 未使用状态性能,当使用时性能降低),P12 表示性能最小
Persistence-M :表示持续模式的状态,默认关闭。持续模式打开,当新的 GPU 应用启动时,花费时间更少。但持续模式打开耗能大
Pwr:Usage/Cap :表示 GPU 能耗情况,包括当前消耗功率和最大功率
Bus-Id :表示 GPU 总线信息
Disp.A :表示 Display Active 的意思,表示GPU的显示是否初始化
Memory-Usage :表示 GPU 显存情况,包括当前消耗显存以及最大显存
GPU-Util :表示 GPU 的利用率,当 GPU 没有使用时,显示 0%,当 GPU 使用时,显示大于 0%
Volatile Uncorr. ECC :ECC (error correcting code, 错误检查和纠正) 该功能可以提高数据的正确性,随之而来的是可用显存的减少和性能上的损失。
Compute M. :表示 GPU 计算模式
MIG M. : Multi-Instance GPU (MIG) 模式,创建基于 MIG 的 vGPU 实例需要将 GPU 切换到 MIG 模式,此配置为持久配置,只需执行一次,重启服务器后仍然有效: nvidia-smi -mig 1
Processes :表示使用 GPU 的进程信息
cuda 版本号不一致? 细心的同志会发现使用 nvcc -V
和使用 nvidia-smi
查看的 cuda 版本号不一致,这是什么原因呢。
nvcc 是 cuda 编译器,nvidia-smi 是NVIDIA System Management Interface,一种命令行工具。nvcc -V
显示的 cuda 版本对应 runtime api (运行时),nvidia-smi
对应 driver api;nvcc 是通过 cuda-toolkit 安装,nvidia-smi
是通过 nvidia drivers 安装;nvcc 只知道自身构建时的 cuda runtime 版本,不知道安装的 nvidia drivers 版本,甚至不知道服务器上是否安装了 GPU driver.
通常,driver api 的版本能向下兼容 runtime api 的版本。因此,当 nvidia-smi
显示的 cuda 版本大于 nvcc -V
显示的 cuda 版本时一般是没有问题的,但是反过来小于就不行。
pytorch 安装基于哪个 cuda 版本? 在 pytorch 官网上可以发现,当使用 conda 安装 pytorch 时,指定的版本信息是 cudatoolkit,如下
1 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
因此,我们应该选择与 nvcc -V
对应的 cuda 版本来安装 pytorch. 另外,只要大版本对应即可,如 cudatooklit=10.x 对应 Cuda compilation tools, release 10.0, V10.0.130,完全可以使用。
其他 nvidia-smi 参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # 实时刷新显示 $ nvidia-smi -l # 每5s刷新一次 $ watch -n 5 nvidia-smi # 列出所有 GPU 名称 $ nvidia-smi -L GPU 0: Tesla V100-PCIE-32GB (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU 1: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU 2: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) $ nvidia-smi --list-gpus GPU 0: Tesla V100-PCIE-32GB (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU 1: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU 2: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) # 查看帮助信息 $ nvidia-smi -h # 把信息写入文件中 $ nvidia-smi -f cuda.log # 只显示指定序号的GPU $ nvidia-smi -i 0 # 使用 -q 显示更详细的信息 $ nvidia-smi -q -i 0 $ nvidia-smi -q -i 0 -f gpu1.log # 以 xml 格式输出信息 $ nvidia-smi -q -x $ nvidia-smi -q -x -i 0 $ nvidia-smi -q -x -i 0 -f gpu1.log
pytorch 中使用 GPU 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import osos.environ["CUDA_VISIBLE_DEVICES" ] = '0,1' import torchprint (torch.cuda.is_available())> True torch.cuda.device_count() > 2 > _CudaDeviceProperties(name='Tesla V100-PCIE-32GB' , major=7 , minor=0 , total_memory=325 10MB, multi_processor_count=80 ) torch.cuda.current_device() > 0 torch.cuda.get_device_name(0 ) > 'Tesla V100-PCIE-32GB' torch.cuda.get_device_capability(0 ) > (7 , 0 ) device = torch.device("cuda:0" ) a = torch.randn(10000 , 1000 ) b = torch.randn(1000 , 10000 ) device = torch.device('cuda:0' ) a = a.to(device) b = b.to(device) torch.matmul(a, b)
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. 错误 不知道什么情况,某次运行命令 nvidia-smi
时报上述错误,考虑可能是更新系统或者按照模型软件导致的,也可能是开关机导致的内核版本与安装驱动时的版本不匹配造成。解决方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 查看 nvidia drivers 是否还在 $ whereis nvidia nvidia: /usr/lib/x86_64-linux-gnu/nvidia /usr/lib/nvidia /usr/share/nvidia /usr/src/nvidia-460.73.01/nvidia # DKMS(Dynamic Kernel Module Support)维护内核外的驱动程序,内核版本变动之后可以自动重新生成新的模块。 $ sudo apt-get install dkms # 安装 nvidia drivers 版本 460.73.01,从 whereis nvidia 运行结果中查看 $ sudo dkms install -m nvidia -v 460.73.01 # 如果报错,缺少linux-headers-5.4.0-73-generic或linux-hwe-5.4-headers,需要手动下载这些DEB文件,然后安装,最后在使用dkms安装对应的 nvidia 驱动就可以了 $ sudo dpkg -i linux-hwe-5.4-headers-5.4.0-73_5.4.0-73.82_18.04.1_all.deb $ sudo dpkg -i linux-headers-5.4.0-73-generic_5.4.0-73.82_18.04.1_amd64.deb # 或者使用如下方法安装 linux-headers $ sudo apt update $ sudo apt install linux-headers-$(uname -r) # 使用nvidia-smi测试一下,成功后可不用使用下面代码;如果不成功请运行 $ sudo dkms install -m nvidia -v 460.73.01
参考链接
【CUDA】nvcc和nvidia-smi显示的版本不一致?
nvidia-smi 和 nvcc 结果的版本为何不一致
nvidia-smi查看GPU的使用信息并分析
实用的 NVIDIA-SMI 查询示例
CUDA之nvidia-smi命令详解
ubuntu关机开机后显卡挂了:报错NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. M…
NVIDIA-SMI系列命令详解(6)-设备修改选项(1)