首页 > 解决方案 > 定期检查 gpu 内存并在空闲时运行脚本

问题描述

我的系统中有 4 个 GPU (Nvidia)。我想定期检查一个特定的 GPU 是否空闲(例如,如果空闲内存超过 10GB),如果它是空闲的,我想运行一个 python 脚本。

我想我可以使用 nvidia-smi 来检查给定 gpu 有多少可用内存。我有一个想法,但我无法完全完成脚本。有人帮我吗?

这是我到目前为止所写的:

检查.sh

id=$1
free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $id)
echo $free_mem # this prints out: memory.free [MiB] 1954 MiB
while [ $free_mem -lt 10000 ]
    free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $id)
    sleep 5

CUDA_VISIBLE_DEVICES=$id python run_python_file.py

我相信代码应该类似于上面的代码片段,但是我找不到详细信息。

标签: pythonbash

解决方案


用于grep -Eo [0-9]+匹配一个或多个连续数字:

id=$1
free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $id | grep -Eo [0-9]+)

while [ $free_mem -lt 10000 ]; do
    free_mem=$(nvidia-smi --query-gpu=memory.free --format=csv -i $id | grep -Eo [0-9]+)
    sleep 5
done

CUDA_VISIBLE_DEVICES=$id python run_python_file.py

grep 的替代方法是使用POSIX 正则表达式: sed 's/[^[:digit:]]*\([[:digit:]]\+\).*/\1/'


推荐阅读