执行摘要
本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分钟。
实现拆解
- 测试重命名:在
test/registered/perf/test_bench_serving_1gpu_part1.py中,将test_lora_online_latency和test_lora_online_latency_with_concurrent_adapter_updates重命名为test_online_lora_latency和test_online_lora_latency_with_concurrent_adapter_updates,确保按字母顺序时test_offline_*优先执行,预热HF缓存。
- Tokenizer路径优化:在
python/sglang/test/test_utils.py的run_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专注于解决外部依赖延迟问题,通过调整测试顺序和资源加载策略,为类似场景提供了参考模式。
参与讨论