Ray Tune: 超参数调优#

Tune 是一个用于在任何规模下执行实验和进行超参数调优的 Python 库。您可以通过运行最先进的算法(例如基于种群训练 (PBT) 和 HyperBand/ASHA)来调优您喜爱的机器学习框架(PyTorch、XGBoost、TensorFlow 和 Keras 以及更多)。Tune 进一步集成了广泛的额外超参数优化工具,包括 Ax、BayesOpt、BOHB、Nevergrad 和 Optuna。
点击以下标签可查看各种机器学习框架的代码示例:
要运行此示例,请安装以下内容:pip install "ray[tune]"
。
在此快速入门示例中,您将最小化
形式为 f(x) = a**2 + b
的简单函数,即我们的目标
函数。a
越接近零且 b
越小,f(x)
的总值就越小。我们将为 a
和 b
定义一个所谓的搜索空间
,并让 Ray Tune 探索该空间以找到好的值。
from ray import tune
def objective(config): # ①
score = config["a"] ** 2 + config["b"]
return {"score": score}
search_space = { # ②
"a": tune.grid_search([0.001, 0.01, 0.1, 1.0]),
"b": tune.choice([1, 2, 3]),
}
tuner = tune.Tuner(objective, param_space=search_space) # ③
results = tuner.fit()
print(results.get_best_result(metric="score", mode="min").config)
① 定义目标函数。
② 定义搜索空间。
③ 启动 Tune 运行并打印最佳结果。
要使用 Hyperopt 调优您的 Keras 模型,您需要将模型包装在一个目标函数中,该函数的 config
可用于选择超参数。在下面的示例中,我们只调优模型第一层的 activation
参数,但您可以调优模型的任何参数。定义搜索空间后,您可以简单地初始化 HyperOptSearch
对象并将其传递给 run
。重要的是要告诉 Ray Tune 您希望优化哪个指标以及是最大化还是最小化。您可以轻松定义其他停止规则。
from ray import tune
from ray.tune.search.hyperopt import HyperOptSearch
import keras
def objective(config): # ①
model = keras.models.Sequential()
model.add(keras.layers.Dense(784, activation=config["activation"]))
model.add(keras.layers.Dense(10, activation="softmax"))
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
# model.fit(...)
# loss, accuracy = model.evaluate(...)
return {"accuracy": accuracy}
search_space = {"activation": tune.choice(["relu", "tanh"])} # ②
algo = HyperOptSearch()
tuner = tune.Tuner( # ③
objective,
tune_config=tune.TuneConfig(
metric="accuracy",
mode="max",
search_alg=algo,
),
param_space=search_space,
)
results = tuner.fit()
① 将 Keras 模型包装在目标函数中。
② 定义搜索空间并初始化搜索算法。
③ 启动 Tune 运行以最大化精度。
要使用 Optuna 调优您的 PyTorch 模型,您需要将模型包装在一个目标函数中,该函数的 config
可用于选择超参数。在下面的示例中,我们只调优模型优化器的 momentum
和学习率(lr
)参数,但您可以调优任何其他模型参数。定义搜索空间后,您可以简单地初始化 OptunaSearch
对象并将其传递给 run
。重要的是要告诉 Ray Tune 您希望优化哪个指标以及是最大化还是最小化。我们在此训练运行 5
次迭代后停止调优,但您可以轻松定义其他停止规则。
import torch
from ray import tune
from ray.tune.search.optuna import OptunaSearch
def objective(config): # ①
train_loader, test_loader = load_data() # Load some data
model = ConvNet().to("cpu") # Create a PyTorch conv net
optimizer = torch.optim.SGD( # Tune the optimizer
model.parameters(), lr=config["lr"], momentum=config["momentum"]
)
while True:
train_epoch(model, optimizer, train_loader) # Train the model
acc = test(model, test_loader) # Compute test accuracy
tune.report({"mean_accuracy": acc}) # Report to Tune
search_space = {"lr": tune.loguniform(1e-4, 1e-2), "momentum": tune.uniform(0.1, 0.9)}
algo = OptunaSearch() # ②
tuner = tune.Tuner( # ③
objective,
tune_config=tune.TuneConfig(
metric="mean_accuracy",
mode="max",
search_alg=algo,
),
run_config=tune.RunConfig(
stop={"training_iteration": 5},
),
param_space=search_space,
)
results = tuner.fit()
print("Best config is:", results.get_best_result().config)
① 将 PyTorch 模型包装在目标函数中。
② 定义搜索空间并初始化搜索算法。
③ 启动 Tune 运行以最大化平均精度并在 5 次迭代后停止。
使用 Tune,您还可以启动多节点分布式超参数搜索,只需不到 10 行代码。您还可以使用 Ray Serve 在相同的基础设施上将模型从训练迁移到服务。
入门
在我们的入门教程中,您将学习如何使用 Tune 有效地调优 PyTorch 模型。
关键概念
理解 Ray Tune 背后的关键概念。了解 Tune 运行、搜索算法、调度器和其他功能。
用户指南
我们的指南教您 Tune 的关键特性,例如分布式训练或早期停止。
示例
在我们的示例中,您可以找到使用诸如 scikit-learn、Keras、TensorFlow、PyTorch 和 mlflow 等框架以及最先进的搜索算法集成的实用教程。
Ray Tune 常见问题
在我们的详细常见问题解答中查找常见问题的答案。
Ray Tune API
获取有关 Ray Tune API 的更深入信息,包括关于搜索空间、算法和训练配置的所有内容。
为何选择 Tune?#
市面上有许多其他的超参数优化库。如果您是 Tune 的新手,您可能会想知道,“Tune 有何不同?”
使用 Tune 的项目#
以下是一些利用 Tune 的热门开源仓库和研究项目。欢迎提交 PR 添加(或请求移除!)列出的项目。
Softlearning:Softlearning 是一个用于在连续领域训练最大熵策略的强化学习框架。包含 Soft Actor-Critic 算法的官方实现。
基于种群的增强 (Population Based Augmentation):基于种群的增强 (PBA) 是一种快速高效地学习神经网络训练数据增强函数的算法。PBA 在 CIFAR 上取得了与最先进结果相媲美的性能,而计算量减少了一千倍。
Kakao 的 Fast AutoAugment:Fast AutoAugment(已在 NeurIPS 2019 接收)使用更高效的基于密度匹配的搜索策略学习增强策略。
Allentune:AllenAI 为 AllenNLP 提供的超参数搜索。
machinable:一个用于机器学习研究的模块化配置系统。参见 machinable.org。
NeuroCard:NeuroCard(已在 VLDB 2021 接收)是一个用于多表连接查询的神经基数估计器。它使用最先进的深度密度模型学习关系数据库表之间的相关性。
了解更多关于 Ray Tune 的信息#
您可以在下面找到有关 Ray Tune 的博客文章和演讲
[幻灯片] 在 RISECamp 2019 上的演讲
[视频] 在 RISECamp 2018 上的演讲
[视频] 现代超参数优化指南 (PyData LA 2019) (幻灯片)
引用 Tune#
如果 Tune 对您的学术研究有所帮助,鼓励您引用我们的论文。以下是 bibtex 示例
@article{liaw2018tune,
title={Tune: A Research Platform for Distributed Model Selection and Training},
author={Liaw, Richard and Liang, Eric and Nishihara, Robert
and Moritz, Philipp and Gonzalez, Joseph E and Stoica, Ion},
journal={arXiv preprint arXiv:1807.05118},
year={2018}
}