Skip to content

[NPU] update paddle doc for npu and rocm, test=develop #3976

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/guides/09_hardware_support/npu_docs/index_cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
昇腾NPU芯片运行飞桨
####################

昇腾芯片是华为公司发布的人工智能处理器。Paddle当前可以支持在NPU上进行模型训练
华为昇腾910(Ascend 910)是一款具有超高算力的AI处理器。Paddle NPU 版当前可以支持在华为鲲鹏CPU与昇腾NPU上进行模型训练与推理

参考以下内容可快速了解和体验在昇腾芯片上运行飞桨:

- `飞桨框架NPU版安装说明 <./paddle_install_cn.html>`_ : 飞桨框架NPU版安装说明
- `飞桨框架NPU版训练示例 <./train_example_cn.html>`_ : 飞桨框架NPU版训练示例
- `飞桨框架昇腾NPU版安装说明 <./paddle_install_cn.html>`_ : 飞桨框架昇腾NPU版安装说明
- `飞桨框架昇腾NPU版训练示例 <./train_example_cn.html>`_ : 飞桨框架昇腾NPU版训练示例

.. toctree::
:hidden:
Expand Down
101 changes: 81 additions & 20 deletions docs/guides/09_hardware_support/npu_docs/paddle_install_cn.md
Original file line number Diff line number Diff line change
@@ -1,48 +1,109 @@
# 飞桨框架NPU版安装说明
# 飞桨框架昇腾NPU版安装说明


## 安装方式:通过release/2.1分支源码编译安装
飞桨框架NPU版支持基于华为鲲鹏CPU与昇腾NPU的Python的训练和原生推理。

### 环境准备

**昇腾NPU**
当前Paddle昇腾910 NPU版支持的华为CANN社区版5.0.2.alpha005,请先根据华为昇腾910 NPU的要求,进行相关NPU运行环境的部署和配置,参考华为官方文档 [CANN社区版安装指南](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0002.html)。

Paddle 昇腾910 NPU版目前仅支持源码编译安装,其中编译与运行相关的环境要求如下:

- **CPU处理器:** 鲲鹏920
- **操作系统:** Ubuntu 18.04 / CentOS 7.6 / KylinV10SP1 / EulerOS 2.8
- **CANN社区版:** 5.0.2.alpha005
- **Python版本:** 3.7
- **Cmake版本:** 3.15+
- **GCC/G++版本:** 8.2+

- **处理器: 鲲鹏920**
- **操作系统:Linux version 4.19.36-vhulk1907.1.0.h475.eulerosv2r8.aarch64**
- **CANN: 20.3**
- **Python版本: 2.7/3.6/3.7 (64 bit)**
- **pip或pip3版本:9.0.1+ (64 bit)**
- **cmake版本:3.15+**
- **gcc/g++版本:8.2+**
## 安装方式:通过源码编译安装

**第一步**:准备 CANN 社区版 5.0.2.alpha005 运行环境 (推荐使用Paddle镜像)

### 源码编译安装步骤:
可以直接从Paddle的官方镜像库拉取预先装有 CANN 社区版 5.0.2.alpha005 的 docker 镜像,或者根据 [CANN社区版安装指南](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0002.html) 来准备相应的开发与运行环境。

```bash
# 拉取镜像
docker pull paddlepaddle/paddle:latest-dev-cann5.0.2.alpha005-gcc82-aarch64

# 启动容器,注意这里的参数 --device,容器仅映射设备ID为4到7的4张NPU卡,如需映射其他卡相应增改设备ID号即可
docker run -it --name paddle-npu-dev -v \
--pids-limit 409600 --shm-size=128G \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
--device=/dev/davinci4 --device=/dev/davinci5 \
--device=/dev/davinci6 --device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/dcmi:/usr/local/dcmi \
paddlepaddle/paddle:latest-dev-cann5.0.2.alpha005-gcc82-aarch64 /bin/bash

# 检查容器中是否可以正确识别映射的昇腾DCU设备
npu-smi info

# 预期得到类似如下的结果
+------------------------------------------------------------------------------------+
| npu-smi 1.9.3 Version: 21.0.rc1 |
+----------------------+---------------+---------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) |
| Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) |
+======================+===============+=============================================+
| 4 910A | OK | 67.2 30 |
| 0 | 0000:C2:00.0 | 0 303 / 15171 0 / 32768 |
+======================+===============+=============================================+
| 5 910A | OK | 63.8 25 |
| 0 | 0000:82:00.0 | 0 2123 / 15171 0 / 32768 |
+======================+===============+=============================================+
| 6 910A | OK | 67.1 27 |
| 0 | 0000:42:00.0 | 0 1061 / 15171 0 / 32768 |
+======================+===============+=============================================+
| 7 910A | OK | 65.5 30 |
| 0 | 0000:02:00.0 | 0 2563 / 15078 0 / 32768 |
+======================+===============+=============================================+
```

