Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
注意
不再维护 Hyperopt 的开源版本。
Hyperopt 将在下一个主要 DBR ML 版本中被删除。 Azure Databricks 建议使用 Optuna 来进行单节点优化,或者使用 RayTune 来获得与已弃用的 Hyperopt 分布式超参数优化功能类似的体验。 详细了解如何在 Azure Databricks 上使用 RayTune。
最佳做法
- 贝叶斯方法比网格搜索和随机搜索要有效得多。 因此,使用 Hyperopt Tree of Parzen Estimators (TPE) 算法可以探索更多的超参数和更大的范围。 使用域知识限制搜索域可以优化调整并产生更好的结果。
- 使用
hp.choice()时,Hyperopt 将返回选择列表的索引。 因此,登录到 MLflow 中的参数也是索引。 使用hyperopt.space_eval()检索参数值。 - 对于训练时间较长的模型,请首先试验小型数据集和大量的超参数。 使用 MLflow 识别表现最好的模型,并确定哪些超参数可修复。 这样,在准备大规模优化时可以减小参数空间。
- 利用 Hyperopt 对条件维度和超参数的支持。 例如,评估梯度下降的多种形式时,可以让 Hyperopt 包含仅适用于部分形式的条件超参数,而不是将超参数空间限制为常见的超参数。 有关使用条件参数的详细信息,请参阅定义搜索空间。
- 使用
SparkTrials时,请为只有 CPU 的群集和支持 GPU 的群集适当配置并行度。 在 Azure Databricks 中,CPU 和 GPU 群集在每个工作器节点上使用不同数量的执行程序线程。 CPU 群集为每个节点使用多个执行程序线程。 GPU 群集仅为每个节点使用一个执行程序线程,以避免尝试使用同一 GPU 的多个 Spark 任务之间发生冲突。 虽然通常这最适用于为 GPU 编写的库,但这意味着 GPU 群集上的最大并行度减少了,因此请注意在选择 GPU 实例类型时每个试验可使用的 GPU 数量。 有关详细信息,请参阅支持 GPU 的群集。 - 在自动缩放群集上不要使用
SparkTrials。 Hyperopt 在执行开始时会选择并行度值。 如果群集稍后自动缩放,则 Hyperopt 将无法利用新的群集大小。
故障排除
- 报告的 NaN(非数值)损失通常表示传递给返回了 NaN 的
fmin()的目标函数。 这不影响其他运行,可以放心地忽略它。 为了防止出现这种结果,请尝试调整超参数空间或修改目标函数。 - 由于 Hyperopt 使用随机搜索算法,这种损失通常不会随每次运行而单调降低。 但是,这些方法通常能够比使用其他方法更快地找到最佳的超参数。
- Hyperopt 和 Spark 都会产生开销,在较短试运行(数十秒)的持续时间内,这些开销可能占主导。 观测到的加速效果可能很小,甚至为零。
示例笔记本:不同大小的数据集的最佳做法
SparkTrials 在 Spark 工作器节点上运行试用。 本笔记本指导了在使用 SparkTrials 时如何将不同数量级的数据集移动到工作器节点。