Skip to content

AutoDL 自动化运维系统

概述

本文档描述 AutoDL GPU 服务器自动化运维系统的设计、实现和使用方法。该系统旨在实现:

  • 多服务器配置管理
  • 自动开关机控制
  • 健康检查和监控
  • 智能任务调度
  • 成本优化(自动扩缩容)
  • 告警通知

系统架构

┌─────────────────────────────────────────────────────────────┐
│                      PyBridge 任务系统                        │
│  (视频合成、超分、插帧等任务)                                   │
└─────────────────┬───────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│              ServerManager (服务器管理模块)                    │
│  - 服务器选择  - 健康检查  - 开关机控制  - 状态同步           │
└─────────────────┬───────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                   AutoDL API                                 │
│  - 开关机  - 状态查询  - 资源监控  - 余额查询                 │
└─────────────────┬───────────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────┐
│                GPU 服务器集群 (AutoDL)                        │
│  - autodl-gpu-1 (905机)  - autodl-gpu-2 (A10机)              │
│  - maa-cpu (生产环境)                                         │
└──────────────────────────────────────────────────────────────┘

核心组件

1. servers.json - 服务器配置文件

路径:/Users/mzy/docker/dnmp/www/stooland/pybridge/servers.json

配置结构:

json
{
  "servers": [
    {
      "id": "autodl-gpu-1",
      "name": "AutoDL GPU服务器 #1 (905机)",
      "autodl_uuid": "12f34797da-3ee966a9",
      "priority": 1,
      "ssh": {
        "host": "connect.westd.seetacloud.com",
        "port": 41092,
        "user": "root",
        "password": "H4knio3lKhkU"
      },
      "services": {
        "pybridge": {
          "port": 6008,
          "public_url": "https://uu575958-97da-3ee966a9.westd.seetacloud.com:8443",
          "startup_command": "cd /root/autodl-tmp/stooland/pybridge && ./start.sh"
        },
        "comfyui": {
          "port": 6006,
          "public_url": "https://uu575958-97da-3ee966a9.westd.seetacloud.com:6006"
        }
      },
      "resources": {
        "cpu": {
          "cores": 32,
          "model": "13th Gen Intel(R) Core(TM) i9-13900K"
        },
        "memory": {
          "total_gb": 251.6
        },
        "gpu": {
          "count": 6,
          "model": "NVIDIA RTX PRO 6000",
          "vram_gb": 97,
          "gpu_idle_num": 5
        }
      },
      "pricing": {
        "price_per_hour": 13.99,
        "credit_balance": 6.23
      }
    }
  ]
}

字段说明:

  • id: 服务器唯一标识
  • autodl_uuid: AutoDL 实例 UUID(用于 API 调用)
  • priority: 优先级(1-100,数字越小优先级越高)
  • ssh: SSH 连接信息
  • services: 部署的服务列表
  • resources: 服务器资源配置
  • pricing: 价格和余额信息

2. ServerManager - 服务器管理模块

路径:/Users/mzy/docker/dnmp/www/stooland/pybridge/src/utils/server_manager.py

主要功能:

2.1 服务器控制

python
# 启动服务器
manager.start_server("autodl-gpu-1")

# 关闭服务器
manager.stop_server("autodl-gpu-1")

# 重启服务器
manager.restart_server("autodl-gpu-1")

2.2 健康检查

python
# 检查服务器健康状态
health_status = manager.check_health("autodl-gpu-1")
# 返回:
# {
#   "ssh": True/False,
#   "pybridge": True/False,
#   "comfyui": True/False,
#   "gpu": {
#     "available": True/False,
#     "idle_count": 5,
#     "vram_free_gb": 97
#   }
# }

2.3 智能服务器选择

python
# 选择最佳服务器执行任务
best_server = manager.select_best_server(
    service="pybridge",     # 服务类型
    require_gpu=True        # 是否需要 GPU
)
# 返回服务器 ID,如 "autodl-gpu-1"

