Prhub

#24555 [LoRA] Use deterministic lora_id for --lora-paths so multi-node ranks agree

原始 PR 作者 jybsuper 合并时间 2026-05-07 13:20 文件变更 2 提交数 1 评论 2 代码增减 +28 / -4

执行摘要

修复多节点 LoRA 的 lora_id 不一致问题

多节点分布式 LoRA 推理时,每个节点独立解析 --lora-paths 参数,由于 uuid4() 每次调用生成不同的 ID,导致同一适配器在不同节点上的 lora_id 不同。主节点广播请求后,其他节点无法匹配本地 LoRA 引用,引发断言错误或 KeyError,使得多节点 --lora-paths 适配器无法使用。

可安全合并。建议为 deterministic_id 添加单元测试,并考虑扩展至多节点 LoRA 的集成测试。

讨论亮点

无 review 评论。

实现拆解

  1. 新增确定性 ID 生成方法:在 lora_registry.pyLoRARef 类中添加 deterministic_id(lora_name, lora_path) 静态方法,使用 uuid5(NAMESPACE_URL, f"{name}\0{path}").hex 生成 32 位十六进制 ID,其中 NUL 分隔符避免名称和路径的边界模糊。

  2. 修改 CLI 参数解析:在 server_args.pycheck_lora_server_args() 中,将四种 --lora-paths 输入格式(name=path 字符串、裸路径字符串、字典列表、顶层字典)的 LoRARef 构造都替换为传入 lora_id=LoRARef.deterministic_id(...),确保解析时生成一致的 ID。

  3. 保持动态加载路径不变LoRARef 构造函数的默认 lora_id 仍为 uuid4().hex,仅 CLI 解析路径使用确定性 ID,动态 HTTP 加载的适配器仍使用随机 ID,因为其广播机制本身就是跨节点一致的。

  4. 验证与测试:在双节点 B200 集群上对四种输入格式进行字节级对比验证,diff 输出为空,确认 ID 一致。

文件 模块 状态 重要度
python/sglang/srt/lora/lora_registry.py LoRA modified 6.49
python/sglang/srt/server_args.py 参数解析 modified 5.97

关键符号

deterministic_id

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

评论区精华

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

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

风险与影响

低风险。变更仅在 CLI 解析路径修改 lora_id 的生成方式,不影响运行时逻辑。确定性 ID 可能导致哈希碰撞(理论上概率极低),但使用 uuid5 和完整名称路径空间可忽略。单节点功能不受影响,多节点 CI 缺少覆盖,需注意后续回归。

影响仅限于分布式 LoRA 场景。用户使用 --lora-paths 时多节点 ID 一致,功能恢复正常。动态加载的适配器 ID 不变。无性能影响。

缺少多节点 CI 测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论