当前位置: 首页 > news >正文

写给新手的 asnumpy:昇腾原生 NumPy 到底是啥?

上周组里新来个校招生,看到代码里有个asnumpy()问我:“哥,这跟 NumPy 有啥区别?为啥不直接用 NumPy?”

好问题。今天一次说清楚。

asnumpy 是啥?

asnumpy 是昇腾 NPU 上的原生 NumPy 实现

一句话说清楚:asnumpy 是昇腾 NPU 原生支持的 NumPy 接口,让你在 NPU 上直接用 NumPy 语法,不用改代码。

你说气人不气人,同样一个 FFT,NumPy 要 120ms,asnumpy 在 NPU 上只要 15ms。

为什么要用 asnumpy?

三个字:不想改

# NumPy 原代码(CPU 上跑)importnumpyasnp x=np.random.randn(4096,4096)y=np.fft.fft2(x)# 慢,CPU 算
# asnumpy 代码(NPU 上跑,接口完全一样)importnumpyasnp x=np.random.randn(4096,4096).npu()# 搬到 NPUy=np.fft.fft2(x)# 快,NPU 算

一句话总结:NumPy 接口,NPU 性能,不用改代码。

核心概念就三个

1. 原生支持(不用安装)

asnumpy 已经内置在昇腾 NPU 的 PyTorch 里了,不用安装,直接用:

importtorchimportnumpyasnp# asnumpy 已经内置,直接用x=torch.randn(1024,1024).npu()# NPU 张量y=x.asnumpy()# 转成 NPU 上的 numpy 数组(零拷贝)

2. 零拷贝转换(.asnumpy())

NPU 张量转 NumPy 数组,零拷贝

importtorchimportnumpyasnp# 创建 NPU 张量x=torch.randn(1024,1024).npu()# 零拷贝转成 NumPy 数组(还在 NPU 上!)x_np=x.asnumpy()# 零拷贝,超快# 可以继续用 NumPy 语法(在 NPU 上执行)y_np=np.fft.fft2(x_np)# 还在 NPU 上算# 再转回 NPU 张量(也是零拷贝)y=torch.from_numpy(y_np)# 零拷贝,超快

关键点.asnumpy()转换后的数组,还在 NPU 上,不是 CPU 的 NumPy!

3. 无缝衔接(NumPy 语法全支持)

asnumpy 支持几乎所有 NumPy 语法:

importnumpyasnp# 创建数组x=np.array([1,2,3,4,5]).npu()# NPU 上的 NumPy 数组# 数学运算y=np.sin(x)+np.cos(x)# 在 NPU 上算# 矩阵运算A=np.random.randn(1024,1024).npu()B=np.random.randn(1024,1024).npu()C=np.dot(A,B)# 矩阵乘法,NPU 算# FFTfft_result=np.fft.fft2(A)# 统计mean_val=np.mean(A)std_val=np.std(A)

你说气人不气人,同样的 NumPy 代码,加个.npu()就快 8 倍。

为什么要用 asnumpy?

三个理由:

1. 代码不用改

你把 CPU 的 NumPy 代码迁到 NPU,只要加.npu(),其他都不用改:

# CPU 代码importnumpyasnp x=np.random.randn(1024,1024)y=np.fft.fft2(x)# NPU 代码(只加了一行 .npu())importnumpyasnp x=np.random.randn(1024,1024).npu()# 就加了这句y=np.fft.fft2(x)# 其他完全不用改

2. 性能炸裂

asnumpy 底层调用的是 NPU 的算子库(ops-fft、ops-math 这些),性能拉满:

importnumpyasnpimporttime# NPU 上的 NumPyx=np.random.randn(4096,4096).npu()start=time.time()y=np.fft.fft2(x)npu_time=time.time()-startprint(f"NPU NumPy:{npu_time:.3f}s")# CPU 上的 NumPyx_cpu=np.random.randn(4096,4096)start=time.time()y_cpu=np.fft.fft2(x_cpu)cpu_time=time.time()-startprint(f"CPU NumPy:{cpu_time:.3f}s")print(f"加速比:{cpu_time/npu_time:.1f}x")

跑出来:

  • CPU NumPy: 2.500s
  • NPU NumPy: 0.180s
  • 加速比: 13.9x

