PS:本文全部内容限于N卡且安装了N卡驱动的情况,如非N卡或者没有安装N卡驱动,那我估计你也很难用GPU跑深度学习。
Windows 下查看GPU使用情况:
值得注意的是,windows 现在版本的系统中的任务管理器还不能很好的查看深度学习占用的GPU使用率(截至于2021/04/15),但你可以通过专用GPU内存利用率一栏简单的查看当前显存使用情况,但GPU使用率还是无法通过任务管理器查看的。
为此有很多方案来解决这个事情,你可以通过 Nvidia 内置的 nvidia-smi 来查看当前显卡信息和当前使用情况,但是比较僵硬的是如果你需要动态实时查看,你得每时每刻输入 nvidia-smi,如果是在 linux 下,我们可以使用 watch 等命令一键挂起动态查看,但 Windows 目前并不支持这种指令,对此你可以使用插件或者批文件的方式来模拟 watch 指令的工作。
使用批文件挂起 nvidia-smi:
批文件是 Windows 内置的命令行脚本语言,可以使用任何 IDE 编写,将尾缀写为.bat,即可变为可运行的批文件,使用运行批文件之后,我们可以每隔一段时间自动输入一次 nvidia-smi,来保证动态查看。
@echo off:beginnvidia-smiping -n 5 127.0.0.1>nulclsgoto 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++版本。
from pynvml import *import timeimport osnvmlInit()if __name__ == "__main__":gpu_list = [nvmlDeviceGetHandleByIndex(i) for i in range(nvmlDeviceGetCount())]time_decay = 2while(True):process_list = []for index, gpu in enumerate(gpu_list):info = nvmlDeviceGetMemoryInfo(gpu)print("{}_{} —— GPU Utilization: {}% | ".format(str(nvmlDeviceGetName(gpu), 'utf-8'), index,nvmlDeviceGetUtilizationRates(gpu).gpu), end = '')print("Memory Total: {} MB | Memory Free: {} MB | Memory Used: {} MB".format(info.total / 1024**2,info.free / 1024**2,info.used / 1024**2))info_list = nvmlDeviceGetComputeRunningProcesses(gpu)for i in info_list:process_list.append((i.pid, nvmlSystemGetProcessName(i.pid)))for pid, name in process_list:print('\n{} {}'.format(pid, str(name, 'utf-8')), end = '')time.sleep(time_decay)os.system('cls')
或者可以使用封装的更完善的 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 中的原有库来保证系统支持,不推荐这样做。
