experiment_config.rst 12.3 KB
Newer Older
kvartet's avatar
kvartet committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
===========================
Experiment(实验)配置参考
===========================

注意
=====

1. 此文档的字段使用 ``camelCase`` 法命名。
   对于 Python 库 ``nni.experiment``,需要转换成 ``snake_case`` 形式。

2. 在此文档中,字段类型被格式化为 `Python 类型提示 <https://docs.python.org/3.10/library/typing.html>`__。
   因此,JSON 对象被称为 `dict`,数组被称为 `list`。

.. _路径:

3. 一些字段采用文件或目录的路径,
   除特别说明,均支持绝对路径和相对路径,``~`` 将扩展到 home 目录。

   - 在写入 YAML 文件时,相对路径是相对于包含该文件目录的路径。
   - 在 Python 代码中赋值时,相对路径是相对于当前工作目录的路径。
   - 在将 YAML 文件加载到 Python 类,以及将 Python 类保存到 YAML 文件时,所有相对路径都转换为绝对路径。

4. 将字段设置为 ``None`` 或 ``null`` 时相当于不设置该字段。

示例
========

本机模式
^^^^^^^^^^

.. code-block:: yaml

    experimentName: MNIST
    searchSpaceFile: search_space.json
    trialCommand: python mnist.py
    trialCodeDirectory: .
    trialGpuNumber: 1
    maxExperimentDuration: 24h
    maxTrialNumber: 100
    tuner:
      name: TPE
      classArgs:
        optimize_mode: maximize
    trainingService:
      platform: local
      useActiveGpu: True

本机模式(内联搜索空间)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: yaml

    searchSpace:
      batch_size:
        _type: choice
        _value: [16, 32, 64]
      learning_rate:
        _type: loguniform
        _value: [0.0001, 0.1]
    trialCommand: python mnist.py
    trialGpuNumber: 1
    tuner:
      name: TPE
      classArgs:
        optimize_mode: maximize
    trainingService:
      platform: local
      useActiveGpu: True

远程模式
^^^^^^^^^^^

.. code-block:: yaml

    experimentName: MNIST
    searchSpaceFile: search_space.json
    trialCommand: python mnist.py
    trialCodeDirectory: .
    trialGpuNumber: 1
    maxExperimentDuration: 24h
    maxTrialNumber: 100
    tuner:
      name: TPE
      classArgs:
        optimize_mode: maximize
    trainingService:
      platform: remote
      machineList:
        - host: 11.22.33.44
          user: alice
          password: xxxxx
        - host: my.domain.com
          user: bob
          sshKeyFile: ~/.ssh/id_rsa

参考
=========

Experiment 配置
^^^^^^^^^^^^^^^^

experimentName
--------------

Experiment 的助记名称, 这将显示在 WebUI 和 nnictl 中。

类型:``Optional[str]``


searchSpaceFile
---------------

包含搜索空间 JSON 文件的\ 路径_ 。

类型:``Optional[str]``

搜索空间格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。

与 `searchSpace`_ 互斥。


searchSpace
-----------

搜索空间对象。

类型:``Optional[JSON]``

格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。

注意,``None`` 意味着“没有这样的字段”,所以空的搜索空间应该写成 ``{}``。

与 `searchSpaceFile`_ 互斥。


trialCommand
------------

启动 Trial 的命令。

类型:``str``

该命令将在 Linux 和 macOS 上的 bash 中执行,在 Windows 上的 PowerShell 中执行。


trialCodeDirectory
------------------

到 Trial 源文件的目录的 路径_。

类型:``str``

默认值:``"."``

此目录中的所有文件都将发送到训练机器,除了 ``.nniignore`` 文件。
(详细信息,请参考 `快速入门 <../Tutorial/QuickStart.rst>`__ 的 nniignore 部分。)


trialConcurrency
----------------

指定同时运行的 Trial 数目。

类型:``int``

实际的并发性还取决于硬件资源,可能小于此值。


trialGpuNumber
--------------

每个 Trial 使用的 GPU 数目。

类型:``Optional[int]``

对于各种训练平台,这个字段的含义可能略有不同,
尤其是设置为 ``0`` 或者 ``None`` 时,
详情请参阅训练平台文件。

在本地模式下,将该字段设置为零将阻止 Trial 获取 GPU(通过置空 ``CUDA_VISIBLE_DEVICES`` )。
当设置为 ``None`` 时,Trial 将被创建和调度,就像它们不使用 GPU 一样,
但是它们仍然可以根据需要使用所有 GPU 资源。


maxExperimentDuration
---------------------