**第一步**:下载Paddle源码并编译,CMAKE编译选项含义请参见[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#Compile)
**第二步**:下载Paddle源码并编译,CMAKE编译选项含义请参见[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#Compile)

```bash
# 下载源码,建议切换到 develop 分支
git clone -b develop https://github.com/PaddlePaddle/Paddle.git
# 下载源码
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle

# 创建编译目录
mkdir build && cd build

# 执行cmake
cmake .. -DPY_VERSION=3 -DWITH_ASCEND=OFF -DPYTHON_EXECUTABLE=`which python3` -DPYTHON_INCLUDE_DIR=`python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"` -DWITH_ARM=ON -DWITH_ASCEND_CL=ON -DWITH_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DON_INFER=ON -DWITH_XBYAK=OFF
cmake .. -DPY_VERSION=3.7 -DWITH_ASCEND=OFF -DWITH_ARM=ON -DWITH_ASCEND_CL=ON \
-DWITH_ASCEND_INT64=ON -DWITH_DISTRIBUTE=ON -DWITH_TESTING=ON -DON_INFER=ON \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

# 使用以下命令来编译
make TARGET=ARMV8 -j$(nproc)
```
**第二步**:安装与验证编译生成的wheel包

编译完成之后进入`Paddle/build/python/dist`目录即可找到编译生成的.whl安装包,推荐设置PYTHONPATH环境变量安装:
**第三步**:安装与验证编译生成的wheel包

编译完成之后进入`Paddle/build/python/dist`目录即可找到编译生成的.whl安装包,安装与验证命令如下:

```bash
# 设置PYTHONPATH
export PYTHONPATH=/your/dir/Paddle/build/python:$PYTHONPATH
# 安装命令
python -m pip install -U paddlepaddle_npu-0.0.0-cp37-cp37m-linux_aarch64.whl

# 验证命令
python -c "import paddle; paddle.utils.run_check()"

# 预期得到类似以下结果:
Running verify PaddlePaddle program ...
PaddlePaddle works well on 1 NPU.
PaddlePaddle works well on 4 NPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.
```

## 如何卸载

请使用以下命令卸载Paddle:

```bash
pip uninstall paddlepaddle-npu
```
182 changes: 167 additions & 15 deletions docs/guides/09_hardware_support/npu_docs/train_example_cn.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,180 @@
# 飞桨框架昇腾NPU版训练示例

## YOLOv3训练示例

## Mnist运行示例:
**第一步**:下载并安装 PaddleDetection 套件

```bash
# 下载套件代码
cd path_to_clone_PaddleDetection
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 编译安装
cd PaddleDetection
python setup.py install

# 安装其他依赖
pip install -r requirements.txt
```

也可以访问PaddleDetection的 [Github Repo](https://github.com/PaddlePaddle/PaddleDetection) 直接下载源码。

**第二步**:准备 VOC 训练数据集

```bash
cd PaddleDetection/static/dataset/roadsign_voc
python download_roadsign_voc.py
```

**第三步**:运行单卡训练

```bash
export FLAGS_selected_npus=0

# 单卡训练
python -u tools/train.py -c configs/yolov3_darknet_roadsign.yml \
-o use_npu=True

# 单卡评估
python -u tools/eval.py -c configs/yolov3_darknet_roadsign.yml \
-o use_npu=True

# 精度结果
INFO:ppdet.utils.voc_eval:mAP(0.50, integral) = 79.40%
```

**第四步**:运行多卡训练

> 注意:多卡训练请参考本页下一章节进行 "NPU多卡训练配置" 的准备。

```bash
# NPU 多卡训练配置
export FLAGS_selected_npus=0,1,2,3
export RANK_TABLE_FILE=/root/hccl_4p_0123_127.0.0.1.json

# 设置 HCCL 相关环境变量
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_WHITELIST_DISABLE=1
export HCCL_SECURITY_MODE=1

# 多卡训练
python -m paddle.distributed.fleet.launch --run_mode=collective \
tools/train.py -c configs/yolov3_darknet_roadsign.yml \
-o use_npu=True

# 多卡训练结果评估
python -u tools/eval.py -c configs/yolov3_darknet_roadsign.yml \
-o use_npu=True

# 精度结果
INFO:ppdet.utils.voc_eval:mAP(0.50, integral) = 83.00%
```

## NPU多卡训练配置

**预先要求**:请先根据华为昇腾910 NPU的文档 [配置device的网卡IP](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0105.html) 进行相关NPU运行环境的部署和配置,配置完成后检查机器下存在 `/etc/hccn.conf` 文件。

如果是物理机环境,请根据华为官网的 [hccl_tools 说明文档](https://github.com/mindspore-ai/mindspore/tree/v1.4.0/model_zoo/utils/hccl_tools) 进行操作。如果是根据 Paddle 官方镜像启动的容器环境,请根据以下步骤进行操作:

**第一步**:根据容器启动时映射的设备ID,创建容器内的 `/etc/hccn.conf` 文件

例如物理机上的8卡的原始 `/etc/hccn.conf` 文件内容如下:

### 下载模型和运行脚本
```
# 下载模型和数据
wget https://fleet.bj.bcebos.com/ascend/npu.tar.gz
tar xzvf npu.tar.gz
address_0=192.168.10.21
netmask_0=255.255.255.0
address_1=192.168.20.21
netmask_1=255.255.255.0
address_2=192.168.30.21
netmask_2=255.255.255.0
address_3=192.168.40.21
netmask_3=255.255.255.0
address_4=192.168.10.22
netmask_4=255.255.255.0
address_5=192.168.20.22
netmask_5=255.255.255.0
address_6=192.168.30.22
netmask_6=255.255.255.0
address_7=192.168.40.22
netmask_7=255.255.255.0
```

### 执行训练
容器启动命令中映射的设备ID为4到7的4张NPU卡,则创建创建容器内的 `/etc/hccn.conf` 文件内容如下:

> 注意:这里的 address_4 和 netmask_4 需要相应的修改为 address_0 和 netmask_0,以此类推

```
sh run_mnist.sh
address_0=192.168.10.22
netmask_0=255.255.255.0
address_1=192.168.20.22
netmask_1=255.255.255.0
address_2=192.168.30.22
netmask_2=255.255.255.0
address_3=192.168.40.22
netmask_3=255.255.255.0
```

### 配置说明
**第二步**:根据华为官网的 [hccl_tools 说明文档](https://github.com/mindspore-ai/mindspore/tree/v1.4.0/model_zoo/utils/hccl_tools),生成单机四卡的配置文件

run_mnist.sh中的配置
```
# 配置paddle的路径
export PYTHONPATH=/your/dir/Paddle/build/python:$PYTHONPATH
# 配置使用的NPU卡
export FLAGS_selected_npus=5
# 执行训练脚本
python3 mnist.py
# 下载 hccl_tools.py 文件到本地
wget https://raw.githubusercontent.com/mindspore-ai/mindspore/v1.4.0/model_zoo/utils/hccl_tools/hccl_tools.py

# 生成单机两卡的配置文件,单机可以设置 IP 为 127.0.0.1
python hccl_tools.py --device_num "[0,4)" --server_ip 127.0.0.1
```

运行成功之后在当前目录下获得名为 `hccl_4p_0123_127.0.0.1.json` 的文件,内容如下:

```json
{
"version": "1.0",
"server_count": "1",
"server_list": [
{
"server_id": "127.0.0.1",
"device": [
{
"device_id": "0",
"device_ip": "192.168.10.22",
"rank_id": "0"
},
{
"device_id": "1",
"device_ip": "192.168.20.22",
"rank_id": "1"
},
{
"device_id": "2",
"device_ip": "192.168.30.22",
"rank_id": "2"
},
{
"device_id": "3",
"device_ip": "192.168.40.22",
"rank_id": "3"
}
],
"host_nic_ip": "reserve"
}
],
"status": "completed"
}
```

**第三步**:运行Paddle多卡训练之前,需要先配置名为 `RANK_TABLE_FILE` 的环境变量,指向上一步生成的json文件的绝对路径

```bash
# 1) 设置 ranktable 文件的环境变量
export RANK_TABLE_FILE=$(readlink -f hccl_4p_0123_127.0.0.1.json)
# 或者直接修改为json文件的绝对路径
export RANK_TABLE_FILE=/root/hccl_4p_0123_127.0.0.1.json

# 2) 设置 HCCL 相关环境变量
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_WHITELIST_DISABLE=1
export HCCL_SECURITY_MODE=1

# 3) 启动分布式任务,注意这里的 run_mode 当前仅支持 collective 模式
python -m paddle.distributed.fleet.launch --run_mode=collective train.py ...
```
24 changes: 12 additions & 12 deletions docs/guides/09_hardware_support/rocm_docs/paddle_rocm_cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,23 @@

| 模型 | 领域 | 模型链接 | 编程范式 | 训练单机多卡支持 | 训练多机多卡支持 | 推理支持 |
| ----------------- | -------- | ------------------------------------------------------------ | ------------- | -------------- | -------------- | -------------- |
| ResNet50 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/ResNet_and_vd.md) | 动态图 | 支持 | 支持 | 支持 |
| ResNet101 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/ResNet_and_vd.md) | 动态图 | 支持 | 支持 | 支持 |
| SE_ResNet50_vd | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/SEResNext_and_Res2Net.md) | 动态图 | 支持 | 支持 | 支持 |
| VGG16 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/Others.md) | 动态图 | 支持 | 支持 | 支持 |
| InceptionV4 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/Inception.md) | 动态图 | 支持 | 支持 | 支持 |
| GoogleNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/Inception.md) | 动态图 | 支持 | 支持 | 支持 |
| MobileNetV3 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/Mobile.md) | 动态图 | 支持 | 支持 | 支持 |
| AlexNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/Others.md) | 动态图 | 支持 | 支持 | 支持 |
| DenseNet121 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/zh_CN/models/DPN_DenseNet.md) | 动态图 | 支持 | 支持 | 支持 |
| ResNet50 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/ResNet/ResNet50.yaml) | 动态图 | 支持 | 支持 | 支持 |
| ResNet101 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/ResNet/ResNet101.yaml) | 动态图 | 支持 | 支持 | 支持 |
| SE_ResNet50_vd | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/SENet/SE_ResNet50_vd.yaml) | 动态图 | 支持 | 支持 | 支持 |
| VGG16 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/VGG/VGG16.yaml) | 动态图 | 支持 | 支持 | 支持 |
| InceptionV4 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/Inception/InceptionV4.yaml) | 动态图 | 支持 | 支持 | 支持 |
| GoogleNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/Inception/GoogLeNet.yaml) | 动态图 | 支持 | 支持 | 支持 |
| MobileNetV3 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/MobileNetV3/MobileNetV3_large_x1_0.yaml) | 动态图 | 支持 | 支持 | 支持 |
| AlexNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/AlexNet/AlexNet.yaml) | 动态图 | 支持 | 支持 | 支持 |
| DenseNet121 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/DenseNet/DenseNet121.yaml) | 动态图 | 支持 | 支持 | 支持 |


## 目标检测

| 模型 | 领域 | 模型链接 | 编程范式 | 训练单机多卡支持 | 训练多机多卡支持 | 推理支持 |
| ----------------- | -------- | ------------------------------------------------------------ | ------------- | -------------- | -------------- | -------------- |
| YOLOv3 | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/configs/yolov3) | 动态图 | 支持 | 支持 | 支持 |
| PP-YOLO | 目标检测 | [模型链接](hhttps://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/configs/ppyolo) | 动态图 | 支持 | 支持 | 支持 |
| PP-YOLO | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/configs/ppyolo) | 动态图 | 支持 | 支持 | 支持 |
| SSD | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/configs/ssd) | 动态图 | 支持 | 支持 | 支持 |
| RetinaNet | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/static/configs/retinanet_r50_fpn_1x.yml) | 静态图 | 支持 | 支持 | 支持 |
| Faster R-CNN | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.2/configs/faster_rcnn) | 动态图 | 支持 | 支持 | 支持 |
Expand Down Expand Up @@ -125,12 +125,12 @@

| 领域 | 套件名称 | 分支/版本 |
| ----------- | --------------- | ---------------- |
| 图像分类 | PaddleClas | release/2.2 |
| 图像分类 | PaddleClas | release/2.3 |
| 目标检测 | PaddleDetection | release/2.2 |
| 图像分割 | PaddleSeg | release/v2.0 |
| 自然语言处理 | PaddleNLP | develop |
| 字符识别 | PaddleOCR | release/2.3 |
| 推荐系统 | PaddleRec | release/2.1.0 |
| 视频分类 | PaddleVideo | develop |
| 语音合成 | Parakeet | develop |
| 生成对抗网络 | PaddleGAN | develop |
| 生成对抗网络 | PaddleGAN | develop |
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ git clone https://github.com/PaddlePaddle/PaddleClas.git
export HIP_VISIBLE_DEVICES=0,1,2,3

cd PaddleClas/
python -m paddle.distributed.launch --gpus="0,1,2,3" tools/train.py -c ./configs/ResNet/ResNet50.yaml
python -m paddle.distributed.launch --gpus="0,1,2,3" tools/train.py -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml
```

**第三步**:获取4卡训练得到的 Best Top1 Accuracy 结果如下
Expand Down