SDK快速入门
1. 概述
PPU SDK是平头哥AI针对PPU芯片输出的软件开发包,可供创建使用PPU加速的高性能应用。借助该工具包,你可以在PPU软件栈上开发、优化、部署相关的应用,以便在PPU硬件ready前充分验证相关的功能。此工具包中包含编译链工具、头文件、多个加速库、不同的运行配置,以及一个用于构建和部署应用的运行时库。
注:在使用PPU_SDK之前,请先确认机器是否已插上PPU卡并安装了驱动和firmware。
1.1 查看机器是否安装了PPU卡
可以通过lspci命令查看是否有PPU卡硬件设备
lspci -d:6001如果有PPU卡,则命令行返回如下截图:

如果未找到卡,请联系相关同学排查。
1.2 查看 PPU Kernel Mode 驱动是否已安装
方法一:运行ppu-smi工具,会打印出对应的PPU信息,其中Driver Version既是对应的PPU KMD版本信息,如下所示:
# 运行ppusmi工具
$ ppu-smi
Tue Aug 15 12:02:42 2023
+-------------------------------------------------------------------------------+
| PPU-SMI 1.4 Driver Version: 1.0.0-d4d6ec HGGC Version: 11.1 |
+---------------------------------+----------------------+----------------------+
| PPU Name Persistence M. | Bus-Id | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | PPU-Util Compute M. |
| | | MIG M. |
+=================================+======================+======================+
| 0 PPU-ZW610 N/A | 00000000:00:11.0 | 0 |
| N/A 41C N/A 130W / 300W | 5MiB / 48768MiB | 0% Default |
| | | Disabled |
+---------------------------------+----------------------+----------------------+
+-------------------------------------------------------------------------------+
| Processes: |
| PPU GI CI PID Type Process name PPU Memory |
| ID ID Usage |
+===============================================================================+
| No running processes found |
+-------------------------------------------------------------------------------+方法二:查看alixpu_version_info获得对应的PPU版本信息,其中driver internal version既是对应的PPU SDK版本信息,如下所示:
$ sudo cat /sys/kernel/debug/alixpu/PPU0/alixpu_version_info
driver author: Alibaba.
driver name: alixpu
driver desc: alixpu
driver date: 20220927
driver version: 1.0.0-d4d6ec
driver internal version: 20230828191013如驱动未安装或者需要更新驱动的。
1.3 查看 Firmware 版本
运行ppu-smi工具,会打印出对应的PPU信息,其中VBIOS Version即是对应的PPU Firmware版本信息,如下所示:
# 运行ppu-smi工具
$ ppu-smi -q | grep "VBIOS Version"
VBIOS Version : 1.5.8-b023cf如果未获取到Firmware版本信息或者需要更新Firmware版本,请先确认安装好KMD后,可安装适配版本的固件(FW)。注意:请务必确认KMD已经安装!
2. Linux系统下载安装指导
2.1 OS支持列表
注:目前我们支持以下操作系统,请确认系统OS是否在以下list中。
类别 | 操作系统 | 架构 | 内核版本 |
Ubuntu | Ubuntu 20.04 LTS | x86_64 | 5.4.0-131-generic (GA) |
5.4.0-92-generic | |||
Ubuntu 18.04 LTS | 4.15.0-112-generic (GA) | ||
4.18.0-15-generic | |||
CentOS | CentOS8.2 | 5.10.134-007.ali5000.al8.x86_64 | |
Alios | Alios7U2 | 5.10.112-005.ali5000.alios7.x86_64 | |
5.10.84-004.ali5000.alios7.x86_6 | |||
alippu-driver-4.19.91-014.kangaroo.alios7.x86_64 | |||
Afa3 | ALinux3 | 5.10.134-12.2.al8.x86_64 | |
5.10.134-13.al8.x86_64 |
2.2 下载PPU_SDK并安装使用
本文将以v1.0版本为例讲述整个过程,可根据具体的OS以及CUDA版本,选择对应的版本进行下载和安装。
2.2.1 Ubuntu系统
使用前须知
为保证正常使用PPU SDK,请确保环境里的GCC/GLIBC不低于以下版本。
OS | GCC | GLIBC |
Ubuntu1604 | 5.4.0 | 2.23 |
Ubuntu1804 | 7.5.0 | 2.27 |
Ubuntu2004 | 9.4.0 | 2.31 |
准备系统运行的基本环境,视是否初次运行而安装:
apt-get update
apt-get install -y --no-install-recommends \
build-essential \
libatlas-base-dev \
apt-utils \
libcurl3-dev \
libfreetype6-dev \
libhdf5-serial-dev \
libzmq3-dev \
libssl-dev \
libbz2-dev \
libprotobuf-dev \
lsb-release \
pkg-config \
libopenmpi-dev \
openmpi-bin \
openssh-client \
libopenblas-dev \
software-properties-common \
zlib1g-dev \
bzip2 \
cmake \
curl \
git \
openjdk-8-jdk \
openssl \
rsync \
swig \
unzip \
vim \
wget \
zip
apt-get clean制品下载
用户可以通过artifactory获取最新的PPU SDK工具包,示例如下:
wget http://ai-artifactory-pub.eng.t-head.cn:9000/artifactory/generic-local/PPU1.0/1.0.0/PPU_SDK/PPU_SDK_cuda-11.6.2-ubuntu1804-1.0.0-635492.tar.gz制品安装
PPU SDK的安装仅通过解包即可以完成:
tar xzf PPU_SDK_cuda-11.6.2-ubuntu1804-1.0.0-635492.tar.gz制品使用
在使用ppu sdk前,用户需要通过 envsetup.sh 导入相应的环境变量,用以找到运行时库($LD_LIBRARY_PATH )及工具链($PATH)等信息:
source PPU_SDK/envsetup.sh自此,用户已经将PPU所附带的运行时库加入到PATH和LD_LIBRARY_PATH,并优先会被应用程序找到并执行使用到PPU软件栈。
PPU SDK自带PPU环境检查工具,可以用来检查当前的PPU环境是否有不兼容的问题。
运行命令asys status --ppu-env来检查当前的静态环境。
2.3 TensorFlow
首先,您需要follow官方要求安装必须的package, 参考 tensorflow官方文档安装必要的python和pip packages。
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.11.0-Linux-x86_64.sh
bash Miniconda3-py38_4.11.0-Linux-x86_64.sh
conda create -n py38 python=3.8
conda activate py38在激活的虚拟环境 py38中安装相应的依赖库:
conda install -y numpy==1.21.1 protobuf==3.20.1 ninja six future ply astor setuptools pip wheel portpicker py-cpuinfo
pip install -U keras_preprocessing --no-deps然后,您可以从发布页面的 Framework 一栏找到下载地址,安装PPU tensorflow 1.15.5NV 并使用(以v1.0 为例,其他 release 版本只需要替换相应的链接):
wget http://ai-artifactory-pub.eng.t-head.cn:9000/artifactory/generic-local/PPU1.0/1.0.0/Framework/Tensorflow/ppu_sdk-cuda_11.6-tf_1.15.5+nv22.04-ubuntu2004-py38.tar.gz
tar zxf ppu_sdk-cuda_11.6-tf_1.15.5+nv22.04-ubuntu2004-py38.tar.gz
cd wheel_packages
pip3 install tensorflow_gpu-1.15.5+nv22.4-cp38-cp38-linux_x86_64.whl
pip3 install horovod-0.24.2-cp38-cp38-linux_x86_64.whl注意:因为不同 tensorflow 版本对 numpy 有特定的版本需求,有时若安装tensorflow_gpu失败,可尝试再次 pip3 install numpy==1.21.1 后再次安装 tensorflow/horovod2.4 PyTorch
首先,您需要follow官方要求安装必需的package,参考 pytorch/pytorch。
conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses然后,您可以从发布页面的 Framework 一栏找到下载地址,安装PPU pytorch 1.12.0 并使用(以v1.0 为例,其他 release 版本只需要替换相应的链接):
wget http://ai-artifactory-pub.eng.t-head.cn:9000/artifactory/generic-local/PPU1.0/1.0.0/Framework/PyTorch/PPU_SDK_CUDA_11.6_PyTorch1.12_Ubuntu2004_py38.tar.gz
tar zxf PPU_SDK_CUDA_11.6_PyTorch1.12_Ubuntu2004_py38.tar.gz
cd ppu_torch
pip3 install torch-1.12.0a0+bd13bc6-cp38-cp38-linux_x86_64.whl
pip3 install torchvision-0.13.0a0-cp38-cp38-linux_x86_64.whl2.5 CUDA Sample 测试
使用PPU SDK之前,需要通过$LD_LIBRARY_PATH)和工具链($PATH)等信息:
source PPU_SDK/envsetup.sh自此,您已将PPU附带的运行时库添加到PATH和LD_LIBRARY_PATH,它们将首先由使用PPU软件栈的应用程序找到并执行。
下载CUDA Sample代码:
git clone https://github.com/NVIDIA/cuda-samples.git
# switch to specific sample version such as v11.6 cuda sample
cd cuda-sample
git tag
git checkout -b v11.6编译并测试CUDA Sample代码:
#运行PPU SDK镜像
docker run -it --name=XXX --device=/dev/alixpu --device=/dev/alixpu_ctl --device=/dev/alixpu_ppu0 -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" -w /mnt reg.docker.alibaba-inc.com/aisw/tensorflow:1.0.0-22.04-tf1-py3-cuda11.6-tf1.15-ubuntu20.04-py38 /bin/bash
#设置运行模式为PPU HW
export UMD_PLATFORM_TYPE=1
export HGGC_DRIVER_CANDIDATE=UMD
#进入特定测试用例目录
cd ~/workspace/cuda-samples/0_Introduction/vectorAdd
#编译且运行测试
make
./vectorAdd2.6 训练模型
2.6.1 TensorFlow基准测试
克隆并运行基准测试的仓库。
cd ~ && git clone https://github.com/tensorflow/benchmarks.git
python3 ~/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=resnet503. 使用Docker安装
PPU SDK docker里默认集成最新的PPU SDK开发包,并集成相应的TensorFlow、PyTorch等训练框架,方便用户快速构建上层应用程序。本指南提供了有关容器的详细概述,及拉取和运行容器、自定义和扩展容器的分步说明。
Docker镜像:Docker镜像是在Docker容器中运行的软件(包括文件系统和参数)。
Docker容器:Docker容器是Docker镜像的一个实例,Docker容器为每个容器部署一个应用程序或服务。
3.1 前置条件
登录docker.alibaba-inc.com,创建和初始化账号。
申请PPU SDK Docker访问权限。
确认本地已安装Docker CLI工具。
3.2 运行容器
我们支持TensorFlow和PyTorch容器镜像:
3.2.1 TensorFlow
登录阿里云Docker Registry
docker login --username=USERNAME reg.docker.alibaba-inc.com登录Registry的用户名USERNAME是您的域账号,密码是您的域登录密码(默认),也可以登录docker.alibaba-inc.com修改密码。
从Registry中拉取Docker镜像
docker pull reg.docker.alibaba-inc.com/aisw/tensorflow:<release_tag>可以拉取特定版本的Docker镜像,并将 <release_tag> 设置为特定的版本号(以下以v1.0 为例,其他 release 版本只需要替换相应的链接):
docker pull reg.docker.alibaba-inc.com/aisw/tensorflow:1.0.0-22.04-tf1-py3-cuda11.6-tf1.15-ubuntu20.04-py38创建并运行Docker容器
docker run --rm -it \
-v $PWD:/mnt \
-e HOST_PERMS="$(id -u):$(id -g)" \
-w /mnt reg.docker.alibaba-inc.com/aisw/tensorflow:1.0.0-22.04-tf1-py3-cuda11.6-tf1.15-ubuntu20.04-py38 \
/bin/bash说明:将本地目录挂载到Docker的/mnt目录下,进入Bash Shell环境。
注:有关使用docker run的说明,请参阅官方文档。如有必要,可以通过添加--privileged参数创建一个特权容器,或者通过添加--privileged参数直接将设备暴露给非特权容器,以访问主机上的各种设备。
3.2.2 PyTorch
登录阿里云Docker Registry
docker login --username=USERNAME reg.docker.alibaba-inc.com登录Registry的用户名USERNAME是您的域账户,密码是您的域登录密码(默认),也可以登录
docker.alibaba-inc.com修改密码。
从Registry中拉取Docker镜像
docker pull reg.docker.alibaba-inc.com/aisw/pytorch:<release_tag>可以拉取特定版本的Docker镜像,并将 releaset_tag 设置为特定的版本号(以下以V1.0(2023/08/31)/Docker & Framework/DockerHub为例,其他 release 版本只需要替换相应的链接)::
docker pull reg.docker.alibaba-inc.com/aisw/pytorch:1.0.0-22.04-py3-cuda11.6-torch1.12-ubuntu20.04-py38创建并运行Docker容器
docker run --rm -it \
-v $PWD:/mnt \
-e HOST_PERMS="$(id -u):$(id -g)" \
-w /mnt reg.docker.alibaba-inc.com/aisw/pytorch:1.0.0-22.04-py3-cuda11.6-torch1.12-ubuntu20.04-py38 \
/bin/bash说明:将本地目录挂载到Docker的/mnt目录下,进入Bash Shell环境。
注:有关使用docker run的说明,请参阅官方文档。如有必要,可以通过添加--privileged参数创建一个特权容器,或者通过添加--privileged参数直接将设备暴露给非特权容器,以访问主机上的各种设备。
FAQ
问题1:拉取Docker镜像时,会提示“未找到镜像:不存在或没有拉取权限”。 详细的错误日志如下所示:
Error response from daemon: repository reg.docker.alibaba-inc.com/aisw/ppu not found: does not exist or no pull access
那么这个问题可能是Registry的访问权限受到限制。建议联系管理员添加。
问题2:切换TensorFlow和PyTorch执行时,提示NumPy版本的相关日志类似于:
Failed to initialize NumPy: module compiled against API version 0xe but this version of numpy is 0xd
对于此类问题,可能需要手动解决:执行PyTorch时执行 pip install -U numpy,将NumPy更新到最新版本来解决;如果执行TensorFlow时出错,则使用pip install numpy==1.18.5(注:TF1.15.5框架需要1.16.0 <= NumPy <= 1.19.0)降级解决。