# PaddleHub命令行工具

PaddleHub为预训练模型的管理和使用提供了命令行工具。

PaddleHub支持修改预训练模型存放路径：
* 如已设置`${HUB_HOME}`环境变量，则预训练模型、配置等文件都存放在`${HUB_HOME}`指示的路径下
* 如未设置`${HUB_HOME}`环境变量，则存放在`$HOME`指示的路径下

目前命令行支持以下12个命令：

## `install`

用于将Module安装到本地，默认安装在`${HUB_HOME}/.paddlehub/modules`目录下，当一个Module安装到本地后，用户可以通过其他命令操作该Module（例如，使用该Module进行预测），也可以使用PaddleHub提供的python API，将Module应用到自己的任务中，实现迁移学习

## `uninstall`

用于卸载本地Module

## `show`

用于查看本地已安装Module的属性或者指定目录下确定的Module的属性，包括其名字、版本、描述、作者等信息

## `download`

用于下载百度提供的Module

`选项`
* `--output_path`：用于指定存放下载文件的目录，默认为当前目录

* `--uncompress`：是否对下载的压缩包进行解压，填写true或者false，默认false（不解压）

* `--type`：指定下载的资源类型，当指定Model时，download只会下载Model的资源。默认为All，此时会优先搜索Module资源，如果没有相关的Module资源，则搜索Model

## `search`

通过关键字在服务端检索匹配的Module，当想要查找某个特定模型的Module时，使用search命令可以快速得到结果，例如`hub search ssd`命令，会查找所有包含了ssd字样的Module，命令支持正则表达式，例如`hub search ^s.*`搜索所有以s开头的资源。

`注意`
如果想要搜索全部的Module，使用`hub search *`并不生效，这是因为shell会自行进行通配符展开，将*替换为当前目录下的文件名。为了进行全局搜索，用户可以直接键入`hub search`

## `list`

列出本地已经安装的Module

## `run`

用于执行Module的预测，需要注意的是，并不是所有的模型都支持预测（同样，也不是所有的模型都支持迁移学习），更多关于run命令的细节，请查看下方的`关于预测`

## `help`

显示帮助信息

## `version`

显示PaddleHub版本信息

## `clear`

PaddleHub在使用过程中会产生一些缓存数据，这部分数据默认存放在${HUB_HOME}/.paddlehub/cache目录下，用户可以通过clear命令来清空缓存

## `autofinetune`

用于自动调整Fine-tune任务的超参数，具体使用详情参考[PaddleHub AutoDL Finetuner使用教程](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.4/tutorial/autofinetune.md)

`选项`
* `--param_file`: 需要搜索的超参数信息yaml文件

* `--gpu`: 设置运行程序的可用GPU卡号，中间以逗号隔开，不能有空格

* `--popsize`: 设置程序运行每轮产生的超参组合数，默认为5

* `--round`: 设置程序运行的轮数，默认是10

* `--output_dir`: 设置程序运行输出结果存放目录，可选，不指定该选项参数时，在当前运行路径下生成存放程序运行输出信息的文件夹

* `--evaluator`: 设置自动搜索超参的评价效果方式，可选fulltrail和populationbased, 默认为populationbased

* `--strategy`: 设置自动搜索超参算法，可选hazero和pshe2，默认为hazero


## `config`
用于查看和设置paddlehub相关设置，包括对server地址、日志级别的设置：

`示例`
* `hub config`: 显示当前paddlehub的设置

* `hub config reset`: 恢复当前paddlehub的设置为默认设置

* `hub config server==[address]`: 设置当前paddlehub-server地址为[address]，paddlehub客户端从此地址获取模型信息

* `hub config log==[level]`: 设置当前日志级别为[level]， 可选值为critical, error, warning, info, debug, nolog, 从左到右优先级从高到低，nolog表示不显示日志信息

## `serving`

用于一键部署Module预测服务，详细用法见[PaddleHub Serving一键服务部署](serving.md)

**NOTE:**

1. 在PaddleHub中，Module表示一个`可执行的神经网络模型`，一个Module可以支持直接命令行预测，也可以配合PaddleHub Finetune API，通过少量代码实现迁移学习。不是所有的Module都支持命令行预测 (例如BERT/ERNIE Transformer类模型，一般需要搭配任务进行finetune)，也不是所有的Module都可用于finetune（例如LAC词法分析模型，我们不建议用户用于finetune）。

PaddleHub尽量简化了用户在使用命令行预测时的理解成本，一般来讲，我们将预测分为NLP和CV两大类

## NLP类的任务
输入数据通过--input_text或者--input_file指定。以百度LAC模型（中文词法分析）为例，可以通过以下两个命令实现单行文本和多行文本的分析。

```shell
# 单文本预测
$ hub run lac --input_text "今天是个好日子"
```
```shell
# 多文本分析
$ hub run lac --input_file test.txt
```

其中test.txt的样例格式如下，每行是一个需要词法分析句子

```
今天是个好日子
天气预报说今天要下雨
下一班地铁马上就要到了
……更多行……
```

## CV类的任务
输入数据通过`--input_path`或者`--input_file`指定。以SSD模型（单阶段目标检测）为例子，可以通过以下两个命令实现单张图片和多张图片的预测

```shell
# 单张照片预测
$ hub run ssd_mobilenet_v1_pascal --input_path test.jpg
```
```shell
# 多张照片预测
$ hub run ssd_mobilenet_v1_pascal --input_file test.txt
```
其中test.txt的格式为
```
cat.jpg
dog.jpg
person.jpg
……更多行……
```
