深入探索昇腾数据科学库AsNumpy的高性能奥秘

训练营简介

2025年昇腾CANN训练营第二季,基于CANN开源开放全场景,推出0基础入门系列、码力全开特辑、开发者案例等专题课程,助力不同阶段开发者快速提升算子开发技能。获得Ascend C算子中级认证,即可领取精美证书,完成社区任务更有机会赢取华为手机,平板、开发板等大奖

报名链接:https://www.hiascend.com/developer/activities/cann20252#cann-camp-2502-intro

开篇:时代背景下的技术创新

2025年8月21日,国务院发布了《关于深入实施人工智能+行动的意见》,这是中国首部AI领域的纲领性文件,明确提出要强化基础支撑能力,构建面向全球开放的开源技术体系和社区生态。在这样的时代背景下,华为于2025年8月5日宣布全面开源开放昇腾计算产业,为中国AI基础软件的发展注入了强大动力。

与此同时,Python以26.14%的占比成为历史上最受欢迎的编程语言,而NumPy作为Python的基础性数学函数库,在数据科学领域占据着核心地位。然而,NumPy社区调查显示,33%的用户最关注性能问题,期待对GPU/NPU等异构计算设备的支持。正是在这样的需求驱动下,AsNumpy应运而生。

思维导图

mindmap
  root((AsNumpy))
    设计理念
      核心目标
        高效计算
        接口兼容
        易用性
      三层架构
        接口层
        封装层
        运行时层
      编程体验
        无缝迁移
        API一致
    核心技术
      NPUArray
        设计原则
        数据类型扩展
        自动内存管理
      内存池设计
        预先分配
        页式管理
        动态映射
        批处理优化
      算法接口
        250个接口
        113个已开源
        模块划分
        优先级策略
    OpenBolt算子库
      设计理念
        聚焦核心40个
        极致优化
        分层实现
      三层架构
        核心层
        基础层
        应用层
      开发进展
        4人到35人
        113个算子
        年底目标200个
    性能表现
      测试结果
        小规模≈1倍
        中等规模12倍
        大规模100倍
      优势来源
        硬件优势
        并行能力
        内存优化
        算子优化
      使用建议
        小规模数据
        中等规模数据
        大规模数据
        批量处理
    安装使用
      安装流程
        克隆代码
        安装依赖
        执行安装
      快速上手
        数组创建
        数组运算
        矩阵运算
        统计运算
      常用操作
        形状操作
        数据转换
    应用场景
      典型场景
        数据科学分析
        科学计算
        数学建模
        深度学习前处理
      核心优势
        接口兼容
        性能卓越
        使用简便
        生态完善
        开源开放
      版本规划
        v0.2当前版本
        v1.0近期目标
        v2.0未来愿景
    教育价值
      产教融合平台
        国家级平台
        实验中心
        育人基地
      三层培养体系
        课程层面
        俱乐部层面
        项目层面
      人才培养
        本硕博分阶段
        全国辐射
        反哺生态
    社区贡献
      开源成就
        首个第三方库
        Gitee奖项
        技术影响
      贡献机会
        接口扩展
        算法优化
        新功能开发
        文档完善
        Bug修复
      未来展望
        性能优化
        功能扩展
        生态融合
        行业应用

一、AsNumpy的设计理念与架构

1.1 核心设计目标

AsNumpy是哈尔滨工业大学与华为联合开发的首个在昇腾NPU上开源的数据科学库,其核心目标包括三个维度:

1. 高效计算:在昇腾NPU上实现高效的Python数学运算、数据科学和科学计算能力,充分发挥NPU的强大算力。

2. 接口兼容:与NumPy接口高度兼容,最小化用户的学习曲线,让开发者能够无缝迁移现有代码。

3. 易用性:提供简洁的API和良好的开发体验,降低NPU编程的门槛。

1.2 三层架构设计

AsNumpy采用清晰的三层分层架构:

接口层:与NumPy接口高度兼容,开发者使用AsNumpy的方式与使用NumPy完全一致。

封装层:封装使用SNC(类C++语言)编写的算子和数据结构,提供Python可调用的接口。

