ONNX Runtime: ejecuta modelos de IA en tu propio hardware

  • ONNX permite portar modelos de IA entre frameworks y hardware distintos mediante un formato abierto y estandarizado.
  • ONNX Runtime acelera la inferencia, reduce el consumo de recursos y aprovecha CPU, GPU y NPU con proveedores de ejecución específicos.
  • Windows ML integra ONNX Runtime en Windows, gestiona automáticamente los EPs y simplifica el despliegue local de modelos ONNX.
  • Este ecosistema facilita ejecutar IA en local con alta privacidad, baja latencia y costes controlados en entornos productivos.

ONNX Runtime ejecuta modelos de inteligencia artificial en tu propio hardware

La inteligencia artificial en local ha dejado de ser algo exclusivo de grandes compañías con centros de datos enormes. Hoy puedes ejecutar modelos avanzados de IA directamente en tu PC, portátil o incluso en dispositivos embebidos, aprovechando tu CPU, tu GPU o la NPU de tu equipo, sin depender constantemente de la nube, y asegurarte de cumplir los requisitos mínimos y recomendados para un rendimiento óptimo.

En este artículo vamos a ver con calma cómo ONNX Runtime te permite ejecutar modelos de IA en tu propio hardware, ya sea integrándolo con .NET y VB.NET, usándolo desde Python, C++ o C#, o aprovechando la integración nativa con Windows ML. Verás qué es el formato ONNX, cómo se exportan y optimizan los modelos, qué papel juegan los proveedores de ejecución (Execution Providers) y por qué todo esto es clave para tener IA rápida, privada y barata en tu día a día; también repasaremos cómo aprovechar la IA local con Ryzen en equipos compatibles.

Qué es ONNX y qué problema resuelve

ONNX, siglas de Open Neural Network Exchange, es un estándar abierto para representar modelos de aprendizaje automático y deep learning. Su objetivo es que puedas entrenar un modelo en un framework como PyTorch, TensorFlow, Keras, TFLite o scikit-learn, y luego ejecutarlo en otro entorno distinto sin volverte loco con conversiones específicas.

Este formato define una serialización basada en grafos que describe la arquitectura del modelo (capas, conexiones, operaciones, tipos de datos, etc.) y un conjunto de operadores estándar (convoluciones, activaciones, normalizaciones, etc.). Al estar basado en grafos y no en formatos binarios cerrados como Pickle o Joblib, facilita la interoperabilidad entre lenguajes y frameworks, algo especialmente útil en visión artificial y aplicaciones de baja latencia.

Para los equipos de IA, ONNX se ha convertido en una pieza clave porque reduce la dependencia de un único proveedor: entrenas donde quieras, conviertes a ONNX y luego eliges el motor de inferencia que más te convenga (ONNX Runtime, TensorRT, OpenVINO, etc.) en el hardware que tengas disponible, ya sea un servidor en la nube, un PC de escritorio, una FPGA o un dispositivo perimetral.

El estándar está respaldado por grandes actores de la industria como Microsoft, NVIDIA, Intel y otros fabricantes, lo que ha impulsado un ecosistema de herramientas muy amplio: conversores oficiales, librerías para conversión y optimización, visualización de modelos con Netron, y el famoso ONNX Model Zoo con modelos preentrenados para empezar sin tener que entrenar desde cero.

ONNX

Cómo encaja ONNX Runtime en Windows ML y el ecosistema de Windows

En Windows, ONNX Runtime está fuertemente integrado a través de Windows Machine Learning (Windows ML). Esta capa actúa como un middleware que agrupa y gestiona los recursos de hardware de tu PC (CPU, GPU y NPU) para ejecutar modelos ONNX con el mejor rendimiento posible sin que tú tengas que gestionar los detalles bajos de cada chip.

Windows ML proporciona una copia compartida del runtime de ONNX a nivel de sistema, de forma que las aplicaciones pueden usar ese entorno común en lugar de empaquetar su propia versión de ONNX Runtime dentro del instalador. Esto reduce el tamaño de las apps, simplifica las actualizaciones y garantiza que se utilice la versión más adecuada para el sistema.

