想象你走进一家米其林三星餐厅的后厨。厨房里有两位主厨:一位叫 MLU370,是“熟食快手”,专攻把已经备好的菜快速出盘,对应AI推理场景;另一位叫 MLU590,是“宴会总厨”,擅长同时调度几十口锅炒大锅菜,对应大模型训练。两者都使用同一套厨房管理体系——MLUarch 架构,就像同样的厨房动线设计:食材仓库、切配台、灶台、传菜通道各司其职。今天,我们就走进这家“AI芯片餐厅”的后厨,看看这两位主厨的刀工、灶火和传菜系统到底有多大本事。
了解国产AI芯片的架构设计与性能定位,能帮助你在模型部署与迁移时做出更优的硬件选型决策,避免算力瓶颈或资源浪费。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
产品家族定位
走进这家 AI 芯片餐厅,你会看到一张“后厨分工表”:MLU370 是熟食快手,专精于把训练好的模型快速“出菜”——也就是推理任务,比如人脸识别、语音转写这类实时响应场景;MLU590 则是宴会总厨,负责“大锅菜”——大模型训练,需要同时处理海量数据。两人的灶台数量、仓库大小完全不同,但遵循的是同一套后厨设计图纸,这张图纸就叫 MLUarch 架构。
换成技术语言,MLU370 是推理专用卡,采用相对精简的计算核心和更高能效比设计,在 ResNet50、BERT 的推理任务中能效表现出色;MLU590 则堆叠了更多计算单元、更大的片上存储和更高的内存带宽,专门为大模型训练场景打造。这两颗芯片同属一个产品家族,都基于统一的 MLUarch 架构——就像同一家餐厅的不同分店采用同一套装修图纸,只是面积和灶台数量不同。
这套“统一图纸、不同规模”的策略,给开发者带来的最大红利是软件生态兼容。你给 MLU370 写的算子,在 MLU590 上基本不用改就能跑起来,因为指令集和内存模型高度一致。
MLU370 的“省电快手”路线让它在边缘推理场景特别吃香——同样的电费预算,它能服务的并发请求更多,对运营商来说就是实打实的成本节省。
- 峰值计算吞吐量即芯片在理想状态下每秒能完成的整数或浮点运算次数,单位常用 TOPS(万亿次/秒)。
- 功耗芯片满载运行时的实际消耗功率,单位瓦特(W),直接决定散热成本和电费账单。
- 算力密度两者相除得到“每瓦算力”,是衡量 AI 芯片能效的核心指标,数据中心尤其看重。
MLUarch核心架构
餐厅的“后厨动线”设计决定了出菜效率。MLUarch 架构最核心的思路是“计算与存储解耦”:灶台(计算单元)和食材仓库(存储单元)分离,中间用高速传菜通道连接。传统架构里灶台旁边就是货架,虽然取料快但货架太小,大菜根本放不下;MLUarch 把仓库做大、放在远处,通过高速通道保证取料速度不成为瓶颈。
MLUarch 的具体实现是异构并行设计:芯片内部同时布置通用计算核心和专用加速单元。通用核心像全能帮厨,什么菜都能做;专用单元像熟食加工机,做特定菜品又快又好。这种异构设计让芯片在处理 AI 任务时,既能跑灵活的自定义算子,又能用专用单元加速矩阵乘法这类高频操作。
多精度支持是 MLUarch 的第三板斧。训练时可以切换到高精度的 FP32,保证梯度计算不“串味”;推理部署时则用 INT8 甚至更低精度,就像快餐店把菜提前做成半成品,出菜速度快好几倍,味道损失却不大。寒武纪的芯片在 FP32、FP16、INT8 之间动态切换,切换代价极小。
“动态精度切换”是 MLUarch 的独门绝技。训练初期用 FP32 保证梯度稳定,训练后期切换到 FP16 或混合精度,像大厨先慢火炖烂再大火收汁,时间和口感两不误。
- FP32 算力单精度浮点运算能力,是精度最高的标准计算模式,好比厨师精雕细琢每道菜。
- INT8 算力8 位整数运算能力,精度较低但吞吐量大,好比流水线批量生产半成品菜。
- 加速比两者相除,反映低精度带来的性能增益,通常在 4 到 8 倍之间。
并行计算双引擎
后厨的效率秘密在于“双灶并行”:一口灶专门炒菜(矩阵运算),一口灶专门切菜配菜(向量运算)。MLUarch 的并行计算引擎也分成两大阵营——向量计算单元和矩阵计算单元,它们可以同时开工,互不抢工具。
矩阵计算单元是 AI 计算的主力。神经网络的全连接层、卷积层本质就是矩阵乘法,MLU590 的矩阵单元像一台巨型压面机,把整块面团(大矩阵)一次性压成面条(输出特征图)。向量计算单元则负责逐元素操作,比如激活函数 ReLU、归一化、逐元素加法——这些操作像给每根面条单独调味,必须一个个处理,但可以流水线并行。
稀疏加速是引擎设计的点睛之笔。神经网络里有大量权重为零,如果全部计算等于做无用功。稀疏加速单元像厨房里的“垃圾分拣员”,把空壳虾(零权重)直接跳过,只炒有肉的虾仁。MLU370 对稀疏模型可以做到“零跳过”计算,让有效算力提升一倍。
双引擎加稀疏加速的组合,让 MLU590 在 Transformer 这类大模型上能充分发挥算力——矩阵引擎处理注意力头的批量乘法,向量引擎同步处理 LayerNorm 和 GELU 激活,互不阻塞。
- 原始计算量稠密矩阵乘法的总乘法次数,即 N 次有效乘法加无效乘法。
- 非零元素计算量跳过零权重后实际需要执行的乘法次数。
- 稀疏度 s权重矩阵中零元素的占比,s 越大跳过计算越多,加速比越高。
异构存储架构
厨房的食材储备讲究“远近结合”:灶台旁放调料(片上 SRAM),后厨角落放冷藏库(HBM),中间有置物架过渡(多级缓存)。MLUarch 的存储架构正是这个逻辑,目标是让计算核心永远不等食材——数据要随叫随到。
片上 SRAM 是速度最快的存储层级,它像灶台边的调料瓶,存取延迟只有几个时钟周期。MLU590 的片上 SRAM 高达几十兆字节,能容纳大模型的一个层或一个注意力头的全部参数,避免频繁去“冷藏库”取数据。多级缓存(L1/L2)像置物架,缓冲从 HBM 读上来的数据块。
HBM(高带宽内存)是最终的大仓库,容量达到几十 GB 到上百 GB。MLU370 配备 48GB HBM,MLU590 则达到 128GB,带宽高达数 TB/s。这里的关键指标是“带宽/算力比”——如果算力很强但带宽不够,就像厨师刀工再好却没有食材可切,核心只能空转等待。
MLU590 的 128GB HBM 容量直接对标英伟达 A100 的 80GB,意味着它能装下 1750 亿参数的 GPT-3 级别的模型权重,配合梯度累积技术完成训练任务。
- 理论峰值带宽HBM 接口在理想状态下每秒能传输的最大字节数。
- 实际有效带宽真实程序跑出来的传输速率,受访问模式、冲突等因素影响。
- 利用率两者百分比,架构设计越好、访问越规律,利用率越高。
互联与多卡训练
一位总厨做一百道菜要一整天,但十位总厨各做十道菜只要一小时——前提是厨房之间要能快速交换半成品和调料。MLU590 的片间互联总线就是这个“厨房之间的传菜通道”,它决定了多卡训练的扩展效率。
多卡训练的核心难点是梯度同步。每张卡算出自己那份数据的梯度后,需要“晒出来”给所有其他卡看,然后大家拿着平均梯度一起更新模型。这个过程像十个厨师同时做同一道菜,做完后互换品尝,统一口味。如果互联带宽不够,大量时间会花在等别人送菜上,加速比远低于卡数。
MLU590 片间互联采用高速总线直连拓扑,多卡之间可以组成环状或全互联结构。理论最优情况下,N 卡训练的加速比接近 N 倍,但实际要考虑通信开销。寒武纪在多卡同步上使用高效的 AllReduce 算法,让通信数据量从“所有梯度汇总”压缩到“每轮只传一轮消息”,通信效率大幅提升。
在实际 BERT 大模型训练中,MLU590 双卡训练可达到近 1.8 倍加速比,四卡约 3.2 倍——虽然离线性有一点差距,但考虑到价格只有同级别 A100 的一部分,这个表现已经让很多实验室动心。
- N使用的卡数,理想情况下性能随 N 线性增长。
- t_comm每轮训练中通信耗时,包括梯度传输和同步等待。
- t_compute每轮训练中的计算耗时,与批量大小和模型规模相关。
软件工具链
再好的厨房动线,没有好用的菜谱也白搭。寒武纪的“菜谱”是 BANG 编程语言和 Neuware 工具链。BANG 是一种类 C 的异构编程语言,让开发者直接编写在 MLU 上运行的算子内核(kernel),就像给总厨写一份专属菜谱。它支持线程层级、存储层级和同步操作,精通 CUDA 的人几乎可以零成本上手。
Neuware 是完整软件栈的总称,包含编译器、运行时库、驱动和性能分析工具。它像一个“厨房总管”:帮你把菜谱翻译成具体操作指令(编译),协调每个灶台的调度(运行时),记录每道菜耗时(分析器)。Neuware 还提供算子库,像半成品调料包,常用算子直接调用,不用自己写。
框架迁移适配是寒武纪生态落地的关键一步。Neuware 提供 TensorFlow、PyTorch 的适配层,让模型几乎可以“无感迁移”。用户只需要在 PyTorch 代码里把 model.to('cuda') 改成 model.to('mlu'),后续的算子映射、内存管理、图优化全部由 Neuware 自动完成。这个体验对开发者极其友好。
Neuware 的迁移体验在国产芯片里属于第一梯队。很多 NLP 团队把 BERT 从 CUDA 迁移到 MLU590 只花了一周左右,且精度完全对齐——这在两年前几乎是不可想象的。
- 算子改写工作量框架中某个算子无法直接映射到 MLU 时,需要手动改写的工作量。
- 精度调优工作量迁移后数值精度可能出现波动,需要混合精度调节的调试成本。
- 求和符号对所有需要处理的算子累加,就是总迁移成本。
性能定位评测
“开业酬宾”看的是真实口碑。寒武纪 MLU370/590 的性能定位,还是要落到实际应用场景的评测上。我们分别从推理、训练和能效三个维度看。
推理吞吐量是 MLU370 的主场。在 ResNet50 图像分类、BERT 文本分类等标准模型上,MLU370 的 INT8 推理吞吐量可达同价位 GPU 的 1.5 到 2 倍,尤其适合大规模在线服务场景。它的低功耗设计让单卡能支撑更高的并发请求,对云厂商来说每瓦吞吐量更划算。
训练吞吐量是 MLU590 的表演舞台。在 BERT-Large 预训练任务上,MLU590 的训练吞吐量达到 MLU370 的 4 倍以上,多卡线性扩展率超过 80%。这意味着 8 卡 MLU590 集群可以支撑中小规模大模型的完整预训练,而不必依赖昂贵的 A100 集群。
能效比是两者的共同卖点。国产芯片在能效设计上往往更激进,MLU370 的能效比达到 8 TOPS/W 以上,MLU590 接近 6 TOPS/W。对电力成本敏感的数据中心而言,低功耗意味着更高的部署密度和更低的运营成本,这是寒武纪芯片在与国际大厂竞争时的差异化优势。
综合来看,MLU370 和 MLU590 形成了清晰的“高低搭配”:370 负责高频、低延迟的推理场景,590 负责重型、高吞吐的训练场景。两者共享同一软件生态,让用户从小规模部署到大规模训练可以无缝扩容,这是寒武纪产品矩阵的聪明之处。
- 处理样本数模型推理或训练过程中处理的数据条数,实际统计时用 batch 数乘以 batch size。
- 时间完成这些样本的总耗时,包括计算时间和通信时间。
- 能效比吞吐量除以功耗,衡量单位电费的产出,是数据中心选型的核心指标。
AI 应用场景
智能推荐系统的推理加速
阶段:模型部署与推理
解决的问题:电商平台的推荐系统需要实时响应用户点击行为,传统 CPU 部署延迟高、吞吐低,GPU 成本又太高。MLU370 的 INT8 推理能力可以在保持推荐准确率的前提下,将单机并发请求数提升 3 倍,同时功耗只有 GPU 方案的一半。
具体案例:某电商平台将召回排序模型从 TensorFlow 迁移到 MLU370,使用 Neuware 的 INT8 量化工具自动完成精度校准,QPS 从 2000 提升到 6500,P99 延迟维持在 20ms 以内,GPU 采购成本下降 60%。
大模型分布式训练集群
阶段:模型训练
解决的问题:高校实验室预算有限,无法负担 A100 集群,但又有训练 10B 级别大模型的需求。MLU590 的高性价比和片间互联能力,可以用 8 卡构建一个小型训练集群,完成 BERT-Large 或 GPT-2 级别的预训练任务。
具体案例:某高校 NLP 实验室购买 8 张 MLU590 构建训练服务器,使用 PyTorch + Neuware 适配层,将 BERT-Large 预训练任务从 4 周缩短到 1 周,训练吞吐量达到单卡 A100 的 75%,而硬件成本仅为 A100 方案的 40%。
智慧安防的视频流分析
阶段:边缘推理
解决的问题:智慧城市项目中,摄像头视频流需要实时做人脸检测、车辆识别,电力供应有限且机柜空间紧张。MLU370 的低功耗高能效比正好满足边缘场景的严苛要求。
具体案例:某安防厂商在边缘服务器中部署 4 张 MLU370,单机可同时分析 32 路 1080P 视频流,检测延迟低于 50ms,整机功耗控制在 300W 以内,满足户外机柜的散热要求。
Python 演示
import time import torchimport torch.nn as nn class SimpleBert(nn.Module): """极简BERT模型,用于演示MLU与CUDA的迁移对比""" def __init__(self, vocab_size: int = 30522, hidden: int = 768): super().__init__() self.embedding = nn.Embedding(vocab_size, hidden) self.linear1 = nn.Linear(hidden, hidden * 4) self.linear2 = nn.Linear(hidden * 4, hidden) self.layernorm = nn.LayerNorm(hidden) def forward(self, x: torch.Tensor) -> torch.Tensor: h = self.embedding(x) h = self.layernorm(torch.relu(self.linear1(h))) return self.linear2(h) def benchmark(model: nn.Module, x: torch.Tensor, device: str, iterations: int = 100) -> float: model = model.to(device) x = x.to(device) for _ in range(10): model(x) start = time.perf_counter() for _ in range(iterations): model(x) elapsed = time.perf_counter() - start return elapsed / iterations def main() -> None: vocab_size = 30522 hidden = 768 seq_len = 128 batch_size = 16 iterations = 100 model = SimpleBert(vocab_size, hidden) x = torch.randint(0, vocab_size, (batch_size, seq_len)) if torch.cuda.is_available(): cuda_time = benchmark(model, x, "cuda", iterations) print(f"CUDA: {cuda_time * 1000:.2f} ms/iteration") try: import torch_mlu mlu_time = benchmark(model, x, "mlu", iterations) print(f"MLU : {mlu_time * 1000:.2f} ms/iteration") except ImportError: print("MLU 环境未安装,跳过 MLU 基准测试") if __name__ == "__main__": main()
torch_mlu 适配层在 MLU 设备上运行,并对比 CUDA 与 MLU 的推理耗时。import torch_mlu导入寒武纪的 PyTorch 适配插件,注册mlu设备类型。model = model.to(device)将模型权重迁移到指定设备,device可以是"cuda"或"mlu"。x = x.to(device)将输入张量迁移到设备显存,这是算子在设备上执行的前提。model(x)在目标设备上执行一次前向推理,触发 MLU 上的算子调度。benchmark(model, x, device, iterations)封装了预热和执行测时的逻辑,确保结果稳定。
常见误区
误区很多人看到 370 和 590 的规格差异巨大,就以为它们是两个独立研发的产品线,架构完全不同,代码需要分别适配。
正解实际上两者共享同一套 MLUarch 架构,就像同一家餐厅的中央厨房和旗舰店虽然面积不同,但菜谱和烹饪流程完全一致。开发者给 MLU370 写的算子,在 MLU590 上稍作编译即可运行,Neuware 工具链统一支持这两个平台。
为何常见:因为两者在核心数、显存、功耗上差距太大,容易让人误以为是“两代产品”而非“同一架构的两种规模”。
误区看到 MLU590 的 INT8 算力很高,就以为训练时可以全程用 INT8,能享受 4 倍加速。
正解大模型训练通常需要 FP32/FP16 混合精度来保证梯度下降的数值稳定性。INT8 主要用于推理阶段。MLU590 的 INT8 高算力更多是服务于“训练后量化部署”场景,不能直接迁移为训练收益。
为何常见:推理场景中 INT8 加速效果显著,容易让人误以为训练也能同样受益,忽略了精度对训练收敛的关键性。
误区以为 8 张 MLU590 一定能达到单卡的 8 倍速度,买 8 卡就是 8 倍算力。
正解实际加速比受通信瓶颈制约。根据公式,通信时间占比越高,加速比越差。MLU590 的 8 卡实测加速比约 6.2 倍,这已经属于优秀水平。真正决定加速比的是互联带宽、梯度同步算法和数据加载效率。
为何常见:厂商宣传的“可扩展至多卡”容易让人忽略通信开销的存在,消费者默认线性扩展是理所当然的。
误区有的人认为 BANG 是复制 CUDA 的语法,学会了 CUDA 就能直接写 BANG,两者可以互相翻译。
正解BANG 的编程模型确实受 CUDA 启发,但在存储层级、并发模型和算子调度上有自己的设计。它直接映射到 MLUarch 的架构特性(如向量/矩阵双引擎),而不是简单模仿 CUDA。需要理解 MLUarch 的存储和并行模型,才能写出高性能 BANG 代码。
为何常见:BANG 语法上与 CUDA 高度相似,给人“拷贝”的错觉,让学习者低估了架构适配的深度。
误区觉得 MLU370 推理吞吐量那么高,训练小模型应该也没问题,可以一卡两用。
正解推理和训练的工作负载特征完全不同。训练需要前向+反向传播,对精度要求高,且需要存储中间激活值,MLU370 的存储容量和通用计算能力都不是为训练设计的。跑小模型可以,但效率远低于 MLU590。
为何常见:推理性能的数字太亮眼,人们容易忽略训练还需要高精度矩阵运算和大容量显存这两大前提。
面试题
Q1. MLU370 与 MLU590 的核心定位分别是什么?
- A.都面向推理场景
- B.都面向训练场景
- C.370 面向推理,590 面向训练← 正确答案
- D.370 面向训练,590 面向推理
答案:C。MLU370 定位推理专用,强调低功耗和高吞吐;MLU590 定位大模型训练,强调高算力、大显存和多卡扩展。两者基于同一 MLUarch 架构,但规模与优化方向不同。
Q2. INT8 精度相比 FP32 的主要优势是什么?
- A.精度更高
- B.计算速度更快← 正确答案
- C.显存占用更大
- D.只支持推理
答案:B。INT8 用 8 位整数表示数据,吞吐量通常是 FP32 的 4 到 8 倍,代价是精度降低。它主要用于推理部署阶段,因为推理对精度宽容度更高,不像训练那样依赖高精度的梯度更新。
Q3. MLUarch 架构的核心设计理念是什么?
- A.计算与存储解耦← 正确答案
- B.统一 CPU 和 GPU
- C.只支持 INT8 精度
- D.用软件模拟硬件
答案:A。MLUarch 的核心是计算与存储解耦,通过高速通道连接远端大容量存储和计算单元,避免传统架构中存储容量受限的问题。它同时支持多精度计算,并非只支持 INT8。
Q4. 以下哪些属于 MLUarch 架构的并行计算引擎?
- A.向量计算单元← 正确答案
- B.矩阵计算单元← 正确答案
- C.稀疏加速单元← 正确答案
- D.字符串处理单元
答案:ABC。MLUarch 采用向量与矩阵双引擎并行设计,并辅以稀疏加速单元跳过零权重计算。字符串处理单元不是 AI 芯片的典型组件,属于干扰项。
Q5. 多卡训练的加速比达不到线性增长的原因是什么?
- A.显卡数量不够
- B.通信开销占用时间← 正确答案
- C.模型太大放不下
- D.CPU 性能不足
答案:B。多卡训练需要定期同步梯度,通信时间会占用训练时间。加速比公式中通信时间占比越高,加速比越偏离卡数。这就像十个厨师做同一道菜,互相品尝调味也要花时间。
Q6. BANG 编程语言主要面向什么场景?
- A.编写 CPU 通用程序
- B.编写 MLU 上的算子内核← 正确答案
- C.编写数据库查询
- D.编写前端网页
答案:B。BANG 是寒武纪的异构编程语言,用于在 MLU 设备上编写算子内核(kernel),类似 CUDA 对 NVIDIA GPU 的角色。它面向 MLUarch 架构的向量/矩阵双引擎设计。
Q7. 以下哪些是 Neuware 工具链的核心组成部分?
- A.编译器← 正确答案
- B.运行时库← 正确答案
- C.性能分析工具← 正确答案
- D.数据标注系统
答案:ABC。Neuware 包含编译器、运行时库、驱动、性能分析工具等完整软件栈,负责将模型和算子高效映射到 MLU 硬件上执行。数据标注属于数据处理环节,不在芯片软件栈范围内。
Q8. 迁移 PyTorch 模型到 MLU 设备上,通常只需要做什么?
- A.重写所有算子
- B.把 device 改为 'mlu'← 正确答案
- C.更换训练数据集
- D.安装 Windows 系统
答案:B。通过 Neuware 的 PyTorch 适配层,模型迁移基本可以做到一行代码改动——把 model.to('cuda') 改成 model.to('mlu')。算子的映射、内存管理由适配层自动完成。
Q9. 算力密度(TOPS/W)反映的是什么指标?
- A.芯片面积
- B.峰值算力
- C.每瓦电费能买到的算力← 正确答案
- D.存储容量
答案:C。算力密度 = 峰值算力 ÷ 功耗,衡量单位功耗能获得多少计算能力。它直接反映能效比,对数据中心选型和运营成本估算至关重要,而芯片面积和存储容量不直接决定能耗指标。
Q10. MLU590 支持的大模型训练关键能力有哪些?
- A.128GB HBM 大显存← 正确答案
- B.片间互联多卡扩展← 正确答案
- C.FP32/FP16 混合精度← 正确答案
- D.自动标注训练数据
答案:ABC。MLU590 面向大模型训练,配备 128GB HBM、片间互联总线支持多卡集群、混合精度训练保证精度和速度平衡。自动标注数据是数据处理工具的功能,与芯片算力无关。