All MLflow runs are logged to the active experiment, which can be set using any of the following ways:
experiment_id parameter in the mlflow.start_run() command.If no active experiment is set, runs are logged to the notebook experiment.
# basic run
with mlflow.start_run(run_name="Basic RF run"):
# Set the model parameters.
n_estimators = 100
max_depth = 6
max_features = 3
# Create and train model.
rf = RandomForestRegressor(n_estimators = n_estimators, max_depth = max_depth, max_features = max_features)
rf.fit(X_train, y_train)
# Use the model to make predictions on the test dataset.
predictions = rf.predict(X_test)
# Log the model parameters used for this run.
mlflow.log_param("num_trees", n_estimators)
mlflow.log_param("maxdepth", max_depth)
mlflow.log_param("max_feat", max_features)
# Define a metric to use to evaluate the model.
mse = mean_squared_error(y_test, predictions)
# Log the value of the metric from this run.
mlflow.log_metric("mse", mse)
# Log the model created by this run.
mlflow.sklearn.log_model(rf, "random-forest-model")
# mlflow.pyfunc.log_model("name_of_model", python_model=model, env)
# Save the table of predicted values
savetxt('predictions.csv', predictions, delimiter=',')
# Log the saved table as an artifact
mlflow.log_artifact("predictions.csv")
expId = mlflow.get_experiment_by_name("/Shared/diabetes_experiment/").experiment_id
df = spark.read.format("mlflow-experiment").load(expId)
display(df)
# OR
df = spark.read.format("mlflow-experiment").load("3270527066281272")
filtered_df = df.filter("metrics.loss < 0.01 AND params.learning_rate > '0.001'")
display(filtered_df)
from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository
model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
from mlflow.tracking import MlflowClient
client = MlflowClient()
display(clienet.list_run_infos(experiment_id))
runs = spark.read.format("mlflow-experiment").load(experiment_id)
run_rf = runs.orderBy("start_time", ascending=False).first()
client.list_artifacts(run_rf.run_id)
client.get_run(run_rf.run_id).data.metrics
<aside> 💡
Background: https://mlflow.org/docs/latest/model/signatures.html#mlflow-model-signatures-and-input-examples-guide
</aside>
Previously, when logging a model in MLflow we only logged the model and name for the model artifact with .log_model(model, model_name).However, it is a best practice to also log a model signature and input example. This allows for better schema checks and, therefore, integration with automated deployment tools.