Pokud je v Hyperoptu povolená možnost SparkTrials, spuštění nejsou vnořená
Problém
SparkTrials je rozšíření Hyperopt, které umožňuje distribuci běhů na pracovníky Sparku.
Když spustíte MLflow spuštěný s nástrojem nested=True
v pracovní funkci, výsledky by se měly vnořovat do nadřazeného spuštění.
V některých případech nejsou výsledky vnořené v nadřazeném běhu, i když jste nested=True
v pracovní funkci spustili SparkTrials.
Příklad:
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
)
Očekávané výsledky:
Skutečné výsledky:
Příčina
Open source verze Hyperopt nepodporuje požadované funkce, které jsou nezbytné pro správně vnořené SparkTrials MLflow spuštěné v Azure Databricks.
Řešení
Databricks Runtime pro Machine Learning obsahuje interní rozvětvení Hyperopt s dalšími funkcemi. Pokud chcete používat SparkTrials, měli byste použít Databricks Runtime pro Machine Learning místo ruční instalace Hyperopt z open source úložišť.