1. 环境配置
下载安装 gpustat
pip install gpustat
2. 脚本编写
假设我有一段需要运行的python代码如下:
CUDA_VISIBLE_DEVICES=0,1 python -m torch.distributed.launch --master_port 10025 --nproc_per_node=2 tools/relation_train_net.py --config-file "configs/e2e_relation_X_101_32_8_FPN_1x.yaml" MODEL.ROI_RELATION_HEAD.USE_GT_BOX True MODEL.ROI_RELATION_HEAD.USE_GT_OBJECT_LABEL True MODEL.ROI_RELATION_HEAD.PREDICTOR MotifPredictor SOLVER.IMS_PER_BATCH 12 TEST.IMS_PER_BATCH 2 DTYPE "float16" SOLVER.MAX_ITER 50000 SOLVER.VAL_PERIOD 2000 SOLVER.CHECKPOINT_PERIOD 2000 GLOVE_DIR /home/kaihua/glove MODEL.PRETRAINED_DETECTOR_CKPT /home/kaihua/checkpoints/pretrained_faster_rcnn/model_final.pth OUTPUT_DIR /home/kaihua/checkpoints/motif-precls-exmp
现在我需要把它放到一个shell文件中,方便等下程序传入空闲的GPU序号。
新建一个shell脚本,例子如下:
vi run_code.sh
将我要运行的代码复制到这个文件中,这里需要做一点修改,将代码中的CUDA_VISIBLE_DEVICES=0,1
改为CUDA_VISIBLE_DEVICES=$1,$2
,这样等下传入run_code.sh的前两个GPU序号就会被获取到(不同数量的GPU需要灵活处理,以此类推很容易吧?)。
执行:wq
保存退出。
再新建一个shell脚本,作为GPU监控脚本,例子如下:
vi my_gpu_shell.sh
将下面的代码复制到这个文件中:
while true
do
# 改动项1 relation_train_net 这里改成你命令中包含的字符串
# 比如我要运行的代码如下:
# CUDA_VISIBLE_DEVICES=0,1 python ... --nproc_per_node=2 ./relation_train_net.py ...