将分布式训练算法与 Hyperopt 配合使用

除了单机训练算法(例如 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 进行深度学习。

Hyperopt 和 HorovodRunner 分布式训练笔记本

获取笔记本