asnumpy:基于 CANN 技术的科学计算库项目

哈尔滨工业大学计算学部苏统华、王甜甜老师团队联合华为CANN团队开发的华为昇腾NPU原生Numpy仓库

分支3Tags2
文件最后提交记录最后更新时间
4 个月前
1 个月前
1 个月前
1 个月前
3 天前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
9 个月前
1 个月前
3 天前
1 个月前
1 个月前
AsNumpy Logo

AsNumpy

面向昇腾NPU的NumPy库

License Python CANN Platform Version

文档 | 安装指南 | 快速入门 | 示例 | 架构设计 | 问题反馈 | OpenBOAT

AsNumpy是一款面向昇腾NPU的轻量级科学计算Python库,与NumPy API完全兼容。 它通过pybind11绑定层封装华为CANN算子,并借助NPUArray数据结构(其设计与numpy.ndarray保持一致)对外提供接口。 本项目由哈尔滨工业大学AISS课题组与ISE课题组联合华为CANN团队共同开发。

import numpy as np
import asnumpy as ap

# Generate data on CPU
m1 = np.random.normal(0, 1, (3000, 3000)).astype(np.float32)
m2 = np.random.normal(0, 1, (3000, 3000)).astype(np.float32)

# Transfer to NPU
m1_npu = ap.ndarray.from_numpy(m1)
m2_npu = ap.ndarray.from_numpy(m2)

# Compute on NPU — same API as NumPy
result = ap.multiply(m1_npu, m2_npu)

# Transfer back to CPU
print(result.to_numpy())

注意:下方性能部分对 ap.mean()(归约操作)进行了基准测试, 这与上文演示的 ap.multiply()(逐元素操作)有所不同。完整复现步骤请参见 benchmarks.md

特性

  • 兼容 NumPy API — 函数名称与签名均匹配 NumPy;现有代码可通过最小改动完成迁移
  • 昇腾 910B 原生加速 — 算子通过 CANN ACLNN 直接在 NPU 上运行,无框架开销
  • 自动资源管理NPUArray 析构函数自动释放设备内存(RAII 机制)
  • 双向数据传输 — 提供 from_numpy()to_numpy() 实现 CPU 与 NPU 间的无缝数据交换
  • 广播支持 — 内置 GetBroadcastShape() 遵循 NumPy 广播语义
  • 算子可扩展性 — 缺失的 CANN 算子通过 OpenBOAT 进行补充

安装

环境要求:GCC >= 11.2,CMake >= 3.26,Python >= 3.9,CANN >= 8.2.RC1.alpha003,昇腾 910B NPU。

编译前需设置 CANN 环境变量:

export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest

使用 uv(推荐)

git clone --recursive https://gitcode.com/cann/asnumpy.git
cd asnumpy
uv sync

使用 pip

git clone --recursive https://gitcode.com/cann/asnumpy.git
cd asnumpy

# Upgrade pip, setuptools, and wheel to their latest versions
pip install --upgrade pip setuptools wheel

# Install the 'build' package, which provides a simple build front-end for Python packages
pip install build

# Build the current Python project (create source distribution and wheel)
python -m build

# Install all generated wheel (.whl) files from the dist/ directory
pip install dist/*.whl

验证安装

import asnumpy as ap
arr = ap.ones((1000, 1000), dtype=ap.float32)
print(arr.shape)  # (1000, 1000)

快速入门

上文展示了一个极简示例。如需查看 NumPy 与 AsNumpy 代码的完整对比以及更多使用模式,请参阅快速入门指南

可运行脚本位于 examples/ 目录下。

性能表现

在 3000×3000 float32 数据上,ap.mean() 在相同机器上的运行速度比 np.mean() 快 35.70 倍。随着数据规模的增大,NPU 的并行计算优势愈发显著。

ap.mean() 是一种归约操作;顶部演示使用的是 ap.multiply()(按元素操作)。

形状 数据量 AsNumpy (毫秒) NumPy (毫秒) 加速比
(500, 500) 250,000 0.1446 0.1429 0.99 倍
(1000, 1000) 1,000,000 0.1510 0.4904 3.25 倍
(2000, 2000) 4,000,000 0.1636 1.9372 11.84 倍
(3000, 3000) 9,000,000 0.1857 6.6303 35.70 倍

完整测试环境、控制变量及复现说明:benchmarks.md

路线图

版本号 季度 核心交付内容
v0.3.0 26年Q1 文档网站(Docsify + GitCode Pages)、带硬件白名单的 CI/CD 流水线、代码质量全面优化(spdlog、clang-format)、PyPI 发布
v0.4.0 26年Q2 数学函数 100% API 覆盖、Ascend 950 验证、triton-ascend 算子集成(10 个算子)、内存池(实验性)
v0.5.0 26年Q2 线性代数全面覆盖、triton-ascend 算子库扩展至 20 个算子、多 NPU 分布式计算研究

贡献指南

欢迎贡献代码。小的修复可直接提交拉取请求。对于较大功能,请先创建 issue 讨论设计方案。

有关构建说明、编码规范以及如何添加新算子,请参阅开发者指南

资源链接

许可协议

Apache License, Version 2.0 — 详见 LICENSE

AsNumpy 基于 NumPy 的 API 进行设计(详见 NumPy 许可协议)。

AsNumpy 由哈尔滨工业大学计算学部联合华为 CANN 团队共同开发与维护,并得到了社区贡献者的支持。

致谢

  • 哈尔滨工业大学计算学部 AISS 课题组 — 苏统华教授团队
  • 哈尔滨工业大学计算学部 ISE 课题组 — 王甜甜教授团队
  • 华为 CANN 团队

如果 AsNumpy 对您有所帮助,请为我们点亮 star。

项目介绍

哈尔滨工业大学计算学部苏统华、王甜甜老师团队联合华为CANN团队开发的华为昇腾NPU原生Numpy仓库

https://gitcode.com/cann/asnumpy定制我的领域