教程:构建 AI 驱动的 GPU 集群优化器

发布: (2026年4月18日 GMT+8 03:00)
11 分钟阅读
原文: Dev.to

Source: Dev.to

抱歉,您提供的消息中只有来源链接,没有需要翻译的正文内容。请提供要翻译的文本,我将为您翻译成简体中文。

Introduction

在 DigitalOcean Gradient AI 平台上部署一个无服务器的 LangGraph 代理,使用自然语言查询来监控您的 GPU 集群。该代理通过 Prometheus 风格的端口 9400 端点从 GPU Droplets 抓取实时的 NVIDIA DCGM 指标(温度、功耗、显存、引擎利用率),检测空闲和利用率不足的 GPU,并且可以触发诸如自动关机等操作。通过用主动的 AI 助手取代被动的仪表盘监控,从而降低云成本。

为什么 GPU 机群管理很困难

  • 成本影响: 单个闲置的 GPU Droplet 若整夜保持运行,可能会在月账单上增加数百美元。
  • 传统仪表盘: 显示原始指标,但仍需人工判断机器是“在工作”还是“浪费金钱”。

本教程将指导您使用 DigitalOcean Gradient AI 平台和代理开发套件(ADK)构建一个 AI 驱动的 GPU 机群优化器。完成后,您将能够:

  • 部署一个无服务器、自然语言的 AI 代理,实时审计 GPU 基础设施。
  • 抓取 NVIDIA DCGM 指标(温度、功耗、显存使用、引擎利用率)。
  • 在闲置资源导致云账单膨胀之前进行标记。
  • 分叉并自定义蓝图(调整阈值、添加工具、更改代理的角色设定)。

前置条件

  • DigitalOcean 账户,至少拥有一个正在运行的 GPU Droplet。
  • DigitalOcean API 令牌(具备读取权限和 GenAI 范围的个人访问令牌)。
  • Gradient 模型访问密钥(可在 Gradient AI 仪表板生成)。
  • Python 3.12(推荐使用,以获得最新的 LangGraph 和 asyncio 功能)。
  • 熟悉 Python、REST API 和 Linux 命令行基础。

Source:

NVIDIA DCGM 指标

NVIDIA 数据中心 GPU 管理器(DCGM)通过 9400 端口上的 Prometheus 兼容导出器公开硬件遥测数据。

Metric测量内容重要性说明
DCGM_FI_DEV_GPU_TEMPGPU 芯片温度(摄氏度)高温表明 GPU 正在进行活跃计算。
DCGM_FI_DEV_POWER_USAGE当前功耗(瓦特)空闲状态下 GPU 的功耗会显著降低。
DCGM_FI_DEV_FB_USED已使用的帧缓冲(显存)容量显存为空表示没有加载模型。
DCGM_FI_DEV_GPU_UTILGPU 引擎利用率(百分比)直接指示计算工作负载的大小。

您可以直接查询这些指标:

curl -s http://<droplet_ip>:9400/metrics \
  | grep -E "DCGM_FI_DEV_GPU_TEMP|DCGM_FI_DEV_POWER_USAGE|DCGM_FI_DEV_FB_USED|DCGM_FI_DEV_GPU_UTIL"

如果某节点上没有可用的 DCGM,代理会回退到标准的 CPU/RAM 指标并报告 “DCGM Missing”。

仓库设置

从基础仓库开始,而不是从头编写所有内容。

git clone https://github.com/dosraashid/do-adk-gpu-monitor
cd do-adk-gpu-monitor
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

配置密钥

在项目根目录创建 .env 文件:

DIGITALOCEAN_API_TOKEN="your_do_token"
GRADIENT_MODEL_ACCESS_KEY="your_gradient_key"

安全提示: 永不将 .env 文件提交到版本控制;仓库的 .gitignore 已经排除该文件。

数据流概览

  1. User Prompt – 发送到 /run 端点。
  2. LangGraph State – 会话记忆(thread_id)由 MemorySaver 管理,以支持多轮交互。
  3. Tool Execution – 大语言模型决定调用 @tool 函数,例如 analyze_gpu_fleet()
  4. Parallel Scrapinganalyzer.py 使用 ThreadPoolExecutor 并发查询 DigitalOcean API 以及每个 Droplet 的 DCGM 端点。
  5. Omniscient Payload – 所有原始数据(温度、功耗、VRAM、RAM、CPU、成本)被打包成结构化的 JSON 字典供 LLM 使用。
  6. Synthesis – LLM 读取 JSON 并以自然语言返回节点名称、成本和建议。

欲了解更多关于使用 LangGraph 的有状态 AI 代理,请参阅 Getting Started with Agentic AI Using LangGraph 教程。

定制蓝图

