Un modelo de CTR o de conversión que tiene que responder dentro de cada solicitud de puja suele incumplir el deadline en dos sitios archivados bajo un mismo nombre: features que llegan tarde desde un almacén remoto y una evaluación que espera en una cola. Así se divide el deadline de la subasta, qué runtimes y qué opciones de batching encajan en un presupuesto por solicitud, qué hace el bidder cuando el modelo llega tarde y cómo saber qué empresas de ingeniería hacen realmente este trabajo.
A un modelo que puntúa la probabilidad de clic y de conversión dentro de la ruta de puja lo juzga un reloj que no es suyo. El exchange deja de escuchar al llegar su deadline, y una predicción que llega después de ese momento no es una respuesta lenta: no es ninguna respuesta, y el cómputo ya se ha gastado.
El requisito suele llegar como un objetivo de latencia para la inferencia. Funciona mejor como una resta: qué queda del deadline de la subasta después de la red, el parseo de la solicitud y las consultas de features, y qué puja el bidder cuando no queda nada.
La respuesta corta es estructural. Divide el deadline antes de elegir un modelo: sella un deadline absoluto a la llegada, cancela la obtención de features cuando se agote su parte, evalúa en el proceso del bidder sin ninguna cola de espera delante y termina la escalera de fallback en un no-bid limpio. Lo que amBrain puede sustentar públicamente: construimos RTBBidder, una demand-side platform. Este artículo describe la mecánica de la inferencia dentro de la solicitud, no un caso nuestro, y ningún número de abajo está medido en un sistema nuestro.
En OpenRTB 2.6, tmax es el tiempo máximo en milisegundos que el exchange permite para recibir pujas, incluida la latencia de Internet, y prevalece sobre cualquier indicación que el exchange haya dado de antemano. El presupuesto no es un ajuste de tu servicio: viaja con cada solicitud.
La documentación de Authorized Buyers de Google, actualizada en agosto de 2026, dice que el deadline de BidRequest.tmax suele ir de 80 a 1000 ms y cubre el tiempo de red hasta el trading location, además del tiempo que tarda tu bidder en generar una respuesta. Exige que el 85 por ciento de las respuestas lleguen dentro del deadline visto desde el trading location, y limita a los bidders que no logran conseguirlo de forma constante.
Así que el deadline es una suma, y al modelo le corresponde uno de sus términos:
Sella un deadline absoluto a la llegada, derivado de tmax menos el tiempo en la red que mides para ese exchange, y pasa a cada etapa el tiempo restante en lugar de un timeout fijo. La documentación de gRPC describe el mismo mecanismo: un deadline propagado se convierte en un timeout con el tiempo transcurrido ya descontado, y la aplicación del servidor sigue siendo responsable de detener el trabajo que lanzó.
Cuando el resto es demasiado pequeño para puntuar, responde pronto. OpenRTB 2.6 ofrece dos formas de no-bid, una respuesta vacía con HTTP 204 o una respuesta de puja con un código de motivo en nbr, y anima a usar el código de motivo. Una respuesta tardía cuesta más: el sistema de cuotas de callouts de Google envía menos callouts a un bidder que no responde a tiempo, y se ajusta en cuestión de minutos.
Bajo la palabra inferencia se esconden dos etapas. La obtención de features es entrada/salida: señales de historial, frecuencia y contexto desde un almacén remoto, con una cola de latencia que pertenece a la red y a ese almacén. La evaluación es cómputo, un forward pass o un recorrido por árboles, con una cola de latencia que pertenece a la contención de CPU dentro de tu propio proceso.
Un p99 que mezcla las dos no dice cuál hay que reparar, así que mantén dos histogramas por exchange y clasifica las features según dónde viven:
Una obtención con deadline necesita un modelo preparado para que falte la respuesta: entrena con el grupo de features tardío ausente en una parte de los ejemplos, o mantén un segundo modelo sin él, para que una consulta cancelada mueva la predicción de una forma que hayas medido.
Dean y Barroso describieron las hedged requests en The Tail at Scale en 2013: tras un breve retraso, envía una segunda copia a otra réplica y usa la respuesta que llegue primero. En su benchmark de BigTable, un hedge enviado tras 10 ms redujo de 1800 ms a 74 ms la latencia del percentil 99.9 al recuperar 1000 valores, enviando un 2 por ciento más de solicitudes. Dentro de una subasta, el retraso del hedge tiene que salir de la parte que le queda a la obtención.
La decisión de runtime es sobre todo una decisión sobre dónde ocurre la evaluación. Un servidor de inferencia aparte añade un viaje de ida y vuelta y una cola de espera a cada solicitud puntuada; la evaluación dentro del proceso del bidder no añade ninguna de las dos cosas, y a cambio te entrega su memoria y sus hilos. Cuatro opciones habituales:
La cuantización es la otra palanca de CPU, con dos costes que declara la propia documentación de ONNX Runtime: la cuantización lineal de 8 bits no es una transformación sin pérdidas, y su sobrecarga hace que no sea raro un peor rendimiento en dispositivos antiguos. En un modelo de CTR, la precisión incluye la calibración, así que compara las tasas predichas y observadas antes y después.
Agrupar en un lote los candidatos de una misma solicitud no cuesta ninguna espera, porque ya existen. El dynamic batching entre solicitudes sube el throughput haciendo que las solicitudes esperen compañía, lo contrario de lo que pide un deadline de subasta, y los propios servidores de inferencia lo dicen:
El paper Wide & Deep de Google, publicado en 2016, muestra el lado intra-solicitud de ese trade-off en un servicio que aspira a servir cada solicitud en el orden de 10 ms. Puntuar todos los candidatos en un único lote en un solo hilo tardaba 31 ms; dividir el lote en lotes más pequeños en hilos paralelos redujo la latencia del lado del cliente a 14 ms, sobrecarga de serving incluida.
Clipper, el sistema de serving de predicciones de Berkeley presentado en NSDI 2017, dimensiona los lotes en función del deadline y no del hardware: hace crecer el lote de forma aditiva hasta que procesarlo supera el objetivo de latencia, y entonces lo reduce un 10 por ciento. Para un bidder, la lección está en el orden: primero fija el objetivo de latencia y después toma el lote que quepa por debajo, aunque sea un lote de uno.
Un acelerador se gana su sitio con lotes grandes, y el lote de una solicitud de puja son solo sus candidatos supervivientes. DeepRecSys, un estudio de Harvard y Facebook presentado en ISCA 2020, encontró que las GPU superan a las CPU con tamaños de lote mayores, y que cargar las entradas de la CPU a la GPU ocupaba de media entre el 60 y el 80 por ciento del tiempo de inferencia de extremo a extremo en GPU en todos los modelos que estudió.
Su scheduler no elegía un único dispositivo: dividir las consultas grandes en lotes más pequeños usando solo núcleos de CPU en paralelo duplicó el throughput bajo objetivos estrictos de latencia de cola en ocho modelos representativos de la industria, y derivar a la GPU solo las consultas por encima de un umbral de tamaño lo aumentó todavía más. Para un bidder, los lotes pequeños por solicitud se quedan en la CPU, y un acelerador tiene que amortizar la transferencia y la cola de espera.
La mitigación de rezagados de Clipper se apoya en una decisión de diseño que merece la pena copiar: servir una predicción tardía es peor que servir una imprecisa. Al llegar el deadline, su capa de selección de modelos combinaba las predicciones que habían llegado y sustituía las que faltaban por su valor medio. En un bidder, el equivalente es una escalera, y cada peldaño tiene que dar un precio que la subasta pueda asumir:
Con un objetivo de conversión, el valor esperado por impresión es la probabilidad de clic por la probabilidad de conversión tras el clic por el valor de la conversión, así que un peldaño que sobrestima puja por encima de lo que vale la impresión: en una subasta de primer precio paga de más en cada subasta ganada, y en una de segundo precio gana impresiones que debería haber perdido. McMahan y sus colegas escribieron que unas predicciones precisas y bien calibradas son esenciales para ejecutar la subasta, e incluyeron las features ocultas no disponibles en tiempo de entrenamiento o de serving entre las causas del sesgo sistemático; una obtención cancelada deja una feature no disponible en tiempo de serving.
Cuenta cada peldaño. Una tasa de fallback por motivo - obtención cancelada, evaluación tardía, acierto de caché, prior, no-bid - va en el mismo gráfico que el p99, porque un bidder puede mantener su objetivo de latencia respondiendo en silencio desde el prior mientras se pone precio al gasto a partir de una conjetura.
Un modelo nuevo cambia la latencia y el precio a la vez, y los dos fallan en relojes distintos: la latencia en cuestión de minutos, el precio a lo largo de la ventana de conversión. Despliégalo en dos pasos que los mantengan separados:
El SRE Workbook de Google define el canarying como un despliegue parcial y limitado en el tiempo de un cambio en un servicio y su evaluación, y advierte de que, en sistemas con consultas diversas, un canary que termina tras un puñado de consultas no da ninguna señal útil. Para un modelo de conversión, el puñado se cuenta en conversiones, así que el canary dura al menos tanto como la ventana de conversión.
La monitorización de latencia dice si el modelo respondió; la monitorización del modelo dice si la respuesta valía el precio. Un bidder necesita las dos, desglosadas por exchange y por versión del modelo:
Una predicción que llega después de tmax no ha producido una puja más lenta. Ha producido un timeout, un motivo para limitarte y una factura de CPU, mientras la subasta la decidían los bidders que respondieron.
La segunda mitad de la pregunta, quién construye pipelines de inferencia integrados en bidders, tiene una prueba que no necesita una lista de proveedores. Una empresa que hace este trabajo pregunta por el presupuesto antes de ofrecer un modelo:
Cada punto es un documento que puedes pedir en la primera conversación, y una respuesta vaga significa que el presupuesto todavía no se ha dividido.
Así que la primera pregunta no es qué modelo servir. Es cuánto queda de tmax después de la red y de la obtención de features en el exchange que agota el tiempo, y qué puja el bidder cuando ese resto se ha acabado.
Lo que amBrain puede sustentar públicamente: amBrain es una empresa de desarrollo de software especializada en plataformas de trading, matching engines, sistemas de real-time bidding e ingeniería de plataformas de casino. amBrain lleva construyendo software desde 2019, y en AdTech lo que construimos es desarrollo de DSP, plataformas de real-time bidding e ingeniería de ad exchange. Trabajamos en tres formatos: entrega completa, un equipo dedicado o ingenieros integrados en tu equipo.
Traiga su arquitectura actual y el modo de fallo que le preocupa, y lo repasaremos juntos en media hora.