本文主要是介绍实时检测GPU使用率nvidia-smi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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=0while [ $idle_time -lt $total_duration ]; do# 获取所有 GPU 的利用率utilizations=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits)all_below_threshold=truefor utilization in $utilizations; doif [ "$utilization" -ge "$threshold" ]; thenall_below_threshold=falsebreakfidoneif [ "$all_below_threshold" = true ]; then# 如果所有 GPU 的利用率都低于阈值,则增加空闲时间计数idle_time=$((idle_time + ${interval/m/} * 60))else# 如果有一个 GPU 的利用率不低于阈值,则重置空闲时间计数idle_time=0fi# 等待下一个检测周期sleep $interval
done# 如果脚本执行到这里,说明所有 GPU 已经长时间未被使用
echo "All GPUs have been idle for $(($total_duration / 60)) minutes."
解释
-
获取所有 GPU 的利用率:
- 使用
nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits
获取所有 GPU 的利用率。
- 使用
-
检查所有 GPU 的利用率:
- 初始化
all_below_threshold
为true
。 - 循环遍历每一个 GPU 的利用率。如果有任何一个 GPU 的利用率不低于阈值,将
all_below_threshold
设置为false
并跳出循环。
- 初始化
-
根据检查结果更新空闲时间计数:
- 如果所有 GPU 的利用率都低于阈值,增加空闲时间计数。
- 如果有任何一个 GPU 的利用率不低于阈值,重置空闲时间计数。
-
等待时间:
- 使用
sleep $interval
命令在每次检测后暂停 10 分钟。
- 使用
通过这种方式,脚本将每隔 10 分钟检查一次所有 GPU 的利用率,并在所有 GPU 都空闲超过 1 小时后输出提示信息。
这篇关于实时检测GPU使用率nvidia-smi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!