3. 使用 CPU 进行预测¶
注意:
在 CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本
可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速,默认 CPU 不启用 MKLDNN
在 CPU 可用核心数足够时,可以通过设置
SetCpuMathLibraryNumThreads
将线程数调高一些,默认线程数为 1
3.1. CPU 设置¶
API定义如下:
// 设置 CPU Blas 库计算线程数
// 参数:mathThreadsNum - blas库计算线程数
// 返回:None
func (config *Config) SetCpuMathLibraryNumThreads(mathThreadsNum int32)
// 获取 CPU Blas 库计算线程数
// 参数:无
// 返回:int - cpu blas 库计算线程数
func (config *Config) CpuMathLibraryNumThreads() int32
代码示例:
package main
// 引入 Paddle Golang Package
import pd "github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi"
import fmt
func main() {
// 创建 Config 对象
config := paddle.NewConfig()
// 设置预测模型路径,这里为非 Combined 模型
config.SetCpuMathLibraryNumThreads(10)
// 输出模型路径
fmt.Println("CPU Math Lib Thread Num is: ", config.CpuMathLibraryNumThreads())
}
3.2. MKLDNN 设置¶
注意:
启用 MKLDNN 的前提为已经使用 CPU 进行预测,否则启用 MKLDNN 无法生效
启用 MKLDNN BF16 要求 CPU 型号可以支持 AVX512,否则无法启用 MKLDNN BF16
API定义如下:
// 启用 MKLDNN 进行预测加速
// 参数:无
// 返回:None
func (config *Config) EnableMkldnn()
// 判断是否启用 MKLDNN
// 参数:无
// 返回:bool - 是否启用 MKLDNN
func (config *Config) MkldnnEnabled() bool
// 启用 MKLDNN BFLOAT16
// 参数:无
// 返回:None
func (config *Config) EnableMkldnnBfloat16()
// 判断是否启用 MKLDNN BFLOAT16
// 参数:无
// 返回:bool - 是否启用 MKLDNN BFLOAT16
func (config *Config) MkldnnBfloat16Enabled() bool
代码示例:
package main
// 引入 Paddle Golang Package
import pd "github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi"
import fmt
func main() {
// 创建 Config 对象
config := pd.NewConfig()
// 启用 MKLDNN 进行预测
config.EnableMkldnn()
// 通过 API 获取 MKLDNN 启用结果 - true
fmt.Println("Enable MKLDNN is: ", config.MkldnnEnabled())
// 启用 MKLDNN BFLOAT16 进行预测
config.EnableMkldnnBfloat16()
// 通过 API 获取 MKLDNN BFLOAT16 启用结果
// 如果当前CPU支持AVX512,则返回 true, 否则返回 false
fmt.Println("Enable MKLDNN BF16 is: ", config.MkldnnBfloat16Enabled())
}