执行摘要
本PR通过移除启用return_logprob时的GPU-CPU同步操作,采用异步传输模式,将token吞吐量从196.23 tok/s提升至246.91 tok/s,优化了采样器和调度器输出处理的性能。
功能与动机
PR旨在解决启用return_logprob时的性能瓶颈,benchmark显示同步延迟导致吞吐量较低。作者引用模式:'compute logprobs without copying it to cpu -> do gpu to cpu transfer in copy_to_cpu(), which is async -> convert cpu tensor to list in scheduler',以消除不必要的等待时间,提升推理效率。
实现拆解
- sampler.py模块(采样层):修改
_attach_logprobs_to_output和compute_logprobs_only函数,为get_top_logprobs和get_token_ids_logprobs调用添加no_copy_to_cpu=True参数,避免logprobs计算时的同步复制。
- scheduler_output_processor_mixin.py模块(调度管理器):在
process_batch_result_prefill和process_batch_result_decode函数中添加异步转换代码,将GPU tensor转换为list,移除对batch.is_spec_v2的条件检查,统一处理top logprobs和token ids logprobs。
评论区精华
review中仅有reviewer ispobock批准PR,未提出评论或争议,因此无讨论内容。
风险与影响
- 风险:异步GPU-CPU传输可能引入数据一致性风险,如scheduler处理时数据未就绪;修改核心路径可能影响其他依赖同步的代码;缺少全面回归测试覆盖。
- 影响:用户端直接提升token吞吐量约25.8%,系统端优化GPU资源利用率,团队需关注异步模式的稳定性。
关联脉络
与近期PR 21503(JIT内核性能优化)和21514(调度器tensor处理修复)相关,体现了仓库在性能优化和调度正确性方面的持续演进。
参与讨论