Java API

MobileConfig

import com.baidu.paddle.lite.MobileConfig;

public class MobileConfig extends ConfigBase;

MobileConfig 用来配置构建轻量级 PaddlePredictor 的配置信息,如 NaiveBuffer 格式的模型地址、能耗模式、工作线程数等等。

注意:输入的模型需要使用 Model Optimize Tool 转化为 NaiveBuffer 格式的优化模型。

示例:

MobileConfig config = new MobileConfig();
// 设置NaiveBuffer格式模型目录
config.setModelFromFile(modelfile);
// 设置能耗模式
config.setPowerMode(PowerMode.LITE_POWER_HIGH);
// 设置工作线程数
config.setThreads(1);

// 根据MobileConfig创建PaddlePredictor
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);

setModelFromFile

void setModelFromFile(String x);

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

  • 参数

    • x: 模型文件路径

setModelFromBuffer

void setModelFromBuffer(String x);

设置模型的内存数据,当需要从内存加载模型时使用。

  • 参数

    • x: 内存中的模型数据

setPowerMode

void void setPowerMode(PowerMode mode);

设置 CPU 能耗模式。若不设置,则默认使用 LITE_POWER_HIGH

注意:只在开启 OpenMP 时生效,否则系统自动调度。

  • 参数

    • PowerMode: CPU 能耗模式。

getPowerMode

PowerMode getPowerMode();

获取设置的 CPU 能耗模式。

  • 返回值:

    设置的 CPU 能耗

setThreads

void setThreads(int i);

设置工作线程数。若不设置,则默认使用单线程。

注意:只在开启 OpenMP 的模式下生效,否则只使用单线程。

  • 参数

    • i: 工作线程数,默认为1。

getThreads

int getThreads();

获取设置的工作线程数。

  • 返回值

    工作线程数

PaddlePredictor

import com.baidu.paddle.lite.PaddlePredictor;

public class PaddlePredictor;

PaddlePredictor 是 Paddle Lite 的预测器。用户可以根据 PaddlePredictor 提供的接口使用 MobileConfig 创建新的预测器、设置输入数据、执行模型预测、获取输出以及获得当前使用 lib 的版本信息等。

示例:

// 设置MobileConfig
MobileConfig config = new MobileConfig();
config.setModelDir(modelPath);

// 创建PaddlePredictor
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);

// 设置输入数据
long[] dims = {100, 100};
float[] inputBuffer = new float[10000];
for (int i = 0; i < 10000; ++i) {
    inputBuffer[i] = i;
}
Tensor input = predictor.getInput(0);
input.resize(dims);
input.setData(inputBuffer);

// 执行预测
predictor.run();

// 获取输出数据
Tensor output = predictor.getOutput(0);
float[] output = result.getFloatData();
for (int i = 0; i < 1000; ++i) {
    System.out.println(output[i]);
}

CreatePaddlePredictor

public static PaddlePredictor createPaddlePredictor(ConfigBase config);

CreatePaddlePredictor 用来根据 MobileConfig 动态创建预测器。框架会根据您在 config 中指定的模型路径、能耗模型、工作线程数等自动创建一个预测器。

  • 参数

    • config(MobileConfig) : 用于构建 Predictor 的配置信息。

  • 返回值

    PaddlePredictor 指针

getInput

Tensor getInput(int i);

获取输入 Tensor,用来设置模型的输入数据。

  • 参数

    • i: 输入 Tensor 的索引

  • 返回值

    i 个输入 Tensor 的指针

getOutput

Tensor getOutput(int i);

获取输出 Tensor,用来获取模型的输出结果。

参数

  • 参数

    • i: 输出 Tensor 的索引

  • 返回值

    i 个输出 Tensor 的指针

run

boolean run();

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

getVersion

String getVersion();

用于获取当前 lib 使用的代码版本。若代码有相应 tag 则返回 tag 信息,如 v2.0-beta;否则返回代码的 branch(commitid),如 develop(7e44619)

  • 返回值:

    当前库使用的代码版本信息

PowerMode

import com.baidu.paddle.lite.PowerMode;

public enum PowerMode;

PowerMode 为 ARM CPU 能耗模式,用户可以根据应用场景设置能耗模式获得最优的能效比。

示例:

MobileConfig config = new MobileConfig();
// 设置NaiveBuffer格式模型目录
config.setModelDir(modelPath);
// 设置能耗模式
config.setPowerMode(PowerMode.LITE_POWER_HIGH);

// 根据MobileConfig创建PaddlePredictor
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);

PowerMode详细说明如下:

选项 说明
LITE_POWER_HIGH 绑定大核运行模式。如果 ARM CPU 支持 big.LITTLE,则优先使用并绑定 Big cluster,如果设置的线程数大于大核数量,则会将线程数自动缩放到大核数量。如果系统不存在大核或者在一些手机的低电量情况下会出现绑核失败,如果失败则进入不绑核模式。
LITE_POWER_LOW 绑定小核运行模式。如果 ARM CPU 支持 big.LITTLE,则优先使用并绑定 Little cluster,如果设置的线程数大于小核数量,则会将线程数自动缩放到小核数量。如果找不到小核,则自动进入不绑核模式。
LITE_POWER_FULL 大小核混用模式。线程数可以大于大核数量,当线程数大于核心数量时,则会自动将线程数缩放到核心数量。
LITE_POWER_NO_BIND 不绑核运行模式(推荐)。系统根据负载自动调度任务到空闲的 CPU 核心上。
LITE_POWER_RAND_HIGH 轮流绑定大核模式。如果 Big cluster 有多个核心,则每预测10次后切换绑定到下一个核心。
LITE_POWER_RAND_LOW 轮流绑定小核模式。如果 Little cluster 有多个核心,则每预测10次后切换绑定到下一个核心。

Tensor

import com.baidu.paddle.lite.Tensor;

public class Tensor;

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

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

示例:

// 导入Java API
import com.baidu.paddle.lite.MobileConfig;
import com.baidu.paddle.lite.Tensor;
import com.baidu.paddle.lite.Predictor;
import com.baidu.paddle.lite.PowerMode;

// 设置MobileConfig
MobileConfig config = new MobileConfig();
config.setModelDir(modelPath);

// 创建PaddlePredictor
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);

// 设置输入数据
long[] dims = {100, 100};
float[] inputBuffer = new float[10000];
for (int i = 0; i < 10000; ++i) {
    inputBuffer[i] = i;
}
// 获取输入Tensor
Tensor input = predictor.getInput(0);
// 设置输入维度
input.resize(dims);
// 设置输入数据
input.setData(inputBuffer);

// 执行预测
predictor.run();

// 获取输出Tensor
Tensor result = predictor.getOutput(0);
// 获取输出数据
float[] output = result.getFloatData();
for (int i = 0; i < 1000; ++i) {
    System.out.println(output[i]);
}

resize

boolean resize(long[] shape);

设置 Tensor 的维度信息。

  • 参数

    • shape: 维度信息

shape

long[] shape();

获取 Tensor 的维度信息。

  • 返回值

    Tensor 的维度信息

setData

boolean setData(float[] data);

设置 Tensor 数据。

  • 参数

    • data: 需要设置的数据

getFloatData

float[] getFloatData();

获取 Tensor 的底层 float 型数据。

  • 返回值:

    Tensor 底层 float 型数据