Hyperopt içinde SparkTrials etkinleştirildiğinde çalıştırmalar iç içe yerleştirilmiyor

Sorun

Mini denemeler, bir hiper optuzantısıdır ve çalışanların Spark çalışanlarına dağıtılmasını sağlar.

Çalışan işlevinde ile bir MLflow çalıştırmayı başlattığınızda nested=True , sonuçların üst çalıştırmanın altında iç içe olması gerekir.

Bazen, çalışan işlevinde Ile birlikte mini denemeler çalıştırsanız bile sonuçlar üst çalıştırmanın altına doğru iç içe değildir nested=True .

Örneğin:

from hyperopt import fmin, tpe, hp, Trials, STATUS_OK

def train(params):
  """
  An example train method that computes the square of the input.
  This method will be passed to `hyperopt.fmin()`.

  :param params: hyperparameters. Its structure is consistent with how search space is defined. See below.
  :return: dict with fields 'loss' (scalar loss) and 'status' (success/failure status of run)
  """
  with mlflow.start_run(run_name='inner_run', nested=True) as run:

    x, = params
  return {'loss': x ** 2, 'status': STATUS_OK}

with mlflow.start_run(run_name='outer_run_with_sparktrials'):
  spark_trials_run_id = mlflow.active_run().info.run_id
  argmin = fmin(
    fn=train,
    space=search_space,
    algo=algo,
    max_evals=16,
    trials=spark_trials
  )

Beklenen sonuçlar:

Mini denemelerdeki çıkış bekleniyor

Gerçek sonuçlar:

Mini denemelerinden gerçek çıkış

Nedeni

Hyperopt 'un açık kaynak sürümü Azure Databricks, Mini akış çalıştırmalarını, üzerinde doğru bir şekilde iç içe aktarmak için gerekli özellikleri desteklemiyor.

Çözüm

Machine Learning için Databricks Runtime, ek özelliklerle hiper opt 'un dahili çatalını içerir. Mini kullanma denemeleri kullanmak istiyorsanız, açık kaynak depolarından el ile hiper opt yüklemek yerine Machine Learning için Databricks Runtime kullanmanız gerekir.