Skip to content

代码迁移

把一份基于 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.amptorch.npu.amp

建议

不要把设备名硬编码为字符串散落各处,统一用一个 device 变量,迁移时只改一处。

3. 注意事项

  • 务必先 import torch_npu,否则 npu 设备不可用。
  • 部分 CUDA 专有 API、第三方 CUDA 扩展算子在 NPU 上可能无对应实现,需替换或改写。
  • 分布式训练的通信后端使用 HCCL(而非 NCCL),初始化进程组时指定 backend='hccl'
  • 自定义 CUDA kernel 需要迁移为昇腾算子(进阶内容)。

迁移完成后,参考 训练推理示例 跑通一个最小用例。