Python是一种解释型通用编程语言,得益于其友好的语法以及丰富的框架,常被用于编写运维工具,web服务、数据分析和深度学习程序。
centos:
$sudo yum install python3 -y
$python3 --version # centos 7.9
Python 3.6.8
Python3.6已经到达EOL,不再推荐使用。推荐使用Docker镜像。
ubuntu:
$sudo apt install python3 -y
$python3 --version # ubuntu 20.04
Python 3.8.10
$python3 --version # ubuntu 22.04
Python 3.10.4
首先不推荐直接使用python:latest
镜像,该镜像包含了完整的pip和gcc构建环境,体积高达921M。且基于debian构建,并不是大家熟悉的centos和ubuntu。
python:alpine
镜像举例:
FROM python:alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories # 替换为中科大源
RUN apk add python3 py3-numpy
要注意以上使用apk
OS包管理器安装来安装numpy
,而没有使用pip
。原因是PyPI提供的提前构建好的包依赖glibc,并不是适用于基于musl的alpine系统。
因此在alpine下使用pip安装numpy
这一类依赖native实现的库时会尝试从头编译:
Collecting numpy
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/13/b1/0c22aa7ca1deda4915cdec9562f839546bb252eecf6ad596eaec0592bd35/numpy-1.23.1.tar.gz (10.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.7/10.7 MB 3.8 MB/s eta 0:00:00
RuntimeError: Broken toolchain: cannot link a simple C program.
FROM ubuntu
RUN apt update && apt install python3-pip -y
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
要注意这种情况下操作系统的包管理器决定了python的版本。
不建议直接通过源码编译CPython解释器,自行编译容易缺少ssl等模块的支持,且没有明显的收益。
Python 具有良好的扩展性,依靠第三方库实现高性能计算。 在科学计算领域,NumPy 和 SciPy 是目前被最广泛使用的 Python 库,而这两个库本身是调用更底层的 C/C++ 线性代数库(例如 MKL,OpenBLAS,BLIS 等)实现高性能计算的。 目前 OpenBLAS 包含针对倚天处理器优化的代码,因此我们推荐使用以 OpenBLAS 为后端构建的 NumPy 和 SciPy 库。
可以直接使用各类包管理器直接安装 NumPy 或 SciPy。
使用 conda 或 pip 安装 NumPy 和 SciPy,例如 pip3 install numpy scipy
,在 arm 平台,计算后端默认使用 OpenBLAS 库。
在 Ubuntu 或 Debian 上安装 NumPy 和 SciPy:
sudo apt install libopenblas-dev python3-numpy python3-scipy
环境依赖(以下编译器二选一):
否则需要指定 TARGET
为 ARMv8
,从而构建通用版本。
# 构建 OpenBLAS
git clone https://github.com/xianyi/OpenBLAS $HOME/OpenBLAS
cd $HOME/OpenBLAS
TARGET=NEOVERSEN2 BUILD_BFLOAT16=1 FC=gfortran USE_OPENMP=1 make -j8
sudo make install
# 构建 NumPy
git clone https://github.com/numpy/numpy $HOME/numpy
cd $HOME/numpy
pip install .
# 构建 SciPy
git clone https://github.com/scipy/scipy/ $HOME/scipy
cd $HOME/scipy
pip install .
测试是否安装成功,并查看是否使用 OpenBLAS 后端:
python -c "import numpy as np; np.show_config()"
python -c "import sicpy as sp; sp.show_config()"
目前我们提供了 NumPy 的 workload 和测试镜像。
直接运行我们提供的镜像可以获得 GEMM 和 SVD 计算的测试结果:
docker run --rm cape2/numpy:latest
或者进入 grafana 页面查看我们提供的可视化结果。
# 开启 OneDNN+ACL 优化的 tensorflow 镜像
docker pull armswdev/tensorflow-arm-neoverse
# 启动镜像,假设项目代码在 home 目录中,挂载到容器的 /hostfs 目录下
docker run -it --rm -v $HOME:/hostfs armswdev/tensorflow-arm-neoverse
# 在容器中运行代码
cd /hostfs
python your_code.py
armswdev 是 arm 提供的软件解决方案仓库,提供了在 arm 平台上的软件适配以及高性能实现。
建议使用 pip 安装最近几个版本的 TensorFlow,例如 2.10.1 或者 2.11.0,这些版本包含 OneDNN 和 Arm Compute Library (ACL) 的支持。
pip install tensorflow==2.11.0
Tensorflow 模型推理优化:
以测试图像分类任务 ResNet 50 模型的推理性能为例:
from tensorflow.keras.applications.resnet import ResNet50
model = ResNet50()
# 使用 graph 模式而非 eager 模式
full_model = tf.function(lambda x: model(x))
# 模型参数冻结
full_model = full_model.get_concrete_function([tf.TensorSpec(model_input.shape, model_input.dtype) for model_input in model.inputs])
frozen_func = convert_variables_to_constants_v2(full_model)
frozen_func.graph.as_graph_def()
# 启动 session,完成推理,记录时间
session = tf.compat.v1.Session(graph=frozen_func.graph)
s = time.time()
predictions = session.run(["Identity:0"], feed_dict={"x:0": processed_image})
e = time.time()
print(f"inference: {e-s} s")
运行代码时通过环境变量,开启 OneDNN 实现,并开启 BF16 优化,能显著提升推理性能:
TF_ENABLE_ONEDNN_OPTS=1 ONEDNN_DEFAULT_FPMATH_MODE=BF16 python your_code.py
aliyun 提供针对倚天平台的 PyTorch 镜像,当前有两个可选的计算后端:OpenBLAS 或者 Arm Compute Library (ACL)。 在不同的 benchmark 上,两者的性能表现互有高低,因此同时提供两个计算后端的 PyTorch 供用户选择。
# 带 ACL 的 PyTorch 镜像
docker pull accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch:torch1.13.0_acl
# 带 OpenBLAS 的 PyTorch 镜像
docker pull accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch:torch1.13.0_openblas
arm 提供的 PyTorch 镜像:
docker pull armswdev/tensorflow-arm-neoverse:r23.02-torch-1.13.0-onednn-acl
docker pull armswdev/tensorflow-arm-neoverse:r23.02-torch-1.13.0-openblas
建议使用 pip 安装最近两个版本的 PyTorch (1.13.0 和 1.13.1),这两个版本包含 OneDNN 和 Arm Compute Library (ACL) 的支持。
pip install pytorch==1.13.0
测试资源
机型规格 | 用途 | vCPU | 内存 | 数据盘 | 操作系统 |
---|---|---|---|---|---|
g8y.2xlarge | 性能测试 | 8 | 32 | 40 | alinux3 |
g7.2xlarge | 性能测试 | 8 | 32 | 40 | alinux3 |
测试模型
本次测试包含四个任务
运行测试镜像
# 拉取镜像
docker pull accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch:modelzoo
# 启动推理任务
docker run --rm accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch:modelzoo
等待运行结束,记录各个模型的推理耗时,单位秒。测试结果如下(供参考):
测试用例 | g7 | g8y | g8y/g7性能提升 |
---|---|---|---|
ResNet-50 | 0.9272 | 0.6706 | 1.38x |
SSD300-VGG16 | 1.2970 | 1.0245 | 1.27x |
Mask R-CNN | 11.0674 | 9.2872 | 1.19x |
BERT | 15.7978 | 10.7488 | 1.46x |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。