Además, el sistema operativo es capaz de descargar dinámicamente proveedores de ejecución específicos para el hardware disponible. Es decir, detecta si tu equipo tiene una GPU NVIDIA, una NPU de Qualcomm o una GPU integrada de Intel o AMD y baja el EP correspondiente, manteniéndolo actualizado sin que el desarrollador tenga que preocuparse por ello.

De cara al programador de C#, C++ o Python, Windows ML ofrece una API que reutiliza los conceptos y patrones de ONNX Runtime, de manera que puedes migrar cargas existentes basadas en ONNX Runtime al entorno de Windows ML con pocos cambios. Y si trabajas con Windows App SDK (desde la versión 1.8.1 en equipos con Windows 11 24H2 o superior), ya tienes esta integración lista para usar; esto resulta especialmente útil en dispositivos modernos como portátiles Windows con Snapdragon X2 Elite.

Modelos ONNX: estructura, tipos y ejemplos prácticos

Un modelo en formato ONNX es, en esencia, una representación matemática del sistema aprendido tras el entrenamiento. Esa representación incluye todo lo necesario para llevar a cabo inferencia en otro entorno, sin tener que conservar el código original del framework donde se entrenó.

Dentro de un archivo ONNX encontrarás la arquitectura del modelo (las capas, los nodos de cálculo, las conexiones entre ellos y el tipo de operaciones), los pesos entrenados (los parámetros que el modelo ha ajustado durante el entrenamiento) y la definición formal de entradas y salidas, con sus dimensiones, tipos de datos y nombres.

Por ejemplo, un modelo de clasificación de imágenes entrenado en PyTorch puede exportarse a ONNX para que acepte como entrada un tensor con una imagen normalizada y, como salida, devuelva un vector con las probabilidades de pertenencia a cada clase. Ese mismo fichero puede luego ejecutarse con ONNX Runtime en un servidor Windows con GPU o en un dispositivo IoT sin cambiar el modelo; además, si trabajas con visión avanzada puedes revisar guías para detectar objetos en imágenes con IA.

El ecosistema ONNX incluye el ONNX Model Zoo, un repositorio de modelos preentrenados listos para usar: redes para clasificación de imágenes (ResNet, MobileNet y similares, con tamaños del orden de 5-10 MB), modelos de lenguaje como GPT‑2 (~500 MB) o arquitecturas muy pesadas para detección de objetos y segmentación (1-2 GB o más). Esto te permite probar modelos de alta calidad sin tener que entrenar desde cero.

ONNX

Ventajas de ejecutar IA en tu propio hardware

Una de las razones por las que ONNX y ONNX Runtime han ganado tanta tracción es porque facilitan la ejecución de IA en local, es decir, en el propio dispositivo del usuario o en la infraestructura on‑premise de una empresa, reduciendo la dependencia de servicios en la nube.

La primera ventaja es la privacidad de los datos. Al no enviar la información a servidores de terceros, se minimiza el riesgo de filtraciones o usos indebidos. Esto es crítico en sectores donde se manejan datos sensibles (sanidad, finanzas, administración pública o departamentos legales de empresas) que no quieren que sus datos viajen fuera de su perímetro.

También se reduce de forma notable el coste recurrente, ya que no necesitas estar pagando continuamente por instancias de computación en la nube para ejecutar modelos de inferencia. Inviertes en tu hardware (o aprovechas el que ya tienes) y evitas sorpresas en la factura a final de mes cuando el uso de la API se dispara.

Otra ventaja muy clara es la baja latencia. Al ejecutar el modelo en el propio dispositivo, eliminas el tiempo de ida y vuelta de la red, lo cual se nota especialmente en aplicaciones en tiempo real (visión artificial industrial, asistentes interactivos, procesamiento de vídeo en vivo o videojuegos con IA integrada).

Por último, ejecutar modelos en local te da control total sobre el despliegue: puedes personalizar el pipeline, aplicar cuantización o poda, restringir el acceso a ciertos recursos, decidir cuándo actualizar el modelo y adaptar la inferencia a la normativa interna de tu empresa o a la regulación aplicable.

Requisitos básicos para empezar con ONNX Runtime en .NET y otros entornos

Si quieres comenzar a usar ONNX Runtime con .NET y VB.NET en tu equipo, los requisitos iniciales son bastante razonables. Necesitarás un sistema operativo soportado (Windows, macOS o alguna distribución popular de Linux) y tener instalado .NET Framework o .NET Core según tu proyecto.

