3. 使用 CPU 进行预测

注意:

  1. 在 CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本

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

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

3.1. CPU 设置

API定义如下:

// 设置 CPU Blas 库计算线程数
// 参数:config - AnalysisConfig 对象指针
//      n - blas库计算线程数
// 返回:None
func (config *AnalysisConfig) SetCpuMathLibraryNumThreads(n int)

// 获取 CPU Blas 库计算线程数
// 参数:config - AnalysisConfig 对象指针
// 返回:int - cpu blas 库计算线程数
func (config *AnalysisConfig) CpuMathLibraryNumThreads() int

代码示例:

package main

// 引入 Paddle Golang Package
import "/pathto/Paddle/go/paddle"

func main() {
    // 创建 AnalysisConfig 对象
    config := paddle.NewAnalysisConfig()

    // 设置预测模型路径,这里为非 Combined 模型
    config.SetCpuMathLibraryNumThreads(10)

    // 输出模型路径
    println("CPU Math Lib Thread Num is: ", config.CpuMathLibraryNumThreads())
}

3.2. MKLDNN 设置

注意:

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

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

API定义如下:

// 启用 MKLDNN 进行预测加速
// 参数:config - AnalysisConfig 对象指针
// 返回:None
func (config *AnalysisConfig) EnableMkldnn()

// 判断是否启用 MKLDNN
// 参数:config - AnalysisConfig 对象指针
// 返回:bool - 是否启用 MKLDNN
func (config *AnalysisConfig) MkldnnEnabled() bool

// 启用 MKLDNN BFLOAT16
// 参数:config - AnalysisConfig 对象指针
// 返回:None
func (config *AnalysisConfig) EnableMkldnnBfloat16()

// 判断是否启用 MKLDNN BFLOAT16
// 参数:config - AnalysisConfig 对象指针
// 返回:bool - 是否启用 MKLDNN BFLOAT16
func (config *AnalysisConfig) MkldnnBfloat16Enabled() bool

代码示例:

package main

// 引入 Paddle Golang Package
import "/pathto/Paddle/go/paddle"

func main() {
    // 创建 AnalysisConfig 对象
    config := paddle.NewAnalysisConfig()

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

    // 通过 API 获取 MKLDNN 启用结果 - true
    println("Enable MKLDNN is: ", config.MkldnnEnabled())

    // 启用 MKLDNN BFLOAT16 进行预测
    config.EnableMkldnnBfloat16()

    // 通过 API 获取 MKLDNN BFLOAT16 启用结果
    // 如果当前CPU支持AVX512,则返回 true, 否则返回 false
    println("Enable MKLDNN BF16 is: ", config.MkldnnBfloat16Enabled())
}