def test_get_experiment_id_in_databricks_with_active_experiment_returns_active_experiment_id( ): with TempDir(chdr=True): exp_name = "random experiment %d" % random.randint(1, 1e6) exp_id = kiwi.create_experiment(exp_name) kiwi.set_experiment(exp_name) notebook_id = str(int(exp_id) + 73) with mock.patch("mlflow.tracking.fluent.is_in_databricks_notebook") as notebook_detection_mock,\ mock.patch("mlflow.tracking.fluent.get_notebook_id") as notebook_id_mock: notebook_detection_mock.return_value = True notebook_id_mock.return_value = notebook_id assert _get_experiment_id() != notebook_id assert _get_experiment_id() == exp_id
def test_get_experiment_id_in_databricks_with_experiment_defined_in_env_returns_env_experiment_id( ): with TempDir(chdr=True): exp_name = "random experiment %d" % random.randint(1, 1e6) exp_id = kiwi.create_experiment(exp_name) notebook_id = str(int(exp_id) + 73) HelperEnv.set_values(experiment_id=exp_id) with mock.patch("mlflow.tracking.fluent.is_in_databricks_notebook") as notebook_detection_mock,\ mock.patch("mlflow.tracking.fluent.get_notebook_id") as notebook_id_mock: notebook_detection_mock.side_effect = lambda *args, **kwargs: True notebook_id_mock.side_effect = lambda *args, **kwargs: notebook_id assert _get_experiment_id() != notebook_id assert _get_experiment_id() == exp_id
def _resolve_experiment_id(experiment_name=None, experiment_id=None): """ Resolve experiment. Verifies either one or other is specified - cannot be both selected. If ``experiment_name`` is provided and does not exist, an experiment of that name is created and its id is returned. :param experiment_name: Name of experiment under which to launch the run. :param experiment_id: ID of experiment under which to launch the run. :return: str """ if experiment_name and experiment_id: raise MlflowException( "Specify only one of 'experiment_name' or 'experiment_id'.") if experiment_id: return str(experiment_id) if experiment_name: client = tracking.MlflowClient() exp = client.get_experiment_by_name(experiment_name) if exp: return exp.experiment_id else: print( "INFO: '{}' does not exist. Creating a new experiment".format( experiment_name)) return client.create_experiment(experiment_name) return _get_experiment_id()
def test_get_experiment_id_in_databricks_detects_notebook_id_by_default(): notebook_id = 768 with mock.patch("mlflow.tracking.fluent.is_in_databricks_notebook") as notebook_detection_mock,\ mock.patch("mlflow.tracking.fluent.get_notebook_id") as notebook_id_mock: notebook_detection_mock.return_value = True notebook_id_mock.return_value = notebook_id assert _get_experiment_id() == notebook_id
def test_get_experiment_id_with_active_experiment_returns_active_experiment_id( ): # Create a new experiment and set that as active experiment with TempDir(chdr=True): name = "Random experiment %d" % random.randint(1, 1e6) exp_id = kiwi.create_experiment(name) assert exp_id is not None kiwi.set_experiment(name) assert _get_experiment_id() == exp_id
def _already_ran(entry_point_name, parameters, git_commit, experiment_id=None): """Best-effort detection of if a run with the given entrypoint name, parameters, and experiment id already ran. The run must have completed successfully and have at least the parameters provided. """ experiment_id = experiment_id if experiment_id is not None else _get_experiment_id( ) client = kiwi.tracking.MlflowClient() all_run_infos = reversed(client.list_run_infos(experiment_id)) for run_info in all_run_infos: full_run = client.get_run(run_info.run_id) tags = full_run.data.tags if tags.get(mlflow_tags.MLFLOW_PROJECT_ENTRY_POINT, None) != entry_point_name: continue match_failed = False for param_key, param_value in six.iteritems(parameters): run_value = full_run.data.params.get(param_key) if run_value != param_value: match_failed = True break if match_failed: continue if run_info.to_proto().status != RunStatus.FINISHED: eprint(("Run matched, but is not FINISHED, so skipping " "(run_id=%s, status=%s)") % (run_info.run_id, run_info.status)) continue previous_version = tags.get(mlflow_tags.MLFLOW_GIT_COMMIT, None) if git_commit != previous_version: eprint(( "Run matched, but has a different source version, so skipping " "(found=%s, expected=%s)") % (previous_version, git_commit)) continue return client.get_run(run_info.run_id) eprint("No matching run has been found.") return None
def test_get_experiment_id_with_no_active_experiments_returns_zero(): assert _get_experiment_id() == "0"