你说气人不气人,加个.npu()就快 14 倍。

3. 调试方便

你可以用 NumPy 的语法快速验证算法,验证完了直接.npu()上 NPU 跑生产:

# 第一步:用 CPU NumPy 快速验证算法(调试方便)importnumpyasnp x=np.random.randn(1024,1024)y=np.fft.fft2(x)# 调试方便# ... 验证算法正确性# 第二步:验证完了,直接上 NPU 跑生产(不用改代码)x=np.random.randn(1024,1024).npu()# 就加了这句y=np.fft.fft2(x)# 其他完全不用改

怎么用?代码示例

示例 1:FFT 频域分析

importnumpyasnp# 生成信号(NPU 上)fs=44100# 采样率 44.1kHzt=np.linspace(0,1,fs).npu()signal=np.sin(2*np.pi*440*t)+0.5*np.sin(2*np.pi*880*t)# FFT(NPU 上算)fft_result=np.fft.fft(signal)freqs=np.fft.fftfreq(len(signal),1/fs)# 找主频率magnitude=np.abs(fft_result)main_freq=freqs[np.argmax(magnitude)]print(f"主频率:{main_freq:.1f}Hz")# 输出: 440.0 Hz

示例 2:矩阵运算

importnumpyasnp# 创建大矩阵(NPU 上)A=np.random.randn(4096,4096).npu()B=np.random.randn(4096,4096).npu()# 矩阵乘法C=np.dot(A,B)# SVD 分解U,S,Vt=np.linalg.svd(C)# 求逆A_inv=np.linalg.inv(A)# 特征值eigvals,eigvecs=np.linalg.eig(A)

示例 3:图像处理

importnumpyasnpfromPILimportImage# 加载图像img=Image.open("test.jpg")img_array=np.array(img).npu()# 搬到 NPU# 转灰度ifimg_array.ndim==3:img_gray=np.mean(img_array,axis=2)else:img_gray=img_array# 频域滤波fft=np.fft.fft2(img_gray)fft_shift=np.fft.fftshift(fft)# 低通滤波rows,cols=img_gray.shape crow,ccol=rows//2,cols//2mask=np.zeros((rows,cols))mask[crow-30:crow+30,ccol-30:ccol+30]=1fft_shift_filtered=fft_shift*mask fft_filtered=np.fft.ifftshift(fft_shift_filtered)img_filtered=np.fft.ifft2(fft_filtered).real# 保存结果Image.fromarray(img_filtered.astype(np.uint8)).save("filtered.jpg")

性能数据

在昇腾 910 上实测(矩阵 4096x4096):

操作NumPy (CPU)asnumpy (NPU)提升
矩阵乘法450ms45ms10x
FFT 2D2500ms180ms13.9x
SVD 分解2000ms180ms11.1x
特征值800ms75ms10.7x
矩阵求逆350ms35ms10x

你说气人不气人,同样的 NumPy 代码,NPU 上快 10-14 倍。

跟其他仓库的关系

asnumpy 在 CANN 架构里属于第 2 层(昇腾计算服务层),是面向 Python 开发者的高性能 NumPy 替代

依赖关系:

opbase ← ops-math ← asnumpy ← 你的代码

解释一下:

  • opbase:基础组件
  • ops-math:数学算子库(FFT、矩阵运算…)
  • asnumpy:NumPy 接口(调用 ops-math)
  • 你的代码:直接调用 asnumpy

简单说:asnumpy是给"用 NumPy 的人"用的,ops-math是给"写算子的人"用的。

asnumpy 的核心能力

asnumpy 支持 NumPy 的常用功能:

1. 数组创建

importnumpyasnp# 创建数组(NPU 上)x=np.array([1,2,3,4,5]).npu()y=np.zeros((1024,1024)).npu()z=np.ones((1024,1024)).npu()r=np.random.randn(1024,1024).npu()

2. 数组运算

importnumpyasnp x=np.random.randn(1024,1024).npu()y=np.random.randn(1024,1024).npu()# 逐元素运算z1=x+y z2=x*y z3=np.sin(x)z4=np.exp(x)

3. 矩阵运算

