Paddle Inference部署推理(十八)

十八:Paddle Inference推理 (C++)API详解

3. 使用 CPU 进行预测

注意:

  • CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVXMKL 的版本

  • 可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速,默认 CPU 不启用 MKLDNN

  • CPU 可用核心数足够时,可以通过设置 SetCpuMathLibraryNumThreads 将线程数调高一些,默认线程数为 1

3.1. CPU 设置

复制代码
// 设置 CPU 加速库计算线程数
// 参数:cpu_math_library_num_threads - CPU 加速库计算线程数
// 返回:None
void SetCpuMathLibraryNumThreads(int cpu_math_library_num_threads);

// 获取 CPU 加速库计算线程数
// 参数:None
// 返回:int - CPU 加速库计算线程数
int cpu_math_library_num_threads() const;

代码示例:

复制代码
// 创建默认 Config 对象
paddle_infer::Config config();

// 设置 CPU 加速库线程数为 10
config.SetCpuMathLibraryNumThreads(10);

// 通过 API 获取 CPU 信息
int num_thread = config.cpu_math_library_num_threads();
std::cout << "CPU thread number is: " << num_thread << std::endl; // 10

3.2. MKLDNN 设置

注意:

  • 启用 MKLDNN 的前提为已经使用 CPU 进行预测,否则启用 MKLDNN 无法生效

  • 启用 MKLDNN BF16 要求 CPU 型号可以支持 AVX512,否则无法启用 MKLDNN BF16

  • SetMkldnnCacheCapacity 请参考 MKLDNN cache设计文档

    API定义如下:

    // 启用 MKLDNN 进行预测加速
    // 参数:None
    // 返回:None
    void EnableMKLDNN();

    // 判断是否启用 MKLDNN
    // 参数:None
    // 返回:bool - 是否启用 MKLDNN
    bool mkldnn_enabled() const;

    // 设置 MKLDNN 针对不同输入 shape 的 cache 容量大小
    // 参数:int - cache 容量大小
    // 返回:None
    void SetMkldnnCacheCapacity(int capacity);

    // 指定使用 MKLDNN 加速的 OP 列表
    // 参数:std::unordered_setstd::string - 使用 MKLDNN 加速的 OP 列表
    // 返回:None
    void SetMKLDNNOp(std::unordered_setstd::string op_list);

    // 启用 MKLDNN BFLOAT16
    // 参数:None
    // 返回:None
    void EnableMkldnnBfloat16();

    // 启用 MKLDNN INT8
    // 参数:op_list - 使用 MKLDNN INT8 加速的 OP 列表
    // 返回:None
    void EnableMkldnnInt8(const std::unordered_setstd::string& op_list);

    // 判断是否启用 MKLDNN INT8
    // 参数:None
    // 返回:bool - 是否启用 MKLDNN INT8
    bool mkldnn_int8_enabled() const;

    // 判断是否启用 MKLDNN BFLOAT16
    // 参数:None
    // 返回:bool - 是否启用 MKLDNN BFLOAT16
    bool mkldnn_bfloat16_enabled() const;

    // 指定使用 MKLDNN BFLOAT16 加速的 OP 列表
    // 参数:std::unordered_setstd::string - 使用 MKLDNN BFLOAT16 加速的 OP 列表
    // 返回:None
    void SetBfloat16Op(std::unordered_setstd::string op_list);

代码示例 (1):使用 MKLDNN 进行预测

复制代码
// 创建 Config 对象
paddle_infer::Config config(FLAGS_infer_model + "/mobilenet.pdmodel",
                            FLAGS_infer_model + "/mobilenet.pdiparams");

// 启用 MKLDNN 进行预测
config.EnableMKLDNN();
// 通过 API 获取 MKLDNN 启用结果 - true
std::cout << "Enable MKLDNN is: " << config.mkldnn_enabled() << std::endl;

// 设置 MKLDNN 的 cache 容量大小
config.SetMkldnnCacheCapacity(1);

// 设置启用 MKLDNN 进行加速的 OP 列表
std::unordered_set<std::string> op_list = {"softmax", "elementwise_add", "relu"};
config.SetMKLDNNOp(op_list);

代码示例 (2):使用 MKLDNN BFLOAT16 进行预测

复制代码
// 创建 Config 对象
paddle_infer::Config config(FLAGS_infer_model + "/mobilenet.pdmodel",
                            FLAGS_infer_model + "/mobilenet.pdiparams");

// 启用 MKLDNN 进行预测
config.EnableMKLDNN();

// 启用 MKLDNN BFLOAT16 进行预测
config.EnableMkldnnBfloat16();
// 设置启用 MKLDNN BFLOAT16 的 OP 列表
config.SetBfloat16Op({"conv2d"});

// 通过 API 获取 MKLDNN BFLOAT16 启用结果 - true
std::cout << "Enable MKLDNN BF16 is: " << config.mkldnn_bfloat16_enabled() << std::endl;

代码示例 (3):使用 MKLDNN INT8 进行预测

复制代码
// 创建 Config 对象
paddle_infer::Config config(FLAGS_infer_model + "/mobilenet.pdmodel",
                            FLAGS_infer_model + "/mobilenet.pdiparams");

// 启用 MKLDNN 进行预测
config.EnableMKLDNN();

// 启用 MKLDNN INT8 进行预测
config.EnableMkldnnInt8();

// 通过 API 获取 MKLDNN INT8 启用结果 - true
std::cout << "Enable MKLDNN INT8 is: " << config.mkldnn_int8_enabled() << std::endl;
相关推荐
苦青藤1 小时前
从零搭建 WSUS 隔离网络:完整实战指南(内网离线补丁分发)
运维·windows·microsoft
马***4112 小时前
适配成人英语学习痛点,打造落地性强的学习辅助方式
人工智能·学习
夜焱辰2 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
Ricky05532 小时前
CTRL-WORLD:一种用于机器人操控的可控生成世界模型(中美2025年联合研究)
人工智能·机器人·世界模型
jeffer_liu2 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
阿乔外贸日记2 小时前
2026尼日利亚五项清关政策更新,拉高能源装备进口综合成本
大数据·人工智能·搜索引擎·智能手机·云计算·能源
8Qi82 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
民乐团扒谱机2 小时前
【AI笔记】短时纯音时长对音高感知偏移效应研究综述
人工智能·笔记
侃谈科技圈3 小时前
破除数据中台落地困境:2026数据治理平台差异化能力与选型决策指南
大数据·人工智能
大象说3 小时前
Python多进程共享队列无报错僵死 120G Nginx访问日志清洗踩坑全记录
人工智能·自然语言处理