def _run_entry_point(command, work_dir, experiment_id, run_id): """ Run an entry point command in a subprocess, returning a SubmittedRun that can be used to query the run's status. :param command: Entry point command to run :param work_dir: Working directory in which to run the command :param run_id: MLflow run ID associated with the entry point execution. """ env = os.environ.copy() env.update(get_run_env_vars(run_id, experiment_id)) env.update(get_databricks_env_vars(tracking_uri=mlflow.get_tracking_uri())) _logger.info("=== Running command '%s' in run with ID '%s' === ", command, run_id) # in case os name is not 'nt', we are not running on windows. It introduces # bash command otherwise. if os.name != "nt": process = subprocess.Popen(["bash", "-c", command], close_fds=True, cwd=work_dir, env=env) else: # process = subprocess.Popen(command, close_fds=True, cwd=work_dir, env=env) process = subprocess.Popen(["cmd", "/c", command], close_fds=True, cwd=work_dir, env=env) return LocalSubmittedRun(run_id, process)
def get_docker_tracking_cmd_and_envs(tracking_uri): cmds = [] env_vars = dict() local_path, container_tracking_uri = _get_local_uri_or_none(tracking_uri) if local_path is not None: cmds = ["-v", "%s:%s" % (local_path, _MLFLOW_DOCKER_TRACKING_DIR_PATH)] env_vars[tracking._TRACKING_URI_ENV_VAR] = container_tracking_uri env_vars.update(get_databricks_env_vars(tracking_uri)) return cmds, env_vars
def _invoke_mlflow_run_subprocess(work_dir, entry_point, parameters, experiment_id, use_conda, storage_dir, run_id): """ Run an MLflow project asynchronously by invoking ``mlflow run`` in a subprocess, returning a SubmittedRun that can be used to query run status. """ _logger.info("=== Asynchronously launching MLflow run with ID %s ===", run_id) mlflow_run_arr = _build_mlflow_run_cmd(uri=work_dir, entry_point=entry_point, storage_dir=storage_dir, use_conda=use_conda, run_id=run_id, parameters=parameters) env_vars = get_run_env_vars(run_id, experiment_id) env_vars.update(get_databricks_env_vars(mlflow.get_tracking_uri())) mlflow_run_subprocess = _run_mlflow_run_cmd(mlflow_run_arr, env_vars) return LocalSubmittedRun(run_id, mlflow_run_subprocess)