Unverified Commit 39432390 authored by kvartet's avatar kvartet Committed by GitHub
Browse files

Update Chinese documentation (#3886)

parent 93dbaf3e
在 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:
......
This diff is collapsed.
...@@ -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** 是必需的。
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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