Prhub

#47337 [Bugfix][Model] Allow Run:ai memory_limit sentinel values

原始 PR 作者 Sunt-ing 合并时间 2026-07-05 08:08 文件变更 2 提交数 2 评论 0 代码增减 +24 / -16

执行摘要

放宽 Run:ai memory_limit 验证以支持 -1/0 值

PR#45291 引入的验证过于严格,拒绝了 Run:ai 官方文档中定义的合法 sentinel 值:RUNAI_STREAMER_MEMORY_LIMIT=-1(无限制/默认 CPU 内存模式)和 0(最小 CPU 缓冲区)。@svasilinets 在关联讨论中指出此问题,需要修正验证以匹配上游语义。

建议合并。该修复准确匹配上游文档语义,逻辑清晰,测试覆盖充分,无兼容性问题。

讨论亮点

该 PR 无人工审核评论,仅 claude[bot] 自动评论因来自 fork 而跳过自动化审查。DarkLight1337 直接批准,无讨论内容。

实现拆解

  1. 解耦 concurrencymemory_limit 的验证逻辑:将原来统一的 for key, env_var in ... 循环拆分为两个独立的 if 分支,允许各自使用不同的验证规则。
  2. 放宽 memory_limit 验证条件:将原条件 value <= 0 修改为 value < -1,即允许 -1、0 和任何正整数,同时仍拒绝小于 -1 的值、布尔值和非整数。
  3. 保持 concurrency 验证不变:仍要求 value > 0 的整数。
  4. 更新错误消息与测试:修改测试 test_runai_invalid_extra_config_leaves_environ_untouched 中的预期错误匹配字符串以反映新消息。
文件 模块 状态 重要度
vllm/model_executor/model_loader/runai_streamer_loader.py 模型加载器 modified 7.01
tests/model_executor/model_loader/runai_streamer_loader/test_runai_model_streamer_loader.py 测试 modified 3.46

关键符号

RunaiModelStreamerLoader.__init__

关键源码片段

vllm/model_executor/model_loader/runai_streamer_loader.py data-contract

核心变更文件:将统一的验证循环拆分为两个独立分支,修改 memory_limit 验证条件,允许 -1 和 0。

# vllm/model_executor/model_loader/runai_streamer_loader.py
class RunaiModelStreamerLoader(BaseModelLoader):
    def __init__(self, load_config: LoadConfig):
        super().__init__(load_config)
        self._is_distributed: bool = False
        if load_config.model_loader_extra_config:
            extra_config = load_config.model_loader_extra_config
            # ... keys 校验与 distributed 处理 ...
​
            # 在修改 os.environ 之前先验证所有值,确保不会因部分失败而留下脏数据
            env_updates: dict[str, str] = {}
            if "concurrency" in extra_config:
                concurrency = extra_config["concurrency"]
                # concurrency 仍需为正整数,不接受 -1/0
                if (
                    isinstance(concurrency, bool)
                    or not isinstance(concurrency, int)
                    or concurrency <= 0
                ):
                    raise ValueError(
                        f"concurrency must be a positive integer, got {concurrency!r}"
                    )
                env_updates["RUNAI_STREAMER_CONCURRENCY"] = str(concurrency)
​
            if "memory_limit" in extra_config:
                memory_limit = extra_config["memory_limit"]
                # Run:ai 官方文档:-1 表示无限制,0 表示最小缓冲区
                # 因此允许 -1、0 和任何正整数,只拒绝小于 -1 的值、布尔值和非整数
                if (
                    isinstance(memory_limit, bool)
                    or not isinstance(memory_limit, int)
                    or memory_limit < -1
                ):
                    raise ValueError(
                        f"memory_limit must be an integer >= -1, got {memory_limit!r}"
                    )
                env_updates["RUNAI_STREAMER_MEMORY_LIMIT"] = str(memory_limit)
            os.environ.update(env_updates)

评论区精华

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

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

风险与影响

风险极低。变更仅涉及 Run:ai 加载器的配置验证逻辑,且已通过测试验证(涵盖 -1、0、1024、-2、concurrency=-1 等场景)。错误消息的更新不会影响正常使用。

  • 用户影响:使用 Run:ai streamer 且配置了 memory_limit=-10 的用户不再遇到异常,模型可正常加载。
  • 系统影响:仅在启动时通过 RunaiModelStreamerLoader.__init__ 影响,运行时无影响。
  • 团队影响:极小;代码改动集中,易于审核。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论