Skip to content

Latest commit

 

History

History
162 lines (109 loc) · 7.5 KB

InstallCustomizedAlgos.rst

File metadata and controls

162 lines (109 loc) · 7.5 KB

如何将自定义的算法安装为内置的 Tuner,Assessor 和 Advisor

概述

NNI 提供了大量可用于超参优化的 内置 Tuner, AdvisorAssessor ,其他算法可在 NNI 安装后,通过 nnictl algo register --meta <path_to_meta_file> 安装。 可通过 nnictl package list 命令查看其它算法。

NNI 中,还可以创建自定义的 Tuner,Advisor 和 Assessor。 并根据 Experiment 配置文件的说明来使用这些自定义的算法,可参考 自定义 TunerAdvisorAssessor

用户可将自定义的算法作为内置算法安装,以便像其它内置 Tuner、Advisor、Assessor 一样使用。 更重要的是,这样更容易向其他人分享或发布自己实现的算法。 自定义的 Tuner、Advisor、Assessor 可作为内置算法安装到 NNI 中,安装完成后,可在 Experiment 配置文件中像内置算法一样使用。 例如,将自定义的算法 mytuner 安装到 NNI 后,可在配置文件中直接使用:

tuner:
  builtinTunerName: mytuner

将自定义的算法安装为内置的 Tuner,Assessor 或 Advisor

可参考下列步骤来构建自定义的 Tuner、Assessor、Advisor,并作为内置算法安装。

1. 创建自定义的 Tuner、Assessor、Advisor

参考下列说明来创建:

2. (可选) 创建 Validator 来验证 classArgs

NNI 提供了 ClassArgsValidator 接口,自定义的算法可用它来验证 Experiment 配置文件中传给构造函数的 classArgs 参数。 ClassArgsValidator 接口如下:

class ClassArgsValidator(object):
    def validate_class_args(self, **kwargs):
        """
        Experiment 配置中的 classArgs 字段会作为 dict
        传入到 kwargs。
        """
        pass

例如,可将 Validator 如下实现:

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 文件示例:

algoType: tuner
builtinName: demotuner
className: demo_tuner.DemoTuner
classArgsValidator: demo_tuner.MyClassArgsValidator

5. 将自定义算法包安装到 NNI 中

运行以下命令将自定义算法加入到 NNI 的内置算法中:

nnictl algo register --meta <path_to_meta_file>

<path_to_meta_file> 是上一节创建的 YAML 文件的路径。

参考 这里 获取完整示例。

6. 在 Experiment 中使用安装的算法

在自定义算法安装后,可用其它内置 Tuner、Assessor、Advisor 的方法在 Experiment 配置文件中使用,例如:

tuner:
  builtinTunerName: demotuner
  classArgs:
    # 可选项: maximize, minimize
    optimize_mode: maximize

使用 nnictl algo 管理内置的算法

列出已安装的包

运行以下命令列出已安装的包:

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