synsema

Todas las entradas · · 6 min de lectura

Inferencia que no sale de tu máquina

Para algunas cargas la pregunta interesante no es qué modelo es mejor, sino si el dato tiene permiso de salir. Un modelo dentro del proceso responde eso sin egress, sin un proveedor en la cadena de confianza y sin factura por token — y lo que cobra a cambio es latencia y tamaño de modelo.

inferencia-localcomputación-confidencialenclavecostoscumplimiento

Toda función con IA arranca con una pregunta de calidad: qué modelo escribe mejor el resumen, cuál enruta bien el ticket. Algunas se chocan con una segunda pregunta que pesa más: ¿este dato tiene permiso de salir del edificio? Las notas de un hospital, los conceptos de las transacciones de un banco, el material de un estudio jurídico, el contenido de un bucket que tu cliente te deja procesar pero no reenviar. Cuando la respuesta es no, el modelo tiene que ir hasta el dato.

Desde el motor v0.6.27 eso es una configuración y no un proyecto. Un proceso de Synsema puede correr un modelo cuantizado dentro de sí mismo — sin un servidor al lado, sin API key, sin socket — y el mismo programa que en staging le habla a Anthropic o a OpenAI corre contra un archivo en disco en el despliegue que no tiene salida a internet.

Qué cambia en la conversación con el cliente§

Tres cosas dejan de ser promesas y pasan a ser propiedades del despliegue.

No hay egress que habilitar. El provider no es "un servidor local en el puerto 11434" al que una regla de firewall le tiene que tener confianza; es el mismo proceso. La carga se puede desplegar con la red denegada por completo y el modelo responde igual. Nada que poner en una allowlist, nada que loguear, nada que un revisor tenga que creer por fe.

No hay un proveedor en la cadena de confianza. Ningún término de servicio que leer sobre entrenar con tus entradas, ningún anexo de tratamiento de datos que negociar para esa función, ningún subprocesador más que declarar en el cuestionario que te manda tu cliente. Los pesos son un archivo que elegiste, y están donde los pusiste.

No hay factura por token. El costo se mueve a CPU y RAM que ya estás pagando, y eso cambia qué decisiones vale la pena automatizar: las que no justificaban un precio por llamada ahora sí.

Dentro de un enclave, ésta es la diferencia entre una demo y un despliegue§

Si la carga corre en un TEE — el tema de Dónde desplegar una carga confidencial — entonces llamar a la API de un modelo externo abre un agujero justo en el medio de lo que el enclave venía a hacer. El dato se descifra adentro, y después sale en un prompt. Haga lo que haga el proveedor con eso, la atestación que le mostrás a tu cliente ya no lo cubre.

Con el modelo dentro del proceso, el prompt nunca cruza el borde. Ésa es la versión de IA confidencial que sobrevive a una revisión de seguridad, y vale ser preciso sobre lo que cuesta: los pesos entran adentro del entorno medido, lo que va en contra de mantener el enclave chico. El atenuante es que los pesos son datos y no código — no agregan un camino que un atacante pueda ejecutar — y son medibles: el motor reporta el sha256 de los pesos, el de la definición de la arquitectura y el del motor que los corrió, así que "qué modelo produjo esta salida" tiene una respuesta exacta en bytes y no un nombre comercial.

Lo que cuesta, dicho de frente§

Esto es inferencia en CPU, y los números son los que uno esperaría de inferencia en CPU. El prefill anda por 12 tokens por segundo, así que un prompt de 1.000 tokens tarda unos 90 segundos en un modelo chico. La generación va a unos 11 tokens por segundo en un modelo de 0.5B y a 5 en uno de 3B con cuatro hilos. Cargar el modelo tarda 7 segundos para un 0.5B y unos 35 para un 3B — se paga una vez por proceso, así que en un despliegue servido el primer request lo paga y el resto no (medido: de 8,2 s a 1,3 s).

Ese perfil tiene una forma clara. Clasificar, enrutar, extraer, anonimizar, una reescritura corta, un resumen de unos párrafos: herramienta correcta. Un asistente de chat respondiendo prompts de 4.000 tokens con respuestas largas en una máquina sin GPU: herramienta equivocada, y ninguna configuración lo va a cambiar. La arquitectura honesta para la mayoría de los productos son las dos cosas — el modelo chico local para las decisiones de alto volumen sobre datos que no se pueden mover, y un modelo frontera por red para el trabajo donde la calidad es la restricción y la entrada no es sensible.

No se descarga nada, y eso importa más de lo que parece§

El modelo se nombra como tu máquina ya lo nombra: una ruta a un .gguf, un model:tag que ya está en la caché de Ollama, o un repo de Hugging Face que ya está en esa caché. Ninguna de las tres formas baja un byte. Un proceso de producción que arranca descargando 3 GB de un host que no controla es un evento de cadena de suministro y una caída esperando un día de red mala; acá los pesos se aprovisionan como cualquier otro artefacto, y el proceso sólo lee lo que está.

El motor también dejó de necesitar un release nuestro para soportar una familia nueva de modelos. Una arquitectura es un archivo de texto que el binario ya compilado lee al arrancar — una lista plana de pasos con nombre sobre los tensores del archivo — así que un modelo que el motor no conoce lo puede sumar quien despliega, sin compilador y sin esperar. El formato no tiene condicionales, ni loops, ni forma de abrir un archivo o un socket, así que aceptar una definición de afuera no es aceptar código. El detalle para quien programa está en Un modelo que ya tenés.

El mismo release lo hizo para las decisiones§

La otra mitad de esto es el juez: un modelo System One que devuelve probabilidades calibradas en vez de prosa, que es lo que la mayoría de la automatización necesita de verdad. Eso ahora también corre local, desde un checkpoint en disco sin clave y sin red — incluida la compuerta de confianza que decide qué ve una persona. Eso está en Un juez sin proveedor.

Por dónde empezar§

Tomá la función que está trabada por una pregunta de datos y no de calidad — esa donde alguien en la reunión dijo "eso no lo podemos mandar" y la función volvió al cajón. Mirá si su trabajo de modelo es clasificación o generación corta. Si lo es, hoy entra en el proceso: una variable nombra el provider, otra nombra un modelo que tu máquina ya tiene, y el despliegue donde corre no necesita ninguna salida a internet.