选择算法:

  1. 过滤可用服务器(已启动 + 健康检查通过)
  2. 按优先级排序
  3. 按负载排序(CPU/内存/GPU 使用率)
  4. 返回优先级最高、负载最低的服务器

2.4 自动扩缩容

python
# 根据任务队列长度自动开关机
manager.auto_scale(
    task_queue_length=10,   # 当前任务队列长度
    idle_minutes=30         # 服务器空闲时长(分钟)
)

扩缩容策略:

  • 扩容(启动服务器)

    • 任务队列长度 > 5
    • 所有运行中的服务器 CPU 使用率 > 80%
    • 按优先级启动下一台服务器
  • 缩容(关闭服务器)

    • 服务器空闲时间 > 30 分钟
    • 任务队列长度 < 2
    • 关闭优先级最低的服务器

2.5 成本监控

python
# 查询账户余额
balance = manager.check_balance()
# 返回余额(元)

# 余额告警
if balance < 10:
    manager.send_alert(f"AutoDL 余额不足:{balance}元")

AutoDL API 集成

API 认证

需要在环境变量中配置 AutoDL API Key:

bash
# .env 文件
AUTODL_API_KEY=your_autodl_api_key_here

获取方法:登录 AutoDL 控制台 → 个人中心 → API 密钥

API 接口

1. 启动实例

bash
POST https://www.autodl.com/api/v1/instance/{uuid}/start
Headers:
  Authorization: Bearer {AUTODL_API_KEY}

2. 关闭实例

bash
POST https://www.autodl.com/api/v1/instance/{uuid}/stop
Headers:
  Authorization: Bearer {AUTODL_API_KEY}

3. 查询实例状态

bash
GET https://www.autodl.com/api/v1/instance/{uuid}
Headers:
  Authorization: Bearer {AUTODL_API_KEY}

4. 查询账户余额

bash
GET https://www.autodl.com/api/v1/account/balance
Headers:
  Authorization: Bearer {AUTODL_API_KEY}

使用场景

场景 1:视频合成任务调度

python
from src.utils.server_manager import ServerManager

# 初始化管理器
manager = ServerManager()

# 选择最佳服务器
server_id = manager.select_best_server(
    service="pybridge",
    require_gpu=False  # 视频合成不需要 GPU
)

# 获取服务器配置
server = manager.get_server(server_id)

# 提交任务到选定的服务器
pybridge_url = server['services']['pybridge']['public_url']
response = requests.post(
    f"{pybridge_url}/compose",
    json=task_data
)

场景 2:视频超分任务(GPU 密集型)

python
# 选择 GPU 服务器
server_id = manager.select_best_server(
    service="pybridge",
    require_gpu=True  # 超分需要 GPU
)

# 检查 GPU 可用性
health = manager.check_health(server_id)
if not health['gpu']['available']:
    # GPU 不可用,尝试启动备用服务器
    backup_server = manager.select_best_server(
        service="pybridge",
        require_gpu=True,
        exclude=[server_id]
    )
    if backup_server:
        manager.start_server(backup_server)
        server_id = backup_server

# 提交超分任务
server = manager.get_server(server_id)
pybridge_url = server['services']['pybridge']['public_url']
response = requests.post(
    f"{pybridge_url}/enhance",
    json=enhancement_data
)

场景 3:ComfyUI 工作流

python
# 选择 ComfyUI 服务器
server_id = manager.select_best_server(
    service="comfyui",
    require_gpu=True
)

server = manager.get_server(server_id)
comfyui_url = server['services']['comfyui']['public_url']

# 提交工作流
response = requests.post(
    f"{comfyui_url}/prompt",
    json=workflow_data
)

定时任务配置

1. 服务器状态同步(每 5 分钟)

bash
# crontab -e
*/5 * * * * cd /path/to/pybridge && python -c "from src.utils.server_manager import ServerManager; ServerManager().sync_server_status()"

2. 自动扩缩容检查(每 10 分钟)

