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

Update Chinese translation (#3413)

parent b122c63d
...@@ -28,7 +28,7 @@ NNI API ...@@ -28,7 +28,7 @@ NNI API
"learning_rate":{"_type":"uniform","_value":[0.0001, 0.1]} "learning_rate":{"_type":"uniform","_value":[0.0001, 0.1]}
} }
参考 `SearchSpaceSpec.md <../Tutorial/SearchSpaceSpec.rst>`__ 进一步了解搜索空间。 Tuner 会根据搜索空间来生成配置,即从每个超参的范围中选一个值。 参考 `SearchSpaceSpec.rst <../Tutorial/SearchSpaceSpec.rst>`__ 进一步了解搜索空间。 Tuner 会根据搜索空间来生成配置,即从每个超参的范围中选一个值。
第二步:更新模型代码 第二步:更新模型代码
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
...@@ -80,7 +80,7 @@ NNI API ...@@ -80,7 +80,7 @@ NNI API
参考 `这里 <../Tutorial/ExperimentConfig.rst>`__ 进一步了解如何配置 Experiment。 参考 `这里 <../Tutorial/ExperimentConfig.rst>`__ 进一步了解如何配置 Experiment。
参考 `这里 </sdk_reference.html>`__ ,了解更多 NNI API (例如:``nni.get_sequence_id()``)。 参考 `这里 <../sdk_reference.rst>`__ ,了解更多 NNI API (例如:``nni.get_sequence_id()``)。
:raw-html:`<a name="nni-annotation"></a>` :raw-html:`<a name="nni-annotation"></a>`
...@@ -159,14 +159,15 @@ NNI 支持独立模式,使 Trial 代码无需启动 NNI 实验即可运行。 ...@@ -159,14 +159,15 @@ NNI 支持独立模式,使 Trial 代码无需启动 NNI 实验即可运行。
.. code-block:: python .. code-block:: python
# 注意:请为 Trial 代码中的超参分配默认值 #注意:请为 Trial 代码中的超参分配默认值
nni.report_final_result # 已在 stdout 上打印日志,但不报告 nni.get_next_parameter # 返回 {}
nni.report_intermediate_result # 已在 stdout 上打印日志,但不报告 nni.report_final_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
可使用 :githublink:`mnist 示例 <examples/trials/mnist-tfv1>` 来尝试独立模式。 只需在代码目录下运行 ``python3 mnist.py``。 Trial 代码会使用默认超参成功运行。 可使用 :githublink:`mnist 示例 <examples/trials/mnist-pytorch>` 来尝试独立模式。 只需在代码目录下运行 ``python3 mnist.py``。 Trial 代码会使用默认超参成功运行。
更多调试的信息,可参考 `How to Debug <../Tutorial/HowToDebug.rst>`__。 更多调试的信息,可参考 `How to Debug <../Tutorial/HowToDebug.rst>`__。
......
...@@ -52,9 +52,11 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个 ...@@ -52,9 +52,11 @@ BOHB 的 BO 与 TPE 非常相似, 它们的主要区别是: BOHB 中使用一个
.. image:: ../../img/bohb_6.jpg .. image:: ../../img/bohb_6.jpg
:target: ../../img/bohb_6.jpg :target: ../../img/bohb_6.jpg
:alt:
以上这张图展示了 BOHB 的工作流程。 将每次训练的最大资源配置(max_budget)设为 9,最小资源配置设为(min_budget)1,逐次减半比例(eta)设为 3,其他的超参数为默认值。 那么在这个例子中,s_max 计算的值为 2, 所以会持续地进行 {s=2, s=1, s=0, s=2, s=1, s=0, ...} 的循环。 在“逐次减半”(SuccessiveHalving)算法的每一个阶段,即图中橙色框,都将选取表现最好的前 1/eta 个参数,并在赋予更多计算资源(budget)的情况下运行。不断重复“逐次减半” (SuccessiveHalving)过程,直到这个循环结束。 同时,收集这些试验的超参数组合,使用了计算资源(budget)和其表现(metrics),使用这些数据来建立一个以使用了多少计算资源(budget)为维度的多维核密度估计(KDE)模型。这个多维的核密度估计(KDE)模型将用于指导下一个循环的参数选择。 以上这张图展示了 BOHB 的工作流程。 将每次训练的最大资源配置(max_budget)设为 9,最小资源配置设为(min_budget)1,逐次减半比例(eta)设为 3,其他的超参数为默认值。 那么在这个例子中,s_max 计算的值为 2, 所以会持续地进行 {s=2, s=1, s=0, s=2, s=1, s=0, ...} 的循环。 在“逐次减半”(SuccessiveHalving)算法的每一个阶段,即图中橙色框,都将选取表现最好的前 1/eta 个参数,并在赋予更多计算资源(budget)的情况下运行。不断重复“逐次减半” (SuccessiveHalving)过程,直到这个循环结束。 同时,收集这些试验的超参数组合,使用了计算资源(budget)和其表现(metrics),使用这些数据来建立一个以使用了多少计算资源(budget)为维度的多维核密度估计(KDE)模型。
这个多维的核密度估计(KDE)模型将用于指导下一个循环的参数选择。
有关如何使用多维的 KDE 模型来指导参数选择的采样规程,用以下伪代码来描述。 有关如何使用多维的 KDE 模型来指导参数选择的采样规程,用以下伪代码来描述。
...@@ -71,7 +73,7 @@ BOHB advisor 需要安装 `ConfigSpace <https://github.com/automl/ConfigSpace>`_ ...@@ -71,7 +73,7 @@ BOHB advisor 需要安装 `ConfigSpace <https://github.com/automl/ConfigSpace>`_
.. code-block:: bash .. code-block:: bash
nnictl package install --name=BOHB pip install nni[BOHB]
要使用 BOHB,需要在 Experiment 的 YAML 配置文件进行如下改动: 要使用 BOHB,需要在 Experiment 的 YAML 配置文件进行如下改动:
...@@ -120,7 +122,7 @@ Advisor 有大量的文件、函数和类。 这里只简单介绍最重要的 ...@@ -120,7 +122,7 @@ Advisor 有大量的文件、函数和类。 这里只简单介绍最重要的
------------- -------------
BOHB 在 MNIST 数据集上的表现 BOHB 在 MNIST 数据集上的表现
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
源码地址: :githublink:`examples/trials/mnist-advisor <examples/trials/>` 源码地址: :githublink:`examples/trials/mnist-advisor <examples/trials/>`
......
...@@ -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 需要通过 ``nnictl package`` 命令来安装。 `参考论文 <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。 注意:SMAC 需要通过 ``pip install nni[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>`__
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
要使用 NNI 内置的 Assessor,需要在 ``config.yml`` 文件中添加 **builtinAssessorName** 和 **classArgs**。 本部分中,将介绍每个 Tuner 的用法和建议场景、参数要求,并提供配置示例。 要使用 NNI 内置的 Assessor,需要在 ``config.yml`` 文件中添加 **builtinAssessorName** 和 **classArgs**。 本部分中,将介绍每个 Tuner 的用法和建议场景、参数要求,并提供配置示例。
注意:参考样例中的格式来创建新的 ``config.yml`` 文件。 一些内置 Tuner 还需要通过 ``nnictl package`` 命令先安装,如 SMAC。 注意:参考样例中的格式来创建新的 ``config.yml`` 文件。 一些内置 Tuner 因为依赖问题需要使用 ``pip install nni[<tuner>]`` 来安装,比如使用 ``pip install nni[SMAC]`` 来安装 SMAC。
:raw-html:`<a name="TPE"></a>` :raw-html:`<a name="TPE"></a>`
...@@ -71,7 +71,7 @@ TPE 是一种黑盒优化方法,可以使用在各种场景中,通常情况 ...@@ -71,7 +71,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>`__。
...@@ -128,7 +128,7 @@ Anneal(退火算法) ...@@ -128,7 +128,7 @@ Anneal(退火算法)
**classArgs 要求:** **classArgs 要求:**
* **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 * **optimize_mode** (*maximize 或 minimize, 可选项, 默认值为 maximize*\ ) - 如果为 'maximize',表示 Tuner 会试着最大化指标。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。
**配置示例:** **配置示例:**
...@@ -196,7 +196,7 @@ SMAC 在第一次使用前,必须用下面的命令先安装。 注意:SMAC ...@@ -196,7 +196,7 @@ SMAC 在第一次使用前,必须用下面的命令先安装。 注意:SMAC
.. code-block:: bash .. code-block:: bash
nnictl package install --name=SMAC pip install nni[SMAC]
**建议场景** **建议场景**
...@@ -306,7 +306,7 @@ Hyperband ...@@ -306,7 +306,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 只会在当前分组完成后启动新的分组。
...@@ -417,7 +417,7 @@ BOHB advisor 需要安装 `ConfigSpace <https://github.com/automl/ConfigSpace>`_ ...@@ -417,7 +417,7 @@ BOHB advisor 需要安装 `ConfigSpace <https://github.com/automl/ConfigSpace>`_
.. code-block:: bash .. code-block:: bash
nnictl package install --name=BOHB pip install nni[BOHB]
**建议场景** **建议场景**
...@@ -512,7 +512,7 @@ PPO Tuner ...@@ -512,7 +512,7 @@ PPO Tuner
**建议场景** **建议场景**
PPO Tuner 是基于 PPO 算法的强化学习 Tuner。 PPOTuner 可用于使用 NNI NAS 接口进行的神经网络结构搜索。 一般来说,尽管 PPO 算法比其它强化学习算法效率更高,但强化学习算法需要更多的计算资源。 当有大量可用的计算资源时,才建议使用此 Tuner。 以在简单的任务上尝试,如 :githublink:`mnist-nas <examples/trials/mnist-nas>` 示例。 `查看详细信息 <./PPOTuner.rst>`__。 PPO Tuner 是基于 PPO 算法的强化学习 Tuner。 PPOTuner 可用于使用 NNI NAS 接口进行的神经网络结构搜索。 一般来说,尽管 PPO 算法比其它强化学习算法效率更高,但强化学习算法需要更多的计算资源。 当有大量可用的计算资源时,才建议使用此 Tuner。 以在简单的任务上尝试,如 :githublink:`mnist-nas <examples/nas/classic_nas>` 示例。 `查看详细信息 <./PPOTuner.rst>`__。
**classArgs 要求:** **classArgs 要求:**
...@@ -580,6 +580,6 @@ Population Based Training (PBT,基于种群的训练),将并扩展并行搜 ...@@ -580,6 +580,6 @@ Population Based Training (PBT,基于种群的训练),将并扩展并行搜
* 在Github 中 `提交此功能的 Bug <https://github.com/microsoft/nni/issues/new?template=bug-report.rst>`__ * 在Github 中 `提交此功能的 Bug <https://github.com/microsoft/nni/issues/new?template=bug-report.rst>`__
* 在Github 中 `提交新功能或请求改进 <https://github.com/microsoft/nni/issues/new?template=enhancement.rst>`__ * 在Github 中 `提交新功能或请求改进 <https://github.com/microsoft/nni/issues/new?template=enhancement.rst>`__
* 了解 NNI 中 `特征工程的更多信息 <../FeatureEngineering/Overview.rst>`__ * 了解 NNI 中 :githublink:`特征工程的更多信息 <docs/zh_CN/FeatureEngineering/Overview.rst>`
* 了解 NNI 中 `NAS 的更多信息 <../NAS/Overview.rst>`__ * 了解 NNI 中 :githublink:`NAS 的更多信息 <docs/zh_CN/NAS/Overview.rst>`
* 了解 NNI 中 `模型压缩的更多信息 <../Compression/Overview.rst>`__ * 了解 NNI 中 :githublink:`模型压缩的更多信息 <docs/zh_CN/Compression/Overview.rst>`
...@@ -17,7 +17,9 @@ Advisor 用于同时需要 Tuner 和 Assessor 方法的自动机器学习算法 ...@@ -17,7 +17,9 @@ Advisor 用于同时需要 Tuner 和 Assessor 方法的自动机器学习算法
def __init__(self, ...): def __init__(self, ...):
... ...
**2. 实现所有除了 ``handle_request`` 外的,以 ``handle_`` 前缀开始的方法**。 `此文档 </sdk_reference.html#nni.runtime.msg_dispatcher_base.MsgDispatcherBase>`__ 可帮助理解 ``MsgDispatcherBase``。 **2. 实现所有除了 "handle_request" 外的,以 "handle_" 前缀开始的方法**。
关于 ``MsgDispatcherBase`` 可以查询此 `文档 <../autotune_ref.rst#Advisor>`__ 。
**3. 在 Experiment 的 YAML 文件中配置好自定义的 Advisor** 。 **3. 在 Experiment 的 YAML 文件中配置好自定义的 Advisor** 。
......
...@@ -117,12 +117,12 @@ NNI 需要定位到自定义的 Tuner 类,并实例化它,因此需要指定 ...@@ -117,12 +117,12 @@ NNI 需要定位到自定义的 Tuner 类,并实例化它,因此需要指定
.. ..
* :githublink:`evolution-tuner <src/sdk/pynni/nni/evolution_tuner>` * :githublink:`evolution-tuner <nni/algorithms/hpo/evolution_tuner.py>`
* :githublink:`hyperopt-tuner <src/sdk/pynni/nni/hyperopt_tuner>` * :githublink:`hyperopt-tuner <nni/algorithms/hpo/hyperopt_tuner.py>`
* :githublink:`evolution-based-customized-tuner <examples/tuners/ga_customer_tuner>` * :githublink:`evolution-based-customized-tuner <examples/tuners/ga_customer_tuner>`
实现更高级的自动机器学习算法 实现更高级的自动机器学习算法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
上述内容足够写出通用的 Tuner。 但有时可能需要更多的信息,例如,中间结果, Trial 的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个 ``Advisor`` 类,直接继承于 ``MsgDispatcherBase``,它在 :githublink:`src/sdk/pynni/nni/msg_dispatcher_base.py <src/sdk/pynni/nni/msg_dispatcher_base.py>` 。 参考 `这里 <CustomizeAdvisor.rst>`__ 来了解如何实现自定义的 Advisor。 上述内容足够写出通用的 Tuner。 但有时可能需要更多的信息,例如,中间结果, Trial 的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个 ``Advisor`` 类,直接继承于 ``MsgDispatcherBase``,它在 :githublink:`src/sdk/pynni/nni/msg_dispatcher_base.py <nni/runtime/msg_dispatcher_base.py>` 。 参考 `这里 <CustomizeAdvisor.rst>`__ 来了解如何实现自定义的 Advisor。
如何将自定义的 Tuner 安装为内置 Tuner
==================================================
参考下列步骤将自定义 Tuner: ``nni/examples/tuners/customized_tuner`` 安装为内置 Tuner。
准备安装源和安装包
-----------------------------------------------
有两种方法安装自定义的 Tuner:
方法 1: 从目录安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
``python setup.py develop``
此命令会将 ``nni/examples/tuners/customized_tuner`` 目录编译为 pip 安装源。
步骤 2: 运行命令
``nnictl package install ./``
方法 2: 从 whl 文件安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
``python setup.py bdist_wheel``
此命令会从 pip 安装源编译出 whl 文件。
步骤 2: 运行命令
``nnictl package install dist/demo_tuner-0.1-py3-none-any.whl``
检查安装的包
---------------------------
运行命令 ``nnictl package list``,可以看到已安装的 demotuner:
.. code-block:: bash
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| Name | Type | Installed | Class Name | Module Name |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| demotuner | tuners | Yes | DemoTuner | demo_tuner |
+-----------------+------------+-----------+----------------------+------------------------------------------+
在 Experiment 中使用安装的 Tuner
-------------------------------------
可以像使用其它内置 Tuner 一样,在 Experiment 配置文件中使用 demotuner:
.. code-block:: yaml
tuner:
builtinTunerName: demotuner
classArgs:
#choice: maximize, minimize
optimize_mode: maximize
...@@ -6,7 +6,7 @@ Network Morphism Tuner ...@@ -6,7 +6,7 @@ Network Morphism Tuner
`Autokeras <https://arxiv.org/abs/1806.10282>`__ 是使用 Network Morphism 算法的流行的自动机器学习工具。 Autokeras 的基本理念是使用贝叶斯回归来预测神经网络架构的指标。 每次都会从父网络生成几个子网络。 然后使用朴素贝叶斯回归,从网络的历史训练结果来预测它的指标值。 接下来,会选择预测结果最好的子网络加入训练队列中。 `此代码 <https://github.com/jhfjhfj1/autokeras>`__ 的启发下,我们在 NNI 中实现了 Network Morphism 算法。 `Autokeras <https://arxiv.org/abs/1806.10282>`__ 是使用 Network Morphism 算法的流行的自动机器学习工具。 Autokeras 的基本理念是使用贝叶斯回归来预测神经网络架构的指标。 每次都会从父网络生成几个子网络。 然后使用朴素贝叶斯回归,从网络的历史训练结果来预测它的指标值。 接下来,会选择预测结果最好的子网络加入训练队列中。 `此代码 <https://github.com/jhfjhfj1/autokeras>`__ 的启发下,我们在 NNI 中实现了 Network Morphism 算法。
要了解 Network Morphism Trial 的用法,参考 :githublink:`这里 <examples/trials/network_morphism/README.md>` 要了解 Network Morphism Trial 的用法,参考 :githublink:`Readme <examples/trials/network_morphism/README.rst>`
2. 用法 2. 用法
-------- --------
...@@ -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' # or `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:
...@@ -237,20 +237,27 @@ Tuner 有大量的文件、函数和类。 这里简单介绍最重要的文件 ...@@ -237,20 +237,27 @@ Tuner 有大量的文件、函数和类。 这里简单介绍最重要的文件
* ``adj_list`` 是二维列表,是图的邻接表。 第一维是张量标识。 在每条边的列表中,元素是两元组(张量标识,层标识)。 * ``adj_list`` 是二维列表,是图的邻接表。 第一维是张量标识。 在每条边的列表中,元素是两元组(张量标识,层标识)。
* ``reverse_adj_list`` 是与 adj_list 格式一样的反向邻接列表。 * ``reverse_adj_list`` 是与 adj_list 格式一样的反向邻接列表。
* ``node_list`` 是一个整数列表。 列表的索引是标识。 * ``node_list`` 是一个整数列表。 列表的索引是标识。
* ``layer_list`` 是层的列表。 列表的索引是标识。 *
``layer_list`` 是层的列表。 列表的索引是标识。
* 对于 ``StubConv(StubConv1d, StubConv2d, StubConv3d)``,后面的数字表示节点的输入 id(或 id 列表),节点输出 idinput_channelfilterskernel_sizestride padding *
对于 ``StubConv(StubConv1d, StubConv2d, StubConv3d)``,后面的数字表示节点的输入 id(或 id 列表),节点输出 id,input_channel,filters,kernel_size,stride 和 padding。
* 对于 ``StubDense``,后面的数字表示节点的输入 id (或 id 列表),节点输出 idinput_units units *
对于 ``StubDense``,后面的数字表示节点的输入 id (或 id 列表),节点输出 id,input_units 和 units。
* 对于 ``StubBatchNormalization (StubBatchNormalization1d, StubBatchNormalization2d, StubBatchNormalization3d)``,后面的数字表示节点输入 id(或 id 列表),节点输出 id,和特征数量。 *
对于 ``StubBatchNormalization (StubBatchNormalization1d, StubBatchNormalization2d, StubBatchNormalization3d)``,后面的数字表示节点输入 id(或 id 列表),节点输出 id,和特征数量。
* 对于 ``StubDropout(StubDropout1d, StubDropout2d, StubDropout3d)``,后面的数字表示节点的输入 id (或 id 列表),节点的输出 id dropout 率。 *
对于 ``StubDropout(StubDropout1d, StubDropout2d, StubDropout3d)``,后面的数字表示节点的输入 id (或 id 列表),节点的输出 id 和 dropout 率。
* 对于 ``StubPooling (StubPooling1d, StubPooling2d, StubPooling3d)`` 后面的数字表示节点的输入 id(或 id 列表),节点输出 idkernel_size, stride padding *
对于 ``StubPooling (StubPooling1d, StubPooling2d, StubPooling3d)`` 后面的数字表示节点的输入 id(或 id 列表),节点输出 id,kernel_size, stride 和 padding。
* 对于其它层,后面的数字表示节点的输入 id(或 id 列表)以及节点的输出 id *
对于其它层,后面的数字表示节点的输入 id(或 id 列表)以及节点的输出 id。
5. TODO 5. TODO
------- -------
......
...@@ -52,14 +52,12 @@ ...@@ -52,14 +52,12 @@
-------------------------------- --------------------------------
* 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>`__ 来生成文档。 * 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>`__
* 有关 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** 是必需的。
* 类的 docstring, **description**, **Attributes** 是必需的。 * 类的 docstring, **description**, **Attributes** 是必需的。
* 描述 ``dict`` 的 docstring 在超参格式描述中多处用到 * 描述 ``dict`` 的 docstring 在超参格式描述中多处用到,请参考 `写作标准的内部准则 <https://ribokit.github.io/docs/text/>`__ 。
* 参考 `RiboKit 文档写作准则 <https://ribokit.github.io/docs/text/>`__
文档 文档
------------- -------------
...@@ -73,4 +71,4 @@ ...@@ -73,4 +71,4 @@
* 图片需要通过嵌入的 HTML 语法来格式化,则需要使用绝对链接,如 ``https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png``。可以通过将图片拖拽到 `Github Issue <https://github.com/Microsoft/nni/issues/new>`__ 框中来生成这样的链接。 * 图片需要通过嵌入的 HTML 语法来格式化,则需要使用绝对链接,如 ``https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png``。可以通过将图片拖拽到 `Github Issue <https://github.com/Microsoft/nni/issues/new>`__ 框中来生成这样的链接。
* 如果不能被 sphinx 重新格式化,如源代码等,则需要使用绝对链接。 如果源码连接到本代码库,使用 ``https://github.com/Microsoft/nni/tree/master/`` 作为根目录 (例如 :githublink:`mnist.py <examples/trials/mnist-tfv1/mnist.py>` )。 * 如果不能被 sphinx 重新格式化,如源代码等,则需要使用绝对链接。 如果源码连接到本代码库,使用 ``https://github.com/Microsoft/nni/tree/master/`` 作为根目录 (例如 :githublink:`mnist.py <examples/trials/mnist-pytorch/mnist.py>` )。
...@@ -71,7 +71,7 @@ Experiment(实验)配置参考 ...@@ -71,7 +71,7 @@ Experiment(实验)配置参考
* `gpuIndices <#gpuindices-3>`__ * `gpuIndices <#gpuindices-3>`__
* `maxTrialNumPerGpu <#maxtrialnumpergpu-1>`__ * `maxTrialNumPerGpu <#maxtrialnumpergpu-1>`__
* `useActiveGpu <#useactivegpu-1>`__ * `useActiveGpu <#useactivegpu-1>`__
* `preCommand <#preCommand>`__ * `pythonPath <#pythonPath>`__
* `kubeflowConfig <#kubeflowconfig>`__ * `kubeflowConfig <#kubeflowconfig>`__
...@@ -252,7 +252,7 @@ maxExecDuration ...@@ -252,7 +252,7 @@ maxExecDuration
可选。 字符串。 默认值:999d。 可选。 字符串。 默认值:999d。
**maxExecDuration** 指定实验的最大执行时间。 时间单位为 {**s**\ ,** m**\ ,** h**\ ,** d**\ },其分别表示 {*秒*\ , *分钟*\ , *小时*\ , *天*\ }。 **maxExecDuration** 指定实验的最大执行时间。 时间单位为 {**s**\ , **m**\ , **h**\ , **d**\ },其分别表示 {*秒*\ , *分钟*\ , *小时*\ , *天*\ }。
注意:maxExecDuration 设置的是 Experiment 执行的时间,不是 Trial 的。 如果 Experiment 达到了设置的最大时间,Experiment 不会停止,但不会再启动新的 Trial 作业。 注意:maxExecDuration 设置的是 Experiment 执行的时间,不是 Trial 的。 如果 Experiment 达到了设置的最大时间,Experiment 不会停止,但不会再启动新的 Trial 作业。
...@@ -282,7 +282,7 @@ trainingServicePlatform ...@@ -282,7 +282,7 @@ trainingServicePlatform
必填。 字符串。 必填。 字符串。
指定运行 Experiment 的平台,包括 **local**\ ,** remote**\ ,** pai**\ ,** kubeflow**\ ,** frameworkcontroller**。 指定运行 Experiment 的平台,包括 **local**\ , **remote**\ , **pai**\ , **kubeflow**\ , **frameworkcontroller**。
* *
...@@ -363,7 +363,7 @@ tuner ...@@ -363,7 +363,7 @@ tuner
必填。 必填。
指定了 Experiment 的 Tuner 算法。有两种方法可设置 Tuner。 一种方法是使用 NNI SDK 提供的内置 Tuner,在这种情况下,需要设置 **builtinTunerName** 和 **classArgs**。 另一种方法,是使用用户自定义的 Tuner,需要设置 **codeDirectory**\ ,** classFileName**\ ,** className** 和 **classArgs**。 *必须选择其中的一种方式。* 指定了 Experiment 的 Tuner 算法。有两种方法可设置 Tuner。 一种方法是使用 NNI SDK 提供的内置 Tuner,在这种情况下,需要设置 **builtinTunerName** 和 **classArgs**。 另一种方法,是使用用户自定义的 Tuner,需要设置 **codeDirectory**\ , **classFileName**\ , **className** 和 **classArgs**。 *必须选择其中的一种方式。*
builtinTunerName builtinTunerName
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
...@@ -417,7 +417,7 @@ includeIntermediateResults ...@@ -417,7 +417,7 @@ includeIntermediateResults
assessor assessor
^^^^^^^^ ^^^^^^^^
指定 Assessor 算法以运行 Experiment。 与 Tuner 类似,有两种设置 Assessor 的方法。 一种方法是使用 NNI SDK 提供的 Assessor。 必填字段:builtinAssessorName 和 classArgs。 另一种方法,是使用用户自定义的 Assessor,需要设置 **codeDirectory**\ ,** classFileName**\ ,** className** 和 **classArgs**。 *必须选择其中的一种方式。* 指定 Assessor 算法以运行 Experiment。 与 Tuner 类似,有两种设置 Assessor 的方法。 一种方法是使用 NNI SDK 提供的 Assessor。 必填字段:builtinAssessorName 和 classArgs。 另一种方法,是使用用户自定义的 Assessor,需要设置 **codeDirectory**\ , **classFileName**\ , **className** 和 **classArgs**。 *必须选择其中的一种方式。*
默认情况下,未启用任何 Assessor。 默认情况下,未启用任何 Assessor。
...@@ -461,7 +461,7 @@ Advisor ...@@ -461,7 +461,7 @@ Advisor
可选。 可选。
指定 Experiment 中的 Advisor 算法。 与 Tuner 和 Assessor 类似,有两种指定 Advisor 的方法。 一种方法是使用 SDK 提供的 Advisor ,需要设置 **builtinAdvisorName** 和 **classArgs**。 另一种方法,是使用用户自定义的 Advisor ,需要设置 **codeDirectory**\ ,** classFileName**\ ,** className** 和 **classArgs**。 指定 Experiment 中的 Advisor 算法。 与 Tuner 和 Assessor 类似,有两种指定 Advisor 的方法。 一种方法是使用 SDK 提供的 Advisor ,需要设置 **builtinAdvisorName** 和 **classArgs**。 另一种方法,是使用用户自定义的 Advisor ,需要设置 **codeDirectory**\ , **classFileName**\ , **className** 和 **classArgs**。
启用 Advisor 后,将忽略 Tuner 和 Advisor 的设置。 启用 Advisor 后,将忽略 Tuner 和 Advisor 的设置。
...@@ -552,6 +552,8 @@ trial ...@@ -552,6 +552,8 @@ trial
* *
**portList**\ : ``label``\ , ``beginAt``\ , ``portNumber`` 的键值对 list。 参考 `OpenPAI 教程 <https://github.com/microsoft/pai/blob/master/docs/job_tutorial.rst>`__ 。 **portList**\ : ``label``\ , ``beginAt``\ , ``portNumber`` 的键值对 list。 参考 `OpenPAI 教程 <https://github.com/microsoft/pai/blob/master/docs/job_tutorial.rst>`__ 。
.. cannot find `Reference <https://github.com/microsoft/pai/blob/2ea69b45faa018662bc164ed7733f6fdbb4c42b3/docs/faq.rst#q-how-to-use-private-docker-registry-job-image-when-submitting-an-openpai-job>`__ and `job tutorial of PAI <https://github.com/microsoft/pai/blob/master/docs/job_tutorial.rst>`__
在 Kubeflow 模式下,需要以下键。 在 Kubeflow 模式下,需要以下键。
...@@ -700,14 +702,12 @@ useActiveGpu ...@@ -700,14 +702,12 @@ useActiveGpu
用于指定 GPU 上存在其他进程时是否使用此 GPU。 默认情况下,NNI 仅在 GPU 中没有其他活动进程时才使用 GPU。 如果 **useActiveGpu** 设置为 true,则 NNI 无论某 GPU 是否有其它进程,都将使用它。 此字段不适用于 Windows 版的 NNI。 用于指定 GPU 上存在其他进程时是否使用此 GPU。 默认情况下,NNI 仅在 GPU 中没有其他活动进程时才使用 GPU。 如果 **useActiveGpu** 设置为 true,则 NNI 无论某 GPU 是否有其它进程,都将使用它。 此字段不适用于 Windows 版的 NNI。
preCommand pythonPath
^^^^^^^^^^ ^^^^^^^^^^
可选。 字符串。 可选。 字符串。
在远程机器执行其他命令之前,将执行预命令。 用户可以通过设置 **preCommand**,在远程机器上配置实验环境。 如果需要执行多个命令,请使用 ``&&`` 连接它们,例如 ``preCommand: command1 && command2&&…``。 用户可以通过设置 **pythonPath**,在远程机器上配置 Python 环境。
**注意**:因为 ``preCommand`` 每次都会在其他命令之前执行,所以强烈建议不要设置 **preCommand** 来对系统进行更改,即 ``mkdir`` or ``touch``。
remoteConfig remoteConfig
^^^^^^^^^^^^ ^^^^^^^^^^^^
...@@ -755,7 +755,7 @@ keyVault ...@@ -755,7 +755,7 @@ keyVault
如果使用 Azure 存储,则必需。 键值对。 如果使用 Azure 存储,则必需。 键值对。
将 **keyVault** 设置为 Azure 存储帐户的私钥。 参考https://docs.microsoft.com/zh-cn/azure/key-vault/key-vault-manage-with-cli2 。 将 **keyVault** 设置为 Azure 存储帐户的私钥。 参考 `此文档 <https://docs.microsoft.com/zh-cn/azure/key-vault/key-vault-manage-with-cli2>`__
* *
...@@ -823,6 +823,79 @@ reuse ...@@ -823,6 +823,79 @@ reuse
如果为 true,NNI 会重用 OpenPAI 作业,在其中运行尽可能多的 Trial。 这样可以节省创建新作业的时间。 用户需要确保同一作业中的每个 Trial 相互独立,例如,要避免从之前的 Trial 中读取检查点。 如果为 true,NNI 会重用 OpenPAI 作业,在其中运行尽可能多的 Trial。 这样可以节省创建新作业的时间。 用户需要确保同一作业中的每个 Trial 相互独立,例如,要避免从之前的 Trial 中读取检查点。
sharedStorage
^^^^^^^^^^^^^
storageType
^^^^^^^^^^^
必填。 字符串。
存储类型,支持 ``NFS`` 和 ``AzureBlob``。
localMountPoint
^^^^^^^^^^^^^^^
必填。 字符串。
已经或将要在本地挂载存储的绝对路径。
remoteMountPoint
^^^^^^^^^^^^^^^^
必填。 字符串。
远程挂载存储的绝对路径。
localMounted
^^^^^^^^^^^^
必填。 字符串。
``usermount``、``nnimount`` 和 ``nomount`` 其中之一。 ``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 nni 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。
nfsServer
^^^^^^^^^
可选。 字符串。
如果使用 NFS 存储,则必需。 NFS 服务器的 host。
exportedDirectory
^^^^^^^^^^^^^^^^^
可选。 字符串。
如果使用 NFS 存储,则必需。 NFS 服务器的导出目录。
storageAccountName
^^^^^^^^^^^^^^^^^^
可选。 字符串。
如果使用 AzureBlob 存储,则必需。 Azure 存储账户名。
storageAccountKey
^^^^^^^^^^^^^^^^^
可选。 字符串。
如果使用 AzureBlob 存储且 ``resourceGroupName`` 未设置,则必需。 Azure 存储账户密钥。
resourceGroupName
^^^^^^^^^^^^^^^^^
可选。 字符串。
如果使用 AzureBlob 存储且 ``storageAccountKey`` 未设置,则必需。 AzureBlob 容器所属的资源组。
containerName
^^^^^^^^^^^^^
可选。 字符串。
如果使用 AzureBlob 存储,则必需。 AzureBlob 容器名。
示例 示例
-------- --------
...@@ -959,12 +1032,8 @@ reuse ...@@ -959,12 +1032,8 @@ reuse
username: test username: test
sshKeyPath: /nni/sshkey sshKeyPath: /nni/sshkey
passphrase: qwert passphrase: qwert
# 在远程机器执行其他命令之前,将执行预命令。
# 以下是特定 python 环境的一个示例 # 以下是特定 python 环境的一个示例
# 如果想同时执行多条命令,使用 "&&" 连接他们 pythonPath: ${replace_to_python_environment_path_in_your_remote_machine}
# 预命令: source ${replace_to_absolute_path_recommended_here}/bin/activate
# 预命令: source ${replace_to_conda_path}/bin/activate ${replace_to_conda_env_name}
preCommand: export PATH=${replace_to_python_environment_path_in_your_remote_machine}:$PATH
PAI 模式 PAI 模式
^^^^^^^^ ^^^^^^^^
...@@ -1005,7 +1074,7 @@ PAI 模式 ...@@ -1005,7 +1074,7 @@ PAI 模式
host: 10.10.10.10 host: 10.10.10.10
Kubeflow 模式 Kubeflow 模式
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
使用 NFS 存储。 使用 NFS 存储。
......
...@@ -78,7 +78,7 @@ NNI 在 Windows 上的问题 ...@@ -78,7 +78,7 @@ NNI 在 Windows 上的问题
参考 `在 Windows 上 安装 NNI <InstallationWin.rst>`__ 参考 `在 Windows 上 安装 NNI <InstallationWin.rst>`__
更多常见问题解答 更多常见问题解答
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`标有常见问题标签的 Issue <https://github.com/microsoft/nni/labels/FAQ>`__ `标有常见问题标签的 Issue <https://github.com/microsoft/nni/labels/FAQ>`__
......
...@@ -66,7 +66,7 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N ...@@ -66,7 +66,7 @@ NNI 中有不同的错误类型。 根据严重程度,可分为三类。 当 N
Dispatcher 失败 Dispatcher 失败
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
Dispatcher 失败, 这通常是 Tuner 失败的情况。 可检查 Dispatcher 的日志来分析出现了什么问题。 对于内置的 Tuner,常见的错误可能是无效的搜索空间(不支持的搜索空间类型,或配置文件中的 Tuner 参数与 __init__ 函数所要求的不一致)。 Dispatcher 失败, 这通常是 Tuner 失败的情况。 可检查 Dispatcher 的日志来分析出现了什么问题。 对于内置的 Tuner,常见的错误可能是无效的搜索空间(不支持的搜索空间类型,或配置文件中的 Tuner 参数与 ``__init__`` 函数所要求的不一致)。
以后一种情况为例。 某自定义的 Tuner, __init__ 函数有名为 ``optimize_mode`` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误: 以后一种情况为例。 某自定义的 Tuner, __init__ 函数有名为 ``optimize_mode`` 的参数,但配置文件中没有提供此参数。NNI 就会因为初始化 Tuner 失败而造成 Experiment 失败。 可在 Web 界面看到如下错误:
......
如何从 Python 发起实验
===========================================
.. toctree::
:hidden:
启动用法 <python_api_start>
连接用法 <python_api_connect>
概述
--------
从 ``nni v2.0`` 起,我们提供了一种全新方式发起 Experiment 。 在此之前,您需要在 yaml 文件中配置实验,然后使用 ``nnictl`` 命令启动 Experiment 。 现在,您还可以直接在python文件中配置和运行 Experiment 。 如果您熟悉 Python 编程,那么无疑会为您带来很多便利。
运行一个新的 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>`__。
..
步骤2 - 初始化并配置 Experiment 实例
.. code-block:: python
experiment = Experiment(tuner=tuner, training_service='local')
现在,您已经在上一步中初始化了带有 Tuner 的 ``Experiment`` 实例,由于 ``training_service ='local'`` ,此实验将在本地计算机上运行。
查看 NNI 支持的所有 `训练平台 <../training_services.rst>`__。
.. code-block:: python
experiment.config.experiment_name = 'test'
experiment.config.trial_concurrency = 2
experiment.config.max_trial_number = 5
experiment.config.search_space = search_space
experiment.config.trial_command = 'python3 mnist.py'
experiment.config.trial_code_directory = Path(__file__).parent
experiment.config.training_service.use_active_gpu = True
使用类似 ``experiment.config.foo ='bar'`` 的形式来配置您的 Experiment 。
参阅不同平台所需的 `参数配置 <../reference/experiment_config.rst>`__。
..
步骤3 - 运行
.. code-block:: python
experiment.run(port=8081)
现在,您已经成功启动了 NNI Experiment。 您可以在浏览器中输入``localhost:8081`` 以实时观察实验。
.. Note:: 实验将在前台运行,实验结束后自动退出。 如果要以交互方式运行 Experiment,请在步骤3中使用 ``start()``。
示例
^^^^^^^
以下是这种新的启动方法的示例。 你可以在 :githublink:`mnist-tfv2/launch.py <examples/trials/mnist-tfv2/launch.py>` 找到实验代码。
.. code-block:: python
from pathlib import Path
from nni.experiment import Experiment
from nni.algorithms.hpo.hyperopt_tuner import HyperoptTuner
tuner = HyperoptTuner('tpe')
search_space = {
"dropout_rate": { "_type": "uniform", "_value": [0.5, 0.9] },
"conv_size": { "_type": "choice", "_value": [2, 3, 5, 7] },
"hidden_size": { "_type": "choice", "_value": [124, 512, 1024] },
"batch_size": { "_type": "choice", "_value": [16, 32] },
"learning_rate": { "_type": "choice", "_value": [0.0001, 0.001, 0.01, 0.1] }
}
experiment = Experiment(tuner, 'local')
experiment.config.experiment_name = 'test'
experiment.config.trial_concurrency = 2
experiment.config.max_trial_number = 5
experiment.config.search_space = search_space
experiment.config.trial_command = 'python3 mnist.py'
experiment.config.trial_code_directory = Path(__file__).parent
experiment.config.training_service.use_active_gpu = True
experiment.run(8081)
启动并管理一个新的 Experiment
------------------------------------------------------------------
我们将 ``NNI Client`` 中的 API 迁移到了这个新的启动方法。
通过 ``start()`` 而不是 ``run()`` 启动 Experiment,可以在交互模式下使用这些 API。
请参考 `示例用法 <./python_api_start.rst>`__ 和代码文件 :githublink:`python_api_start.ipynb <examples/trials/sklearn/classification/python_api_start.ipynb>`。
.. Note:: ``run()`` 轮询实验状态,并在实验完成时自动调用 ``stop()``。 ``start()`` 仅仅启动了一个新的 Experiment,所以需要通过调用 ``stop()`` 手动停止。
连接并管理已存在的 Experiment
----------------------------------------------------------------------------
如果您通过 ``nnictl`` 启动 Experiment,并且还想使用这些 API,那么可以使用 ``Experiment.connect()`` 连接到现有实验。
请参考 `示例用法 <./python_api_connect.rst>`__ 和代码文件 :githublink:`python_api_connect.ipynb <examples/trials/sklearn/classification/python_api_connect.ipynb>`。
.. Note:: 连接到现有 Experiment 时,可以使用 ``stop()`` 停止 Experiment。
API
---
.. autoclass:: nni.experiment.Experiment
:members:
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
``-p:`` 端口映射,映射主机端口和容器端口。 ``-p:`` 端口映射,映射主机端口和容器端口。
可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。 可以参考 `这里 <https://docs.docker.com/engine/reference/run/>`__,获取更多的 Docker 命令参考。
注意: 注意:
......
如何使用共享存储
=============================
如果您想在使用 NNI 期间使用自己的存储,共享存储可以满足您的需求。
与使用训练平台本机存储不同,共享存储可以为您带来更多便利。
Experiment 生成的所有信息都将存储在共享存储的 ``/nni`` 文件夹下。
Trial 产生的所有输出将位于共享存储中的 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}/nnioutput`` 文件夹下。
这就避免了在不同地方寻找实验相关信息的麻烦。
Trial 工作目录是 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}``,因此如果您在共享存储中上载数据,您可以像在 Trial 代码中打开本地文件一样打开它,而不必下载它。
未来我们将开发更多基于共享存储的实用功能。
.. note::
共享存储目前处于实验阶段。 我们建议在 Ubuntu/CentOS/RHEL 下使用 AzureBlob,在 Ubuntu/CentOS/RHEL/Fedora/Debian 下使用 NFS 进行远程访问。
确保您的本地机器可以挂载 NFS 或 fuse AzureBlob,并在远程运行时具有 sudo 权限。 我们目前只支持使用重用模式的训练平台下的共享存储。
示例
-------
如果要使用 AzureBlob,请在配置中添加以下内容。完整的配置文件请参阅 :githublink:`mnist-sharedstorage/config_azureblob.yml <examples/trials/mnist-sharedstorage/config_azureblob.yml>`。
.. code-block:: yaml
sharedStorage:
storageType: AzureBlob
localMountPoint: ${your/local/mount/point}
remoteMountPoint: ${your/remote/mount/point}
storageAccountName: ${replace_to_your_storageAccountName}
storageAccountKey: ${replace_to_your_storageAccountKey}
# 如果未设置 storageAccountKey,则首先需要在 Azure CLI 中使用 `az login` 并设置 resourceGroupName。
# resourceGroupName: ${replace_to_your_resourceGroupName}
containerName: ${replace_to_your_containerName}
# usermount 表示已将此存储挂载在 localMountPoint 上
# nnimount 表示 NNI 将尝试将此存储挂载在 localMountPoint 上
# nomount 表示存储不会挂载在本地机器上,将在未来支持部分存储。
localMounted: nnimount
如果要使用 NFS,请在配置中添加以下内容。完整的配置文件请参阅 :githublink:`mnist-sharedstorage/config_nfs.yml <examples/trials/mnist-sharedstorage/config_nfs.yml>`。
.. code-block:: yaml
sharedStorage:
storageType: NFS
localMountPoint: ${your/local/mount/point}
remoteMountPoint: ${your/remote/mount/point}
nfsServer: ${nfs-server-ip}
exportedDirectory: ${nfs/exported/directory}
# usermount 表示已将此存储挂载在 localMountPoint 上
# nnimount 表示 NNI 将尝试将此存储挂载在 localMountPoint 上
# nomount 表示存储不会挂载在本地机器上,将在未来支持部分存储。
localMounted: nnimount
...@@ -20,38 +20,53 @@ ...@@ -20,38 +20,53 @@
如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。 如果对某个或最新版本的代码感兴趣,可通过源代码安装 NNI。
先决条件:``python 64-bit >=3.6``\ , ``git``\ , ``wget`` 先决条件:``python 64-bit >=3.6``, ``git``
.. code-block:: bash .. code-block:: bash
git clone -b v1.9 https://github.com/Microsoft/nni.git git clone -b v2.0 https://github.com/Microsoft/nni.git
cd nni cd nni
./install.sh python3 -m pip install --upgrade pip setuptools
python3 setup.py develop
从 NNI 源代码构建 Wheel 包
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
上一节介绍了如何在 `开发模式 <https://setuptools.readthedocs.io/en/latest/userguide/development_mode.html>`__ 下安装NNI。
如果要执行持久安装,建议您构建自己的 wheel 软件包并从wheel 安装。
.. code-block:: bash
git clone -b v2.0 https://github.com/Microsoft/nni.git
cd nni
export NNI_RELEASE=2.0
python3 -m pip install --upgrade pip setuptools wheel
python3 setup.py clean --all
python3 setup.py build_ts
python3 setup.py bdist_wheel -p manylinux1_x86_64
python3 -m pip install dist/nni-2.0-py3-none-manylinux1_x86_64.whl
在 Docker 映像中使用 NNI 在 Docker 映像中使用 NNI
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
也可将 NNI 安装到 docker 映像中。 参考 :githublink:`这里 <deployment/docker/README.rst>` 来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 ``docker pull msranni/nni:latest``。 也可将 NNI 安装到 docker 映像中。 参考 `这里 <../Tutorial/HowToUseDocker.rst>`__ 来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 ``docker pull msranni/nni:latest``。
验证安装 验证安装
------------------- -------------------
以下示例基于 TensorFlow 1.x 构建。 确保运行环境中使用的是 **TensorFlow 1.x**。
* *
通过克隆源代码下载示例。 通过克隆源代码下载示例。
.. code-block:: bash .. code-block:: bash
git clone -b v1.9 https://github.com/Microsoft/nni.git git clone -b v2.0 https://github.com/Microsoft/nni.git
* *
运行 MNIST 示例。 运行 MNIST 示例。
.. code-block:: bash .. code-block:: bash
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml nnictl create --config nni/examples/trials/mnist-pytorch/config.yml
* *
在命令行中等待输出 ``INFO: Successfully started experiment!`` 。 此消息表明实验已成功启动。 通过命令行输出的 Web UI url 来访问 Experiment 的界面。 在命令行中等待输出 ``INFO: Successfully started experiment!`` 。 此消息表明实验已成功启动。 通过命令行输出的 Web UI url 来访问 Experiment 的界面。
......
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