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 model_server_agent. 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:
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:
import onnxruntime as ort
providers = [
('CUDAExecutionProvider', {
'device_id': 0,
'arena_extend_strategy': 'kNextPowerOfTwo',
'gpu_mem_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:
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
sess_options.intra_op_num_threads = 4
sess_options.inter_op_num_threads = 2
sess_options.enable_mem_pattern = True
sess_options.execution_mode = ort.ExecutionMode.ORT_PARALLEL
Implementar el wrapper de inferencia para cada modelo del pipeline KYC:
class ONNXModelRunner:
def __init__(self, model_path: str, providers: list):
self.session = ort.InferenceSession(model_path, sess_options, providers=providers)
self.input_name = self.session.get_inputs()[0].name
def predict(self, input_tensor: np.ndarray) -> np.ndarray:
return self.session.run(None, {self.input_name: input_tensor})[0]
Validar la correcta carga de modelos verificando los inputs/outputs esperados:
for inp in session.get_inputs():
print(f"Input: {inp.name}, Shape: {inp.shape}, Type: {inp.type}")
for out in session.get_outputs():
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
CPUExecutionProvider como fallback.
- La configuración de
gpu_mem_limit es 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
onnx_model_export.
1---2name: onnx-runtime3description: Runtime de inferencia ONNX optimizado para modelos faciales y de documento con aceleración CPU/GPU4---56# onnx_runtime78Configura 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.910## When to use1112Usa esta skill cuando necesites configurar el runtime de inferencia ONNX dentro del **model_server_agent**. 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.1314## Instructions15161. Instalar ONNX Runtime con soporte GPU:17 ```bash18 pip install onnxruntime-gpu # Para GPU con CUDA19 # o20 pip install onnxruntime # Solo CPU21 ```22232. Crear una sesión de inferencia con el Execution Provider apropiado:24 ```python25 import onnxruntime as ort2627 providers = [28 ('CUDAExecutionProvider', {29 'device_id': 0,30 'arena_extend_strategy': 'kNextPowerOfTwo',31 'gpu_mem_limit': 2 * 1024 * 1024 * 1024, # 2GB32 }),33 'CPUExecutionProvider'34 ]35 session = ort.InferenceSession("models/arcface.onnx", providers=providers)36 ```37383. Configurar las opciones de sesión para optimizar el rendimiento:39 ```python40 sess_options = ort.SessionOptions()41 sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL42 sess_options.intra_op_num_threads = 443 sess_options.inter_op_num_threads = 244 sess_options.enable_mem_pattern = True45 sess_options.execution_mode = ort.ExecutionMode.ORT_PARALLEL46 ```47484. Implementar el wrapper de inferencia para cada modelo del pipeline KYC:49 ```python50 class ONNXModelRunner:51 def __init__(self, model_path: str, providers: list):52 self.session = ort.InferenceSession(model_path, sess_options, providers=providers)53 self.input_name = self.session.get_inputs()[0].name5455 def predict(self, input_tensor: np.ndarray) -> np.ndarray:56 return self.session.run(None, {self.input_name: input_tensor})[0]57 ```58595. Validar la correcta carga de modelos verificando los inputs/outputs esperados:60 ```python61 for inp in session.get_inputs():62 print(f"Input: {inp.name}, Shape: {inp.shape}, Type: {inp.type}")63 for out in session.get_outputs():64 print(f"Output: {out.name}, Shape: {out.shape}, Type: {out.type}")65 ```66676. Implementar un pool de sesiones para manejar concurrencia en las verificaciones simultáneas, evitando cuellos de botella en la inferencia.68697. Configurar logging de métricas de inferencia (latencia p50/p95/p99, throughput) para cada modelo servido por el runtime.7071## Notes7273- ONNX Runtime selecciona automáticamente el mejor Execution Provider disponible del listado proporcionado; siempre incluir `CPUExecutionProvider` como fallback.74- La configuración de `gpu_mem_limit` es esencial cuando se comparte GPU entre múltiples modelos del pipeline (ArcFace, liveness, anti-spoofing) para evitar errores de memoria.75- Esta skill se enfoca en el runtime de ejecución; para la conversión de modelos a formato ONNX, usar la skill `onnx_model_export`.