实时检测GPU使用率nvidia-smi

发布于:2024-05-24 ⋅ 阅读:(164) ⋅ 点赞:(0)

nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits

为了判断所有 GPU 的利用率都小于阈值,可以循环检查每一个 GPU 的利用率。如果所有 GPU 的利用率都低于阈值,则增加空闲时间计数;否则,重置空闲时间计数。

下面是一个改进后的脚本,判断所有 GPU 的利用率都小于阈值:

#!/bin/bash

# 设置检测的时间间隔(分钟)
interval=10m

# 设置检测的总时长(秒)
total_duration=$((60 * 60))  # 1 小时

# 设置利用率阈值(%)
threshold=5

# 初始化变量
idle_time=0

while [ $idle_time -lt $total_duration ]; do
  # 获取所有 GPU 的利用率
  utilizations=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits)

  all_below_threshold=true
  for utilization in $utilizations; do
    if [ "$utilization" -ge "$threshold" ]; then
      all_below_threshold=false
      break
    fi
  done

  if [ "$all_below_threshold" = true ]; then
    # 如果所有 GPU 的利用率都低于阈值,则增加空闲时间计数
    idle_time=$((idle_time + ${interval/m/} * 60))
  else
    # 如果有一个 GPU 的利用率不低于阈值,则重置空闲时间计数
    idle_time=0
  fi

  # 等待下一个检测周期
  sleep $interval
done

# 如果脚本执行到这里,说明所有 GPU 已经长时间未被使用
echo "All GPUs have been idle for $(($total_duration / 60)) minutes."

解释

  1. 获取所有 GPU 的利用率

    • 使用 nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 获取所有 GPU 的利用率。
  2. 检查所有 GPU 的利用率

    • 初始化 all_below_thresholdtrue
    • 循环遍历每一个 GPU 的利用率。如果有任何一个 GPU 的利用率不低于阈值,将 all_below_threshold 设置为 false 并跳出循环。
  3. 根据检查结果更新空闲时间计数

    • 如果所有 GPU 的利用率都低于阈值,增加空闲时间计数。
    • 如果有任何一个 GPU 的利用率不低于阈值,重置空闲时间计数。
  4. 等待时间

    • 使用 sleep $interval 命令在每次检测后暂停 10 分钟。

通过这种方式,脚本将每隔 10 分钟检查一次所有 GPU 的利用率,并在所有 GPU 都空闲超过 1 小时后输出提示信息。


网站公告

今日签到

点亮在社区的每一天
去签到