ARTICLE DETAIL

资讯详情

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

PaddleX Single Model Python Inference API 完整指南:从 `create_model` 到 `PaddlePredictorOption`

PaddleX Single Model Python Inference API 完整指南:从 `create_model` 到 `PaddlePredictorOption` 人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载本指南围绕 PaddleX 单模型Single ModelPython 脚本推理接口展开系统讲解如何通过create_model()实例化模型、用predict()完成推理并借助结果对象的print()、save_to_json()、save_to_img()等方法输出与保存预测结果同时深入解析PaddlePredictorOption推理配置设备、运行模式、TensorRT 动态形状等的底层实现。读完本文你将能基于 PaddleX 用几行 Python 代码完成图像分类、目标检测、OCR、时序预测等任意单模型的快速推理并根据硬件环境灵活调整推理策略。在开始使用 Python 脚本进行单模型快速推理前请先按照 PaddleX 本地安装教程或参考 PaddlePaddle 安装文档完成 PaddleX 的安装。一、使用示例三步完成单模型推理以图像分类模型PP-LCNet_x1_0为例一段完整的推理代码如下from paddlex import create_model model create_model(model_namePP-LCNet_x1_0) output model.predict( https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg, batch_size1, ) for res in output: res.print(json_formatFalse) res.save_to_img(./output/) res.save_to_json(./output/res.json)简单来说只需三步调用create_model()方法实例化预测模型对象调用预测模型对象的predict()方法进行推理预测调用print()、save_to_xxx()等相关方法对预测结果进行打印输出或是保存。上述流程同样适用于仓库中其他模块的推理例如 api_examples/pipelines/test_image_classification.py 展示了 Pipeline 级别的同类调用模式create_pipeline(pipelineimage_classification)后调用pipeline.predict(...)再对每个结果调用res.print()、res.save_to_img(./output/)、res.save_to_json(./output/)。单模型 API 与 Pipeline API 在创建 → 预测 → 输出/保存这一使用范式上保持一致。二、API 说明1. 调用create_model()方法实例化预测模型对象create_model()用于实例化预测模型对象其参数说明如下参数类型说明model_namestr模型名如PP-LCNet_x1_0也可以是本地模型目录名如/path/to/PP-LCNet_x1_0_infer/model_dirstr本地 inference 模型文件目录路径如/path/to/PP-LCNet_x1_0_infer/默认为None表示使用model_name指定的官方推理模型batch_sizeint批大小默认为1devicestr设置模型推理设备可指定卡号如cpu、gpu:2默认情况下如 GPU 可用则使用编号最小的 GPU否则使用 CPUpp_optionPaddlePredictorOption用于改变运行模式等配置项详细说明请参考下文第 4 节-推理配置use_hpipbool是否启用高性能推理插件High-Performance Inference Pluginhpi_configdict \| None高性能推理配置推理超参数-支持常见推理超参数的修改如topk等具体参数说明详见具体模型文档从源码看create_model的定义位于 paddlex/model.py其内部逻辑为def create_model(model_name, model_dirNone, *args, **kwargs): return _ModelBasedInference( model_namemodel_name, model_dirmodel_dir, *args, **kwargs )_ModelBasedInference在构造时调用create_predictor(*args, **kwargs)完成预测器的创建其predict()方法将预测任务委托给预测器对象class _ModelBasedInference(_BaseModel): def __init__(self, *args, **kwargs): self._predictor create_predictor(*args, **kwargs) def predict(self, *args, **kwargs): yield from self._predictor(*args, **kwargs)这里predict()是一个生成器通过yield from逐样本产出结果。由于_ModelBasedInference定义了__getattr__模型对象上的多数属性如print相关能力会被转发到底层 predictor 或结果对象上。create_predictor的完整实现位于 paddlex/inference/models/init.py其关键行为如下若model_dir为None会校验model_name是否在official_models官方模型清单见 paddlex/inference/utils/official_models.py中并自动解析出官方模型目录若指定了model_dir则断言该目录存在加载模型目录下的配置文件并断言配置中的Global.model_name与传入的model_name一致防止目录与名称不匹配最终根据模型名通过BasePredictor.get(model_name)分发到对应的预测器类ClasPredictor、DetPredictor、SegPredictor、TSAdPredictor等见 paddlex/inference/models/base/predictor/base_predictor.py 及 paddlex/inference/models/init.py。2. 调用预测模型对象的predict()方法进行推理预测predict()使用已定义的预测模型对输入数据进行预测参数说明input任意类型支持str类型表示的待预测文件路径、包含待预测文件的目录路径、网络 URL对 CV 模型支持numpy.ndarray表示的图像数据对 TS 模型支持pandas.DataFrame类型数据同样支持由上述类型构成的list类型返回值generator需通过for-in或next()方式遍历每次访问返回一个样本的预测结果典型的遍历方式有两种# 方式一for-in 遍历 for res in model.predict(input_data): res.print() # 方式二next() 迭代 gen model.predict(input_data) res next(gen)传入目录或 URL 时PaddleX 会自动展开目录下的文件或下载网络资源并逐个预测传入 list 时则会按列表顺序对每个元素分别执行预测。3. 对预测结果进行可视化与保存模型的预测结果支持直接访问与保存可通过相应的属性或方法实现。结果对象本质上继承自dict见 paddlex/inference/common/result/base_result.py因此除了下列 API还可以像字典一样按键访问原始数据。属性属性返回值说明strstr预测结果的字符串表示jsondictJSON 格式表示的预测结果imgPIL.Image预测结果的可视化图仅当该模型预测结果支持可视化表示时可用htmlstr预测结果的 HTML 表示仅当该模型预测结果支持以 HTML 形式表示时可用更多-不同模型的预测结果支持不同的表示方式如base64、csv、xlsx、markdown、video等更多属性请参考具体模型文档方法方法参数返回值说明print()json_formatbool默认为False表示不使用 JSON 格式化输出indentint默认为4当json_format为True时有效表示 JSON 格式化的缩进ensure_asciibool默认为False当json_format为True时有效无将预测结果输出。当预测结果不便于直接输出时会省略相关内容save_to_json()save_path结果保存路径indent、ensure_ascii同上无将预测结果保存为 JSON 文件。当预测结果包含无法 JSON 序列化的数据如numpy数组、DataFrame时会自动进行格式转换以实现序列化保存save_to_img()save_path结果保存路径无将预测结果可视化并保存为图像仅当该模型预测结果支持以图像形式表示时可用save_to_csv()save_path结果保存路径无将预测结果保存为 CSV 文件仅当该模型预测结果支持以 CSV 形式表示时可用save_to_html()save_path结果保存路径无将预测结果保存为 HTML 文件仅当该模型预测结果支持以 HTML 形式表示时可用save_to_xlsx()save_path结果保存路径无将预测结果保存为 XLSX 文件仅当该模型预测结果支持以 XLSX 形式表示时可用更多--不同模型的预测结果支持不同的存储方式如save_to_base64、save_to_markdown、save_to_video更多方法请参考具体模型文档这些属性与方法由 paddlex/inference/common/result/mixin.py 中的 Mixin 类提供StrMixin提供str与print()JsonMixin提供json与save_to_json()ImgMixin提供img与save_to_img()此外还有CSVMixin、HtmlMixin、XlsxMixin、Base64Mixin、VideoMixin、MarkdownMixin各模型的结果类按需组合这些 Mixin因而不同模型可用的输出格式不尽相同。关于save_path的自动命名规则源码行为值得注意若save_path指向目录如./output/即路径不以对应扩展名结尾结果文件会以输入文件的 stem 命名例如输入为general_image_classification_001.jpg时JSON 结果会保存为./output/general_image_classification_001_res.json可视化图保存为./output/general_image_classification_001_res.png若save_path指向具体文件以.json、.png、.csv等结尾则直接写入该文件当结果包含多个子结果需要保存为多个文件而save_path却是具体文件路径时会给出警告当结果中没有输入文件信息如输入为ndarray时会以时间戳 随机数如1730000000_1234作为文件名的兜底方案并通过日志提示用户。save_all(save_path)方法见 base_result.py会自动调用该结果对象注册的全部保存方法便于一次导出所有格式。4. 推理配置PaddlePredictorOptionPaddleX 支持通过PaddlePredictorOption修改推理配置相关 API 如下。属性device推理设备支持设置str类型表示的推理设备类型及卡号设备类型支持gpu、cpu、npu、xpu、mlu、dcu源码中SUPPORT_DEVICE还包含gcu见 paddlex/inference/utils/pp_option.py。当使用加速卡时支持指定卡号如使用 0 号 GPUgpu:0。默认情况下如有可用 GPU 则使用编号最小的 GPU否则使用 CPU返回值str类型当前设置的推理设备。run_mode运行模式支持设置str类型的运行模式paddle、trt_fp32、trt_fp16、trt_int8、mkldnn、mkldnn_bf16源码SUPPORT_RUN_MODE还包含paddle_fp32、paddle_fp16见 pp_option.py。其中trt_fp32、trt_fp16分别对应使用 TensorRT 子图引擎进行 FP32、FP16 精度推理仅当推理设备为 GPU 时可选mkldnn仅当推理设备为 CPU 时可选默认为paddle返回值str类型当前设置的运行模式。cpu_threadsCPU 加速库计算线程数仅当推理设备为cpu时有效支持设置int类型表示 CPU 推理时加速库计算线程数默认值为8返回值int类型当前设置的加速库计算线程数。trt_dynamic_shapesTensorRT 动态形状配置仅当run_mode为trt_fp32或trt_fp16时有效支持设置dict类型或None。如果为dict键为输入张量名称值为两级嵌套列表[{最小形状}, {优化形状}, {最大形状}]例如{input: [[1, 2], [1, 2], [2, 2]]}返回值dict类型或None当前设置的 TensorRT 动态形状配置。trt_dynamic_shape_input_dataTensorRT 引擎构建的输入张量填充数据使用 TensorRT 时为构建引擎的输入张量填充数据仅当run_mode为trt_fp32或trt_fp16时有效支持设置dict类型或None。如果为dict键为输入张量名称值为两级嵌套列表[{最小形状对应的填充数据}, {优化形状对应的填充数据}, {最大形状对应的填充数据}]例如{input: [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}数据为浮点数按照行优先顺序填充返回值dict类型或None当前设置的输入张量填充数据。方法方法参数返回值说明get_support_run_mode()无list获取支持的运行模式列表get_support_device()无list获取支持的运行设备类型列表get_device()无str获取当前设置的设备从源码理解PaddlePredictorOption的内部机制PaddlePredictorOption的完整实现位于 paddlex/inference/utils/pp_option.py以下几点对实践很有帮助默认运行模式的自动推导get_default_run_mode(model_name, device_type)pp_option.py在 CPU 设备上若环境启用了 MKL-DNN 且模型不在MKLDNN_BLOCKLIST中会自动选择mkldnn模式否则回退到paddleGPU 设备默认使用paddle模式。Blocklist 保护机制设置run_mode时若模型位于 TRT_BLOCKLIST 或 MKLDNN_BLOCKLIST 中对应加速模式会被自动降级为paddle并给出警告避免不支持的模型在加速模式下运行出错。TensorRT 精度映射当run_mode为trt_fp32/trt_fp16/trt_int8时会根据 trt_config.py 中的TRT_PRECISION_MAP自动填充对应模型的trt_cfg_setting含precision_mode等无需手工配置。默认配置一览_get_default_config()给出了完整的默认值除文档中提到的cpu_threads8外还包括enable_new_ir依据模型是否在NEWIR_BLOCKLIST中、trt_use_dynamic_shapesTrue、trt_collect_shape_range_infoTrue、mkldnn_cache_capacity10等用户可按需覆盖。设备解析与校验set_device()内部通过parse_device()拆分设备类型与卡号并通过check_supported_device_type()校验设备类型与模型的兼容性相关工具见 paddlex/utils/device.py。完整配置示例将上述 API 组合使用可以得到一个完整的推理配置方案from paddlex import create_model from paddlex.inference import PaddlePredictorOption # 1. 构建推理配置 pp_option PaddlePredictorOption() pp_option.device gpu:0 # 使用 GPU 0 pp_option.run_mode trt_fp16 # 使用 TensorRT FP16 精度 pp_option.trt_dynamic_shapes { input: [[1, 3, 224, 224], [1, 3, 224, 224], [8, 3, 224, 224]] } pp_option.trt_dynamic_shape_input_data { input: [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] } # 2. 传入 create_model model create_model( model_namePP-LCNet_x1_0, batch_size4, pp_optionpp_option, ) # 3. 推理与结果输出 for res in model.predict( [https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg], ): res.print(json_formatTrue, indent2, ensure_asciiFalse) res.save_to_json(./output/) res.save_to_img(./output/)三、按硬件场景选择推理策略的建议CPU 部署设置devicecpu如需加速可将run_mode设为mkldnn需 CPU 支持且模型不在 blocklist 中并按核数合理设置cpu_threadsGPU 部署默认devicegpu:0追求吞吐可选择trt_fp16追求精度可选择trt_fp32当输入尺寸多变时务必配合trt_dynamic_shapes设置最小/优化/最大形状异构加速卡支持npu、xpu、mlu、dcu等设备类型可通过get_support_device()查询当前环境实际可用的设备类型批量推理通过batch_size参数控制批大小默认 1在 GPU 上适当增大批大小有助于提升吞吐。四、延伸阅读单模型各任务的详细教程推理超参数、结果属性差异见 docs/module_usage/tutorials 下对应模块文档管线Pipeline级 Python 用法见 PaddleX Pipeline Python API 说明推理配置参数与 3D、时序任务的差异配置见 公共配置参数说明 与 时序任务配置参数说明多设备部署与高性能推理插件HPIP的使用见 多设备使用指南 与 高性能推理说明。赞分享人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载相关推荐PaddleX 单模型 Python 推理 API 实战指南create_model 与 PaddlePredictorOption 全解析PaddleX 单模型 Python 推理 API 实战指南create_model 与 PaddlePredictorOption 全解析 本文是 Padd人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音Triton Inference Server Python API 完全指南从入门到实战Triton Inference Server Python API 完全指南从入门到实战 概述 NVIDIA Triton Inference Server模型推理服务AI 应用后端marimo 中的 mo.plain关闭 DataFrame 默认渲染、还原原始输出的 Layout 工具实战marimo 中的 mo.plain关闭 DataFrame 默认渲染、还原原始输出的 Layout 工具实战 mo.plain value 是 marimo人工智能深度学习分布式训练上一篇Gas Town Dog 执行模型详解Imperative Go 与 Formula 调度如何分工下一篇Vectormath 库解析FidelityFX SDK 中基于 Sony 开源代码改进的头文件式向量矩阵数学库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表