Sector: Infraestructura de IA · Cliente: Proyecto propio · Estado: Entregado

Plataforma de IA privada sobre dos NVIDIA DGX Spark

El clúster Kubernetes en el que corren todos nuestros sistemas: un modelo de lenguaje residente repartido entre dos DGX Spark, imagen en una GPU aparte, voz, memoria y observabilidad, todo bajo GitOps.

Reto
Dar servicio de IA a muchas aplicaciones propias y de clientes sin depender únicamente de una API externa, en hardware con memoria unificada y límites térmicos reales, sin que una carga mal programada tumbe el modelo en servicio.
Solución
Un clúster k3s de siete nodos con plano de control en alta disponibilidad, dos NVIDIA DGX Spark sirviendo el modelo con paralelismo tensorial, un router de modelos único, observabilidad de LLM autoalojada y un árbitro que decide qué carga puede ocupar cada GPU.

Ver solución: IA privada

Todo lo que ofrecemos en IA privada lo operamos primero para nosotros. Esta plataforma es la base sobre la que corren nuestro ecommerce de referencia, la plataforma contable, los asistentes de las propuestas comerciales y la organización de agentes que desarrolla nuestro software.

El reto

Queríamos que los modelos de lenguaje, la voz y la imagen se ejecutaran en hardware propio, sin depender de los precios, los límites de uso ni las condiciones de un proveedor externo. El reto no era solo comprar GPU, sino operarlas como un servicio de producción: el modelo tenía que estar disponible para muchas aplicaciones a la vez, y cualquier trabajo mal programado —una descarga grande, un proceso de prueba— podía llevarse por delante el servicio.

El hardware elegido añade sus propias reglas. Los NVIDIA DGX Spark usan memoria unificada, así que la memoria que ve el planificador de Kubernetes no cuenta toda la historia, y bajo carga sostenida el chip necesita un límite térmico para no detenerse.

La solución

Montamos un clúster Kubernetes de siete nodos con el plano de control en alta disponibilidad. Los dos DGX Spark sirven un único modelo de lenguaje residente con paralelismo tensorial: la cabeza en un equipo y el trabajador en el otro. La generación de imagen corre en una GPU independiente, en otro nodo, de modo que imagen y lenguaje conviven sin competir.

Delante de los modelos hay un router único. Cada aplicación recibe su propia clave, que solo le permite usar los modelos que tiene asignados; si una necesita respaldo, se define en la configuración y queda documentado. Las trazas de cada llamada se guardan en una instancia propia de Langfuse, y la voz —transcripción con Whisper y síntesis, incluida voz clonada— se ofrece como servicio interno.

Un panel de control publica en todo momento el perfil de cómputo vigente, y un árbitro es el único que puede cambiar qué ocupa cada GPU. Aprendimos por las malas por qué hace falta: un trabajo de descarga llenó la memoria de un nodo y detuvo la inferencia. Desde entonces, ninguna carga entra en los Spark sin leer antes el estado del árbitro, y los límites térmicos están activos y monitorizados.

Resultado

La plataforma está en producción y sirve a todos nuestros sistemas. Cada cambio entra por git y lo aplica ArgoCD; el acceso a los paneles pasa por un inicio de sesión único con Keycloak. Es la misma arquitectura que proponemos a los clientes que necesitan que sus datos no salgan de casa.

Hablemos →Volver