Python mlflow.sklearn() Examples
The following are 30
code examples of mlflow.sklearn().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
mlflow
, or try the search function
.
Example #1
Source File: runner.py From ai-platform with MIT License | 8 votes |
def fit(self): """ Gets data and preprocess by prepare_data() function Trains with the selected parameters from grid search and saves the model """ data = self.get_input() df_train, df_test = self.prepare_data(data) xtr, ytr = df_train.drop(['Value'], axis=1), df_train['Value'].values xgbtrain = xgb.DMatrix(xtr, ytr) reg_cv = self.grid_search(xtr, ytr) param = reg_cv.best_params_ bst = xgb.train(dtrain=xgbtrain, params=param) # save model to file mlflow.sklearn.save_model(bst, "model") return df_test
Example #2
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_cli_build_image_with_absolute_model_path_calls_expected_azure_routines( sklearn_model, model_path): mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: result = CliRunner(env={"LC_ALL": "en_US.UTF-8", "LANG": "en_US.UTF-8"}).invoke( mlflow.azureml.cli.commands, [ 'build-image', '-m', model_path, '-w', "test_workspace", '-i', "image_name", '-n', "model_name", ]) assert result.exit_code == 0 assert aml_mocks["register_model"].call_count == 1 assert aml_mocks["create_image"].call_count == 1 assert aml_mocks["load_workspace"].call_count == 1
Example #3
Source File: sklearn.py From mlflow with Apache License 2.0 | 6 votes |
def get_default_conda_env(include_cloudpickle=False): """ :return: The default Conda environment for MLflow Models produced by calls to :func:`save_model()` and :func:`log_model()`. """ import sklearn pip_deps = None if include_cloudpickle: import cloudpickle pip_deps = ["cloudpickle=={}".format(cloudpickle.__version__)] return _mlflow_conda_env( additional_conda_deps=[ "scikit-learn={}".format(sklearn.__version__), ], additional_pip_deps=pip_deps, additional_conda_channels=None )
Example #4
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_build_image_registers_model_and_creates_image_with_specified_names( sklearn_model, model_path): mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() model_name = "MODEL_NAME_1" image_name = "IMAGE_NAME_1" mlflow.azureml.build_image( model_uri=model_path, workspace=workspace, model_name=model_name, image_name=image_name) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] assert register_model_call_kwargs["model_name"] == model_name create_image_call_args = aml_mocks["create_image"].call_args_list assert len(create_image_call_args) == 1 _, create_image_call_kwargs = create_image_call_args[0] assert create_image_call_kwargs["name"] == image_name
Example #5
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_build_image_generates_model_and_image_names_meeting_azureml_resource_naming_requirements( sklearn_model, model_path): aml_resource_name_max_length = 32 mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() mlflow.azureml.build_image(model_uri=model_path, workspace=workspace) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] called_model_name = register_model_call_kwargs["model_name"] assert len(called_model_name) <= aml_resource_name_max_length create_image_call_args = aml_mocks["create_image"].call_args_list assert len(create_image_call_args) == 1 _, create_image_call_kwargs = create_image_call_args[0] called_image_name = create_image_call_kwargs["name"] assert len(called_image_name) <= aml_resource_name_max_length
Example #6
Source File: sklearn.py From mlflow with Apache License 2.0 | 6 votes |
def _save_model(sk_model, output_path, serialization_format): """ :param sk_model: The scikit-learn model to serialize. :param output_path: The file path to which to write the serialized model. :param serialization_format: The format in which to serialize the model. This should be one of the following: ``mlflow.sklearn.SERIALIZATION_FORMAT_PICKLE`` or ``mlflow.sklearn.SERIALIZATION_FORMAT_CLOUDPICKLE``. """ with open(output_path, "wb") as out: if serialization_format == SERIALIZATION_FORMAT_PICKLE: pickle.dump(sk_model, out) elif serialization_format == SERIALIZATION_FORMAT_CLOUDPICKLE: import cloudpickle cloudpickle.dump(sk_model, out) else: raise MlflowException( message="Unrecognized serialization format: {serialization_format}".format( serialization_format=serialization_format), error_code=INTERNAL_ERROR)
Example #7
Source File: runner.py From ai-platform with MIT License | 6 votes |
def predict(self, df_test): """ Makes prediction for the next 7 days electricity consumption. """ # load model from file loaded_model = mlflow.sklearn.load_model("model") # make predictions for test data xts, yts = df_test.drop(['Value'], axis=1), df_test['Value'].values p = loaded_model.predict(xgb.DMatrix(xts)) prediction = pd.DataFrame({'Prediction': p}) mape, rmse, mae, r2 = ForecastRunner.evaluation_metrics(yts, p) print('MAPE: {}'.format(mape)) print('RMSE: {}'.format(rmse)) print('R2: {}'.format(r2)) print('MAE: {}'.format(mae)) mlflow.log_metric("MAPE", mape) mlflow.log_metric("RMSE", rmse) mlflow.log_metric("R2", r2) mlflow.log_metric("MAE", mae) ForecastRunner.plot_result(yts, p) self.save_output(df_test, prediction)
Example #8
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_build_image_includes_user_specified_tags_in_azure_image_and_model_tags( sklearn_model, model_path): custom_tags = { "User": "Corey", "Date": "Today", "Other": "Entry", } mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() mlflow.azureml.build_image(model_uri=model_path, workspace=workspace, tags=custom_tags) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] called_tags = register_model_call_kwargs["tags"] assert custom_tags.items() <= called_tags.items() create_image_call_args = aml_mocks["create_image"].call_args_list assert len(create_image_call_args) == 1 _, create_image_call_kwargs = create_image_call_args[0] image_config = create_image_call_kwargs["image_config"] assert custom_tags.items() <= image_config.tags.items()
Example #9
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_build_image_includes_user_specified_description_in_azure_image_and_model_tags( sklearn_model, model_path): custom_description = "a custom description" mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() mlflow.azureml.build_image( model_uri=model_path, workspace=workspace, description=custom_description) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] assert register_model_call_kwargs["description"] == custom_description create_image_call_args = aml_mocks["create_image"].call_args_list assert len(create_image_call_args) == 1 _, create_image_call_kwargs = create_image_call_args[0] image_config = create_image_call_kwargs["image_config"] assert image_config.description == custom_description
Example #10
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_cli_build_image_with_relative_model_path_calls_expected_azure_routines(sklearn_model): with TempDir(chdr=True): model_path = "model" mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: result = CliRunner(env={"LC_ALL": "en_US.UTF-8", "LANG": "en_US.UTF-8"}).invoke( mlflow.azureml.cli.commands, [ 'build-image', '-m', model_path, '-w', 'test_workspace', '-i', 'image_name', '-n', 'model_name', ]) assert result.exit_code == 0 assert aml_mocks["register_model"].call_count == 1 assert aml_mocks["create_image"].call_count == 1 assert aml_mocks["load_workspace"].call_count == 1
Example #11
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_cli_build_image_with_runs_uri_calls_expected_azure_routines(sklearn_model): artifact_path = "model" with mlflow.start_run(): mlflow.sklearn.log_model(sk_model=sklearn_model, artifact_path=artifact_path) run_id = mlflow.active_run().info.run_id model_uri = "runs:/{run_id}/{artifact_path}".format( run_id=run_id, artifact_path=artifact_path) with AzureMLMocks() as aml_mocks: result = CliRunner(env={"LC_ALL": "en_US.UTF-8", "LANG": "en_US.UTF-8"}).invoke( mlflow.azureml.cli.commands, [ 'build-image', '-m', model_uri, '-w', 'test_workspace', '-i', 'image_name', '-n', 'model_name', ]) assert result.exit_code == 0 assert aml_mocks["register_model"].call_count == 1 assert aml_mocks["create_image"].call_count == 1 assert aml_mocks["load_workspace"].call_count == 1
Example #12
Source File: test_image_creation.py From mlflow with Apache License 2.0 | 6 votes |
def test_cli_build_image_with_remote_uri_calls_expected_azure_routines( sklearn_model, model_path, mock_s3_bucket): mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) artifact_path = "model" artifact_root = "s3://{bucket_name}".format(bucket_name=mock_s3_bucket) s3_artifact_repo = S3ArtifactRepository(artifact_root) s3_artifact_repo.log_artifacts(model_path, artifact_path=artifact_path) model_uri = artifact_root + "/" + artifact_path with AzureMLMocks() as aml_mocks: result = CliRunner(env={"LC_ALL": "en_US.UTF-8", "LANG": "en_US.UTF-8"}).invoke( mlflow.azureml.cli.commands, [ 'build-image', '-m', model_uri, '-w', 'test_workspace', '-i', 'image_name', '-n', 'model_name', ]) assert result.exit_code == 0 assert aml_mocks["register_model"].call_count == 1 assert aml_mocks["create_image"].call_count == 1 assert aml_mocks["load_workspace"].call_count == 1
Example #13
Source File: test_deploy.py From mlflow with Apache License 2.0 | 6 votes |
def test_deploy_registers_model_and_creates_service_with_specified_names( sklearn_model, model_path): mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() model_name = "MODEL_NAME_1" service_name = "service_name_1" mlflow.azureml.deploy( model_uri=model_path, workspace=workspace, model_name=model_name, service_name=service_name) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] assert register_model_call_kwargs["model_name"] == model_name model_deploy_call_args = aml_mocks["model_deploy"].call_args_list assert len(model_deploy_call_args) == 1 _, model_deploy_call_kwargs = model_deploy_call_args[0] assert model_deploy_call_kwargs["name"] == service_name
Example #14
Source File: test_deploy.py From mlflow with Apache License 2.0 | 6 votes |
def test_deploy_generates_model_and_service_names_meeting_azureml_resource_naming_requirements( sklearn_model, model_path): aml_resource_name_max_length = 32 mlflow.sklearn.save_model(sk_model=sklearn_model, path=model_path) with AzureMLMocks() as aml_mocks: workspace = get_azure_workspace() mlflow.azureml.deploy(model_uri=model_path, workspace=workspace) register_model_call_args = aml_mocks["register_model"].call_args_list assert len(register_model_call_args) == 1 _, register_model_call_kwargs = register_model_call_args[0] called_model_name = register_model_call_kwargs["model_name"] assert len(called_model_name) <= aml_resource_name_max_length model_deploy_call_args = aml_mocks["model_deploy"].call_args_list assert len(model_deploy_call_args) == 1 _, model_deploy_call_kwargs = model_deploy_call_args[0] called_service_name = model_deploy_call_kwargs["name"] assert len(called_service_name) <= aml_resource_name_max_length
Example #15
Source File: test_cli.py From mlflow with Apache License 2.0 | 6 votes |
def test_prepare_env_fails(sk_model): if no_conda: pytest.skip("This test requires conda.") with TempDir(chdr=True): with mlflow.start_run() as active_run: mlflow.sklearn.log_model(sk_model, "model", conda_env={"dependencies": ["mlflow-does-not-exist-dep==abc"]}) model_uri = "runs:/{run_id}/model".format(run_id=active_run.info.run_id) # Test with no conda p = subprocess.Popen(["mlflow", "models", "prepare-env", "-m", model_uri, "--no-conda"]) assert p.wait() == 0 # With conda - should fail due to bad conda environment. p = subprocess.Popen(["mlflow", "models", "prepare-env", "-m", model_uri]) assert p.wait() != 0
Example #16
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 6 votes |
def test_model_save_load(sklearn_knn_model, main_scoped_model_class, iris_data, tmpdir): sklearn_model_path = os.path.join(str(tmpdir), "sklearn_model") mlflow.sklearn.save_model(sk_model=sklearn_knn_model, path=sklearn_model_path) def test_predict(sk_model, model_input): return sk_model.predict(model_input) * 2 pyfunc_model_path = os.path.join(str(tmpdir), "pyfunc_model") mlflow.pyfunc.save_model(path=pyfunc_model_path, artifacts={ "sk_model": sklearn_model_path }, conda_env=_conda_env(), python_model=main_scoped_model_class(test_predict)) loaded_pyfunc_model = mlflow.pyfunc.load_pyfunc(model_uri=pyfunc_model_path) np.testing.assert_array_equal( loaded_pyfunc_model.predict(iris_data[0]), test_predict(sk_model=sklearn_knn_model, model_input=iris_data[0]))
Example #17
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 6 votes |
def test_log_model_calls_register_model(sklearn_knn_model, main_scoped_model_class): register_model_patch = mock.patch("mlflow.register_model") with register_model_patch: sklearn_artifact_path = "sk_model_no_run" with mlflow.start_run(): mlflow.sklearn.log_model(sk_model=sklearn_knn_model, artifact_path=sklearn_artifact_path) sklearn_model_uri = "runs:/{run_id}/{artifact_path}".format( run_id=mlflow.active_run().info.run_id, artifact_path=sklearn_artifact_path) def test_predict(sk_model, model_input): return sk_model.predict(model_input) * 2 pyfunc_artifact_path = "pyfunc_model" assert mlflow.active_run() is None mlflow.pyfunc.log_model(artifact_path=pyfunc_artifact_path, artifacts={"sk_model": sklearn_model_uri}, python_model=main_scoped_model_class(test_predict), registered_model_name="AdsModel1") model_uri = "runs:/{run_id}/{artifact_path}".format(run_id=mlflow.active_run().info.run_id, artifact_path=pyfunc_artifact_path) mlflow.register_model.assert_called_once_with(model_uri, "AdsModel1") mlflow.end_run()
Example #18
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 6 votes |
def test_log_model_no_registered_model_name(sklearn_knn_model, main_scoped_model_class): register_model_patch = mock.patch("mlflow.register_model") with register_model_patch: sklearn_artifact_path = "sk_model_no_run" with mlflow.start_run(): mlflow.sklearn.log_model(sk_model=sklearn_knn_model, artifact_path=sklearn_artifact_path) sklearn_model_uri = "runs:/{run_id}/{artifact_path}".format( run_id=mlflow.active_run().info.run_id, artifact_path=sklearn_artifact_path) def test_predict(sk_model, model_input): return sk_model.predict(model_input) * 2 pyfunc_artifact_path = "pyfunc_model" assert mlflow.active_run() is None mlflow.pyfunc.log_model(artifact_path=pyfunc_artifact_path, artifacts={"sk_model": sklearn_model_uri}, python_model=main_scoped_model_class(test_predict)) mlflow.register_model.assert_not_called() mlflow.end_run()
Example #19
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 5 votes |
def test_log_model_persists_specified_conda_env_in_mlflow_model_directory( sklearn_knn_model, main_scoped_model_class, pyfunc_custom_env): sklearn_artifact_path = "sk_model" with mlflow.start_run(): mlflow.sklearn.log_model(sk_model=sklearn_knn_model, artifact_path=sklearn_artifact_path) sklearn_run_id = mlflow.active_run().info.run_id pyfunc_artifact_path = "pyfunc_model" with mlflow.start_run(): mlflow.pyfunc.log_model(artifact_path=pyfunc_artifact_path, artifacts={ "sk_model": utils_get_artifact_uri( artifact_path=sklearn_artifact_path, run_id=sklearn_run_id) }, python_model=main_scoped_model_class(predict_fn=None), conda_env=pyfunc_custom_env) pyfunc_model_path = _download_artifact_from_uri("runs:/{run_id}/{artifact_path}".format( run_id=mlflow.active_run().info.run_id, artifact_path=pyfunc_artifact_path)) pyfunc_conf = _get_flavor_configuration( model_path=pyfunc_model_path, flavor_name=mlflow.pyfunc.FLAVOR_NAME) saved_conda_env_path = os.path.join(pyfunc_model_path, pyfunc_conf[mlflow.pyfunc.ENV]) assert os.path.exists(saved_conda_env_path) assert saved_conda_env_path != pyfunc_custom_env with open(pyfunc_custom_env, "r") as f: pyfunc_custom_env_parsed = yaml.safe_load(f) with open(saved_conda_env_path, "r") as f: saved_conda_env_parsed = yaml.safe_load(f) assert saved_conda_env_parsed == pyfunc_custom_env_parsed
Example #20
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 5 votes |
def _conda_env(): # NB: We need mlflow as a dependency in the environment. return _mlflow_conda_env( additional_conda_deps=None, install_mlflow=False, additional_pip_deps=[ "-e " + os.path.dirname(mlflow.__path__[0]), "cloudpickle=={}".format(cloudpickle.__version__), "scikit-learn=={}".format(sklearn.__version__) ], additional_conda_channels=None)
Example #21
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 5 votes |
def sklearn_logreg_model(iris_data): x, y = iris_data linear_lr = sklearn.linear_model.LogisticRegression() linear_lr.fit(x, y) return linear_lr
Example #22
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 5 votes |
def sklearn_knn_model(iris_data): x, y = iris_data knn_model = sklearn.neighbors.KNeighborsClassifier() knn_model.fit(x, y) return knn_model
Example #23
Source File: test_model_export_with_class_and_artifacts.py From mlflow with Apache License 2.0 | 5 votes |
def iris_data(): iris = sklearn.datasets.load_iris() x = iris.data[:, :2] y = iris.target return x, y
Example #24
Source File: test_model_export_with_loader_module_and_data_path.py From mlflow with Apache License 2.0 | 5 votes |
def sklearn_knn_model(iris_data): x, y = iris_data knn_model = sklearn.neighbors.KNeighborsClassifier() knn_model.fit(x, y) return knn_model
Example #25
Source File: test_model_export_with_loader_module_and_data_path.py From mlflow with Apache License 2.0 | 5 votes |
def iris_data(): iris = sklearn.datasets.load_iris() x = iris.data[:, :2] y = iris.target return x, y
Example #26
Source File: test_cli.py From mlflow with Apache License 2.0 | 5 votes |
def test_build_docker_with_env_override(iris_data, sk_model): with mlflow.start_run() as active_run: mlflow.sklearn.log_model(sk_model, "model") model_uri = "runs:/{run_id}/model".format(run_id=active_run.info.run_id) x, _ = iris_data df = pd.DataFrame(x) image_name = pyfunc_build_image(model_uri, extra_args=["--install-mlflow"]) host_port = get_safe_port() scoring_proc = pyfunc_serve_from_docker_image_with_env_override(image_name, host_port, gunicorn_options) _validate_with_rest_endpoint(scoring_proc, host_port, df, x, sk_model)
Example #27
Source File: test_cli.py From mlflow with Apache License 2.0 | 5 votes |
def test_build_docker(iris_data, sk_model): with mlflow.start_run() as active_run: mlflow.sklearn.log_model(sk_model, "model") model_uri = "runs:/{run_id}/model".format(run_id=active_run.info.run_id) x, _ = iris_data df = pd.DataFrame(x) image_name = pyfunc_build_image(model_uri, extra_args=["--install-mlflow"]) host_port = get_safe_port() scoring_proc = pyfunc_serve_from_docker_image(image_name, host_port) _validate_with_rest_endpoint(scoring_proc, host_port, df, x, sk_model)
Example #28
Source File: sklearn.py From mlflow with Apache License 2.0 | 5 votes |
def load_model(model_uri): """ Load a scikit-learn model from a local file or a run. :param model_uri: The location, in URI format, of the MLflow model, for example: - ``/Users/me/path/to/local/model`` - ``relative/path/to/local/model`` - ``s3://my_bucket/path/to/model`` - ``runs:/<mlflow_run_id>/run-relative/path/to/model`` - ``models:/<model_name>/<model_version>`` - ``models:/<model_name>/<stage>`` For more information about supported URI schemes, see `Referencing Artifacts <https://www.mlflow.org/docs/latest/concepts.html# artifact-locations>`_. :return: A scikit-learn model. .. code-block:: python :caption: Example import mlflow.sklearn sk_model = mlflow.sklearn.load_model("runs:/96771d893a5e46159d9f3b49bf9013e2/sk_models") # use Pandas DataFrame to make predictions pandas_df = ... predictions = sk_model.predict(pandas_df) """ local_model_path = _download_artifact_from_uri(artifact_uri=model_uri) flavor_conf = _get_flavor_configuration(model_path=local_model_path, flavor_name=FLAVOR_NAME) sklearn_model_artifacts_path = os.path.join(local_model_path, flavor_conf['pickled_model']) return _load_model_from_local_file(path=sklearn_model_artifacts_path)
Example #29
Source File: test_cli.py From mlflow with Apache License 2.0 | 5 votes |
def test_serve_gunicorn_opts(iris_data, sk_model): if sys.platform == "win32": pytest.skip("This test requires gunicorn which is not available on windows.") with mlflow.start_run() as active_run: mlflow.sklearn.log_model(sk_model, "model", registered_model_name="imlegit") run_id = active_run.info.run_id model_uris = [ "models:/{name}/{stage}".format(name="imlegit", stage="None"), "runs:/{run_id}/model".format(run_id=run_id) ] for model_uri in model_uris: with TempDir() as tpm: output_file_path = tpm.path("stoudt") with open(output_file_path, "w") as output_file: x, _ = iris_data scoring_response = pyfunc_serve_and_score_model( model_uri, pd.DataFrame(x), content_type=CONTENT_TYPE_JSON_SPLIT_ORIENTED, stdout=output_file, extra_args=["-w", "3"]) with open(output_file_path, "r") as output_file: stdout = output_file.read() actual = pd.read_json(scoring_response.content, orient="records") actual = actual[actual.columns[0]].values expected = sk_model.predict(x) assert all(expected == actual) expected_command_pattern = re.compile(( "gunicorn.*-w 3.*mlflow.pyfunc.scoring_server.wsgi:app")) assert expected_command_pattern.search(stdout) is not None
Example #30
Source File: sklearn.py From mlflow with Apache License 2.0 | 5 votes |
def _load_pyfunc(path): """ Load PyFunc implementation. Called by ``pyfunc.load_pyfunc``. :param path: Local filesystem path to the MLflow Model with the ``sklearn`` flavor. """ return _load_model_from_local_file(path)