大模型推理引擎 vLLM(28):custom_all_reduce 单机/跨节点原理(IPC、Fabric、HSA)

发布时间:2026/10/31 6:27:53

大模型推理引擎 vLLM(28):custom_all_reduce 单机/跨节点原理(IPC、Fabric、HSA) 目录1 为什么有custom_all_reduce2 节点内的Custom AllReduce2.1 节点内的Custom AllReduce大体原理2.2 IPCHIP IPC3 跨节点的Custom AllReduce3.1 跨节点的Custom AllReduce大体原理3.2 FabricHSA RPC Fabric4 那么IPC和跨机的Fabric通信区别在哪里4.1 共同流程IPC 和 Fabric 都一样4.2 区别4.3 IPC 模式其实就是用了HIP API实现了共享显存的原理1. 分配显存2. 导出句柄64 字节3. 交换句柄控制面4. 对端打开句柄5. 限制4.4 Fabric 模式其实就是用了hsa的api实现了共享显存1. 分配显存2. 导出句柄256 字节3. 交换句柄控制面4. 对端 attach 句柄5. 能力4.5 区别对比表格4.6 IPC 那套 API 属于谁4.7 Fabric 那套 API 属于谁5 什么是HSAHSA 是什么HSA Runtime 是什么和 HIP 是什么关系abstract:heterogeneous 英/ ˌhetərəˈdʒiːniəs / 有很多种类组成的化不均一的多相的数不纯一的参差的, 这里是异构的意思fabric 英/ ˈfæbrɪk / 布料织物构造结构汽车的车身飞机的机身 这里是Fabric 在此指超节点 GPU 互联结构跨节点 CAR 通过 HSA RPC Fabric API 完成显存导出与映射而不是普通以太网/IB 发包。一句话概括Custom AllReduce 的快路径都是通过共享/映射 GPU 显存完成通信——节点内靠 HIP或 CUDAIPC 句柄跨节点超节点靠 HSA Fabric 句柄差别主要在用什么 API 导出和打开显存句柄。HSA Heterogeneous System Architecture异构系统架构1 为什么有custom_all_reduceCustom AllReduce 是 vLLM 为 Tensor Parallel 场景实现的一条专用 AllReduce 快路径。在满足条件时它不经过 PyNccl/RCCL 这类通用集体通信而是通过 vLLM 自研的 GPU 核函数vllm._custom_ops配合 GPU 显存 IPC/P2P 直连来完成求和条件不满足时会自动回退到 NCCL/RCCL。具体代码路径在 vllm/distributed/device_communicators/custom_all_reduce.py2 节点内的Custom AllReduce2.1 节点内的Custom AllReduce大体原理控制面用torch.distributednon-NCCL 的cpu_group一般是 Gloo交换 IPC handle数据面用 vLLM 自研 C 扩展vllm._custom_ops通过 CUDA IPC / HIP IPC 让同机 GPU 直接访问彼此显存计算自定义 all-reduce kernel 在 GPU 上直接做 reduce关键代码def create_shared_buffer(...): pointer, handle ops.allocate_shared_buffer_and_handle(size_in_bytes) ... dist.all_gather_object(handles, handle, groupgroup) # 控制面交换 handle ... pointers.append(ops.open_mem_handle(h)) # 数据面打开对端显存以及真正执行 reduceops.all_reduce(self._ptr, inp, out, 0, 0) # 自定义 kernel不是 torch2.2 IPCHIP IPC你的 GPU 显存 ──transport── 别的 GPU 能直接读到这块显存 ── kernel 做 reduce项目说明全称Inter-Process CommunicationGPU 显存句柄共享范围同一台物理机同一 OS、同一 shared-memory namespace原理本机 GPU A 导出显存 handle64 字节GPU B 用open_mem_handle打开直接访问 A 的显存谁在用vLLM 原版、aiter 同节点模式限制跨物理机不行——两台服务器之间没法用 IPCIPC 确实是「进程间通信」你没理解错。IPC Inter-Process Communication进程间通信。在 CAR 这里它特指的是 GPU 显存的 IPCHIP IPC / CUDA IPC不是泛指 socket、MPI 那种通用进程通信进程 AGPU0 导出显存 handle↓进程 BGPU1 打开 handle直接访问 GPU0 的显存所以名字上是进程间通信实现上是 GPU 显存句柄共享 直连访问范围上同一台物理机同一 OS、同一 shared-memory namespace3 跨节点的Custom AllReduce3.1 跨节点的Custom AllReduce大体原理aiter 在同样思路上做了超节点扩展数据面多了一条 Fabric 路径transport数据面适用场景ipcHIP IPC和 vLLM 类似同节点fabricHSA RPC / Fabric 显存共享跨节点超节点auto同节点 IPC跨节点 Fabric自动选择aiter 初始化时会选 transportif self.requested_transport ipc: if not same_node: return # 跨节点不能用 IPC self.transport ipc elif self.requested_transport auto: self.transport ipc if same_node else fabric else: self.transport fabric # 强制超节点 Fabric3.2 FabricHSA RPC Fabric项目说明范围跨物理机超节点多台服务器通过专用互联原理用hsa_ext_rpc_memory_create/attach/detach做跨节点显存导出和映射handle 大小256 字节IPC 是 64 字节谁在用aiter 超节点模式前提编译时AITER_ENABLE_SUPERNODE_AR1运行时AITER_AR_TRANSPORTfabricFabric 也是「共享显存」思路只是跨了物理机可以这么理解Fabric 把「导出显存 → 对端 attach → 直接访问」这套模型从单机扩展到了跨节点。aiter 文档里写得很直白层次做什么跨节点内存导出/映射hsa_ext_rpc_memory_create/attach/detach实际 AllReducekernel 直接访问 Fabric 映射后的地址4 那么IPC和跨机的Fabric通信区别在哪里4.1 共同流程IPC 和 Fabric 都一样1. 每个 rank 在本机 GPU 上分配一块显存2. 每个 rank 把这块显存「导出」成一个 handle句柄3. 通过控制面把 handle 发给所有 rankTCPStore / torch.distributed4. 每个 rank 用对端 handle「打开/attach」得到本进程里可访问的指针5. kernel 直接通过这些指针 读/写 远端显存完成 all-reduce4.2 区别其实本质区别就在于怎么把本机 GPU 显存「导出」成句柄以及别的 rank 怎么「打开/attach」这个句柄拿到可访问的地址。其实往下看就能知道它们两者相当于用了不同的api去实现了共享显存4.3 IPC 模式其实就是用了HIP API实现了共享显存的原理1. 分配显存hipMalloc / hipExtMallocWithFlags(...) // 本机 GPU 显存2. 导出句柄64 字节hipIpcGetMemHandle(handle, gpu_ptr)得到hipIpcMemHandle_t64 字节描述「这块本机 GPU 显存」。vLLM 里对应custom_all_reduce.cuLines 167-174// Create IPC memhandle for the allocated buffer.cudaIpcGetMemHandle((cudaIpcMemHandle_t*)handle.data_ptr(), buffer);3. 交换句柄控制面dist.all_gather_object(handles, handle, groupgroup) # vLLM# 或 aiter 用 TCPStore pickle 交换4. 对端打开句柄hipIpcOpenMemHandle(mapped_ptr, peer_handle, hipIpcMemLazyEnablePeerAccess)在本进程地址空间里映射到同一台机器上另一块 GPU 的显存。5. 限制必须同一物理机同一 OS、同一 shared-memory namespace依赖 GPU P2P / XGMI跨物理机时hipIpcOpenMemHandle无效4.4 Fabric 模式其实就是用了hsa的api实现了共享显存1. 分配显存hipExtMallocWithFlags(..., hipDeviceMallocUncached) // 或 finegrained要求这块显存可被 Fabric 导出。2. 导出句柄256 字节hsa_ext_rpc_memory_create(gpu_ptr, size, fabric_handle)得到hsa_ext_rpc_memory_t256 字节不是 HIP IPC handle。aiter 源码custom_all_reduce.cu Lines 404-425void get_meta_buffer_handle(..., transport) { if (transport IPC) hipIpcGetMemHandle(...); // 64 字节 else hsa_ext_rpc_memory_create(...); // 256 字节 }3. 交换句柄控制面和 IPC 同一套机制aiter 的_gather_ipc_meta走 TCPStore只是 handle 更大、内容不同。4. 对端 attach 句柄hsa_ext_rpc_memory_attach(fabric_handle, 1, fabric_agent, mapped_ptr)通过 HSA RPC Fabric agent把远端物理机 GPU 显存映射到本机可访问地址。aiter C 里custom_all_reduce.cuh Lines 2623-2646char* open_peer_handle(const void* handle) { if (transport IPC) return open_ipc_handle(handle); // hipIpcOpenMemHandle // Fabric: hsa_ext_rpc_memory_attach(fabric_handle, 1, fabric_agent_, mapped_ptr); return mapped_ptr; }5. 能力可跨物理机超节点专用互联需要编译AITER_ENABLE_SUPERNODE_AR1需要链libhsa-runtime644.5 区别对比表格步骤IPCFabric分配显存hipMalloc/ uncacheduncached / finegrained导出 APIhipIpcGetMemHandlehsa_ext_rpc_memory_create句柄类型hipIpcMemHandle_t64Bhsa_ext_rpc_memory_t256B句柄交换TCPStore / all_gather一样打开 APIhipIpcOpenMemHandlehsa_ext_rpc_memory_attach映射结果同机另一 GPU 显存地址跨机远端 GPU 显存地址范围单机多机超节点4.6 IPC 那套 API 属于谁属于 HIPROCm 运行时不是 aiter 自己的 API。API所属库hipMalloc/hipExtMallocWithFlagsHIP Runtimelibamdhip64hipIpcGetMemHandleHIP IPC API仍在 HIP/ROCm 里hipIpcOpenMemHandleHIP IPC API在 NVIDIA 上vLLM 用的是同一思路的 CUDA Runtime APIcudaMalloccudaIpcGetMemHandlecudaIpcOpenMemHandle4.7 Fabric 那套 API 属于谁不属于 aiter属于 HSA Runtimelibhsa-runtime64 的超节点扩展 API。API所属库hsa_ext_rpc_memory_createHSA RPC Fabric 扩展hsa_ext_rpc_memory_attachHSA RPC Fabric 扩展hsa_ext_rpc_memory_detachHSA RPC Fabric 扩展hsa_iterate_agents等标准 HSA Runtimeaiter 文档写得很清楚跨节点内存导出/映射用的是hsa_ext_rpc_memory_create/attach/detach并且.so会链接libhsa-runtime64。所以 Fabric API 是 AMD超节点平台HSA Fabric 互联 提供的不是 aiter 发明的。5 什么是HSAHSA 是什么HSA Heterogeneous System Architecture异构系统架构最初由 AMD 等推动的一套规范目标是让 CPU 和 GPU以及其它加速器在同一套系统模型下协同工作包括统一的「设备/agent」抽象统一的内存与访问模型设备发现、队列、同步等运行时能力可以把它看成比 HIP 更底层的一整套「异构计算平台规范 运行时基础设施」。HSA Runtime 是什么HSA Runtime 是 HSA 规范的具体实现库在 Linux 上通常是libhsa-runtime64.so它提供的是运行时 API例如能力典型 API发现设备hsa_iterate_agents枚举 CPU、GPU 等 agent内存管理各类 HSA 内存分配/映射 API队列与同步提交任务、信号量等超节点扩展hsa_ext_rpc_memory_create/attach/detachFabric 跨节点显存你们 aiter Fabric 模式里用的hsa_ext_rpc_memory_*就是 HSA Runtime 提供的扩展 API不是 aiter 自己定义的。和 HIP 是什么关系在 AMD/海光 ROCm 生态里可以粗略看成两层你写 kernel、跑算子↓HIP ← 类似 CUDA日常开发主要用这个↓HSA Runtime ← 更底层管 agent、部分内存/互联能力↓驱动 / 硬件HIPHSA Runtime角色GPU 编程接口写 kernel、malloc 显存异构系统运行时设备模型、底层互联类比CUDA比 CUDA Driver 更「系统级」的一层开发者经常直接写多数时候不直接写库/驱动会调在你们场景IPC 用hipIpcGetMemHandleFabric 用hsa_ext_rpc_memory_*所以IPC走 HIP 自己的同机显存句柄机制Fabric跨机时 HIP IPC 不够要借助 HSA Runtime 的 Fabric/RPC 内存扩展
延伸阅读

更多相关文章

2026/10/26 20:26:06

终极Wand增强工具:3种简单方案永久解锁游戏修改体验

终极Wand增强工具:3种简单方案永久解锁游戏修改体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer WandEnhancer是一款专注于本地客户…

2026/10/31 6:23:31

STM32CubeMX入门到实战:HAL库、SPI读写Flash与FreeRTOS集成指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 6:23:31

无线射频接收芯片选型:超外差ASK方案XL420性价比与量产实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 6:23:31

MIPI多路合一技术解析:从协议基础到FPGA实现与RK3588适配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 6:23:31

ESP32物联网开发:高效获取参考设计的优先级路线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 6:23:31

具身智能机器人控制器选型:国产DSP从评估到量产实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 6:18:31

使用Z.ai平台Vibe Coding开发HTML5贪吃蛇游戏实践

1. 项目概述:用Z.ai实现贪吃蛇游戏的Vibe Coding初体验最近在技术社区里,"Vibe Coding"这个概念越来越火。简单来说,这是一种通过自然语言描述需求,让AI自动生成代码的新型开发方式。作为一名长期关注AI辅助编程的开发者…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