PaddlePaddle / PaddleX

Low-code development tool based on PaddlePaddle(飞桨低代码开发工具)
Apache License 2.0
4.76k stars 936 forks source link

昇腾910B arm架构npu推理速度比cpu还慢 #1904

Closed yujunhuics closed 1 month ago

yujunhuics commented 1 month ago

环境 paddle-custom-npu 3.0.0b1 paddleocr 2.8.1 paddlepaddle 3.0.0b1 paddlex 3.0.0b0

问题如题: 在测试paddleocr时发现速度巨慢

wangna11BD commented 1 month ago

辛苦发一下使用的flag和命令

yujunhuics commented 1 month ago

辛苦发一下使用的flag和命令

关于脚本,我使用的是ocr产线的python API使用脚本,原封不动:

import cv2
from paddlex import OCRPipeline
from paddlex import PaddleInferenceOption
from paddlex.pipelines.OCR.utils import draw_ocr_box_txt

kernel_option = PaddleInferenceOption()
kernel_option.set_device("npu:0")

pipeline = OCRPipeline(
    'PP-OCRv4_mobile_det',
    'PP-OCRv4_mobile_rec',
    text_det_kernel_option=kernel_option,
    text_rec_kernel_option=kernel_option,)
result = pipeline.predict(
    {"input_path": "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png"},
)

draw_img = draw_ocr_box_txt(result['original_image'],result['dt_polys'], result["rec_text"])
cv2.imwrite("ocr_result.jpg", draw_img[:, :, ::-1])

测试时发现,使用npu速度比cpu的速度慢了将近8倍。

wangna11BD commented 1 month ago

这个是因为第一次运行触发了jit编译导致耗时很久,可以看看你文件下是不是有生成一个kernel_meta文件夹。我在predict里加了个循环,测试det第一次运行需要5.67s,后面只需要0.05s,rec也是一样的现象。 image image

wangna11BD commented 1 month ago

如果需要测速的话建议推理时加一下warmup 20iter,然后取80iter推理时间均值

yujunhuics commented 1 month ago

这个是因为第一次运行触发了jit编译导致耗时很久,可以看看你文件下是不是有生成一个kernel_meta文件夹。我在predict里加了个循环,测试det第一次运行需要5.67s,后面只需要0.05s,rec也是一样的现象。 image image

原来是第一次出发jit编译耗费的大量的时间,感谢科普