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

DeepSeek-R1 在 CANN 上的推理部署

本文基于昇腾CANN和昇腾NPU,围绕 cann-recipes-infer 仓库的相关技术展开。

DeepSeek-R1 是个 MoE 模型——671B 总参数但每次推理只激活 37B。这对推理系统是个结构性的挑战:MoE 的路由选择和 Expert 调度依赖通信,CANN 的集合通信库 HCCL 和单边通信库 hixl 构成了 MoE 推理的通信底座。

MoE 的推理计算图

# DeepSeek-R1 的 MoE 层——路由 + Expert 计算classMoELayer(torch.nn.Module):def__init__(self,num_experts=256,top_k=8,expert_dim=4096):super().__init__()self.num_experts=num_experts self.top_k=top_k# 路由 Gate——决定每个 Token 发到哪些 Expertself.gate=torch.nn.Linear(expert_dim,num_experts,bias=False)# Expert 网络——256 个 FFN,每个是 2 层 MLPself.experts=torch.nn.ModuleList([torch.nn.Sequential(torch.nn.Linear(expert_dim,2*expert_dim*4),# SwiGLUtorch.nn.Linear(2*expert_dim*4,expert_dim),)for_inrange(num_experts)])defforward(self,x):# x: [batch * seq_len, expert_dim]B,D=x.shape# Step 1: Gate 算路由分数gate_logits=self.gate(x)# [B, 256]gate_scores=torch.softmax(gate_logits,dim=-1)# Step 2: Top-K 选择——每个 Token 选 8 个 Experttopk_weights,topk_indices=torch.topk(gate_scores,self.top_k,dim=-1)topk_weights=topk_weights/topk_weights.sum(dim=-1,keepdim=True)# Step 3: 分发 Token 到对应 Expert# 每个 Expert 收到的 Token 集合# 这步需要 All-to-All 通信——Expert 分布在不同卡上dispatched=self.dispatch_tokens(x,topk_indices)# Step 4: 每个 Expert 算自己的那部分expert_outputs=[]fori,expertinenumerate(self.experts):iflen(dispatched[i])>0:out=expert(dispatched[i])expert_outputs.append((i,out))# Step 5: 收集 Expert 输出 = All-to-All 反向通信# 把各卡 Expert 的结果收回到对应 Token 位置output=self.collect_outputs(expert_outputs,topk_indices,topk_weights)returnoutput

CANN 上的 MoE 通信模式

// DeepSeek-R1 的 MoE 推理——8 卡 Expert 并行的通信模式classMoEInferenceExecutor{// 每张卡部署 256/8 = 32 个 Expertconstintexperts_per_device=32;// 路由结果的 Token 分发——用 HCCL 的 All-to-AllvoidTokenDispatch(int*topk_indices,float*hidden_states,intnum_tokens,intnum_devices){// Step 1: 统计每个 Device 要发多少 Tokenintsend_counts[8]={0};intsend_displs[9]={0};for(intt=0;t<num_tokens;t++){for(intk=0;k<top_k;k++){intexpert_id=topk_indices[t*top_k+k];intdevice_id=expert_id/experts_per_device;send_counts[device_id]++;}}// 算 displacement 用于 scatterfor(intd=1;d<=num_devices;d++){send_displs[d]=send_displs[d-1]+send_counts[d-1];}// Step 2: 用 HCCL 做 All-to-All——NVIDIA 的 AlltoAll 对应// CANN 的 HCCL 支持 HcclAlltoAllV——不等长收发HcclAlltoAllV(hidden_states,send_counts,send_displs,// 发送recv_buffer,recv_counts,recv_displs,// 接收HCCL_FLOAT,num_devices,hccl_comm);}// Step 3: 各卡算完 Expert 后,反向 All-to-All 收回voidTokenCollect(float*expert_output,int*topk_indices,float*topk_weights,float*final_output){// Expert 输出同样 All-to-All 回去HcclAlltoAllV(expert_output,recv_counts,recv_displs,final_buffer,send_counts,send_displs,HCCL_FLOAT,num_devices,hccl_comm);// 按 TopK 权重加权合并——每个 Token 的 8 个 Expert 结果for(intt=0;t<num_tokens;t++){for(intk=0;k<top_k;k++){intidx=topk_indices[t*top_k+k];floatweight=topk_weights[t*top_k+k];// 累加for(intd=0;d<hidden_dim;d++){final_output[t*hidden_dim+d]+=final_buffer[idx*hidden_dim+d]*weight;}}}}};

All-to-All 通信是 MoE 推理的瓶颈。DeepSeek-R1 每层 MoE 要做两次 All-to-All(分发+收集),80 层就是 160 次。CANN 的 HCCL 用 NVLink 等价的卡间互联拓扑做 AlltoAllV 优化——让 Token 分布均衡的设备路由不走跨交换机。

