# demo **Repository Path**: tajh/demo ## Basic Information - **Project Name**: demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-12 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # acl_save 自定义算子示例 本仓库演示如何为 **Ascend NPU**(`DeviceType::PrivateUse1`)实现两个简单的 PyTorch 自定义算子: * **`acl_save`** – 功能同 `acl_copy`,并把张量保存为 `torch.save` 兼容的 `.pt` 文件(自动在文件名结尾追加序号,避免覆盖)。 二者均支持: * `Meta` 张量(图编译阶段) * `CPU`、`PrivateUse1` 设备运行时实现 * `torch.compile` / FX 图模式 --- ## 环境依赖 1. **PyTorch ≥ 2.1**(需包含 NPU 后端 patch,或自编译版本,能创建 `device="npu"` 的张量)。 2. **Ascend CANN Runtime ≥ 8.0** ,默认安装路径 `/usr/local/Ascend/ascend-toolkit/latest`。 * 如安装在其它位置,设置环境变量: ```bash export ASCEND_HOME_PATH=/path/to/ascend-toolkit ``` 3. **Python ≥ 3.8** 4. C++17 编译器(gcc/clang/MSVC 均可)。Windows 下需 Visual Studio 2022 + CMake。 --- ## 编译安装 仓库结构简洁,不依赖第三方 Python 包,直接本地源码安装即可。 ```bash # 克隆源码并进入 cd demo # 使用 pip 源码安装(会触发 C++/CUDA/NPU 扩展编译) pip install . # 若仅调试,可使用开发模式 pip install -v -e . ``` > 首次安装会编译 `csrc/my_copy.cpp` 生成 `my_copy_ext` 动态库,过程中若找不到 `libascendcl.so` 请检查 `ASCEND_HOME_PATH` or `LD_LIBRARY_PATH`。 --- ## 快速上手 ```python import torch, numpy as np from my_copy import acl_save # 别名接口,等同 acl_save # 构造张量 x = torch.randn(2, 3) if hasattr(torch, "npu"): x = x.to("npu") # 初始化 NPU/ACL 上下文 # 复制并保存(文件名自动加序号) path = "tensor.pt" y2 = acl_save(x, path) print(y2.device) # 读取保存的 .pt 文件 saved = torch.load("tensor_0.pt") print(saved) ``` 读取保存的文件: ```python import torch tensor = torch.load("tensor_0.pt") print(tensor) ``` --- ## API 说明 | 函数 | 作用 | 返回值 | |------|------|--------| | `my_copy.acl_save(tensor, path)` | 同上,并把数据保存到 `path`(文件名自动附加序号) | 见下方说明 | * `tensor` 支持 **CPU / NPU / Meta** 设备。 * `path` 可以是任意文件名(含目录)。最终文件名统一为 `name_序号.pt`,自动避免覆盖。 * 返回值:CPU/Meta 输入返回对应设备的新 Tensor;NPU 输入返回原 NPU Tensor(文件写入在当前 NPU stream 上排队,必要时自行同步)。 --- ## 注意事项 1. 调用前需确保 **Ascend Runtime** 已初始化(通常在第一次构造 NPU Tensor 时自动完成)。 2. 若在 **图模式** (`torch.compile`) 下遇到 fake tensor 报错,可显式导入 `my_copy` 触发 Meta 注册。 3. 保存的文件为 `torch.save` 兼容格式(`.pt`),可用 `torch.load` 直接读取。 --- ## License MIT