Prhub

#53497 [CI/Test] Add expert parallelism coverage to external LB tests

原始 PR 作者 hlin99 合并时间 2026-09-04 15:57 文件变更 1 提交数 6 评论 6 代码增减 +22 / -3

执行摘要

为外部负载均衡 DP 测试增加专家并行(EP)覆盖,提升 MoE 模型 DP+EP 通信路径测试能力。

根据 PR body 描述,当前外部负载均衡的 DP 测试仅覆盖标准数据并行。由于默认测试模型为 MoE 模型,因此需要运行相同的测试场景并启用专家并行,以覆盖 DP+EP 的通信路径,确保该功能在外部负载均衡架构下的正确性。

这是一个有价值的测试增强 PR,值得精读其参数化设计和断言逻辑。它展示了如何通过调整测试参数化策略来平衡覆盖范围与 CI 资源成本,其中对 pytest fixture 参数元组和 ID 的运用是很好的实践。对于负责分布式测试或 MoE 模型的工程师,理解此变更有助于编写更全面的测试。

讨论亮点

Review 由 khluu 进行,核心讨论围绕 CI 资源与测试矩阵优化。

  • 争议点:测试矩阵膨胀导致 CI 超时风险。khluu 指出,参数化交叉会导致 CI 步骤中的服务器启动次数翻倍,可能引发超时失败。
  • 决策结论:采纳建议,将测试矩阵从 4 种配置(1/4 API 服务器 × EP 启用/禁用)缩减为 3 种((1, False), (4, False), (1, True)),移除了 (4, True) 组合,因为 EP(引擎侧分片)与 API 服务器数量(前端扇出)之间无直接交互测试需求。
  • 未解决/后续注意点:khluu 提到 EP 参数 ID 不应是 no-ep 的子串以免干扰 pytest -k 选择,最终使用的 ID(如 api-1-ep-enabled)避免了该问题。此外,Rust 前端的并行配置布局不同,因此将 EP 配置断言保留在 test_external_lb_server_info 中,以便 Rust 前端测试可以跳过该部分。

实现拆解

  1. 修改测试参数化 fixture:在 tests/v1/distributed/test_external_lb_dp.py 文件中,将 server_manager fixture 的 params 从简单的 [1, 4](仅 API 服务器数量)改为 [(1, False), (4, False), (1, True)] 的元组列表,并添加 ids 以提高可读性。这引入了 EP 启用/禁用维度,并将测试配置从 4 种(1服务器×2 + 4服务器×2,因为 EP 需要扩展?)减少为 3 种,以平衡覆盖度与 CI 时间。
  2. 新增 EP 配置断言函数:添加了辅助函数 _assert_expert_parallel_config,用于验证每个服务器实例的 EP 配置是否与启动参数 --enable-expert-parallel 的预期一致。该函数在 test_external_lb_server_info 测试中调用,确保服务器实际运行的并行配置与启动时的设置相符。
  3. 调整测试配置构建逻辑:在 server_manager fixture 内部,根据参数 enable_expert_parallel 的值动态构建 server_args 列表,若为 True 则追加 --enable-expert-parallel 参数,然后传递给 ExternalLBServerManager。
  4. 保留核心测试不变:原有的 DP 测试逻辑(如 test_external_lb_single_completion)无需修改,它们将自动在新的参数化配置(包含 EP 启用/禁用)下运行,从而实现了对 DP+EP 路径的覆盖。
文件 模块 状态 重要度
tests/v1/distributed/test_external_lb_dp.py 分布式测试 modified 5.57

关键符号

_assert_expert_parallel_config server_manager

关键源码片段

tests/v1/distributed/test_external_lb_dp.py test-coverage

本次变更的唯一文件,实现了测试参数化调整和新增 EP 配置断言。

