Unverified Commit 403195f0 authored by Yuge Zhang's avatar Yuge Zhang Committed by GitHub
Browse files

Merge branch 'master' into nn-meter

parents 99aa8226 a7278d2d
...@@ -15,8 +15,7 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ ...@@ -15,8 +15,7 @@ TrainingService 是与平台管理、任务调度相关的模块。 TrainingServ
:alt: :alt:
NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 NNI 目前支持的平台有 `本地平台 <LocalMode.rst>`__\ NNI 的架构如图所示。 NNIManager 是系统的核心管理模块,负责调用 TrainingService 来管理 Trial,并负责不同模块之间的通信。 Dispatcher 是消息处理中心。 TrainingService 是管理任务的模块,它和 NNIManager 通信,并且根据平台的特点有不同的实现。 ,`远程平台 <RemoteMachineMode.rst>`__\ , `PAI <PaiMode.rst>`__\ , `kubeflow <KubeflowMode.rst>`__ 和 `FrameworkController <FrameworkControllerMode.rst>`__。
,`远程平台 <RemoteMachineMode.rst>`__\ , `PAI <PaiMode.rst>`__\ , `kubeflow <KubeflowMode.rst>`__ 和 `FrameworkController <FrameworkControllerMode.rst>`__。
本文中,会介绍 TrainingService 的简要设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。 本文中,会介绍 TrainingService 的简要设计。 如果要添加新的 TrainingService,只需要继承 TrainingServcie 类并实现相应的方法,不需要理解NNIManager、Dispatcher 等其它模块的细节。
......
...@@ -15,40 +15,25 @@ ...@@ -15,40 +15,25 @@
.. code-block:: yaml .. code-block:: yaml
authorName: default
experimentName: example_mnist experimentName: example_mnist
searchSpacePath: search_space.json
command: python3 mnist.py
codeDir: .
trialConcurrency: 2 trialConcurrency: 2
gpuNum: 1
maxExecDuration: 1h maxExecDuration: 1h
maxTrialNum: 10 maxTrialNum: 10
trainingServicePlatform: hybrid
searchSpacePath: search_space.json
# 可选项:true, false
useAnnotation: false
tuner: tuner:
builtinTunerName: TPE builtinTunerName: TPE
classArgs: classArgs:
# 可选项: maximize, minimize
optimize_mode: maximize optimize_mode: maximize
trial: trainingServicePlatforms:
command: python3 mnist.py - remote
codeDir: . machineList:
gpuNum: 1 - ip: 10.1.1.1
hybridConfig: username: bob
trainingServicePlatforms: passwd: bob123
- local - local
- remote
remoteConfig: 要使用混合训练平台,用户应在 `trainingService` 字段中将训练平台设置为列表。
reuse: true 目前,混合训练平台只支持 `local`, `remote`, `pai` 和 `aml` 训练平台。
machineList:
- ip: 10.1.1.1
username: bob
passwd: bob123
混合模式的配置:
hybridConfig:
* trainingServicePlatforms. 必填。 该字段指定用于混合模式的平台,值使用 yaml 列表格式。 NNI 支持在此字段中设置 ``local``, ``remote``, ``aml``, ``pai`` 。
.. Note:: 如果将平台设置为 trainingServicePlatforms 模式,则用户还应该为平台设置相应的配置。 例如,如果使用 ``remote`` 作为平台,还应设置 ``machineList`` 和 ``remoteConfig`` 配置。 混合模式下的本地平台暂时不支持Windows。
在 Kubeflow 上运行 Experiment 在 Kubeflow 上运行 Experiment
============================= =============================
NNI 支持在 `Kubeflow <https://github.com/kubeflow/kubeflow>`__ 上运行,称为 kubeflow 模式。 在开始使用 NNI 的 Kubeflow 模式前,需要有一个 Kubernetes 集群,可以是私有部署的,或者是 `Azure Kubernetes Service(AKS) <https://azure.microsoft.com/zh-cn/services/kubernetes-service/>`__,并需要一台配置好 `kubeconfig <https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/>`__ 的 Ubuntu 计算机连接到此 Kubernetes 集群。 如果不熟悉 Kubernetes,可先浏览 `这里 <https://kubernetes.io/docs/tutorials/kubernetes-basics/>`__ 。 在 kubeflow 模式下,每个 Trial 程序会在 Kubernetes 集群中作为一个 Kubeflow 作业来运行。 NNI 支持在 `Kubeflow <https://github.com/kubeflow/kubeflow>`__ 上运行,称为 kubeflow 模式。 NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考 `指南 <https://azure.microsoft.com/zh-cn/services/kubernetes-service/>`__ 来设置 Azure Kubernetes Service。 如果不熟悉 Kubernetes,可先浏览 `这里 <https://kubernetes.io/docs/tutorials/kubernetes-basics/>`__ 。 在 kubeflow 模式下,每个 Trial 程序会在 Kubernetes 集群中作为一个 Kubeflow 作业来运行。
私有部署的 Kubernetes 的准备工作 私有部署的 Kubernetes 的准备工作
----------------------------------------------- -----------------------------------------------
...@@ -24,8 +24,8 @@ Azure 部署的 Kubernetes 的准备工作 ...@@ -24,8 +24,8 @@ Azure 部署的 Kubernetes 的准备工作
----------------------------------------- -----------------------------------------
#. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考 `指南 <https://azure.microsoft.com/zh-cn/services/kubernetes-service/>`__ 来设置 Azure Kubernetes Service。
#. 安装 `Azure CLI <https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest>`__ 和 ``kubectl``。 使用 ``az login`` 命令来设置 Azure 账户,并将 kubectl 客户端连接到 AKS,参考此 `指南 <https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough#connect-to-the-cluster>`__。 #. 安装 `Azure CLI <https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest>`__ 和 ``kubectl``。 使用 ``az login`` 命令来设置 Azure 账户,并将 kubectl 客户端连接到 AKS,参考此 `指南 <https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough#connect-to-the-cluster>`__。
#. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 `Azure Key Vault <https://azure.microsoft.com/zh-cn/services/key-vault/>`__ 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考 `指南 <https://docs.microsoft.com/zh-cn/azure/key-vault/quick-create-cli>`__ 来存储访问密钥。 使用 ``az login`` 命令来设置 Azure 账户,并将 kubectl 客户端连接到 AKS,参考此 `指南 <https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough#connect-to-the-cluster>`__。
#. 在 Azure Kubernetes Service 上部署 Kubeflow,参考此 `指南 <https://www.kubeflow.org/docs/started/getting-started/>`__。 #. 在 Azure Kubernetes Service 上部署 Kubeflow,参考此 `指南 <https://www.kubeflow.org/docs/started/getting-started/>`__。
#. 参考此 `指南 <https://docs.microsoft.com/zh-cn/azure/storage/common/storage-quickstart-create-account?tabs=portal>`__ 来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。 #. 参考此 `指南 <https://docs.microsoft.com/zh-cn/azure/storage/common/storage-quickstart-create-account?tabs=portal>`__ 来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。
#. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 `Azure Key Vault <https://azure.microsoft.com/zh-cn/services/key-vault/>`__ 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考 `指南 <https://docs.microsoft.com/zh-cn/azure/key-vault/quick-create-cli>`__ 来存储访问密钥。 #. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 `Azure Key Vault <https://azure.microsoft.com/zh-cn/services/key-vault/>`__ 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考 `指南 <https://docs.microsoft.com/zh-cn/azure/key-vault/quick-create-cli>`__ 来存储访问密钥。
...@@ -40,7 +40,7 @@ Azure 部署的 Kubernetes 的准备工作 ...@@ -40,7 +40,7 @@ Azure 部署的 Kubernetes 的准备工作
Kubeflow 训练平台会实例化一个 Kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。 Kubeflow 训练平台会实例化一个 Kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。
对于每个 Trial,会上传本机 codeDir 路径(在 nni_config.yml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:`nfs <https://en.wikipedia.org/wiki/Network_File_System>`__ 和 `azure file storage <https://azure.microsoft.com/zh-cn/services/storage/files/>`__,需要在 NNI 的 YAML 文件中进行配置。 当文件准备好后,Kubeflow 训练平台会调用 Kubernetes 的 API 来创建 Kubeflow 作业 (\ `tf-operator <https://github.com/kubeflow/tf-operator>`__ 作业或 `pytorch-operator <https://github.com/kubeflow/pytorch-operator>`__ 作业) ,并将存储卷挂载到作业的 pod 中。 Kubeflow 作业的输出文件,例如 stdout, stderr, trial.log 以及模型文件,也会被复制回存储卷。 NNI 会在网页中显示每个 Trial 的存储卷的 URL,以便浏览日志和输出文件。 对于每个 Trial,会上传本机 codeDir 路径(在 nni_config.yml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 如果使用了 Azure 存储,需要在 YAML 文件中如下设置 ``kubeflowConfig``: 当文件准备好后,Kubeflow 训练平台会调用 Kubernetes 的 API 来创建 Kubeflow 作业 (\ `tf-operator <https://github.com/kubeflow/tf-operator>`__ 作业或 `pytorch-operator <https://github.com/kubeflow/pytorch-operator>`__ 作业) ,并将存储卷挂载到作业的 pod 中。 Kubeflow 作业的输出文件,例如 stdout, stderr, trial.log 以及模型文件,也会被复制回存储卷。 NNI 会在网页中显示每个 Trial 的存储卷的 URL,以便浏览日志和输出文件。
支持的操作符(operator) 支持的操作符(operator)
------------------------------------ ------------------------------------
......
...@@ -68,3 +68,13 @@ NNI 训练平台让用户专注于 AutoML 任务,不需要关心 Trial 实际 ...@@ -68,3 +68,13 @@ NNI 训练平台让用户专注于 AutoML 任务,不需要关心 Trial 实际
.. Warning:: Trial 当前目录的内容与 ``codeDir`` 会完全一样,但可能是完全不同的路径(甚至不同的计算机)。本机模式是唯一一个所有 Trial 都使用同一个 ``codeDir`` 的训练平台。 其它训练平台,会将步骤 1 中准备好的 ``codeDir``,从共享目录复制到每个 Trial 自己独立的工作目录下。 强烈建议不要依赖于本机模式下的共享行为,这会让 Experiment 很难扩展到其它训练平台上。 .. Warning:: Trial 当前目录的内容与 ``codeDir`` 会完全一样,但可能是完全不同的路径(甚至不同的计算机)。本机模式是唯一一个所有 Trial 都使用同一个 ``codeDir`` 的训练平台。 其它训练平台,会将步骤 1 中准备好的 ``codeDir``,从共享目录复制到每个 Trial 自己独立的工作目录下。 强烈建议不要依赖于本机模式下的共享行为,这会让 Experiment 很难扩展到其它训练平台上。
步骤 3. **收集 metrics。** NNI 监视记录 trial 状态,更新 trial 的状态(例如,从 ``WAITING`` to ``RUNNING``,从 ``RUNNING`` 到 ``SUCCEEDED``),并收集 metrics 。 当前,大部分训练平台都实现为 "主动" 模式,即,训练平台会调用 NNI 管理器上的 RESTful API 来更新指标。 注意,这也需要运行 NNI 管理器的计算机能被工作节点访问到。 步骤 3. **收集 metrics。** NNI 监视记录 trial 状态,更新 trial 的状态(例如,从 ``WAITING`` to ``RUNNING``,从 ``RUNNING`` 到 ``SUCCEEDED``),并收集 metrics 。 当前,大部分训练平台都实现为 "主动" 模式,即,训练平台会调用 NNI 管理器上的 RESTful API 来更新指标。 注意,这也需要运行 NNI 管理器的计算机能被工作节点访问到。
重用模式下的训练平台
---------------------------------
启用重用模式后,一个集群,例如远程机器或 AML 上的计算实例,将启动一个长期运行的环境,以便 NNI 将 Trial 迭代地提交到这些环境,从而节省创建新任务的时间。 例如,在重用模式下使用 OpenPAI 训练平台可以避免重复拉取 docker 镜像、创建容器和下载数据的开销。
在重用模式下,用户需要确保每个 Trial 可以在同一任务中独立运行(例如,避免加载先前 Trial 的检查点)。
.. note:: 目前,只有 `Local <./LocalMode.rst>`__, `Remote <./RemoteMachineMode.rst>`__, `OpenPAI <./PaiMode.rst>`__ 和 `AML <./AMLMode.rst>`__ 训练平台支持重用模式。 对于 Remote 和 OpenPAI 训练平台,您可以根据 `这里 <../reference/experiment_config.rst>`__ 手动启用重用模式。 AML是在重用模式下实现的,所以默认模式是重用模式,不需要手动启用。
...@@ -141,10 +141,10 @@ Windows ...@@ -141,10 +141,10 @@ Windows
nnictl create --config examples/trials/mnist-annotation/config_remote.yml nnictl create --config examples/trials/mnist-annotation/config_remote.yml
配置 python 环境 配置 Python 环境
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
默认情况下,命令和脚本将在远程计算机的默认环境中执行。 如果远程机器上有多个 python 虚拟环境,并且想在特定环境中运行实验,请使用 **preCommand** 来指定远程计算机上的 python 环境。 默认情况下,命令和脚本将在远程计算机的默认环境中执行。 如果远程机器上有多个 python 虚拟环境,并且想在特定环境中运行实验,请使用 **pythonPath** 来指定远程计算机上的 Python 环境。
以 ``examples/trials/mnist-tfv2`` 为例。 示例文件 ``examples/trials/mnist-tfv2/config_remote.yml`` 的内容如下: 以 ``examples/trials/mnist-tfv2`` 为例。 示例文件 ``examples/trials/mnist-tfv2/config_remote.yml`` 的内容如下:
...@@ -179,7 +179,7 @@ Windows ...@@ -179,7 +179,7 @@ Windows
# Below is an example of specifying python environment. # Below is an example of specifying python environment.
pythonPath: ${replace_to_python_environment_path_in_your_remote_machine} pythonPath: ${replace_to_python_environment_path_in_your_remote_machine}
远程计算机支持以重用模式运行实验。 在这种模式下,NNI 将重用远程机器任务来运行尽可能多的 Trial. 这样可以节省创建新作业的时间。 用户需要确保同一作业中的每个 Trial 相互独立,例如,要避免从之前的 Trial 中读取检查点。 远程计算机支持以重用模式运行实验。 在这种模式下,NNI 将重用远程机器任务来运行尽可能多的 Trial这样可以节省创建新作业的时间。用户需要确保同一作业中的每个 Trial 相互独立,例如,要避免从之前的 Trial 中读取检查点。
按照以下设置启用重用模式: 按照以下设置启用重用模式:
.. code-block:: yaml .. code-block:: yaml
......
...@@ -4,7 +4,7 @@ NNI 上的知识蒸馏 ...@@ -4,7 +4,7 @@ NNI 上的知识蒸馏
知识蒸馏 (Knowledge Distillation) 知识蒸馏 (Knowledge Distillation)
--------------------------------------- ---------------------------------------
在 `Distilling the Knowledge in a Neural Network <https://arxiv.org/abs/1503.02531>`__\ 中提出了知识蒸馏(KD)的概念, 压缩后的模型被训练去模仿预训练的、较大的模型。 这种训练设置也称为"师生(teacher-student)"方式,其中大模型是教师,小模型是学生。 KD 通常用于微调剪枝后的模型。 在 `Distilling the Knowledge in a Neural Network <https://arxiv.org/abs/1503.02531>`__\ 中提出了知识蒸馏(KD)的概念, 压缩后的模型被训练去模仿预训练的、较大的模型。这种训练设置也称为"师生(teacher-student)"方式,其中大模型是教师,小模型是学生。KD 通常用于微调剪枝后的模型。
.. image:: ../../img/distill.png .. image:: ../../img/distill.png
......
...@@ -71,14 +71,14 @@ MNIST 示例 ...@@ -71,14 +71,14 @@ MNIST 示例
此样例演示了 NNI 如何支持嵌套的搜索空间。 搜索空间文件示了如何定义嵌套的搜索空间。 此样例演示了 NNI 如何支持嵌套的搜索空间。 搜索空间文件示了如何定义嵌套的搜索空间。
代码示例: :githublink:`mnist-nested-search-space/ <examples/trials/mnist-nested-search-space/>` 代码示例: :githublink:`mnist-distributed/ <examples/trials/mnist-distributed/>`
:raw-html:`<a name="mnist-kubeflow-tf"></a>` :raw-html:`<a name="mnist-kubeflow-tf"></a>`
**用 Kubeflow 运行分布式的 MNIST (tensorflow)** **用 Kubeflow 运行分布式的 MNIST (tensorflow)**
此样例展示了如何通过 NNI 来在 Kubeflow 上运行分布式训练。 只需要简单的提供分布式训练代码,并在配置文件中指定 kubeflow 模式。 例如,运行 ps 和 worker 的命令行,以及各自需要的资源。 此样例使用了 Tensorflow 来实现,因而,需要使用 Kubeflow 的 tf-operator。 此样例展示了如何通过 NNI 来在 Kubeflow 上运行分布式训练。 只需要简单的提供分布式训练代码,并在配置文件中指定 kubeflow 模式。 例如,运行 ps 和 worker 的命令行,以及各自需要的资源。 此样例使用了 Tensorflow 来实现,因而,需要使用 Kubeflow 的 tf-operator。
代码示例: :githublink:`mnist-distributed/ <examples/trials/mnist-distributed/>` 代码示例: :githublink:`mnist-distributed-pytorch/ <examples/trials/mnist-distributed-pytorch/>`
:raw-html:`<a name="mnist-kubeflow-pytorch"></a>` :raw-html:`<a name="mnist-kubeflow-pytorch"></a>`
**用 Kubeflow 运行分布式的 MNIST (PyTorch)** **用 Kubeflow 运行分布式的 MNIST (PyTorch)**
......
...@@ -8,11 +8,11 @@ ...@@ -8,11 +8,11 @@
RocksDB 的性能表现非常依赖于调优操作。 但由于其底层技术较复杂,可配置参数非常多,很难获得较好的配置。 NNI 可帮助解决此问题。 NNI 支持多种调优算法来为 RocksDB 搜索最好的配置,并支持本机、远程服务器和云服务等多种环境。 RocksDB 的性能表现非常依赖于调优操作。 但由于其底层技术较复杂,可配置参数非常多,很难获得较好的配置。 NNI 可帮助解决此问题。 NNI 支持多种调优算法来为 RocksDB 搜索最好的配置,并支持本机、远程服务器和云服务等多种环境。
本示例展示了如何使用 NNI,通过评测工具 ``db_bench`` 来找到 ``fillrandom`` 基准的最佳配置,此工具是 RocksDB 官方提供的评测工具。 在运行示例前,需要检查 NNI 已安装, `db_bench <https://github.com/facebook/rocksdb/wiki/Benchmarking-tools>`__ 已经加入到了 ``PATH`` 中。 参考 `这里 <../Tutorial/QuickStart.rst>`__ ,了解如何安装并准备 NNI 环境,参考 `这里 <https://github.com/facebook/rocksdb/blob/master/INSTALL.md>`__ 来编译 RocksDB 以及 ``db_bench`` 本示例展示了如何使用 NNI,通过评测工具 ``db_bench`` 来找到 ``fillrandom`` 基准的最佳配置,此工具是 RocksDB 官方提供的评测工具。 在运行示例前,需要检查 NNI 已安装, `db_bench <https://github.com/facebook/rocksdb/wiki/Benchmarking-tools>`__ 已经加入到了 ``PATH`` 中。 此简单脚本 :githublink:`db_bench_installation.sh <examples/trials/systems_auto_tuning/rocksdb-fillrandom/db_bench_installation.sh>` 可帮助编译并在 Ubuntu 上安装 ``db_bench`` 及其依赖包。 可遵循相同的过程在其它系统中安装 RocksDB
此简单脚本 :githublink:`db_bench_installation.sh <examples/trials/systems_auto_tuning/rocksdb-fillrandom/db_bench_installation.sh>` 可帮助编译并在 Ubuntu 上安装 ``db_bench`` 及其依赖包。 可遵循相同的过程在其它系统中安装 RocksDB。 :githublink:`代码文件 <examples/trials/systems_auto_tuning/rocksdb-fillrandom>` 可遵循相同的过程在其它系统中安装 RocksDB。
:githublink:`代码文件 <examples/trials/systems_auto_tuning/rocksdb-fillrandom>` :githublink:`代码文件 <examples/trials/systems_auto_tuning/rocksdb-fillrandom/main.py>`
Experiment 设置 Experiment 设置
---------------- ----------------
...@@ -54,7 +54,7 @@ Experiment 设置 ...@@ -54,7 +54,7 @@ Experiment 设置
* 使用 ``nni.get_next_parameter()`` 来获取下一个系统配置。 * 使用 ``nni.get_next_parameter()`` 来获取下一个系统配置。
* 使用 ``nni.report_final_result(metric)`` 来返回测试结果。 * 使用 ``nni.report_final_result(metric)`` 来返回测试结果。
:githublink:`代码文件 <examples/trials/systems_auto_tuning/rocksdb-fillrandom/main.py>` :githublink:`代码文件 <examples/trials/systems_auto_tuning/rocksdb-fillrandom/config_tpe.yml>`
配置文件 配置文件
^^^^^^^^^^^ ^^^^^^^^^^^
......
...@@ -159,10 +159,10 @@ NNI 支持独立模式,使 Trial 代码无需启动 NNI 实验即可运行。 ...@@ -159,10 +159,10 @@ NNI 支持独立模式,使 Trial 代码无需启动 NNI 实验即可运行。
.. code-block:: python .. code-block:: python
注意:请为 Trial 代码中的超参分配默认值 # 注意:请为 Trial 代码中的超参分配默认值
nni.get_next_parameter # 返回 {} nni.get_next_parameter # 返回 {}
nni.report_final_result 已在 stdout 上打印日志,但不报告 nni.report_final_result # 已在 stdout 上打印日志,但不报告
nni.report_intermediate_result # 已在 stdout 上打印日志,但不报告 nni.report_intermediate_result # 已在 stdout 上打印日志,但不报告
nni.get_experiment_id # 返回 "STANDALONE" nni.get_experiment_id # 返回 "STANDALONE"
nni.get_trial_id # 返回 "STANDALONE" nni.get_trial_id # 返回 "STANDALONE"
nni.get_sequence_id # 返回 0 nni.get_sequence_id # 返回 0
...@@ -208,6 +208,7 @@ Trial 存放在什么地方? ...@@ -208,6 +208,7 @@ Trial 存放在什么地方?
------------------- -------------------
* `将日志写入 TensorBoard 的 Trial 输出目录 <../Tutorial/Tensorboard.rst>`__
* `MNIST 示例 <MnistExamples.rst>`__ * `MNIST 示例 <MnistExamples.rst>`__
* `为 CIFAR 10 分类找到最佳的 optimizer <Cifar10Examples.rst>`__ * `为 CIFAR 10 分类找到最佳的 optimizer <Cifar10Examples.rst>`__
* `如何在 NNI 调优 SciKit-learn 的参数 <SklearnExamples.rst>`__ * `如何在 NNI 调优 SciKit-learn 的参数 <SklearnExamples.rst>`__
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* - `Naïve Evolution(朴素进化) <#Evolution>`__ * - `Naïve Evolution(朴素进化) <#Evolution>`__
- Naïve Evolution(朴素进化算法)来自于 Large-Scale Evolution of Image Classifiers。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 朴素进化算法需要很多次的 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 `参考论文 <https://arxiv.org/pdf/1703.01041.pdf>`__ - Naïve Evolution(朴素进化算法)来自于 Large-Scale Evolution of Image Classifiers。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 朴素进化算法需要很多次的 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 `参考论文 <https://arxiv.org/pdf/1703.01041.pdf>`__
* - `SMAC <#SMAC>`__ * - `SMAC <#SMAC>`__
- SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它会利用使用过的突出的模型(高斯随机过程模型),并将随机森林引入到SMBO中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 ``pip install nni[SMAC]`` 命令来安装。 `参考论文 <https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf>`__ `代码仓库 <https://github.com/automl/SMAC3>`__ - SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它会利用使用过的突出的模型(高斯随机过程模型),并将随机森林引入到SMBO中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:参考样例中的格式来创建新的 ``config.yml`` 文件。 一些内置 Tuner 因为依赖问题需要使用 ``pip install nni[<tuner>]`` 来安装,比如使用 ``pip install nni[SMAC]`` 来安装 SMAC。 `参考论文 <https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf>`__ `代码仓库 <https://github.com/automl/SMAC3>`__
* - `Batch tuner(批处理) <#Batch>`__ * - `Batch tuner(批处理) <#Batch>`__
- Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都完成后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 - Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都完成后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。
* - `Grid Search(遍历) <#GridSearch>`__ * - `Grid Search(遍历) <#GridSearch>`__
...@@ -41,11 +41,10 @@ ...@@ -41,11 +41,10 @@
- BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 `参考论文 <https://arxiv.org/abs/1807.01774>`__ - BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 `参考论文 <https://arxiv.org/abs/1807.01774>`__
* - `GP Tuner <#GPTuner>`__ * - `GP Tuner <#GPTuner>`__
- Gaussian Process(高斯过程) Tuner 是序列化的基于模型优化(SMBO)的方法,并使用了高斯过程来替代。 `参考论文 <https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf>`__\ , `Github 仓库 <https://github.com/fmfn/BayesianOptimization>`__ - Gaussian Process(高斯过程) Tuner 是序列化的基于模型优化(SMBO)的方法,并使用了高斯过程来替代。 `参考论文 <https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf>`__\ , `Github 仓库 <https://github.com/fmfn/BayesianOptimization>`__
* - `PPO Tuner <#PPOTuner>`__
- PPO Tuner 是基于 PPO 算法的强化学习 Tuner。 `参考论文 <https://arxiv.org/abs/1707.06347>`__
* - `PBT Tuner <#PBTTuner>`__ * - `PBT Tuner <#PBTTuner>`__
- PBT Tuner 是一种简单的异步优化算法,在固定的计算资源下,它能有效的联合优化一组模型及其超参来最大化性能。 `参考论文 <https://arxiv.org/abs/1711.09846v1>`__ - PBT Tuner 是一种简单的异步优化算法,在固定的计算资源下,它能有效的联合优化一组模型及其超参来最大化性能。 `参考论文 <https://arxiv.org/abs/1711.09846v1>`__
* - `DNGO Tuner <#DNGOTuner>`__
- 使用神经网络作为 GP 的替代方法,对贝叶斯优化中的函数分布进行建模。
用法 用法
------------------------ ------------------------
...@@ -71,7 +70,7 @@ TPE 是一种黑盒优化方法,可以使用在各种场景中,通常情况 ...@@ -71,7 +70,7 @@ TPE 是一种黑盒优化方法,可以使用在各种场景中,通常情况
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*\ ) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
注意:为实现大规模并发 Trial,TPE 的并行性得到了优化。 有关优化原理或开启优化,参考 `TPE 文档 <./HyperoptTuner.rst>`__。 注意:为实现大规模并发 Trial,TPE 的并行性得到了优化。 有关优化原理或开启优化,参考 `TPE 文档 <./HyperoptTuner.rst>`__。
...@@ -114,7 +113,7 @@ Random Search(随机搜索) ...@@ -114,7 +113,7 @@ Random Search(随机搜索)
:raw-html:`<a name="Anneal"></a>` :raw-html:`<a name="Anneal"></a>`
Anneal(退火算法) Anneal(退火算法)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. ..
...@@ -128,7 +127,7 @@ Anneal(退火算法) ...@@ -128,7 +127,7 @@ Anneal(退火算法)
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*\ ) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
**配置示例:** **配置示例:**
...@@ -145,7 +144,7 @@ Anneal(退火算法) ...@@ -145,7 +144,7 @@ Anneal(退火算法)
:raw-html:`<a name="Evolution"></a>` :raw-html:`<a name="Evolution"></a>`
Naïve Evolution(进化算法) Naïve Evolution(进化算法)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. ..
...@@ -188,7 +187,7 @@ SMAC ...@@ -188,7 +187,7 @@ SMAC
名称:**SMAC** 名称:**SMAC**
当前 SMAC 不支持在 WIndows 下运行。 原因参考:`GitHub issue <https://github.com/automl/SMAC3/issues/483>`__ **当前 SMAC 不支持在 WIndows 下运行。** 原因参考:`GitHub issue <https://github.com/automl/SMAC3/issues/483>`__
**安装** **安装**
...@@ -306,7 +305,7 @@ Hyperband ...@@ -306,7 +305,7 @@ Hyperband
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*\ ) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
* **R** (*int, 可选, 默认为 60*),分配给 Trial 的最大资源(可以是 mini-batches 或 epochs 的数值)。 每个 Trial 都需要用 TRIAL_BUDGET 来控制运行的步数。 * **R** (*int, 可选, 默认为 60*),分配给 Trial 的最大资源(可以是 mini-batches 或 epochs 的数值)。 每个 Trial 都需要用 TRIAL_BUDGET 来控制运行的步数。
* **eta** (*int,可选,默认为 3*),``(eta-1)/eta`` 是丢弃 Trial 的比例。 * **eta** (*int,可选,默认为 3*),``(eta-1)/eta`` 是丢弃 Trial 的比例。
* **exec_mode** (*串行或并行,可选默认值是并行*\ ),如果是“并行”, Tuner 会尝试使用可用资源立即启动新的分组。 如果是“串行”, Tuner 只会在当前分组完成后启动新的分组。 * **exec_mode** (*串行或并行,可选默认值是并行*\ ),如果是“并行”, Tuner 会尝试使用可用资源立即启动新的分组。 如果是“串行”, Tuner 只会在当前分组完成后启动新的分组。
...@@ -498,82 +497,78 @@ GP Tuner ...@@ -498,82 +497,78 @@ GP Tuner
selection_num_warm_up: 100000 selection_num_warm_up: 100000
selection_num_starting_points: 250 selection_num_starting_points: 250
:raw-html:`<a name="PPOTuner"></a>` :raw-html:`<a name="PBTTuner"></a>`
PPO Tuner PBT Tuner
^^^^^^^^^ ^^^^^^^^^
.. ..
名称: **PPOTuner** 名称: **PBTTuner**
注意,搜索空间仅接受 ``layer_choice`` 和 ``input_choice`` 类型。 ``input_choice``\ , ``n_chosen`` 只能是 0, 1,或者 [0, 1]. 注意,NAS 的搜索空间文件通常通过 `nnictl ss_gen <../Tutorial/Nnictl.rst>`__ 命令自动生成。
**建议场景** **建议场景**
PPO Tuner 是基于 PPO 算法的强化学习 Tuner。 PPOTuner 可用于使用 NNI NAS 接口进行的神经网络结构搜索。 一般来说,尽管 PPO 算法比其它强化学习算法效率更高,但强化学习算法需要更多的计算资源。 当有大量可用的计算资源时,才建议使用此 Tuner。 以在简单的任务上尝试,如 :githublink:`mnist-nas <examples/nas/classic_nas>` 示例。 `查看详细信息 <./PPOTuner.rst>`__ Population Based Training (PBT,基于种群的训练),将并扩展并行搜索方法和顺序优化方法连接在了一起。 它通过周期性的从较好的模型中继承权重来继续探索,这样所需的计算资源相对较少。 使用 PBTTuner,用户最终可以得到训练好的模型,而不是需要从头训练的配置。 这是因为模型权重会在搜索过程中周期性的继承。 PBT 也可作为训练的方法。 如果不需要配置,只需要好的模型,PBTTuner 是不错的选择。 `查看详细信息 <./PBTTuner.rst>`__
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*‘maximize' 或 'minimize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*‘maximize' 或 'minimize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
* **trials_per_update** (*int, 可选, 默认为 20*) - 每次更新的 Trial 数量。 此数字必须可被 minibatch_size 整除。 推荐将 ``trials_per_update`` 设为 ``trialConcurrency`` 的倍数,以提高 Trial 的并发效率。 * **all_checkpoint_dir** (*str,可选, 默认为 None* ) - Trial 保存读取检查点的目录,如果不指定,其为 "~/nni/checkpoint/\ :raw-html:`<exp-id>`\ "。 注意,如果 Experiment 不是本机模式,用户需要提供能被所有 Trial 所访问的共享存储。
* **epochs_per_update** (*int, 可选, 默认为 4*) - 每次更新的 Epoch 数量。 * **population_size** (*int, 可选, 默认为 10*) - 种群的 Trial 数量。 每个步骤有此数量的 Trial。 在 NNI 的实现中,一步表示每个 Trial 运行一定次数 Epoch,此 Epoch 的数量由用户来指定。
* **minibatch_size** (*int, 可选, 默认为 4*) - mini-batch 大小 (即每个 mini-batch 的 Trial 数量)。 注意,trials_per_update 必须可被 minibatch_size 整除。 * **factors** (*tuple, 可选, 默认为 (1.2, 0.8)*) - 超参变动量的因子。
* **ent_coef** (*float, 可选, 默认为 0.0*) - 优化目标中的 Policy entropy coefficient。 * **fraction** (*float, 可选, 默认为 0.2*) - 选择的最低和最高 Trial 的比例。
* **lr** (*float, 可选, 默认为 3e-4*) - 模型的学习率(LSTM 网络),为常数。
* **vf_coef** (*float, 可选, 默认为 0.5*) - 优化目标中的价值函数损失系数
* **max_grad_norm** (*float,可选,默认值是0.5*\ ) - 梯度正则裁剪系数
* **gamma** (*float, 可选,默认值是 0.99*\ ) - 损失因子
* **lam** (*float, 可选,默认值是 0.95*\ ) - 优势估计损失因子 (论文中的lambda)。
* **cliprange** (*float, 可选, 默认为 0.2*) - PPO 算法的 cliprange, 为常数。
**配置示例:** **使用示例:**
.. code-block:: yaml .. code-block:: yaml
# config.yml # config.yml
tuner: tuner:
builtinTunerName: PPOTuner builtinTunerName: PBTTuner
classArgs: classArgs:
optimize_mode: maximize optimize_mode: maximize
:raw-html:`<a name="PBTTuner"></a>` 注意,要使用此 Tuner,Trial 代码也需要相应的修改,参考 `PBTTuner 文档 <./PBTTuner.rst>`__ 了解详情。
PBT Tuner :raw-html:`<a name="PPOTuner"></a>`
^^^^^^^^^
DNGO Tuner
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. ..
名称: **PBTTuner** 名称:**DNGOTuner**
DNGO Advisor 需要 `pybnn`,可以使用以下命令安装。
.. code-block:: bash
pip install nni[DNGO]
**建议场景** **建议场景**
Population Based Training (PBT,基于种群的训练),将并扩展并行搜索方法和顺序优化方法连接在了一起。 它通过周期性的从较好的模型中继承权重来继续探索,这样所需的计算资源相对较少。 使用 PBTTuner,用户最终可以得到训练好的模型,而不是需要从头训练的配置。 这是因为模型权重会在搜索过程中周期性的继承。 PBT 也可作为训练的方法。 如果不需要配置,只需要好的模型,PBTTuner 是不错的选择。 `查看详细信息 <./PBTTuner.rst>`__ 适用于大规模超参数优化。 贝叶斯优化使用卷积网络快速找到基准对象识别任务的竞争模型,并使用神经语言模型生成图像标题。
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*‘maximize' 或 'minimize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*‘maximize' 或 'minimize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
* **all_checkpoint_dir** (*str,可选, 默认为 None* ) - Trial 保存读取检查点的目录,如果不指定,其为 "~/nni/checkpoint/\ :raw-html:`<exp-id>`\ "。 注意,如果 Experiment 不是本机模式,用户需要提供能被所有 Trial 所访问的共享存储。 * **sample_size** (*int,默认是 1000*) - 每次迭代中选择的样本数。 最好的一个将从样本中挑选出来作为下一次 Trial。
* **population_size** (*int, 可选, 默认为 10*) - 种群的 Trial 数量。 每个步骤有此数量的 Trial。 在 NNI 的实现中,一步表示每个 Trial 运行一定次数 Epoch,此 Epoch 的数量由用户来指定。 * **trials_per_update** (*int, 可选, 默认为 20*) - 每次更新的 Trial 数量。 此数字必须可被 minibatch_size 整除。 推荐将 ``trials_per_update`` 设为 ``trialConcurrency`` 的倍数,以提高 Trial 的并发效率。
* **factors** (*tuple, 可选, 默认为 (1.2, 0.8)*) - 超参变动量的因子。 * **num_epochs_per_training** (*int,默认是500*) - 训练 DNGO 模型的 epoch 数。
* **fraction** (*float, 可选, 默认为 0.2*) - 选择的最低和最高 Trial 的比例。
**使用示例:** **配置示例:**
.. code-block:: yaml .. code-block:: yaml
# config.yml # config.yml
tuner: tuner:
builtinTunerName: PBTTuner builtinTunerName: DNGOTuner
classArgs: classArgs:
optimize_mode: maximize optimize_mode: maximize
注意,要使用此 Tuner,Trial 代码也需要相应的修改,参考 `PBTTuner 文档 <./PBTTuner.rst>`__ 了解详情。
**参考和反馈** **参考和反馈**
------------------------------ ------------------------------
......
...@@ -33,7 +33,7 @@ TPE 的并行优化 ...@@ -33,7 +33,7 @@ TPE 的并行优化
* **constant_liar_type** (*min、max 或 mean, 可选, 默认值为 min*) - 使用的 constant liar 类型,会在 X 点根据 y 的取值来确定。对应三个值:min{Y}, max{Y}, 和 mean{Y}。 * **constant_liar_type** (*min、max 或 mean, 可选, 默认值为 min*) - 使用的 constant liar 类型,会在 X 点根据 y 的取值来确定。对应三个值:min{Y}, max{Y}, 和 mean{Y}。
Random Search(随机搜索) Random Search(随机搜索)
--------------------------------------- --------------------------------------
论文 `Random Search for Hyper-Parameter Optimization <http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf>`__ 中介绍了随机搜索惊人的简单和效果。 建议在不知道超参数的先验分布时,使用随机搜索作为基准。 论文 `Random Search for Hyper-Parameter Optimization <http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf>`__ 中介绍了随机搜索惊人的简单和效果。 建议在不知道超参数的先验分布时,使用随机搜索作为基准。
......
...@@ -61,7 +61,7 @@ Network Morphism Tuner ...@@ -61,7 +61,7 @@ Network Morphism Tuner
# 1. 使用 NNI API # 1. 使用 NNI API
# WebUI 获得最佳模型 ID # WebUI 获得最佳模型 ID
# or `nni-experiments/experiment_id/log/model_path/best_model.txt' # 或者 ``nni-experiments/experiment_id/log/model_path/best_model.txt``
# 从模型文件中读取 json 字符串,并用 NNI API 加载 # 从模型文件中读取 json 字符串,并用 NNI API 加载
with open("best-model.json") as json_file: with open("best-model.json") as json_file:
......
NNI 中的 PPO Tuner
================================
PPOTuner
--------
这是一个用于 NNI 神经网络架构搜索(NAS)接口的 Tuner。 它使用了 `ppo 算法 <https://arxiv.org/abs/1707.06347>`__。 此实现继承了 `OpenAI 的 ppo2 实现 <https://github.com/openai/baselines/tree/master/baselines/ppo2>`__ 的主要逻辑,并为 NAS 场景做了适配。
mnist-nas 示例已调优,并得到以下结果:
**注意:此示例正在重构中,以支持最新的 NAS 接口,完成后会重新发布示例代码。**
.. image:: ../../img/ppo_mnist.png
:target: ../../img/ppo_mnist.png
:alt:
我们也使用 NAS 接口和 PPO Tuner 调优了 :githublink:`ENAS 论文中为图片分类所做的宏分类 <examples/trials/nas_cifar10>` (Trial 中 Epoch 限定为 8)。 `enas 论文 <https://arxiv.org/pdf/1802.03268.pdf>`__ 中的图 7 展示了搜索空间:
.. image:: ../../img/enas_search_space.png
:target: ../../img/enas_search_space.png
:alt:
上图是所选的结构。 每个方块是一层,可从 6 个操作中选择。 每条虚线是直通连接,每个方块都可以有 0 或 1 条直通连接获得前面层的输出。 **注意** ,在原始的宏搜索空间中,每个方块层可选择任意条直通连接,在此实现中,仅允许 0 或 1条。
结果如下图所示(:githublink:`配置文件 <examples/trials/nas_cifar10/config_ppo.yml>`):
.. image:: ../../img/ppo_cifar10.png
:target: ../../img/ppo_cifar10.png
:alt:
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
-------------------------------- --------------------------------
* NNI 遵循 `PEP8 <https://www.python.org/dev/peps/pep-0008/>`__ 的 Python 代码命名约定。在提交拉取请求时,请尽量遵循此规范。 可通过``flake8`` 或 ``pylint`` 的提示工具来帮助遵循规范。 * NNI 遵循 `PEP8 <https://www.python.org/dev/peps/pep-0008/>`__ 的 Python 代码命名约定。在提交拉取请求时,请尽量遵循此规范。 可通过``flake8`` 或 ``pylint`` 的提示工具来帮助遵循规范。
* NNI 还遵循 `NumPy Docstring 风格 <https://www.sphinx-doc.org/en/master/usage/extensions/example_numpy.html#example-numpy>`__ 的 Python Docstring 命名方案。 Python API 使用了 `sphinx.ext.napoleon <https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html>`__ 来 `生成文档 <Contributing.rst#documentation>`__。 * NNI 还遵循 `NumPy Docstring 风格 <https://www.sphinx-doc.org/en/master/usage/extensions/example_numpy.html#example-numpy>`__ 的 Python Docstring 命名方案。 Python API 使用了 `sphinx.ext.napoleon <https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html>`__ 来 `生成文档 <Contributing.rst#id5>`__。
* 有关 docstrings,参考 `numpydoc docstring 指南 <https://numpydoc.readthedocs.io/en/latest/format.html>`__ 和 `pandas docstring 指南 <https://python-sprints.github.io/pandas/guide/pandas_docstring.html>`__ * 有关 docstrings,参考 `numpydoc docstring 指南 <https://numpydoc.readthedocs.io/en/latest/format.html>`__ 和 `pandas docstring 指南 <https://python-sprints.github.io/pandas/guide/pandas_docstring.html>`__
* 函数的 docstring, **description**, **Parameters**, 和 **Returns Yields** 是必需的。 * 函数的 docstring, **description**, **Parameters**, 和 **Returns Yields** 是必需的。
......
Experiment(实验)配置参考 Experiment 配置(遗产)
=========================== ====================================
这是上一个版本(V1)的实验配置规范。 目前仍然支持,但我们建议用户使用 `新版实验配置(V2) <../reference/experiment_config.rst>`_。
创建 Experiment 所需要的配置文件。 配置文件的路径会传入 ``nnictl`` 命令。 创建 Experiment 所需要的配置文件。 配置文件的路径会传入 ``nnictl`` 命令。
配置文件的格式为 YAML。 配置文件的格式为 YAML。
...@@ -295,7 +297,7 @@ trainingServicePlatform ...@@ -295,7 +297,7 @@ trainingServicePlatform
**pai** 提交到微软开源的 `OpenPAI <https://github.com/Microsoft/pai>`__ 上。 更多 OpenPAI 配置,参考 `PAI 模式指南 <../TrainingService/PaiMode.rst>`__。 **pai** 提交到微软开源的 `OpenPAI <https://github.com/Microsoft/pai>`__ 上。 更多 OpenPAI 配置,参考 `PAI 模式指南 <../TrainingService/PaiMode.rst>`__。
* *
**kubeflow** 提交任务到 `kubeflow <https://www.kubeflow.org/docs/about/kubeflow/>`__\ , NNI 支持基于 kubernetes 的 kubeflow,以及 `azure kubernetes <https://azure.microsoft.com/zh-cn/services/kubernetes-service/>`__。 详情参考 `Kubeflow Docs <../TrainingService/KubeflowMode.rst>`__。 **kubeflow** 提交任务到 `kubeflow <https://www.kubeflow.org/docs/about/kubeflow/>`__\ , NNI 支持基于 kubernetes 的 kubeflow,以及 `azure kubernetes <https://azure.microsoft.com/zh-cn/services/kubernetes-service/>`__。 详情参考 `Kubeflow Docs <../TrainingService/KubeflowMode.rst>`__。 详情参考 `Kubeflow Docs <../TrainingService/KubeflowMode.rst>`__。
* *
**adl** 提交任务到 `AdaptDL <https://www.kubeflow.org/docs/about/kubeflow/>`__\ , NNI 支持 Kubernetes 集群上的 AdaptDL。 详情参考 `AdaptDL Docs <../TrainingService/AdaptDLMode.rst>`__。 **adl** 提交任务到 `AdaptDL <https://www.kubeflow.org/docs/about/kubeflow/>`__\ , NNI 支持 Kubernetes 集群上的 AdaptDL。 详情参考 `AdaptDL Docs <../TrainingService/AdaptDLMode.rst>`__。
...@@ -363,7 +365,7 @@ tuner ...@@ -363,7 +365,7 @@ tuner
必填。 必填。
指定了 Experiment 的 Tuner 算法。有两种方法可设置 Tuner。 一种方法是使用 NNI SDK 提供的内置 Tuner,在这种情况下,需要设置 **builtinTunerName** 和 **classArgs**。 另一种方法,是使用用户自定义的 Tuner,需要设置 **codeDirectory**\ , **classFileName**\ , **className** 和 **classArgs**。 *必须选择其中的一种方式。* 指定了 Experiment 的 Tuner 算法。有两种方法可设置 Tuner。 一种方法是使用 NNI SDK 提供的内置 Tuner,在这种情况下,需要设置 **builtinTunerName** 和 **classArgs**。 如果使用定制 Tuner,则为必需。 相对于 **codeDir** 的文件路径。 *必须选择其中的一种方式。*
builtinTunerName builtinTunerName
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
...@@ -468,7 +470,7 @@ Advisor ...@@ -468,7 +470,7 @@ Advisor
builtinAdvisorName builtinAdvisorName
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
指定内置 Advisor 的名称。 NNI SDK 提供了 `BOHB <../Tuner/BohbAdvisor.rst>`__ 和 `Hyperband <../Tuner/HyperbandAdvisor.rst>`__ 。 指定内置 Advisor 的名称。 指定内置 Advisor 的名称。 NNI SDK 提供了 `BOHB <../Tuner/BohbAdvisor.rst>`__ 和 `Hyperband <../Tuner/HyperbandAdvisor.rst>`__ 。
codeDir codeDir
^^^^^^^ ^^^^^^^
...@@ -838,28 +840,28 @@ localMountPoint ...@@ -838,28 +840,28 @@ localMountPoint
必填。 字符串。 必填。 字符串。
已经或将要在本地挂载存储的绝对路径。 已经或将要在本地挂载存储的绝对路径。 如果路径不存在,则会自动创建。 建议使用绝对路径。 =========================== ``/tmp/nni-shared-storage``
remoteMountPoint remoteMountPoint
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
必填。 字符串。 必填。 字符串。
远程挂载存储的绝对路径。 远程挂载存储的绝对路径。 如果路径不存在,则会自动创建。 请注意,如果使用 AzureBlob,该目录必须为空。 建议使用相对路径。 即, ``./nni-shared-storage``
localMounted localMounted
^^^^^^^^^^^^ ^^^^^^^^^^^^
必填。 字符串。 必填。 字符串。
``usermount``、``nnimount`` 和 ``nomount`` 其中之一。 ``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 nni 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。 ``usermount``、``nnimount`` 和 ``nomount`` 其中之一。 ``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 nni 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。 ``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 nni 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。
nfsServer nfsServer
^^^^^^^^^ ^^^^^^^^^
可选。 字符串。 可选。 字符串。
如果使用 NFS 存储,则必需。 NFS 服务器的 host。 如果使用 NFS 存储,则必需。 NFS 服务器的 host。 如果使用 NFS 存储,则必需。 NFS 服务器的导出目录。
exportedDirectory exportedDirectory
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
...@@ -873,21 +875,21 @@ storageAccountName ...@@ -873,21 +875,21 @@ storageAccountName
可选。 字符串。 可选。 字符串。
如果使用 AzureBlob 存储,则必需。 Azure 存储账户 如果使用 AzureBlob 存储,则必需。 AzureBlob 容器名。 如果使用 AzureBlob 存储且 ``resourceGroupName`` 未设置,则必需。 Azure 存储账户密钥
storageAccountKey storageAccountKey
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
可选。 字符串。 可选。 字符串。
如果使用 AzureBlob 存储且 ``resourceGroupName`` 未设置,则必需。 Azure 存储账户密钥。 如果使用 AzureBlob 存储且 ``storageAccountKey`` 未设置,则必需。 AzureBlob 容器所属的资源组。 Azure 存储账户密钥。
resourceGroupName resourceGroupName
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
可选。 字符串。 可选。 字符串。
如果使用 AzureBlob 存储且 ``storageAccountKey`` 未设置,则必需。 AzureBlob 容器所属的资源组。 如果使用 Azure 存储,则必需。 1 到 99999 之间的整数。 AzureBlob 容器所属的资源组。
containerName containerName
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
......
...@@ -9,25 +9,13 @@ ...@@ -9,25 +9,13 @@
概述 概述
-------- --------
从 ``nni v2.0`` 起,我们提供了一种全新方式发起 Experiment 。 在此之前,您需要在 yaml 文件中配置实验,然后使用 ``nnictl`` 命令启动 Experiment 。 现在,您还可以直接在python文件中配置和运行 Experiment 。 如果您熟悉 Python 编程,那么无疑会为您带来很多便利。 从 ``nni v2.0`` 起,我们提供了一种全新方式发起 Experiment 。 在此之前,您需要在 yaml 文件中配置实验,然后使用 ``nnictl`` 命令启动 Experiment 。 现在,您还可以直接在python文件中配置和运行 Experiment 。 如果您熟悉 Python 编程,那么无疑会为您带来很多便利。
运行一个新的 Experiment 运行一个新的 Experiment
---------------------------------------- ------------------------------------------------------------------
成功安装 ``nni`` 之后,您可以通过以下3个步骤使用 Python 脚本开始 Experiment 。
..
步骤1 - 初始化 Tuner
.. code-block:: python
from nni.algorithms.hpo.hyperopt_tuner import HyperoptTuner
tuner = HyperoptTuner('tpe')
很简单,您已经成功初始化了一个名为 ``tuner`` 的 ``HyperoptTuner`` 实例。
查看 NNI 所有的 `内置 Tuner <../builtin_tuner.rst>`__ 成功安装 ``nni`` 之后,您可以通过以下3个步骤使用 Python 脚本开始 Experiment
.. ..
...@@ -35,7 +23,8 @@ ...@@ -35,7 +23,8 @@
.. code-block:: python .. code-block:: python
experiment = Experiment(tuner=tuner, training_service='local') from nni.experiment import Experiment
experiment = Experiment(tuner, 'local')
现在,您已经在上一步中初始化了带有 Tuner 的 ``Experiment`` 实例,由于 ``training_service ='local'`` ,此实验将在本地计算机上运行。 现在,您已经在上一步中初始化了带有 Tuner 的 ``Experiment`` 实例,由于 ``training_service ='local'`` ,此实验将在本地计算机上运行。
...@@ -49,10 +38,14 @@ ...@@ -49,10 +38,14 @@
experiment.config.search_space = search_space experiment.config.search_space = search_space
experiment.config.trial_command = 'python3 mnist.py' experiment.config.trial_command = 'python3 mnist.py'
experiment.config.trial_code_directory = Path(__file__).parent experiment.config.trial_code_directory = Path(__file__).parent
experiment.config.experiment_name = 'test'
experiment.config.max_trial_number = 5
experiment.config.training_service.use_active_gpu = True experiment.config.training_service.use_active_gpu = True
使用类似 ``experiment.config.foo ='bar'`` 的形式来配置您的 Experiment 。 使用类似 ``experiment.config.foo ='bar'`` 的形式来配置您的 Experiment 。
查看 NNI 所有的 `内置 Tuner <../builtin_tuner.rst>`__。
参阅不同平台所需的 `参数配置 <../reference/experiment_config.rst>`__。 参阅不同平台所需的 `参数配置 <../reference/experiment_config.rst>`__。
.. ..
...@@ -65,19 +58,17 @@ ...@@ -65,19 +58,17 @@
现在,您已经成功启动了 NNI Experiment。 您可以在浏览器中输入``localhost:8081`` 以实时观察实验。 现在,您已经成功启动了 NNI Experiment。 您可以在浏览器中输入``localhost:8081`` 以实时观察实验。
.. Note:: 实验将在前台运行,实验结束后自动退出。 如果要以交互方式运行 Experiment,请在步骤3中使用 ``start()``。 .. Note:: 实验将在前台运行,实验结束后自动退出。 如果要以交互方式运行 Experiment,请在步骤3中使用 ``start()``。
示例 示例
^^^^^^^ ^^^^^^^
以下是这种新的启动方法的示例。 你可以在 :githublink:`mnist-tfv2/launch.py <examples/trials/mnist-tfv2/launch.py>` 找到实验代码。 以下是这种新的启动方法的示例。你可以在 :githublink:`mnist-tfv2/launch.py <examples/trials/mnist-tfv2/launch.py>` 找到实验代码。
.. code-block:: python .. code-block:: python
from pathlib import Path from pathlib import Path
from nni.experiment import Experiment
from nni.algorithms.hpo.hyperopt_tuner import HyperoptTuner
tuner = HyperoptTuner('tpe') from nni.experiment import Experiment
search_space = { search_space = {
"dropout_rate": { "_type": "uniform", "_value": [0.5, 0.9] }, "dropout_rate": { "_type": "uniform", "_value": [0.5, 0.9] },
...@@ -87,19 +78,21 @@ ...@@ -87,19 +78,21 @@
"learning_rate": { "_type": "choice", "_value": [0.0001, 0.001, 0.01, 0.1] } "learning_rate": { "_type": "choice", "_value": [0.0001, 0.001, 0.01, 0.1] }
} }
experiment = Experiment(tuner, 'local') experiment = Experiment(tuner=tuner, training_service='local')
experiment.config.experiment_name = 'test' experiment.config.experiment_name = 'MNIST example'
experiment.config.trial_concurrency = 2 experiment.config.trial_concurrency = 2
experiment.config.max_trial_number = 5 experiment.config.max_trial_number = 10
experiment.config.search_space = search_space experiment.config.search_space = search_space
experiment.config.trial_command = 'python3 mnist.py' experiment.config.trial_command = 'python3 mnist.py'
experiment.config.trial_code_directory = Path(__file__).parent experiment.config.trial_code_directory = Path(__file__).parent
tuner = HyperoptTuner('tpe')
experiment.config.tuner.class_args['optimize_mode'] = 'maximize'
experiment.config.training_service.use_active_gpu = True experiment.config.training_service.use_active_gpu = True
experiment.run(8081) experiment.run(8081)
启动并管理一个新的 Experiment 启动并管理一个新的 Experiment
------------------------------------------------------------------ ----------------------------------------------------------------------------
我们将 ``NNI Client`` 中的 API 迁移到了这个新的启动方法。 我们将 ``NNI Client`` 中的 API 迁移到了这个新的启动方法。
通过 ``start()`` 而不是 ``run()`` 启动 Experiment,可以在交互模式下使用这些 API。 通过 ``start()`` 而不是 ``run()`` 启动 Experiment,可以在交互模式下使用这些 API。
...@@ -108,13 +101,19 @@ ...@@ -108,13 +101,19 @@
.. Note:: ``run()`` 轮询实验状态,并在实验完成时自动调用 ``stop()``。 ``start()`` 仅仅启动了一个新的 Experiment,所以需要通过调用 ``stop()`` 手动停止。 .. Note:: ``run()`` 轮询实验状态,并在实验完成时自动调用 ``stop()``。 ``start()`` 仅仅启动了一个新的 Experiment,所以需要通过调用 ``stop()`` 手动停止。
连接并管理已存在的 Experiment 连接并管理已存在的 Experiment
---------------------------------------------------------------------------- ----------------------------------------
如果您通过 ``nnictl`` 启动 Experiment,并且还想使用这些 API,那么可以使用 ``Experiment.connect()`` 连接到现有实验。 如果您通过 ``nnictl`` 启动 Experiment,并且还想使用这些 API,那么可以使用 ``Experiment.connect()`` 连接到现有实验。
请参考 `示例用法 <./python_api_connect.rst>`__ 和代码文件 :githublink:`python_api_connect.ipynb <examples/trials/sklearn/classification/python_api_connect.ipynb>`。 请参考 `示例用法 <./python_api_connect.rst>`__ 和代码文件 :githublink:`python_api_connect.ipynb <examples/trials/sklearn/classification/python_api_connect.ipynb>`。
.. Note:: 连接到现有 Experiment 时,可以使用 ``stop()`` 停止 Experiment。 .. Note:: 连接到现有 Experiment 时,可以使用 ``stop()`` 停止 Experiment。
恢复/查看和管理已停止的 Experiment
--------------------------------------------------------------------------------------
您可以使用 ``Experiment.resume()`` 和 ``Experiment.view()`` 来恢复和查看停止的 Experiment,这些函数的行为类似于 ``nnictl resume`` 和 ``nnictl view``。
如果你想管理 Experiment,设置 ``wait_completion`` 为 ``False`` ,函数将返回一个 ``Experiment`` 实例。 更多参数请参考API。
API API
--- ---
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
``-p:`` 端口映射,映射主机端口和容器端口。 ``-p:`` 端口映射,映射主机端口和容器端口。
可以参考 `这里 <https://docs.docker.com/engine/reference/run/>`__,获取更多的 Docker 命令参考。 可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。
注意: 注意:
......
...@@ -7,11 +7,11 @@ Experiment 生成的所有信息都将存储在共享存储的 ``/nni`` 文件 ...@@ -7,11 +7,11 @@ Experiment 生成的所有信息都将存储在共享存储的 ``/nni`` 文件
Trial 产生的所有输出将位于共享存储中的 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}/nnioutput`` 文件夹下。 Trial 产生的所有输出将位于共享存储中的 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}/nnioutput`` 文件夹下。
这就避免了在不同地方寻找实验相关信息的麻烦。 这就避免了在不同地方寻找实验相关信息的麻烦。
Trial 工作目录是 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}``,因此如果您在共享存储中上载数据,您可以像在 Trial 代码中打开本地文件一样打开它,而不必下载它。 Trial 工作目录是 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}``,因此如果您在共享存储中上载数据,您可以像在 Trial 代码中打开本地文件一样打开它,而不必下载它。
未来我们将开发更多基于共享存储的实用功能。 未来我们将开发更多基于共享存储的实用功能。 配置参考在 `这里 <../reference/experiment_config.html#sharedstorageconfig>`_。
.. note:: .. note::
共享存储目前处于实验阶段。 我们建议在 Ubuntu/CentOS/RHEL 下使用 AzureBlob,在 Ubuntu/CentOS/RHEL/Fedora/Debian 下使用 NFS 进行远程访问。 共享存储目前处于实验阶段。 共享存储目前处于实验阶段。 我们建议在 Ubuntu/CentOS/RHEL 下使用 AzureBlob,在 Ubuntu/CentOS/RHEL/Fedora/Debian 下使用 NFS 进行远程访问。
确保您的本地机器可以挂载 NFS 或 fuse AzureBlob,并在远程运行时具有 sudo 权限。 我们目前只支持使用重用模式的训练平台下的共享存储。 确保您的本地机器可以挂载 NFS 或 fuse AzureBlob,并在远程运行时具有 sudo 权限。 我们目前只支持使用重用模式的训练平台下的共享存储。 我们目前只支持使用重用模式的训练平台下的共享存储。
示例 示例
------- -------
......
如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor 如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor
======================================================================================= =======================================================================================
...@@ -105,7 +104,7 @@ YAML 文件示例: ...@@ -105,7 +104,7 @@ YAML 文件示例:
``<path_to_meta_file>`` 是上一节创建的 YAML 文件的路径。 ``<path_to_meta_file>`` 是上一节创建的 YAML 文件的路径。
参考 `自定义 Tuner 示例 <#example-register-a-customized-tuner-as-a-builtin-tuner>`_ 获取完整示例。 参考 `自定义 Tuner 示例 <#tuner-tuner>`_ 获取完整示例。
在 Experiment 中使用安装的内置算法 在 Experiment 中使用安装的内置算法
-------------------------------------------------- --------------------------------------------------
...@@ -121,7 +120,7 @@ YAML 文件示例: ...@@ -121,7 +120,7 @@ YAML 文件示例:
optimize_mode: maximize optimize_mode: maximize
使用 ``nnictl algo`` 管理内置的算法 使用 ``nnictl algo`` 管理内置的算法
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------
列出已安装的包 列出已安装的包
^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
...@@ -165,14 +164,13 @@ YAML 文件示例: ...@@ -165,14 +164,13 @@ YAML 文件示例:
将自定义算法从 v1.x 版本转到 v2.x 版本 将自定义算法从 v1.x 版本转到 v2.x 版本
---------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------
所有需要修改的就是删除 ``setup.py`` 中的 ``NNI Package :: tuner`` 元数据并添加在 在 4 中提到的元文件。 然后你可以参考 `将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor`__ 注册你的自定义算法。
所有需要修改的就是删除 ``setup.py`` 中的 ``NNI Package :: tuner`` 元数据并添加在 在 4 中提到的元文件。然后你可以参考 `将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor <#id3>`__ 注册你的自定义算法。
示例:将自定义 Tuner 注册为内置 Tuner 示例:将自定义 Tuner 注册为内置 Tuner
-------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
参考下列步骤将 ``nni/examples/tuners/customized_tuner`` 中的自定义 Tuner 注册为内置 Tuner。 步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
将自定义 Tuner 包安装到 Python 环境 中 将自定义 Tuner 包安装到 Python 环境 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...@@ -180,7 +178,7 @@ YAML 文件示例: ...@@ -180,7 +178,7 @@ YAML 文件示例:
有两种方法可将软件包安装到 python 环境中: 有两种方法可将软件包安装到 python 环境中:
方法 1: 从目录安装 方法 1: 从目录安装
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
在 ``nni/examples/tuners/customized_tuner`` 目录下,运行: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
...@@ -189,7 +187,7 @@ YAML 文件示例: ...@@ -189,7 +187,7 @@ YAML 文件示例:
此命令会将 ``nni/examples/tuners/customized_tuner`` 目录编译为 pip 安装源。 此命令会将 ``nni/examples/tuners/customized_tuner`` 目录编译为 pip 安装源。
方法 2: 从 whl 文件安装 方法 2: 从 whl 文件安装
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行: 步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
......
...@@ -28,7 +28,6 @@ nnictl 支持的命令: ...@@ -28,7 +28,6 @@ nnictl 支持的命令:
* `nnictl config <#config>`__ * `nnictl config <#config>`__
* `nnictl log <#log>`__ * `nnictl log <#log>`__
* `nnictl webui <#webui>`__ * `nnictl webui <#webui>`__
* `nnictl tensorboard <#tensorboard>`__
* `nnictl algo <#algo>`__ * `nnictl algo <#algo>`__
* `nnictl ss_gen <#ss_gen>`__ * `nnictl ss_gen <#ss_gen>`__
* `nnictl --version <#version>`__ * `nnictl --version <#version>`__
...@@ -1311,97 +1310,6 @@ Manage webui ...@@ -1311,97 +1310,6 @@ Manage webui
- Experiment ID - Experiment ID
:raw-html:`<a name="tensorboard"></a>`
管理 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:`<a name="algo"></a>` :raw-html:`<a name="algo"></a>`
...@@ -1509,7 +1417,7 @@ Manage webui ...@@ -1509,7 +1417,7 @@ Manage webui
* *
说明 说明
注销一个已注册的自定义内置算法。 NNI 提供的内置算法不能被注销。 注销一个已注册的自定义内置算法。 NNI 提供的内置算法不能被注销。 NNI 提供的内置算法不能被注销。
* *
用法 用法
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment