HIXL 单边通信库概述:昇腾集群零拷贝点对点传输与 LLM 推理 PD 分离架构解析
【免费下载链接】hixlHIXL(Huawei Xfer Library)是一个灵活、高效的昇腾单边通信库,面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl
导读
本文基于 CANN/hixl 开源仓库的 C++ 开发指南「概述」章节,系统讲解昇腾单边通信库(HIXL)的核心定位、三大核心优势、软件架构及其在大模型推理 PD 分离场景中的典型应用。读完本文,你将理解 HIXL 与 LLM-DataDist 的分工关系,掌握单边零拷贝通信、多链路高速互联的底层设计逻辑,并能在 C++ 开发指南 的后续章节中快速定位建链、内存管理、KV Cache 传输等实战开发入口。
单边通信库是什么:面向集群场景的点对点数据传输底座
HIXL(Huawei Xfer Library)是面向集群场景提供的单边通信库,其核心能力是简单、可靠、高效的点对点数据传输,并通过简易 API 开放给用户。它在多 AI 应用与多传输链路之间建立了桥梁,可用于构建大模型 PD 分离、RL 后训练参数切换、模型参数缓存等多种业务场景。
从仓库源码结构看,这一"底座"定位非常清晰:include/hixl/hixl.h暴露的Hixl类只承载最基础的能力——初始化(Initialize)、建链/断链(Connect/Disconnect)、内存注册/解注册(RegisterMem/DeregisterMem)与内存传输(TransferSync/TransferAsync),配合include/hixl/hixl_types.h中定义的内存描述符(MemDesc)、传输描述符(TransferOpDesc)等数据结构,构成一套纯粹基于"本地地址 + 远端地址"的传输接口,不携带任何上层业务语义。而带 KV Cache 语义的接口则由基于 HIXL Engine 构建的 LLM-DataDist 层提供(见 include/llm_datadist/llm_datadist.h)。
核心优势一:单边零拷贝通信机制
单边通信库提供**单边零拷贝(One-Sided Zero-Copy)**通信机制:在本地内存数据准备就绪之后,通过单边操作即可完成向远端内存的直接数据传输,整个过程无需远端节点执行任何操作。这一特性为构建"通信与计算重叠掩盖"的调度机制提供了核心技术支撑——发送方无需等待对端参与即可完成数据搬移,通信过程可以与对端计算完全并行。
零拷贝能力的价值在于实现用户内存间的直接数据传输,避免冗余数据搬运。其直接收益有两点:
- 降低内存带宽占用:数据不经由中间缓冲的多次拷贝,省去了额外的带宽消耗;
- 减少内存容量消耗:不需要为传输额外分配拷贝缓冲,内存利用率更高。
在源码层面,TransferSync与TransferAsync接口以TransferOp(READ/WRITE)区分方向:READ表示从远端地址读取内存到本地,WRITE表示将本地内存推送到远端地址,两者均只描述"本地地址—远端地址—长度"三元组(见 include/hixl/hixl_types.h 中TransferOpDesc结构),这正是"单边"语义在接口设计上的直接体现。
核心优势二:屏蔽硬件差异,多链路跨设备高速互联
单边通信库屏蔽了昇腾系列芯片的底层硬件差异,用户无需针对不同芯片架构进行代码适配。在通信链路层面,该技术原生支持 RDMA、HCCS 等多种高速互联协议,官方文档标注通信带宽最高可达119GB/s,可实现跨架构设备的无缝高速互联,满足低时延、高吞吐的需求。
这一设计在仓库实现中同样有迹可循:src/hixl/engine/目录下同时存在hixl_engine.cc、comm_engine.cc、direct_client_handler.cc、direct_multi_channel_handler.cc、ub_client_handler.cc等实现,分别面向不同传输通道与协议场景进行统一封装,对外则收敛为Hixl类上极简的调用接口。多链路适配对上层完全透明,正是"屏蔽硬件差异"这一优势的工程落地。
核心优势三:极简 API 设计与开源生态深度适配
单边通信库采用极简式 API 接口设计:
- 接口数量精简至10 余个核心调用,降低开发者集成门槛;
- 提供完善的C++ / Python 语言接口支持;
- 已实现与Mooncake、DeepLink等开源框架的深度集成;
- vLLM、SGLang等主流推理引擎可以直接调用单边通信库 API 完成 KV Cache 的跨设备高效传输,官方文档标注可将大模型推理过程中的内存访问延迟降低 20%,提升推理吞吐。
从 include/hixl/hixl.h 可以看到,Hixl类的公开接口确实收敛在 20 个以内,除基础能力外仅额外提供SendNotify/GetNotifies(节点间通知)、GetCapability(能力特性查询,如AUTO_CONNECT、CLIENT_SERVER_COMM)等少量辅助接口,印证了"极简"的 API 哲学。Python 侧则通过 src/python/hixl_py/hixl_py.cc 以 Pybind 方式暴露同构接口,供 examples/python 下的 Python 样例直接调用。
软件架构:HIXL Engine 与 LLM-DataDist 的分工
单边通信库的软件架构如下图所示(图 1):
单边通信库软件架构图
架构自底向上可以拆分为两个核心组件:
HIXL Engine:核心传输引擎
- 提供基础传输接口,支持多种内存类型传输,包括 D2D、D2H、H2D 等;
- 兼容多种传输协议,包括 HCCS、RDMA 等,可实现高速、可靠的数据传输;
- 原生支持多类型数据链路,可适用于同构集群和异构集群的复杂场景;
- 面对集群节点动态扩缩容需求时,可高效完成链路适配与资源调度,为集群整体运行构建可靠通信基础。
从源码看,Hixl引擎还支持通过options参数进行灵活配置,例如 include/hixl/hixl_types.h 中定义的OPTION_ENABLE_USE_FABRIC_MEM(Atlas A3 系列上使用 HCCS 进行 D2RH/RH2D 传输时开启以获得最佳性能)、OPTION_BUFFER_POOL(中转传输内存池配置)、OPTION_AUTO_CONNECT(自动建链)、OPTION_LOCAL_COMM_RES(本地通信资源)等,均为开发阶段按需调整的入口。
LLM-DataDist:携带 KV Cache 语义的数据传输层
- 基于 HIXL Engine 构建,提供一套携带 KV Cache 语义的数据传输接口;
- 可快速、灵活对接 vLLM、SGLang 等推理引擎。
其在 include/llm_datadist/llm_datadist.h 中体现为LlmDataDist类,围绕RegisterKvCache/UnregisterKvCache、PullKvCache/PushKvCache、PullKvBlocks/PushKvBlocks等接口组织,同时提供LinkLlmClusters/UnLinkLlmClusters集群级建链/断链能力与SetRole角色切换能力。两层的典型分工是:HIXL 负责"内存"级别的通用传输,LLM-DataDist 负责"KV Cache"级别的业务语义传输,上层推理引擎只需面对后者即可完成 PD 之间的数据协同。
应用场景:基于单边通信库构建大模型推理 PD 分离式框架
单边通信库最具代表性的应用场景是构建大模型推理 PD 分离式框架。在基于 KV Cache 的大模型推理中(完整流程参见 大模型推理流程简介):
- Prefill 阶段:将用户请求 Prompt 传入大模型进行计算,中间结果写入 KV Cache 并推理出第 1 个 token;
- Decode 阶段:将请求的前 1 个 token 传入大模型,从显存读取前文产生的 KV Cache 再进行计算。
PD 分离式框架为了提升性能和资源利用效率,将 Prefill 和 Decode 分别部署在不同规格和架构的集群中(其动机详见 为什么要做 PD 分离)。此时,Prefill 阶段生成的 KV Cache 需要高效传输到 Decode 侧,Decode 再基于这些缓存进行增量迭代推理。
单边通信库正是充当大模型分布式集群和数据管理组件:它通过简易的 API 开放给用户,提供 Prefill Node 和 Decode Node 之间的KV Cache 传输及链路管理,整体框架如下图所示(图 2):
PD分离式推理框架中的KV Cache传输与链路管理
在该场景中,LLM-DataDist 以集群(cluster_id)和角色(role,分为 Prefill 与 Decoder)为维度组织链路:Decode 侧通过cluster_id找到对应链路,进而定位 Prefill 侧缓存的对应请求 KV Cache。与之配套的基础概念,如 D2D/D2H/H2D 传输方向、TTFT/TBT 指标、PagedAttention 与 block_table、集群动态扩缩容等,均收录在 附录·基本概念 的术语表中,可作为理解本文场景的补充材料。
从概述到实战:开发指南与完整样例
理解架构之后,可以在同一份 C++ 开发指南中按章节深入实战:
- 学习向导:按角色和知识层次规划学习路径;
- HIXL 开发:讲解
Initialize/Connect/Disconnect建链断链、RegisterMem/DeregisterMem/TransferSync内存管理与传输、以及BufferPool中转传输,包含可直接运行的 C++ 代码示例; - LLM-DataDist 开发:讲解
LinkLlmClusters建链、RegisterKvCache/PullKvCache/PushKvCache与PullKvBlocks/PushKvBlocks的 KV Cache 管理、以及SetRole角色切换,覆盖一般 Cache 传输与 Blocks Cache 传输两种场景; - 接口参考 → 即 docs/zh/api/cpp/README.md:查阅 HIXL 与 LLM-DataDist 的完整接口说明与错误码。
仓库中还提供了配套的完整样例与测试,便于对照验证:
- examples/cpp:包含
hixl_example_quickstart.cpp、hixl_example_d2rd.cpp、prompt_pull_cache_and_blocks.cpp、prompt_push_cache_and_blocks.cpp、decoder_pull_cache_and_blocks.cpp、decoder_push_cache_and_blocks.cpp、decoder_switch_roles.cpp等,覆盖传输、PD 分离、Blocks Cache 与角色切换等典型用法; - examples/python:提供
pull_cache_sample.py、push_cache_sample.py、pull_blocks_sample.py、switch_role_sample.py等 Python 侧样例; - tests/cpp/hixl/engine/hixl_api_unittest.cc:API 级单元测试,可辅助理解接口的调用约定与预期行为。
总结
HIXL 单边通信库以"单边零拷贝、多链路高速互联、极简 API"三项核心优势,为昇腾集群场景提供了通用的点对点数据传输底座;在其之上,LLM-DataDist 以 KV Cache 语义接口支撑起大模型推理 PD 分离框架的缓存传输与链路管理。对于希望将昇腾设备接入 vLLM、SGLang、Mooncake 等开源生态的开发者而言,从 C++ 开发指南 的概述、开发章节到仓库中的 examples 与测试用例,构成了一条从架构认知到代码实践的完整路径。
【免费下载链接】hixlHIXL(Huawei Xfer Library)是一个灵活、高效的昇腾单边通信库,面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考