TL;DR
- 首先,设置持久模式,例如
nvidia-smi -i 0 -pm 1(为 GPU 索引 0 设置持久化模式)
- 使用
nvidia-smi 命令,例如-ac 或-lgc(应用程序时钟,锁定gpu 时钟)
-
nvidia-smi 提供所有这些nvidia-smi --help 的命令行帮助
- 此功能可能无法在您的 GPU 上运行。安装最新的驱动程序,而且某些产品根本不提供此功能
- 这些设置通常需要 root 权限,或 Windows 上的管理员权限
- 此描述可能会发生变化。请注意,您使用的版本的命令行帮助应该具有指导意义
更长:
我使用驱动程序 455.23.05 进行此描述。某些功能(例如-lgc)可能在旧版驱动程序中不可用。其中一些特性可能需要设置持久性模式,并且还有助于减少应用程序启动时的可变性。 这并不是对nvidia-smi工具的详尽描述。
设置应用程序时钟:
应用程序时钟功能通常对所描述的测试很有用。当没有应用程序运行(AFAIK)时,它不会强制 GPU 时钟保持在指定的设置,但时钟应该“一旦”应用程序开始运行就达到这些值。它允许您指定 gpu 时钟(即核心时钟)以及内存时钟。让我们从摘录一些重要开关的命令行帮助文本开始:
-ac --applications-clocks= Specifies <memory,graphics> clocks as a
pair (e.g. 2000,800) that defines GPU's
speed in MHz while running applications on a GPU.
-rac --reset-applications-clocks
Resets the applications clocks to the default values.
-acp --applications-clocks-permission=
Toggles permission requirements for -ac and -rac commands:
0/UNRESTRICTED, 1/RESTRICTED
要开始设置应用程序时钟,您可能需要在 Linux 上使用sudo 或类似命令来执行部分或全部这些命令。另请注意,可以打开/关闭提升权限的要求。同样重要的是,您不能为 <memory,graphics> 设置对选择您喜欢的任何值。您必须指定一对,而且该对只能来自允许的选项列表。其他选择将导致未指定的行为。这些选择可以从--query-supported-clocks 开关(使用--help-query-supported-clocks 获得有关该开关的命令行帮助)到nvidia-smi 确定,后者本身需要一些格式。例如,以下命令将给出可以传递给-ac 命令的有效对的详尽列表:
nvidia-smi -i 0 --query-supported-clocks=mem,gr --format=csv
获得有效对的列表后,您可以将其中一对指定给应用程序时钟命令:
nvidia-smi -i 0 -ac 877,1215
(例如,如果以 root 运行或通过 -acp 启用上述命令,在我的 Tesla V100 上会将内存时钟设置为 877MHz,将核心时钟设置为 1215MHz。请注意 -i 开关以选择 GPU使用此命令定位目标。877,1215 对可能在您的 GPU 上无效。另请注意,-acp 功能已从驱动程序 465.xx 和更高版本中删除。)
当您完成所有操作后,您可能希望使用-rac 将应用程序时钟行为重置为默认行为(GPU 根据自己的启发式方法选择时钟频率)。
此外,提供的许多配对可能涉及“提升”行为。 如果发生限制事件,GPU 不能保证完全按照您指定的方式维持所有时钟。典型的节流事件是:
- GPU 消耗的电能过多
- GPU 温度过高
使用 nvidia-smi (nvidia-smi -a) 的“完整”输出可以发现实际节流事件的存在,查找“时钟节流原因”。此输出中提供了其他有用信息,例如默认应用程序时钟。当N/A 出现在您的输出中时,这意味着您的 GPU 不支持此功能。各种 GPU 系列支持的功能种类繁多,我无法回答有关此的问题。
在没有节流事件的情况下,并且假设您的 GPU 支持该功能,我希望应用程序时钟在您的应用程序运行时保持有效。请注意,如果在应用程序当前运行时指定了此命令,则时钟更改可能在 GPU 空闲之前不会生效。在这种情况下,您可能希望监控 GPU 时钟(同样,使用nvidia-smi)。因此,我通常建议在 GPU 空闲时使用这些命令。然后开始在 GPU 上工作。
锁定 GPU(核心)时钟:
在许多情况下,gpu 核心时钟(core、gpu、graphics 在这种情况下都是同义词)表现出最大的可变性(例如,我的 Tesla V100 上提供的应用程序时钟仅包含 877MHz 的内存时钟值;没有其他选择是可能的)。有一个单独的开关可用于将 GPU 核心时钟“锁定”到一系列值。
-lgc --lock-gpu-clocks= Specifies <minGpuClock,maxGpuClock> clocks as a
pair (e.g. 1500,1500) that defines the range
of desired locked GPU clock speed in MHz.
Setting this will supercede application clocks
and take effect regardless if an app is running.
Input can also be a singular desired clock value
(e.g. <GpuClockValue>).
-rgc --reset-gpu-clocks
Resets the Gpu clocks to the default values.
使用范围的上下端点指定此范围。如果您只想选择一个特定的值,您可以将下端点和上端点都指定为该值。据我所知,范围端点包括在内。
例如以下命令:
nvidia-smi -i 0 -lgc 1215,1215
将在我的 Tesla V100 GPU 上将 GPU 核心时钟“锁定”到 1215 MHz。据我所知,即使应用程序正在运行,这种效果也会立即发生。对于应用程序时钟,我能想到的大多数其他警告应该是类似的:
- 选择一个有效的 GPU 核心时钟,作为
--query-supported-clocks 命令的输出
- GPU 不能保证在发生限制时保持请求
- 需要提升的权限
- 用
-rgc重置行为
如帮助中所述,此开关会“覆盖”先前与核心时钟相关的应用程序时钟设置。另外,请注意,许多开关有两种形式,“长”形式和“短”形式。如果需要额外的开关参数,长格式通常需要= 分隔符,短格式通常需要空格分隔符:
nvidia-smi -i 0 -lgc 1215,1215
或
nvidia-smi -i 0 -lock-gpu-clocks=1215,1215
您通常不能混合使用这种格式:
nvidia-smi -i 0 -lgc=1215,1215
可能会报错。
最后一点:
这种影响在 Tesla T4 等设备(没有主动冷却)中尤为严重。
根据我使用 T4 的经验,一个可能的观察结果是节流。 T4 GPU 是功耗最低的数据中心级 GPU 之一,GPU 计算需求肯定有可能超过功率限制 (70W) 所能支持的水平。在这种情况下,GPU 时钟将节流,并且上述命令都不允许您覆盖此行为。根据设计,当 GPU 试图保护自己或保护运行它的系统时,您不能强制 GPU 以更高的时钟运行。
此外,T4 没有主动冷却这一事实并不重要。 T4 唯一批准/支持的使用设置位于 a server that is designed to handle the T4 中。 (对于任何 NVIDIA 数据中心 GPU,类似的说法都是正确的)。此类服务器监控 T4 GPU 温度并为 GPU 提供服务器交付的强制流通式冷却。这是设计使然。服务器负责将 GPU 保持在适当的温度工作范围内。如果服务器没有这样做,您应该与您的服务器供应商解决这个问题。如果您在未经批准的设置(例如不合格的服务器或台式机/工作站)中操作 T4 GPU,那么我通常认为该设备的体验会很糟糕。