.. role:: raw-html(raw)
:format: html
nnictl
======
介绍
------------
**nnictl** 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。
命令
--------
nnictl 支持的命令:
* `nnictl create <#create>`__
* `nnictl resume <#resume>`__
* `nnictl view <#view>`__
* `nnictl stop <#stop>`__
* `nnictl update <#update>`__
* `nnictl trial <#trial>`__
* `nnictl top <#top>`__
* `nnictl experiment <#experiment>`__
* `nnictl platform <#platform>`__
* `nnictl config <#config>`__
* `nnictl log <#log>`__
* `nnictl webui <#webui>`__
* `nnictl tensorboard <#tensorboard>`__
* `nnictl package <#package>`__
* `nnictl ss_gen <#ss_gen>`__
* `nnictl --version <#version>`__
管理 Experiment
^^^^^^^^^^^^^^^^^^^^
:raw-html:``
nnictl create
^^^^^^^^^^^^^
*
说明
此命令使用参数中的配置文件,来创建新的实验。
此命令成功完成后,上下文会被设置为此 Experiment。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此 Experiment。
*
用法
.. code-block:: bash
nnictl create [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config, -c
- True
-
- Experiment 的 YAML 配置文件
* - --port, -p
- False
-
- RESTful 服务的端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在默认端口 8080 上创建一个新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml
..
在指定的端口 8088 上创建新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088
..
在指定的端口 8088 上创建新的 Experiment,并启用调试模式
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml --port 8088 --debug
注意:
.. code-block:: text
调试模式会禁用 Trialkeeper 中的版本校验功能。
:raw-html:``
nnictl resume
^^^^^^^^^^^^^
*
说明
使用此命令恢复已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl resume [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要恢复的 Experiment 标识
* - --port, -p
- False
-
- 要恢复的 Experiment 使用的 RESTful 服务端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在指定的端口 8088 上恢复 Experiment
.. code-block:: bash
nnictl resume [experiment_id] --port 8088
:raw-html:``
nnictl view
^^^^^^^^^^^
*
说明
使用此命令查看已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl view [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要查看的 Experiment 标识
* - --port, -p
- False
-
- 要查看的 Experiment 使用的 RESTful 服务端口
*
示例
..
在指定的端口 8088 上查看 Experiment
.. code-block:: bash
nnictl view [experiment_id] --port 8088
:raw-html:``
nnictl stop
^^^^^^^^^^^
*
说明
使用此命令来停止正在运行的单个或多个 Experiment。
*
用法
.. code-block:: bash
nnictl stop [Options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 要停止的 Experiment 标识
* - --port, -p
- False
-
- 要停止的 Experiment 使用的 RESTful 服务端口
* - --all, -a
- False
-
- 停止所有 Experiment
*
详细信息及样例
#.
如果没有指定 id,并且当前有运行的 Experiment,则会停止该 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop
#.
如果指定了 id,并且此 id 匹配正在运行的 Experiment,nnictl 会停止相应的 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop [experiment_id]
#.
如果指定了端口,并且此端口有正在运行的 Experiment,则会停止此 Experiment。
.. code-block:: bash
nnictl stop --port 8080
#.
可使用 'nnictl stop --all' 来停止所有的 Experiment。
.. code-block:: bash
nnictl stop --all
#.
如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的 Experiment。
#. 如果 id 不存在,但匹配了某个Experiment 的 id 前缀,nnictl 会停止匹配的Experiment 。
#. 如果 id 不存在,但匹配多个 Experiment id 的前缀,nnictl 会输出这些 id 的信息。
:raw-html:``
nnictl update
^^^^^^^^^^^^^
*
**nnictl update searchspace**
*
说明
可以用此命令来更新 Experiment 的搜索空间。
*
用法
.. code-block:: bash
nnictl update searchspace [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --filename, -f
- True
-
- 新的搜索空间文件名
*
示例
``使用 'examples/trials/mnist-tfv1/search_space.json' 来更新 Experiment 的搜索空间``
.. code-block:: bash
nnictl update searchspace [experiment_id] --filename examples/trials/mnist-tfv1/search_space.json
*
**nnictl update concurrency**
*
说明
可以用此命令来更新 Experiment 的并发设置。
*
用法
.. code-block:: bash
nnictl update concurrency [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 允许同时运行的 Trial 的数量
*
示例
..
更新 Experiment 的并发数量
.. code-block:: bash
nnictl update concurrency [experiment_id] --value [concurrency_number]
*
**nnictl update duration**
*
说明
可以用此命令来更新实验的运行时间。
*
用法
.. code-block:: bash
nnictl update duration [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 形如 '1m' (一分钟)或 '2h' (两小时)的字符串。 后缀可以为 's'(秒), 'm'(分钟), 'h'(小时)或 'd'(天)。
*
示例
..
修改 Experiment 的执行时间
.. code-block:: bash
nnictl update duration [experiment_id] --value [duration]
*
**nnictl update trialnum**
*
说明
可以用此命令来更新实验的最大尝试数量。
*
用法
.. code-block:: bash
nnictl update trialnum [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 需要设置的 maxtrialnum 的数量
*
示例
..
更新 Experiment 的 Trial 数量
.. code-block:: bash
nnictl update trialnum [experiment_id] --value [trial_num]
:raw-html:``
nnictl trial
^^^^^^^^^^^^
*
**nnictl trial ls**
*
说明
使用此命令来查看 Trial 的信息。 注意如果 ``head`` 或 ``tail`` 被设置, 则只有完成的 Trial 会被展示。
*
用法
.. code-block:: bash
nnictl trial ls
nnictl trial ls --head 10
nnictl trial ls --tail 10
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head
- False
-
- 依据最高默认指标列出的项数。
* - --tail
- False
-
- 依据最低默认指标列出的项数。
*
**nnictl trial kill**
*
说明
此命令用于终止 Trial。
*
用法
.. code-block:: bash
nnictl trial kill [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- True
-
- 需要终止的 Trial 的 ID。
*
示例
..
结束 Trial 任务
.. code-block:: bash
nnictl trial kill [experiment_id] --trial_id [trial_id]
:raw-html:``
nnictl top
^^^^^^^^^^
*
说明
查看正在运行的 Experiment。
*
用法
.. code-block:: bash
nnictl top
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --time, -t
- False
-
- 刷新 Experiment 状态的时间间隔,单位为秒,默认值为 3 秒。
:raw-html:``
管理 Experiment 信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl experiment show**
*
说明
显示 Experiment 的信息。
*
用法
.. code-block:: bash
nnictl experiment show
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment status**
*
说明
显示 Experiment 的状态。
*
用法
.. code-block:: bash
nnictl experiment status
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment list**
*
说明
显示正在运行的 Experiment 的信息
*
用法
.. code-block:: bash
nnictl experiment list [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --all
- False
-
- 列出所有 Experiment
*
**nnictl experiment delete**
*
说明
删除一个或所有 Experiment,包括日志、结果、环境信息和缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
*
用法
.. code-block:: bash
nnictl experiment delete [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --all
- False
-
- 删除所有 Experiment
*
**nnictl experiment export**
*
说明
使用此命令,可将 Trial 的 reward 和超参导出为 csv 文件。
*
用法
.. code-block:: bash
nnictl experiment export [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --filename, -f
- True
-
- 文件的输出路径
* - --type
- True
-
- 输出文件类型,仅支持 "csv" 和 "json"
* - --intermediate, -i
- False
-
- 是否保存中间结果
*
示例
..
将 Experiment 中所有 Trial 数据导出为 JSON 格式
.. code-block:: bash
nnictl experiment export [experiment_id] --filename [file_path] --type json --intermediate
*
**nnictl experiment import**
*
说明
可使用此命令将以前的 Trial 超参和结果导入到 Tuner 中。 数据会传入调参算法中(即 Tuner 或 Advisor)。
*
用法
.. code-block:: bash
nnictl experiment import [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要将数据导入的 Experiment 的 ID
* - --filename, -f
- True
-
- 需要导入的 JSON 格式的数据文件
*
详细说明
NNI 支持导入用户的数据,确保数据格式正确。 样例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9}, "value": 0.03},
{"parameter": {"x": 0.4, "y": 0.8}, "value": 0.05},
{"parameter": {"x": 0.3, "y": 0.7}, "value": 0.04}
]
最顶层列表的每个元素都是一个样例。 对于内置的 Tuner 和 Advisor,每个样本至少需要两个主键:``parameter`` 和 ``value``。 ``parameter`` 必须与 Experiment 的搜索空间相匹配,``parameter`` 中的所有的主键(或超参)都必须与搜索空间中的主键相匹配。 否则, Tuner 或 Advisor 可能会有无法预期的行为。 ``Value`` 应当遵循与 ``nni.report_final_result`` 的输入值一样的规则,即要么时一个数字,或者是包含 ``default`` 主键的 dict。 对于自定义的 Tuner 或 Advisor,根据实现的不同,此文件可以是任意的 JSON 内容(例如,``import_data``)。
也可以用 `nnictl experiment export <#export>`__ 命令导出 Experiment 已经运行过的 Trial 超参和结果。
当前,以下 Tuner 和 Advisor 支持导入数据:
.. code-block:: yaml
builtinTunerName: TPE, Anneal, GridSearch, MetisTuner
builtinAdvisorName: BOHB
*如果要将数据导入到 BOHB Advisor,建议像 NNI 一样,增加 "TRIAL_BUDGET" 参数,否则,BOHB 会使用 max_budget 作为 "TRIAL_BUDGET"。* 示例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9, "TRIAL_BUDGET": 27}, "value": 0.03}
]
*
示例
..
将数据导入运行中的 Experiment
.. code-block:: bash
nnictl experiment import [experiment_id] -f experiment_data.json
*
**nnictl experiment save**
*
说明
保存 NNI Experiment 的元数据及代码数据
*
用法
.. code-block:: bash
nnictl experiment save [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要保存的 Experiment 标识
* - --path, -p
- False
-
- 保存 NNI Experiment 数据的路径,默认为当前工作目录
* - --saveCodeDir, -s
- False
-
- 是否保存 Experiment 的代码目录的数据,默认为 False
*
示例
..
保存 Experiment
.. code-block:: bash
nnictl experiment save [experiment_id] --saveCodeDir
*
**nnictl experiment load**
*
说明
加载 NNI Experiment
*
用法
.. code-block:: bash
nnictl experiment load [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --path, -p
- True
-
- NNI 包的文件路径
* - --codeDir, -c
- True
-
- 要加载的实验的代码目录,加载的 NNI 包中的代码也会放到此目录下。
* - --logDir, -l
- False
-
- 存放加载的实验的日志的目录。
* - --searchSpacePath, -s
- True
-
- 存放加载的实验的搜索空间文件的路径(路径包含文件名)。 默认是 $codeDir/search_space.json。
*
示例
..
加载 Experiment
.. code-block:: bash
nnictl experiment load --path [path] --codeDir [codeDir]
:raw-html:``
管理平台信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl platform clean**
*
说明
用于清理目标平台上的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
*
注意
如果目标平台正在被别人使用,可能会造成他人的意外错误。
*
用法
.. code-block:: bash
nnictl platform clean [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config
- True
-
- 创建 Experiment 时的 YAML 配置文件路径。
:raw-html:``
nnictl config show
^^^^^^^^^^^^^^^^^^
*
说明
显示当前上下文信息。
*
用法
.. code-block:: bash
nnictl config show
:raw-html:``
管理日志
^^^^^^^^^^
*
**nnictl log stdout**
*
说明
显示 stdout 日志内容。
*
用法
.. code-block:: bash
nnictl log stdout [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stdout 开始的若干行
* - --tail, -t
- False
-
- 显示 stdout 结尾的若干行
* - --path, -p
- False
-
- 显示 stdout 文件的路径
*
示例
..
显示 stdout 结尾的若干行
.. code-block:: bash
nnictl log stdout [experiment_id] --tail [lines_number]
*
**nnictl log stderr**
*
说明
显示 stderr 日志内容。
*
用法
.. code-block:: bash
nnictl log stderr [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stderr 开始的若干行
* - --tail, -t
- False
-
- 显示 stderr 结尾的若干行
* - --path, -p
- False
-
- 显示 stderr 文件的路径
*
**nnictl log trial**
*
说明
显示 Trial 日志的路径。
*
用法
.. code-block:: bash
nnictl log trial [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- False
-
- 所需要找日志路径的 Trial 的 ID,当 id 不为空时,此值也为必需。
:raw-html:``
Manage webui
^^^^^^^^^^^^
*
**nnictl webui url**
*
说明
显示 Experiment 的 Web 界面链接
*
用法
.. code-block:: bash
nnictl webui url [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
:raw-html:``
管理 tensorboard
^^^^^^^^^^^^^^^^^^
*
**nnictl tensorboard start**
*
说明
启动 tensorboard 进程。
*
用法
.. code-block:: bash
nnictl tensorboard start
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --trial_id, -T
- False
-
- Trial 的 id
* - --port
- False
- 6006
- tensorboard 进程的端口
*
详细说明
#. NNICTL 当前仅支持本机和远程平台的 tensorboard,其它平台暂不支持。
#. 如果要使用 tensorboard,需要将 tensorboard 日志输出到环境变量 [NNI_OUTPUT_DIR] 路径下。
#. 在 local 模式中,nnictl 会直接设置 --logdir=[NNI_OUTPUT_DIR] 并启动 tensorboard 进程。
#. 在 remote 模式中,nnictl 会创建一个 ssh 客户端来将日志数据从远程计算机复制到本机临时目录中,然后在本机开始 tensorboard 进程。 需要注意的是,nnictl 只在使用此命令时复制日志数据,如果要查看最新的 tensorboard 结果,需要再次执行 nnictl tensorboard 命令。
#. 如果只有一个 Trial 任务,不需要设置 Trial ID。 如果有多个运行的 Trial 作业,需要设置 Trial ID,或使用 [nnictl tensorboard start --trial_id all] 来将 --logdir 映射到所有 Trial 的路径。
*
**nnictl tensorboard stop**
*
说明
停止所有 tensorboard 进程。
*
用法
.. code-block:: bash
nnictl tensorboard stop
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
:raw-html:``
管理安装包
^^^^^^^^^^^^^^
*
**nnictl package install**
*
说明
安装自定义的 Tuner,Assessor,Advisor(定制或 NNI 提供的算法)。
*
用法
.. code-block:: bash
nnictl package install --name
可通过 ``nnictl package list`` 命令查看可用的 ``<包名称>``。
或者
.. code-block:: bash
nnictl package install <安装源>
参考 `安装自定义算法 `__ 来准备安装源。
*
示例
..
安装 SMAC Tuner
.. code-block:: bash
nnictl package install --name SMAC
..
安装自定义 Tuner
.. code-block:: bash
nnictl package install nni/examples/tuners/customized_tuner/dist/demo_tuner-0.1-py3-none-any.whl
*
**nnictl package show**
*
说明
显示包的详情。
*
用法
.. code-block:: bash
nnictl package show <包名称>
*
示例
.. code-block:: bash
nnictl package show SMAC
*
**nnictl package list**
*
说明
列出已安装的包 / 所有包。
*
用法
.. code-block:: bash
nnictl package list [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --all
- False
-
- 列出所有包
*
示例
..
列出已安装的包
.. code-block:: bash
nnictl package list
..
列出所有包
.. code-block:: bash
nnictl package list --all
*
**nnictl package uninstall**
*
说明
卸载包。
*
用法
.. code-block:: bash
nnictl package uninstall <包名称>
*
示例
卸载 SMAC 包
.. code-block:: bash
nnictl package uninstall SMAC
:raw-html:``
生成搜索空间
^^^^^^^^^^^^^^^^^^^^^
*
**nnictl ss_gen**
*
说明
从使用 NNI NAS API 的用户代码生成搜索空间。
*
用法
.. code-block:: bash
nnictl ss_gen [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --trial_command
- True
-
- Trial 代码的命令
* - --trial_dir
- False
- ./
- Trial 代码目录
* - --file
- False
- nni_auto_gen_search_space.json
- 用来存储生成的搜索空间
*
示例
..
生成搜索空间
.. code-block:: bash
nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json
:raw-html:``
NNI 版本校验
^^^^^^^^^^^^^^^^^
*
**nnictl --version**
*
说明
显示当前安装的 NNI 的版本。
*
用法
.. code-block:: bash
nnictl --version