运行时层:直接调用NPU的运行时接口(ACL - Ascend Computing Language),实现与硬件的高效交互。

这种分层设计的优势在于:

  • 上层保持API稳定性和易用性
  • 中间层实现灵活的功能扩展
  • 底层充分利用硬件能力

1.3 无缝的编程体验

最令人惊喜的是AsNumpy的编程体验。开发者可以将NumPy代码几乎不做修改地迁移到AsNumpy:

# NumPy代码
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.add(a, b)

# AsNumpy代码(只需修改import)
import asnumpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.add(a, b)

调用接口完全一致,实现了真正的无缝迁移!

二、核心技术实现解析

2.1 NPUArray数据结构设计

AsNumpy的核心数据结构是NPUArray,它是对NumPy的NDArray的NPU版本实现。

设计原则

  1. 完全兼容NumPy的NDArray API:所有NumPy支持的操作,NPUArray都尽可能支持。

  2. 内部封装完善:封装DType(数据类型)、Shape(形状)等基本信息,以及ACL传输数据结构。

  3. 自动内存管理:通过智能指针和引用计数,实现自动化的内存管理,避免手动管理导致的内存泄漏问题。

数据类型扩展

AsNumpy扩展支持三大类数据类型:

  • 整型类型:int8, int16, int32, int64, uint8等
  • 浮点型类型:float16, float32, float64
  • 复数类型:complex64, complex128

这些数据类型通过C API注册,包装成Python可用的数据对象,确保与NumPy的数据类型体系完全兼容。

2.2 高性能内存池设计

内存管理是影响性能的关键因素。AsNumpy基于昇腾NPU提供的虚拟内存管理器,设计了高效的内存池机制:

核心策略

  1. 预先分配:预先分配大块连续的虚拟地址空间,避免频繁的内存申请操作。

  2. 页式管理:以2MB页为最小单位进行内存的映射和回收,提高管理效率。

  3. 动态映射:当虚拟地址空间不足时,自动进行重新映射和内存压缩。

  4. 批处理优化:将多个小的内存操作合并为大的批处理操作,减少系统调用开销。

优势

  • 减少内存碎片
  • 降低内存分配延迟
  • 提高内存利用率
  • 支持大规模并发分配

2.3 算法接口的规划与实现

接口

AsNumpy的接口开发遵循科学的优先级策略:

总体规划:计划实现约250个接口,覆盖NumPy的核心功能。

当前进展:已完成113个接口的开源,包括基础模块和核心功能模块。

模块划分

  • 基础模块:调试工具、数据类型定义、内存池管理
  • Random模块:随机数生成(83%用户使用)
  • 线性代数模块:矩阵运算(70%用户使用)
  • Math模块:数学函数
  • I/O模块:数据读写
  • 傅里叶变换等其他专业模块

优先级策略:基于NumPy社区调查确定开发优先级,优先实现用户最常用的功能。

三、OpenBolt高性能算子库

3.1 设计理念

AsNumpy的底层性能依赖于OpenBolt高性能算子库。OpenBolt的设计理念是:

聚焦核心:针对40个核心算子进行极致优化,而不是平铺式地实现所有算子。

分层实现:构建9个基础算子库,面向不同行业分层实现。

持续优化:算子性能优化是一个持续的过程,不断追求极致。

3.2 三层架构

OpenBolt采用三层架构设计:

核心层:基础算子,如矩阵乘法、卷积、激活函数等。这些算子经过深度优化,性能达到极致。

基础层:在核心算子基础上构建的数学库、图像处理库等。如线性代数库基于矩阵乘法,图像处理库基于卷积等。

应用层:面向特定行业的算子库,如金融计算、生物信息学等领域的专用算子。

3.3 开发进展与团队

AsNumpy和OpenBolt项目的开发展现了开源社区的强大力量:

起始阶段:2025年5月启动,初始团队仅4人。

快速成长:团队规模迅速扩大到35人,以研究生为主,充分发挥高校科研优势。

当前成果:已完成113个算子的实现和开源。

年底目标:计划完成200个算子,覆盖NumPy的主要功能。

这种发展速度充分体现了开源协作的优势。

四、性能表现深度分析

