pynavio
pynavio is a publicly available Python package that helps a user automate some steps for wrapping and simplify the handling of navio models.
pynavio is available on PyPi.
Features
Pynavio.Client
is a navio API client that enables users to upload models and data, deploy and retrain models etc.Pynavio.mlflow.to_navio
function callsmlflow.pyfunc.save_model
function, saving a model zip file as required by navio.- it enables inferring the conda environment (with pip requirements) and adding extra pip dependencies to the inferred environment
- it enables adding sys dependencies to the navio model
- it also validates the models with Pynavio.mlflow.ModelValidator by default
Pynavio.mlflow.ModelValidator
is a class that validates the model (prediction/example request/MLmodel metadata schema checks, warnings related nested types/big model sizes)Pynavio.infer_external_dependencies
is a helper function that infers the external dependencies based on the file path. For its limitations please refer to its doc string.Pynavio.infer_imported_code_path
is a helper function that infers the imported code paths based on the file path and the root path. For its limitations please refer to its doc string.Pynavio.make_example_request
generates a request schema for a navio model from data.
Metadata
To automate the generation of metadata field values for the MLmodel file, use pynavio.mlflow.to_navio
setting the corresponding keywords to their corresponding values: example_request
, explanations
, dataset
and oodd
, e.g. :
to_navio(...,
example_request=example_request,
explanations='disabled',
dataset=dataset,
oodd='disabled')
Saving a model
pynavio.mlflow.to_navio
- this function calls the mlflow.pyfunc.save_model
function, saving a model zip file following specifications as required by navio.
Infer Dependencies
pynavio.infer_external_dependencies
is a helper function that infers the external dependencies based on the file path, automating the step of mangaging the model's dependencies to some extent. For its limitations please refer to its doc string. The inferred dependencies can be provided to pip_package
argument to pynavio.mlflow.to_navio
:
to_navio(...,
pip_packages=infer_external_dependencies(__file__)
)
Code Path
pynavio.infer_imported_code_path
is a helper function that infers the imported code paths based on the file path and the root path For its limitations please refer to its doc string.
This function needs to be called from the script that imports the model source code (with the to_navio
call), so that the code paths are inferred relative to the script. The derived code path can be then passed to the model setup function.
# model.py
...
def setup(code_path):
...
to_navio(...,
code_path=code_path
)
# main_script.py
import model
code_path = infer_imported_code_path(__file__, rootpath)
model.setup(code_path)
Request Schema
pynavio.make_example_request
generates a request schema for a navio model from data.
example_request = make_example_request(
df.to_dict(orient='records')[0], 'target')
to_navio(...,
example_request=example_request)
In order to automate the inclusion of a model's data set into MLflow model archive, pynavio.mlfow.to_navio
dataset
keyword needs to be set:
dataset = dict(name='data', path=f'{tmp_dir}/data.csv')
to_navio(...,
dataset=dataset)