使用nvidia-smi管理你的GPU卡
nvidia-smi
命令是NVIDIA系统管理接口,之前提到使用nvidia-docker
实际上底层也是调用的该接口。该接口可以查看到当前主机上的相关GPU设备,任务以及当前状态等信息,熟练使用该接口能够更好的管理好GPU系统资源。
开启持久模式
在Linux上,你需要将GPUs设置为持久模式persistence mode
来保证你的NVIDIA
驱动即使没有应用正在运行也是出于加载状态的。这个在你有一些短生命周期的job类型应用运行时是非常有用的。持久模式比较耗电,但是它会防止每次启动GPU应用程序时发生的相当长的延迟。当然如果你使用设定了时钟频率或功率限制的GPUs的话(当驱动不加载的话,这些设置会丢失),持久模式将是非常有必要的。通过如下命令设置持久模式:
|
|
在Windows上,改接口不支持设置持久模式,但是可以设置为TCC
模式。
查看GPU状态
1.GPU设备概要信息
由以下输出可以看到驱动版本为:375.39
,以及GPU基本信息
|
|
2.查看当前系统可用的GPU设备列表
|
|
3.查看GPU以及单元信息
|
|
4.查看每一个GPU指定详细信息
|
|
5.指定GPU查看相关信息
|
|
6.查看GPU全部信息
|
|
监控和管理GPU Boost
管理员和用户可以使用这种方式来观察GPUs的状态。 以下显示了每个GPU的可用时钟频率(Tesla M40)。
|
|
以上显示中只有两个内存时钟(memory clock)被支持:3004 MHz和405 MHz.运行在前者的内存,有24个支持GPU时钟频率。后者只有一个GPU频率,且是空闲状态的。在Tesla K80上,GPU Boost会自动管理这些频率,来让他们运行的尽可能快。而在其他一些模块中,比如Tesla K40,必须由管理员来指定GPU时钟频率。
查看当前GPU的时钟频率,默认的时钟加速和最小的时钟频率
|
|
理想状态中,你想让所有的时钟都一直运行在比较高的速度,但是对于所有的应用来说是不可能的。可以使用PERFORMANCE参数来查看每个GPU卡当前的状态以及时钟慢下来的原因。
|
|
如果任何一个GPU时钟都以比较慢速度运行的话,那么上面的Clocks Throttle Reasons
中的一个或多个将会被标记为active状态。最需要关注的是HW Slowdown
和Unknown
是否是active状态,如果那样的话很可能是电源或者冷却系统的问题。其余的需要关注设备卡是否是空闲的或者是由管理员手动设置为slower
模式。
使用nvidia-smi
还可以去监控其他相关指标,-d参数支持MEMORY UTILIZATION ECC TEMPERATURE POWER CLOCK COMPUTE PIDS PERFORMANCE SUPPORTED_CLOCKS PAGE_RETIREMENT ACCOUNTING
查看每块GPU卡的内存使用:
|
|
指定GPU卡查看相关指标:
|
|
查看系统的拓扑结构
要适当的利用更先进的NVIDIA GPU优势(例如GPU Direct),因此系统的拓扑结构的正确配置是非常重要的。拓扑结构涉及到PCI-Express
(GPUs, InfiniBand HCAs, storage controllers, etc)设备如何连接到其他设备,以及如何连接到系统CPU的。如果配置不正确,可能某些特定的功能性能会比较低甚至不能正常工作。为了解决如上问题,nvidia-smi
最近的版本包含了一个可用查看系统拓扑的命令。
|
|
以上配置显示我们有四块GOU卡,并且都链接在服务器的第一颗CPU上(物理机2颗6核cpu并开启超线程)。该工具建议推荐我们将job运行在偶数标记的cpu上。并且以上四块GPU卡都是互相通过PCIe switch直连的。
一个可用的GPU矩阵表示如下:
- X = 表示GPU本身
- SOC = 表示贯穿PCIe总线和CPU sockets之间的SMP链接。
- PHB = 贯穿PCIe总线和PCIe Host Bridge
- PXB = 贯穿多个PCIe switch(不通过PCIe Host Bridge)
- PIX = 链接单个PCIe switch
- NV# = 贯穿一组NVLinks设备
划重点啦:其实由上面的GPU拓扑可以看出来,我们系统上的4块设备是两两互相直连的架构!因为4块卡是通过一个PCIe switch来互相通信的。大体结构如图:
补充:查看GPU卡之间的邻居和链接关系
|
|