bash
# crontab -e
*/10 * * * * cd /path/to/pybridge && python -c "from src.utils.server_manager import ServerManager; from src.service.fastapi_app import jobs; ServerManager().auto_scale(len(jobs), 0)"

3. 余额告警(每天 9:00)

bash
# crontab -e
0 9 * * * cd /path/to/pybridge && python -c "from src.utils.server_manager import ServerManager; m = ServerManager(); b = m.check_balance(); m.send_alert(f'AutoDL 余额:{b}元') if b < 50 else None"

告警通知

1. 余额不足告警

  • 触发条件:账户余额 < 50 元
  • 通知方式:微信/邮件/钉钉
  • 通知频率:每天一次

2. 租期到期提醒

  • 触发条件:距离租期到期 < 3 天
  • 通知方式:微信/邮件/钉钉
  • 通知频率:每天两次(9:00, 18:00)

3. 服务健康告警

  • 触发条件:服务健康检查失败
  • 通知方式:微信/邮件/钉钉
  • 通知频率:实时

监控指标

服务器级别

  • CPU 使用率
  • 内存使用率
  • GPU 使用率
  • 磁盘使用率
  • 网络流量

任务级别

  • 任务队列长度
  • 任务成功率
  • 平均执行时间
  • 错误率

成本级别

  • 每日费用
  • 账户余额
  • 预计可用天数
  • 成本/任务比

成本优化建议

1. 空闲时关机

  • 服务器空闲 > 30 分钟自动关机
  • 节省成本约 70%(假设任务时段集中)

2. 使用抢占式实例

  • 价格便宜 50%-80%
  • 适合可中断的任务(视频合成)
  • 不适合长时间运行的任务

3. 任务批处理

  • 积累多个任务后统一执行
  • 减少开关机次数
  • 提高资源利用率

4. 多服务器负载均衡

  • 优先使用便宜的服务器
  • 高负载时启用昂贵的服务器
  • 动态调整服务器数量

故障排查

问题 1:SSH 连接失败

现象paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

原因

  • 服务器未启动
  • SSH 端口错误
  • 网络问题

解决

  1. 检查服务器状态(AutoDL 控制台)
  2. 验证 SSH 端口和密码
  3. 手动 SSH 测试

问题 2:服务健康检查失败

现象requests.exceptions.ConnectionError

原因

  • 服务未启动
  • 端口映射错误
  • 防火墙阻止

解决

  1. 登录服务器检查服务状态
  2. 验证端口配置
  3. 手动启动服务

问题 3:AutoDL API 调用失败

现象401 Unauthorized403 Forbidden

原因

  • API Key 错误或过期
  • 余额不足
  • API 限流

解决

  1. 更新 API Key
  2. 充值账户
  3. 添加重试逻辑

待实现功能

高优先级

  • [ ] 配置 AUTODL_API_KEY 环境变量
  • [ ] 测试开关机功能
  • [ ] 实现定时任务:每5分钟更新服务器状态
  • [ ] 实现自动扩缩容逻辑

中优先级

  • [ ] 配置余额告警通知(微信/邮件/钉钉)
  • [ ] 实现租期到期提醒功能
  • [ ] 集成到 PyBridge 任务提交流程

低优先级

  • [ ] 实现监控面板(实时状态、成本统计)
  • [ ] 任务重试机制(服务器故障时自动切换)
  • [ ] 成本分析报表(按任务类型、时间段统计)
  • [ ] 预测式扩容(基于历史数据预测负载)

相关文件

  • 服务器配置/Users/mzy/docker/dnmp/www/stooland/pybridge/servers.json
  • 管理模块/Users/mzy/docker/dnmp/www/stooland/pybridge/src/utils/server_manager.py
  • 环境配置/Users/mzy/docker/dnmp/www/stooland/pybridge/.env
  • 部署文档/Users/mzy/docker/dnmp/www/stooland/pybridge/GPU_DEPLOYMENT.md

参考资料

更新日志

  • 2025-12-18:创建初始文档,完成 ServerManager 基础实现