环节一:计算图到算子集合
模型进入芯片之前,先要被翻译成芯片能理解的操作集合。这一步的关键不是逐条搬运,而是识别哪些结构可以合并、哪些可以拆解、哪些需要特殊处理。合并能减少中间结果的写回,拆解则让形状更规整、更适合并行。取舍点在于:合并越多,单次操作越复杂,对存储容量的要求越高;拆解越细,调度越灵活,但中间数据搬运次数增加。好的工作流会在这里做一轮形状与容量的匹配,避免后续阶段被不合适的切分拖累。
环节二:数据排布与切分
确定算子之后,要决定数据在存储中怎么排、任务怎么切。排布影响连续访问能否命中,切分影响并行单元能否被填满。切分过粗,部分计算单元闲置;切分过细,调度与同步开销上升。这一环节通常需要结合片上缓存容量反复试算:一块数据放进缓存后还剩多少空间给其他张量,多个张量竞争同一级缓存时谁先被换出。工作流成熟度往往体现在这里——是否有系统的搜索或启发式规则,而不是靠人工试错。
环节三:调度与流水编排
调度负责把切分后的任务安排到计算单元与存储搬运通道上,让计算和搬运尽量重叠。理想状态是搬运下一块数据的同时计算当前块,形成流水。难点在于依赖关系:有些中间结果必须等前一步完成才能开始,强行重叠会引入等待。编排时要识别关键路径,把长依赖链上的任务优先安排,把可并行的旁支任务填进空隙。流水深度增加能提升重叠率,但也增加缓冲占用与启动延迟,需要按负载规模权衡。
环节四:执行与运行时反馈
真正执行时,理论编排会遇到实际波动:缓存命中率变化、多个任务争抢带宽、长尾任务拖慢整体节奏。运行时需要采集反馈并做动态调整,比如调整任务顺序、改变切分粒度、临时提高某些数据的驻留优先级。这一环节最容易被忽视,却直接决定持续表现。判断一个工作流是否成熟,可以看它是否具备可观测性:能否定位到具体是哪一级存储或哪一段流水成为瓶颈,而不是只看到一个笼统的整体数字。
环节五:验证与迭代闭环
工作流的最后一环是把结果沉淀成可复用的经验:哪些形状适合哪种切分、哪类算子容易触发搬运瓶颈、哪些调整在不同负载下稳定有效。验证不应只看单次运行的快慢,而要覆盖不同规模、不同批大小、不同输入长度的组合,观察表现是否平稳。迭代闭环的意义在于让下一次映射更快、更准。把五个环节连起来看,架构能力不只取决于硬件本身,也取决于这条链路上每一环的取舍是否协调一致。