NVML API 参考指南 (PDF) - vR570 (较旧版本) - 最后更新于 2025 年 1 月 29 日 - 发送反馈

4.21. Drain 状态

本章介绍 NVML 可以对每个设备执行的方法,以控制其 drain 状态以及 NVML 和 NVIDIA 内核驱动程序的识别。这些方法可以与带外工具一起使用,以打开/关闭 GPU 电源,启用强大的重置场景等。

函数

nvmlReturn_t nvmlDeviceDiscoverGpus ( nvmlPciInfo_t* pciInfo )
nvmlReturn_t nvmlDeviceModifyDrainState ( nvmlPciInfo_t* pciInfo, nvmlEnableState_t newState )
nvmlReturn_t nvmlDeviceQueryDrainState ( nvmlPciInfo_t* pciInfo, nvmlEnableState_t* currentState )
nvmlReturn_t nvmlDeviceRemoveGpu_v2 ( nvmlPciInfo_t* pciInfo, nvmlDetachGpuState_t gpuState, nvmlPcieLinkState_t linkState )

函数

nvmlReturn_t nvmlDeviceDiscoverGpus ( nvmlPciInfo_t* pciInfo )
参数
pciInfo
要搜索的 PCI 树。在此调用中仅使用域、总线和设备字段。
返回值

描述

请求操作系统和 NVIDIA 内核驱动程序重新发现 PCI 子系统的一部分,以查找先前移除的 GPU。可以通过指定域、总线和设备来缩小 PCI 树的范围。如果全部为零,则将搜索整个 PCI 树。请注意,对于长时间运行的 NVML 进程,枚举将根据发现的 GPU 数量以及它们在总线顺序中的插入位置而变化。

此外,所有新发现的 GPU 都将被初始化,并且它们的 ECC 将被擦除,这可能需要每个 GPU 几秒钟。此外,所有设备句柄不再保证在发现后有效。

必须以管理员身份运行。仅适用于 Linux。

适用于 Pascal 或更新的完全支持的设备。支持部分 Kepler 设备。

nvmlReturn_t nvmlDeviceModifyDrainState ( nvmlPciInfo_t* pciInfo, nvmlEnableState_t newState )
参数
pciInfo
要修改的 GPU drain 状态的 PCI 地址
newState
应进入的 drain 状态,请参阅 nvmlEnableState_t
返回值

描述

修改 GPU 的 drain 状态。此方法强制 GPU 不再接受新的传入请求。任何新的 NVML 进程将不再看到此 GPU。在此调用之前,必须关闭此 GPU 的持久模式。必须以管理员身份调用。仅适用于 Linux。

适用于 Pascal 或更新的完全支持的设备。支持部分 Kepler 设备。

nvmlReturn_t nvmlDeviceQueryDrainState ( nvmlPciInfo_t* pciInfo, nvmlEnableState_t* currentState )
参数
pciInfo
要查询的 GPU drain 状态的 PCI 地址
currentState
此 GPU 的当前 drain 状态,请参阅 nvmlEnableState_t
返回值

描述

查询 GPU 的 drain 状态。此方法用于检查 GPU 是否处于当前 draining 状态。仅适用于 Linux。

适用于 Pascal 或更新的完全支持的设备。支持部分 Kepler 设备。

nvmlReturn_t nvmlDeviceRemoveGpu_v2 ( nvmlPciInfo_t* pciInfo, nvmlDetachGpuState_t gpuState, nvmlPcieLinkState_t linkState )
参数
pciInfo
要移除的 GPU 的 PCI 地址
gpuState
是否要从操作系统中移除 GPU,请参阅 nvmlDetachGpuState_t
linkState
请求的上游 PCIe 链路状态,请参阅 nvmlPcieLinkState_t
返回值

描述

此方法将从 NVML 和 NVIDIA 内核驱动程序的视图中移除指定的 GPU,只要没有其他进程附加。如果附加了其他进程,则此调用将返回 NVML_ERROR_IN_USE,并且 GPU 将返回到其原始“draining”状态。注意:在调用 nvmlDeviceModifyDrainState() 以启动 draining 状态之后,进程仍然可以附加的唯一情况是,该进程在使用 GPU,并且在调用之前仍在继续使用 GPU。另请注意,持久模式算作附加到 GPU,因此必须在此调用之前禁用它。

对于长时间运行的 NVML 进程,请注意,这将更改当前 GPU 的枚举。例如,如果存在四个 GPU,并且移除了 GPU1,则新的枚举将为 0-2。此外,移除 GPU 之后的设备句柄将无效,并且必须重新建立。必须以管理员身份运行。仅适用于 Linux。

适用于 Pascal 或更新的完全支持的设备。支持部分 Kepler 设备。


NVML API 参考指南 (PDF) - vR570 (较旧版本) - 最后更新于 2025 年 1 月 29 日 - 发送反馈