插件系统
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: 12. 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: 14. RDMA(远程直接内存访问)
策略: 将需要 RDMA 通信的任务调度到支持 RDMA 的节点,并优先与已有同组任务的节点亲和。
工作原理:
1. 检查任务是否标记为需要 RDMA (rdma_required: true)
2. 过滤不支持 RDMA 的节点
3. 评分时优先选择已有同组 RDMA 任务的节点(减少跨节点通信开销)
适用场景:
- 分布式训练(多 GPU 通信)
- 高性能计算(HPC)任务
- 需要 GPUDirect RDMA 的场景
配置参数:
plugins:
rdma:
enabled: true
weight: 15. Topology(拓扑感知)
策略: 根据集群网络拓扑结构优化任务放置,减少网络延迟。
工作原理:
1. 读取集群拓扑信息(机架、交换机层级)
2. 评分时优先选择与依赖服务网络距离近的节点
3. 同一任务组的多个实例优先放置在同一机架
适用场景:
- 多机架大规模集群
- 延迟敏感型任务
- 跨区域混合部署
配置参数:
plugins:
topology:
enabled: true
weight: 1
topology_config: "/etc/heteroflow/topology.yaml"插件管理界面
管理后台的 插件管理 页面提供可视化的插件配置功能:
- 查看所有已注册插件及其状态(启用/禁用)
- 配置插件参数(权重、模式等)
- 实时预览调度策略效果
- 一键启用/禁用插件
调度器配置面板
| 参数 | 默认值 | 说明 |
|---|---|---|
scheduler.load_threshold | 0.8 | 节点负载阈值,超过后不再分配新任务 |
scheduler.gpu_load_threshold | 0.9 | GPU 利用率阈值 |
scheduler.memory_threshold | 0.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>"