SKILL.md
onnx_runtime
Configura ONNX Runtime como motor de inferencia optimizado para ejecutar modelos de reconocimiento facial (ArcFace), detección de vida (MiniFASNet) y procesamiento de documentos en formato ONNX. Proporciona aceleración transparente en CPU y GPU mediante Execution Providers, reduciendo la latencia de inferencia en el pipeline KYC.
When to use
Usa esta skill cuando necesites configurar el runtime de inferencia ONNX dentro del modelserveragent. Aplica cuando los modelos ya estén exportados a formato ONNX y se requiera ejecutarlos con máxima eficiencia, seleccionando el Execution Provider adecuado (CPU, CUDA, TensorRT). Esta skill es independiente de la optimización TensorRT-ONNX y se centra en la configuración del runtime de inferencia.
Instructions
- Instalar ONNX Runtime con soporte GPU:
``bash pip install onnxruntime-gpu # Para GPU con CUDA # o pip install onnxruntime # Solo CPU ``
- Crear una sesión de inferencia con el Execution Provider apropiado:
```python import onnxruntime as ort
providers = [ ('CUDAExecutionProvider', { 'deviceid': 0, 'arenaextendstrategy': 'kNextPowerOfTwo', 'gpumem_limit': 2 1024 1024 * 1024, # 2GB }), 'CPUExecutionProvider' ] session = ort.InferenceSession("models/arcface.onnx", providers=providers) ```
- Configurar las opciones de sesión para optimizar el rendimiento:
``python sessoptions = ort.SessionOptions() sessoptions.graphoptimizationlevel = ort.GraphOptimizationLevel.ORTENABLEALL sessoptions.intraopnumthreads = 4 sessoptions.interopnumthreads = 2 sessoptions.enablemempattern = True sessoptions.executionmode = ort.ExecutionMode.ORTPARALLEL ``
- Implementar el wrapper de inferencia para cada modelo del pipeline KYC:
```python class ONNXModelRunner: def init(self, modelpath: str, providers: list): self.session = ort.InferenceSession(modelpath, sessoptions, providers=providers) self.inputname = self.session.get_inputs()[0].name
def predict(self, inputtensor: np.ndarray) -> np.ndarray: return self.session.run(None, {self.inputname: input_tensor})[0] ```
- Validar la correcta carga de modelos verificando los inputs/outputs esperados:
``python for inp in session.getinputs(): print(f"Input: {inp.name}, Shape: {inp.shape}, Type: {inp.type}") for out in session.getoutputs(): print(f"Output: {out.name}, Shape: {out.shape}, Type: {out.type}") ``
- Implementar un pool de sesiones para manejar concurrencia en las verificaciones simultáneas, evitando cuellos de botella en la inferencia.
- Configurar logging de métricas de inferencia (latencia p50/p95/p99, throughput) para cada modelo servido por el runtime.
Notes
- ONNX Runtime selecciona automáticamente el mejor Execution Provider disponible del listado proporcionado; siempre incluir
CPUExecutionProvidercomo fallback. - La configuración de
gpumemlimites esencial cuando se comparte GPU entre múltiples modelos del pipeline (ArcFace, liveness, anti-spoofing) para evitar errores de memoria. - Esta skill se enfoca en el runtime de ejecución; para la conversión de modelos a formato ONNX, usar la skill
onnxmodelexport.