Периодически проверяйте память графического процессора и запускайте скрипт, когда он освободится - PullRequest
1 голос
/ 09 марта 2020

В моей системе 4 графических процессора (Nvidia). Я хочу периодически проверять, является ли указанный графический процессор c свободным (например, если объем свободной памяти превышает 10 ГБ), и если он свободен, я хочу запустить скрипт python.

Я думаю, что могу использовать nvidia-smi, чтобы проверить, сколько свободной памяти у меня для данного графического процессора. У меня есть идея, но я не смог завершить сценарий полностью. Есть ли кто-нибудь, чтобы помочь мне?

Вот что я написал до сих пор:

check. 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

Я считаю, что код должен быть похож на фрагмент выше, однако я не мог выяснить детали.

1 Ответ

1 голос
/ 09 марта 2020

Используйте 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/'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...