本章不只讲“把模型转过去”,而是讲模型如何经过 CANN、ATC、OM 和 msame 形成可复核的证据链。
先给出本讲路线图;后续每一段都对应这里的一行,最后回到路线收束。
先建立证据分层。学生最容易把 ATC 打印 success 当成推理已经通过,后面用双板记录纠正这个误解。
从上到下带读:应用、AscendCL、服务层、编译层、执行层和基础层。强调 ATC 只属于编译层,不负责应用服务和运行时资源生命周期。
让学生用自己的话说明 ATC、Runtime、AIPP 和 DVPP 各自在哪一层,避免把所有问题都归因于 NPU。
不要把生态成熟度描述成单一输赢。课堂重点是理解两套栈的抽象对象和证据工具不同。
让学生区分“ONNX 文件能打开”和“ONNX 合同能被目标 CANN/ATC 接受”。动态控制流、自定义算子和极端 Shape 都要单独核对。
图中左侧是模型输入,右侧是单算子路径;下方汇入 OM。课堂强调 ATC 是编译阶段,不是运行时服务。
转换成功是编译结果,不是精度或性能结果。融合摘要只能说明图优化发生了什么,不能替代运行和数值验证。
先确认板卡和环境,再运行 ATC。8T 与 20T 用各自的 soc_version,不能复用同一个编译目标来掩盖版本身份。
逐项解释 framework=5、静态 input_shape、output 前缀和 soc_version。两个并行度变量用于降低编译资源压力,不是性能优化结论。
只把 exitCode 0 和 ATC 成功行作为编译层证据。不要从“ATC 成功”跳到“模型可用”。
这是本章最重要的证据缺口。现有记录已证明路径可加载,但缺独立 size/hash。课堂上要明确写“未记录”,不能从一次成功加载推导内容一致。
把 msame 定位成运行时烟测工具。它证明加载和执行链,不证明数据预处理一致,也不替代完整精度和性能基准。
预处理必须与训练和 ATC 的输入合同一致。顺序、均值、方差、颜色通道或布局任一改变,都可能让 msame 正常执行但输出异常。
可以让学生指出每一行属于哪个阶段。只有前后顺序完整,才能排除只加载未执行、只执行未取回或未释放资源。
两块板处于同一 CANN 和驱动版本,但 SoC、内存和算力档位不同。Alarm 只记录为已知板况,不直接判定程序失败。
必须把 13.232 ms 和 11.748 ms 读成两个独立记录,而不是平均值、吞吐或端到端时延。这里不重跑板端,只引用已有原始记录。
收束成四道门。强调缺失的 OM size/hash 必须保持“未记录”,不能为了让课件看起来完整而编数字。课堂作业要求学生补齐每道门的证据。