代理角色(config.py

编辑 AGENT_SYSTEM_PROMPT 以更改 AI 的沟通方式。

  • 删除表情符号,并请求以原始项目符号形式输出,适用于技术 DevOps 助手。
  • 使用面向管理的语气撰写成本汇总报告。

阈值

默认的空闲检测使用以下字典(以代码块形式便于复制粘贴):

THRESHOLDS = {
    "gpu": {
        "max_temp_c": 82.0,
        "max_util_percent": 95.0,
        "max_vram_percent": 95.0,

        "idle_util_percent": 2.0,
        "idle_vram_percent": 5.0,

        "optimized_util_percent": 40.0,
        "optimized_vram_percent": 50.0,
    },
    "system": {
        "idle_cpu_percent": 3.0,
        "idle_ram_percent": 15.0,
        "idle_load_15": 0.5,

        "starved_cpu_percent": 85.0,
        "starved_ram_percent": 90.0,

        "optimized_cpu_percent": 40.0,
        "optimized_ram_percent": 50.0,
    },
}

根据工作负载基准调整数值(例如,如果你的推理服务器通常在 8 % GPU 利用率时空闲,则将 idle_util_percent 设置为 10.0)。

Droplet 过滤

默认情况下,仅扫描 size_slug 中包含 "gpu" 的 Droplet:

target_droplets = [d for d in all_droplets if "gpu" in d.get("size_slug", "").lower()]
  • "gpu" 改为 "c-" 以筛选 CPU‑优化的 Droplet。
  • 完全移除过滤条件即可扫描所有 Droplet。

添加新指标

如果你安装了 Prometheus Node Exporter(端口 9100)并想加入磁盘空间指标:

  1. 更新 metrics.py 以抓取磁盘指标。
  2. analyzer.py 中扩展返回字典:
return {
    "droplet_id": droplet_id,
    "gpu_temp": temp_val,
    "gpu_power": power_val,
    "vram_used": vram_val,
    "disk_space_free_gb": disk_val,  # New metric
}

写入权限工具(例如,关机)

main.py 中添加新的 @tool 函数:

@tool
def power_off_droplet(droplet_id: str) -> str:
    """Power off a Droplet by ID. Use only when the user explicitly asks to stop an idle node."""
    import requests, os

    token = os.getenv("DIGITALOCEAN_API_TOKEN")
    response = requests.post(
        f"https://api.digitalocean.com/v2/droplets/{droplet_id}/actions",
        headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
        json={"type": "power_off"},
    )
    if response.status_code == 201:
        return f"Successfully sent power‑off command to Droplet {droplet_id}."
    return f"Failed to power off Droplet {droplet_id}: {response.status_code} {response.text}"

将新工具绑定到 LLM:

llm_with_tools = llm.bind_tools([analyze_gpu_fleet, power_off_droplet])

警告: 授予写入权限需要严格的防护措施——建议使用确认提示、标签限制以及审计日志。

本地运行

启动开发服务器:

gradient agent run

在另一个终端,模拟请求:

curl -X POST http://localhost:8080/run \
     -H "Content-Type: application/json" \
     -d '{
           "prompt": "Give me a full diagnostic on my GPU nodes including temperature and power.",
           "thread_id": "audit-session-1"
         }'

后续示例(相同 thread_id):

curl -X POST http://localhost:8080/run \
     -H "Content-Type: application/json" \
     -d '{
           "prompt": "Which of those nodes was the most expensive?",
           "thread_id": "audit-session-1"
         }'

更改 thread_id 将启动新的对话,演示作用域内记忆。

部署到 DigitalOcean Gradient

gradient agent deploy

您将收到一个公共端点 URL,可与 Slack 机器人、内部仪表板、CI/CD 流水线或任何 HTTP 客户端集成。Gradient 平台负责并发用户的扩展。

比较:传统仪表盘 vs. AI 代理

因素静态仪表盘 (Grafana + Prometheus)AI 代理(此蓝图)
设置复杂度中等(需要 Prometheus 服务器、Grafana、DCGM exporter)低(克隆仓库、设置环境变量、部署)
实时告警基于规则的告警,使用固定阈值自然语言查询,具备自适应推理
多指标关联手动可视化比较自动 LLM 关联温度、功耗、显存、成本
可操作性只读;需要额外的自动化通过 @tool 可扩展,直接进行 API 操作
对话式后续不支持内置于 LangGraph MemorySaverthread_id 范围
适用场景拥有专职 SRE/DevOps 人员并进行历史趋势分析的大型团队需要快速、对话式 GPU 审计且无需完整监控栈的中小团队

对于约 20 台 GPU Droplets 以下的机群,AI 代理消除了完整监控栈的开销,同时仍能提供可操作的洞察。对于更大的机群,使用两种方案可能更有益。

架构考虑

  • 上下文智能: MemorySaver 提供对话历史,使得在不重新扫描整个集群的情况下进行深入提问。
  • 并行处理: ThreadPoolExecutor 并发扫描数十个 Droplets,防止 LLM 超时。
  • 成本论证: 单个闲置的每月 500 美元 GPU 实例的节省足以证明代理推理成本的合理性。
  • 优雅降级: 如果端口 9400 无法访问,代理会报告 “DCGM Missing”,并回退到 CPU/RAM 指标。
  • 安全性: 除非添加写入工具,否则使用只读 API 令牌;仔细限定权限范围并实现审计日志。

好处与使用场景

  1. 捕获遗忘的资源: 识别在实验或训练任务完成后仍在运行的 GPU Droplets。
  2. 噪声降低: 直接查询 GPU 引擎和显存(VRAM)使用率,避免误导性的低 CPU 指标。
  3. 统一工作流: 一个自然语言查询即可取代多个 UI 操作(DigitalOcean 控制面板、Grafana、架构图)。
  4. 可扩展自动化: 可添加工具,从对话界面直接关闭、调整大小或扩展资源。

下一步与资源

  • DigitalOcean Gradient AI Platform Documentation – 部署和管理 AI 代理的完整参考文档。
  • How to Build Agents Using ADK – 定制代理的逐步指南。
  • Getting Started with Agentic AI Using LangGraph – 状态化、多步骤 AI 代理的基础知识。
  • Stable Diffusion on DigitalOcean GPU Droplets – GPU 加速 AI 工作负载的示例。
  • Scaling Gradient with GPU Droplets and Networking – 使用 GPU Droplets、负载均衡器和 VPC 网络构建生产级 GenAI 部署。
0 浏览
Back to Blog

相关文章

阅读更多 »

地球日的活力

我构建的 History 按日历天在浏览器中保存;每个部分旁边的照片是真实的捆绑图像。可选的 Gemini API 路由可以添加温暖的教练……