-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathExport_Experiment.py
More file actions
156 lines (107 loc) · 4.43 KB
/
Copy pathExport_Experiment.py
File metadata and controls
156 lines (107 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# Databricks notebook source
# MAGIC %md ### Export Experiment
# MAGIC
# MAGIC ##### Overview
# MAGIC * Exports an experiment and its runs (artifacts too) to a DBFS directory.
# MAGIC * Output file `manifest.json` contains top-level experiment metadata.
# MAGIC * Each run and its artifacts are stored as a sub-directory.
# MAGIC * Notebooks also can be exported in several formats.
# MAGIC
# MAGIC #### Output folder
# MAGIC ```
# MAGIC
# MAGIC +-model.json
# MAGIC +-d2309e6c74dc4679b576a37abf6b6af8/
# MAGIC | +-run.json
# MAGIC | +-artifacts/
# MAGIC | +-plot.png
# MAGIC | +-sklearn-model/
# MAGIC | | +-model.pkl
# MAGIC | | +-conda.yaml
# MAGIC | | +-MLmodel
# MAGIC ```
# MAGIC
# MAGIC ##### Widgets
# MAGIC * Experiment ID or Name - Either the experiment ID or experiment name.
# MAGIC * Destination base folder - Base output directory to which the experiment ID will be appended to. All experiment data will be saved here.
# MAGIC * Export metadata tags - Log source metadata such as:
# MAGIC * mlflow_export_import.metadata.experiment_id
# MAGIC * mlflow_export_import.metadata.experiment-name
# MAGIC * Notebook formats:
# MAGIC * Standard Databricks notebook formats such as SOURCE, HTML, JUPYTER, DBC. See [Databricks Export Format](https://docs.databricks.com/dev-tools/api/latest/workspace.html#notebookexportformat) documentation.
# MAGIC
# MAGIC #### Setup
# MAGIC * See Setup in [README]($00_README_Export_Import).
# COMMAND ----------
# MAGIC %md ### Create and process widgets
# COMMAND ----------
dbutils.widgets.text(" Experiment ID or Name", "")
experiment_id_or_name = dbutils.widgets.get(" Experiment ID or Name")
dbutils.widgets.text("Destination base folder", "dbfs:/mnt/andre-work/exim/experiments")
output_dir = dbutils.widgets.get("Destination base folder")
dbutils.widgets.dropdown("Export metadata tags","no",["yes","no"])
export_metadata_tags = dbutils.widgets.get("Export metadata tags") == "yes"
all_formats = [ "SOURCE", "DBC", "HTML", "JUPYTER" ]
dbutils.widgets.multiselect("Notebook formats",all_formats[0],all_formats)
formats = dbutils.widgets.get("Notebook formats")
formats = formats.split(",")
if "" in formats: formats.remove("")
experiment_id_or_name, output_dir, export_metadata_tags, formats
print("experiment_id_or_name:",experiment_id_or_name)
print("output_dir:",output_dir)
print("export_metadata_tags:",export_metadata_tags)
print("formats:",formats)
# COMMAND ----------
# MAGIC %run ./Common
# COMMAND ----------
if len(experiment_id_or_name)==0: raise Exception("ERROR: Experiment ID or Name is required")
if len(output_dir)==0: raise Exception("ERROR: DBFS destination is required")
import mlflow
from mlflow_export_import.common import mlflow_utils
experiment = mlflow_utils.get_experiment(mlflow.tracking.MlflowClient(), experiment_id_or_name)
output_dir = f"{output_dir}/{experiment.experiment_id}"
experiment.experiment_id, experiment.name, output_dir
# COMMAND ----------
# MAGIC %md ### Display MLflow UI URI of Experiment
# COMMAND ----------
display_experiment_uri(experiment.name)
# COMMAND ----------
# MAGIC %md ### Remove any previous exported experiment data
# MAGIC
# MAGIC Note: may be a bit finicky (S3 eventual consistency). Just try the remove again if subsequent export fails.
# COMMAND ----------
dbutils.fs.rm(output_dir, True)
dbutils.fs.rm(output_dir, False)
# COMMAND ----------
# MAGIC %md ### Export the experiment
# COMMAND ----------
from mlflow_export_import.experiment.export_experiment import ExperimentExporter
exporter = ExperimentExporter(notebook_formats=formats,
export_metadata_tags=export_metadata_tags)
exporter.export_experiment(experiment.experiment_id, output_dir)
# COMMAND ----------
# MAGIC %md ### Display exported experiment files
# COMMAND ----------
import os
output_dir = output_dir.replace("dbfs:","/dbfs")
os.environ['OUTPUT_DIR'] = output_dir
output_dir
# COMMAND ----------
# MAGIC %sh echo $OUTPUT_DIR
# COMMAND ----------
# MAGIC %sh ls -lR $OUTPUT_DIR
# COMMAND ----------
# MAGIC %sh cat $OUTPUT_DIR/manifest.json
# COMMAND ----------
# MAGIC %md #### List run information
# COMMAND ----------
find_run_dir(output_dir, "RUN_DIR", "manifest.json")
# COMMAND ----------
import glob
files = [f for f in glob.glob(f"{output_dir}/*") if not f.endswith("manifest.json")]
os.environ['RUN_DIR'] = files[0]
files[0]
# COMMAND ----------
# MAGIC %sh ls -lR $RUN_DIR
# COMMAND ----------
# MAGIC %sh cat $RUN_DIR/run.json