1. 概述

本文档主要用于指导用户在曦云® 系列 GPU 上安装部署和使用 mcPy。

1.1. mcPy 介绍

mcPy 是一个兼容 NumPy 并使用曦云系列 GPU 进行计算加速的 Python 工具库。 mcPy 的目标是给 Python 用户提供 GPU 的计算加速能力,用户只需要执行简单的代码替换就可以将原有的 NumPy 应用程序代码迁移到曦云系列 GPU 上运行。

mcPy 支持 ndarray 数据对象并提供相关的 API 接口,这些 API 接口兼容与之对应的NumPy API,不同之处在于 mcPy 底层由曦云系列 GPU 提供计算加速。 mcPy 提供的 API 接口如下:

  • N 维数组(ndarray): cupy.ndarray

    • 数据类型(dtypes):boolean(bool)、integer(int8, int16, int32, int64, uint8, uint16, uint32, uint64)、float(float16, float32, float64)和complex(complex64)

    • 支持与 numpy.ndarray 相同的编程方式,包括基础索引、高级索引和广播

  • mcPy例程

    • 模块级函数: cupy.*

    • 线性代数函数: cupy.linalg.*

    • 快速傅里叶变换: cupy.fft.*

    • 随机数生成器: cupy.random.*

mcPy 的 API 构建在 MXMACA SDK 之上,包括 mcBLAS、mcFFT、mcSPARSE、mcSOLVER、mcRAND、mcThrust、mcCUB,并由这些底层 SDK 提供最佳的性能。

mcPy 支持对 ndarray 对象应用自定义的核函数(kernel function),包括:

  • 内核模版(Kernel Template):在单个核函数中快速定义 element-wise操作和 reduction 操作

  • 原始内核(Raw Kernel):快速导入现有的MXMACA C++代码

  • 即时编译(JIT Compile):从 Python 代码中编译生成内核

  • 内核融合(Kernel Fusion):将多个 mcPy 操作融合成一个内核

mcPy 实现了用于数据交换和互操作的标准API,包括 DLPack__array_ufunc__NEP 13)、__array_function__NEP 18)和数组 API 标准(Array API Standard NEP 47)。 基于这些标准的 API 和协议,mcPy 可以很容易地和 NumPy、PyTorch、TensorFlow、MPI4Py 以及其他支持相同 API 和协议的 Python 库进行数据互操作。

1.2. 软件包信息

mcPy 提供了 maca-mcpy-<VERSION>-linux-x86_64.tar.xzmaca-mcpy-<VERSION>-linux-aarch64.tar.xz,可以使用命令 tar -xJf 进行解压,解压后的二进制软件包信息说明参见表 1.1

表 1.1 mcPy发布的软件包

软件包类型

文件名示例

说明

Python wheel包

numbax-x.y.z.n+bu.v.w.m-cp38-cp38-linux_x86_64.whl

适用于x86_64和Python 3.8的numbax Python二进制扩展包

Python wheel包

numbax-x.y.z.n+bu.v.w.m-cp310-cp310-linux_x86_64.whl

适用于x86_64和Python 3.10的numbax Python二进制扩展包

Python wheel包

mcpy-x.y.z.n+bu.v.w.m-cp38-cp38-linux_x86_64.whl

适用于x86_64和Python 3.8的mcPy Python二进制扩展包

Python wheel包

mcpy-x.y.z.n+bu.v.w.m-cp310-cp310-linux_x86_64.whl

适用于x86_64和Python 3.10的mcPy Python二进制扩展包

Python wheel包

numbax-x.y.z.n+bu.v.w.m-cp38-cp38-linux_aarch64.whl

适用于aarch64和Python 3.8的numbax Python二进制扩展包

Python wheel包

numbax-x.y.z.n+bu.v.w.m-cp310-cp310-linux_aarch64.whl

适用于aarch64和Python 3.10的numbax Python二进制扩展包

Python wheel包

mcpy-x.y.z.n+bu.v.w.m-cp38-cp38-linux_aarch64.whl

适用于aarch64和Python 3.8的mcPy Python二进制扩展包

Python wheel包

mcpy-x.y.z.n+bu.v.w.m-cp310-cp310-linux_aarch64.whl

适用于aarch64和Python 3.10的mcPy Python二进制扩展包

备注

  • x.y.z.n 表示对应包的软件发布版本,bu.v.w.m 表示基于版本号为 u.v.w.m 的 MXMACA 进行编译的构建号。

  • mcPy 运行依赖 numbax。

  • 当前支持 x86_64和aarch64 平台的 Python 3.8 和 3.10,应选取适配具体 Python 版本的软件包。