穷人的烦恼
是不是每当你准备训练时就发现GPU被其他小伙伴占用了呢?
+-------------------------------+----------------------+----------------------+
| 2 NVIDIA GeForce ... Off | 00000000:5E:00.0 Off | N/A |
| 69% 61C P2 306W / 350W | 11181MiB / 24268MiB | 68% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 3 NVIDIA GeForce ... Off | 00000000:86:00.0 Off | N/A |
| 70% 58C P2 158W / 350W | 13835MiB / 24268MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
当然这种情况最简单的方法就是把别人的进程kill掉啦,或者让老板再买几块,咳咳。
感觉还是第一种比较现实,但是做人还是要有节操,只能等他训练完我们再干啦。
为了在他训练完后及时点燃我们的丹炉,需要一个自动化的脚本,在显卡空闲后立马开始我们的训练。
解决方案
实时监控GPU占用情况,当被监控的GPU Mem use降低到某一值以下,立马开始我们的训练。
下面上脚本 wait_for_train.sh:
#!/bin/bash
GPU_ID=$1
MEM_USED=999
while [[ $MEM_USED -gt 11 ]];
do
MEM_USED=$(nvidia-smi --id=$GPU_ID --query-gpu='memory.used' --format=csv,noheader | awk '{print $1}')
echo "GPU"$GPU_ID $MEM_USED"MiB"
sleep 60s
done
export CUDA_VISIBLE_DEVICES=$1
python3 train.py ******
这样我们只用在终端运行:
wait_for_train.sh 3
这样在gpu3 空闲后,我们的丹炉就能自行启动了。