ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PaddleOCR 昇腾 NPU 环境搭建与飞桨安装实战指南(Ascend 910B)

PaddleOCR 昇腾 NPU 环境搭建与飞桨安装实战指南(Ascend 910B) PaddleOCR 昇腾 NPU 环境搭建与飞桨安装实战指南Ascend 910B【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR本文围绕 PaddleOCR 官方《昇腾 NPU 飞桨安装教程》展开完整讲解如何在昇腾 910B 芯片上从 Docker 开发镜像出发完成飞桨框架PaddlePaddle 3.0 nightly paddle-custom-npu的安装、环境校验并延伸到 NPU 上的 OCR 产线推理与模型微调实践。读完本文你将掌握一套可直接复制的昇腾 NPU 环境准备流程并理解 PaddleOCR 在 NPU 设备上从装环境到跑起来的完整调用链。当前 PaddleOCR 已支持昇腾 910B 芯片更多型号仍在支持中如有其他型号需求可提交 issue 反馈对应的昇腾驱动版本为23.0.3。考虑到不同机器环境的差异性官方推荐直接使用飞桨官方提供的昇腾开发镜像完成环境准备。本文档对应仓库路径为 docs/version3.x/other_devices_support/paddlepaddle_install_NPU.md其配套的多硬件使用总览可参考 docs/version3.x/other_devices_support/multi_devices_use_guide.md。1、总体流程与前置条件在开始之前先明确整个环境搭建的四个阶段后续章节将逐一展开Docker 环境准备拉取飞桨昇腾开发镜像并启动容器容器内已预装 CANN-8.0.0 昇腾算子库安装飞桨框架先安装 CPU 版paddlepaddle再安装paddle-custom-npu自定义设备包修复依赖与系统兼容问题按 CANN-8.0.0 的要求固定 numpy / opencv 版本并在 ARM 机器上处理 libgomp 报错安装验证通过paddle.utils.run_check()确认飞桨可在 1 卡与 8 卡 NPU 上正常工作。需要强调的是本文档介绍的是**基于飞桨框架PaddlePaddle**的安装与使用方式。若计划使用其他推理引擎如 ONNX Runtime、TensorRT、OM 等请参考对应引擎的官方文档完成安装与配置。飞桨安装的通用说明可参考 docs/version3.x/paddlepaddle_installation.md。2、Docker 环境准备2.1 拉取飞桨昇腾开发镜像飞桨官方提供了昇腾 910B 的开发镜像分为 X86 与 Aarch64 两种架构。该镜像仅作为开发环境使用内部默认安装了昇腾算子库 CANN-8.0.0但不包含预编译的飞桨安装包飞桨包需在下一步单独安装。# 适用于 X86 架构 docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-npu:cann800-ubuntu20-npu-910b-base-x86_64-gcc84 # 适用于 Aarch64 架构 docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-npu:cann800-ubuntu20-npu-910b-base-aarch64-gcc84两个镜像的 tag 中cann800代表 CANN 8.0.0、ubuntu20代表 Ubuntu 20.04 基础系统、gcc84代表 GCC 8.4 工具链。请根据宿主机 CPU 架构选择对应的镜像。2.2 启动容器并映射昇腾设备参考如下命令启动容器关键点在于通过ASCEND_RT_VISIBLE_DEVICES指定容器内可见的 NPU 卡号并把宿主机的昇腾驱动、管理工具与 DCMI 设备管理接口挂载进容器docker run -it --name paddle-npu-dev -v $(pwd):/work \ --privileged --networkhost --shm-size128G -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_DEVICES0,1,2,3,4,5,6,7 \ ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-npu:cann800-ubuntu20-npu-910b-base-$(uname -m)-gcc84 /bin/bash各参数的作用说明如下参数作用--name paddle-npu-dev为容器命名便于后续docker exec进入或管理-v $(pwd):/work将当前工作目录挂载到容器内/work-w/work设置默认工作目录方便直接使用宿主机上的 PaddleOCR 代码与数据--privileged赋予容器特权模式保证昇腾设备访问权限--networkhost使用宿主机网络便于多机/多卡分布式通信--shm-size128G增大共享内存避免多卡训练时共享内存不足-v /usr/local/Ascend/driver:...挂载宿主机昇腾驱动保证 NPU 可用-v /usr/local/bin/npu-smi:...挂载npu-smi工具便于在容器内查看 NPU 状态-v /usr/local/dcmi:...挂载 DCMI昇腾设备管理接口供框架调用-e ASCEND_RT_VISIBLE_DEVICES0,1,2,3,4,5,6,7指定容器可见的 NPU 卡号可按需修改为0或0,1等命令末尾的$(uname -m)会自动解析为宿主机架构x86_64或aarch64从而匹配第一步拉取的镜像。3、安装飞桨 PaddlePaddle 包3.1 先装 CPU 版再装 NPU 自定义设备包进入容器后按顺序安装两个 wheel 包。必须先安装飞桨 CPU 版本再安装 NPU 自定义设备包paddle-custom-npu二者版本号需保持一致# 注意需要先安装飞桨 cpu 版本 python -m pip install paddlepaddle3.0.0.dev20250527 -i https://www.paddlepaddle.org.cn/packages/nightly/cpu python -m pip install paddle-custom-npu3.0.0.dev20250527 -i https://www.paddlepaddle.org.cn/packages/nightly/npu其中3.0.0.dev20250527为飞桨 3.0 的 nightly 开发版本分别从官方的 nightly/cpu 与 nightly/npu 源下载。paddle-custom-npu是飞桨自定义设备Custom Device机制的 NPU 适配包通过它飞桨可以以统一的方式调度昇腾 NPU。从源码看PaddleOCR 的训练侧正是通过自定义设备机制感知 NPU 的。在 tools/program.py 的check_device中当use_npuTrue时飞桨 2.4 之后的版本会调用paddle.device.is_compiled_with_custom_device(npu)来校验当前安装的飞桨是否编译了 NPU 自定义设备支持随后在 设备选择逻辑 中use_npuTrue时会把设备设置为npu:{FLAGS_selected_npus}并调用paddle.set_device完成设备绑定。因此若跳过paddle-custom-npu的安装训练时会在这里直接报错退出。3.2 按 CANN-8.0.0 要求固定 numpy 与 opencv 版本CANN-8.0.0 对部分版本的 numpy 和 opencv 不兼容官方建议安装指定版本python -m pip install numpy1.26.4 python -m pip install opencv-python3.4.18.653.3 ARM 机器上设置 libgomp 环境变量在armAarch64机器上需要额外设置环境变量x86 环境无需设置用于解决 libgomp 的报错# 解决libgomp在arm机器上报错 # libgomp cannot allocate memory in static TLS block export LD_PRELOAD/usr/lib/aarch64-linux-gnu/libgomp.so.1:$LD_PRELOAD该问题源于 ARM 平台上 OpenMP 运行时libgomp.so.1在静态 TLSThread-Local Storage块中无法分配内存通过LD_PRELOAD提前加载该动态库即可规避。建议将该行写入~/.bashrc以便每次进入容器自动生效。4、验证飞桨安装安装完成后运行飞桨自带的环境自检命令python -c import paddle; paddle.utils.run_check()预期输出如下说明飞桨已成功识别 1 张与 8 张 NPURunning verify PaddlePaddle program ... PaddlePaddle works well on 1 npu. PaddlePaddle works well on 8 npus. PaddlePaddle is installed successfully! Lets start deep learning with PaddlePaddle now.若输出中能同时看到 works well on 1 npu 与 works well on 8 npus说明框架、驱动、CANN 与设备映射均已就绪可以进入下一步安装 PaddleOCR 并在 NPU 上运行。5、在 NPU 上使用 PaddleOCR推理与微调完成飞桨安装后请先按 PaddleOCR 安装教程 安装 PaddleOCR 本体。基于昇腾 NPU 的 PaddleOCR 训练、推理方法与 GPU 完全一致只需把设备参数改为npu。该平台上支持 PaddleOCR 三大能力的快速推理与模型微调文字识别模型 PP-OCRv5、文档解析方案 PP-StructureV3 与 PP-ChatOCRv4。5.1 产线快速推理命令行方式使用一行命令即可快速体验# 默认使用 PP-OCRv5 模型 paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png --device npu:0# PP-StructureV3 产线推理 paddleocr pp_structurev3 -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_structure_v3_demo.png --device npu:0--device npu:0中的npu表示设备类型:0表示使用第 0 张 NPU 卡。PaddleOCR 新产线 API 的--device参数由 paddleocr/_common_args.py 定义支持cpu、gpu、npu、gpu:0、gpu:0,1等写法多卡场景还可使用npu:0,1实现并行推理。5.2 产线快速推理Python API 方式在项目中通过几行代码即可完成产线推理from paddleocr import PaddleOCR ocr PaddleOCR(devicenpu:0) result ocr.predict(./general_ocr_002.png) for res in result: res.print() res.save_to_img(output) res.save_to_json(output)PP-StructureV3 文档解析产线同理from paddleocr import PPStructureV3 pipeline PPStructureV3(devicenpu:0) output pipeline.predict(./pp_structure_v3_demo.png) for res in output: res.print() # 打印预测的结构化输出 res.save_to_json(save_pathoutput) # 保存当前图像的结构化json结果 res.save_to_markdown(save_pathoutput) # 保存当前图像的markdown格式的结果更多关于 OCR 产线推理的说明见 通用OCR产线使用教程PP-StructureV3 产线的说明见 PP-StructureV3产线使用教程。5.3 模型微调昇腾 NPU如果对预训练模型的效果不满意可以对产线模型进行微调。昇腾 NPU 上推荐先设置一组 FLAGS 环境变量再以paddle.distributed.launch拉起多卡训练export FLAGS_npu_storage_format0 export FLAGS_npu_jit_compile0 export FLAGS_use_stride_kernel0 export FLAGS_allocator_strategyauto_growth export FLAGS_npu_split_aclnnTrue export FLAGS_npu_scale_aclnnTrue export CUSTOM_DEVICE_BLACK_LISTpad3d,pad3d_grad python3 -m paddle.distributed.launch --devices 0,1,2,3 \ tools/train.py -c configs/rec/PP-OCRv5/PP-OCRv5_mobile_rec.yml \ -o Global.use_gpuFalse Global.use_npuTrue其中各 FLAGS 的作用FLAGS_npu_storage_format0关闭 NPU 存储格式优化以兼容算子FLAGS_npu_jit_compile0关闭算子 JIT 编译FLAGS_use_stride_kernel0关闭 stride 内核FLAGS_allocator_strategyauto_growth使用显存按需增长策略FLAGS_npu_split_aclnnTrue与FLAGS_npu_scale_aclnnTrue分别开启 aclnn 算子拆分与缩放CUSTOM_DEVICE_BLACK_LISTpad3d,pad3d_grad将pad3d相关算子列入黑名单回退到非自定义算子实现以规避 NPU 上的实现差异。训练入口 tools/train.py 会读取配置中的use_npu/use_xpu标志而设备校验与设置则在 tools/program.py 与 tools/program.py 中完成——Global.use_npuTrue时check_device会校验 NPU 自定义设备支持随后把设备设置为npu:0并执行paddle.set_device。传统tools/infer推理脚本同样支持 --use_npu / --use_xpu 参数。5.4 其它推理方式ONNX / OM在昇腾 NPU 上对于少量推理样本直接使用产线推理尤其是 PP-StructureV3 产线可能出现结果异常此时建议改用 ONNX 模型推理以保证结果正确。Paddle 模型转 ONNX 的命令如下paddlex --install paddle2onnx paddlex --paddle2onnx --paddle_model_dir /paddle_model_dir --onnx_model_dir /onnx_model_dir --opset_version 7此外部分模型支持昇腾离线 OM 推理可有效优化推理性能与内存占用。使用atc转换工具将 ONNX 模型转换为 OM 模型atc --modelinference.onnx --framework5 --outputinference --soc_versionyour_device_type --input_shape your_input_shape其中--framework5表示输入为 ONNX 模型--soc_version需替换为实际的昇腾芯片型号如Ascend910B。ONNX 与 OM 模型已深度集成进 PaddleX 高性能推理修改产线配置文件、将推理后端配置为 ONNX 或 OM 后即可通过 PaddleX 高性能推理 API 进行推理从而同时保障精度与速度。6、常见问题1. 使用 PP-StructureV3 产线推理结果不正确该产线上的部分模型在少量 case 上存在精度误差可以尝试调整配置文件中的模型或者使用 ONNX OM 模型进行推理见 5.4 节。2.check_device报 is not compiled with npu 错误说明当前安装的飞桨缺少 NPU 自定义设备支持请确认已按第 3 节顺序安装paddlepaddle与paddle-custom-npu且版本号一致。3. ARM 机器报 libgomp cannot allocate memory in static TLS block请确认已设置第 3.3 节的LD_PRELOAD环境变量。7、参考与延伸阅读本教程源文档docs/version3.x/other_devices_support/paddlepaddle_install_NPU.md多硬件NPU/XPU使用总览docs/version3.x/other_devices_support/multi_devices_use_guide.md昆仑 XPU 飞桨安装教程docs/version3.x/other_devices_support/paddlepaddle_install_XPU.mdPaddleOCR 安装教程docs/version3.x/installation.md设备校验与设置源码tools/program.pycheck_device、tools/program.py设备选择NPU 推理参数入口tools/infer/utility.pyNPU 端到端 TIPC 测试脚本test_tipc/test_train_inference_python_npu.sh该脚本演示了将 TIPC 配置中的use_gpu批量替换为use_npu、关闭 mkldnn 与 benchmark 的完整适配流程可作为 NPU 上跑通训练-推理一体化测试的参考【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表