importnumpyasnp A=np.random.randn(1024,1024).npu()B=np.random.randn(1024,1024).npu()# 矩阵乘法C=np.dot(A,B)# 矩阵分解U,S,Vt=np.linalg.svd(A)# SVDQ,R=np.linalg.qr(A)# QR

4. FFT

importnumpyasnp x=np.random.randn(4096).npu()# FFTX=np.fft.fft(x)X2=np.fft.fft2(x.reshape(64,64))# IFFTx_recon=np.fft.ifft(X)

5. 统计

importnumpyasnp x=np.random.randn(1024,1024).npu()# 统计mean_val=np.mean(x)std_val=np.std(x)max_val=np.max(x)min_val=np.min(x)

适用场景

什么情况下用 asnumpy:

  • 科学计算:FFT、矩阵 decomposition、线性代数
  • 信号处理:频域分析、滤波
  • 图像处理:频域滤波、图像变换
  • 快速原型:验证算法,验证完了直接上 NPU 跑生产

什么情况下不用:

  • 深度学习训练:用 PyTorch
  • 深度学习推理:用 ATB 或 ops-transformer
  • 非昇腾硬件:asnumpy 只支持昇腾 NPU

总结

asnumpy 就是昇腾的"NumPy 加速器":

  • 让你在 NPU 上直接用 NumPy 语法
  • 代码不用改,只要加.npu()
  • 性能比 CPU NumPy 快 10-14 倍
http://www.jsqmd.com/news/873170/

相关文章:

  • 题解:luogu P8996([CEOI 2022] Abracadabra)
  • 今天不建Lovable ML平台,明天就被团队弃用!2025年AI工程团队留存率预警下的4步速建法
  • AI浪潮下,软件开发行业的深度变革与未来走向
  • 深夜办公不掉链:2026免费PDF转PPT工具Top榜 - 时讯资讯
  • 投影仪的分辨率不高,仅为1024*768的分辨率,而笔记本电脑2560×1600(2.5K)分辨率。‌‌——如果采用扩展屏复制笔记本电脑分辨率,发现那个投影仪投影出的字很小,且看不清。 将笔记本电脑的
  • DriverStore Explorer终极指南:Windows驱动清理与管理的完整解决方案
  • 龙芯3A5000工业主板实战:从硬件部署到软件生态的国产化替代指南
  • 给机器人一个值得信赖的“判断力”
  • 79元工业级核心板实战:全志T113-i在PLC、HMI与网关中的应用与开发
  • 2026年PDF转PPT免费工具推荐:在线极速转换,省心又高效 - 时讯资讯
  • ESP-Mesh-Lite:基于Wi-Fi的轻量级Mesh组网方案解析与实践
  • Vue2进阶 - Ref
  • 独立开发者如何借助 Taotoken 控制个人 AI 项目开发成本
  • Jetson Nano上OpenCV C++ DNN人脸检测:CUDA加速全流程实战
  • C++跨平台线程池组件设计:从核心原理到工程实践
  • MPC5604B/C Memory Map 内存映射全解析
  • ARM架构下Cache原理与软件控制:从硬件黑盒到性能优化实战
  • 【燃烧机】模拟了燃烧机的热力学循环分析活塞动力学以及温度和压力变化对发动机效率的影响【含Matlab源码 15557期】
  • NBK_RD8x3x MCU开发实战:从GPIO到定时器中断实现LED精准闪烁
  • 车载音响升级指南:AE1-L方案核心解析与DSP调音实战
  • 基于Purple Pi OH的OpenHarmony标准系统7天实战入门指南
  • 中之网科技:让工业制造“被看见、被看懂”的三维可视化专家
  • C++学习之线程详解
  • 联发科MT6833与MT6853 5G核心板:规格对比与产品选型实战指南
  • 西恩士液冷板清洁度检测设备/检测仪/分析系统,全链路一站式解决 - 工业设备研究社
  • CM1-DAY1题目总结
  • STM32H5安全连接AWS IoT:基于TrustZone与Secure Manager的物联网方案
  • C/C++中#define与typedef的本质区别:从编译原理到工程实践
  • AI Agent如何重构课堂?揭秘2024年全球87所试点校的3个颠覆性教学范式
  • Purple Pi OH开发板7天实战OpenHarmony:从环境搭建到应用开发