En el caso concreto de Visual Studio, basta con abrir tu solución y añadir el paquete NuGet Microsoft.ML.OnnxRuntime. Este paquete incluye las librerías necesarias para cargar un modelo ONNX, crear sesiones de inferencia e invocar al motor con los datos de entrada adecuados.

Además del runtime, tendrás que disponer de al menos un modelo en formato ONNX. Puedes entrenarlo tú mismo con PyTorch o TensorFlow y exportarlo, o bien descargar alguno del ONNX Model Zoo para pruebas. A partir de ahí, te centrarás en el preprocesado de datos de entrada y en la interpretación de las salidas del modelo; si necesitas ayuda para elegir hardware, consulta nuestra guía para elegir bien.

En máquinas con hardware más modesto, ONNX Runtime está diseñado para ser eficiente incluso sin GPU potente. No obstante, si vas a manejar modelos grandes de lenguaje, generativos o de visión complejos, contar con una GPU moderna o, mejor aún, con una NPU dedicada marcará la diferencia en tiempos de respuesta.

ONNX

Cómo usar ONNX Runtime paso a paso: sesiones, inferencia y compilación

El flujo de trabajo típico con ONNX Runtime consiste en cargar un modelo, crear una sesión de inferencia y ejecutar predicciones. Aunque el código concreto varía según el lenguaje, la filosofía es muy parecida en todos ellos.

Primero, especificas la ruta del archivo .onnx y creas una sesión de inferencia con las opciones deseadas (por ejemplo, configurando qué proveedores de ejecución quieres permitir o ajustando parámetros de optimización). En .NET, esto se hace a través de las clases que expone Microsoft.ML.OnnxRuntime; en Python, usarás la API de onnxruntime directamente.

A continuación, construyes el conjunto de entradas para el modelo: normalmente uno o varios tensores con la forma y el tipo de datos que el modelo espera (imágenes preprocesadas, texto tokenizado, vectores numéricos, etc.). Estas entradas se empaquetan en una estructura de diccionario o mapa que asocia el nombre de la entrada con su valor.

Una vez preparada la entrada, llamas al método de ejecución de la sesión, que devuelve las salidas del modelo también en forma de tensores. Ya sólo te queda postprocesar esos resultados para transformarlos en algo entendible (etiquetas, puntuaciones, texto generado, bounding boxes, etc.), y usarlos en tu aplicación.

Desde la versión 1.22 de ONNX Runtime, existe un enfoque más avanzado: compilar modelos a una representación optimizada antes de lanzarlos a producción. Nuevas APIs, como las asociadas a la estructura OrtCompileApi, encapsulan mejor los pasos de compilación para que el runtime genere artefactos específicos para el hardware objetivo, mejorando aún más el rendimiento.

Windows ML, proveedores de ejecución y administración automática del hardware

En el ecosistema Windows, Windows ML sirve como una capa de orquestación inteligente sobre ONNX Runtime. No sólo reutiliza su motor de inferencia, sino que además gestiona automáticamente qué proveedor de ejecución es el más adecuado en cada equipo y para cada modelo.

Un proveedor de ejecución (Execution Provider, EP) es, básicamente, un componente que sabe cómo optimizar ciertas operaciones de IA para un backend concreto (CPU, GPU, NPU o aceleradores especializados), registrando los kernels necesarios y participando en el particionado del grafo de operaciones para que cada parte se ejecute en el dispositivo más eficiente.

Windows ML ofrece varias ventajas notables: descarga y gestión automática de EPs específicos del hardware, uso de un runtime de ONNX compartido a nivel de sistema (lo que reduce drásticamente el tamaño de las aplicaciones) y compatibilidad con una gran variedad de configuraciones (PC de sobremesa x64, equipos ARM64, servidores Windows, etc.).

El flujo de implementación automática suele seguir estos pasos: durante la instalación de una app basada en Windows App SDK, se inicializa Windows ML; el runtime detecta el hardware disponible; se descargan los EPs óptimos (por ejemplo, TensorRT para una GPU RTX, EP específico para la NPU de Snapdragon X o el stack de OpenVINO para Intel); y a partir de ahí la aplicación puede empezar a ejecutar modelos de IA inmediatamente.

