• Linux——监控GPU集群显存并自动运行python训练脚本


    可喜可贺,由于有时候模型的实验时间刚好结束在半夜,同时此时GPU闲置会造成极大的资源浪费,同时会降低实验的效率,因此!监控GPU显存并自动运行python训练脚本便是刚需神器!!!

    在借鉴了网上各路大佬的博文之后,整理了一般更适用于自身情况的shell,并以此分享记录~
    参考文章:

    依赖包

    pip install gpustat
    
    • 1

    主脚本程序

    • 功能:
      • GPU显存实时监控;
      • 满足指定显存条件自动运行指定命令;
    • 使用场景:
      • 我的使用场景是8卡的GPU集群,需求是等当前8卡程序执行完后,立即开始执行新的脚本程序。

    gpu_check.sh

    while true
    do
      # 改动项1 用来查看你前一个在执行的训练是否还存在,这里为(train.py)
      count=$(ps -ef | grep python | grep -c train.py)	# 
      echo "$count train.py are running."
      if [ $count -lt 8 ]  # 改动项2, 根据之前被占用的显卡数调整
        then
         # 改动项3 查询第1块gpu的容量2p 第2块3p  第3块4p  第四块5p 依次类推
         # 这里只需要检测0,1GPU的显存情况便可以知道上一个程序是否执行完
         # 这里的11代指gpustat第11个单元的内容,需要自己进行更改!!!每个人不一定一样,例如:
         
         # 我在8卡集群上就为9,则命令为 gpustat | awk '{print $9}' | sed -n '2p'才能打印出当前显存
         # 我在本地单卡机器上为11,则命令为 gpustat | awk '{print $11}' | sed -n '2p'才能打印出当前显存
         stat1=$(gpustat | awk '{print $9}' | sed -n '2p')	# 2p代表 GPU 0	
         stat2=$(gpustat | awk '{print $9}' | sed -n '3p') # 3p代表 GPU 1
         stat_arr=($stat1 $stat2)
         gpu_available=0
         gpu_available_index_arr=()
         # 得到空闲GPU的数量和对应的序号
         for i in ${!stat_arr[@]}
         do
           # 如果显存占用小于100M,继续
           if [ "${stat_arr[$i]}" -lt 5000 ]
           then
             gpu_available=$[gpu_available+1]
             gpu_available_index_arr[${#gpu_available_index_arr[@]}]=$i
           fi
         done
         echo '-可用GPU数:'$gpu_available', 第'${gpu_available_index_arr[@]}'块GPU可用'
         # 如果GPU数大于指定数量,取指定数量GPU开始训练
         if [ $gpu_available -ge 2 ]
         then
           echo 'start training.'
           # 需要执行的python shell脚本
           sh ./run_code.sh
           break # 防止下一次循环又重复运行上一行命令
         fi
      fi
      echo "waiting for training..."
      sleep 300	# 每300s执行一次,对于一般实验来说,每5分钟执行一次即可,可以自行调整
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    python命令脚本(示例)

    • 功能:执行具体命令。

    run_code.sh

    bash tools/dist_train.sh projects/configs/maptr/maptr_tiny_r50_24e.py 2
    
    • 1

    实验证明可行性

    • 当GPU空闲时,运行bash gpu_check.sh

    在这里插入图片描述

    • 程序直接开始执行:

    在这里插入图片描述

    • 此时使用gpustat命令查看GPU显存:

    在这里插入图片描述

    • 重新开一个新的终端运行脚本:(一直处于等待状态直到GPU占用满足条件才会执行)

    在这里插入图片描述

  • 相关阅读:
    【英语:基础高阶_经典外刊阅读】L7.阅读能力整合—长篇实战训练
    [附源码]计算机毕业设计JAVA公益劳动招募管理系统
    【高性能计算】HPC概述
    【数据结构和算法】--N叉树中,返回某些目标节点到根节点的所有路径
    《FFmpeg Basics》中文版-10-为视频添加文字
    python技术面试题(其三)
    Vite: 双构建引擎- Esbuild和Rollup
    教你如何使用Nodejs搭建HTTP web服务器并发布上线公网
    ES6 入门教程 29 ArrayBuffer 29.3 复合视图 & 29.4 DataView 视图 & 29.5 二进制数组的应用
    【JavaEE初阶】 HTML基础详解
  • 原文地址:https://blog.csdn.net/qq_45779334/article/details/127826284