O que significam os intervalos de tokens por segundo no provisionamento Taxa de transferência?
Este artigo descreve como e por que o site Databricks mede tokens por segundo para cargas de trabalho de Taxa de transferência de provisionamento para o Foundation Model APIs.
O desempenho de modelos de linguagem grandes (LLMs) é geralmente medido em termos de tokens por segundo. Ao configurar o endpoint do modelo de serviço de produção, é importante considerar o número de solicitações que seu aplicativo envia para o site endpoint. Isso ajuda o senhor a entender se o seu endpoint precisa ser configurado para escala de modo a não afetar a latência.
Ao configurar os intervalos de escala-out para o endpoint implantado com provisionamento Taxa de transferência, Databricks achou mais fácil raciocinar sobre as entradas que entram em seu sistema usando tokens.
O que são tokens?
Os LLMs leem e geram texto em termos do que é chamado de tokens. Os tokens podem ser palavras ou subpalavras, e as regras exatas para dividir o texto em tokens variam de modelo para modelo. Por exemplo, o senhor pode usar ferramentas on-line para ver como o tokenizador do Llama converte palavras em tokens.
O diagrama a seguir mostra um exemplo de como o tokenizador Llama divide o texto:
Por que medir o desempenho do LLM em termos de tokens por segundo?
Tradicionalmente, os endpoints de atendimento são configurados com base no número de solicitações de concorrente por segundo (RPS). No entanto, uma solicitação de inferência LLM leva um tempo diferente com base em quantos tokens são passados e quantos são gerados, o que pode ser desequilibrado entre as solicitações. Portanto, para decidir a quantidade de escala que o seu endpoint precisa, é necessário medir a endpoint escala em termos do conteúdo da sua solicitação - tokens.
Diferentes casos de uso exigem diferentes proporções de tokens de entrada e saída:
Comprimentos variados dos contextos de entrada: Enquanto algumas solicitações podem envolver apenas alguns tokens de entrada, por exemplo, uma pergunta curta, outras podem envolver centenas ou até milhares de tokens, como um documento longo para resumo. Essa variabilidade torna desafiadora a configuração de um serviço endpoint com base apenas no RPS, pois ele não account atende às demandas de processamento variáveis das diferentes solicitações.
Comprimentos variáveis de saída, dependendo do caso de uso: Casos de uso diferentes para LLMs podem levar a comprimentos de tokens de saída muito diferentes. A geração de saída tokens é a parte mais demorada da inferência LLM, portanto, isso pode afetar drasticamente a Taxa de transferência. Por exemplo, a sumarização envolve respostas mais curtas e concisas, mas a geração de texto, como escrever artigos ou descrições de produtos, pode gerar respostas muito mais longas.
Como faço para selecionar o intervalo de tokens por segundo para meu endpoint?
provisionamento A taxa de transferência que serve o endpoint é configurada em termos de um intervalo de tokens por segundo que o senhor pode enviar para o endpoint. O endpoint escala para cima e para baixo para lidar com a carga de sua aplicação de produção. O senhor é cobrado por hora com base no intervalo de tokens por segundo para o qual seu endpoint é dimensionado.
A melhor maneira de saber qual faixa de tokens por segundo no seu provisionamento Taxa de transferência servindo endpoint funciona para o seu caso de uso é realizar um teste de carga com um dataset representativo. Consulte Realize seu próprio benchmarking LLM endpoint .
Há dois fatores importantes a serem considerados:
Como a Databricks mede o desempenho de tokens por segundo do LLM.
Como funciona a autoescala.
Como a Databricks mede o desempenho de tokens por segundo do LLM
Databricks avalia o endpoint em relação a uma carga de trabalho que representa a tarefa de sumarização comum nos casos de uso de geração aumentada de recuperação. Especificamente, a carga de trabalho consiste em:
2048 tokens de entrada
256 tokens de saída
Os intervalos de tokens exibidos combinam tokens de entrada e saída Taxa de transferência e, pelo site default, otimizam o equilíbrio da Taxa de transferência e da latência.
Databricks avalia que os usuários podem enviar essa quantidade de tokens por segundo simultaneamente para o endpoint com um tamanho de lote de 1 por solicitação. Isso simula várias solicitações que atingem o endpoint ao mesmo tempo, o que representa com mais precisão como o senhor realmente usaria o endpoint na produção.
Por exemplo, se um provisionamento Taxa de transferência que atende endpoint tiver uma taxa definida de 2304 tokens por segundo (2048 + 256), então uma única solicitação com uma entrada de 2048 tokens e uma saída esperada de 256 tokens deverá levar cerca de um segundo para ser executada.
Da mesma forma, se a taxa for definida como 5600, o senhor pode esperar que uma única solicitação, com os tokens de entrada e saída contados acima, leve cerca de 0,5 segundo para ser executada, ou seja, o endpoint pode processar duas solicitações semelhantes em cerca de um segundo.
Se a sua carga de trabalho variar em relação à acima, o senhor pode esperar que a latência varie em relação à taxa de transferência de provisionamento listada. Como dito anteriormente, gerar mais tokens de saída consome mais tempo do que incluir mais tokens de entrada. Se estiver realizando a inferência de lotes e quiser estimar o tempo que levará para ser concluída, o senhor pode calcular o número médio de entrada e saída tokens e comparar com a carga de trabalho de referência Databricks acima.
Por exemplo, se o senhor tiver 1.000 linhas, com uma contagem média de tokens de entrada de 3.000 e uma contagem média de tokens de saída de 500, e um provisionamento Taxa de transferência de 3.500 tokens por segundo, pode levar mais de 1.000 segundos no total (um segundo por linha) porque a contagem média de tokens é maior do que o benchmark Databricks.
Da mesma forma, se o senhor tiver 1.000 linhas, uma entrada média de 1.500 tokens, uma saída média de 100 tokens e um provisionamento Taxa de transferência de 1.600 tokens por segundo, poderá levar menos de 1.000 segundos no total (um segundo por linha), pois a média de tokens contados é menor do que o benchmark Databricks.
Para estimar o provisionamento Taxa de transferência ideal necessário para completar sua carga de trabalho de inferência de lotes, o senhor pode usar o Notebook na seção Realizar LLM inferência de lotes usando ai_query
Como funciona a autoescala
servindo modelo recurso um sistema rápido de autoescala que escala o compute subjacente para atender à demanda de tokens por segundo do seu aplicativo. Databricks escala up provisionamento Taxa de transferência em pedaços de tokens por segundo, para que o senhor seja cobrado por unidades adicionais de provisionamento Taxa de transferência somente quando as estiver usando.
O gráfico Taxa de transferência-latência a seguir mostra um provisionamento testado Taxa de transferência endpoint com um número crescente de solicitações paralelas. O primeiro ponto representa 1 solicitação, o segundo, 2 solicitações paralelas, o terceiro, 4 solicitações paralelas e assim por diante. À medida que o número de solicitações aumenta e, por sua vez, a demanda tokens por segundo, o senhor vê que o provisionamento da taxa de transferência também aumenta. Esse aumento indica que a autoescala aumenta o compute disponível. No entanto, o senhor pode começar a ver que a Taxa de transferência começa a se estabilizar, atingindo um limite de ~8000 tokens por segundo à medida que mais solicitações paralelas são feitas. A latência total aumenta à medida que mais solicitações precisam aguardar na fila antes de serem processadas porque o site compute alocado está sendo usado simultaneamente.
Observação
O senhor pode manter a Taxa de transferência consistente desativando o escala-to-zero e configurando uma Taxa de transferência mínima no servidor endpoint. Isso evita a necessidade de esperar que o site endpoint aumente a escala.
O senhor também pode ver no modelo servindo endpoint como os recursos são girados para cima ou para baixo, dependendo da demanda: