在 Linux 的 GPU 上,如何在启动另一个进程时终止另一个进程,然后在另一个进程完成时重新启动该进程?

在 Linux 的 GPU 上,如何在启动另一个进程时终止另一个进程,然后在另一个进程完成时重新启动该进程?

我有一台笔记本电脑,通常运行 GPU 加密货币挖掘。我希望笔记本电脑在启动任何密集的深度学习进程时终止此加密货币挖掘。因此,我并不是想降低 GPU 加密货币挖掘的优先级;我实际上是想在启动某些明显密集的 GPU 进程(例如使用 TensorFlow)时终止该进程。

如何实现?我应该运行一个守护进程来监视特定进程吗?感觉这可能是 Linux 中已经提供的功能。

答案1

我建议使用 systemd 单元启动并维持一个脚本,定期检查你的机器学习过程。

将以下脚本放入/usr/local/bin并使其可执行chmod +x

脚本:
#!/bin/bash

#replace with your process names
plearning="tensorflow"
pmining="mining"

sleepint="30" #interval in seconds between checks

while true;
do
    if pgrep -x "$plearning" > /dev/null
    then
        killall -q "$pmining"
        logger "miner killed"

    fi
    sleep $sleepint
done

/etc/systemd/system例如,在中创建一个 systemd 单元miningswitch.service

单元:
[Unit]
Description=test

[Service]
ExecStart=/usr/local/bin/miningswitch
ExecStop=killall miningswitch

Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

使用以下命令启动并启用服务systemctl enable --now miningswitch.service

答案2

由于 GPU 依赖于 CPU 进程和硬盘来存储数据,因此你可以nice同时 使用伊奥尼采 降低挖矿过程的 CPU 和 I/O 优先级。

否则,您可以创建一个cron定期运行的任务,以检查深度学习过程是否存在并终止矿工。

这个任务可以简单到:

#!/bin/bash
if pgrep -x "deep-learning-process" > /dev/null
then
    kill "mining-process"
fi

相关内容