CANN/cannbot-skills MC2架构指南

发布时间:2026/7/11 14:43:00

CANN/cannbot-skills MC2架构指南
MC2 通算融合架构总览【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本文档面向第一次接触 MC2 的 Architect/Developer建立 AIV/AIC 分工、UDMA 通信、4-buffer 流水、M 轴通算并行的整体心智模型。读完本文档应能回答为什么 MC2 必须用 SHMEM/UDMA不能用 HCCLAIV 和 AIC 各自做什么怎么同步4-buffer 流水怎么掩盖通信开销M 轴切分 vs N/K 轴切分的取舍1. MC2 是什么MC2 Multi-Card Compute-Communication Coupling多卡通算融合。典型场景AllToAll MatmulMoE 模型专家路由每张卡把自己负责的 M 段通过 AllToAll 发给其他卡接收方在收到的数据上做本地 Matmul。AllReduce MatmulDDP 前向反向Matmul 后的部分和通过 AllReduce 聚合。ReduceScatter MatmulTP 反向梯度聚合。参考工程all_to_all_matmul/实现的是AllToAll 量化 MatmulMX FP8的融合可作为所有 MC2 算子的起手模板。2. 为什么不用 HCCLHCCLHuawei Collective Communication Library的高阶 APIHccl::AllReduce等是服务端调度的应用层: aclnnApi → HCCL → Server (通信 CPU) → NIC ↑ Kernel 不能干预调度而 MC2 的核心诉求是Kernel 内部下发通信 下发计算让两者在硬件流水上重叠。HCCL 把调度权放在 Server 端Kernel 无法在通信进行中插入计算指令通信与计算是串行的。SHMEM/UDMA 路径把通信下发权交回 Kernel应用层: Kernel 内直接调 aclshmemx_udma_put_nbi(...) ↓ UDMA 硬件引擎异步搬数 ↓ 同时 AIC 管线继续下发 MMAD 指令 ↓ aclshmemx_barrier_all_vec() 等通信完成UDMAUnified DMA对应 URMA 协议——Unreliable Remote Memory Access是 Ascend 950 提供的 Kernel 级跨卡通信原语所有通信下发在 Kernel 内完成可与计算流水深度耦合。官方文档https://shmem-doc.pages.dev/。SKILL.md 列出的 13 类 HCCL API 在本 skill 全部禁用。3. AIV/AIC 分工Ascend 950 一个 Block 内有 AICCube 核和 AIVVector 核两类算力。参考工程把通信和计算分给不同的核核职责在参考工程的位置AIVVector下发 UDMA Put 指令、维护通信流水all_to_all_matmul_impl.h::AllToAllProcess()AICCube在通信 buffer 上做 Blaze Matmul遍历所有 rank 累加all_to_all_matmul_impl.h::MatmulProcess()// all_to_all_matmul_impl.h Process() __aicore__ inline void Process() { if ASCEND_IS_AIV { AllToAllProcess(); // AIV 跑通信UDMA Put Barrier } if ASCEND_IS_AIC { MatmulProcess(); // AIC 在通信 buffer 上做完整 Blaze Matmul } }同一份 kernel 二进制同时跑在 AIV 和 AIC 上靠ASCEND_IS_AIV/ASCEND_IS_AIC编译期分支隔离。跨核同步CrossCore FlagAIV 写完 buffer 后必须通知 AIC 可读AIC 读完必须通知 AIV 可覆盖。这对同步通过CrossCoreSetFlag/CrossCoreWaitFlag完成// AIV 写完 bufferId 后置 flag CrossCoreSetFlag0x2, PIPE_MTE3(mLoopIdx); // AIC 读 bufferId 前等 flag CrossCoreWaitFlag0x2, PIPE_MTE2(mLoopIdx);0x2是 flag 类别自定义编号AIV↔AIC 间用 0x2PIPE_MTE3是 AIV 的 Memory Transfer Engine 3输出管线PIPE_MTE2是 AIC 的输入管线idx 用mLoopIdxAIV 写第 i 轮 buffer → AIC 读第 i 轮 bufferidx 一一对应。流水深度控制AIV 不能无脑往前写——会覆盖 AIC 还没读的旧数据。参考工程用等 AIC 释放信号来限速// AIV写到第 bufferSize 轮后必须等 AIC 释放第 (i - bufferSize) 轮的 buffer if (mLoopIdx bufferSize_) { CrossCoreWaitFlag0x2, PIPE_MTE3(mLoopIdx - bufferSize_); allToAllComm_.BarrierAll(); // 还要等所有其他卡也释放 }对应的 AIC 端在算完第 i 轮后置释放 flagall_to_all_matmul_impl.h::MatmulProcess内。4. 4-Buffer 流水bufferSize4是参考工程的默认深度。把通信流水画出来时间轴 → AIV: |PutScale| Put(0) | Put(1) | Put(2) | Put(3) | Put(4) | Put(5) | ... | Put(N-1) | AIC: |wait(0) | MMAD(0)| wait(1) | MMAD(1)|wait(2)| MMAD(2)| ... | MMAD(N-1)| ↑ 4 个 buffer 轮转使用bufferId mLoopIdx (bufferSize - 1)AIV 的 Put(i) 与 AIC 的 MMAD(i-1) 并行AIV 的 Put(i) 把数据写到 SHMEM 的bufferId i 3位置AIC 的 MMAD(i) 从同一 bufferId 位置读通信延迟被 4 个 buffer 的流水深度掩盖。bufferSize 取舍过浅1通信和计算串行没有掩盖效果过深SHMEM 空间不够默认 1 GB或 AIC 等 AIV 凑够 4 轮才开始算反而增加延迟4 是经验最优值参考工程固定为 4新算子一般不动。5. SHMEM 空间布局每张卡的 SHMEM 空间aclshmem_align分配的 1 GB被分成两段SHMEM base (rankId 视角) ├── Data buffers[bufferSize] ← 每个 bufferBlockSize 存所有 rank Put 过来的当前轮数据 │ ├── buffer[0]: rankSize * commMSize * bytesPerMRow │ ├── buffer[1]: ... │ ├── buffer[2]: ... │ └── buffer[3]: ... └── Scale buffers ← 所有 rank 的 Scale 一次性 Put不参与流水 └── rankSize * M * scaleBytesPerMRow参考工程在all_to_all_comm_udma.h的AllToAllComm::GetDataAddrGm(bufferId)和GetScaleAddrGm()访问这两段。6. 切分策略M 轴通算并行参考工程沿 M 轴切分每块headMSize512行。为什么选 M 轴候选轴通算并行性实现难度适用场景M 轴✅ 高不同 M 段可独立 PutAIC 边收边算中通用首选参考工程采用N 轴低N 轴切会让 B 矩阵跨卡通信量翻倍高不推荐K 轴中K 切分对应 ReduceScatter每段需要 reduce高AllReduce Matmul 场景M 轴切分的好处A 矩阵按 M 段分布在不同卡每卡独立 Put 自己的 M 段无冲突B 矩阵全卡持有相同副本或按 K 段分布无需通信AIC 收到某段 M 后立即可算无需等待所有段到齐。headMSize 取值参考工程默认headMSize512即tileCnt M/512只是经验起点不是最优值。约束必须是 BlazeBlockMmad的baseM典型 128 或 256的整数倍必须让单次 Put 的数据量headMSize * kPerRank * sizeof(dtype)落在 UDMA 高效区间数百 KB ~ 数 MBheadMSize M / tileCnt调整tileCnt即调整headMSize。tileCnt是通算流水的深度旋钮——tileCnt1时无掩盖串行基线tileCnt1时 N-1 级流水掩盖通信延迟。CANNBot 流程中分两阶段调优详见pipeline_tuning.mdStep 2-4 用tileCnt1做串行基线简化精度/审查Step 6 扫描tileCnt找最优。7. UDMA 通信原语速览参考工程用到的三个核心 API详见comm_shmem.md// 1. 非阻塞 Put本地 → 远程 aclshmemx_udma_put_nbi(remoteWinAddr dstOffset, localAddr srcOffset, (__ubuf__ uint8_t*)nullptr, dataSize, remoteRank); // 2. Quiet等本次 Put 真正下发到 UDMA 引擎不等对端收完 aclshmemx_udma_quiet(remoteRank); // 3. 全卡 Barrier等所有卡的 Put 都被对端收完 aclshmemx_barrier_all_vec();Put_nbi是非阻塞的——下发完立即返回AIV 继续下一条 Putquiet保证后续对同一 remoteRank 的 Put 在前面 Put 之后下发保序barrier_all_vec是真正等对端收到的同步点。参考工程在PutToAllRanks中每个 Block 负责发往对应的 remoteRankall_to_all_comm_udma.h::PutToAllRanks让多 Block 并发下发避免单 Block 串行 Put 所有 rank。8. 性能采集要点MC2 算子的性能采集有一条核心特殊点每轮主 kernel 前必须调用heavy_add_kernel刷 L2 cache否则前一轮的 B 矩阵驻留 L2 会让本轮带宽指标虚高。详细流程msprof task-based 采集、4 卡数据后处理、优化速查见profiling_mc2.md。9. 后续阅读想了解读SHMEM API 细节、扩展其他通信原语comm_shmem.mdBlaze 模板选型、BlockMmad 改造matmul_blaze.mdmsprof task-based 采集、4 卡后处理profiling_mc2.md参考工程文件结构、改造食谱codebase_map.md各 Step 的具体动作workflow_integration.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

