# PR #24720 完整报告

- 仓库：`sgl-project/sglang`
- 标题：disable the combination of --enable-two-batch-overlap and --enforce-s…
- 合并时间：2026-05-09 05:27
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/24720

---

# 执行摘要

- 一句话：禁止 TBO 与共享专家融合同时启用
- 推荐动作：值得合并，这是一个低风险、高价值的防御性修复。虽然它没有从根本上解决 TBO 与共享专家融合的兼容性问题，但提供了明确的用户反馈，避免耗时排查。未来可考虑修复底层同步问题以允许两者同时使用。

# 功能与动机

关联 Issue #24690 报告了当同时启用 Two-Batch-Overlap 和强制共享专家融合时，SGLang 服务器在并发基准测试中会挂起 / 死锁。问题的根因可能与 eager 模式下这两个路径的同步冲突有关。

# 实现拆解

**步骤 1：在 server_args.py 的 `check_server_args` 方法中增加校验** 
在原有针对 `enable_two_batch_overlap` 的合法性检查之后，增加了新的条件判断：如果 `self.enable_two_batch_overlap` 和 `self.enforce_shared_experts_fusion` 同时为 `True`，则立即抛出 `ValueError`，提示用户两者不能同时使用。 

**步骤 2：定位代码插入点** 
新检查紧跟在之前的 TBO 检查块之后，位于通信压缩检查之前（约第 7025 行），保持了验证逻辑的连贯性。 

**步骤 3：仅修改一个文件** 
变更只涉及 `python/sglang/srt/server_args.py`，新增了 5 行代码，无删除。没有配套测试或文档变更。

关键文件：
- `python/sglang/srt/server_args.py`（模块 配置层；类别 source；类型 core-logic）: 唯一的变更文件，在启动参数验证中增加了互斥检查。

关键符号：未识别

## 关键源码片段

### `python/sglang/srt/server_args.py`

唯一的变更文件，在启动参数验证中增加了互斥检查。

```python
# 在 check_server_args 方法中，原有 TBO 检查之后新增互斥校验
if self.enable_two_batch_overlap and self.moe_a2a_backend == "none":
    raise ValueError(
        "When enabling two batch overlap, moe_a2a_backend cannot be 'none'."
    )

# 新增：禁止同时启用 TBO 与强制共享专家融合
if self.enable_two_batch_overlap and self.enforce_shared_experts_fusion:
    raise ValueError(
        "--enable-two-batch-overlap and --enforce-shared-experts-fusion cannot be used together."
    )

```
**内联注释说明**：此检查位于 `check_server_args` 方法中，在 TBO 与 a2a 后端合法性校验之后，通信压缩检查之前。当两个选项同时为 `True` 时，服务器启动立即失败，避免运行时死锁。

# 评论区精华

该 PR 没有 review 评论。唯一讨论线索来自 Issue #24690，其中报告了死锁现象并推测了可能原因。

- 暂无高价值评论线程

# 风险与影响

- 风险：**风险低**。该变更只是增加了一个启动时的参数验证，不会影响已有功能的运行时行为。唯一可能的影响是，原本同时启用两个选项的用户会收到 ValueError 并无法启动服务器，但这正是期望的防护行为，迫使用户调整配置。
- 影响：**影响范围小**。只影响同时使用 --enable-two-batch-overlap 和 --enforce-shared-experts-fusion 的用户。这类用户通常是在 DP attention + MoE 场景下，目前遇到死锁问题，该 PR 提供了清晰的失败提示，避免了难以调试的运行时故障。
- 风险标记：暂无

# 关联脉络

- 暂无明显关联 PR