将分布式训练算法与 Hyperopt 配合使用
注意
不再维护 Hyperopt 的开源版本。
Hyperopt 将在下一个主要 DBR ML 版本中删除。 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 的试运行。
Notebook 示例:将 Hyperopt 与 MLlib 算法配合使用
示例笔记本演示如何使用 Hyperopt 来优化 MLlib 的分布式训练算法。
Hyperopt 和 MLlib 分布式训练笔记本
笔记本示例:将 Hyperopt 与 HorovodRunner 配合使用
HorovodRunner 是用于在 Databricks 上运行分布式深度学习工作负载的常规 API。 HorovodRunner 将 Horovod 与 Spark 的屏障模式相集成,为 Spark 上长时间运行的深度学习训练作业提供更高的稳定性。
示例笔记本演示如何使用 Hyperopt 来优化分布式训练,以便基于 HorovodRunner 进行深度学习。