昇腾910(NPU)安装paddlepaddle【自用版】
前期说明
硬件配置:
系统:EulerOS 2.0 (SP8)
驱动:23.0.rc2
参考文章:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/hardware_support/npu/install_cn.html#wheel
飞桨自定义接入硬件后端(昇腾 NPU)
系统要求
芯片类型 | CANN 版本 | 驱动版本 |
---|---|---|
昇腾 910 | CANN 7.0.1 | 23.0.2 |
注意:
release/2.6
分支仅支持 昇腾 910 芯片。- 如需支持 昇腾 910B 芯片,请切换到
develop
分支。- 查看芯片类型命令:
# 昇腾 910 lspci | grep d801 ##驱动显示910B是910芯片 # 昇腾 910B lspci | grep d802 ##驱动显示910B1-4才是910B芯片
环境准备与源码同步
1. 拉取开发环境镜像
docker pull registry.baidubce.com/device/paddle-npu:cann701-ubuntu20-x86_64-gcc84-py39
docker pull registry.baidubce.com/device/paddle-npu:cann701-ubuntu20-aarch64-gcc84-py39
2. 启动容器
docker run -it --name paddle-npu-dev -v $(pwd):/work \--privileged --network=host --shm-size=128G -w=/work \-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 \-e ASCEND_RT_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" \registry.baidubce.com/device/paddle-npu:cann701-ubuntu20-$(uname -m)-gcc84-py39 /bin/bash
3. 克隆源码
git clone https://github.com/PaddlePaddle/PaddleCustomDevice -b release/2.6
cd PaddleCustomDevice
PaddlePaddle 安装与运行
源码编译安装
-
进入昇腾 NPU 后端目录
cd backends/npu
-
安装 PaddlePaddle CPU 版本
开发镜像中默认不包含飞桨安装包:
pip install paddlepaddle==2.6.1 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
注意:这下载特别慢,要么你开代理,要么自己翻墙去下载。
下载地址:https://files.pythonhosted.org/packages/8c/fa/5ca56c034e64a5a59864acff43dbd34480f80b0f1b4209d43e07225b3028/paddlepaddle-2.6.1-cp39-cp39-manylinux2014_aarch64.whl -
编译选项配置
export WITH_TESTING=OFF # 是否打开单元测试,默认为 ON
-
执行编译脚本
bash tools/compile.sh
注意:出现Cmake报错
解决方法:
添加整个仓库到安全目录
git config --global --add safe.directory /work/padd/PaddleCustomDevice添加 Paddle 子模块到安全目录(重要!)
git config --global --add safe.directory /work/padd/PaddleCustomDevice/Paddle进入 npu 后端重新编译
cd /work/padd/PaddleCustomDevice/backends/npu
bash tools/compile.sh
- 安装编译产物
pip install build/dist/paddle_custom_npu*.whl
基础功能检查
-
列出可用硬件后端
python -c "import paddle; print(paddle.device.get_all_custom_device_type())"
预期输出:
['npu']
-
检查当前安装版本
python -c "import paddle_custom_device; paddle_custom_device.npu.version()"
预期输出:
version: 2.6.1 commit: 79cd4ebe805a9a3c6bc7817a7ec2e1fee32ebe8e cann: 7.0.1
-
飞桨健康检查
python -c "import paddle; paddle.utils.run_check()"
预期输出:
Running verify PaddlePaddle program ... PaddlePaddle works well on 1 npu. PaddlePaddle works well on 8 npus. PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.
模型训练和推理示例
1. 运行训练示例
python tests/test_LeNet_MNIST.py
预期输出(训练部分):
Epoch [1/2], Iter [01/14], reader_cost: 2.81928 s, batch_cost: 97.57224 s, ips: 41.97915 samples/s, eta: 0:45:32
Epoch [1/2], Iter [02/14], reader_cost: 1.41005 s, batch_cost: 48.79607 s, ips: 83.94119 samples/s, eta: 0:21:57
... ...
Epoch [2/2], Iter [14/14], reader_cost: 0.29687 s, batch_cost: 0.31025 s, ips: 13202.09133 samples/s, eta: 0:00:00
Epoch ID: 2, Epoch time: 4.88396 s, reader_cost: 4.15624 s, batch_cost: 4.34355 s, avg ips: 11741.29245 samples/s
Eval - Epoch ID: 2, Top1 accurary:: 0.86462, Top5 accurary:: 0.99133
2. 运行推理示例
python inference_example.py
预期输出(推理部分):
I0509 12:13:58.880553 9291 program_interpreter.cc:212] New Executor is Running.
I0509 12:13:58.911787 9291 analysis_predictor.cc:1658] CustomDevice is enabled
... ...
I0509 12:13:58.913389 9291 ir_params_sync_among_devices_pass.cc:144] Sync params from CPU to npu:0
--- Running analysis [adjust_cudnn_workspace_size_pass]
--- Running analysis [inference_op_replace_pass]
--- Running analysis [ir_graph_to_program_pass]
I0509 12:13:58.917276 9291 analysis_predictor.cc:1838] ======= optimize end =======
I0509 12:13:58.917372 9291 naive_executor.cc:200] --- skip [feed], feed -> inputs
I0509 12:13:58.917668 9291 naive_executor.cc:200] --- skip [save_infer_model/scale_0.tmp_0], fetch -> fetch
Output data size is 10
Output data shape is (1, 10)
环境变量
主题 | 变量名称 | 类型 | 说明 | 默认值 |
---|---|---|---|---|
调试 | CUSTOM_DEVICE_BLACK_LIST | String | 在黑名单内的算子会异构到 CPU 上运行 | "" |
FLAGS_npu_check_nan_inf | Bool | 是否开启所有 NPU 算子输入输出检查 | False | |
FLAGS_npu_blocking_run | Bool | 是否开启强制同步执行所有 NPU 算子 | False | |
性能分析 | FLAGS_npu_profiling_dir | String | 设置 Profiling 数据保存目录 | "ascend_profiling" |
FLAGS_npu_profiling_dtypes | Uint64 | 指定需要采集的 Profiling 数据类型 | 见 runtime.cc | |
FLAGS_npu_profiling_metrics | Uint64 | 设置 AI Core 性能指标采集项 | 见 runtime.cc | |
性能加速 | FLAGS_npu_storage_format | Bool | 是否开启 Conv/BN 等算子的计算加速 | False |
附录
- 昇腾 NPU 开发文档:CANN 官方文档
- PaddlePaddle 官方文档:PaddlePaddle 官网