终极指南:3分钟学会用Umi-OCR让扫描PDF变智能文档

终极指南:3分钟学会用Umi-OCR让扫描PDF变智能文档

2026/7/11 14:43:00

终极指南:3分钟学会用Umi-OCR让扫描PDF变智能文档 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…

p5天使:轻量级AI绘画工具的原理、实现与应用场景

p5天使:轻量级AI绘画工具的原理、实现与应用场景

2026/7/11 14:43:00

如果你最近在关注AI绘画领域,可能会发现一个有趣的现象:一些看似"简单"的AI绘画工具,反而在特定场景下表现出了惊人的实用性。今天要讨论的"最菜p5天使"就是这样一个案例——它没有复杂的参数调节,没有庞大的…

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南

2026/7/11 14:32:59

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否遇到过这…

NBM7100A与PIC18F46K22实现纽扣电池高效管理方案

NBM7100A与PIC18F46K22实现纽扣电池高效管理方案

2026/7/11 16:23:03

1. 项目背景与核心需求 在低功耗物联网设备、可穿戴设备和工业传感器等应用中,不可充电的初级电池(如CR2032纽扣电池)常面临两个关键挑战:高脉冲电流需求导致的电压骤降,以及电池内部阻抗引起的能量浪费。传统方案直接…

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限?

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限?