Gracias a esta arquitectura, los desarrolladores no tienen que empaquetar drivers o bibliotecas específicas para cada fabricante, ni mantener versiones separadas de la aplicación según el hardware. Windows ML se encarga de abstraer los detalles del backend y garantizar que la inferencia se ejecute con el mejor rendimiento disponible.

Conversión de modelos a ONNX y workflow típico de desarrollo

Para poder beneficiarte de ONNX Runtime, el primer paso es convertir tus modelos al formato ONNX. El flujo de trabajo más común en proyectos de visión artificial y ML general combina estas fases: entrenamiento, exportación, optimización y despliegue.

Normalmente entrenas el modelo en tu framework preferido (por ejemplo, una red de clasificación de imágenes en PyTorch o una red de detección de objetos en TensorFlow) y, una vez conseguido el rendimiento deseado, lo exportas a ONNX. En PyTorch se emplea la función torch.onnx.export, mientras que en TensorFlow se suele recurrir a la herramienta tf2onnx u otras integradas en librerías de alto nivel.

En esa exportación conviene fijar una versión de opset compatible (por ejemplo, la 15, que es ampliamente soportada) para evitar problemas con motores de inferencia anteriores. Tras la generación del archivo ONNX, puedes inspeccionarlo con herramientas como Netron para comprobar que el grafo tiene el aspecto esperado y que no hay operadores exóticos fuera del estándar.

Antes del despliegue en producción, muchos equipos aplican una fase de optimización del modelo: cuantización para reducir el tamaño y mejorar la velocidad, poda de pesos y filtros, agrupamiento de parámetros, o incluso destilación de conocimiento, pasando información de un modelo grande a uno más pequeño que resulte más manejable en dispositivos con recursos limitados.

Una vez que el modelo está en ONNX y optimizado, se integra con ONNX Runtime o con plataformas como Windows ML, TensorRT u OpenVINO, y se despliega en el entorno objetivo: servidores cloud, PCs industriales, dispositivos edge o aplicaciones móviles y de escritorio.

Rendimiento de inferencia y aceleración de hardware con ONNX Runtime

El rendimiento de la inferencia es una de las grandes razones para apostar por ONNX Runtime. En muchas comparativas prácticas, al ejecutar modelos convertidos desde PyTorch o TensorFlow se han observado mejoras significativas en tiempos de respuesta y consumo de recursos.

En casos de uso con tamaño de lote 1 (muy típico en interfaces interactivas o visión en tiempo real), ONNX Runtime suele ofrecer velocidades de inferencia inicial un 20 % superiores a las de PyTorch, y en ejecuciones prolongadas se han reportado aceleraciones de hasta 5 veces, con reducciones notables del uso de CPU sin incrementar la latencia.

Estas mejoras se deben a optimizaciones como la fusión de kernels, la simplificación del grafo y la cuantización, que permiten ejecutar menos operaciones efectivas para lograr el mismo resultado. Al mismo tiempo, la posibilidad de segmentar el grafo y asignar partes concretas a GPU o NPU maximiza el aprovechamiento del hardware.

ONNX Runtime es compatible con una gran variedad de aceleradores: NVIDIA CUDA y TensorRT para GPUs dedicadas, Intel OpenVINO y oneDNN para CPUs y VPUs, AMD ROCm, Qualcomm QNN, Apple CoreML y Android NNAPI para móviles, y DirectML en entornos Windows. Esta amplia compatibilidad con EPs hace que el mismo modelo ONNX pueda ejecutarse de forma eficiente en muchas plataformas distintas.

Todo esto convierte a ONNX Runtime en una opción ideal para aplicaciones de visión artificial, sistemas embebidos y dispositivos edge que necesitan respuestas en tiempo real y un consumo muy contenido, tanto de RAM como de CPU.

En este contexto, ONNX y ONNX Runtime se han consolidado como un puente sólido entre el entrenamiento en frameworks populares y la ejecución optimizada en cualquier tipo de hardware, ofreciendo la mezcla adecuada de rendimiento, flexibilidad y privacidad para llevar modelos de inteligencia artificial a tu propio hardware sin complicaciones innecesarias.

GGUF
Artículo relacionado:
GGUF: el formato que revoluciona la ejecución de modelos IA en local