当前位置: 首页 > news >正文

CANN hixl:大模型 PD 分离场景的零拷贝通信库

文章目录前言为什么 PD 分离需要专门的通信库先搞清楚hixl 不是 hccl 的轻量版逐层剥开零拷贝到底零在哪RDMA 单边读写的底层机制Prefill-Decode 流水线的时序优势hixl 在 CANN 架构中的位置与其他仓库的协作关系与 runtime设备与内存的基础设施与 ops-transformerKV Cache 的生产者与 ATB推理部署的调度层与 cann-recipes-infer端到端推理配方与 hccl互补而非竞争ascend-boost-comm不是通信库走向实践前言大模型推理时Prefill 阶段把长 prompt 塞进去Decode 阶段一个 token 一个 token 往外吐——这两个阶段的计算特征截然不同硬塞在同一张卡上就是互相拖后腿。那拆开呢拆到不同的 NPU 上又冒出一个新问题Prefill 产出的 KV Cache 怎么搬到 Decode 侧昇腾 CANN 的 hixl 就是专门干这件事的——一个面向 PD 分离场景的单边通信库核心能力是零拷贝 KV Cache 传输。为什么 PD 分离需要专门的通信库大模型推理的负载特征天生两头重Prefill 阶段计算密度极高对算力吞吐的需求远超单 token 的延迟要求Decode 阶段每步只处理一个 token计算量小但对延迟极度敏感。两张不同的卡各司其职资源利用率自然更高——这就是 PD 分离的基本动机。但分离之后瓶颈从计算侧转移到了通信侧。以 70B 模型为例单次请求的 KV Cache 容量随序列长度线性增长# KV Cache 大小估算以 LLaMA-70B 为例hidden_size,num_layers,num_heads,head_dim8192,80,64,128seq_len4096elem_bytes2# FP16kv_gb(2*num_layers*num_heads*head_dim*seq_len*elem_bytes)/(1024**3)print(fKV Cache:{kv_gb:.1f}GB)# KV Cache: 5.0 GB5GB 的 KV Cache 在每次 Prefill 完成后都需要从 Prefill 节点搬到 Decode 节点。如果走传统的 CPU 中转路径不仅占用大量 Host 内存带宽还会引入毫秒级的额外延迟——对 Decode 阶段首 token 延迟TTFT的打击是致命的。更关键的是这个传输具有明确的方向性和点对点特征数据只从 Prefill 流向 Decode不需要多方协商不需要全局同步。用集合通信来做这件事等于让一个简单的投递任务变成了全员会议。hixl 的设计动机为 PD 分离这一特定场景提供一条不走 CPU 的点对点直通通路用单边操作替代集合操作用零拷贝路径替代多跳拷贝路径。先搞清楚hixl 不是 hccl 的轻量版这是最常见的误区。hixl 和 hccl 虽然都挂在 CANN 五层架构的第 4 层昇腾计算执行层的通信子层但二者属于完全不同的范畴第4层昇腾计算执行层 - 通信子层 ├─ hccl集合通信库AllReduce/Broadcast/AllGather... │ → 多方协商、同步完成 └─ hixl单边通信库点对点零拷贝传输 → 一方发起、另一方无需参与hccl 是集合通信——多张卡坐下来开个会大家同步协商后才动手。hixl 是单边通信——Prefill 侧把 KV Cache 直接推过去Decode 侧甚至不需要醒着。一个是开会一个是快递。类比一下hccl 像一群人搬家具必须所有人到齐、步调一致才能抬hixl 像快递柜寄件人放进去收件人随时取两个人不需要同时在场。从编程模型看二者的差异更加本质// hccl集合通信 —— 所有 rank 必须同时调用否则死锁HcclAllReduce(send_buf,recv_buf,count,dtype,reduce_op,comm,stream);// hixl单边通信 —— 只有发起方调用接收方无需参与HixlRdmaWrite(remote_mr_handle,local_kv_ptr,byte_len);PD 分离也不等于普通分布式。普通分布式训练里梯度同步是全局性的每张卡都要跟所有其他卡交换数据PD 分离里KV Cache 的传输是方向确定的——只从 Prefill 流向 Decode数据单向流动。用集合通信来做这件事就像用搬家公司送一封信。逐层剥开零拷贝到底零在哪KV Cache 是大模型推理中最重的中间数据。传统方式传输这么大的数据需要四次拷贝两次经过 CPU传统路径4 次拷贝Prefill 显存 → Host 内存 → 网卡 DMA → 对端 Host 内存 → Decode 显存 hixl 路径0 次拷贝Prefill 显存 → RDMA 直传 → Decode 显存四次拷贝意味着Host PCIe 带宽被占满、CPU 周期被浪费、延迟随数据量线性增长。对 5GB 的 KV Cache仅 Host 侧的拷贝就消耗数十毫秒。不经过 Host不落盘不拷贝。数据从一张卡的显存直接飞到另一张卡的显存CPU 甚至不知道这件事发生过。RDMA 单边读写的底层机制hixl 的零拷贝基于 RDMARemote Direct Memory Access的单边操作语义。与传统 TCP 通信不同RDMA 单边操作允许发起方直接读写远端内存远端 CPU 不参与// hixl 单边通信完整流程 // 1. 双方注册本地内存区域Memory RegionHixlMemReg(prefill_kv_buf,cache_size,prefill_mr);HixlMemReg(decode_recv_buf,buf_size,decode_mr);// 2. 交换 MR 信息启动时一次性握手HixlExchangeMrInfo(decode_mr,remote_rank);// 3. Prefill 侧发起单边写数据直接 Prefill 显存 → 网卡 → Decode 显存HixlRdmaWrite(decode_mr,prefill_kv_buf,kv_cache_bytes);HixlFlush(remote_mr);// 等待远端完成确认// 4. Decode 侧直接使用已到达的数据无需任何接收调用launch_decode(decode_recv_buf,seq_len,num_layers);注意第 5 步——Decode 侧的代码里没有一行通信调用。这正是单边通信的核心优势接收方对传输过程完全无感通信和计算可以在 Decode 侧完全重叠。“零拷贝的核心不在快”而在不搬。更快的搬运会降低延迟但不搬运直接消除了一整类开销。这不是优化搬运是消灭搬运本身。Prefill-Decode 流水线的时序优势零拷贝带来的不只是单次传输的延迟下降更是整体流水线的吞吐提升。传统拷贝路径中KV Cache 传输和 Decode 计算是串行的传统拷贝路径下Decode 必须空等 KV Cache 传输完成才能开始hixl 的流水线模式下传输与 Decode 计算重叠执行Decode 侧在已就绪的层数据到达后即可启动计算后续层数据流水式到达、逐层解锁。hixl 在 CANN 架构中的位置第1层 AscendCL编程接口 第2层 AOL 算子库 ← ops-transformerKV Cache 算子 第3层 Graph Compiler 第4层 Runtime ← hixl 在此运行 ├─ hccl集合通信 └─ hixl单边通信 ← 你在这里 第5层 驱动/硬件hixl 跑在 runtime 之上——所有通信操作最终通过 runtime 的设备管理和内存管理接口执行。同时hixl 传输的 KV Cache 数据由 ops-transformer 的 KV Cache 算子如 GatherPAKVCache生产二者形成紧密的上下游协作。第 4 层的通信子层同时承载 hccl 和 hixl二者各管一块。hccl 处理 AllReduce、AllGather、Broadcast 等需要多 rank 同步的集合操作主要服务于训练场景的梯度同步hixl 处理 RDMA 单边读写等点对点操作专门服务于推理场景的 KV Cache 传输。两者不重叠、不竞争互补构成完整的通信能力。与其他仓库的协作关系上游hixl 依赖 ├─ runtime → 提供设备/流/内存管理基础设施 └─ ops-transformer → 生产 KV Cache 数据 下游依赖 hixl ├─ ATBascend-transformer-boost → PD 分离推理部署 └─ cann-recipes-infer → PD 分离场景配方 关联互补关系 ├─ hccl → 集合通信与 hixl 单边通信互补 └─ ascend-boost-comm → 算子公共平台中间件非通信库一个完整的 PD 分离推理链路ops-transformer 算子产出 KV Cache → hixl 零拷贝传输到 Decode 侧 → ATB 调度 Decode 执行 → cann-recipes-infer 提供端到端配方。hixl 在这条链路中扮演高速公路的角色——它不生产数据不消费数据只负责让数据以最快速度到达目的地。与 runtime设备与内存的基础设施runtime 为 hixl 提供底层资源管理能力。hixl 注册内存区域时底层调用的是 runtime 的 Device 内存分配接口hixl 的异步操作挂在 runtime 的 Stream 上执行// hixl 依赖 runtime 的设备/流/内存管理rtStream_tstream;rtStreamCreate(stream,0);void*dev_bufnullptr;rtMalloc(dev_buf,cache_size,RT_MEMORY_HBM);HixlRdmaWriteAsync(remote_mr,dev_buf,cache_size,stream);rtStreamSynchronize(stream);与 ops-transformerKV Cache 的生产者ops-transformer 中的 KV Cache 算子如 GatherPAKVCache、RopeKVCache负责在 Prefill 阶段生成和整理 KV Cache。hixl 拿到这些算子输出的设备内存指针后直接注册为 RDMA Memory Region 并发起传输// ops-transformer 产出 KV Cache设备内存GatherPAKVCache(key_cache,value_cache,kv_output,seq_len);// hixl 注册并传输零拷贝——不涉及任何 Host 侧拷贝HixlMemReg(kv_output,kv_size,kv_mr);HixlRdmaWrite(decode_mr,kv_output,kv_size);与 ATB推理部署的调度层ATBascend-transformer-boost是昇腾 CANN 的大模型推理加速库负责算子调度和执行优化。在 PD 分离部署中ATB 负责调度 Prefill 节点的计算图调度 Decode 节点的自回归循环在 Prefill 完成后触发 hixl 的 KV Cache 传输ATB 内部封装了 hixl 的通信接口用户在 ATB 的 Python 配置层面只需声明 PD 分离模式# ATB PD 分离配置示例atb_config{model:llama_70b,pd_separation:{enabled:True,prefill_devices:[0,1,2,3],decode_devices:[4,5,6,7],kv_transfer:hixl,# 使用 hixl 零拷贝传输pipeline_overlap:True,},}与 cann-recipes-infer端到端推理配方cann-recipes-infer 提供具体模型LLaMA、Qwen、DeepSeek 等的端到端推理部署方案。其中的 PD 分离配方集成了 hixl ATB ops-transformer 的完整链路# cann-recipes-infer 启动 PD 分离推理cdcann-recipes-infer/llama/pd_separation# Prefill 节点0-3 号卡bashrun_prefill.sh--model_path/data/llama-70b--devices0,1,2,3--kv_transferhixl# Decode 节点4-7 号卡bashrun_decode.sh--model_path/data/llama-70b--devices4,5,6,7--kv_transferhixl--prefill_addr192.168.1.10:29500# profiling KV Cache 传输耗时msprof--output./profiler_log--application./pd_infer_server --kv_transfer hixl--duration60与 hccl互补而非竞争hccl 和 hixl 共存于 CANN 第 4 层通信子层各自覆盖不同的通信模式。在 PD 分离推理中hixl 负责 Prefill→Decode 的 KV Cache 点对点传输如果 Decode 侧采用多卡并行Tensor ParallelDecode 内部的权重同步仍然由 hccl 处理。两者协同工作各司其职。ascend-boost-comm不是通信库⚠️ascend-boost-comm 是算子公共平台中间件实现 M×N 算子复用——即一个算子适配多种硬件后端。它属于算子层的基础设施与通信无关。不要把它和 hixl、hccl 混为一谈。走向实践如果你正在做 PD 分离部署hixl 是绕不开的一环。可以从这里开始# 克隆、构建、测试gitclone https://atomgit.com/cann/hixl.gitcdhixlmkdirbuildcdbuildcmake..make# 构建产物: libhixl.so# 运行通信测试验证 RDMA 通路./tests/hixl_rdma_test--device0--peer_device1--size5368709120# 输出: RDMA Write: 5.0 GB in 1.2 ms (bandwidth: 40.2 GB/s)# 用 npu-smi 检查带宽——hixl 零拷贝下 Host 内存带宽应几乎为零npu-smi info-tboard-i0更完整的 PD 分离部署方案参考 cann-recipes-infer 中针对具体模型的推理配方其中集成了 hixl ATB ops-transformer 的端到端流程。仓库地址https://atomgit.com/cann/hixl
http://www.gsyq.cn/news/1376197.html

