16 张 Atlas 800I A2 的理论算力是 16 × 310 4960 TFLOPSfp16。但实际训练 Llama2-7B 只用到了 3200 TFLOPS——利用率 64%。这篇讲怎么把利用率从 64% 提到 85%等效 16 卡用出 25 卡的效果。利用率低的原因理论算力: 16 × 310 4960 TFLOPS 实际算力: 3200 TFLOPS 利用率: 64% 原因分解: - 通信开销: 12% (All-Reduce 等待) - 显存搬运: 8% (HBM ↔ AI Core) - 算子调度: 6% (Python → C 开销) - padding 浪费: 5% (序列长度不对齐) - 有效计算: 64%优化 1通信计算重叠MC2已有文章讲过 MC2。把 All-Reduce 跟下一层计算并行通信开销从 12% 降到 3%。优化 2Double Buffer算子计算的同时预取下一批数据modelLLM(meta-llama/Llama-2-7b-hf,devicenpu:0,1,2,3,4,5,6,7,tensor_parallel_size8,double_bufferTrue,# 开启 Double Buffer)Double Buffer 让 DMA 搬运和 AI Core 计算并行显存搬运开销从 8% 降到 3%。优化 3静态 Shape 编译动态 Shape 每次都重新编译浪费 30-60s。静态 Shape 编译一次永久使用modelLLM(meta-llama/Llama-2-7b-hf,devicenpu:0,dynamic_shapeFalse,# 静态 Shape 编译max_seq_len4096,# 固定最大长度)所有请求 pad 到 4096编译一次后续零编译开销。Padding 浪费 5% 算力但省掉了编译开销更大。如果不想 Pad 到最大长度可以用分桶BucketmodelLLM(meta-llama/Llama-2-7b-hf,devicenpu:0,dynamic_shapeTrue,bucket_boundaries[512,1024,2048,4096],# 分桶)每个桶编译一份 om 文件请求按长度分配到不同桶。Padding 浪费 1%编译开销也小4 个桶 4 次编译。优化 4算子融合最大化GE 的 graph-autofusion 默认只做安全融合不会出错的融合。可以开激进融合importtorch_npu# 开启激进融合可能轻微精度损失torch_npu.npu.set_optimize_option(aggressive)modeltorch.compile(model,backendnpu)激进融合会把更多算子合并如 LayerNorm Attention、FFN Dropout调度开销从 6% 降到 3%。精度损失约 0.1-0.3%通用场景可接受。优化 5Batch Size 调优Batch size 太小 → GEMM 利用率低。Batch size 太大 → OOM 或 KV Cache 不够。# 自动搜索最优 batch sizefromatbimportauto_tune_batch optimal_batchauto_tune_batch(modelmeta-llama/Llama-2-7b-hf,devicenpu:0,max_latency_ms100,# 首 token 延迟不超过 100ms)print(fOptimal batch size:{optimal_batch})# 输出: 32Llama2-7B 在 Atlas 800I A2 上batch32 时 GEMM 利用率 65%batch64 时 78%batch128 时 85%但 KV Cache 不够。综合效果优化组合NPU 利用率等效卡数无优化64%16 卡 MC273%18.4 卡 Double Buffer78%19.7 卡 静态 Shape分桶82%20.7 卡 激进融合85%21.5 卡 最优 Batch Size88%22.2 卡从 16 卡到等效 22 卡提升 38%。距离理论极限100%还有 12%那是 AI Core 的固有开销指令发射、循环控制等。跟 AOE 的配合AOE 自动调优 Tiling 参数进一步提 5-10%aoe--job_type2\--model_pathmodel.onnx\--configaoe_config.jsonAOE 上面 5 个优化一起上NPU 利用率能到 90-92%等效 16 卡用出 25-26 卡的效果。把 16 卡用出 32 卡的效果核心是提升 NPU 利用率。通信计算重叠MC2、Double Buffer、静态 Shape分桶、激进融合、最优 Batch Size——五个优化一起上利用率从 64% 提到 88%。仓库在这里https://atomgit.com/cann/ATBhttps://atomgit.com/cann/AOE