# 修改后的 server_manager fixture,将参数从简单的 API 服务器数量列表
# 改为包含 (api_server_count, enable_expert_parallel) 元组的列表,
# 并指定每个参数组合的可读 ID。
@pytest.fixture(
    scope="module",
    params=[(1, False), (4, False), (1, True)],
    ids=["api-1-standard", "api-4-standard", "api-1-ep-enabled"],
)
def server_manager(request, default_server_args):
    # 从参数元组中解包 API 服务器数量和 EP 启用标志
    api_server_count, enable_expert_parallel = request.param
    server_args = default_server_args.copy()
    # 若启用 EP,则在服务器启动参数中追加相应标志
    if enable_expert_parallel:
        server_args.append("--enable-expert-parallel")
​
    server_manager = ExternalLBServerManager(
        MODEL_NAME, DP_SIZE, api_server_count, server_args
    )
​
    with server_manager:
        yield server_manager
​
...
​
# 新增辅助函数,用于验证所有服务器实例的 EP 配置是否与启动参数一致
def _assert_expert_parallel_config(
    servers: list[tuple[RemoteOpenAIServer, list[str]]],
):
    for server, server_args in servers:
        # 根据服务器启动参数判断预期的 EP 启用状态
        expected = "--enable-expert-parallel" in server_args
        # 从服务器实际运行的并行配置中获取 EP 状态
        parallel_config = _get_parallel_config(server)
        # 断言实际配置与预期相符
        assert parallel_config["enable_expert_parallel"] is expected

评论区精华

测试矩阵膨胀与 CI 超时风险 测试

Reviewer khluu 指出,参数化交叉将使 CI 启动的服务器实例数量翻倍,可能触发超时失败。建议将 4 种配置缩减为 3 种,移除 EP × 4-API- 服务器 这一无直接交互的组合。

结论:作者采纳了建议,将测试参数从 `[(1, False), (4, False), (1, True), (4, True)]` 缩减为 `[(1, False), (4, False), (1, True)]`,在保持关键覆盖的同时降低了 CI 负担。 · 已解决

pytest 参数 ID 命名避免干扰 -k 选择 测试

khluu 提醒 EP 参数的 ID 不应是 `no-ep` 的子串,因为 pytest `-k "not ep"` 会进行子串匹配,可能意外排除测试。

结论:最终使用的 ID(如 `api-1-ep-enabled`、`api-1-standard`)避免了该问题,确保了测试选择的正确性。 · 已解决

Rust 前端兼容性考虑 设计

khluu 指出 Rust 前端具有不同的并行配置布局,因此 EP 配置断言需要保留在 `test_external_lb_server_info` 中,以便 Rust 前端测试可以跳过该部分。

结论:断言被放置在 `test_external_lb_server_info` 测试函数内部,而非全局 fixture,使得其他测试或前端实现可以有选择地应用或跳过该检查。 · 已解决

风险与影响

风险较低,主要集中在测试 CI 层面。

  1. CI 超时风险(已缓解):测试配置从 4 种减少为 3 种,降低了单个 CI 步骤的启动开销,但新增的 EP 配置仍会增加少量运行时间,需关注相关 CI 任务(如 “Distributed DP Basic”)的超时阈值。
  2. 测试覆盖有效性:断言函数 _assert_expert_parallel_config 验证了配置传递的正确性,但未测试 EP 启用后的实际计算结果正确性,这属于功能测试范畴,不在本 PR 范围内。
  3. 向后兼容性:仅修改测试参数和添加断言,不影响现有测试的运行和结果判定。
  1. 对用户无直接影响,因为不改变任何生产代码或功能行为。
  2. 对系统/开发者影响:提升了测试覆盖率,确保了外部负载均衡下 DP+EP 功能在集成测试层面的可靠性,有利于早期发现配置传递或启动过程中的问题。
  3. 对团队影响:为 MoE 模型在分布式推理场景下的测试提供了更好的保障,但需要团队留意新增测试配置对 CI 资源(时间、GPU)的消耗。
CI 超时风险 测试覆盖局限性

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论