需要迁移到 NPU 吗?
│
├─ 使用标准 PyTorch 模型 (ResNet/BERT/ViT/Llama)?
│ YES → 迁移成本低。替换 .cuda() → .npu(),验证精度即可
│
├─ 有自定义 CUDA kernel?
│ YES → 需评估 kernel 复杂度:
│ │
│ ├─ 简单 kernel (element-wise, custom activation)
│ │ → 用 Ascend C 重写,成本中等 (1-2 周)
│ │
│ └─ 复杂 kernel (FlashAttention, fused ops)
│ → 检查是否已有社区 NPU 适配 (如 torch_npu 的 fused operators)
│ 否则成本高 (4-8 周),考虑替代方案
│
├─ 依赖 NVIDIA 特有库 (cuDNN/cuBLAS/NCCL)?
│ → CANN 有对应替代,但 API 不同:
│ cuDNN/cuBLAS → CANN OPP (内置算子)
│ NCCL → HCCL (API 类似)
│ TensorRT → ATC
│
├─ 使用 torch.compile / Dynamo / Triton?
│ → NPU 不直接支持 Dynamo/Triton
│ Triton kernel 需改写为 Ascend C
│ torch.compile 替换为 MindSpore Graph 模式 或 CANN GE
│
└─ 训练框架是 PyTorch Lightning / HF Trainer?
→ 需确认这些框架的 Ascend 适配状态
PyTorch Lightning: 有限支持
HuggingFace Trainer: 通过 accelerate + torch_npu 基本可用