执行摘要
- 一句话:修复分解服务 bootstrap server 被垃圾回收的问题
- 推荐动作:建议精读:改动虽小,但涉及 Python 对象生命周期管理,是常见的 GC 陷阱。值得关注的是如何在代码中通过注释保护这种隐式依赖。
功能与动机
由 @merrymercy 在 PR#25430 的 review 评论(https://github.com/sgl-project/sglang/pull/25430#discussion_r3280241269)中提出:start_disagg_service 的返回值必须保持引用,否则 bootstrap server 会被垃圾回收,导致分解行为错误。
实现拆解
- 在
python/sglang/srt/managers/tokenizer_manager.py 的 init_disaggregation 方法中,将原先的裸调用 start_disagg_service(self.server_args) 改为赋值语句 self.bootstrap_server = start_disagg_service(self.server_args)。
- 在赋值语句前添加注释
# Keep a reference so the bootstrap server is not garbage-collected.,说明引用的意图,防止后续清理误认为未使用而删除。
- 已有字段
self.fake_bootstrap_room_counter 等不受影响。
关键文件:
python/sglang/srt/managers/tokenizer_manager.py(模块 调度器;类别 source;类型 core-logic): 核心修改文件:修复分解 bootstrap server 生命周期问题,确保服务不会被提前回收。
关键符号:init_disaggregation
关键源码片段
python/sglang/srt/managers/tokenizer_manager.py
核心修改文件:修复分解 bootstrap server 生命周期问题,确保服务不会被提前回收。
# python/sglang/srt/managers/tokenizer_manager.py
def init_disaggregation(self):
# PD Disaggregation
self.disaggregation_mode = DisaggregationMode(
self.server_args.disaggregation_mode
)
# Keep a reference so the bootstrap server is not garbage-collected.
# 将返回值赋值给 self.bootstrap_server,确保 TokenizerManager
# 生命周期内 bootstrap server 保持存活,否则可能被 GC 回收
self.bootstrap_server = start_disagg_service(self.server_args)
# Single-source counter for auto-assigning fake bootstrap_room.
self.fake_bootstrap_room_counter = 0
# Encoder Disaggregation
if self.server_args.language_only:
self.mm_receiver = create_mm_receiver(
self.server_args,
dtype=self.model_config.dtype,
hf_config=self.model_config.hf_config,
)
评论区精华
无 reviewer 争议。Review 由 gemini-code-assist[bot] 自动完成,确认变更无额外反馈。
风险与影响
- 风险:风险极低。仅将裸调用改为赋值,不改变
start_disagg_service 的调用语义,不影响其内部逻辑。CI 中出现的 CUDA 失败经分析均为 FlashInfer/CUTLASS/CuTe 等基础设施问题,与本次修改无关。
- 影响:影响范围仅限于使用了分解(disaggregation)模式的场景,确保底层 bootstrap server 存活,避免因垃圾回收导致的分解行为异常。对未启用分解模式的场景无任何影响。
- 风险标记:无相关风险
关联脉络
- PR #25430 disaggregation bootstrap service startup changes: 本 PR 直接回应该 PR 的 review 评论,修复了其中引入的 bootstrap server 生命周期问题。
参与讨论