Prhub

#44665 Fix memory pointer overflow in Mamba state buffers

原始 PR 作者 srajabos 合并时间 2026-06-21 14:00 文件变更 1 提交数 4 评论 9 代码增减 +3 / -2

执行摘要

修复 Mamba 状态缓冲区内存指针溢出

设备内存地址可能超过 signed int64 的最大值(2^63-1),导致创建 Mamba 状态缓冲区用于复制操作时发生指针溢出错误。Intel GPU 等平台更容易遇到此问题。

值得精读,尤其关注审核者提出的“统一所有平台”决策。该 PR 展示了如何处理跨平台的内存地址符号性问题,对于理解 vLLM 的 GPU 内存管理有启发意义。

讨论亮点

审核者 jikunshang 指出:"实际上我觉得所有平台都应该使用 uint64 作为指针。cuda/rocm 可能只是碰巧能运行。" 作者 srajabos 随后确认并更新为所有平台统一使用 uint64,而非仅限于 Intel GPU。最终两位审核者均批准通过。

实现拆解

  1. 定位问题:在 vllm/v1/worker/mamba_utils.pyMambaCopyBuffers.create() 方法中,src_ptrsdst_ptrs 使用 torch.int64 存储设备指针,无法容纳超过 2^63-1 的地址。
  2. 修改数据类型:将两处 dtype=torch.int64 替换为 dtype=torch.uint64,覆盖完整的 64 位无符号地址空间。sizes 缓冲区保持 torch.int32 不变。
  3. 无其他文件变更:本次修改仅涉及一个文件,共 5 行变更(+3/-2),无需新增测试或配置。
文件 模块 状态 重要度
vllm/v1/worker/mamba_utils.py Mamba 缓冲区 modified 5.13

关键符号

MambaCopyBuffers.create

关键源码片段

vllm/v1/worker/mamba_utils.py core-logic

核心变更文件,修复 Mamba 状态缓冲区指针溢出问题

# vllm/v1/worker/mamba_utils.py MambaCopyBuffers.create() 方法
# 将 src_ptrs 和 dst_ptrs 的 dtype 从 int64 改为 uint64,
# 以支持完整的 64 位无符号指针地址空间(最大 2^64-1)
@classmethod
def create(
    cls,
    max_num_reqs: int,
    kv_cache_config: KVCacheConfig,
    copy_funcs: tuple[MambaStateCopyFunc, ...],
    make_buffer: Callable[..., CpuGpuBuffer],
) -> "MambaCopyBuffers":
    mamba_group_ids, mamba_spec = get_mamba_groups(kv_cache_config)
    entries_per_req = sum(
        len(kv_cache_config.kv_cache_groups[gid].layer_names)
        for gid in mamba_group_ids
    ) * len(copy_funcs)
    n = max_num_reqs * entries_per_req
    return cls(
        src_ptrs=make_buffer(n, dtype=torch.uint64), # 改前 : torch.int64
        dst_ptrs=make_buffer(n, dtype=torch.uint64), # 改前 : torch.int64
        sizes=make_buffer(n, dtype=torch.int32), # 保持不变
        mamba_group_ids=mamba_group_ids,
        mamba_spec=mamba_spec,
    )

评论区精华

使用 uint64 还是 int64? 设计

审核者 jikunshang 认为所有平台都应使用 uint64 作为指针,而非仅限 Intel GPU。

结论:作者统一改为 uint64,审核者批准。 · 已解决

风险与影响

风险极低。仅更改了两个缓冲区的数据类型,从 int64uint64,语义上更符合指针存储需求。指针算术中如果涉及负数可能会受影响,但指针值通常为非负,故风险很小。缺少对应的单元测试来验证极端地址值,但考虑到变更微小,可接受。

仅影响 Mamba 模型在 vLLM V1 GPU worker 上的状态复制路径。修复后,所有平台(包括 Intel GPU、CUDA、ROCm)均能正确处理高内存地址,避免潜在的数据损坏或崩溃。对现有功能无回归风险。

缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论