塔斯娱乐资讯网

1、最简单的:Transfer2NPU(torch_npu) 这是昇腾现在最

1、最简单的:Transfer2NPU(torch_npu)

这是昇腾现在最出圈的“懒人方案”,适合PyTorch模型 。
只需要在代码最前面加一行:
 from torch_npu.contrib import transfer_to_npu 
它会运行时自动拦截torch.cuda相关调用,自动映射成NPU接口。
✅ 优点:很多普通模型几乎不用改代码,拿来就跑;
❌ 局限:遇到手写CUDA核、特殊第三方加速库(xformers老版本、cuDNN深度定制算子),自动翻译会失效,速度掉很多或者直接报错。

2、PyTorch GPU2Ascend 脚本迁移工具(CANN自带)

是CANN工具箱内置的静态转换工具,不是运行时翻译,直接修改你的Python源码,生成一份适配昇腾的新脚本,同时输出一份报告:哪些API支持、哪些算子不支持、需要人工改哪里 。
适合批量迁移一堆训练脚本,适合企业批量改造。
缺点:复杂算子、自定义CUDA核,它识别不了,标记出来留给程序员手写。

3、ATC 模型转换工具(推理用得多)

如果你已经在CUDA上把模型训练完、导出成ONNX,用ATC把ONNX转成昇腾专属的 .om 离线模型文件,专门给上线推理部署用,不负责训练代码迁移 。
很多企业的做法:训练慢慢迁移,推理先用ATC快速落地。

4、MindStudio(图形IDE,带迁移分析)

相当于昇腾版的开发软件,里面集成了上面的迁移工具,可视化看算子支持情况、断点调试,适合开发人员,不适合纯脚本一键跑 。

5、底层兜底:Ascend C

上面工具都搞不定的高性能自定义CUDA算子(比如大模型里的注意力算子),就不能靠翻译了,需要程序员用Ascend C重新写一版等价逻辑,这是工作量最大的部分,也是迁移里最耗时间的地方。

很关键的现实总结

- 普通模型、开源现成模型:transfer_to_npu 就能搞定,迁移成本很低;
- 大模型、深度优化过的模型:大量手写CUDA算子,工具只能做一部分,必须人工重写、调优,这就是为什么大厂迁移周期依然很长;
- 不存在一个工具,能做到所有CUDA代码一键完美跑在昇腾、性能不变。架构底层不一样,翻译一定会有边界。

补充一个方向:CUDA兼容层(第三方方案)

还有一些商业兼容层项目,目标是直接跑原生CUDA程序,不用改代码。但这类方案一般有明显性能损耗,而且不是华为官方的,生产环境很少用。