model_optimize_tool.md 3.3 KB
Newer Older
J
up  
juncaipeng 已提交
1 2 3 4 5 6 7 8 9
---
layout: post
title: 模型转化方法
---

Lite架构在预测过程中表现出来的高性能得益于其丰富的优化组件,其中包括量化、子图融合、混合调度、Kernel优选等等策略。为了使优化过程更加方便易用,我们提供了**Model Optimize Tool**来自动完成优化步骤,输出一个轻量的、最优的可执行模型。具体使用方法介绍如下:

## 准备model_optimize_tool

H
huzhiqiang 已提交
10
可以选择下载或者手动编译model_optimize_tool模型优化工具。
J
up  
juncaipeng 已提交
11 12 13 14 15 16 17 18 19 20

### 下载model_optimize_tool

```sh
wget https://paddle-inference-dist.bj.bcebos.com/PaddleLite/model_optimize_tool
chmod 777 model_optimize_tool
```

### 编译model_optimize_tool

H
huzhiqiang 已提交
21
1、参照 [编译安装](./source_compile) 进行环境配置和编译
J
up  
juncaipeng 已提交
22

H
huzhiqiang 已提交
23
2、进入docker中PaddleLite根目录,```git checkout [release-version-tag]```切换到release分支
J
up  
juncaipeng 已提交
24

H
huzhiqiang 已提交
25
3、执行如下命令编译model_optimize_tool
J
up  
juncaipeng 已提交
26
```bash
H
huzhiqiang 已提交
27
./lite/tools/build.sh build_optimize_tool 
J
up  
juncaipeng 已提交
28
```
H
huzhiqiang 已提交
29
4、编译完成,优化工具在```Paddle-Lite/build.model_optimize_tool/lite/api/model_optimize_tool```
J
up  
juncaipeng 已提交
30 31 32 33 34 35 36

## 使用方法

1、准备需要优化的fluid模型

fluid模型有两种形式,combined形式(权重保存为一个param文件)和非combined形式(权重保存为一个一个单独的文件),model_optimize_tool支持对这两种形式的fluid模型进行直接优化。

H
huzhiqiang 已提交
37
2、使用model_optimize_tool对模型进行优化(在电脑端执行)
J
up  
juncaipeng 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

```shell
./model_optimize_tool \
    --model_dir=<model_param_dir> \
    --model_file=<model_path> \
    --param_file=<param_path> \
    --optimize_out_type=(protobuf|naive_buffer) \
    --optimize_out=<output_optimize_model_dir> \
    --valid_targets=(arm|opencl|x86) \
    --prefer_int8_kernel=(true|false)
```

| 选项         | 说明 |
| ------------------- | ------------------------------------------------------------ |
| --model_dir         | 待优化的fluid模型(非combined形式)的路径,其中包括网络结构文件和一个一个单独保存的权重文件。|
| --model_file        | 待优化的fluid模型(combined形式)的网络结构路径。 |
| --param_file        | 待优化的fluid模型(combined形式)的权重文件路径。 |
| --optimize_out_type | 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化实现。若您需要在mobile端执行模型预测,请将此选项设置为naive_buffer。默认为protobuf。 |
| --optimize_out      | 优化模型的输出路径。                                         |
| --valid_targets     | 指定模型可执行的backend,目前可支持x86、arm、opencl,您可以同时指定多个backend(以空格分隔),Model Optimize Tool将会自动选择最佳方式。默认为arm。 |
58
| --prefer_int8_kernel | 若待优化模型为int8量化模型(如量化训练得到的量化模型),则设置该选项为true以使用int8内核函数进行推理加速,默认为false。                          |
J
up  
juncaipeng 已提交
59 60 61

* 如果待优化的fluid模型是非combined形式,请设置`--model_dir`,忽略`--model_file``--param_file`
* 如果待优化的fluid模型是combined形式,请设置`--model_file``--param_file`,忽略`--model_dir`
J
up  
juncaipeng 已提交
62
* 优化后的模型包括__model__.nb和param.nb文件。