model_versioning
Implementa un sistema de versionado de modelos de machine learning para el pipeline de verificación de identidad, permitiendo registrar, almacenar y gestionar múltiples versiones de cada modelo (ArcFace, MiniFASNet, YOLOv8). Soporta rollback instantáneo y despliegue de nuevas versiones sin interrumpir el servicio de verificación en producción.
When to use
Usa esta skill cuando necesites gestionar el ciclo de vida de versiones de modelos ML dentro del model_server_agent. Aplica cuando se entrene o fine-tunee un nuevo modelo de face recognition o liveness detection y se requiera desplegarlo de forma controlada, o cuando sea necesario revertir a una versión anterior por degradación de métricas.
Instructions
Definir el esquema de registro de modelos con metadata obligatoria:
from dataclasses import dataclass
from datetime import datetime
@dataclass
class ModelVersion:
model_name: str # ej: "arcface", "minifasnet", "yolov8_doc"
version: str # semver: "1.2.0"
artifact_path: str # ruta al archivo del modelo
format: str # "onnx", "torchscript", "mar"
metrics: dict # {"far": 0.0008, "frr": 0.032, "latency_p95_ms": 45}
training_dataset: str # referencia al dataset de entrenamiento
created_at: datetime
status: str # "staging", "production", "archived", "rolled_back"
Implementar el registro de modelos en PostgreSQL para persistencia y auditoría:
class ModelRegistry:
def register(self, model: ModelVersion) -> str:
"""Registra una nueva versión y retorna el version_id."""
model.status = "staging"
self.db.insert(model)
self._upload_artifact(model.artifact_path, model.version)
return model.version
def promote(self, model_name: str, version: str):
"""Promueve un modelo de staging a production."""
current_prod = self.get_production_version(model_name)
if current_prod:
self._update_status(current_prod, "archived")
self._update_status(version, "production")
Almacenar los artefactos de modelo en MinIO (S3-compatible) con versionado habilitado:
def _upload_artifact(self, local_path: str, version: str):
self.minio_client.fput_object(
bucket_name="model-artifacts",
object_name=f"{model_name}/{version}/model.onnx",
file_path=local_path,
metadata={"version": version, "format": "onnx"}
)
Implementar rollback instantáneo recargando la versión anterior sin reiniciar el servidor:
def rollback(self, model_name: str):
"""Revierte al último modelo en producción archivado."""
previous = self.db.query(
"SELECT * FROM model_versions WHERE model_name=? AND status='archived' ORDER BY created_at DESC LIMIT 1",
model_name
)
self._update_status(previous.version, "production")
self._update_status(self.get_production_version(model_name), "rolled_back")
self.model_server.hot_reload(model_name, previous.artifact_path)
Validar automáticamente cada nueva versión contra un dataset de validación antes de permitir la promoción a producción:
def validate_before_promote(self, model_name: str, version: str) -> bool:
model_path = self.get_artifact_path(model_name, version)
metrics = self.evaluator.evaluate(model_path, self.validation_dataset)
return metrics["far"] < 0.001 and metrics["frr"] < 0.05
Exponer endpoints de gestión para listar versiones, promover y hacer rollback desde la Management API del model server.
Configurar alertas automáticas que disparen rollback si las métricas de producción (FAR/FRR) degradan por encima de los umbrales definidos.
Notes
- Nunca eliminar artefactos de versiones anteriores inmediatamente; mantener al menos las 3 últimas versiones disponibles para rollback rápido en caso de degradación post-despliegue.
- La validación automática (paso 5) es un gate obligatorio antes de promover cualquier modelo a producción; esto previene que modelos con FAR/FRR fuera de umbral lleguen a servir verificaciones reales.
- El hot-reload de modelos debe ser atómico: las solicitudes en vuelo deben completarse con la versión anterior mientras las nuevas solicitudes usan la versión actualizada.
1---2name: model-versioning3description: Gestión de versiones de modelos ML con registro, metadata y rollback sin downtime4---56# model_versioning78Implementa un sistema de versionado de modelos de machine learning para el pipeline de verificación de identidad, permitiendo registrar, almacenar y gestionar múltiples versiones de cada modelo (ArcFace, MiniFASNet, YOLOv8). Soporta rollback instantáneo y despliegue de nuevas versiones sin interrumpir el servicio de verificación en producción.910## When to use1112Usa esta skill cuando necesites gestionar el ciclo de vida de versiones de modelos ML dentro del **model_server_agent**. Aplica cuando se entrene o fine-tunee un nuevo modelo de face recognition o liveness detection y se requiera desplegarlo de forma controlada, o cuando sea necesario revertir a una versión anterior por degradación de métricas.1314## Instructions15161. Definir el esquema de registro de modelos con metadata obligatoria:17 ```python18 from dataclasses import dataclass19 from datetime import datetime2021 @dataclass22 class ModelVersion:23 model_name: str # ej: "arcface", "minifasnet", "yolov8_doc"24 version: str # semver: "1.2.0"25 artifact_path: str # ruta al archivo del modelo26 format: str # "onnx", "torchscript", "mar"27 metrics: dict # {"far": 0.0008, "frr": 0.032, "latency_p95_ms": 45}28 training_dataset: str # referencia al dataset de entrenamiento29 created_at: datetime30 status: str # "staging", "production", "archived", "rolled_back"31 ```32332. Implementar el registro de modelos en PostgreSQL para persistencia y auditoría:34 ```python35 class ModelRegistry:36 def register(self, model: ModelVersion) -> str:37 """Registra una nueva versión y retorna el version_id."""38 model.status = "staging"39 self.db.insert(model)40 self._upload_artifact(model.artifact_path, model.version)41 return model.version4243 def promote(self, model_name: str, version: str):44 """Promueve un modelo de staging a production."""45 current_prod = self.get_production_version(model_name)46 if current_prod:47 self._update_status(current_prod, "archived")48 self._update_status(version, "production")49 ```50513. Almacenar los artefactos de modelo en MinIO (S3-compatible) con versionado habilitado:52 ```python53 def _upload_artifact(self, local_path: str, version: str):54 self.minio_client.fput_object(55 bucket_name="model-artifacts",56 object_name=f"{model_name}/{version}/model.onnx",57 file_path=local_path,58 metadata={"version": version, "format": "onnx"}59 )60 ```61624. Implementar rollback instantáneo recargando la versión anterior sin reiniciar el servidor:63 ```python64 def rollback(self, model_name: str):65 """Revierte al último modelo en producción archivado."""66 previous = self.db.query(67 "SELECT * FROM model_versions WHERE model_name=? AND status='archived' ORDER BY created_at DESC LIMIT 1",68 model_name69 )70 self._update_status(previous.version, "production")71 self._update_status(self.get_production_version(model_name), "rolled_back")72 self.model_server.hot_reload(model_name, previous.artifact_path)73 ```74755. Validar automáticamente cada nueva versión contra un dataset de validación antes de permitir la promoción a producción:76 ```python77 def validate_before_promote(self, model_name: str, version: str) -> bool:78 model_path = self.get_artifact_path(model_name, version)79 metrics = self.evaluator.evaluate(model_path, self.validation_dataset)80 return metrics["far"] < 0.001 and metrics["frr"] < 0.0581 ```82836. Exponer endpoints de gestión para listar versiones, promover y hacer rollback desde la Management API del model server.84857. Configurar alertas automáticas que disparen rollback si las métricas de producción (FAR/FRR) degradan por encima de los umbrales definidos.8687## Notes8889- Nunca eliminar artefactos de versiones anteriores inmediatamente; mantener al menos las 3 últimas versiones disponibles para rollback rápido en caso de degradación post-despliegue.90- La validación automática (paso 5) es un gate obligatorio antes de promover cualquier modelo a producción; esto previene que modelos con FAR/FRR fuera de umbral lleguen a servir verificaciones reales.91- El hot-reload de modelos debe ser atómico: las solicitudes en vuelo deben completarse con la versión anterior mientras las nuevas solicitudes usan la versión actualizada.