PD 分离架构下的 DeepSeek-R1

# DeepSeek-R1 的 PD(Prefill-Decode)分离部署classDeepSeekPDSeparation:""" DeepSeek-R1·671B 推荐用 PD 分离部署: - Prefill 阶段:计算密集型,配较少卡 + 大 Batch - Decode 阶段:访存密集型,配较多卡 + 小 Batch CANN 的 hixl 支持零拷贝的单边通信——Prefill 算完的 KV Cache 直接暴露给 Decode 卡读,不用显式搬运。 """def__init__(self):# Prefill 池:4 张卡,每卡处理 16 个请求的 Prefillself.prefill_pool=[4,"ascend910","prefill"]# Decode 池:16 张卡,每卡处理 8 个请求的 Decodeself.decode_pool=[16,"ascend910","decode"]# hixl 初始化——零拷贝共享内存importhixl self.shared_kv=hixl.SharedMemory(size_per_token=128*64*2*2,# 128heads × 128dim × FP16 × KVnum_devices=20# 4+16)defhandoff(self,request_id):""" Prefill 完成后把 KV Cache 句柄传给 Decode 卡 hixl 用远端内存直接映射——不用走 HCCL 搬运 """kv_handle=self.prefill_pool.export_kv(request_id)# kv_handle 包含:物理地址 + 长度 + 设备 ID# Decode 卡通过 hixl 的 rdma_read 直接读self.decode_pool.import_kv(request_id,kv_handle)# 零拷贝——实际只有一次 PCIe/NVLink 的读取

DeepSeek-R1 的 256 Expert × 8 TopK 的稀疏激活特点,让 PD 分离 + MoE All-to-All 成为推理系统设计的关键。CANN 在这一场景的独特优势是 hixl 的单边通信——PD 分离场景下 KV Cache 的零拷贝传输能省掉 30% 的卡间带宽。

参考仓库

DeepSeek-R1 推理配方

MoE 相关 Transformer 算子

hixl 单边通信库

HCCL 集合通信

http://www.zskr.cn/news/1359635.html

相关文章:

  • 最新论文降重工具横向测评|新手零踩雷选择指南
  • 钦州6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • RimSort终极指南:3步解决环世界MOD加载顺序混乱的完整方案
  • 股票低开必读:5条黄金口诀,教你反手掌握主动权
  • 从开题到定稿零返工:okbiye 毕业论文 AI 写作,把格式和内容难题都解决了
  • 资产治理:QNAP 存算融合架构理顺工程机械装配车间异构图纸流转
  • CTF-流量分析(布尔注入和时间盲注)
  • 【LeetCode刷题日记】一篇搞定二叉搜索树:从性质到实战,700.搜索+98.验证二叉搜索树
  • 布尔注入习题
  • 【限时公开】Midjourney火焰生成黄金三角法则:Chaos=35 + Style=raw + --sref 8921(附2024Q3火效Prompt库下载密钥)
  • GQA:多查少算的 Attention 头组合
  • Android面试-Kotlin作用域函数
  • 电商设计必备字体合集,收藏这篇就够了!
  • 紧急预警:未覆盖“幻觉漂移”和“上下文坍缩”的AI Agent测试=无效测试!3类高危长周期衰减场景的实时监测方案
  • 模拟IC设计原理图EDA工具推荐:新思科技如何重新定义模拟IC设计效率与精度
  • 论文检测优化新思路:okbiye 智能降重降 AI,高效合规完成文稿校准
  • 留学出国旅游必备!告别低头翻译,亲爱的翻译官AR眼镜才是真刚需
  • AI答案优化效果可以靠哪些第三方数据验证?
  • 为什么顶尖红圈所已部署Claude法律分析私有化集群?——揭秘3层脱敏架构、11项司法场景微调参数与审计留痕机制
  • 贵阳6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • CANN-昇腾NPU-模型加密-怎么保护知识产权
  • 韦斯试验——可程式恒温恒湿试验箱:功能与优势
  • 为什么92%的移动端应用留不住用户?Lovable开发框架的3个反直觉真相
  • Taotoken 的 Token Plan 套餐如何帮助我们预测并锁定开发成本
  • c语言中scanf的基本用法、返回值、占位符、赋值忽略符
  • 抖音批量下载神器:免费无水印下载工具的完整指南
  • XDM浏览器插件:如何将下载速度提升500%的完整指南
  • 芜湖6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 如何快速清理Windows右键菜单:终极管理工具完整指南
  • Anthropic 万亿估值启示录:战略聚焦如何击败全面扩张