Prhub

#43303 [Misc][Refactor][ROCm] Convert MoRI-related envvars to extra config args

原始 PR 作者 simondanielsson 合并时间 2026-05-26 18:33 文件变更 5 提交数 6 评论 13 代码增减 +77 / -47

执行摘要

MoRI 环境变量迁移至 kv_connector_extra_config

PR Body 说明:'This PR converts MoRI-related envvars to kv_connector_extra_config args. No behavior change for users using default settings. Warning is logged to users about porting their non-default envvars to the extra config.' 目的是统一 MoRI 连接器的配置方式,减少对环境变量的依赖,使配置通过 KVTransferConfig 传递。

值得深入阅读,尤其是配置迁移模式、废弃警告机制和布尔转换处理。可学习如何将松散环境变量集中到配置对象中,并最小化对用户的影响。

讨论亮点

gemini-code-assist[bot] 指出了几个问题:get_moriio_mode 中的 bool() 转换不健壮,若从 JSON 配置传来字符串 'false' 会被误判为 True;set_backend_type 缺少类型提示;MoRIIOConnectorWorker 中重复提取 read_mode 逻辑。开发者随后修复了布尔转换(使用字符串比较 'true'/'1')和类型提示,并采纳了直接从 moriio_config 读取模式。最终 tjtanaa 审核通过。

实现拆解

  1. 核心逻辑 – moriio_common.py:修改 get_moriio_mode 函数,签名从无参数变为接收 KVTransferConfig,从 kv_connector_extra_config 中读取 read_mode 并进行字符串布尔转换。新增 _warn_deprecated_env_vars 函数,遍历废弃环境变量并记录 warning_once。在 MoRIIOConfig 数据类中添加 read_modeqp_per_transferpost_batch_sizenum_workers 字段并设置默认值。在 from_vllm_config 方法中填充这些字段并调用警告函数。
  2. 后端引擎 – moriio_engine.py:修改 set_backend_type 方法,添加 qp_per_transferpost_batch_sizenum_workers 参数,替换原先的 envs.VLLM_MORIIO_* 引用。删除 from vllm import envs,改用参数传入。
  3. 连接器入口 – moriio_connector.py:在 MoRIIOConnectorMoRIIOConnectorScheduler 中调用 get_moriio_mode(self.kv_transfer_config) 传递配置对象。在 MoRIIOConnectorWorker 中,直接使用 self.moriio_config.read_mode 确定模式,调用 set_backend_type 时传递参数。
  4. 环境变量清理 – envs.py:删除 VLLM_MORIIO_CONNECTOR_READ_MODEVLLM_MORIIO_QP_PER_TRANSFERVLLM_MORIIO_POST_BATCH_SIZEVLLM_MORIIO_NUM_WORKERS 四个环境变量的声明(包括 _Metadata 类和 env_var 映射字典)。
  5. 测试适配 – test_moriio_connector.py:在 create_vllm_config 中添加 read_mode 参数,并设置到 kv_connector_extra_config。删除原有的 moriio_read_mode fixture。修改 test_read_mode_loads_remote_block_ids 直接通过 create_vllm_config(role='kv_consumer', read_mode=True) 设置,不再依赖环境变量。
文件 模块 状态 重要度
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_common.py 配置层 modified 7.65
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_engine.py 引擎层 modified 7.07
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_connector.py 连接器 modified 6.06
vllm/envs.py 环境变量 modified 5.53
tests/v1/kv_connector/unit/test_moriio_connector.py 测试 modified 5.44

关键符号

get_moriio_mode _warn_deprecated_env_vars set_backend_type MoRIIOConfig.from_vllm_config

关键源码片段

vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_common.py core-logic

核心逻辑变更:修改 get_moriio_mode 从 KVTransferConfig 读取模式;新增废弃环境变量警告;向 MoRIIOConfig 添加新字段

# vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_common.py# get_moriio_mode 从 kv_transfer_config 读取 read_mode,进行字符串 -> 布尔转换
# 支持 "true"/"1" 等格式,与之前环境变量行为保持一致
def get_moriio_mode(kv_transfer_config: KVTransferConfig) -> MoRIIOMode:
    # 从 kv_connector_extra_config 中获取 read_mode,默认 "false"
    read_mode = str(
        kv_transfer_config.kv_connector_extra_config.get("read_mode", "false")
    ).lower().strip() in ("true", "1")
    logger.debug("MoRIIO Connector read_mode: %s", read_mode)
    if read_mode:
        return MoRIIOMode.READ
    else:
        return MoRIIOMode.WRITE
