Prhub

#46511 [Log] Update to log once

原始 PR 作者 yewentao256 合并时间 2026-06-24 22:45 文件变更 4 提交数 3 评论 0 代码增减 +23 / -21

执行摘要

将重复日志改为只打印一次

PR body 中提供了大量重复日志示例:WARNING 06-23 15:00:27 [cuda.py:45] Failed to import from vllm._qutlass_C 在极短时间内重复数十次,严重干扰用户阅读。

值得合并的小而美的清理变更。对日常用户无感知,但显著改善了启动日志体验。可作为后续类似日志治理的范例。

讨论亮点

review 中无具体讨论,仅 maintainer tjtanaa 批准并称赞:"Thanks for cleaning up the logs"。

实现拆解

对四个文件中的 14 处日志调用进行了替换:

  1. vllm/platforms/interface.py: 将 import_kernelsvllm._C 导入失败的 logger.warning 换为 logger.warning_once;将 is_pin_memory_available 中 WSL 警告换为 logger.warning_once;将 __getattr__ 中平台属性缺失警告换为 logger.warning_once
  2. vllm/platforms/cpu.py: 在 check_and_update_config 中,将 DBO 不支持、prefix caching 禁用、MLA 强制禁用等 3 处 logger.warning/info 换为 once 版本;在 import_kernels 中,将内核导入失败的 4 处警告换为 logger.warning_once
  3. vllm/platforms/cuda.py: 在 import_kernels 中,将 3 个内核导入失败警告换为 logger.warning_once;在 is_pin_memory_availablecheck_and_update_config 中,将 WSL 内核版本警告、multimodal 强制 chunk 警告、CPU offload 与 CUDA graph 冲突警告共 3 处换为 logger.warning_once
  4. vllm/platforms/xpu.py: 在 get_attn_backend_cls 中,将 KV cache layout 设置提示和 Flash Attention 后端提示换为 logger.info_once;在 check_and_update_config 中,将 XPU Graph 不支持、环境变量禁用、fusion pass 不支持等 3 处警告换为 logger.warning_once
文件 模块 状态 重要度
vllm/platforms/cpu.py CPU 平台 modified 5.68
vllm/platforms/cuda.py CUDA 平台 modified 5.68
vllm/platforms/xpu.py XPU 平台 modified 5.17
vllm/platforms/interface.py 平台接口 modified 5.02

关键源码片段

vllm/platforms/cpu.py core-logic

改动最密集,涉及 import_kernels 和 check_and_update_config 两处共 7 处日志替换,覆盖 C 内核导入、DBO 禁用、prefix caching 禁用、MLA 强制禁用等场景。

# vllm/platforms/cpu.py ( 关键变更片段 )@classmethod
def import_kernels(cls) -> None:
    try:
        import vllm._C # noqa: F401
    except ImportError as e:
        # 改为只打印一次,避免启动时刷屏
        logger.warning_once("Failed to import from vllm._C: %r", e)
    else:
        # ... 嵌套导入同样使用 warning_once@classmethod
def check_and_update_config(cls, vllm_config: VllmConfig) -> None:
    # ...
    if parallel_config.enable_dbo:
        logger.warning_once("Dual-Batch Overlap is not supported on CPU, disabled.")
        parallel_config.enable_dbo = False
    # ...
    if model_config is not None and model_config.use_mla:
        logger.info_once(
            "MLA is enabled on a non-GPU platform; forcing chunked "
            "prefill and prefix caching to be disabled."
        )
vllm/platforms/cuda.py core-logic

改动 6 处,包括 import_kernels 中三个内核导入警告、WSL pin_memory 警告、multimodal 强制 chunk 警告、CPU offload 与 CUDA graph 冲突警告。

# vllm/platforms/cuda.py ( 关键变更片段 )@classmethod
def import_kernels(cls) -> None:
    try:
        import vllm._C_stable_libtorch # noqa: F401
    except ImportError as e:
        # 三次导入尝试均改为只警告一次
        logger.warning_once("Failed to import from vllm._C_stable_libtorch: %r", e)
    # ... moons 和 qutlass 同样使用 warning_once@classmethod
def is_pin_memory_available(cls) -> bool:
    if in_wsl():
        version = _get_wsl_kernel_version()
        if version is None or version < (4, 19, 121):
            logger.warning_once(
                "Using 'pin_memory=False' as WSL is detected and the "
                "WSL2 kernel version is below 4.19.121. This may slow "
                "down performance. Please run `wsl --update`."
            )
            return False
vllm/platforms/xpu.py core-logic

改动 5 处,涵盖 attention 后端选择日志和 check_and_update_config 中的 XPU Graph 相关警告。

# vllm/platforms/xpu.py ( 关键变更片段 )@classmethod
def get_attn_backend_cls(cls, selected_backend, attn_selector_config, num_heads=None):
    set_kv_cache_layout("NHD")
    logger.info_once(
        "Setting VLLM_KV_CACHE_LAYOUT to 'NHD' for XPU; "
        "only NHD layout is supported by XPU attention kernels."
    )
    # 后续所有信息日志均已使用 info_once@classmethod
def check_and_update_config(cls, vllm_config: VllmConfig) -> None:
    if not supports_xpu_graph():
        compilation_config.cudagraph_mode = CUDAGraphMode.NONE
        logger.warning_once(
            "XPU Graph is not supported in the current PyTorch version, "
            "disabling cudagraph_mode."
        )
    # 其余警告同样使用 warning_once

评论区精华

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

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

风险与影响

风险极低。仅替换日志 API,不影响任何业务逻辑、控制流或配置。唯一的微小风险是:若某处日志本应每次都打印以跟踪动态状态(例如每次调用都不同的错误),则 once 版本会掩盖后续变化。但本 PR 涉及的所有警告/提示都是静态配置检查,重复打印无额外信息量。

  • 对用户: 启动日志量显著减少,尤其是 CUDA 内核导入失败、XPU 后端选择、WSL 警告等高频消息不再反复出现,排查问题更清晰。
  • 对系统: 无性能或功能影响。
  • 对团队: 统一了平台层日志风格,后续新增日志应优先考虑 *_once 版本。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论