4.1 性能测试结果

AsNumpy的性能表现令人印象深刻。以矩阵乘法为例:

矩阵规模 AsNumpy执行时间 NumPy执行时间 加速比
100×100 约等于NumPy 基准 ≈1(无明显优势)
1000×1000 显著减少 基准 12倍
10000×10000 大幅减少 基准 100倍

关键观察

  1. 小规模数据:AsNumpy与NumPy性能差异不明显,因为数据搬运开销占比较高。

  2. 中等规模数据:AsNumpy开始显现加速效果,NPU的并行计算能力开始发挥作用。

  3. 大规模数据:AsNumpy展现出巨大优势,加速比可达100倍,充分发挥了NPU的强大算力。

4.2 性能优势的来源

1. 硬件优势:昇腾NPU的Cube计算单元专门针对矩阵运算优化,单周期可完成大量计算。

2. 并行能力:多个AI Core并行工作,处理大规模数据时优势明显。

3. 内存优化:高带宽的HBM(High Bandwidth Memory)和多级缓存设计,减少访存瓶颈。

4. 算子优化:OpenBolt提供的高性能算子经过深度优化,充分利用硬件特性。

4.3 使用建议

基于性能测试结果,我们给出以下使用建议:

小规模数据(< 1000元素):使用NumPy即可,AsNumpy优势不明显。

中等规模数据(1000-10000元素):AsNumpy开始展现性能优势,建议使用。

大规模数据(> 10000元素):强烈推荐AsNumpy,可获得显著性能提升。

批量处理:如果需要处理大量中小规模数据,也推荐AsNumpy,可以利用批处理优化。

性能评测

五、安装与使用实战

5.1 安装流程

AsNumpy的安装非常简单:

# 克隆代码仓库
git clone https://gitee.com/ascend/asnumpy.git

# 进入目录
cd asnumpy

# 安装依赖
pip install -r requirements.txt

# 安装AsNumpy
python setup.py install

环境要求

  • Python 3.7+
  • 已安装CANN开发套件
  • 昇腾NPU硬件(或使用CPU仿真模式)

5.2 快速上手示例

下面是一个完整的性能对比示例:

import asnumpy as ap
import numpy as np
import time

# 定义测试数据尺寸
shape = (12000, 12000)

# 生成测试数据
np_data1 = np.random.rand(*shape)
np_data2 = np.random.rand(*shape)

# NumPy矩阵乘法性能测试
start = time.time()
np_result = np.matmul(np_data1, np_data2)
np_time = time.time() - start
print(f"NumPy执行时间: {np_time:.3f}秒")

# AsNumpy矩阵乘法性能测试
# 首先将数据转换为NPUArray
ap_data1 = ap.array(np_data1)
ap_data2 = ap.array(np_data2)

start = time.time()
ap_result = ap.matmul(ap_data1, ap_data2)
ap_time = time.time() - start
print(f"AsNumpy执行时间: {ap_time:.3f}秒")

# 计算加速比
speedup = np_time / ap_time
print(f"加速比: {speedup:.2f}x")

# 验证结果正确性
ap_result_cpu = ap.asnumpy(ap_result)  # 转回NumPy array
max_diff = np.max(np.abs(np_result - ap_result_cpu))
print(f"最大误差: {max_diff:.6f}")

5.3 常用操作示例

import asnumpy as ap

# 创建数组
a = ap.array([1, 2, 3, 4, 5])
b = ap.zeros((3, 3))
c = ap.ones((2, 4))
d = ap.random.rand(5, 5)

# 数组运算
e = a + 10
f = a * 2
g = ap.sin(a)
h = ap.exp(a)

# 矩阵运算
m1 = ap.random.rand(100, 200)
m2 = ap.random.rand(200, 150)
m3 = ap.matmul(m1, m2)

# 统计运算
mean_val = ap.mean(a)
sum_val = ap.sum(a)
max_val = ap.max(a)

# 形状操作
reshaped = ap.reshape(a, (5, 1))
transposed = ap.transpose(m1)

# 转换回NumPy
numpy_array = ap.asnumpy(a)

六、应用场景与生态价值

