Unverified Commit 91d9a797 authored by Yuge Zhang's avatar Yuge Zhang Committed by GitHub
Browse files

Adopt symbolic links in Chinese documentation (#4345)


Co-authored-by: default avatarjiahangxu <jiahangxu@microsoft.com>
parent 0e0ee86d
如何从 Python 发起实验
===========================================
.. toctree::
:hidden:
启动用法 <python_api_start>
连接用法 <python_api_connect>
概述
--------
从 ``nni v2.0`` 起,我们提供了一种全新方式发起 Experiment 。 在此之前,您需要在 yaml 文件中配置实验,然后使用 ``nnictl`` 命令启动 Experiment 。 现在,您还可以直接在python文件中配置和运行 Experiment 。 如果您熟悉 Python 编程,那么无疑会为您带来很多便利。
运行一个新的 Experiment
------------------------------------------------------------------
成功安装 ``nni`` 之后,您可以通过以下3个步骤使用 Python 脚本开始 Experiment 。
..
步骤2 - 初始化并配置 Experiment 实例
.. code-block:: python
from nni.experiment import Experiment
experiment = Experiment(tuner, '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.experiment_name = 'test'
experiment.config.max_trial_number = 5
experiment.config.training_service.use_active_gpu = True
使用类似 ``experiment.config.foo ='bar'`` 的形式来配置您的 Experiment 。
查看 NNI 所有的 `内置 Tuner <../builtin_tuner.rst>`__。
参阅不同平台所需的 `参数配置 <../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
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=tuner, training_service='local')
experiment.config.experiment_name = 'MNIST example'
experiment.config.trial_concurrency = 2
experiment.config.max_trial_number = 10
experiment.config.search_space = search_space
experiment.config.trial_command = 'python3 mnist.py'
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.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。
恢复/查看和管理已停止的 Experiment
--------------------------------------------------------------------------------------
您可以使用 ``Experiment.resume()`` 和 ``Experiment.view()`` 来恢复和查看停止的 Experiment,这些函数的行为类似于 ``nnictl resume`` 和 ``nnictl view``。
如果你想管理 Experiment,设置 ``wait_completion`` 为 ``False`` ,函数将返回一个 ``Experiment`` 实例。 更多参数请参考API。
API
---
.. autoclass:: nni.experiment.Experiment
:members:
../../en_US/Tutorial/HowToLaunchFromPython.rst
\ No newline at end of file
如何在 NNI 中使用 Docker
================================
概述
--------
`Docker <https://www.docker.com/>`__ 是一种工具, 可通过启动容器, 使用户能够更轻松地根据自己的操作系统部署和运行应用程序。 Docker 不是虚拟机,它不创建虚拟操作系统,但它允许不同的应用程序使用相同的操作系统内核,并通过容器隔离不同的应用程序。
用户可使用 Docker 来启动 NNI Experiment。 NNI 在 Docker Hub 上也提供了官方的 Docker 映像 `msranni/nni <https://hub.docker.com/r/msranni/nni>`__ 。
在本机使用docker
-----------------------------
第一步:Docker 的安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在开始使用 Docker 运行 NNI Experiment 前,首先需要在本机安装 Docker 运行程序。 `参考这里 <https://docs.docker.com/install/linux/docker-ce/ubuntu/>`__。
第二步:启动 Docker 容器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果已经在本地机器上安装了 Docker 程序,可以启动 Docker 容器来运行 NNI 示例。 因为 NNI 会在 Docker 容器里启动 Web 界面进程,并监听端口,因此需要指定一个在主机和 Docker 容器映射的端口,可在容器外访问 Docker 容器里的进程。 通过访问主机的 IP 和端口,就可以访问容器里的 Web 网页进程了。
例如,通过如下命令来启动 Docker 容器:
.. code-block:: bash
docker run -i -t -p [hostPort]:[containerPort] [image]
``-i:`` 使用交互模式启动 Docker。
``-t:`` 为 Docker 分配一个输入终端。
``-p:`` 端口映射,映射主机端口和容器端口。
可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。
注意:
.. code-block:: bash
NNI 目前仅支持本机模式下的 Ubuntu 和 macOS 系统,请使用正确的 Docker 映像类型。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
第三步:在 Docker 容器里运行 NNI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果直接使用 NNI 的官方镜像 ``msranni/nni`` 来启动 Experiment,可以直接使用 ``nnictl`` 命令。 NNI 官方镜像有最基础的 Python 环境和深度学习框架。
如果使用自己的 Docker 镜像,需要首先 `安装 NNI <InstallationLinux.rst>`__。
如果要使用 NNI 的官方示例,可以通过以下 git 命令来克隆 NNI:
.. code-block:: bash
git clone https://github.com/Microsoft/nni.git
然后可以进入 ``nni/examples/trials`` 文件夹来启动 Experiment。
准备好 NNI 的环境后,可使用 ``nnictl`` 命令开始新的 Experiment。 `入门教程 <QuickStart.rst>`__。
在远程平台上运行 Docker
---------------------------------
NNI 支持在 `远程平台 <../TrainingService/RemoteMachineMode.rst>`__ 上启动 Experiment,并在远程机器里运行 Trial。 因为 Docker 可以运行独立的 Ubuntu 系统和 SSH 服务,因此 Docker 容器可以作为远程平台来运行 NNI。
第一步:设置 Docker 环境
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你首先应该在远程机器上安装docker工具,`参考这里 <https://docs.docker.com/install/linux/docker-ce/ubuntu/>`__。
为保证 Docker 容器可以被 NNI Experiment 连接上,要在自己的 Docker 容器里安装 SSH 服务,或使用已经配置好 SSH 的映像。 如果要在 Docker 容器里使用 SSH 服务,需要配置 SSH 密码登录或者私钥登录,`参考这里 <https://docs.docker.com/engine/examples/running_ssh_service/>`__。
注意:
.. code-block:: text
NNI 的官方镜像 msranni/nni 暂不支持 SSH 服务,应构建自己的带有 SSH 服务的映像,或者使用其他的带有 SSH 服务的镜像。
第二步:在远程机器上启动 Dokcer 容器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SSH 服务需要端口,要把 Docker 的 SSH 服务端口暴露给 NNI 作为连接端口。 例如,如果设置容器的端口 ``A`` 作为 SSH 端口,应把端口 ``A`` 映射到主机的端口 ``B``,NNI 会连接端口 ``B`` 作为 SSH 服务端口,主机会把连接到端口 ``B`` 的连接映射到端口 ``A``,NNI 就可以连接到容器中了。
例如,通过如下命令来启动 Docker 容器:
.. code-block:: bash
docker run -dit -p [hostPort]:[containerPort] [image]
``containerPort`` 是在 Docker 容器中指定的端口,``hostPort`` 是主机的端口。 可设置 NNI 配置,连接到``hostPort``,这个连接会被转发到 Docker 容器。
可以参考 `这里 <https://docs.docker.com/v17.09/edge/engine/reference/run/>`__,获取更多的命令参考。
注意:
.. code-block:: bash
如果使用自己构建的 Docker 映像,确保有基础的 Python 运行时和 NNI SDK 环境。 如果想要在 Docker 容器里面使用 GPU,请使用 nvidia-docker。
第三步:运行 NNI Experiment
^^^^^^^^^^^^^^^^^^^^^^^^^^^
可以在配置文件中,设置训练平台为远程平台,然后设置 ``machineList`` 配置,`参考这里 <../TrainingService/RemoteMachineMode.rst>`__。 注意应该设置正确的 ``port``\ , ``username``\ , 以及 ``passWd`` 或 ``sshKeyPath`` 。
``port:`` 主机的端口,映射到 Docker 的 SSH 端口。
``username:`` Docker 容器的用户名。
``passWd:`` Docker 容器的密码。
``sshKeyPath:`` Docker 容器私钥的存储路径。
设置完配置文件,你就可以启动实验了,`参考这里 <QuickStart.rst>`__。
../../en_US/Tutorial/HowToUseDocker.rst
\ No newline at end of file
如何使用共享存储
=============================
如果您想在使用 NNI 期间使用自己的存储,共享存储可以满足您的需求。
与使用训练平台本机存储不同,共享存储可以为您带来更多便利。
Experiment 生成的所有信息都将存储在共享存储的 ``/nni`` 文件夹下。
Trial 产生的所有输出将位于共享存储中的 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}/nnioutput`` 文件夹下。
这就避免了在不同地方寻找实验相关信息的麻烦。
Trial 工作目录是 ``/nni/{EXPERIMENT_ID}/trials/{TRIAL_ID}``,因此如果您在共享存储中上载数据,您可以像在 Trial 代码中打开本地文件一样打开它,而不必下载它。
未来我们将开发更多基于共享存储的实用功能。 配置参考在 `这里 <../reference/experiment_config.html#sharedstorageconfig>`_。
.. 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
../../en_US/Tutorial/HowToUseSharedStorage.rst
\ No newline at end of file
如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor
=======================================================================================
.. contents::
概述
--------
NNI 提供了大量可用于超参优化的 `内置 Tuner <../Tuner/BuiltinTuner.rst>`_, `Advisor <../Tuner/HyperbandAdvisor.rst>`__ 和 `Assessor <../Assessor/BuiltinAssessor.rst>`__ ,其他算法可在 NNI 安装后,通过 ``nnictl algo register --meta <path_to_meta_file>`` 安装。 可通过 ``nnictl package list`` 命令查看其它算法。
NNI 中,还可以创建自定义的 Tuner,Advisor 和 Assessor。 并根据 Experiment 配置文件的说明来使用这些自定义的算法,可参考 `自定义 Tuner <../Tuner/CustomizeTuner.rst>`_ , `Advisor <../Tuner/CustomizeAdvisor.rst>`__ 和 `Assessor <../Assessor/CustomizeAssessor.rst>`__。
用户可将自定义的算法作为内置算法安装,以便像其它内置 Tuner、Advisor、Assessor 一样使用。 更重要的是,这样更容易向其他人分享或发布自己实现的算法。 自定义的 Tuner、Advisor、Assessor 可作为内置算法安装到 NNI 中,安装完成后,可在 Experiment 配置文件中像内置算法一样使用。 例如,将自定义的算法 ``mytuner`` 安装到 NNI 后,可在配置文件中直接使用:
.. code-block:: yaml
tuner:
builtinTunerName: mytuner
将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor
------------------------------------------------------------------------
可参考下列步骤来构建自定义的 Tuner、Assessor、Advisor,并作为内置算法安装。
1. 创建自定义的 Tuner、Assessor、Advisor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
参考下列说明来创建:
* `自定义 Tuner <../Tuner/CustomizeTuner.rst>`_
* `自定义 Assessor <../Assessor/CustomizeAssessor.rst>`_
* `自定义 Advisor <../Tuner/CustomizeAdvisor.rst>`_
2. (可选) 创建 Validator 来验证 classArgs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NNI 提供了 ``ClassArgsValidator`` 接口,自定义的算法可用它来验证 Experiment 配置文件中传给构造函数的 classArgs 参数。
``ClassArgsValidator`` 接口如下:
.. code-block:: python
class ClassArgsValidator(object):
def validate_class_args(self, **kwargs):
"""
Experiment 配置中的 classArgs 字段会作为 dict
传入到 kwargs。
"""
pass
例如,可将 Validator 如下实现:
.. code-block:: python
from schema import Schema, Optional
from nni import ClassArgsValidator
class MedianstopClassArgsValidator(ClassArgsValidator):
def validate_class_args(self, **kwargs):
Schema({
Optional('optimize_mode'): self.choices('optimize_mode', 'maximize', 'minimize'),
Optional('start_step'): self.range('start_step', int, 0, 9999),
}).validate(kwargs)
在 Experiment 启动时,会调用 Validator,检查 classArgs 字段是否正确。
3. 将自定义算法包安装到 python 环境 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
首先,自定义的算法需要被打成 python 包。 然后你可以通过以下命令把算法包安装到 python 环境中:
* 在包目录中运行 ``python setup.py develop``,此命令会在开发者模式下安装包。如果算法正在开发中,推荐使用此命令。
* 在包目录中运行 ``python setup.py bdist_wheel`` 命令,会构建 whl 文件。 可通过 ``pip3 install sklearn`` 命令来安装。
4. 准备源文件
^^^^^^^^^^^^^^^^^^^^
使用以下关键词创建 YAML 文件:
* ``algoType``: 算法类型,可为 ``tuner``, ``assessor``, ``advisor``
* ``builtinName``: 在 Experiment 配置文件中使用的内置名称
* `className`: Tuner 类名,包括模块名,例如:``demo_tuner.DemoTuner``
* `classArgsValidator`: 类的参数验证类 validator 的类名,包括模块名,如:``demo_tuner.MyClassArgsValidator``
YAML 文件示例:
.. code-block:: yaml
algoType: tuner
builtinName: demotuner
className: demo_tuner.DemoTuner
classArgsValidator: demo_tuner.MyClassArgsValidator
5. 将自定义算法包注册到 NNI 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令将自定义算法加入到 NNI 的内置算法中:
.. code-block:: bash
nnictl algo register --meta <path_to_meta_file>
``<path_to_meta_file>`` 是上一节创建的 YAML 文件的路径。
参考 `自定义 Tuner 示例 <#tuner-tuner>`_ 获取完整示例。
在 Experiment 中使用安装的内置算法
--------------------------------------------------
在自定义算法安装后,可用其它内置 Tuner、Assessor、Advisor 的方法在 Experiment 配置文件中使用,例如:
.. code-block:: yaml
tuner:
builtinTunerName: demotuner
classArgs:
# 可选项: maximize, minimize
optimize_mode: maximize
使用 ``nnictl algo`` 管理内置的算法
----------------------------------------------------------------------------------------------
列出已安装的包
^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令列出已安装的包:
.. code-block:: bash
nnictl algo list
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| Name | Type | Source | Class Name | Module Name |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| TPE | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Random | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Anneal | tuners | nni | HyperoptTuner | nni.hyperopt_tuner.hyperopt_tuner |
| Evolution | tuners | nni | EvolutionTuner | nni.evolution_tuner.evolution_tuner |
| BatchTuner | tuners | nni | BatchTuner | nni.batch_tuner.batch_tuner |
| GridSearch | tuners | nni | GridSearchTuner | nni.gridsearch_tuner.gridsearch_tuner |
| NetworkMorphism | tuners | nni | NetworkMorphismTuner | nni.networkmorphism_tuner.networkmo... |
| MetisTuner | tuners | nni | MetisTuner | nni.metis_tuner.metis_tuner |
| GPTuner | tuners | nni | GPTuner | nni.gp_tuner.gp_tuner |
| PBTTuner | tuners | nni | PBTTuner | nni.pbt_tuner.pbt_tuner |
| SMAC | tuners | nni | SMACTuner | nni.smac_tuner.smac_tuner |
| PPOTuner | tuners | nni | PPOTuner | nni.ppo_tuner.ppo_tuner |
| Medianstop | assessors | nni | MedianstopAssessor | nni.medianstop_assessor.medianstop_... |
| Curvefitting | assessors | nni | CurvefittingAssessor | nni.curvefitting_assessor.curvefitt... |
| Hyperband | advisors | nni | Hyperband | nni.hyperband_advisor.hyperband_adv... |
| BOHB | advisors | nni | BOHB | nni.bohb_advisor.bohb_advisor |
+-----------------+------------+-----------+----------------------+------------------------------------------+
卸载内置算法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行以下命令卸载已安装的包:
``nnictl algo unregister <包名称>``
例如:
``nnictl algo unregister demotuner``
将自定义算法从 v1.x 版本转到 v2.x 版本
--------------------------------------------------------------------------------------------------------------
所有需要修改的就是删除 ``setup.py`` 中的 ``NNI Package :: tuner`` 元数据并添加在 在 4 中提到的元文件。然后你可以参考 `将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor <#id3>`__ 注册你的自定义算法。
示例:将自定义 Tuner 注册为内置 Tuner
----------------------------------------------------------------------------------------------------
步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
将自定义 Tuner 包安装到 Python 环境 中
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
有两种方法可将软件包安装到 python 环境中:
方法 1: 从目录安装
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
``python setup.py develop``
此命令会将 ``nni/examples/tuners/customized_tuner`` 目录编译为 pip 安装源。
方法 2: 从 whl 文件安装
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
步骤 1: 在 ``nni/examples/tuners/customized_tuner`` 目录下,运行:
``python setup.py bdist_wheel``
此命令会从 pip 安装源编译出 whl 文件。
步骤 2: 运行命令
``pip install dist/demo_tuner-0.1-py3-none-any.whl``
将自定义 Tuner 注册为内置 Tuner
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行命令
``nnictl algo register --meta meta_file.yml``
检查已注册的内置算法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
运行命令 ``nnictl algo list``,可以看到已安装的 demotuner:
.. code-block:: bash
+-----------------+------------+-----------+--------=-------------+------------------------------------------+
| 名称 | 类型 | 来源 | 类名 | 模块名 |
+-----------------+------------+-----------+----------------------+------------------------------------------+
| demotuner | tuners | User | DemoTuner | demo_tuner |
+-----------------+------------+-----------+----------------------+------------------------------------------+
../../en_US/Tutorial/InstallCustomizedAlgos.rst
\ No newline at end of file
.. 0f5fee8263b2829f156835c1e895bf2e
在 Linux 和 Mac 下安装
======================
......
.. a6dd4da0aa88f250a7b1146566021ce8
在 Windows 上安装
==================
......
../../en_US/Tutorial/NNSpider.md
\ No newline at end of file
.. role:: raw-html(raw)
:format: html
nnictl
======
介绍
------------
**nnictl** 是一个命令行工具,用来控制 NNI Experiment,如启动、停止、继续 Experiment,启动、停止 NNIBoard 等等。
命令
--------
nnictl 支持的命令:
* `nnictl create <#create>`__
* `nnictl resume <#resume>`__
* `nnictl view <#view>`__
* `nnictl stop <#stop>`__
* `nnictl update <#update>`__
* `nnictl trial <#trial>`__
* `nnictl top <#top>`__
* `nnictl experiment <#experiment>`__
* `nnictl platform <#platform>`__
* `nnictl config <#config>`__
* `nnictl log <#log>`__
* `nnictl webui <#webui>`__
* `nnictl algo <#algo>`__
* `nnictl ss_gen <#ss_gen>`__
* `nnictl --version <#version>`__
管理 Experiment
^^^^^^^^^^^^^^^^^^^^
:raw-html:`<a name="create"></a>`
nnictl create
^^^^^^^^^^^^^
*
说明
此命令使用参数中的配置文件,来创建新的实验。
此命令成功完成后,上下文会被设置为此 Experiment。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此 Experiment。
*
用法
.. code-block:: bash
nnictl create [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config, -c
- True
-
- Experiment 的 YAML 配置文件
* - --port, -p
- False
-
- RESTful 服务的端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在默认端口 8080 上创建一个新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-pytorch/config.yml
..
在指定的端口 8088 上创建新的 Experiment
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-pytorch/config.yml --port 8088
..
在指定的端口 8088 上创建新的 Experiment,并启用调试模式
.. code-block:: bash
nnictl create --config nni/examples/trials/mnist-pytorch/config.yml --port 8088 --debug
注意:
.. code-block:: text
调试模式会禁用 Trialkeeper 中的版本校验功能。
:raw-html:`<a name="resume"></a>`
nnictl resume
^^^^^^^^^^^^^
*
说明
使用此命令恢复已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl resume [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要恢复的 Experiment 标识
* - --port, -p
- False
-
- 要恢复的 Experiment 使用的 RESTful 服务端口
* - --debug, -d
- False
-
- 设置为调试模式
* - --foreground, -f
- False
-
- 设为前台运行模式,将日志输出到终端
*
示例
..
在指定的端口 8088 上恢复 Experiment
.. code-block:: bash
nnictl resume [experiment_id] --port 8088
:raw-html:`<a name="view"></a>`
nnictl view
^^^^^^^^^^^
*
说明
使用此命令查看已停止的 Experiment。
*
用法
.. code-block:: bash
nnictl view [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要查看的 Experiment 标识
* - --port, -p
- False
-
- 要查看的 Experiment 使用的 RESTful 服务端口
*
示例
..
在指定的端口 8088 上查看 Experiment
.. code-block:: bash
nnictl view [experiment_id] --port 8088
:raw-html:`<a name="stop"></a>`
nnictl stop
^^^^^^^^^^^
*
说明
使用此命令来停止正在运行的单个或多个 Experiment。
*
用法
.. code-block:: bash
nnictl stop [Options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 要停止的 Experiment 标识
* - --port, -p
- False
-
- 要停止的 Experiment 使用的 RESTful 服务端口
* - --all, -a
- False
-
- 停止所有 Experiment
*
详细信息及样例
#.
如果没有指定 id,并且当前有运行的 Experiment,则会停止该 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop
#.
如果指定了 id,并且此 id 匹配正在运行的 Experiment,nnictl 会停止相应的 Experiment,否则会输出错误信息。
.. code-block:: bash
nnictl stop [experiment_id]
#.
如果指定了端口,并且此端口有正在运行的 Experiment,则会停止此 Experiment。
.. code-block:: bash
nnictl stop --port 8080
#.
可使用 'nnictl stop --all' 来停止所有的 Experiment。
.. code-block:: bash
nnictl stop --all
#.
如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的 Experiment。
#. 如果 id 不存在,但匹配了某个Experiment 的 id 前缀,nnictl 会停止匹配的Experiment 。
#. 如果 id 不存在,但匹配多个 Experiment id 的前缀,nnictl 会输出这些 id 的信息。
:raw-html:`<a name="update"></a>`
nnictl update
^^^^^^^^^^^^^
*
**nnictl update searchspace**
*
说明
可以用此命令来更新 Experiment 的搜索空间。
*
用法
.. code-block:: bash
nnictl update searchspace [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --filename, -f
- True
-
- 新的搜索空间文件名
*
示例
``使用 'examples/trials/mnist-pytorch/search_space.json' 来更新 Experiment 的搜索空间``
.. code-block:: bash
nnictl update searchspace [experiment_id] --filename examples/trials/mnist-pytorch/search_space.json
*
**nnictl update concurrency**
*
说明
可以用此命令来更新 Experiment 的并发设置。
*
用法
.. code-block:: bash
nnictl update concurrency [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 允许同时运行的 Trial 的数量
*
示例
..
更新 Experiment 的并发数量
.. code-block:: bash
nnictl update concurrency [experiment_id] --value [concurrency_number]
*
**nnictl update duration**
*
说明
可以用此命令来更新实验的运行时间。
*
用法
.. code-block:: bash
nnictl update duration [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 形如 '1m' (一分钟)或 '2h' (两小时)的字符串。 后缀可以为 's'(秒), 'm'(分钟), 'h'(小时)或 'd'(天)。
*
示例
..
修改 Experiment 的执行时间
.. code-block:: bash
nnictl update duration [experiment_id] --value [duration]
*
**nnictl update trialnum**
*
说明
可以用此命令来更新实验的最大尝试数量。
*
用法
.. code-block:: bash
nnictl update trialnum [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --value, -v
- True
-
- 需要设置的 maxtrialnum 的数量
*
示例
..
更新 Experiment 的 Trial 数量
.. code-block:: bash
nnictl update trialnum [experiment_id] --value [trial_num]
:raw-html:`<a name="trial"></a>`
nnictl trial
^^^^^^^^^^^^
*
**nnictl trial ls**
*
说明
使用此命令来查看 Trial 的信息。 注意如果 ``head`` 或 ``tail`` 被设置, 则只有完成的 Trial 会被展示。
*
用法
.. code-block:: bash
nnictl trial ls
nnictl trial ls --head 10
nnictl trial ls --tail 10
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head
- False
-
- 依据最高默认指标列出的项数。
* - --tail
- False
-
- 依据最低默认指标列出的项数。
*
**nnictl trial kill**
*
说明
此命令用于终止 Trial。
*
用法
.. code-block:: bash
nnictl trial kill [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- True
-
- 需要终止的 Trial 的 ID。
*
示例
..
结束 Trial 任务
.. code-block:: bash
nnictl trial kill [experiment_id] --trial_id [trial_id]
:raw-html:`<a name="top"></a>`
nnictl top
^^^^^^^^^^
*
说明
查看正在运行的 Experiment。
*
用法
.. code-block:: bash
nnictl top
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --time, -t
- False
-
- 刷新 Experiment 状态的时间间隔,单位为秒,默认值为 3 秒。
:raw-html:`<a name="experiment"></a>`
管理 Experiment 信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl experiment show**
*
说明
显示 Experiment 的信息。
*
用法
.. code-block:: bash
nnictl experiment show
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment status**
*
说明
显示 Experiment 的状态。
*
用法
.. code-block:: bash
nnictl experiment status
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
*
**nnictl experiment list**
*
说明
显示正在运行的 Experiment 的信息
*
用法
.. code-block:: bash
nnictl experiment list [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --all
- False
-
- 列出所有 Experiment
*
**nnictl experiment delete**
*
说明
删除一个或所有 Experiment,包括日志、结果、环境信息和缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
*
用法
.. code-block:: bash
nnictl experiment delete [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --all
- False
-
- 删除所有 Experiment
*
**nnictl experiment export**
*
说明
使用此命令,可将 Trial 的 reward 和超参导出为 csv 文件。
*
用法
.. code-block:: bash
nnictl experiment export [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
* - --filename, -f
- True
-
- 文件的输出路径
* - --type
- True
-
- 输出文件类型,仅支持 "csv" 和 "json"
* - --intermediate, -i
- False
-
- 是否保存中间结果
*
示例
..
将 Experiment 中所有 Trial 数据导出为 JSON 格式
.. code-block:: bash
nnictl experiment export [experiment_id] --filename [file_path] --type json --intermediate
*
**nnictl experiment import**
*
说明
可使用此命令将以前的 Trial 超参和结果导入到 Tuner 中。 数据会传入调参算法中(即 Tuner 或 Advisor)。
*
用法
.. code-block:: bash
nnictl experiment import [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要将数据导入的 Experiment 的 ID
* - --filename, -f
- True
-
- 需要导入的 JSON 格式的数据文件
*
详细说明
NNI 支持导入用户的数据,确保数据格式正确。 样例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9}, "value": 0.03},
{"parameter": {"x": 0.4, "y": 0.8}, "value": 0.05},
{"parameter": {"x": 0.3, "y": 0.7}, "value": 0.04}
]
最顶层列表的每个元素都是一个样例。 对于内置的 Tuner 和 Advisor,每个样本至少需要两个主键:``parameter`` 和 ``value``。 ``parameter`` 必须与 Experiment 的搜索空间相匹配,``parameter`` 中的所有的主键(或超参)都必须与搜索空间中的主键相匹配。 否则, Tuner 或 Advisor 可能会有无法预期的行为。 ``Value`` 应当遵循与 ``nni.report_final_result`` 的输入值一样的规则,即要么时一个数字,或者是包含 ``default`` 主键的 dict。 对于自定义的 Tuner 或 Advisor,根据实现的不同,此文件可以是任意的 JSON 内容(例如,``import_data``)。
也可以用 `nnictl experiment export <#export>`__ 命令导出 Experiment 已经运行过的 Trial 超参和结果。
当前,以下 Tuner 和 Advisor 支持导入数据:
.. code-block:: yaml
builtinTunerName: TPE, Anneal, GridSearch, MetisTuner
builtinAdvisorName: BOHB
*如果要将数据导入到 BOHB Advisor,建议像 NNI 一样,增加 "TRIAL_BUDGET" 参数,否则,BOHB 会使用 max_budget 作为 "TRIAL_BUDGET"。* 示例如下:
.. code-block:: json
[
{"parameter": {"x": 0.5, "y": 0.9, "TRIAL_BUDGET": 27}, "value": 0.03}
]
*
示例
..
将数据导入运行中的 Experiment
.. code-block:: bash
nnictl experiment import [experiment_id] -f experiment_data.json
*
**nnictl experiment save**
*
说明
保存 NNI Experiment 的元数据及代码数据
*
用法
.. code-block:: bash
nnictl experiment save [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- True
-
- 要保存的 Experiment 标识
* - --path, -p
- False
-
- 保存 NNI Experiment 数据的路径,默认为当前工作目录
* - --saveCodeDir, -s
- False
-
- 是否保存 Experiment 的代码目录的数据,默认为 False
*
示例
..
保存 Experiment
.. code-block:: bash
nnictl experiment save [experiment_id] --saveCodeDir
*
**nnictl experiment load**
*
说明
加载 NNI Experiment
*
用法
.. code-block:: bash
nnictl experiment load [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --path, -p
- True
-
- NNI 包的文件路径
* - --codeDir, -c
- True
-
- 要加载的实验的代码目录,加载的 NNI 包中的代码也会放到此目录下。
* - --logDir, -l
- False
-
- 存放加载的实验的日志的目录。
* - --searchSpacePath, -s
- True
-
- 存放加载的实验的搜索空间文件的路径(路径包含文件名)。 默认是 $codeDir/search_space.json。
*
示例
..
加载 Experiment
.. code-block:: bash
nnictl experiment load --path [path] --codeDir [codeDir]
:raw-html:`<a name="platform"></a>`
管理平台信息
^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl platform clean**
*
说明
用于清理目标平台上的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
*
注意
如果目标平台正在被别人使用,可能会造成他人的意外错误。
*
用法
.. code-block:: bash
nnictl platform clean [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --config
- True
-
- 创建 Experiment 时的 YAML 配置文件路径。
:raw-html:`<a name="config"></a>`
nnictl config show
^^^^^^^^^^^^^^^^^^
*
说明
显示当前上下文信息。
*
用法
.. code-block:: bash
nnictl config show
:raw-html:`<a name="log"></a>`
管理日志
^^^^^^^^^^
*
**nnictl log stdout**
*
说明
显示 stdout 日志内容。
*
用法
.. code-block:: bash
nnictl log stdout [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stdout 开始的若干行
* - --tail, -t
- False
-
- 显示 stdout 结尾的若干行
* - --path, -p
- False
-
- 显示 stdout 文件的路径
*
示例
..
显示 stdout 结尾的若干行
.. code-block:: bash
nnictl log stdout [experiment_id] --tail [lines_number]
*
**nnictl log stderr**
*
说明
显示 stderr 日志内容。
*
用法
.. code-block:: bash
nnictl log stderr [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- 需要设置的 Experiment 的 id
* - --head, -h
- False
-
- 显示 stderr 开始的若干行
* - --tail, -t
- False
-
- 显示 stderr 结尾的若干行
* - --path, -p
- False
-
- 显示 stderr 文件的路径
*
**nnictl log trial**
*
说明
显示 Trial 日志的路径。
*
用法
.. code-block:: bash
nnictl log trial [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Trial 的 Experiment ID
* - --trial_id, -T
- False
-
- 所需要找日志路径的 Trial 的 ID,当 id 不为空时,此值也为必需。
:raw-html:`<a name="webui"></a>`
Manage webui
^^^^^^^^^^^^
*
**nnictl webui url**
*
说明
显示 Experiment 的 Web 界面链接
*
用法
.. code-block:: bash
nnictl webui url [options]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - id
- False
-
- Experiment ID
:raw-html:`<a name="algo"></a>`
管理内置算法
^^^^^^^^^^^^^^^^^^^^^^^^^
*
**nnictl algo register**
*
说明
将自定义的算法注册为内置的 Tuner、Assessor、Advisor。
*
用法
.. code-block:: bash
nnictl algo register --meta <path_to_meta_file>
``<path_to_meta_file>`` 是 yaml 格式元数据文件的路径,具有以下键:
*
``algoType``: 算法类型,可为 ``tuner``, ``assessor``, ``advisor``
*
``builtinName``: 在 Experiment 配置文件中使用的内置名称
*
``className`` : Tuner 类名,包括模块名,例如:``demo_tuner.DemoTuner``
*
``classArgsValidator``: 类的参数验证类 validator 的类名,包括模块名,如:``demo_tuner.MyClassArgsValidator``
*
示例
..
在示例中安装自定义 Tuner
.. code-block:: bash
cd nni/examples/tuners/customized_tuner
python3 setup.py develop
nnictl algo register --meta meta_file.yml
*
**nnictl algo show**
*
说明
显示指定注册算法的详细信息
*
用法
.. code-block:: bash
nnictl algo show <builtinName>
*
示例
.. code-block:: bash
nnictl algo show SMAC
*
**nnictl package list**
*
说明
列出已注册的内置算法
*
用法
.. code-block:: bash
nnictl algo list
*
示例
.. code-block:: bash
nnictl algo list
*
**nnictl algo unregister**
*
说明
注销一个已注册的自定义内置算法。 NNI 提供的内置算法不能被注销。 NNI 提供的内置算法不能被注销。
*
用法
.. code-block:: bash
nnictl algo unregister <builtinName>
*
示例
.. code-block:: bash
nnictl algo unregister demotuner
:raw-html:`<a name="ss_gen"></a>`
生成搜索空间
^^^^^^^^^^^^^^^^^^^^^
*
**nnictl ss_gen**
*
说明
从使用 NNI NAS API 的用户代码生成搜索空间。
*
用法
.. code-block:: bash
nnictl ss_gen [OPTIONS]
*
选项
.. list-table::
:header-rows: 1
:widths: auto
* - 参数及缩写
- 是否必需
- 默认值
- 说明
* - --trial_command
- True
-
- Trial 代码的命令
* - --trial_dir
- False
- ./
- Trial 代码目录
* - --file
- False
- nni_auto_gen_search_space.json
- 用来存储生成的搜索空间
*
示例
..
生成搜索空间
.. code-block:: bash
nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json
:raw-html:`<a name="version"></a>`
NNI 版本校验
^^^^^^^^^^^^^^^^^
*
**nnictl --version**
*
说明
显示当前安装的 NNI 的版本。
*
用法
.. code-block:: bash
nnictl --version
../../en_US/Tutorial/Nnictl.rst
\ No newline at end of file
.. df9198c942071002424be17beef23cf5
快速入门
==========
......
.. role:: raw-html(raw)
:format: html
搜索空间
============
概述
--------
在 NNI 中,Tuner 会根据搜索空间来取样生成参数和网络架构。搜索空间通过 JSON 文件来定义。
要定义搜索空间,需要定义变量名称、采样策略的类型及其参数。
* 搜索空间示例如下:
.. code-block:: yaml
{
"dropout_rate": {"_type": "uniform", "_value": [0.1, 0.5]},
"conv_size": {"_type": "choice", "_value": [2, 3, 5, 7]},
"hidden_size": {"_type": "choice", "_value": [124, 512, 1024]},
"batch_size": {"_type": "choice", "_value": [50, 250, 500]},
"learning_rate": {"_type": "uniform", "_value": [0.0001, 0.1]}
}
将第一行作为示例。 ``dropout_rate`` 定义了一个变量,先验分布为均匀分布,范围从 ``0.1`` 到 ``0.5``。
注意:搜索空间中可用的取样策略取决于要使用的 Tuner 。 此处列出了内置 Tuner 所支持的类型。 对于自定义的 Tuner,不必遵循这些约定,可使用任何的类型。
类型
-----
所有采样策略和参数如下:
*
``{"_type": "choice", "_value": options}``
* 变量值为 options 中之一。 这里的 ``options`` 应该是字符串或数值的列表。 可将任意对象(如子数组,数字与字符串的混合值或者空值)存入此数组中,但可能会产生不可预料的行为。
* ``options`` 也可以是嵌套的子搜索空间。此子搜索空间仅在相应的元素选中后才起作用。 该子搜索空间中的变量可看作是条件变量。 :githublink:`嵌套搜索空间定义的简单示例 <examples/trials/mnist-nested-search-space/search_space.json>`。 如果选项列表中的元素是 dict,则它是一个子搜索空间,对于内置的 Tuner,必须在此 dict 中添加键 ``_name``,这有助于标识选中的元素。 相应的,这是从 NNI 中获得的嵌套搜索空间定义的 :githublink:`示例 <examples/trials/mnist-nested-search-space/sample.json>` 。 参见下表了解支持嵌套搜索空间的 Tuner 。
*
``{"_type": "randint", "_value": [lower, upper]}``
* 从 ``lower`` (包含) 到 ``upper`` (不包含) 中选择一个随机整数。
* 注意:不同 Tuner 可能对 ``randint`` 有不同的实现。 一些 Tuner(例如,TPE,GridSearch)将从低到高无序选择,
而其它一些(例如,SMAC)则有顺序。 如果希望所有 Tuner 都有序,
可使用 ``quniform`` 并设置 ``q=1``。
*
``{"_type": "uniform", "_value": [low, high]}``
* 变量值在 low 和 high 之间均匀采样。
* 当优化时,此变量值会在两侧区间内。
*
``{"_type": "quniform", "_value": [low, high, q]}``
* 变量值为 ``clip(round(uniform(low, high) / q) * q, low, high)``,clip 操作用于约束生成值的边界。 例如,``_value`` 为 [0, 10, 2.5],可取的值为 [0, 2.5, 5.0, 7.5, 10.0]; ``_value`` 为 [2, 10, 5],可取的值为 [2, 5, 10]。
* 适用于离散,同时反映了某种"平滑"的数值,但上下限都有限制。 如果需要从范围 [low, high] 中均匀选择整数,可以如下定义 ``_value``:``[low, high, 1]``。
*
``{"_type": "loguniform", "_value": [low, high]}``
* 变量值在范围 [low, high] 中是 loguniform 分布,如 exp(uniform(log(low), log(high))),因此返回值是对数均匀分布的。
* 当优化时,此变量必须是正数。
*
``{"_type": "qloguniform", "_value": [low, high, q]}``
* 变量值为 ``clip(round(loguniform(low, high) / q) * q, low, high)``,clip 操作用于约束生成值的边界。
* 适用于值是“平滑”的离散变量,但上下限均有限制。
*
``{"_type": "normal", "_value": [mu, sigma]}``
* 变量值为实数,且为正态分布,均值为 mu,标准方差为 sigma。 优化时,此变量不受约束。
*
``{"_type": "qnormal", "_value": [mu, sigma, q]}``
* 变量的值由 ``round(normal(mu, sigma) / q) * q`` 确定。
* 适用于在 mu 周围的离散变量,且没有上下限限制。
*
``{"_type": "lognormal", "_value": [mu, sigma]}``
* 变量值为 ``exp(normal(mu, sigma))`` 分布,范围值是对数的正态分布。 当优化时,此变量必须是正数。
*
``{"_type": "qlognormal", "_value": [mu, sigma, q]}``
* 变量的值由 ``round(exp(normal(mu, sigma)) / q) * q`` 确定。
* 适用于值是“平滑”的离散变量,但某一边有界。
每种 Tuner 支持的搜索空间类型
------------------------------------------
.. list-table::
:header-rows: 1
:widths: auto
* -
- choice
- choice(nested)
- randint
- uniform
- quniform
- loguniform
- qloguniform
- normal
- qnormal
- lognormal
- qlognormal
* - TPE Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Random Search Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Anneal Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Evolution Tuner
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - SMAC Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
-
* - Batch Tuner
- :raw-html:`&#10003;`
-
-
-
-
-
-
-
-
-
-
* - Grid Search Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
-
-
-
-
-
-
* - Hyperband Advisor
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
* - Metis Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
-
-
* - GP Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
* - DNGO Tuner
- :raw-html:`&#10003;`
-
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
- :raw-html:`&#10003;`
-
-
-
-
已知的局限:
*
GP Tuner、Metis Tuner 和 DNGO Tuner 的搜索空间只支持 **数值**,(**choice** 类型在其它 Tuner 中可以使用非数值, 如:字符串等)。 GP Tuner 和 Metis Tuner 都使用了高斯过程的回归(Gaussian Process Regressor, GPR)。 GPR 基于计算不同点距离的和函数来进行预测,其无法计算非数值值的距离。
*
请注意,对于嵌套搜索空间:
* 只有 随机搜索/TPE/Anneal/Evolution Tuner/Grid Search 支持嵌套搜索空间
../../en_US/Tutorial/SearchSpaceSpec.rst
\ No newline at end of file
设置 NNI 开发环境
=================================
NNI 开发环境支持安装 Python 3 64 位的 Ubuntu 1604 (及以上)和 Windows 10。
安装
------------
1. 克隆源代码
^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
git clone https://github.com/Microsoft/nni.git
注意,如果要贡献代码,需要 Fork 自己的 NNI 代码库并克隆。
2. 从源代码安装
^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
python3 -m pip install --upgrade pip setuptools
python3 setup.py develop
这是在 `开发模式 <https://setuptools.readthedocs.io/en/latest/userguide/development_mode.html>`__ 下安装NNI,
所以你不需要在编辑之后重新安装。
3. 检查环境是否正确
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
尝试启动实验来检查环境。
例如,运行命令
.. code-block:: bash
nnictl create --config examples/trials/mnist-pytorch/config.yml
并打开网页界面查看
4. 重新加载改动
^^^^^^^^^^^^^^^^^
Python
^^^^^^
无需操作,代码已连接到包的安装位置。
TypeScript (Linux 和 macOS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 如果改动了 ``tc/nni_manager``,在此目录下运行 ``yarn watch`` 可持续编译改动。 它将持续的监视并编译代码。 可能需要重新启动 ``nnictl`` 来重新加载 NNI 管理器。
* 如果改动了 ``tx/webui`` ,运行 ``yarn dev``, 该命令将同时运行一个 模拟 API 服务器和一个 webpack 开发服务器。 使用环境变量 ``EXPERIMENT`` (例如 ``mnist-tfv1-running``\ ) 来指定要用到的模拟数据。 内置的模拟实验列在 ``src/webui/mock``。 完整示例:``EXPERIMENT=mnist-tfv1-running yarn dev``。
* 如果改动了 ``ts/nasui``,在相应目录下运行 ``yarn start``。 Web 界面会在代码修改后自动刷新。 还有一个在开发时有用的模拟 API 服务器, 可以通过 ``node server.js`` 来启动。
TypeScript (Windows)
^^^^^^^^^^^^^^^^^^^^
目前,您必须在编辑后使用 `python3 setup.py build_ts` 重建 TypeScript 模块。
5. 提交拉取请求
^^^^^^^^^^^^^^^^^^^^^^
所有改动都需要从自己 Fork 的代码库合并到 master 分支上。 拉取请求的描述必须有意义且有用。
我们会尽快审查更改。 审查通过后,我们会将代码合并到主分支。
有关更多贡献指南和编码风格,查看 `贡献文档 <Contributing.rst>`__。
../../en_US/Tutorial/SetupNniDeveloperEnvironment.rst
\ No newline at end of file
如何在 Web 界面中使用 TensorBoard
====================================================
从 NNI v2.2 开始,您可以在 Web 界面中跨一个或多个 Trial 启动 TensorBoard 进程。 该功能目前支持本地训练平台和共享存储的重用模式下的训练平台,并将在未来的 NNI 版本中支持更多场景。
准备
-----------
确保在您的环境中安装了 TensorBoard。 如果您从未使用过 TensorBoard,这里有入门教程供您参考:`在 TensorFlow 下使用 TensorBoard <https://www.tensorflow.org/tensorboard/get_started>`__, `在 PyTorch 下使用 TensorBoard <https://pytorch.org/tutorials/recipes/recipes/tensorboard_with_pytorch.html>`__。
使用 Web 界面启动 TensorBoard
--------------------------------------------------------
1. 保存日志
^^^^^^^^^^^^
NNI 将自动获取 Trial 输出文件夹下的 ``tensorboard`` 子文件夹作为 tensorboard logdir。 所以在 Trial 的源代码中,你需要将 TensorBoard 日志保存在 ``NNI_OUTPUT_DIR/tensorboard`` 下。 此日志路径可以连接为:
.. code-block:: python
log_dir = os.path.join(os.environ["NNI_OUTPUT_DIR"], 'tensorboard')
2. 启动 TensorBoard
^^^^^^^^^^^^^^^^^^^^^
像比较一样,首先选择要组合的 Trial 来启动 TensorBoard,然后单击 ``Tensorboard`` 按钮。
.. image:: ../../img/Tensorboard_1.png
:target: ../../img/Tensorboard_1.png
:alt:
点击弹出框中的 "OK "按钮后,你将跳转到 TensorBoard 门户。
.. image:: ../../img/Tensorboard_2.png
:target: ../../img/Tensorboard_2.png
:alt:
你可以在 TensorBoard 门户上看到 ``SequenceID-TrialID``。
.. image:: ../../img/Tensorboard_3.png
:target: ../../img/Tensorboard_3.png
:alt:
3. 全部停用
^^^^^^^^^^^^
如果你想打开已经启动的门户,请点击 tensorboard id。 如果你不再需要 TensorBoard,点击 ``Stop all tensorboard`` 按钮。
.. image:: ../../img/Tensorboard_4.png
:target: ../../img/Tensorboard_4.png
:alt:
../../en_US/Tutorial/Tensorboard.rst
\ No newline at end of file
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