Appearance
代码迁移
把一份基于 CUDA 的 PyTorch 代码迁移到昇腾 NPU,核心就是「引入插件 + 替换设备」,绝大多数情况下改动很小。
1. 两步必做改动
python
import torch
import torch_npu # 1. 引入昇腾适配插件
device = 'npu' # 2. 设备由 'cuda' 改为 'npu'
model = model.to(device)
inputs = inputs.to(device)2. 常见替换对照
| 场景 | CUDA 写法 | NPU 写法 |
|---|---|---|
| 设备字符串 | 'cuda' / 'cuda:0' | 'npu' / 'npu:0' |
| 张量搬移 | x.cuda() | x.npu() |
| 是否可用 | torch.cuda.is_available() | torch.npu.is_available() |
| 设备数量 | torch.cuda.device_count() | torch.npu.device_count() |
| 混合精度 | torch.cuda.amp | torch.npu.amp |
建议
不要把设备名硬编码为字符串散落各处,统一用一个 device 变量,迁移时只改一处。
3. 注意事项
- 务必先
import torch_npu,否则npu设备不可用。 - 部分 CUDA 专有 API、第三方 CUDA 扩展算子在 NPU 上可能无对应实现,需替换或改写。
- 分布式训练的通信后端使用 HCCL(而非 NCCL),初始化进程组时指定
backend='hccl'。 - 自定义 CUDA kernel 需要迁移为昇腾算子(进阶内容)。
迁移完成后,参考 训练推理示例 跑通一个最小用例。