6.1 典型应用场景

数据科学分析:大规模数据的统计分析、机器学习前处理等。

科学计算:物理模拟、化学计算、气象预报等计算密集型任务。

数学建模:数值优化、微分方程求解等数学问题。

深度学习前处理:图像预处理、数据增强等操作。

6.2 核心优势总结

1. 接口兼容:与NumPy高度兼容,迁移成本几乎为零。

2. 性能卓越:大规模数据计算场景下可实现100倍加速。

3. 使用简便:零门槛使用,无需深入了解NPU底层技术。

4. 生态完善:华为官方支持,持续更新演进。

5. 开源开放:代码完全开源,社区可以自由贡献和定制。

6.3 版本演进规划

v0.2(当前版本)

  • 兼容NumPy前100个最常用API
  • 支持基础的数学运算和线性代数
  • 性能初步优化

v1.0(近期目标)

  • 更好的兼容性,支持主要算法的无缝迁移
  • 性能进一步优化
  • 完善的文档和示例

v2.0(未来愿景)

  • 拓展更多SNC算子库
  • 支持用户自定义算子扩展
  • 提供更丰富的高级功能

七、教育价值与人才培养

7.1 产教融合平台

AsNumpy项目依托哈尔滨工业大学的优质教育资源:

国家级平台

  • 国家级产教融合创新平台
  • 计算机国家级实验示范中心
  • 教育部协同育人示范基地

这些平台为项目提供了坚实的研发基础和人才保障。

7.2 三层培养体系

课程层面:将开源开发纳入培养方案和课程体系,让学生在学习阶段就接触真实的开源项目。

俱乐部层面:成立学生开源俱乐部,作为学生自主创新的实体组织。

项目层面:通过技术研发和科研成果开源,培养学生的工程实践能力。

7.3 人才培养目标

分阶段培养

  • 本科生:参与算子测试和文档编写
  • 硕士生:负责算子开发和性能优化
  • 博士生:主导架构设计和关键技术攻关

辐射范围:支撑全国高校和企业的AI人才培养,为昇腾生态输送人才。

反哺机制:培养的人才反哺昇腾开源生态,形成良性循环。

八、社区贡献与未来展望

8.1 开源成就

AsNumpy作为首个第三方在昇腾官方仓开源的库,取得了骄人的成绩:

快速认可:开源第二天就获得Gitee开源项目奖,排名68位。

技术影响:在华为全联接大会等重要技术会议上进行分享。

社区活跃:吸引了众多开发者关注和贡献。

8.2 贡献机会

AsNumpy欢迎各种形式的贡献:

接口扩展:实现更多NumPy接口的NPU版本

算法优化:优化现有算子的性能

新功能开发:添加NumPy没有但对NPU有价值的功能

文档完善:编写教程、示例和最佳实践

Bug修复:发现和修复问题

8.3 未来展望

AsNumpy的愿景是成为NPU上最好用的数据科学库,为Python科学计算社区提供高性能解决方案。未来的发展方向包括:

性能持续优化:不断优化算子性能,缩小与理论峰值的差距。

功能持续扩展:实现更多NumPy接口,提高兼容性。

生态深度融合:与Pandas、SciPy等库深度集成。

行业应用推广:在金融、医疗、科研等领域推广应用。

总结

AsNumpy是中国AI开源创新的典型代表,它不仅是一个技术项目,更是产学研深度融合、人才培养与技术创新协同发展的成功案例。

通过与NumPy高度兼容的接口设计,AsNumpy让开发者能够以最小的成本享受NPU带来的巨大性能提升。在大规模数据计算场景下,100倍的加速比展现了昇腾NPU的强大算力和AsNumpy团队的优化功力。

更重要的是,AsNumpy承载着通过开源项目培养AI底层开发人才的教育使命。从本科生到博士生的分阶段培养体系,为中国AI人才培养探索出了一条新路径。

展望未来,随着更多开发者的加入和贡献,AsNumpy必将在功能完善度和性能优化上不断进步,为推动中国人工智能基础软件生态的繁荣发展贡献力量。让我们携手共建昇腾开源生态,为AI技术的发展添砖加瓦!

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