执行摘要
- 一句话:为外部负载均衡 DP 测试增加专家并行(EP)覆盖,提升 MoE 模型 DP+EP 通信路径测试能力。
- 推荐动作:这是一个有价值的测试增强 PR,值得精读其参数化设计和断言逻辑。它展示了如何通过调整测试参数化策略来平衡覆盖范围与 CI 资源成本,其中对 pytest fixture 参数元组和 ID 的运用是很好的实践。对于负责分布式测试或 MoE 模型的工程师,理解此变更有助于编写更全面的测试。
功能与动机
根据 PR body 描述,当前外部负载均衡的 DP 测试仅覆盖标准数据并行。由于默认测试模型为 MoE 模型,因此需要运行相同的测试场景并启用专家并行,以覆盖 DP+EP 的通信路径,确保该功能在外部负载均衡架构下的正确性。
实现拆解
- 修改测试参数化 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 时间。
- 新增 EP 配置断言函数:添加了辅助函数
_assert_expert_parallel_config,用于验证每个服务器实例的 EP 配置是否与启动参数 --enable-expert-parallel 的预期一致。该函数在 test_external_lb_server_info 测试中调用,确保服务器实际运行的并行配置与启动时的设置相符。
- 调整测试配置构建逻辑:在
server_manager fixture 内部,根据参数 enable_expert_parallel 的值动态构建 server_args 列表,若为 True 则追加 --enable-expert-parallel 参数,然后传递给 ExternalLBServerManager。
- 保留核心测试不变:原有的 DP 测试逻辑(如
test_external_lb_single_completion)无需修改,它们将自动在新的参数化配置(包含 EP 启用/禁用)下运行,从而实现了对 DP+EP 路径的覆盖。
关键文件:
tests/v1/distributed/test_external_lb_dp.py(模块 分布式测试;类别 test;类型 test-coverage;符号 _assert_expert_parallel_config): 本次变更的唯一文件,实现了测试参数化调整和新增 EP 配置断言。
关键符号:_assert_expert_parallel_config, server_manager
关键源码片段
tests/v1/distributed/test_external_lb_dp.py
本次变更的唯一文件,实现了测试参数化调整和新增 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
评论区精华
Review 由 khluu 进行,核心讨论围绕 CI 资源与测试矩阵优化。
风险与影响
- 风险:风险较低,主要集中在测试 CI 层面。
1. CI 超时风险(已缓解):测试配置从 4 种减少为 3 种,降低了单个 CI 步骤的启动开销,但新增的 EP 配置仍会增加少量运行时间,需关注相关 CI 任务(如 “Distributed DP Basic”)的超时阈值。
2. 测试覆盖有效性:断言函数 _assert_expert_parallel_config 验证了配置传递的正确性,但未测试 EP 启用后的实际计算结果正确性,这属于功能测试范畴,不在本 PR 范围内。
3. 向后兼容性:仅修改测试参数和添加断言,不影响现有测试的运行和结果判定。
- 影响:
- 对用户无直接影响,因为不改变任何生产代码或功能行为。
- 对系统/开发者影响:提升了测试覆盖率,确保了外部负载均衡下 DP+EP 功能在集成测试层面的可靠性,有利于早期发现配置传递或启动过程中的问题。
- 对团队影响:为 MoE 模型在分布式推理场景下的测试提供了更好的保障,但需要团队留意新增测试配置对 CI 资源(时间、GPU)的消耗。
- 风险标记:CI 超时风险, 测试覆盖局限性
关联脉络
参与讨论