I need to change the flavors "sklearn_version" in mlflow from "0.22.1" to "1.0.0" on azure machine learning when I log my trained model, since this model will be incompatible with the sklearn version that I am using for deployment during inference. I could change the version of sklearn in conda.yml file by setting "conda_env" in
mlflow.sklearn.log_model(conda_env= 'my_env')
here is the screen shot of requirements.txt
however, sklearn version under flavors in MLmodel file remains unchanged and that is the file that causes problem:
and here is script that I use to create this mlflow experiment in azure machine learning notebooks.
import mlflow
from sklearn.tree import DecisionTreeRegressor
from azureml.core import Workspace
from azureml.core.model import Model
from azureml.mlflow import register_model
def run_model(ws, experiment_name, run_name, x_train, y_train):
# set up MLflow to track the metrics
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
mlflow.set_experiment(experiment_name)
with mlflow.start_run(run_name=run_name) as run:
# fit model
regression_model = DecisionTreeRegressor()
regression_model.fit(x_train, y_train)
# log training score
training_score = regression_model.score(x_train, y_train)
mlflow.log_metric("Training score", training_score)
my_conda_env = {
"name": "mlflow-env",
"channels": ["conda-forge"],
"dependencies": [
"python=3.8.5",
{
"pip": [
"pip",
"scikit-learn~=1.0.0",
"uuid==1.30",
"lz4==4.0.0",
"psutil==5.9.0",
"cloudpickle==1.6.0",
"mlflow",
],
},
],
}
# register the model
mlflow.sklearn.log_model(regression_model, "model", conda_env=my_conda_env)
model_uri = f"runs:/{run.info.run_id}/model"
model = mlflow.register_model(model_uri, "sklearn_regression_model")
if __name__ == '__main__':
# connect to your workspace
ws = Workspace.from_config()
# create experiment and start logging to a new run in the experiment
experiment_name = "exp_name"
# mlflow run name
run_name= '1234'
# get train data
x_train, y_train = get_train_data()
run_model(ws, experiment_name, run_name, x_train, y_train)
Any idea how can change the flavor sklearn version in MLmodel file from "0.22.1" to "1.0.0" in my script?
With many thanks in advance!
2
Answers
I was finally able to solve this issue. Apparently flavors within mlflow MLfile use the version of installed scikit-learn within the workspace. all I needed to to was to upgrade the scikit-learn from cli within workspace.
The modifications of the versions must be from
"requirements.txt"
. We need to manually override the versions we need and move the build to the pipeline.Manually edit the following code
The below code should be in conda.yml
The following code block must be there in python_env.yaml
The following thing must be there in requirements.txt