Um modelo de CTR ou de conversão que precisa responder dentro de cada bid request costuma perder o deadline em dois lugares catalogados sob um mesmo nome: features que chegam atrasadas de um store remoto e avaliação que espera em uma fila. É assim que o deadline do leilão é dividido, quais runtimes e escolhas de batching cabem em um orçamento por requisição, o que o bidder faz quando o modelo atrasa e como saber quais empresas de engenharia realmente fazem esse trabalho.
Um modelo que estima a probabilidade de clique e de conversão dentro do caminho de lance é julgado por um relógio que não é dele. A exchange para de ouvir no deadline dela, e uma previsão que chega depois desse momento não é uma resposta lenta: não é resposta nenhuma, e a computação já foi gasta.
O requisito costuma chegar como uma meta de latência para a inferência. Ele funciona melhor como uma subtração: o que sobra do deadline do leilão depois da rede, do parsing da requisição e das consultas de features, e que lance o bidder dá quando não sobra nada.
A resposta curta é estrutural. Divida o deadline antes de escolher um modelo: carimbe um deadline absoluto na chegada, cancele a busca de features quando a parcela dela se esgotar, avalie no processo do bidder sem fila na frente e termine a escada de fallback em um no-bid limpo. O que a amBrain pode sustentar publicamente: construímos o RTBBidder, uma demand-side platform. Este artigo descreve a mecânica da inferência dentro da requisição, não um caso nosso, e nenhum número abaixo é medido em um sistema nosso.
No OpenRTB 2.6, tmax é o tempo máximo em milissegundos que a exchange permite para receber lances, com a latência da Internet incluída, e ele prevalece sobre qualquer orientação que a exchange tenha dado antes. O orçamento não é uma configuração do seu serviço: ele viaja com cada requisição.
A documentação do Authorized Buyers do Google, atualizada em agosto de 2026, diz que o deadline em BidRequest.tmax normalmente vai de 80 a 1000 ms e cobre o tempo de rede até o trading location, além do tempo que o seu bidder leva para gerar uma resposta. Ela exige 85 por cento das respostas dentro do deadline, conforme vistas a partir do trading location, e restringe os bidders que não conseguem cumprir isso de forma consistente.
Então o deadline é uma soma, e o modelo detém um dos termos dela:
Carimbe um deadline absoluto na chegada, derivado do tmax menos o tempo de rede que você mede para aquela exchange, e passe a cada etapa o tempo restante em vez de um timeout fixo. A documentação do gRPC descreve o mesmo mecanismo: um deadline propagado vira um timeout com o tempo decorrido já descontado, e a aplicação servidora continua responsável por parar o trabalho que ela disparou.
Quando o restante é pequeno demais para pontuar, responda cedo. O OpenRTB 2.6 prevê duas formas de no-bid, uma resposta vazia com HTTP 204 ou uma bid response com um código de motivo em nbr, e incentiva o código de motivo. Uma resposta atrasada custa mais: o sistema de cota de callouts do Google envia menos callouts a um bidder que não responde a tempo, e se ajusta em questão de minutos.
Duas etapas se escondem sob a palavra inferência. A busca de features é entrada e saída: sinais de histórico, frequência e contexto vindos de um store remoto, com uma cauda que pertence à rede e a esse store. A avaliação é computação, um forward pass ou um percurso pelas árvores, com uma cauda que pertence à contenção de CPU dentro do seu próprio processo.
Um p99 que mistura os dois não diz qual deles consertar, então mantenha dois histogramas por exchange e classifique as features por onde elas vivem:
Uma busca com deadline precisa de um modelo que conte com a resposta ausente: treine com o grupo de features atrasado ausente em uma parcela dos exemplos, ou mantenha um segundo modelo sem ele, para que uma consulta cancelada mova a previsão de um jeito que você já mediu.
Dean e Barroso descreveram as hedged requests em The Tail at Scale, em 2013: depois de um breve atraso, envie uma segunda cópia para outra réplica e use a resposta que chegar primeiro. No benchmark deles com BigTable, um hedge enviado após 10 ms reduziu a latência no percentil 99,9 para recuperar 1.000 valores de 1.800 ms para 74 ms, enviando 2 por cento mais requisições. Dentro de um leilão, o atraso do hedge tem que sair da parcela restante da busca.
A decisão de runtime é, na maior parte, uma decisão sobre onde a avaliação acontece. Um servidor de inferência separado acrescenta uma ida e volta e uma fila a cada requisição pontuada; a avaliação dentro do processo do bidder não acrescenta nenhuma das duas e, em troca, passa para você a memória e as threads dele. Quatro opções comuns:
A quantização é a outra alavanca de CPU, com dois custos declarados na própria documentação do ONNX Runtime: a quantização linear de 8 bits não é uma transformação sem perdas, e o overhead dela faz com que um desempenho pior em dispositivos antigos não seja raro. Para um modelo de CTR, a acurácia inclui a calibração, então compare as taxas previstas e observadas antes e depois.
Fazer batching dos candidatos de uma requisição não custa espera, porque eles já existem. O batching dinâmico entre requisições aumenta o throughput fazendo as requisições esperarem por companhia, o oposto do que um deadline de leilão pede, e os próprios servidores de inferência dizem isso:
O paper Wide & Deep do Google, publicado em 2016, mostra o lado desse trade-off dentro da requisição, para um serviço que busca atender cada requisição na ordem de 10 ms. Pontuar todos os candidatos em um único batch em uma thread levou 31 ms; dividir o batch em batches menores em threads paralelas reduziu a latência do lado do cliente para 14 ms, com o overhead de serving incluído.
O Clipper, sistema de serving de previsões de Berkeley apresentado no NSDI 2017, dimensiona os batches pelo deadline, e não pelo hardware: ele aumenta o batch de forma aditiva até que processá-lo ultrapasse o objetivo de latência, e então recua 10 por cento. Para um bidder, a lição está na ordem: fixe primeiro o objetivo de latência e depois aceite o batch que couber dentro dele, mesmo que seja um batch de um.
Um acelerador conquista o seu lugar em batches grandes, e o batch de uma bid request são só os candidatos que sobreviveram. O DeepRecSys, um estudo de Harvard e do Facebook apresentado no ISCA 2020, constatou que GPUs superam CPUs em tamanhos de batch maiores, e que carregar as entradas da CPU para a GPU levou em média de 60 a 80 por cento do tempo de inferência ponta a ponta em GPU em todos os modelos que estudou.
O scheduler dele não escolheu um único dispositivo: dividir consultas grandes em batches menores apenas em núcleos de CPU paralelos dobrou o throughput sob metas estritas de latência de cauda em oito modelos representativos da indústria, e descarregar para a GPU apenas as consultas acima de um limiar de tamanho aumentou-o ainda mais. Para um bidder, batches pequenos por requisição ficam na CPU, e um acelerador tem que compensar o custo da transferência e da fila.
A mitigação de stragglers do Clipper se apoia em uma escolha de design que vale copiar: entregar uma previsão atrasada é pior do que entregar uma imprecisa. No deadline, a camada de seleção de modelos dele combinava as previsões que tinham chegado e substituía as ausentes pelo valor médio delas. Em um bidder, o equivalente é uma escada, e cada degrau precisa produzir um preço com o qual o leilão consiga conviver:
Para um objetivo de conversão, o valor esperado por impressão é a probabilidade de clique vezes a probabilidade de conversão após o clique vezes o valor da conversão, então um degrau que erra para cima dá lances acima do que a impressão vale: em um leilão de primeiro preço, ele paga a mais em cada vitória, e em um leilão de segundo preço, ele vence impressões que deveria ter perdido. McMahan e colegas escreveram que previsões precisas e bem calibradas são essenciais para rodar o leilão, e listaram features ocultas, indisponíveis no momento do treino ou do serving, entre as causas de viés sistemático; uma busca cancelada torna uma feature indisponível no momento do serving.
Conte cada degrau. Uma taxa de fallback por motivo - busca cancelada, avaliação atrasada, cache hit, prior, no-bid - pertence ao mesmo gráfico que o p99, porque um bidder consegue manter a meta de latência respondendo silenciosamente a partir do prior enquanto o gasto é precificado com base em um palpite.
Um modelo novo muda latência e preço ao mesmo tempo, e os dois falham em relógios diferentes: a latência em minutos, o preço ao longo da janela de conversão. Faça o rollout em duas etapas que os mantenham separados:
O Google SRE Workbook define canarying como uma implantação parcial e por tempo limitado de uma mudança em um serviço, junto com a avaliação dela, e alerta que, para sistemas com consultas diversas, um canário encerrado depois de um punhado de consultas não dá nenhum sinal útil. Para um modelo de conversão, o punhado é contado em conversões, então o canário roda pelo menos pelo tempo da janela de conversão.
O monitoramento de latência diz se o modelo respondeu; o monitoramento do modelo diz se a resposta valeu o preço. Um bidder precisa dos dois, recortados por exchange e por versão do modelo:
Uma previsão que chega depois do tmax não produziu um lance mais lento. Ela produziu um timeout, um motivo para restringir você e uma conta de CPU, enquanto o leilão foi decidido pelos bidders que responderam.
A segunda metade da pergunta, quem constrói pipelines de inferência embarcados em bidders, tem um teste que não precisa de uma lista de fornecedores. Uma empresa que faz esse trabalho pergunta sobre o orçamento antes de oferecer um modelo:
Cada item é um documento que você pode pedir na primeira conversa, e uma resposta vaga significa que o orçamento ainda não foi dividido.
Então a primeira pergunta não é qual modelo servir. É quanto do tmax sobra depois da rede e da busca de features na exchange que dá timeout, e que lance o bidder dá quando esse restante acaba.
O que a amBrain pode sustentar publicamente: a amBrain é uma empresa de desenvolvimento de software especializada em plataformas de trading, matching engines, sistemas de real-time bidding e engenharia de plataformas de cassino. A amBrain constrói software desde 2019, e em AdTech o que construímos é desenvolvimento de DSP, plataformas de real-time bidding e engenharia de ad exchange. Trabalhamos em três formatos: entrega completa, time dedicado ou engenheiros embarcados no seu time.
Traga sua arquitetura atual e o modo de falha que preocupa você, e vamos analisá-lo juntos em meia hora.