PS:本文全部内容限于N卡且安装了N卡驱动的情况,如非N卡或者没有安装N卡驱动,那我估计你也很难用GPU跑深度学习。

Windows 下查看GPU使用情况:

值得注意的是,windows 现在版本的系统中的任务管理器还不能很好的查看深度学习占用的GPU使用率(截至于2021/04/15),但你可以通过专用GPU内存利用率一栏简单的查看当前显存使用情况,但GPU使用率还是无法通过任务管理器查看的。
windows 和 linux 下查看GPU使用情况 - 图1
为此有很多方案来解决这个事情,你可以通过 Nvidia 内置的 nvidia-smi 来查看当前显卡信息和当前使用情况,但是比较僵硬的是如果你需要动态实时查看,你得每时每刻输入 nvidia-smi,如果是在 linux 下,我们可以使用 watch 等命令一键挂起动态查看,但 Windows 目前并不支持这种指令,对此你可以使用插件或者批文件的方式来模拟 watch 指令的工作。
windows 和 linux 下查看GPU使用情况 - 图2

使用批文件挂起 nvidia-smi:

批文件是 Windows 内置的命令行脚本语言,可以使用任何 IDE 编写,将尾缀写为.bat,即可变为可运行的批文件,使用运行批文件之后,我们可以每隔一段时间自动输入一次 nvidia-smi,来保证动态查看。

  1. @echo off
  2. :begin
  3. nvidia-smi
  4. ping -n 5 127.0.0.1>nul
  5. cls
  6. goto begin

PS:由于 Windows 系统的批文件语句中目前尚无能够暂停指定时间的语句,故只能使用 ping -n time_dacy 127.0.0.1>nul 来代替,这个指令可以一直 ping 到 time_dacy 倒计时结束,而 127.0.0.1 是本机地址,ping 起来几乎无延迟,所以可以在某种意义上代替延迟语句。

使用编程语言封装 nvidia-smi:

nvidia-smi 可以直接让其他编程语言得到其运行数据,所以我们可以使用他人编写的能够输出 nvidia-smi 信息的库,来再次封装成动态的 gpu 信息读取器。
以 python 为例,可以使用安装 pip install pynvml,可以使用这个库来直接读取 nvidia-smi 的输出。同理,这个库也有C++版本。

  1. from pynvml import *
  2. import time
  3. import os
  4. nvmlInit()
  5. if __name__ == "__main__":
  6. gpu_list = [nvmlDeviceGetHandleByIndex(i) for i in range(nvmlDeviceGetCount())]
  7. time_decay = 2
  8. while(True):
  9. process_list = []
  10. for index, gpu in enumerate(gpu_list):
  11. info = nvmlDeviceGetMemoryInfo(gpu)
  12. print("{}_{} —— GPU Utilization: {}% | ".format(
  13. str(nvmlDeviceGetName(gpu), 'utf-8'), index,
  14. nvmlDeviceGetUtilizationRates(gpu).gpu
  15. ), end = '')
  16. print("Memory Total: {} MB | Memory Free: {} MB | Memory Used: {} MB".format(
  17. info.total / 1024**2,
  18. info.free / 1024**2,
  19. info.used / 1024**2
  20. ))
  21. info_list = nvmlDeviceGetComputeRunningProcesses(gpu)
  22. for i in info_list:
  23. process_list.append((i.pid, nvmlSystemGetProcessName(i.pid)))
  24. for pid, name in process_list:
  25. print('\n{} {}'.format(pid, str(name, 'utf-8')), end = '')
  26. time.sleep(time_decay)
  27. os.system('cls')
  1. 或者可以使用封装的更完善的 GPUtil 等库来直接动态查看。

Linux 下查看GPU使用情况:

Linux 下查看 GPU 使用情况比 Windows 要轻松许多,你可以直接使用 watch -n time_decay nvidia-smi 来挂起一个进程不断查看(time_decay 是你隔多长时间查看一次,单位s),当然如果是在 Linux 下,我推荐使用 gpustat 来查看,通过 pip install gpustat 即可安装,安装完成后,同样使用 watch 指令挂起就可以一直查看;gpustat 指令的优点是彩色回显,且非常直观,适合多用户服务器使用,如果是 Windows 系统理论上也可以安装 gpustat,但是需要更换一些 python 中的原有库来保证系统支持,不推荐这样做。