如果指定,将限制此 Experiment 的持续时间。

类型:``Optional[str]``

格式:``数字 + s|m|h|d``

示例:``"10m"``, ``"0.5h"``

当时间耗尽时,Experiment 将停止创建 Trial,但仍然服务于 web UI。


maxTrialNumber
--------------

如果指定,将限制创建的 Trial 数目。

类型:``Optional[int]``

当预算耗尽时,Experiment 将停止创建 Trial,但仍然服务于 web UI。


nniManagerIp
------------

当前机器的 IP,用于训练机器访问 NNI 管理器。 本机模式下不可选。

类型:``Optional[str]``

如果未指定,将使用 ``eth0`` 的 IPv4 地址。

必须在 Windows 和使用可预测网络接口名称的系统上设置,本地模式除外。


useAnnotation
-------------

启动 `annotation <../Tutorial/AnnotationSpec.rst>`__。

类型:``bool``

默认值:``false``

使用 annotation 时,`searchSpace`_ 和 `searchSpaceFile`_ 不应手动指定。


debug
-----

启动调试模式

类型:``bool``

默认值:``false``

启用后,日志记录将更加详细,并且一些内部验证将被放宽。


logLevel
--------

设置整个系统的日志级别。

类型:``Optional[str]``

候选项:``"trace"``, ``"debug"``, ``"info"``, ``"warning"``, ``"error"``, ``"fatal"``

默认为 "info" 或 "debug",取决于 `debug`_ 选项。

NNI 的大多数模块都会受到此值的影响,包括 NNI 管理器、Tuner、训练平台等。

Trial 是一个例外,它的日志记录级别由 Trial 代码直接管理。

对于 Python 模块,"trace" 充当日志级别0,"fatal" 表示 ``logging.CRITICAL``。


experimentWorkingDirectory
--------------------------

指定目录 `directory <path>`_ 来存放日志、检查点、元数据和其他运行时的内容。

类型:``Optional[str]``

默认:``~/nni-experiments``

NNI 将创建一个以 Experiment ID 命名的子目录,所以在多个 Experiment 中使用同一个目录不会有冲突。


tunerGpuIndices
---------------

设定对 Tuner、Assessor 和 Advisor 可见的 GPU。

类型:``Optional[list[int] | str]``

这将是 Tuner 进程的 ``CUDA_VISIBLE_DEVICES`` 环境变量,

因为 Tuner、Assessor 和 Advisor 在同一个进程中运行,所以此选项将同时影响它们。


tuner
-----

指定 Tuner。

类型:Optional `AlgorithmConfig`_


assessor
--------

指定 Assessor。

类型:Optional `AlgorithmConfig`_


advisor
-------

指定 Advisor。

类型:Optional `AlgorithmConfig`_


trainingService
---------------

指定 `训练平台 <../TrainingService/Overview.rst>`__。

类型:`TrainingServiceConfig`_


AlgorithmConfig
^^^^^^^^^^^^^^^

``AlgorithmConfig`` 描述 tuner / assessor / advisor 算法。

对于自定义算法,有两种方法来描述它们:

  1. `注册算法 <../Tuner/InstallCustomizedTuner.rst>`__ ,像内置算法一样使用。 (首选)

  2. 指定代码目录和类名。


name
----

内置或注册算法的名称。

类型:对于内置和注册算法使用 ``str``,其他自定义算法使用 ``None``


className
---------

未注册的自定义算法的限定类名。

类型:对于内置和注册算法使用 ``None``,其他自定义算法使用 ``str``

示例:``"my_tuner.MyTuner"``


codeDirectory
-------------

到自定义算法类的目录的 路径_。

类型:对于内置和注册算法使用 ``None``,其他自定义算法使用 ``str``


classArgs
---------

传递给算法类构造函数的关键字参数。

类型:``Optional[dict[str, Any]]``

有关支持的值,请参阅算法文档。


TrainingServiceConfig
^^^^^^^^^^^^^^^^^^^^^

以下之一:

- `LocalConfig`_
- `RemoteConfig`_
- `OpenpaiConfig <openpai-class>`_
- `AmlConfig`_

对于其他训练平台,目前 NNI 建议使用 `v1 配置模式 <../Tutorial/ExperimentConfig.rst>`_ 。


LocalConfig
^^^^^^^^^^^

详情查看 `这里 <../TrainingService/LocalMode.rst>`__。

platform
--------

字符串常量 ``"local"``。


useActiveGpu
------------

指定 NNI 是否应向被其他任务占用的 GPU 提交 Trial。

