V2 独立版愿景

插件系统

HeteroFlow 是本站的异构算力与大模型调度产品。插件系统。插件系统 HeteroFlow V2 的调度器采用可插拔的插件架构,通过组合不同的调度插件实现灵活的资源分配策略。插件系统基于 Kubernetes Scheduler Framework 的设计理念,将调度流程划分为多个扩展点(Extension Points),每个插件可以在…

插件系统

HeteroFlow V2 的调度器采用可插拔的插件架构,通过组合不同的调度插件实现灵活的资源分配策略。插件系统基于 Kubernetes Scheduler Framework 的设计理念,将调度流程划分为多个扩展点(Extension Points),每个插件可以在特定的扩展点注册并影响调度决策。

插件类型

调度框架定义了以下五种扩展点类型:

扩展点类型说明典型用途
Filter过滤不满足条件的节点资源不足过滤、GPU类型匹配
PreScore预评分阶段,准备评分数据计算节点资源利用率基线
Score对候选节点打分排序资源均衡评分、紧凑放置评分
PostScore评分后处理,归一化/加权插件权重聚合
Bind最终绑定节点执行RDMA亲和性绑定、拓扑感知绑定

内置插件

1. Binpack(紧凑放置)

策略: 优先将任务分配到资源使用率最高的节点,使节点资源尽可能紧凑使用。

工作原理: 对每个候选节点,计算其当前资源使用率(CPU、内存、GPU),使用率越高的节点得分越高。公式为:

score = (used_cpu / total_cpu + used_memory / total_memory + used_gpu / total_gpu) / 3 * 100

适用场景:

  • 需要减少节点碎片化,提高单节点利用率
  • 资源成本敏感场景
  • 节点数量有限时最大化利用

配置参数:

plugins:
  binpack:
    enabled: true
    weight: 1

2. Spread(分散放置)

策略: 优先将任务分散到不同的节点,实现负载均衡。

工作原理: 与 Binpack 相反,使用率越低的节点得分越高。公式为:

score = (1 - used_resources / total_resources) * 100

适用场景:

  • 高可用性要求,避免单点故障
  • 节点负载均衡
  • 多节点分布式训练场景

配置参数:

plugins:
  spread:
    enabled: true
    weight: 1

> 互斥关系: Spread 与 Binpack 互斥,同一调度策略中只能启用其中一个。

3. Preempt(抢占调度)

策略: 当集群资源不足时,可以抢占低优先级任务的资源来运行高优先级任务。

三种抢占模式:

模式说明触发条件
disabled禁用抢占不触发抢占
scheduled仅抢占已调度但未运行的任务新任务无可用节点
running可抢占正在运行的任务新任务无可用节点且无已调度可抢占任务

工作原理:

1. 调度器发现没有节点满足新任务需求

2. 遍历所有节点上的任务,按优先级排序

3. 找到优先级低于新任务的受害者(victim)

4. 驱逐受害者任务,释放资源

5. 将新任务绑定到释放资源的节点

适用场景:

  • 混合优先级任务队列
  • GPU资源紧张的集群
  • 需要保证高优先级任务及时执行

配置参数:

plugins:
  preempt:
    enabled: true
    mode: "scheduled"  # disabled | scheduled | running
    weight: 1

4. RDMA(远程直接内存访问)

策略: 将需要 RDMA 通信的任务调度到支持 RDMA 的节点,并优先与已有同组任务的节点亲和。

工作原理:

1. 检查任务是否标记为需要 RDMA (rdma_required: true)

2. 过滤不支持 RDMA 的节点

3. 评分时优先选择已有同组 RDMA 任务的节点(减少跨节点通信开销)

适用场景:

  • 分布式训练(多 GPU 通信)
  • 高性能计算(HPC)任务
  • 需要 GPUDirect RDMA 的场景

配置参数:

plugins:
  rdma:
    enabled: true
    weight: 1

5. Topology(拓扑感知)

策略: 根据集群网络拓扑结构优化任务放置,减少网络延迟。

工作原理:

1. 读取集群拓扑信息(机架、交换机层级)

2. 评分时优先选择与依赖服务网络距离近的节点

3. 同一任务组的多个实例优先放置在同一机架

适用场景:

  • 多机架大规模集群
  • 延迟敏感型任务
  • 跨区域混合部署

配置参数:

plugins:
  topology:
    enabled: true
    weight: 1
    topology_config: "/etc/heteroflow/topology.yaml"

插件管理界面

管理后台的 插件管理 页面提供可视化的插件配置功能:

  • 查看所有已注册插件及其状态(启用/禁用)
  • 配置插件参数(权重、模式等)
  • 实时预览调度策略效果
  • 一键启用/禁用插件

调度器配置面板

参数默认值说明
scheduler.load_threshold0.8节点负载阈值,超过后不再分配新任务
scheduler.gpu_load_threshold0.9GPU 利用率阈值
scheduler.memory_threshold0.85内存使用率阈值
scheduler.score_weights各1.0各插件评分权重

推理控制面板

推理控制面板提供 GPU 推理任务的专用管理:

  • 推理模型列表和状态监控
  • GPU 显存使用情况
  • 推理任务自动扩缩容配置
  • 推理 API 端点管理

插件状态

状态说明
active插件正常运行,参与调度决策
inactive插件已注册但未启用
error插件初始化失败或运行异常
configuring插件正在重新加载配置

API 接口

获取所有插件

curl -X GET http://localhost:3333/api/v1/plugins 
  -H "Authorization: Bearer <token>"

响应示例:

{
  "plugins": [
    {
      "name": "binpack",
      "type": "Score",
      "enabled": true,
      "weight": 1,
      "status": "active",
      "config": {}
    },
    {
      "name": "spread",
      "type": "Score",
      "enabled": false,
      "weight": 1,
      "status": "inactive",
      "config": {}
    }
  ]
}

更新插件配置

curl -X PUT http://localhost:3333/api/v1/plugins/binpack 
  -H "Authorization: Bearer <token>" 
  -H "Content-Type: application/json" 
  -d '{"enabled": true, "weight": 2}'

获取调度器配置

curl -X GET http://localhost:3333/api/v1/scheduler/config 
  -H "Authorization: Bearer <token>"

更新调度器配置

curl -X PUT http://localhost:3333/api/v1/scheduler/config 
  -H "Authorization: Bearer <token>" 
  -H "Content-Type: application/json" 
  -d '{"load_threshold": 0.85, "gpu_load_threshold": 0.9}'

获取推理控制面板

curl -X GET http://localhost:3333/api/v1/inference/panel 
  -H "Authorization: Bearer <token>"