执行摘要
- 一句话:修复 PD 预热 endpoint 和日志
- 推荐动作:值得合并,修复了明显的 bug。但建议作者或后续 PR 跟进处理 review 指出的预热失败时函数返回值问题,以保持与非分离路径的行为一致。
功能与动机
PD 分离部署的预热请求因未设置 request_name 使用了错误的 endpoint(此前定义的 request_name 仅在非分离路径中赋值),导致预热可能失败或行为异常。同时,失败日志没有包含分离模式信息,不利于排查问题。
实现拆解
- 设置 endpoint 名称:在
_execute_server_warmup 函数的分离模式分支(else 块)开头添加 request_name = "/generate",确保预热请求发送到 /generate 端点。
- 改进错误日志:将日志消息从
"Prefill disaggregation mode warm Up Failed, status code: {}".format(res.status_code) 改为 "Disaggregation warmup failed (mode=%s), status code: %s", server_args.disaggregation_mode, res.status_code,使用 logger 的格式化参数并包含分离模式名。
- 仅修改一个文件:所有变更集中在
python/sglang/srt/entrypoints/http_server.py,共 4 行新增、3 行删除。
关键文件:
python/sglang/srt/entrypoints/http_server.py(模块 入口;类别 source;类型 core-logic;符号 _execute_server_warmup): 所有变更均在此文件中,修复了 PD 分离预热的核心逻辑和日志。
关键符号:_execute_server_warmup
关键源码片段
python/sglang/srt/entrypoints/http_server.py
所有变更均在此文件中,修复了 PD 分离预热的核心逻辑和日志。
# 位于 _execute_server_warmup 函数内部
else:
logger.info(f"Start of pd disaggregation warmup ...")
# 修复 : 显式设置 endpoint 为 /generate,确保预热请求路由正确
request_name = "/generate"
json_data = {
"sampling_params": {
"temperature": 0.0,
"max_new_tokens": 8,
"ignore_eos": True,
},
"bootstrap_host": [FAKE_BOOTSTRAP_HOST] * server_args.dp_size,
"bootstrap_room": [
i * (2**63 // server_args.dp_size) + (i % server_args.tp_size)
for i in range(server_args.dp_size)
],
"input_ids": [[10, 11, 12, 13]] * server_args.dp_size,
}
res = requests.post(url + request_name, json=json_data, ...)
if res.status_code == 200:
logger.info("Disaggregation warmup request completed with status %s, resp: %s",
res.status_code, res.json())
_global_state.tokenizer_manager.server_status = ServerStatus.Up
else:
# 修复 : 使用 logger 参数格式化并包含 disaggregation_mode,便于排查
logger.info(
"Disaggregation warmup failed (mode=%s), status code: %s",
server_args.disaggregation_mode,
res.status_code,
)
_global_state.tokenizer_manager.server_status = ServerStatus.UnHealthy
评论区精华
代码审查机器人指出,分离模式预热失败时(res.status_code != 200),函数并未抛出异常或返回 False,导致服务器后续仍输出 "The server is fired up and ready to roll!",尽管状态已设为 UnHealthy。这与非分离路径的行为不一致。该问题在本 PR 中未解决。
- 预热失败后服务器状态不一致 (correctness): 未解决,本 PR 仅修复 endpoint 和日志,未处理该逻辑缺陷。
风险与影响
- 风险:低风险。变更仅影响分离部署预热路径,且改动量小。但如 review 所述,预热失败时服务器仍可能误报启动成功,存在逻辑缺陷。
- 影响:影响范围限于 PD 分离部署(
server_args.disaggregation_mode != "null")的预热阶段。修复后预热端点正确、日志更清晰,便于运维排障。
- 风险标记:预热失败逻辑不完整
关联脉络
参与讨论