目录

Hyper Parameter 优化

概述和用法

该模块包含一些模块和函数,您可以 可用于构建超参数优化 (HPO) 应用程序。注意 HPO 应用程序是协调 HPO 搜索的实体 不要与为每个 “试用版” 运行的应用程序混淆 的搜索。通常,HPO 作业中的“试用”是 训练一个 ML 模型,给定 HPO 任务指定的一组参数。torchx.runtime.hpo

对于网格搜索,HPO 作业可能就像 for parallel 循环一样简单,即 详尽地运行 User-defined 中的所有参数组合 搜索空间。另一方面,贝叶斯优化需要优化器 state 在 Trial 之间保留,这会导致一个更加重要的实现 的 HPO 应用程序。

目前该模块使用 Ax 作为 HPO 的底层大脑 并提供了一些扩展点,用于将 Ax 与 TorchX 运行器集成。

快速入门示例

以下示例演示了在 TorchX 组件上运行 HPO 作业。 我们使用内置组件,它只运行一个应用程序 ,用于计算 处的 booth 函数。目标是 find 并最小化 booth 功能。utils.booth(x1, x2)x1x2

import os
from ax.core import (
   BatchTrial,
   Experiment,
   Objective,
   OptimizationConfig,
   Parameter,
   ParameterType,
   RangeParameter,
   SearchSpace,
)
from ax.modelbridge.dispatch_utils import choose_generation_strategy
from ax.service.scheduler import SchedulerOptions
from ax.service.utils.best_point import get_best_parameters
from ax.service.utils.report_utils import exp_to_df
from ax.utils.common.constants import Keys
from pyre_extensions import none_throws
from torchx.components import utils
from torchx.runtime.hpo.ax import AppMetric, TorchXRunner, TorchXScheduler
from torchx.specs import RunConfig

# Run HPO on the booth function (https://en.wikipedia.org/wiki/Test_functions_for_optimization)

parameters = [
   RangeParameter(
       name="x1",
       lower=-10.0,
       upper=10.0,
       parameter_type=ParameterType.FLOAT,
   ),
   RangeParameter(
       name="x2",
       lower=-10.0,
       upper=10.0,
       parameter_type=ParameterType.FLOAT,
   ),
]

objective = Objective(metric=AppMetric(name="booth_eval"), minimize=True)

runner = TorchXRunner(
   tracker_base=tmpdir,
   component=utils.booth,
   component_const_params={
       "image": "ghcr.io/pytorch/torchx:0.1.0rc0",
   },
   scheduler="local", # can also be [kubernetes, slurm, etc]
   scheduler_args=RunConfig({"log_dir": tmpdir, "image_type": "docker"}),
)

experiment = Experiment(
    name="torchx_booth_sequential_demo",
    search_space=SearchSpace(parameters=parameters),
    optimization_config=OptimizationConfig(objective=objective),
    runner=runner,
    is_test=True,
    properties={Keys.IMMUTABLE_SEARCH_SPACE_AND_OPT_CONF: True},
)

scheduler = TorchXScheduler(
    experiment=experiment,
    generation_strategy=(
        choose_generation_strategy(
            search_space=experiment.search_space,
        )
    ),
    options=SchedulerOptions(),
)


for i in range(3): 
   scheduler.run_n_trials(max_trials=2) 

print(exp_to_df(experiment)) 

Ax (自适应实验)

torchx.runtime.hpo.ax 类TorchXRunnertracker_base strcomponent Callable[[...] torchx.specs.api.AppDef]component_const_params 可选[dict[str any]] = 调度器str = 'local'scheduler_args:可选[torchx.specs.api.RunConfig] = None[来源]

委托作业提交的实现 到 TorchX Runner。此 runner 与 torchx 组件耦合 因为 Ax runners 运行具有不同参数的单个组件的试验。ax.core.runner.Runner

试验参数名称和类型应匹配 EXACTLY 与组件的函数 args 一起使用。Component 函数 arg 中 NOT 部分可以作为 . 以下 args(前提是组件函数声明了它们 在函数签名中),作为自动传递的component_const_params

  1. trial_idx (int): 当前试验索引

  2. tracker_base (str): torchx 跟踪链接的 base (通常是一个 URL,表示跟踪链接的 base 目录)

例:

def trainer_component(
   x1: int,
   x2: float,
   trial_idx: int,
   tracker_base: str,
   x3: float,
   x4: str) -> spec.AppDef:
   # ... implementation omitted for brevity ...
   pass

实验应设置为:

parameters=[
  {
    "name": "x1",
    "value_type": "int",
    # ... other options...
  },
  {
    "name": "x2",
    "value_type": "float",
    # ... other options...
  }
]

其余参数可以设置为:

TorchXRunner(
   tracker_base="s3://foo/bar",
   component=trainer_component,
   # trial_idx and tracker_base args passed automatically
   # if the function signature declares those args
   component_const_params={"x3": 1.2, "x4": "barbaz"})

按照上述设置运行实验会导致每个试验运行:

appdef = trainer_component(
           x1=trial.params["x1"],
           x2=trial.params["x2"],
           trial_idx=trial.index,
           tracker_base="s3://foo/bar",
           x3=1.2,
           x4="barbaz")

torchx.runner.get_runner().run(appdef, ...)
torchx.runtime.hpo.ax 类TorchXScheduler实验ax.core.experiment.Experiment,generation_strategyax.modelbridge.generation_strategy.GenerationStrategy选项ax.service.scheduler.SchedulerOptions,db_settingsOptional[ax.storage.sqa_store.structs.DBSettings] = None_skip_experiment_save bool = False[来源]

Ax Scheduler 的实现,它与 .TorchXRunner

这个调度器不是一个真正的调度器,而是一个 Facade 调度器 该 Scheduler 将 Scheduler Client 委托给各种远程/本地 Scheduler 的 Scheduler 客户端。 有关支持的调度器列表,请参阅 TorchX 调度器文档

torchx.runtime.hpo.ax 类AppMetricname strlower_is_better: Optional[bool] = Noneproperties Optional[dict[str 任意]] = [来源]

获取 AppMetric(试用作业/应用程序返回的观察) 通过模块。假设应用使用 跟踪链接:torchx.tracking

tracker = torchx.runtime.tracking.FsspecResultTracker(tracker_base)
tracker[str(trial_index)] = {metric_name: value}

# -- or --
tracker[str(trial_index)] = {"metric_name/mean": mean_value,
                            "metric_name/sem": sem_value}

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源