​
​
# 定义废弃的环境变量映射:旧环境变量 -> 新配置键
_DEPRECATED_ENV_VARS: dict[str, str] = {
    "VLLM_MORIIO_CONNECTOR_READ_MODE": "read_mode",
    "VLLM_MORIIO_QP_PER_TRANSFER": "qp_per_transfer",
    "VLLM_MORIIO_POST_BATCH_SIZE": "post_batch_size",
    "VLLM_MORIIO_NUM_WORKERS": "num_workers",
}
​
​
# 记录一次警告,提醒用户迁移到配置键
def _warn_deprecated_env_vars() -> None:
    for env_var, new_key in _DEPRECATED_ENV_VARS.items():
        if env_var in os.environ:
            logger.warning_once(
                "The environment variable %s is deprecated and ignored. "
                "Set %r inside kv_transfer_config.kv_connector_extra_config "
                "instead.",
                env_var,
                new_key,
            )
​
​
# MoRIIOConfig 新增字段,提供默认值
@dataclass
class MoRIIOConfig:
    # ... 原有字段 ...
    read_mode: bool = False
    qp_per_transfer: int = 1
    post_batch_size: int = -1
    num_workers: int = 1
    backend: str = "rdma"
​
    @classmethod
    def from_vllm_config(cls, vllm_config: VllmConfig) -> "MoRIIOConfig":
        # ... 原先端口配置逻辑 ...
        _warn_deprecated_env_vars() # 新增:每次从配置加载时检查废弃环境变量
        kv_transfer_config = vllm_config.kv_transfer_config
        extra_config = kv_transfer_config.kv_connector_extra_config
        # 填充新字段(如果不存在则使用默认值)
        read_mode = str(
            extra_config.get("read_mode", "false")
        ).lower().strip() in ("true", "1")
        qp_per_transfer = int(extra_config.get("qp_per_transfer", 1))
        post_batch_size = int(extra_config.get("post_batch_size", -1))
        num_workers = int(extra_config.get("num_workers", 1))
        # ... 构建并返回 MoRIIOConfig 实例 ...
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_engine.py core-logic

重构 set_backend_type 方法,接受参数而非直接读取环境变量

# vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_engine.py# set_backend_type 现在接受三个调优参数,而非通过环境变量读取
def set_backend_type(
    self,
    backend_type: "BackendType",
    qp_per_transfer: int = 1,
    post_batch_size: int = -1,
    num_workers: int = 1,
) -> None:
    assert self.moriio_engine is not None, "MoRIIO engine must be set first"
    if backend_type == BackendType.XGMI:
        logger.info("Using MoRIIO backend: XGMI")
        self.moriio_engine.create_backend(backend_type, XgmiBackendConfig())
    else:
        logger.info(
            "Using MoRIIO backend: RDMA "
            "(qp_per_transfer=%d, post_batch_size=%d, num_workers=%d)",
            qp_per_transfer,
            post_batch_size,
            num_workers,
        )
        rdma_cfg = RdmaBackendConfig(
            qp_per_transfer,
            post_batch_size,
            num_workers,
            PollCqMode.POLLING,
        )
        self.moriio_engine.create_backend(backend_type, rdma_cfg)

评论区精华

布尔转换健壮性和类型提示 正确性

gemini-code-assist[bot] 指出 bool("false") 在 Python 中会返回 True(因为非空字符串为真),建议使用原环境变量中的 lower() in ("true", "1") 方式;还指出 set_backend_type 缺少类型提示。

结论:开发者修复了布尔转换(使用字符串比较)并添加了类型提示。 · 已解决

审核通过 other

tjtanaa 说 LGTM,并感谢及时处理。

结论:PR 获得批准可以合并。 · 已解决

风险与影响

兼容性风险:用户若仍在环境变量中直接设置这些值,将被忽略(虽然有警告)。布尔转换风险:虽然已修复,但若用户通过 extra_config 传入 'false' 字符串,需确保转为 False。测试覆盖风险:单元测试仅覆盖常规模式,未覆盖所有参数组合。环境变量删除风险:若其他模块依赖这些环境变量可能导致错误。

用户影响:默认设置用户无感知;非默认设置用户需迁移配置方式。系统影响:减少全局环境变量,降低命名冲突风险。团队影响:提供了从环境变量迁移到配置对象的范例,后续类似重构可参考。

env var 删除兼容性风险 布尔转换边界情况 配置集中化潜在错误

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论