torchada:一行代码让 PyTorch CUDA 项目运行在摩尔线程 GPU 上
在开源社区中,SGLang、vLLM、ComfyUI、LightLLM 等热门 AI 项目都是基于 PyTorch 开发的,它们通过 torch.cuda.* API 来管理 GPU 设备、分配显存、调度计算。当开发者希望将这些项目迁移到摩尔线程 GPU 上运行时,传统做法是将代码中每一处 cuda 引用改为 musa —— 这对于动辄数十万行代码的大型项目来说,工作量巨大且极易出错。
torchada 为此而生。只需在代码入口添加一行 import torchada,它就能在运行时自动将所有 CUDA API 调用转换为 MUSA 等效调用,让现有代码零改动运行在摩尔线程 GPU 上。
本文将详细介绍 torchada 的设计理念、核心特性、使用方式、性能表现,以及已成功使用 torchada 适配摩尔线程 GPU 的开源项目。
什么是 torchada?

torchada 是一个适配器包,让 torch_musa(摩尔线程 GPU 的 PyTorch 支持)兼容标准的 PyTorch CUDA API。它的核心理念是:零代码改动,即可将 CUDA 项目迁移到摩尔线程 GPU 上运行。
为什么需要 torchada?
以 SGLang 为例,其代码库中有大量 torch.cuda.* 的调用,从设备管理到显存分配,从混合精度训练到分布式通信,几乎无处不在。如果要逐一将这些调用改为 torch.musa.*,不仅需要深入理解项目的每个模块,还要确保修改后的代码在功能上完全等价 —— 类似的情况在 vLLM、ComfyUI、LightLLM 等项目中同样存在。
torchada 从根本上解决了这个问题:它在 Python 运行时层面自动拦截所有 torch.cuda.* API 调用,并将其透明地转换为对应的 torch.musa.* 调用。开发者无需修改任何业务代码,只需在入口处添加一行 import torchada 即可。
核心特性
- 零代码改动:只需
import torchada,现有的 CUDA 代码即可在摩尔线程 GPU 上运行。 - 全面的 API 覆盖:支持设备操作、显存管理、同步、混合精度训练、CUDA Graphs、分布式训练、torch.compile、C++ 扩展等。
- 极低的运行时开销:通过激进的缓存策略,频繁调用的操作开销低于 200 纳秒。
- 自动符号映射:构建 C++ 扩展时,自动将 CUDA 符号(如
cudaMalloc、cudaStream_t)转换为 MUSA 等效符号(如musaMalloc、musaStream_t),包含 380+ 条映射规则。 - ctypes 库加载支持:自动转换 ctypes 加载的动态库中的 CUDA 函数名为 MUSA 函数名。
支持的功能一览
| 功能 | 示例 |
|---|---|
| 设备操作 | tensor.cuda(), model.cuda(), torch.device("cuda") |
| 显存管理 | torch.cuda.memory_allocated(), empty_cache() |
| 同步 | torch.cuda.synchronize(), Stream, Event |
| 混合精度 | torch.cuda.amp.autocast(), GradScaler() |
| CUDA Graphs | torch.cuda.CUDAGraph, torch.cuda.graph() |
| CUDA 运行时 | torch.cuda.cudart() → 使用 MUSA 运行时 |
| 性能分析 | ProfilerActivity.CUDA → 使用 PrivateUse1 |
| 自定义算子 | Library.impl(..., "CUDA") → 使用 PrivateUse1 |
| 分布式训练 | dist.init_process_group(backend='nccl') → 使用 MCCL |
| torch.compile | torch.compile(model) 支持所有后端 |
| C++ 扩展 | CUDAExtension, BuildExtension, load() |
| ctypes 库加载 | ctypes.CDLL 使用 CUDA 函数名 → 自动转换为 MUSA |