2026/7/11 16:23:03

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限? 【免费下载链接】Qwen3.6-27B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwen3.6-27B-OptiQ-4bit Qwen3.6-27B-OptiQ-4bit是专为…

Meta 裁决限制员工言论自由,韦恩 - 威廉姆斯诉讼维权结果几何?

Meta 裁决限制员工言论自由,韦恩 - 威廉姆斯诉讼维权结果几何?

2026/7/11 16:23:03

韦恩 - 威廉姆斯无声出席海伊文学节5 月 31 日,莎拉韦恩 - 威廉姆斯(Sarah Wynn - Williams)作为嘉宾,与法学教授蒂姆吴(Tim Wu)和记者卡罗尔卡德瓦拉德(Carole Cadwalladr)一同登上…

STM32与MCP3202实现锂电池主动平衡控制方案

STM32与MCP3202实现锂电池主动平衡控制方案

2026/7/11 16:23:03

1. 项目背景与核心需求 在锂离子电池组应用中,串联电池之间的电压不平衡是一个常见但棘手的问题。当多个电池串联时,由于制造工艺差异、温度分布不均或老化程度不同,各单体电池的电压会出现偏差。这种不平衡如果长期存在,会导致部…

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调?

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调?

2026/7/11 16:23:03

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调? 【免费下载链接】Qwen3.6-27B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwen3.6-27B-OptiQ-4bit Qwen3.6-27B-OptiQ-4bit是基于mlx-opti…

解锁B站视频自由:用开源工具打造你的专属离线视频库

解锁B站视频自由:用开源工具打造你的专属离线视频库

2026/7/11 16:13:03

解锁B站视频自由:用开源工具打造你的专属离线视频库 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾经遇到过这样…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…