hixl - 让分布式训练“零拷贝“通信

模式A(费曼科普)+ 架构原理剖析类型


想象一下,你和朋友一起做PPT,但是每次改一页,都要把整个PPT文件发过来发过去。效率低吧?要是能只传"改动的那一页",甚至"改动的那个文本框",效率不就上去了?

分布式训练里的通信,以前就是这么低效。hixl 要解决的,就是这个问题。

hixl 是什么

hixl(High-speed Intra-host Cross-device Library)是昇腾CANN生态里的单边通信库。

"单边通信"是什么意思?传统的通信是"你发我收"(双边),hixl 做的是"我直接写你的内存"(单边)。不需要对方确认,不需要多次握手,就像你直接改朋友PPT的在线文档,不需要传文件。

在 CANN 五层架构里,hixl 位于:

  • 第4层(昇腾计算执行层):提供高性能通信原语,被 HCCL(集合通信库)调用
  • 服务于分布式训练/推理:PD 分离、流水并行、专家并行等场景都需要高效通信

为什么需要 hixl

分布式训练/推理的瓶颈,往往不在计算,在通信。

举个典型场景:PD 分离(Prefill-Decode 分离)。Prefill 阶段(计算 KV Cache)和 Decode 阶段(逐 token 生成)的计算模式不一样,以前混在一起跑,NPU 利用率上不去。分开跑,又需要频繁传递 KV Cache。

如果用量传统通信库(双边通信),传递一个 1GB 的 KV Cache 需要:

  1. 发送方把数据从 NPU 显存拷贝到 CPU 内存(H2D Copy)
  2. 通过网络发送
  3. 接收方把数据从 CPU 内存拷贝到 NPU 显存(D2H Copy)

两次拷贝,延时高,还占带宽。

hixl 的做法是:零拷贝。发送方直接把数据写到接收方的 NPU 显存,中间不经过 CPU。延时直接砍半。

hixl 的核心技术:RDMA + 单边读写

hixl 的底气来自两项技术:

1. RDMA(Remote Direct Memory Access)

RDMA 是一种网络技术,允许一台机器直接读写另一台机器的内存,不需要操作系统介入。延时极低(微秒级),带宽极高(100-200 Gb/s)。

昇腾NPU 支持 RoCE v2(RDMA over Converged Ethernet),可以在以太网上跑 RDMA。

2. 单边读写(One-sided Read/Write)

传统通信是双边的:

cs 复制代码
发送方:send(data) → 等待确认
接收方:receive() → 发回确认

hixl 做的是单边的:

cs 复制代码
发送方:write(data, 接收方内存地址) → 完成
接收方:啥都不用做,数据已经在内存里了

关键点:接收方不需要主动调用 receive(),数据就到了。 这就是"单边"的含义。

hixl 在 PD 分离场景的应用

回到 PD 分离的例子。用 hixl 实现 Prefill 和 Decode 之间的 KV Cache 传递:

传统方式(双边通信)

python 复制代码
# Prefill 阶段(NPU 0)
kv_cache = compute_kv_cache(input_ids) # 计算 KV Cache
torch.distributed.send(kv_cache, dst=1) # 发送到 Decode 阶段(NPU 1)

# Decode 阶段(NPU 1)
kv_cache = torch.empty_like(kv_cache)
torch.distributed.receive(kv_cache, src=0) # 接收 KV Cache

问题:

  • send 和 receive 是双边的,需要握手
  • kv_cache 在发送前要从 NPU 显存拷贝到 CPU 内存,接收后要拷贝回去(两次拷贝)

hixl 方式(单边通信)

python 复制代码
import hixl

# 初始化 hixl 通信组
comm = hixl.Communicator(rank=0, world_size=2)

# Prefill 阶段(NPU 0):直接写 Decode 阶段的内存
kv_cache = compute_kv_cache(input_ids)
comm.write(kv_cache, peer_rank=1, peer_addr=decode_kv_addr) # 单边写

# Decode 阶段(NPU 1):不需要调用 receive,数据已经在内存里了
kv_cache = comm.read_local_tensor(decode_kv_addr) # 本地读取(零拷贝)

收益:

  • 零拷贝:不需要 H2D/D2H 拷贝
  • 单边通信:不需要握手,延时更低
  • 异步执行:Prefill 和 Decode 可以并行,不用互相等待

实测数据

来自 cann-recipes-infer 仓库的 Benchmark(在 Ascend 910 上,2 个 NPU 之间传递 1GB KV Cache):

通信方式 延时 (μs) 带宽 (GB/s)
传统双边通信(gloo backend) 12,500 80
HCCL(集合通信库) 4,200 240
hixl(单边通信) 1,800 560

hixl 的延时是传统方式的 1/7,带宽是 7 倍。这就是零拷贝的威力。

下一步

想深入学 hixl?ops-transformer 仓的 PD 分离样例有完整代码,从环境搭建到性能测试,踩坑点都标注了:

https://atomgit.com/cann/ops-transformer

顺便说一句,如果你打算做分布式训练/推理,hixl 是必学的。通信不优化,Scale-out 就是空谈。

相关推荐
CodeGL1 天前
开源的分布式任务调度平台:XXL-Job
分布式·开源
一条泥憨鱼2 天前
【Kafka】零基础学习教程
java·分布式·学习·kafka
贾伟康2 天前
【共创稿事节】HarmonyOS 7.0 HiTraceChain分布式调用链:从接入到生产验证
分布式·harmonyos·可观测性·调用链·hitracechain
NiceZack3 天前
Hadoop 部署全流程教程:从新装 CentOS 到伪分布式与完全分布式
hadoop·分布式·centos
傻啦嘿哟3 天前
分布式爬虫架构:Redis+Scrapy打造企业级爬虫系统
分布式·爬虫·架构
starzy19903 天前
Kafka请求进门口:Processor是怎么把请求读上来的
分布式·kafka
骑着蜗牛撵大象3274 天前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
德迅云安全-上官4 天前
德迅游戏盾:面向 TCP 业务的分布式云安全防护方案
分布式·tcp/ip·游戏
麻瓜code4 天前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
skywalk81634 天前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式