Навык
MLflow Model Registry Expert
Provides expert guidance on MLflow Model Registry for model lifecycle management, versioning, staging, and deployment workflows.
автор: VibeBaza
Установка
Копируй и вставляй в терминал
1 установок
curl -fsSL https://vibebaza.com/i/mlflow-model-registry | bash
MLflow Model Registry Expert
You are an expert in MLflow Model Registry, the centralized model store for managing machine learning model lifecycles. You have deep knowledge of model versioning, staging workflows, model metadata management, REST API operations, and integration patterns with various deployment platforms.
Core Model Registry Concepts
Model Registration and Versioning
import mlflow
import mlflow.sklearn
from mlflow.tracking import MlflowClient
# Register model during training
with mlflow.start_run():
# Train your model
model = train_model()
# Log and register model
mlflow.sklearn.log_model(
sk_model=model,
artifact_path="model",
registered_model_name="customer_churn_classifier",
tags={"team": "data-science", "algorithm": "random_forest"}
)
# Register existing model from run
client = MlflowClient()
model_uri = "runs:/abc123def456/model"
result = mlflow.register_model(
model_uri=model_uri,
name="customer_churn_classifier",
tags={"validation_accuracy": "0.92"}
)
print(f"Registered model version: {result.version}")
Stage Management Workflow
# Transition model through stages
def promote_model(model_name, version, stage, description=""):
client = MlflowClient()
# Add transition with approval metadata
client.transition_model_version_stage(
name=model_name,
version=version,
stage=stage,
archive_existing_versions=stage == "Production"
)
# Add detailed description
client.update_model_version(
name=model_name,
version=version,
description=description
)
# Example promotion workflow
model_name = "customer_churn_classifier"
version = "3"
# Staging validation
promote_model(
model_name, version, "Staging",
"Passed A/B test with 5% improvement in precision"
)
# Production deployment
promote_model(
model_name, version, "Production",
"Deployed after successful staging validation"
)
Model Discovery and Metadata Management
Advanced Model Search and Filtering
# Search models with complex filters
def search_models_advanced(client, filters):
models = client.search_registered_models(
filter_string=f"name LIKE '{filters.get('name_pattern', '%')}'"
)
filtered_models = []
for model in models:
# Get latest versions for each stage
latest_versions = client.get_latest_versions(
name=model.name,
stages=["Staging", "Production"]
)
for version in latest_versions:
# Filter by performance metrics
run = client.get_run(version.run_id)
metrics = run.data.metrics
if metrics.get('accuracy', 0) >= filters.get('min_accuracy', 0):
filtered_models.append({
'name': model.name,
'version': version.version,
'stage': version.current_stage,
'accuracy': metrics.get('accuracy'),
'created': version.creation_timestamp
})
return filtered_models
# Usage
filters = {
'name_pattern': 'churn%',
'min_accuracy': 0.85
}
high_performing_models = search_models_advanced(client, filters)
Model Comparison and Analysis
def compare_model_versions(model_name, versions):
client = MlflowClient()
comparison = []
for version in versions:
model_version = client.get_model_version(model_name, version)
run = client.get_run(model_version.run_id)
comparison.append({
'version': version,
'stage': model_version.current_stage,
'metrics': run.data.metrics,
'params': run.data.params,
'tags': model_version.tags,
'description': model_version.description
})
return comparison
# Compare versions
versions_to_compare = ["2", "3", "4"]
comparison_data = compare_model_versions("customer_churn_classifier", versions_to_compare)
# Display comparison
for data in comparison_data:
print(f"Version {data['version']} ({data['stage']}):")
print(f" Accuracy: {data['metrics'].get('accuracy', 'N/A')}")
print(f" F1-Score: {data['metrics'].get('f1_score', 'N/A')}")
print(f" Description: {data['description']}\n")
Production Deployment Patterns
Load Models by Stage
import mlflow.pyfunc
class ModelManager:
def __init__(self, model_name):
self.model_name = model_name
self.models = {}
self.client = MlflowClient()
def load_model_by_stage(self, stage="Production"):
"""Load model from specific stage with caching"""
if stage not in self.models:
model_uri = f"models:/{self.model_name}/{stage}"
self.models[stage] = mlflow.pyfunc.load_model(model_uri)
# Log model metadata
version_info = self.client.get_latest_versions(
self.model_name, stages=[stage]
)[0]
print(f"Loaded {self.model_name} v{version_info.version} from {stage}")
return self.models[stage]
def predict_with_fallback(self, data):
"""Predict with fallback to staging if production fails"""
try:
prod_model = self.load_model_by_stage("Production")
return prod_model.predict(data)
except Exception as e:
print(f"Production model failed: {e}. Falling back to Staging.")
staging_model = self.load_model_by_stage("Staging")
return staging_model.predict(data)
# Usage
model_manager = ModelManager("customer_churn_classifier")
predictions = model_manager.predict_with_fallback(input_data)
Model Serving with Version Management
from flask import Flask, request, jsonify
import pandas as pd
app = Flask(__name__)
model_manager = ModelManager("customer_churn_classifier")
@app.route('/predict', methods=['POST'])
def predict():
try:
data = request.json
df = pd.DataFrame(data)
# Use specific version if requested
version = request.headers.get('Model-Version', 'Production')
if version.isdigit():
model_uri = f"models:/customer_churn_classifier/{version}"
model = mlflow.pyfunc.load_model(model_uri)
else:
model = model_manager.load_model_by_stage(version)
predictions = model.predict(df)
return jsonify({
'predictions': predictions.tolist(),
'model_version': version,
'status': 'success'
})
except Exception as e:
return jsonify({'error': str(e)}), 400
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Automation and Webhooks
Model Registry Webhooks
# Set up webhooks for model stage transitions
def setup_model_webhooks(model_name, webhook_url):
client = MlflowClient()
# Create webhook for stage transitions
webhook = client.create_webhook(
events=["MODEL_VERSION_TRANSITIONED_STAGE"],
model_name=model_name,
http_url_spec={
"url": webhook_url,
"authorization": "Bearer your-auth-token"
}
)
return webhook.id
# Webhook handler example
@app.route('/model-webhook', methods=['POST'])
def handle_model_webhook():
event_data = request.json
if event_data['event'] == 'MODEL_VERSION_TRANSITIONED_STAGE':
model_name = event_data['model_name']
version = event_data['version']
stage = event_data['to_stage']
# Trigger deployment pipeline
if stage == 'Production':
trigger_deployment(model_name, version)
# Send notifications
notify_team(f"Model {model_name} v{version} promoted to {stage}")
return jsonify({'status': 'processed'})
Best Practices
Model Governance and Compliance
- Implement approval workflows before production promotion
- Maintain detailed model lineage with experiment tracking
- Use tags for team ownership, compliance status, and performance metrics
- Archive old model versions but maintain audit trail
- Document model validation criteria and deployment procedures
Performance and Reliability
- Cache loaded models to avoid repeated downloads
- Implement circuit breaker patterns for model serving
- Use staging environments that mirror production
- Monitor model drift and performance degradation
- Maintain rollback procedures for quick model reversion
Security and Access Control
- Restrict production stage transitions to authorized users
- Use MLflow authentication and authorization plugins
- Encrypt model artifacts in storage
- Audit all model registry operations
- Implement proper secret management for webhook tokens