You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量获取多台EC2实例的GPU空闲状态信息?

多EC2实例GPU空闲状态批量核查方案

你不用手动逐台SSH登录拉信息,从易到难有两个成熟的落地方案,不需要复杂开发经验就能搭:

方案1:零实例端部署,本地并行SSH脚本(10分钟就能搭完)

这个方案不需要在任何GPU实例上装额外软件,只要你本地能SSH免密连所有实例就行,比手动逐台登效率高10倍以上。

  • 先整理所有需要核查的实例SSH连接地址,存到本地gpu_instances.txt文件里,每行一个,比如ubuntu@ec2-1-2-3-4.cn-north-1.compute.amazonaws.com.cn,提前配置好SSH免密登录,避免每次输密码。
  • 新建本地执行脚本check_gpu.sh,内容如下,脚本会并发向所有实例发起SSH连接,远程执行nvidia-smi拉取指标,自动判断空闲GPU后汇总输出:
#!/bin/bash
INSTANCE_LIST="./gpu_instances.txt"
# 空闲判定规则:显存占用<100MiB、GPU利用率<5%即判定为空闲,可根据团队习惯调整阈值
MEM_THRESHOLD=100
UTIL_THRESHOLD=5

echo "===== GPU实例空闲状态核查 ====="
echo "核查时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "------------------------------"

while read -r conn_str; do
  # 后台并发执行单台实例的查询,避免串行等待
  (
    # 连接超时设3秒,不通直接跳过,不卡整体流程
    gpu_raw=$(ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no "$conn_str" \
      "nvidia-smi --query-gpu=index,memory.used,utilization.gpu,name --format=csv,noheader,nounits" 2>/dev/null)
    if [ -z "$gpu_raw" ]; then
      echo "[异常] $conn_str : 连接失败或nvidia-smi执行异常"
      exit
    fi

    total=0
    idle=0
    detail=""
    while IFS=',' read -r idx mem util name; do
      total=$((total+1))
      mem=$(echo $mem | xargs)
      util=$(echo $util | xargs)
      name=$(echo $name | xargs)
      if [ $mem -lt $MEM_THRESHOLD ] && [ $util -lt $UTIL_THRESHOLD ]; then
        idle=$((idle+1))
        detail+="  GPU$idx($name): 空闲 | 显存已用${mem}MiB | 利用率${util}%\n"
      else
        detail+="  GPU$idx($name): 占用 | 显存已用${mem}MiB | 利用率${util}%\n"
      fi
    done <<< "$gpu_raw"

    echo -e "[$conn_str] 总GPU数:$total | 空闲GPU数:$idle"
    echo -e "$detail"
  ) &
done < "$INSTANCE_LIST"
# 等待所有并发查询执行完成
wait
echo "===== 核查结束 ====="
  • 给脚本加执行权限chmod +x check_gpu.sh,直接运行就能出结果,10台左右的实例3-5秒就能跑完所有查询。

注意判断GPU空闲必须同时看显存占用和利用率:很多场景下用户占了显存但没跑计算任务,GPU利用率显示0,实际是没法用的,只看利用率会误判。

方案2:轻量集中上报方案(适合多人团队长期用)

如果团队所有人都有查空闲GPU的需求,不用每个人都在本地配脚本,可以搭个极简的状态上报服务,打开网页就能看到所有实例的实时状态:

  • 选一台团队内所有人都能访问的机器(哪怕是其中一台GPU实例也行),跑个极简的HTTP服务,两个核心功能:一是接收各实例上报的GPU状态,把最近2分钟的上报数据存在内存里(不用搭数据库);二是提供一个web页面,把所有实例的GPU状态渲染成表格,空闲GPU标绿、占用标红,一眼就能定位可用资源。
  • 在每台GPU实例上配一条crontab定时任务,每分钟执行一次nvidia-smi提取指标,POST给服务端的上报接口,带上本机IP、主机名信息就行,定时任务配置参考:
* * * * * /usr/bin/nvidia-smi --query-gpu=index,memory.used,utilization.gpu,name --format=csv,noheader,nounits | curl -X POST -d @- http://<服务端地址>/report?host=$(hostname)

这个方案搭完之后,所有人查GPU不用连任何实例,打开浏览器访问对应页面就行,维护成本极低。

如果团队已经搭了Prometheus这类监控体系,直接在GPU实例上装nvidia-smi exporter配个Grafana看板也能实现,就是部署成本比上面两个方案高一点,适合已经有现成监控的团队用。

内容的提问来源于stack exchange,提问作者Idioteche_fish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:27:30