Skip to content

Commit 9692611

Browse files
committed
[NPU] update paddle doc for npu and rocm, test=develop
1 parent 9b84ae2 commit 9692611

File tree

6 files changed

+289
-53
lines changed

6 files changed

+289
-53
lines changed

docs/guides/09_hardware_support/npu_docs/index_cn.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
昇腾NPU芯片运行飞桨
55
####################
66

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

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

11-
- `飞桨框架NPU版安装说明 <./paddle_install_cn.html>`_ : 飞桨框架NPU版安装说明
12-
- `飞桨框架NPU版训练示例 <./train_example_cn.html>`_ : 飞桨框架NPU版训练示例
11+
- `飞桨框架昇腾NPU版支持模型 <./paddle_models_cn.html>`_ : 飞桨框架昇腾NPU版支持模型
12+
- `飞桨框架昇腾NPU版安装说明 <./paddle_install_cn.html>`_ : 飞桨框架昇腾NPU版安装说明
13+
- `飞桨框架昇腾NPU版训练示例 <./train_example_cn.html>`_ : 飞桨框架昇腾NPU版训练示例
1314

1415
.. toctree::
1516
:hidden:
1617

18+
paddle_models_cn.md
1719
paddle_install_cn.md
1820
train_example_cn.md
Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,98 @@
1-
# 飞桨框架NPU版安装说明
1+
# 飞桨框架昇腾NPU版安装说明
22

3+
飞桨框架NPU版支持基于华为鲲鹏CPU与昇腾NPU的Python的训练和原生预测,当前支持的CANN社区版5.0.2.alpha005 Paddle版本为develop。
34

4-
## 安装方式:通过release/2.1分支源码编译安装
5+
## 安装方式:通过源码编译安装
56

6-
### 环境准备
7+
**预先要求**:请先根据华为昇腾910 NPU的要求,进行相关NPU运行环境的部署和配置,参考华为官方文档 [CANN社区版安装指南](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0002.html)
78

8-
**昇腾NPU**
9+
**第一步**:准备 CANN 社区版 5.0.2.alpha005 运行环境 (推荐使用Paddle镜像)
910

10-
- **处理器: 鲲鹏920**
11-
- **操作系统:Linux version 4.19.36-vhulk1907.1.0.h475.eulerosv2r8.aarch64**
12-
- **CANN: 20.3**
13-
- **Python版本: 2.7/3.6/3.7 (64 bit)**
14-
- **pip或pip3版本:9.0.1+ (64 bit)**
15-
- **cmake版本:3.15+**
16-
- **gcc/g++版本:8.2+**
17-
18-
19-
### 源码编译安装步骤:
11+
可以直接从Paddle的官方镜像库拉取预先装有 CANN 社区版 5.0.2.alpha005 的 docker 镜像,或者根据 [CANN社区版安装指南](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0002.html) 来准备相应的开发与运行环境。
2012

13+
```bash
14+
# 拉取镜像
15+
docker pull paddlepaddle/paddle:latest-dev-cann5.0.2.alpha005-gcc82-aarch64
16+
17+
# 启动容器,注意这里的参数 --device,容器仅映射设备ID为4到7的4张NPU卡,如需映射其他卡相应增改设备ID号即可
18+
docker run -it --name paddle-npu-dev -v \
19+
--pids-limit 409600 --shm-size=128G \
20+
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
21+
--device=/dev/davinci4 --device=/dev/davinci5 \
22+
--device=/dev/davinci6 --device=/dev/davinci7 \
23+
--device=/dev/davinci_manager \
24+
--device=/dev/devmm_svm \
25+
--device=/dev/hisi_hdc \
26+
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
27+
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
28+
-v /usr/local/dcmi:/usr/local/dcmi \
29+
paddlepaddle/paddle:latest-dev-cann5.0.2.alpha005-gcc82-aarch64 /bin/bash
30+
31+
# 检查容器中是否可以正确识别映射的昇腾DCU设备
32+
npu-smi info
33+
34+
# 预期得到类似如下的结果
35+
+------------------------------------------------------------------------------------+
36+
| npu-smi 1.9.3 Version: 21.0.rc1 |
37+
+----------------------+---------------+---------------------------------------------+
38+
| NPU Name | Health | Power(W) Temp(C) |
39+
| Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) |
40+
+======================+===============+=============================================+
41+
| 4 910A | OK | 67.2 30 |
42+
| 0 | 0000:C2:00.0 | 0 303 / 15171 0 / 32768 |
43+
+======================+===============+=============================================+
44+
| 5 910A | OK | 63.8 25 |
45+
| 0 | 0000:82:00.0 | 0 2123 / 15171 0 / 32768 |
46+
+======================+===============+=============================================+
47+
| 6 910A | OK | 67.1 27 |
48+
| 0 | 0000:42:00.0 | 0 1061 / 15171 0 / 32768 |
49+
+======================+===============+=============================================+
50+
| 7 910A | OK | 65.5 30 |
51+
| 0 | 0000:02:00.0 | 0 2563 / 15078 0 / 32768 |
52+
+======================+===============+=============================================+
53+
```
2154

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

