π MLflowΒΆ
Automatically evaluate your ML models with MLflowβs evaluation API and Giskard as a plugin.
Why MLflow?ΒΆ
MLflow is an open-source platform for managing end-to-end machine learning (ML) workflows. It was developed by Databricks and has gained popularity in the machine learning community for its versatility and ease of use. MLflow provides a set of tools and functionalities that help data scientists and machine learning engineers with the following aspects of the ML development process:
Experiment Tracking: Log and track ML experiments.
Code Packaging: Easily package ML code for reproducibility.
Model Versioning: Keep track of different model versions.
Model Deployment: Integrate with deployment platforms.
UI and Community: User-friendly UI with broad community support.
Why integrating Giskard?ΒΆ
Integrating Giskard with MLflow offers several compelling advantages for managing and enhancing machine learning workflows:
Seamless Integration with
mlflow.evaluate()
: Giskard effortlessly integrates with MLflowβs evaluation API, simplifying vulnerability assessment.Automated Vulnerability Detection: Giskardβs scan feature ensures the identification of hidden vulnerabilities in ML models by generating a comprehensive report that can be logged into MLflow.
Tabular and NLP models: wherein some of the most important vulnerabilities revolves around performance biases, data leakage, unrobustness, and more.
LLMs: wherein some of the most critical vulnerabilities are Prompt Injection (when LLMs are manipulated to behave as the attacker wishes), Sensitive Information Disclosure (when LLMs inadvertently leak confidential information), Hallucination (when LLMs generate inaccurate or inappropriate content), and more.
Customizable Tests: Giskard generates tailored tests based on the detected vulnerabilities. You can further customize these tests by defining domain-specific data slicers and transformers.
Enhanced Model Governance: This integration supports transparent model evaluation and governance, crucial for meeting best practices and compliance requirements.
MLflowβs evaluate
API and the Giskard pluginΒΆ
In order to use the plugin, you would first need to:
Install
mlflow
to access to themlflow.evaluate()
API.Install
giskard
(follow these instructions) to access to thegiskard
evaluator.
After completing the installation process, you will be able to observe giskard as part of mlflowβs evaluators:
import mlflow
mlflow.models.list_evaluators() # ['default', 'giskard']
The configuration of the giskard evaluator can be done entirely through the evaluator_config
argument that can yield 3 keys:
model_config
: to be filled according to our guides with the help of our model API reference.dataset_config
: to be filled according to our guides with the help of our dataset API reference.scan_config
: to be filled according to our guides with the help of our scan API reference.
Hereβs the integration in a nutshell:
evaluator_config = {"model_config": {"classification_labels": ["no", "yes"]},
"dataset_config": {"name": "Articles"},
"scan_config": {"params": {"text_perturbation": {"num_samples": 1000}}}}
with mlflow.start_run(run_name="my_run") as run:
model_uri = mlflow.sklearn.log_model(..., pyfunc_predict_fn="predict_proba").model_uri
mlflow.evaluate(model=model_uri,
model_type="classifier",
data=df_sample,
evaluators="giskard",
evaluator_config=evaluator_config)
Hint
Data preprocessing: In order to include your data preprocessing into the prediction pipeline, you should log a custom python model with MLflow.
sklearn
models: we strongly recommend tolog_model
withpyfunc_predict_fn="predict_proba"
in order to get the best out of the evaluation.
For more complete examples, check our notebook examples below.
Notebook examplesΒΆ
π Tabular
π LLM
Logging giskard objects to MLflowΒΆ
It is possible to log 4 giskard objects into MLflow:
A giskard dataset
A giskard model
The scan results
The test-suite results
Here are two options on how to achieve this.
Option 1 (via the fluent API)ΒΆ
import mlflow
with mlflow.start_run() as run:
giskard_model.to_mlflow()
giskard_dataset.to_mlflow()
scan_results.to_mlflow()
test_suite_results.to_mlflow()
Option 2 (via MlflowClient)ΒΆ
from mlflow import MlflowClient
client = MlflowClient()
experiment_id = "0"
run = client.create_run(experiment_id)
giskard_model.to_mlflow(client, run.info.run_id)
giskard_dataset.to_mlflow(client, run.info.run_id)
scan_results.to_mlflow(client, run.info.run_id)
test_suite_results.to_mlflow(client, run.info.run_id)