"include/vscode:/vscode.git/clone" did not exist on "07a673c60333a45073aec3c63cef8022709a9491"
HowToLaunchFromPython.rst 5.03 KB
Newer Older
kvartet's avatar
kvartet committed
1
2
3
4
5
6
7
8
9
10
11
如何从 Python 发起实验
===========================================

..  toctree::
    :hidden:

    启动用法 <python_api_start>
    连接用法 <python_api_connect>

概述
--------
kvartet's avatar
kvartet committed
12

kvartet's avatar
kvartet committed
13
14
15
从 ``nni v2.0`` 起,我们提供了一种全新方式发起 Experiment 。 在此之前,您需要在 yaml 文件中配置实验,然后使用 ``nnictl`` 命令启动 Experiment 。 现在,您还可以直接在python文件中配置和运行 Experiment 。 如果您熟悉 Python 编程,那么无疑会为您带来很多便利。

运行一个新的 Experiment
kvartet's avatar
kvartet committed
16
------------------------------------------------------------------
kvartet's avatar
kvartet committed
17

kvartet's avatar
kvartet committed
18
成功安装 ``nni`` 之后,您可以通过以下3个步骤使用 Python 脚本开始 Experiment 。
kvartet's avatar
kvartet committed
19
20
21
22
23
24
25

..

    步骤2 - 初始化并配置 Experiment 实例

.. code-block:: python

kvartet's avatar
kvartet committed
26
27
    from nni.experiment import Experiment
    experiment = Experiment(tuner, 'local')
kvartet's avatar
kvartet committed
28
29
30
31
32
33
34
35
36
37
38
39
40

现在,您已经在上一步中初始化了带有 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
kvartet's avatar
kvartet committed
41
42
    experiment.config.experiment_name = 'test'
    experiment.config.max_trial_number = 5
kvartet's avatar
kvartet committed
43
44
45
46
    experiment.config.training_service.use_active_gpu = True

使用类似 ``experiment.config.foo ='bar'`` 的形式来配置您的 Experiment 。

kvartet's avatar
kvartet committed
47
48
查看 NNI 所有的 `内置 Tuner <../builtin_tuner.rst>`__。

kvartet's avatar
kvartet committed
49
50
51
52
53
54
55
56
57
58
59
60
参阅不同平台所需的 `参数配置 <../reference/experiment_config.rst>`__。

..

    步骤3 - 运行

.. code-block:: python

    experiment.run(port=8081)

现在,您已经成功启动了 NNI Experiment。 您可以在浏览器中输入``localhost:8081`` 以实时观察实验。

kvartet's avatar
kvartet committed
61
.. Note:: 实验将在前台运行,实验结束后自动退出。 如果要以交互方式运行 Experiment,请在步骤3中使用 ``start()``。
kvartet's avatar
kvartet committed
62
63
64

示例
^^^^^^^
kvartet's avatar
kvartet committed
65
以下是这种新的启动方法的示例。你可以在 :githublink:`mnist-tfv2/launch.py <examples/trials/mnist-tfv2/launch.py>` 找到实验代码。
kvartet's avatar
kvartet committed
66
67
68
69
70

.. code-block:: python

    from pathlib import Path

kvartet's avatar
kvartet committed
71
    from nni.experiment import Experiment
kvartet's avatar
kvartet committed
72
73
74
75
76
77
78
79
80

    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] }
    }

kvartet's avatar
kvartet committed
81
82
    experiment = Experiment(tuner=tuner, training_service='local')
    experiment.config.experiment_name = 'MNIST example'
kvartet's avatar
kvartet committed
83
    experiment.config.trial_concurrency = 2
kvartet's avatar
kvartet committed
84
    experiment.config.max_trial_number = 10
kvartet's avatar
kvartet committed
85
86
87
    experiment.config.search_space = search_space
    experiment.config.trial_command = 'python3 mnist.py'
    experiment.config.trial_code_directory = Path(__file__).parent
kvartet's avatar
kvartet committed
88
89
    tuner = HyperoptTuner('tpe')
    experiment.config.tuner.class_args['optimize_mode'] = 'maximize'
kvartet's avatar
kvartet committed
90
91
92
93
94
    experiment.config.training_service.use_active_gpu = True

    experiment.run(8081)

启动并管理一个新的 Experiment
kvartet's avatar
kvartet committed
95
----------------------------------------------------------------------------
kvartet's avatar
kvartet committed
96
97
98
99
100
101
102
103
我们将 ``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
kvartet's avatar
kvartet committed
104
----------------------------------------
kvartet's avatar
kvartet committed
105
106
107
108
109
110
如果您通过 ``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。

kvartet's avatar
kvartet committed
111
112
113
114
115
116
恢复/查看和管理已停止的 Experiment
--------------------------------------------------------------------------------------

您可以使用 ``Experiment.resume()`` 和 ``Experiment.view()`` 来恢复和查看停止的 Experiment,这些函数的行为类似于 ``nnictl resume`` 和 ``nnictl view``。
如果你想管理 Experiment,设置 ``wait_completion`` 为 ``False`` ,函数将返回一个 ``Experiment`` 实例。 更多参数请参考API。

kvartet's avatar
kvartet committed
117
118
119
120
121
API
---

..  autoclass:: nni.experiment.Experiment
    :members: