将分布式训练算法与 Hyperopt 配合使用
注意
不再维护 Hyperopt 的开源版本。
Hyperopt 将不再预安装在 Databricks Runtime ML 17.0 及更高版本上。 Azure Databricks 建议改用 Optuna,以便获得类似的体验,并访问最新的超参数优化算法。
除了单机训练算法(例如 scikit-learn 中的算法)以外,还可以将 Hyperopt 与分布式训练算法配合使用。 在此方案中,Hyperopt 将在驱动程序节点上使用不同的超参数设置生成试运行。 每个试运行是从驱动程序节点执行的,因此有权访问整个群集资源。 这种设置适用于任何分布式机器学习算法或库(包括 Apache Spark MLlib 和 HorovodRunner)。
将 Hyperopt 与分布式训练算法配合使用时,请不要将 trials
参数传递给 fmin()
,尤其是不要使用 SparkTrials
类。 SparkTrials
旨在为本身不是分布式算法的算法分配试运行。 对于分布式训练算法,请使用在群集驱动程序上运行的默认 Trials
类。 Hyperopt 评估驱动程序节点上的每个试运行,使 ML 算法本身可以启动分布式训练。
注意
Azure Databricks 不支持使用 Trials
类自动记录到 MLflow。 使用分布式训练算法时,必须手动调用 MLflow 来记录 Hyperopt 的试运行。
笔记本示例:将 Hyperopt 与 MLlib 算法配合使用
示例笔记本演示如何使用 Hyperopt 优化 MLlib 的分布式训练算法。
Hyperopt 和 MLlib 分布式训练笔记本
笔记本示例:将 Hyperopt 与 HorovodRunner 配合使用
HorovodRunner 是用于在 Databricks 上运行分布式深度学习工作负载的常规 API。 HorovodRunner 将 Horovod 与 Spark 的屏障模式相集成,为 Spark 上长时间运行的深度学习训练作业提供更高的稳定性。
示例笔记本演示如何使用 Hyperopt 来优化分布式训练,以便基于 HorovodRunner 进行深度学习。