执行摘要
- 一句话:优化PD预填充场景下的调度逻辑,减少排队并提升批处理效率。
- 推荐动作:面向技术管理者和工程师,建议:
- 精读重点:该PR值得精读,特别是engine_forward_signal的设计和调度时机变化,这些是性能优化的关键决策点。
- 关注设计:留意讨论中的并发优化建议和接口语义问题,可应用于其他调度优化场景。
- 跟进风险:建议后续补充测试覆盖,并监控生产环境中的性能表现和并发问题。
功能与动机
根据PR body描述,动机是“之前scheduler和worker是完全异步分开进行的,schedule()会在引擎forward开始前发生并立即结束,容易造成每次调度的请求量不满,从而让请求易发生排队”。优化目的是在引擎forward结束后再进行schedule(),以达到最佳组batch效果。
实现拆解
实现方案拆解为以下模块:
- 引擎层(Engine):在fastdeploy/engine/common_engine.py中新增engine_forward_signal(IPCSignal),用于标记forward状态;修改_schedule_request_to_worker_v1函数,在forward期间累积请求(通过检查engine_forward_signal.value[0] != 0),结束后统一调度;为EP并行添加空任务推送逻辑以同步worker。
- Worker层:在fastdeploy/worker/worker_process.py中修改event_loop_normal函数,在检测到新请求时设置engine_forward_signal为1,forward结束时置0;调整任务处理逻辑,支持空任务barrier;简化init_health_status以初始化信号。
- 调度器层(Scheduler):在fastdeploy/scheduler/dp_scheduler.py中简化get_requests函数,移除资源检查逻辑,改为只取一个请求,以适应V1资源管理。
- 文档和环境变量:移除FD_EP_BATCHED_TOKEN_TIMEOUT环境变量及其相关文档(docs/usage/environment_variables.md, fastdeploy/envs.py)。
- 测试更新:调整测试文件(如tests/engine/test_common_engine.py, tests/scheduler/test_dp_scheduler.py)以适应新逻辑,并注释不稳定测试。
关键文件:
fastdeploy/engine/common_engine.py(模块 Engine): 核心调度逻辑修改,新增engine_forward_signal并调整_schedule_request_to_worker_v1函数,决定调度时机和累积机制。
fastdeploy/worker/worker_process.py(模块 Worker): worker处理逻辑调整,更新engine_forward_signal状态、处理空任务同步,影响forward期间的请求接收和调度。
fastdeploy/scheduler/dp_scheduler.py(模块 Scheduler): 调度器简化,get_requests函数移除资源检查逻辑,接口语义变化,需关注与V1资源管理的兼容性。
关键符号:_schedule_request_to_worker_v1, event_loop_normal, init_health_status, get_requests
评论区精华
review讨论的核心要点包括:
风险与影响
- 风险:技术风险具体如下:
- 并发风险:engine_forward_signal在多TP rank下的写入可能引入竞态,影响调度时机正确性(fastdeploy/worker/worker_process.py)。
- 性能开销:在EP空闲时频繁推送空任务(fastdeploy/engine/common_engine.py)可能增加不必要的IPC和CPU开销,影响系统功耗和延迟抖动。
- 接口兼容性:dp_scheduler.py的get_requests函数参数未使用,接口语义模糊,可能误导后续维护者或调用方。
- 测试覆盖不足:Codecov报告显示50.9%的补丁覆盖率,新增调度逻辑(如engine_forward_signal gating)缺少单元测试,增加回归风险。
- 回归风险:移除FD_EP_BATCHED_TOKEN_TIMEOUT环境变量可能影响依赖此超时的旧配置或系统。
- 影响:影响范围和程度:
- 用户影响:对使用PD disaggregation的用户,此优化有望减少TTFT,提升请求响应速度和吞吐量,改善用户体验。
- 系统影响:修改核心调度路径(引擎和worker交互),可能影响所有PD相关推理任务;性能提升但需监控并发开销。
- 团队影响:工程师需理解新调度时机和信号机制,以避免后续修改引入回归;技术管理者可借鉴设计决策进行类似优化。
- 风险标记:核心路径变更, 并发风险, 接口语义模糊, 测试覆盖不足
关联脉络
参与讨论