类型:``Optional[bool]``

必须在 ``trialgpunmber`` 大于零时设置。

如果您使用带有 GUI 的桌面系统,请将其设置为 ``True``。


maxTrialNumberPerGpu
---------------------

指定可以共享一个 GPU 的 Trial 数目。

类型:``int``

默认值:``1``


gpuIndices
----------

设定对 Trial 进程可见的 GPU。

类型:``Optional[list[int] | str]``

如果 `trialGpuNumber`_ 小于此值的长度,那么每个 Trial 只能看到一个子集。

这用作环境变量 ``CUDA_VISIBLE_DEVICES``。


RemoteConfig
^^^^^^^^^^^^

详情查看 `这里 <../TrainingService/RemoteMachineMode.rst>`__。

platform
--------

字符串常量 ``"remote"``。


machineList
-----------

训练机器列表

类型: `RemoteMachineConfig`_ 列表


reuseMode
---------

启动 `重用模式 <../Tutorial/ExperimentConfig.rst#reuse>`__。

类型:``bool``


RemoteMachineConfig
^^^^^^^^^^^^^^^^^^^

host
----

机器的 IP 或主机名(域名)。

类型:``str``


port
----

SSH 服务端口。

类型:``int``

默认值:``22``


user
----

登录用户名。

类型:``str``


password
--------

登录密码。

类型:``Optional[str]``

如果未指定,则将使用 `sshKeyFile`_。


sshKeyFile
----------

到 sshKeyFile的 路径_ 。

类型:``Optional[str]``

仅在未指定 `password`_ 时使用。


sshPassphrase
-------------

SSH 标识文件的密码。

类型:``Optional[str]``


useActiveGpu
------------

指定 NNI 是否应向被其他任务占用的 GPU 提交 Trial。

类型:``bool``

默认值:``false``


maxTrialNumberPerGpu
--------------------

指定可以共享一个 GPU 的 Trial 数目。

类型:``int``

默认值:``1``


gpuIndices
----------

设定对 Trial 进程可见的 GPU。

类型:``Optional[list[int] | str]``

如果 `trialGpuNumber`_ 小于此值的长度,那么每个 Trial 只能看到一个子集。

这用作环境变量 ``CUDA_VISIBLE_DEVICES``。


trialPrepareCommand
-------------------

启动 Trial 之前运行的命令。

类型:``Optional[str]``

如果不同机器的准备步骤不同,这将非常有用。

.. _openpai-class:

OpenpaiConfig
^^^^^^^^^^^^^

详情查看 `这里 <../TrainingService/PaiMode.rst>`__。

platform
--------

字符串常量 ``"openpai"``。


host
----

OpenPAI 平台的主机名。

类型:``str``

可能包括 ``https://`` 或 ``http://`` 前缀。

默认情况下将使用 HTTPS。


username
--------

OpenPAI 用户名。

类型:``str``


token
-----

OpenPAI 用户令牌。

类型:``str``

这可以在 OpenPAI 用户设置页面中找到。


dockerImage
-----------

运行 Trial 的 Docker 镜像的名称和标签。

类型:``str``

默认:``"msranni/nni:latest"``


nniManagerStorageMountPoint
---------------------------

当前机器中存储服务(通常是NFS)的挂载点路径。

类型:``str``


containerStorageMountPoint
--------------------------

Docker 容器中存储服务(通常是NFS)的挂载点。

类型:``str``

这必须是绝对路径。


reuseMode
---------

启动 `重用模式 <../Tutorial/ExperimentConfig.rst#reuse>`__。

类型:``bool``

默认值:``false``


openpaiConfig
-------------

嵌入的 OpenPAI 配置文件。

类型:``Optional[JSON]``


openpaiConfigFile
-----------------

到 OpenPAI 配置文件的 `路径`_

类型:``Optional[str]``

示例在 `这里 <https://github.com/microsoft/pai/blob/master/docs/manual/cluster-user/examples/hello-world-job.yaml>`__。


AmlConfig
^^^^^^^^^

详情查看 `这里 <../TrainingService/AMLMode.rst>`__。


platform
--------

字符串常量 ``"aml"``。


dockerImage
-----------

运行 Trial 的 Docker 镜像的名称和标签。

类型:``str``

默认:``"msranni/nni:latest"``


subscriptionId
--------------

Azure 订阅 ID。

类型:``str``


resourceGroup
-------------

Azure 资源组名称。

类型:``str``


workspaceName
-------------

Azure 工作区名称。

类型:``str``


computeTarget
-------------

AML 计算集群名称。

类型:``str``