---
title: Numpy使用KML
description: "Numpy（Numerical Python），是一个高性能Python库，支持大量的维度数组与矩阵运算，此外也针对数组运算提供大量的数学函数库。KML_Numpy库是将KML数学库适配到Numpy的C源码中，使其相应函数的底层调用到KML接口，以此进一步提高性能。当前KML_Numpy适配的接口类型主要有：基础数学运算、FFT、线性代数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/mg/kunpengaccel_12_0065.html
sourcePath: /source/zh/kunpenghpcs/hpckit/mg/kunpengaccel_12_0065.html
indexId: ac9997c5f326bbac449bf5dc124c9702b3db98da6dfde3479157476868ee4b0f58
---
# Numpy使用KML

#### Numpy库介绍

Numpy（Numerical Python），是一个高性能Python库，支持大量的维度数组与矩阵运算，此外也针对数组运算提供大量的数学函数库。KML_Numpy库是将KML数学库适配到Numpy的C源码中，使其相应函数的底层调用到KML接口，以此进一步提高性能。当前KML_Numpy适配的接口类型主要有：基础数学运算、FFT、线性代数。


#### 环境要求

目前KML_Numpy适配了两个版本，分别为1.22.4和2.0.2，对构建环境有各自的要求：

- Python版本号为3.8~3.10，且含有开发模块。
  若Python为自行安装构建，一般在Python的安装目录下都会存在include目录包含了Python.h等头文件。若Python为系统自带，一般可以使用yum或apt命令安装Python开发包。安装命令如下：

```
yum install python3-devel.aarch64    # 或 yum install python3-devel
```


  之后在“/usr/local/include”目录下出现“python3.x”或“python3”目录，内含开发Python相关功能会使用到的头文件。（示例路径为“/usr/local/include/python3”。）


- GCC版本号为8及以上。

- 其中1.22.4版本要求Cython版本号为0.29.xx，2.0.2版本要求Cython>=3.0.6，meson-python>=0.15.0。

- 已安装KML。


#### 构建KML_Numpy库

以下为1.22.4版本Numpy构建方式：

1. 安装1.22.4版本开源Numpy库。

```
pip3 install numpy==1.22.4
```


2. 安装0.29.xx版本cython库。

```
pip3 install cython==0.29.34
```


3. 下载kml_adapter，并上传到构建环境（假设上传至“/home”目录下）
  下载地址：https://atomgit.com/openeuler/kml_adapter(https://atomgit.com/openeuler/kml_adapter)

4. 配置相关环境变量（假设HPCKit安装路径为/opt/HPCKit）。

```
export KML_PATH=/opt/HPCKit/latest/kml/gcc
export PY3_HEADER_PATH=/usr/local/include/python3
export OPT=" -O3 -fopenmp -fopenmp-simd -I numpy/linalg -DHAVE_NEON_NPY -DHAVE_HUAWEI_KML -DNDEBUG -mtune=tsv110 -fno-math-errno -I ${PY3_HEADER_PATH} -I /usr/local/include/ -I ${KML_PATH}/include -L ${KML_PATH}/lib/neon -L ${KML_PATH}/lib/noarch -L ${KML_PATH}/lib/neon/kblas/multi -L ${KML_PATH}/lib/noarch/kvml/single -L ${KML_PATH}/lib/neon/kspblas/single -Wl,-rpath=${KML_PATH}/lib/neon -Wl,-rpath=${KML_PATH}/lib/noarch -Wl,-rpath=${KML_PATH}/lib/neon/kblas/multi -Wl,-rpath=${KML_PATH}/lib/noarch/kvml/single -Wl,-rpath=${KML_PATH}/lib/neon/kspblas/single -lkblas -lkvml -lkm -lkspblas -lklapack -lknpy -lkfft -lkfftf -lkm_l9 -lm -lksvml -lgfortran"
```


5. 编译。

```
cd /home/kml_adapter/numpy_adapter
NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python3 setup.py build -j16
```


6. 确认编译是否成功。
  如果编译成功，将在“numpy_adapter/build/”下根据你的环境生成如下几个目录：

```
lib.linux-aarch64-3.x
src.linux-aarch64-3.x
temp.linux-aarch64-3.x
```


以下为2.0.2版本Numpy构建方式：

1. 下载Numpy-2.0.2源码。
  下载地址：numpy_kml(https://gitee.com/kunpeng-hpc/numpy/tree/maintenance/2.0.2_kml/)

2. 下载子程序。
  1 git submodule update --init --recursive

3. 进入根目录执行以下命令。
  1 sed -i "s|\$PREFIX|$(pwd)|g" pyproject.toml

4. 添加环境变量为pcfiles所在路径。
  1 export PKG_CONFIG_PATH=$PWD/pcfiles

5. 执行编译命令。
  1 python -m build


#### Numpy库使能KML

1.22.4版本Numpy使能：

配置环境变量，确保优先调用KML_Numpy。（假设构建生成的是“kml_adapter/numpy_adapter/build/lib.linux-aarch64-3.10”。）

```
export PYTHONPATH=/home/kml_adapter/numpy_adapter/build/lib.linux-aarch64-3.10:$PYTHONPATH
```

2.0.2版本Numpy使能：

上述步骤构建成功会在dist目录下生成一个.whl文件。（假设构建生成的是“numpy-2.0.2-cp39-cp39-linux_aarch64.whl”）

```
pip install numpy-2.0.2-cp39-cp39-linux_aarch64.whl
```
