Prhub

#22292 [CI] Fix stage-b-test-1-gpu-large (0) timeout by reordering LoRA tests and using tokenizer from cache

sgl-project/sglang · 作者 alexnails · 合并时间 2026-04-08 11:00

分析状态 已生成
文件变更 2提交数 6 · 评论 3
代码增减 +19 / -5
run-ci test refactor

执行摘要

通过重排测试顺序和优化 tokenizer 加载,修复 CI 单 GPU 大模型测试超时问题。

根据PR body描述,stage-b-test-1-gpu-large (0)测试频繁超时,根本原因有两个:1. unittest按字母顺序执行测试方法,test_lora_*test_offline_*之前运行,而LoRA测试跳过CI_OFFLINE模式,导致首次服务器启动时tokenizer加载会调用Hugging Face Hub API(如list_repo_files),在冷启动时可能阻塞数分钟。2. 即使模型已本地缓存,基准测试客户端仍接收Hugging Face仓库ID作为tokenizer,调用AutoTokenizer.from_pretrained(repo_id)可能触发额外的Hub元数据查找。PR提供了CI日志中的时间数据,显示test_lora_online_latency服务器启动耗时6分49秒(因HF API阻塞),而test_offline_throughput_default仅46秒,重排测试顺序后预计可节省约5分钟总时间。

该PR值得CI/测试维护者精读,以了解如何优化测试顺序和资源加载来避免外部依赖延迟。关注点包括:find_local_repo_dir的使用方式、测试重命名的策略,以及从提交历史中反映的从延长超时到根本修复的决策过程。

讨论亮点

Review中仅有一名审核者(Fridge003)批准,无评论内容,表明变更直接且无争议。从提交历史看,作者最初尝试延长超时时间(从30分钟到40分钟),但随后转向根本原因修复,包括重排测试方法和优化tokenizer加载,显示从临时缓解到系统性解决的演进。

实现拆解

实现方案分为两个关键改动点:

  1. test/registered/perf/test_bench_serving_1gpu_part1.py中,将两个LoRA测试方法从test_lora_online_latencytest_lora_online_latency_with_concurrent_adapter_updates重命名为test_online_lora_latencytest_online_lora_latency_with_concurrent_adapter_updates,确保按字母顺序时非LoRA测试(如test_offline_*)优先执行,从而在LoRA测试前预热HF缓存。
  2. python/sglang/test/test_utils.pyrun_bench_serving()函数中,添加逻辑以解析tokenizer到本地快照路径:当bench_tokenizer为None时,尝试通过sglang.srt.utils.find_local_repo_dir查找模型的本地目录,如果存在且为目录,则将其设置为bench_tokenizer,这样基准测试客户端将直接使用本地路径加载tokenizer,避免调用Hub API。
文件 模块 状态 重要度
test/registered/perf/test_bench_serving_1gpu_part1.py test/performance modified 7.0
python/sglang/test/test_utils.py test/utils modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

run_bench_serving test_online_lora_latency test_online_lora_latency_with_concurrent_adapter_updates

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

技术风险较低:

  1. 重命名测试方法可能影响依赖这些名称的脚本或文档,但PR body指出逻辑未变,且仅影响内部测试文件。
  2. run_bench_serving()中添加的本地路径解析逻辑依赖find_local_repo_dir函数和异常处理,如果该函数失败或返回无效路径,可能回退到原始tokenizer,但异常被捕获并忽略,确保不会引入新错误。
  3. 变更主要针对CI环境,对生产代码影响极小,但需确保find_local_repo_dir在相关上下文中可用且行为一致。

影响范围集中于CI测试流程:

  1. 对用户无直接影响,这是内部测试优化。
  2. 对系统:显著减少CI测试超时风险,提升测试稳定性和效率,预计节省约5分钟测试时间。
  3. 对团队:减少CI失败导致的重复运行,加速PR合并流程,但需注意测试重命名可能对开发者本地运行或历史引用造成轻微混淆。
依赖外部 API 测试顺序敏感

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR通过重命名测试方法以调整执行顺序,并优化tokenizer加载逻辑,修复了CI中stage-b-test-1-gpu-large (0)测试频繁超时的问题。变更集中于测试文件test_bench_serving_1gpu_part1.py和工具函数run_bench_serving,预计可节省约5分钟测试时间,提升CI稳定性和效率,对生产代码无直接影响。

功能与动机

stage-b-test-1-gpu-large (0)测试在CI中频繁超时,根本原因在于:

  • unittest按字母顺序执行测试方法,导致test_lora_*test_offline_*之前运行。
  • LoRA测试跳过CI_OFFLINE模式,首次服务器启动时tokenizer加载会调用Hugging Face Hub API(如list_repo_files),在冷启动时阻塞数分钟。
  • 即使模型已本地缓存,基准测试客户端仍使用仓库ID加载tokenizer,可能触发额外API调用。
    PR body引用CI日志数据,显示test_lora_online_latency服务器启动耗时6分49秒,而test_offline_throughput_default仅46秒,重排顺序后可将冷启动时间从约7分钟降至2分钟。

实现拆解

  1. 测试重命名:在test/registered/perf/test_bench_serving_1gpu_part1.py中,将test_lora_online_latencytest_lora_online_latency_with_concurrent_adapter_updates重命名为test_online_lora_latencytest_online_lora_latency_with_concurrent_adapter_updates,确保按字母顺序时test_offline_*优先执行,预热HF缓存。
  2. Tokenizer路径优化:在python/sglang/test/test_utils.pyrun_bench_serving()函数中添加以下逻辑:
    python bench_tokenizer = tokenizer if bench_tokenizer is None: try: from sglang.srt.utils import find_local_repo_dir local_dir = find_local_repo_dir(model, revision=None) if local_dir and os.path.isdir(local_dir): bench_tokenizer = local_dir except Exception: pass
    当本地缓存可用时,将tokenizer解析为本地路径,避免基准测试客户端调用Hub API。

评论区精华

Review中仅Fridge003批准,无评论内容,表明变更直接且无争议。提交历史显示作者从最初延长超时时间(提交52485f7)转向根本原因修复(提交75ac42b和60cd126),体现了从临时缓解到系统性解决的决策过程。

风险与影响

  • 风险:测试重命名可能影响依赖名称的脚本或文档;本地路径解析依赖find_local_repo_dir函数,需确保其可用性和异常处理稳健。
  • 影响:显著减少CI超时风险,提升测试效率,对用户无直接影响,但团队需注意测试重命名可能带来的轻微混淆。

关联脉络

与近期CI优化PR如#22301(优化coredump上传)、#22297(撤销测试模型更新)和#22284(添加快速失败机制)同属提升CI稳定性的努力。本PR专注于解决外部依赖延迟问题,通过调整测试顺序和资源加载策略,为类似场景提供了参考模式。

参与讨论