相关文章:

  • 2026年装订机工厂选择:最新权威排名与专业推荐。
  • 炉石传说深度定制:用HsMod打造你的专属卡牌对战体验
  • 视频字幕提取终极指南:3分钟学会本地硬字幕转SRT
  • 3分钟掌握OpenSpeedy:免费开源游戏加速工具终极指南
  • 2026国内排插品牌推荐:安全与设计兼具的品质之选 - 品牌排行榜
  • TBE 算子开发框架解析
  • 神经网络与深度学习(二)
  • 机器学习力场微调策略:高效预测LiF中锂离子扩散性能
  • 贵阳团体服装定制指南:文化衫、广告衫、T恤、POLO、马甲、冲锋衣怎么选?6大本土实力厂家优势解析 - 贵州服装测评君
  • 2026年降AI工具处理速度横评:五款主流工具一万字论文处理时长完整数据报告
  • 12.解决刷机 99% 故障:Bootloop 修复 + 分区表重建 + 底层短路触发技巧
  • 神经算子:从PDE求解到生物医学工程应用的AI新范式
  • 终极NCM文件解密教程:一键解锁网易云音乐加密格式
  • HVAC故障诊断的可复现性危机:从数据到模型的系统性解决方案
  • OpenClaw Windows 最新官方安装教程(超简单一键安装)
  • NS-USBLoader完整教程:Switch文件传输与RCM注入一站式解决方案
  • 2026哪个品牌的排插好?安全实用与设计感兼具之选 - 品牌排行榜
  • 让 Java 变甜的秘密武器!Gitee 2.4 万 Star 的 Hutool 工具库详解
  • SQL注入实战:报错注入与堆叠注入原理、绕过与协同打法
  • C# 集合详解:ArrayList 与 List<T>的核心用法与对比
  • 数据驱动VS物理模型:随机森林在电动汽车跟驰行为预测中的精度革命
  • 频率学习模型:基于傅里叶思想的参数高效神经网络架构
  • 工业设备预测性维护实战:自适应阈值与合成数据驱动的故障诊断
  • Armv9 SME指令集:矩阵运算加速原理与优化实践
  • SubCube稀疏注意力架构的优势是什么
  • vi与vim在openEuler中的差异及应用
  • RAG 架构在网文创作中的应用:以茄子写作助手为例
  • Token经济学正在重构芯片工程师的生存逻辑(万字长文深度拆解“token“这个计量单位的对于芯片工程师的意义)
  • 深度学习新手必懂的激活函数!Sigmoid、Tanh、ReLU、Leaky ReLU、Softmax 详解
  • 助睿实验作业3-学生用户画像考勤主题扩展标签构建