限制 DGX Spark GPU 时钟:安装 sparkLimiter 并注册服务
要设定 DGX Spark 的 GPU 时钟上限,并在重启后继续应用相同的限制,可以使用 。这是一个 Bash 脚本,它通过 设置时钟范围,并注册一个在启动时重新应用设置的 systemd 服务。 以下是在一台 DGX Spark 上直接执行的方法。使用默认值 ,如有需要,也可以改为 。 本文根据仓库代码整理而成。并非
要设定 DGX Spark 的 GPU 时钟上限,并在重启后继续应用相同的限制,可以使用 。这是一个 Bash 脚本,它通过 设置时钟范围,并注册一个在启动时重新应用设置的 systemd 服务。 以下是在一台 DGX Spark 上直接执行的方法。使用默认值 ,如有需要,也可以改为 。 本文根据仓库代码整理而成。并非
目录
要设定 DGX Spark 的 GPU 时钟上限,并在重启后继续应用相同的限制,可以使用 sparkLimiter。这是一个 Bash 脚本,它通过 nvidia-smi -lgc设置时钟范围,并注册一个在启动时重新应用设置的 systemd 服务。
以下是在一台 DGX Spark 上直接执行的方法。使用默认值 0,2200,如有需要,也可以改为 0,1800。
本文根据仓库代码整理而成。并非在实际 DGX Spark 上安装后测量性能、温度或功耗变化的结果。2200MHz 和 1800MHz 是设置示例,不代表推荐的性能值,也不保证能达到节能效果。
在 DGX Spark 的终端中执行。需要 NVIDIA 驱动、systemd 和 Bash,注册服务的账户必须具有 sudo 权限。脚本使用 /usr/bin/nvidia-smi 路径。
先确认 nvidia-smi 能否正常识别 GPU。如果驱动出现错误,应先解决驱动问题,再设置时钟限制。
如果没有 Git,请按照 Ubuntu/Debian 的方式安装。此软件包安装命令是操作系统的准备步骤,并非 sparkLimiter 的组成部分。
sudo apt-get update
sudo apt-get install -y gitgit clone https://github.com/MiaAI-Lab/sparkLimiter.git
cd sparkLimiter由于这是一个会以管理员权限更改系统设置的脚本,请在运行前检查其内容。
less spark-limiter.sh无需单独构建或安装 Python 软件包。直接使用仓库中的可执行文件即可。
若要为当前连接的 Spark 请求最高 2200MHz 的时钟范围,请运行以下命令。
./spark-limiter.sh --clocks 0,2200 localhost--clocks MIN,MAX:以 MHz 为单位的最低和最高时钟频率范围。0,2200:请求最低 0、最高 2200MHz。这并不意味着将 GPU 时钟始终固定在 2200MHz。localhost:应用于当前设备。本地应用无需 SSH。即使省略 --clocks,默认值仍为 0,2200。本文明确写出要应用的值,以便清楚地展示设置。
此命令会立即设置 GPU 时钟并注册系统服务。无需在整个脚本前加上
sudo。脚本会在需要时调用sudo。如果明确指定localhost或主机,脚本会跳过设备选择确认并直接应用,因此请先确认目标设备。
脚本会执行以下操作:
sudo /usr/bin/nvidia-smi -lgc 0,2200应用时钟范围。/etc/systemd/system/spark-gpu-clock-limit.service。因此,无需另行编写服务文件或运行 systemctl enable。这是一个用于控制 GPU 时钟的工具,并非用于设置 CPU 时钟或 GPU 功率限制值的工具。实际允许的时钟范围取决于设备和驱动程序是否支持。
以下命令也应在目标 DGX Spark 上运行。
systemctl is-enabled spark-gpu-clock-limit.service
systemctl status --no-pager spark-gpu-clock-limit.service
systemctl cat spark-gpu-clock-limit.service需要检查的项目如下:
is-enabled的结果为 enabled。Type=oneshot,因此成功应用后可能会显示为 active (exited)。ExecStart为 /usr/bin/nvidia-smi -lgc 0,2200。同时检查本次启动中的运行记录和 GPU 时钟信息。
sudo journalctl -b -u spark-gpu-clock-limit.service --no-pager
/usr/bin/nvidia-smi -q -d CLOCK若要在工作期间每隔 1 秒观察实际图形时钟,请使用以下命令。按 Ctrl+C退出。
/usr/bin/nvidia-smi \
--query-gpu=name,clocks.current.graphics \
--format=csv -l 1
Max Clocks并不是直接显示所设限制值的项目。 NVIDIA 文档中,这个值表示 GPU 的设计最大时钟频率。安装脚本的最后输出中也会显示clocks.max.gr,但该数字不必变成 2200 才算成功。应同时检查服务设置和运行记录。仅凭空闲状态下当前时钟显示较低,也不能证明限制已生效。
若要确认重启后也会自动应用,请先保存工作并结束正在运行的 GPU 任务,然后重启。重启会中断当前连接和任务,因此只应在合适的时间执行。
sudo systemctl reboot重新连接后,不要重新运行安装命令,而是检查上面的服务状态、配置和当前启动日志。这样才能确认限制是否在启动时应用,而不是手动应用的结果。
若要将最大值改为 1800MHz,请再次运行同一个脚本。
./spark-limiter.sh --clocks 0,1800 localhost服务文件也会替换为新值,并立即重启服务。此后重启时也会使用这个值。若要改回 2200MHz,请按如下方式运行。
./spark-limiter.sh --clocks 0,2200 localhost单独运行nvidia-smi -lgc只会更改当前时钟设置,不会更改保存在服务中的值。若要更改重启后仍会保留的值,请通过脚本进行修改。
sudo systemctl stop spark-gpu-clock-limit.service停止处于正常活动状态的服务时,会执行ExecStop中的nvidia-smi -rgc,将 GPU 时钟设置恢复为默认值。启动时自动运行仍会保持启用,因此下次启动时会再次应用限制。
若要重新应用,请按如下方式运行。
sudo systemctl restart spark-gpu-clock-limit.servicesudo systemctl disable --now spark-gpu-clock-limit.service
sudo /usr/bin/nvidia-smi -rgc第一条命令会禁用自动运行并停止当前服务。第二条命令会明确重置时钟。若只使用disable而省略--now,当前服务不会停止。
若要保留服务并重新启用,请按如下方式运行。
sudo systemctl enable --now spark-gpu-clock-limit.service在已下载的sparkLimiter目录中运行。
./spark-limiter.sh --uninstall localhost此操作会停止服务、禁用自动运行、重置 GPU 时钟并删除服务文件。不会删除已下载的仓库目录。
只运行nvidia-smi -rgc会保留服务。如果服务处于启用状态,限制会在下次启动时再次应用,因此若要永久解除限制,需要禁用自动运行或卸载服务。
如果只设置一台设备,使用前面的localhost方式即可。如果要管理多台 Spark,可以通过 SSH 指定目标。请将下面的ubuntu@spark1替换为实际账户和主机名。
./spark-limiter.sh --clocks 0,2200 ubuntu@spark1多台设备也可以用空格分隔后逐一列出。
./spark-limiter.sh --clocks 0,2200 ubuntu@spark1 ubuntu@spark2远程目标也需要/usr/bin/nvidia-smi、systemd 和sudo权限。首次连接时,请确认 SSH 主机密钥指纹确实属于正确的设备。状态检查命令应在各个目标设备上运行。
若要使用自动搜索,可以运行以下命令查看候选列表。搜索需要通过 SSH 密钥认证连接到目标设备。
./spark-limiter.sh --list直接指定主机的命令会跳过搜索和设备选择。确认设备无误时,明确指定目标更便于确认应用范围。
仓库更新后,默认值或运行方式可能会发生变化,因此请在运行前检查当前代码。