SDK快速入门

更新时间:
复制为 MD 格式

1. 概述

PPU SDK是平头哥AI针对PPU芯片输出的软件开发包,可供创建使用PPU加速的高性能应用。借助该工具包,你可以在PPU软件栈上开发、优化、部署相关的应用,以便在PPU硬件ready前充分验证相关的功能。此工具包中包含编译链工具、头文件、多个加速库、不同的运行配置,以及一个用于构建和部署应用的运行时库。

注:在使用PPU_SDK之前,请先确认机器是否已插上PPU卡并安装了驱动和firmware。

1.1 查看机器是否安装了PPU

可以通过lspci命令查看是否有PPU卡硬件设备

lspci -d:6001

如果有PPU卡,则命令行返回如下截图:

image.png

如果未找到卡,请联系相关同学排查。

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所附带的运行时库加入到PATHLD_LIBRARY_PATH,并优先会被应用程序找到并执行使用到PPU软件栈。

说明

PPU SDK自带PPU环境检查工具,可以用来检查当前的PPU环境是否有不兼容的问题。

运行命令asys status --ppu-env来检查当前的静态环境。

2.3 TensorFlow

首先,您需要follow官方要求安装必须的package, 参考 tensorflow官方文档安装必要的pythonpip 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/horovod

2.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.whl

2.5 CUDA Sample 测试

使用PPU SDK之前,需要通过$LD_LIBRARY_PATH)和工具链($PATH)等信息:

source PPU_SDK/envsetup.sh

自此,您已将PPU附带的运行时库添加到PATHLD_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
./vectorAdd

2.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=resnet50

3. 使用Docker安装

PPU SDK docker里默认集成最新的PPU SDK开发包,并集成相应的TensorFlow、PyTorch等训练框架,方便用户快速构建上层应用程序。本指南提供了有关容器的详细概述,及拉取和运行容器、自定义和扩展容器的分步说明。

  • Docker镜像:Docker镜像是在Docker容器中运行的软件(包括文件系统和参数)。

  • Docker容器:Docker容器是Docker镜像的一个实例,Docker容器为每个容器部署一个应用程序或服务。

3.1 前置条件

  1. 登录docker.alibaba-inc.com,创建和初始化账号。

  2. 申请PPU SDK Docker访问权限。

  3. 确认本地已安装Docker CLI工具。

3.2 运行容器

我们支持TensorFlowPyTorch容器镜像:

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:切换TensorFlowPyTorch执行时,提示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)降级解决。