2457
```bash
25-
# 下载源码,建议切换到 develop 分支
26-
git clone -b develop https://github.com/PaddlePaddle/Paddle.git
58+
# 下载源码
59+
git clone https://github.com/PaddlePaddle/Paddle.git
2760
cd Paddle
2861

2962
# 创建编译目录
3063
mkdir build && cd build
3164

3265
# 执行cmake
33-
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
66+
cmake .. -DPY_VERSION=3.7 -DWITH_ASCEND=OFF -DWITH_ARM=ON -DWITH_ASCEND_CL=ON \
67+
-DWITH_ASCEND_INT64=ON -DWITH_DISTRIBUTE=ON -DWITH_TESTING=ON -DON_INFER=ON \
68+
-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
3469

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

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

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

4682
# 验证命令
4783
python -c "import paddle; paddle.utils.run_check()"
84+
85+
# 预期得到类似以下结果:
86+
Running verify PaddlePaddle program ...
87+
PaddlePaddle works well on 1 NPU.
88+
PaddlePaddle works well on 4 NPUs.
89+
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.
90+
```
91+
92+
## 如何卸载
93+
94+
请使用以下命令卸载Paddle:
95+
96+
```bash
97+
pip uninstall paddlepaddle-npu
4898
```
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 飞桨框架昇腾NPU版支持模型
2+
3+
目前Paddle昇腾NPU版基于华为鲲鹏CPU与昇腾NPU支持以下模型的单机单卡/单机多卡的训练。
4+
5+
| 模型 | 领域 | 模型链接 | 编程范式 | 单卡训练支持 |
6+
| ----------------- | -------- | -------------------------------------------------------- | ------------- | -------------- |
7+
| ResNet50 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/ResNet/ResNet50.yaml) | 动态图 | 支持 |
8+
| ResNet18 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/ResNet/ResNet18.yaml) | 动态图 | 支持 |
9+
| VGG16 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/VGG/VGG16.yaml) | 动态图 | 支持 |
10+
| AlexNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/ppcls/configs/ImageNet/AlexNet/AlexNet.yaml) | 动态图 | 支持 |
11+
| YOLOv3 | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.2/configs/yolov3/yolov3_darknet53_270e_voc.yml) | 动态图 | 支持 |
12+
| BERT | NLP | [模型链接](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert) | 动态图 | 支持 |
13+
| XLNet | NLP | [模型链接](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/xlnet) | 动态图 | 支持 |
14+
| DeepFM | 推荐系统 | [模型链接](https://github.com/PaddlePaddle/PaddleRec/tree/release/2.1.0/models/rank/deepfm) | 动态图 | 支持 |
15+
| Wide&Deep | 推荐系统 | [模型链接](https://github.com/PaddlePaddle/PaddleRec/tree/release/2.1.0/models/rank/wide_deep) | 动态图 | 支持 |
16+
| NCF | 推荐系统 | [模型链接](https://github.com/PaddlePaddle/PaddleRec/tree/release/2.1.0/models/recall/ncf) | 动态图 | 支持 |
17+
| DQN | 强化学习 | [模型链接](https://github.com/PaddlePaddle/PARL/tree/develop/examples/DQN) | 动态图 | 支持 |
18+
19+
## 模型套件
20+
21+
模型放置在飞桨模型套件中,各领域套件是 github.com/PaddlePaddle 下的独立repo,git clone下载即可获取所需的模型文件:
22+
23+
| 领域 | 套件名称 | 分支/版本 |
24+
| ----------- | --------------- | ---------------- |
25+
| 图像分类 | PaddleClas | release/2.3 |
26+
| 目标检测 | PaddleDetection | release/2.2 |
27+
| 自然语言处理 | PaddleNLP | develop |
28+
| 推荐系统 | PaddleRec | release/2.1.0 |
29+
| 强化学习 | PARL | develop |
30+
31+
32+
后续版本将持续增加昇腾NPU在更多模型任务上的验证。
Lines changed: 167 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,180 @@
11
# 飞桨框架昇腾NPU版训练示例
22

3+
## YOLOv3训练示例
34

4-
## Mnist运行示例:
5+
**第一步**:下载并安装 PaddleDetection 套件
6+
7+
```bash
8+
# 下载套件代码
9+
cd path_to_clone_PaddleDetection
10+
git clone https://github.com/PaddlePaddle/PaddleDetection.git
11+
12+
# 编译安装
13+
cd PaddleDetection
14+
python setup.py install
15+
16+
# 安装其他依赖
17+
pip install -r requirements.txt
18+
```
19+
20+
也可以访问PaddleDetection的 [Github Repo](https://github.com/PaddlePaddle/PaddleDetection) 直接下载源码。
21+
22+
**第二步**:准备 VOC 训练数据集
23+
24+
```bash
25+
cd PaddleDetection/static/dataset/roadsign_voc
26+
python download_roadsign_voc.py
27+
```
28+
29+
**第三步**:运行单卡训练
30+
31+
```bash
32+
export FLAGS_selected_npus=0
33+
34+
# 单卡训练
35+
python -u tools/train.py -c configs/yolov3_darknet_roadsign.yml \
36+
-o use_npu=True
37+
38+
# 单卡评估
39+
python -u tools/eval.py -c configs/yolov3_darknet_roadsign.yml \
40+
-o use_npu=True
41+
42+
# 精度结果
43+
INFO:ppdet.utils.voc_eval:mAP(0.50, integral) = 79.40%
44+
```
45+
46+
**第四步**:运行多卡训练
47+
48+
> 注意:多卡训练请参考本页下一章节进行 "NPU多卡训练配置" 的准备。
49+
50+
```bash
51+
# NPU 多卡训练配置
52+
export FLAGS_selected_npus=0,1,2,3
53+
export RANK_TABLE_FILE=/root/hccl_4p_0123_127.0.0.1.json
54+
55+
# 设置 HCCL 相关环境变量
56+
export HCCL_CONNECT_TIMEOUT=7200
57+
export HCCL_WHITELIST_DISABLE=1
58+
export HCCL_SECURITY_MODE=1
59+
60+
# 多卡训练
61+
python -m paddle.distributed.fleet.launch --run_mode=collective \
62+
tools/train.py -c configs/yolov3_darknet_roadsign.yml \
63+
-o use_npu=True
64+
65+
# 多卡训练结果评估
66+
python -u tools/eval.py -c configs/yolov3_darknet_roadsign.yml \
67+
-o use_npu=True
68+
69+
# 精度结果
70+
INFO:ppdet.utils.voc_eval:mAP(0.50, integral) = 83.00%
71+
```
72+
73+
## NPU多卡训练配置
74+
75+
**预先要求**:请先根据华为昇腾910 NPU的文档 [配置device的网卡IP](https://support.huaweicloud.com/instg-cli-cann502-alpha005/atlasdeploy_03_0105.html) 进行相关NPU运行环境的部署和配置,配置完成后检查机器下存在 `/etc/hccn.conf` 文件。
76+
77+
如果是物理机环境,请根据华为官网的 [hccl_tools 说明文档](https://github.com/mindspore-ai/mindspore/tree/v1.4.0/model_zoo/utils/hccl_tools) 进行操作。如果是根据 Paddle 官方镜像启动的容器环境,请根据以下步骤进行操作:
78+
79+
**第一步**:根据容器启动时映射的设备ID,创建容器内的 `/etc/hccn.conf` 文件
80+
81+
例如物理机上的8卡的原始 `/etc/hccn.conf` 文件内容如下:
582

6-
### 下载模型和运行脚本
783
```
8-
# 下载模型和数据
9-
wget https://fleet.bj.bcebos.com/ascend/npu.tar.gz
10-
tar xzvf npu.tar.gz
84+
address_0=192.168.10.21
85+
netmask_0=255.255.255.0
86+
address_1=192.168.20.21
87+
netmask_1=255.255.255.0
88+
address_2=192.168.30.21
89+
netmask_2=255.255.255.0
90+
address_3=192.168.40.21
91+
netmask_3=255.255.255.0
92+
address_4=192.168.10.22
93+
netmask_4=255.255.255.0
94+
address_5=192.168.20.22
95+
netmask_5=255.255.255.0
96+
address_6=192.168.30.22
97+
netmask_6=255.255.255.0
98+
address_7=192.168.40.22
99+
netmask_7=255.255.255.0
11100
```
12101

13-
### 执行训练
102+
容器启动命令中映射的设备ID为4到7的4张NPU卡,则创建创建容器内的 `/etc/hccn.conf` 文件内容如下:
103+
104+
> 注意:这里的 address_4 和 netmask_4 需要相应的修改为 address_0 和 netmask_0,以此类推
105+
14106
```
15-
sh run_mnist.sh
107+
address_0=192.168.10.22
108+
netmask_0=255.255.255.0
109+
address_1=192.168.20.22
110+
netmask_1=255.255.255.0
111+
address_2=192.168.30.22
112+
netmask_2=255.255.255.0
113+
address_3=192.168.40.22
114+
netmask_3=255.255.255.0
16115
```
17116

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

20-
run_mnist.sh中的配置
21119
```
22-
# 配置paddle的路径
23-
export PYTHONPATH=/your/dir/Paddle/build/python:$PYTHONPATH
24-
# 配置使用的NPU卡
25-
export FLAGS_selected_npus=5
26-
# 执行训练脚本
27-
python3 mnist.py
120+
# 下载 hccl_tools.py 文件到本地
121+
wget https://raw.githubusercontent.com/mindspore-ai/mindspore/v1.4.0/model_zoo/utils/hccl_tools/hccl_tools.py
122+
123+
# 生成单机两卡的配置文件,单机可以设置 IP 为 127.0.0.1
124+
python hccl_tools.py --device_num "[0,4)" --server_ip 127.0.0.1
125+
```
126+
127+
运行成功之后在当前目录下获得名为 `hccl_4p_0123_127.0.0.1.json` 的文件,内容如下:
128+
129+
```json
130+
{
131+
"version": "1.0",
132+
"server_count": "1",
133+
"server_list": [
134+
{
135+
"server_id": "127.0.0.1",
136+
"device": [
137+
{
138+
"device_id": "0",
139+
"device_ip": "192.168.10.22",
140+
"rank_id": "0"
141+
},
142+
{
143+
"device_id": "1",
144+
"device_ip": "192.168.20.22",
145+
"rank_id": "1"
146+
},
147+
{
148+
"device_id": "2",
149+
"device_ip": "192.168.30.22",
150+
"rank_id": "2"
151+
},
152+
{
153+
"device_id": "3",
154+
"device_ip": "192.168.40.22",
155+
"rank_id": "3"
156+
}
157+
],
158+
"host_nic_ip": "reserve"
159+
}
160+
],
161+
"status": "completed"
162+
}
163+
```
164+
165+
**第三步**:运行Paddle多卡训练之前,需要先配置名为 `RANK_TABLE_FILE` 的环境变量,指向上一步生成的json文件的绝对路径
166+
167+
```bash
168+
# 1) 设置 ranktable 文件的环境变量
169+
export RANK_TABLE_FILE=$(readlink -f hccl_4p_0123_127.0.0.1.json)
170+
# 或者直接修改为json文件的绝对路径
171+
export RANK_TABLE_FILE=/root/hccl_4p_0123_127.0.0.1.json
172+
173+
# 2) 设置 HCCL 相关环境变量
174+
export HCCL_CONNECT_TIMEOUT=7200
175+
export HCCL_WHITELIST_DISABLE=1
176+
export HCCL_SECURITY_MODE=1
177+
178+
# 3) 启动分布式任务,注意这里的 run_mode 当前仅支持 collective 模式
179+
python -m paddle.distributed.fleet.launch --run_mode=collective train.py ...
28180
```

0 commit comments

Comments
 (0)