C++ 预测 API介绍

    如果您在使用2.0之前的Paddle,请参考文档,升级到新版API请参考推理升级指南

    使用Predictor进行高性能预测

    Paddle Inference采用 Predictor 进行预测。Predictor 是一个高性能预测引擎,该引擎通过对计算图的分析,完成对计算图的一系列的优化(如OP的融合、内存/显存的优化、 MKLDNN,TensorRT 等底层加速库的支持等),能够大大提升预测性能。

    为了展示完整的预测流程,下面是一个使用 Predictor 进行预测的完整示例,其中涉及到的具体概念和配置会在后续部分展开详细介绍。

    使用Config管理预测配置

    Config管理Predictor的预测配置,提供了模型路径设置、预测引擎运行设备选择以及多种优化预测流程的选项。配置方法如下:

    通用优化配置

    1. config->EnableMemoryOptim(); // 开启内存/显存复用

    设置模型和参数路径

    从磁盘加载模型时,根据模型和参数文件存储方式不同,设置Config加载模型和参数的路径有两种形式:

    • 非combined形式:模型文件夹model_dir下存在一个模型文件和多个参数文件时,传入模型文件夹路径,模型文件名默认为__model__
    1. config->SetModel("./model_dir");
    • combined形式:模型文件夹model_dir下只有一个模型文件model和一个参数文件params时,传入模型文件和参数文件路径。
    1. config->SetModel("./model_dir/model", "./model_dir/params");

    配置CPU预测

    1. config->DisableGpu(); // 禁用GPU
    2. config->EnableMKLDNN(); // 开启MKLDNN,可加速CPU预测
    3. config->SetCpuMathLibraryNumThreads(10); // 设置CPU Math库线程数,CPU核心数支持情况下可加速预测

    note

    如果在输入shape为变长时开启MKLDNN加速预测,需要通过SetMkldnnCacheCapacity接口设置MKLDNN缓存的不同输入shape的数目,否则可能会出现内存泄漏。使用方法如下:

    1. config->SetMkldnnCacheCapacity(100); // 缓存100个不同的输入shape

    配置GPU预测

    1. config->EnableUseGpu(100, 0); // 初始化100M显存,使用GPU ID为0
    2. config->GpuDeviceId(); // 返回正在使用的GPU ID
    3. // 开启TensorRT预测,可提升GPU预测性能,需要使用带TensorRT的预测库
    4. config->EnableTensorRtEngine(1 << 20 /*workspace_size*/,
    5. batch_size /*max_batch_size*/,
    6. 3 /*min_subgraph_size*/,
    7. AnalysisConfig::Precision::kFloat32 /*precision*/,
    8. false /*use_static*/,

    Tensor是Predictor的输入/输出数据结构。

    1. // 通过创建的Predictor获取输入和输出的tensor
    2. auto input_names = predictor->GetInputNames();
    3. auto input_t = predictor->GetInputHandle(input_names[0]);
    4. auto output_names = predictor->GetOutputNames();
    5. auto output_t = predictor->GetOutputHandle(output_names[0]);
    6. // 对tensor进行reshape
    7. input_t->Reshape({batch_size, channels, height, width});
    8. // 通过CopyFromCpu接口,将cpu数据输入;通过CopyToCpu接口,将输出数据copy到cpu
    9. input_t->CopyFromCpu<float>(input_data /*数据指针*/);
    10. output_t->CopyToCpu(out_data /*数据指针*/);
    11. // 设置LOD
    12. std::vector<std::vector<size_t>> lod_data = {{0}, {0}};
    13. input_t->SetLoD(lod_data);
    14. // 获取Tensor数据指针
    15. float *input_d = input_t->mutable_data<float>(PaddlePlace::kGPU); // CPU下使用PaddlePlace::kCPU
    16. int output_size;
    17. float *output_d = output_t->data<float>(PaddlePlace::kGPU, &output_size);

    使用PredictorPool在多线程下进行预测

    PredictorPoolPredictor进行管理。PredictorPoolPredictor进行了简单的封装,通过传入config和thread的数目来完成初始化,在每个线程中,根据自己的线程id直接从池中取出对应的Predictor来完成预测过程。

    1. # 服务初始化时,完成PredictorPool的初始化
    2. PredictorPool pool(config, thread_num);
    3. # 根据线程id来获取Predictor
    4. auto predictor = pool.Retrive(thread_id);
    5. # 使用Predictor进行预测
    6. ...

    C++预测样例编译测试

    1. 下载或编译paddle预测库,参考。

    2. 下载预测样例并解压,进入sample/inference目录下。

      inference 文件夹目录结构如下:

      1. inference
      2. ├── CMakeLists.txt
      3. ├── mobilenet_test.cc
      4. ├── thread_mobilenet_test.cc
      5. ├── mobilenetv1
      6. ├── model
      7. └── params
      8. ├── run.sh
      9. └── run_impl.sh
      • mobilenet_test.cc 为单线程预测的C++源文件

      • thread_mobilenet_test.cc 为多线程预测的C++源文件

      • mobilenetv1 为模型文件夹

      • run.sh 为预测运行脚本文件

    3. 配置编译与运行脚本

      编译运行预测样例之前,需要根据运行环境配置编译与运行脚本run.shrun.sh的选项与路径配置的部分如下:

      1. # 设置是否开启MKL、GPU、TensorRT,如果要使用TensorRT,必须打开GPU
      2. WITH_MKL=ON
      3. WITH_GPU=OFF
      4. USE_TENSORRT=OFF
      5. # 按照运行环境设置预测库路径、CUDA库路径、CUDNN库路径、TensorRT路径、模型路径
      6. LIB_DIR=YOUR_LIB_DIR
      7. CUDA_LIB_DIR=YOUR_CUDA_LIB_DIR
      8. CUDNN_LIB_DIR=YOUR_CUDNN_LIB_DIR
      9. TENSORRT_ROOT_DIR=YOUR_TENSORRT_ROOT_DIR
      10. MODEL_DIR=YOUR_MODEL_DIR

      按照实际运行环境配置run.sh中的选项开关和所需lib路径。

    4. 编译与运行样例

      1. sh run.sh

    CPU下预测

    1. 在CPU型号允许的情况下,尽量使用带AVX和MKL的版本。

    2. 可以尝试使用Intel的 MKLDNN 加速。

    3. 在CPU可用核心数足够时,可以将设置config->SetCpuMathLibraryNumThreads(num);中的num值调高一些。

    1. 可以尝试打开 TensorRT 子图加速引擎, 通过计算图分析,Paddle可以自动将计算图中部分子图融合,并调用NVIDIA的 TensorRT 来进行加速,详细内容可以参考 。

    多线程预测

    Paddle Inference支持通过在不同线程运行多个Predictor的方式来优化预测性能,支持CPU和GPU环境。

    使用多线程预测的样例详见C++预测样例编译测试中下载的中的 thread_mobilenet_test.cc文件。可以将run.shmobilenet_test替换成thread_mobilenet_test再执行

    即可运行多线程预测样例。

    推理升级指南

    2.0对API做了整理,简化了写法,以及去掉了历史上冗余的概念。

    新的 API 为纯增,原有 API 保持不变,在后续版本会逐步删除。

    重要变化:

    • 命名空间从 paddle 变更为 paddle_infer

    • PaddleTensor, PaddleBuf 等被废弃,ZeroCopyTensor 变为默认 Tensor 类型,并更名为 Tensor

    • 新增 PredictorPool 工具类简化多线程 predictor 的创建,后续也会增加更多周边工具

    • CreatePredictor (原 CreatePaddlePredictor) 的返回值由 unique_ptr 变为 shared_ptr 以避免 Clone 后析构顺序出错的问题

    API 变更

    使用新 C++ API 的流程与之前完全一致,只有命名变化

    1. #include "paddle_infernce_api.h"
    2. using namespace paddle_infer;
    3. Config config;
    4. config.SetModel("xxx_model_dir");
    5. auto predictor = CreatePredictor(config);
    6. // Get the handles for the inputs and outputs of the model
    7. auto input0 = predictor->GetInputHandle("X");
    8. auto output0 = predictor->GetOutputHandle("Out");
    9. for (...) {
    10. // Assign data to input0
    11. MyServiceSetData(input0);
    12. predictor->Run();
    13. // get data from the output0 handle
    14. MyServiceGetData(output0);
    15. }

    C++ API

    CreatePredictor

    1. std::shared_ptr<Predictor> CreatePredictor(const Config& config);

    CreatePredictor用来根据Config构建预测引擎。

    示例:

    1. // 设置Config
    2. Config config;
    3. config.SetModel(FLAGS_model_dir);
    4. // 根据Config创建Predictor
    5. std::shared_ptr<Predictor> predictor = CreatePredictor(config);

    参数:

    • config(Config) - 用于构建Predictor的配置信息

    返回:Predictor智能指针

    返回类型:std::shared_ptr<Predictor>

    GetVersion()

    打印Paddle Inference的版本信息。

    参数:

    • None

    返回:版本信息

    返回类型:std::string

    PlaceType

    1. enum class PaddlePlace { kUNK };
    2. using PlaceType = paddle::PaddlePlace;

    PlaceType为目标设备硬件类型,用户可以根据应用场景选择硬件平台类型。

    枚举变量PlaceType的所有可能取值包括:

    {kUNK, kCPU, kGPU}

    PrecisionType

    1. enum class Precision { kFloat32 };
    2. using PrecisionType = paddle::AnalysisConfig::Precision;

    PrecisionType设置模型的运行精度,默认值为kFloat32(float32)。

    枚举变量PrecisionType的所有可能取值包括:

    {kFloat32, kInt8, kHalf}

    1. enum class PaddleDType { FLOAT32 };
    2. using DataType = paddle::PaddleDType;

    DataType为模型中Tensor的数据精度,默认值为FLOAT32(float32)。

    枚举变量DataType的所有可能取值包括:

    {FLOAT32, INT64, INT32, UINT8}

    GetNumBytesOfDataType

    1. int GetNumBytesOfDataType(DataType dtype);

    获取各个DataType对应的字节数。

    参数:

    • dtype - DataType枚举

    返回:字节数

    返回类型:int

    Predictor

    1. class Predictor;

    Predictor是Paddle Inference的预测器,由CreatePredictor根据Config进行创建。用户可以根据Predictor提供的接口设置输入数据、执行模型预测、获取输出等.

    示例:

    1. using namespace paddle_infer;
    2. Config config;
    3. config.SetModel("xxx_model_dir");
    4. auto predictor = CreatePredictor(config);
    5. // Get the handles for the inputs and outputs of the model
    6. auto input0 = predictor->GetInputHandle("X");
    7. auto output0 = predictor->GetOutputHandle("Out");
    8. for (...) {
    9. // Assign data to input0
    10. MyServiceSetData(input0);
    11. predictor->Run();
    12. // get data from the output0 handle
    13. MyServiceGetData(output0);
    14. }

    GetInputNames()

    获取所有输入Tensor的名称。

    参数:

    • None

    返回:所有输入Tensor的名称

    返回类型:std::vector<std::string>

    GetOutputNames()

    获取所有输出Tensor的名称。

    参数:

    • None

    返回:所有输出Tensor的名称

    返回类型:std::vector<std::string>

    GetInputHandle(const std::string& name)

    根据名称获取输入Tensor的句柄。

    参数:

    返回:指向Tensor的指针

    返回类型:std::unique_ptr<Tensor>

    GetOutputHandle(const std::string& name)

    根据名称获取输出Tensor的句柄。

    参数:

    • name - Tensor的名称

    返回:指向Tensor的指针

    返回类型:std::unique_ptr<Tensor>

    Run()

    执行模型预测,需要在设置输入数据后调用。

    参数:

    • None

    返回:None

    返回类型:void

    ClearIntermediateTensor()

    释放临时tensor,将其所占空间归还显/内存池。

    参数:

    • None

    返回:None

    返回类型:void

    TryShrinkMemory()

    释放临时tensor,并检查显/内存池中是否有可以释放的chunk,若有则释放chunk,降低显/内存占用(显/内存池可认为是list<chunk>组成,如果chunk空闲,则可通过释放chunk来降低显/内存占用),demo示例可参考Paddle-Inference-Demo

    参数:

    • None

    返回:None

    返回类型:void

    Clone()

    根据该Predictor,克隆一个新的Predictor,两个Predictor之间共享权重。

    参数:

    • None

    返回:新的Predictor

    返回类型:std::unique_ptr<Predictor>

    Tensor

    1. class Tensor;

    Tensor是Paddle Inference的数据组织形式,用于对底层数据进行封装并提供接口对数据进行操作,包括设置Shape、数据、LoD信息等。

    注意:用户应使用PredictorGetInputHandleGetOuputHandle接口获取输入/输出的Tensor

    示例:

    Reshape(shape)

    设置Tensor的维度信息。

    参数:

    • shape(const std::vector<int>&) - 维度信息

    返回:None

    返回类型:void

    shape()

    获取Tensor的维度信息。

    参数:

    • None

    返回:Tensor的维度信息

    返回类型:std::vector<int>

    CopyFromCpu(data)

    1. template <typename T>
    2. void CopyFromCpu(const T* data);

    从cpu获取数据,设置到tensor内部。

    示例:

    1. // float* data = ...;
    2. auto in_tensor = predictor->GetInputHandle("in_name");
    3. in_tensor->CopyFromCpu(data);

    参数:

    • data(const T*) - cpu数据指针

    返回:None

    返回类型:void

    CopyToCpu(data)

    1. template <typename T>
    2. void CopyToCpu(T* data);

    示例:

    1. std::vector<float> data(100);
    2. auto out_tensor = predictor->GetOutputHandle("out_name");
    3. out_tensor->CopyToCpu(data.data());

    参数:

    • data(T*) - cpu数据指针

    返回:None

    返回类型:void

    data (place, size)

    1. template <typename T>
    2. T* data(PlaceType* place, int* size) const;

    获取Tensor的底层数据的常量指针,用于读取Tensor数据。

    示例:

    1. PlaceType place;
    2. int size;
    3. auto out_tensor = predictor->GetOutputHandle("out_name");
    4. float* data = out_tensor->data<float>(&place, &size);

    参数:

    • place(PlaceType*) - 获取tensor的PlaceType

    • size(int*) - 获取tensor的size

    返回:数据指针

    返回类型:T*

    mutable_data (place)

    1. template <typename T>
    2. T* mutable_data(PlaceType place);

    获取Tensor的底层数据的指针,用于设置Tensor数据。

    1. auto in_tensor = predictor->GetInputHandle("in_name");
    2. float* data = out_tensor->mutable_data<float>(PlaceType::kCPU);
    3. data[0] = 1.;

    参数:

    • place(PlaceType) - 设备信息

    返回:Tensor底层数据指针

    返回类型:T*

    SetLoD(lod)

    设置Tensor的LoD信息。

    参数:

    • lod(const std::vector<std::vector<size_t>>) - Tensor的LoD信息

    返回:None

    lod()

    获取Tensor的LoD信息

    参数:

    • None

    返回:Tensor的LoD信息

    返回类型:std::vector<std::vector<size_t>>

    type()

    tensor的DataType信息。

    参数:

    • None

    返回:Tensor的DataType信息

    返回类型:DataType

    name()

    tensor对应的name。

    参数:

    • None

    返回:Tensor对应的name

    返回类型:std::string

    Config

    1. class Config;

    Config用来配置构建Predictor的配置信息,如模型路径、是否开启gpu等等。

    示例:

    1. Config config;
    2. config.SetModel(FLAGS_model_dir);
    3. config.DisableGpu();
    4. config->SwitchIrOptim(false); // 默认为true。如果设置为false,关闭所有优化
    5. config->EnableMemoryOptim(); // 开启内存/显存复用

    SetModel(const std::string& model_dir)

    设置模型文件路径,当需要从磁盘加载非combine模式时使用。

    参数:

    • model_dir - 模型文件夹路径

    返回:None

    返回类型:void

    model_dir()

    获取模型文件夹路径。

    参数:

    • None

    返回:模型文件夹路径

    返回类型:string

    SetModel(const std::string& prog, const std::string& params)

    设置模型文件路径,当需要从磁盘加载combine模式时使用。

    参数:

    • prog - 模型文件路径

    • params - 模型参数文件路径

    返回:None

    返回类型:void

    SetProgFile(const std::string& prog)

    设置模型文件路径。

    参数:

    • prog - 模型文件路径

    返回:None

    返回类型:void

    prog_file()

    获取模型文件路径。

    参数:

    • None

    返回:模型文件路径

    返回类型:string

    SetParamsFile(const std::string& params)

    设置模型参数文件路径。

    参数:

    • params - 模型文件路径

    返回:None

    返回类型:void

    params_file()

    获取模型参数文件路径。

    参数:

    • None

    返回:模型参数文件路径

    返回类型:string

    SetModelBuffer(const char* prog_buffer, size_t prog_buffer_size, const char* params_buffer, size_t params_buffer_size)

    从内存加载模型。

    参数:

    • prog_buffer - 内存中模型结构数据

    • prog_buffer_size - 内存中模型结构数据的大小

    • params_buffer - 内存中模型参数数据

    • - 内存中模型参数数据的大小

    返回:None

    返回类型:void

    model_from_memory()

    判断是否从内存中加载模型。

    参数:

    • None

    返回:是否从内存中加载模型

    返回类型:bool

    SetOptimCacheDir(const std::string& opt_cache_dir)

    设置缓存路径。

    参数:

    • opt_cache_dir - 缓存路径

    返回:None

    返回类型:void

    DisableFCPadding()

    关闭fc padding。

    参数:

    • None

    返回:None

    返回类型:void

    use_fc_padding()

    判断是否启用fc padding。

    参数:

    • None

    返回:是否启用fc padding

    返回类型:bool

    EnableUseGpu(uint64_t memory_pool_init_size_mb, int device_id = 0)

    启用gpu。

    参数:

    • memory_pool_init_size_mb - 初始化分配的gpu显存,以MB为单位

    • device_id - 设备id

    返回:None

    返回类型:void

    DisableGpu()

    禁用gpu。

    参数:

    • None

    返回:None

    返回类型:void

    use_gpu()

    是否启用gpu。

    参数:

    • None

    返回:是否启用gpu

    返回类型:bool

    gpu_device_id()

    获取gpu的device id。

    参数:

    • None

    返回:gpu的device id

    返回类型:int

    memory_pool_init_size_mb()

    获取gpu的初始显存大小。

    参数:

    • None

    返回:初始的显存大小

    返回类型:int

    fraction_of_gpu_memory_for_pool()

    初始化显存占总显存的百分比

    参数:

    • None

    返回:初始的显存占总显存的百分比

    返回类型:float

    EnableCUDNN()

    启用cudnn。

    参数:

    • None

    返回:None

    返回类型:void

    cudnn_enabled()

    是否启用cudnn。

    参数:

    • None

    返回:是否启用cudnn

    返回类型:bool

    EnableXpu(int l3_workspace_size)

    启用xpu。

    参数:

    • l3_workspace_size - l3 cache分配的显存大小

    返回:None

    返回类型:void

    SwitchIrOptim(int x=true)

    设置是否开启ir优化。

    参数:

    • x - 是否开启ir优化,默认打开

    返回:None

    返回类型:void

    ir_optim()

    是否开启ir优化。

    参数:

    • None

    返回:是否开启ir优化

    返回类型:bool

    SwitchUseFeedFetchOps(int x = true)

    设置是否使用feed,fetch op,仅内部使用。

    参数:

    • x - 是否使用feed, fetch op

    返回:None

    返回类型:void

    use_feed_fetch_ops_enabled()

    是否使用feed,fetch op。

    参数:

    • None

    返回:是否使用feed,fetch op

    返回类型:bool

    SwitchSpecifyInputNames(bool x = true)

    设置是否需要指定输入tensor的name。

    参数:

    • x - 是否指定输入tensor的name

    返回:None

    返回类型:void

    specify_input_name()

    是否需要指定输入tensor的name。

    参数:

    • None

    返回:是否需要指定输入tensor的name

    返回类型:bool

    EnableTensorRtEngine(int workspace_size = 1 << 20, int max_batch_size = 1, int min_subgraph_size = 3, Precision precision = Precision::kFloat32, bool use_static = false, bool use_calib_mode = true)

    设置是否启用TensorRT。

    参数:

    • workspace_size - 指定TensorRT使用的工作空间大小

    • min_subgraph_size - Paddle-TRT是以子图的形式运行,为了避免性能损失,当子图内部节点个数大于min_subgraph_size的时候,才会使用Paddle-TRT运行

    • precision - 指定使用TRT的精度,支持FP32(kFloat32),FP16(kHalf),Int8(kInt8)

    • use_static - 如果指定为true,在初次运行程序的时候会将TRT的优化信息进行序列化到磁盘上,下次运行时直接加载优化的序列化信息而不需要重新生成

    • use_calib_mode - 若要运行Paddle-TRT int8离线量化校准,需要将此选项设置为true

    返回:None

    返回类型:void

    tensorrt_engine_enabled()

    是否启用tensorRT。

    参数:

    • None

    返回:是否启用tensorRT

    返回类型:bool

    SetTRTDynamicShapeInfo(std::map<std::string, std::vector > min_input_shape, std::map<std::string, std::vector > max_input_shape, std::map<std::string, std::vector > optim_input_shape, bool disable_trt_plugin_fp16 = false)

    设置tensorRT的动态shape。

    参数:

    • min_input_shape - tensorRT子图支持动态shape的最小shape

    • max_input_shape - tensorRT子图支持动态shape的最大shape

    • optim_input_shape - tensorRT子图支持动态shape的最优shape

    • disable_trt_plugin_fp16 - 设置tensorRT的plugin不在fp16精度下运行

    返回:None

    返回类型:void

    EnableLiteEngine(AnalysisConfig::Precision precision_mode = Precsion::kFloat32, bool zero_copy = false, const std::vector& passes_filter = {}, const std::vectorstd::string& ops_filter = {})

    启用lite子图。

    参数:

    • precision_mode - lite子图的运行精度

    • zero_copy - 启用zero_copy,lite子图与paddle inference之间共享数据

    • passes_filter - 设置lite子图的pass

    • ops_filter - 设置不使用lite子图运行的op

    返回:None

    返回类型:void

    lite_engine_enabled()

    是否启用lite子图。

    参数:

    • None

    返回:是否启用lite子图

    返回类型:bool

    SwitchIrDebug(int x = true)

    设置是否在图分析阶段打印ir,启用后会在每一个pass后生成dot文件。

    参数:

    • x - 是否打印ir

    返回:None

    返回类型:void

    EnableMKLDNN()

    启用mkldnn。

    参数:

    • None

    返回:None

    返回类型:void

    SetMkldnnCacheCapacity(int capacity)

    设置mkldnn针对不同输入shape的cache容量大小,MKLDNN cache设计文档请参考

    参数:

    • capacity - cache容量大小

    返回:None

    返回类型:void

    mkldnn_enabled()

    是否启用mkldnn。

    参数:

    • None

    返回:是否启用mkldnn

    返回类型:bool

    SetMKLDNNOp(std::unordered_setstd::string op_list)

    指定优先使用mkldnn加速的op列表。

    参数:

    • op_list - 优先使用mkldnn的op列表

    返回:None

    返回类型:void

    EnableMkldnnQuantizer()

    启用mkldnn量化。

    参数:

    • None

    返回:None

    返回类型:void

    mkldnn_quantizer_enabled()

    是否启用mkldnn量化。

    参数:

    • None

    返回:是否启用mkldnn量化

    返回类型:bool

    EnableMkldnnBfloat16()

    启用mkldnn bf16。

    参数:

    • None

    返回:None

    返回类型:void

    mkldnn_bfloat16_enabled()

    是否启用mkldnn bf16。

    参数:

    • None

    返回:是否启用mkldnn bf16

    返回类型:bool

    mkldnn_quantizer_config()

    返回mkldnn量化config。

    参数:

    • None

    返回:mkldnn量化config

    返回类型:MkldnnQuantizerConfig

    SetCpuMathLibraryNumThreads(int cpu_math_library_num_threads)

    设置cpu blas库计算线程数。

    参数:

    • cpu_math_library_num_threads - blas库计算线程数

    返回:None

    返回类型:void

    cpu_math_library_num_threads()

    cpu blas库计算线程数。

    参数:

    • None

    返回:cpu blas库计算线程数。

    返回类型:int

    ToNativeConfig()

    转化为NativeConfig,不推荐使用。

    参数:

    • None

    返回:当前Config对应的NativeConfig

    返回类型:NativeConfig

    EnableGpuMultiStream()

    开启线程流,目前的行为是为每一个线程绑定一个流,在将来该行为可能改变。

    参数:

    • None

    返回:None

    返回类型:void

    thread_local_stream_enabled()

    是否启用线程流。

    参数:

    • None

    返回:是否启用线程流。

    返回类型:bool

    EnableMemoryOptim()

    开启内/显存复用,具体降低内存效果取决于模型结构。

    参数:

    • None

    返回:None

    返回类型:void

    enable_memory_optim()

    是否开启内/显存复用。

    参数:

    • None

    返回:是否开启内/显存复用。

    返回类型:bool

    EnableProfile()

    打开profile,运行结束后会打印所有op的耗时占比。

    参数:

    • None

    返回:None

    返回类型:void

    profile_enabled()

    是否开启profile。

    参数:

    • None

    返回:是否开启profile

    返回类型:bool

    DisableGlogInfo()

    去除Paddle Inference运行中的log。

    参数:

    • None

    返回:None

    返回类型:void

    glog_info_disabled()

    是否禁用了log。

    参数:

    • None

    返回:是否禁用了log

    返回类型:bool

    SetInValid()

    设置Config为无效状态,仅内部使用,保证每一个Config仅用来初始化一次Predictor。

    参数:

    • None

    返回:None

    返回类型:void

    is_valid()

    当前Config是否有效。

    参数:

    • None

    返回:Config是否有效

    返回类型:bool

    pass_builder()

    返回pass_builder,用来自定义图分析阶段选择的ir。

    示例:

    1. Config config;
    2. auto pass_builder = config.pass_builder()
    3. pass_builder->DeletePass("fc_fuse_pass") // 去除fc_fuse

    参数:

    • None

    返回:pass_builder

    返回类型:PassStrategy

    PredictorPool

    PredictorPoolPredictor进行了简单的封装,通过传入config和thread的数目来完成初始化,在每个线程中,根据自己的线程id直接从池中取出对应的Predictor来完成预测过程。

    示例:

    1. Config config;
    2. // init config
    3. int thread_num = 4;
    4. PredictorPool pool(config, thread_num);
    5. auto predictor0 = pool.Retrive(0);
    6. ...
    7. auto predictor3 = pool.Retrive(3);

    Retrive(idx)

    根据线程id取出该线程对应的Predictor。

    参数:

    返回:线程对应的Predictor

    返回类型:Predictor*