A ascensão da IA generativa (GenAI) transformou os sectores, desde o processamento de linguagem natural à geração de conteúdos criativos. No entanto, a implementação eficiente destes modelos poderosos à escala continua a ser um desafio.
Os mecanismos de inferência desempenham um papel fundamental na otimização do desempenho, na redução da latência e na maximização da utilização de recursos. Neste artigo, vamos nos aprofundar em quatro soluções líderes: TensorRT-LLM, vLLM, Hugging Face TGI e LMDeploy.
Cada um deles traz pontos fortes exclusivos, seja a precisão acelerada por hardware da NVIDIA, o gerenciamento de memória inovador do vLLM, o ecossistema pronto para produção do TGI ou o foco do LMDeploy em velocidade e simplicidade. Junte-se a nós enquanto comparamos esses mecanismos para ajudá-lo a encontrar a opção perfeita para suas cargas de trabalho de GenAI.
O TensorRT-LLM é a resposta da NVIDIA para fazer com que grandes modelos de linguagem sejam executados de forma rápida e suave. Construído com base na estrutura TensorRT, foi concebido para extrair cada gota de desempenho das GPUs NVIDIA. Fá-lo com truques como a fusão de camadas, ajuste de precisão (FP16, INT8, FP8...) e otimização do kernel que reduz o tempo de computação sem quebrar a precisão do modelo.
Não se trata apenas de velocidade. O TensorRT-LLM lida com modelos grandes de forma eficiente, gerenciando a memória de forma inteligente, para que você não trave no meio da execução. Também suporta lotes dinâmicos, permitindo-lhe processar vários pedidos de uma só vez sem ficar sem memória. Se já estiver a utilizar hardware da NVIDIA, é óbvio que não precisa de o fazer, uma vez que está fortemente ligado ao seu ecossistema, como o CUDA e o cuDNN, e até se integra com o Servidor de Inferência Triton da NVIDIA e o NVIDIA Dynamo.
Dito isto, não é perfeito para toda a gente. A configuração pode ser difícil se não se sentir confortável com as ferramentas da NVIDIA e é menos flexível se estiver num hardware que não seja da NVIDIA. Ainda assim, para potência bruta e otimização em GPUs NVIDIA, é difícil de bater.
O vLLM é muito bom em lidar rapidamente com grandes volumes de trabalhos de inferência. É um projeto de código aberto que brilha quando você precisa de alta taxa de transferência sem diminuir a velocidade. O molho secreto é o PagedAttention, um truque que gerencia a memória muito melhor do que a maioria. Em vez de carregar tudo de uma vez e consumir RAM, ele divide os caches de valores-chave em pedaços, pegando apenas o que é necessário. Menos desperdício, mais velocidade.
Também é muito flexível. Funciona com modelos populares, como LLaMA ou Mistral, imediatamente, e suporta muitos hardwares, incluindo GPUs NVIDIA ou AMD. Também obtém lotes dinâmicos para agrupar pedidos de forma eficiente, mantendo o pipeline a funcionar sem problemas. A configuração é bastante simples se você estiver acostumado com Python e PyTorch.
A principal limitação do vLLM é sua relativa imaturidade no mercado, o que significa que ele pode ainda não oferecer o conjunto abrangente de recursos disponíveis em soluções mais estabelecidas. No entanto, para organizações que buscam uma solução eficiente que ofereça inferência de alto desempenho, o vLLM representa uma excelente opção.
O Hugging Face TGI (Text Generation Inference) é feito para pessoas que querem ter modelos a funcionar sem dor de cabeça. É uma ferramenta construída pela equipa da Hugging Face, por isso funciona bem com a sua enorme biblioteca de modelos pré-treinados - pense no BERT, GPT e muito mais. Foi concebida para utilização no mundo real, como alimentar chatbots ou aplicações em que a geração de texto tem de funcionar rapidamente e não falhar.
O TGI faz o trabalho pesado com recursos como batching contínuo, que mantém o sistema ocupado, trocando novas solicitações à medida que as antigas são concluídas. Ele suporta aceleração de GPU e pode ser ampliado se você tiver o hardware necessário. Além disso, tem segurança integrada - como filtrar saídas ruins - o que é útil para produção. É possível implantá-lo com o Docker em algumas etapas, portanto, é relativamente fácil de configurar.
O senão? Está ligado ao ecossistema do Hugging Face, por isso, se ainda não estiver nesse mundo, pode parecer restritivo. Ainda assim, para uma opção plug-and-play pronta a usar, o TGI é uma óptima escolha.
O LMDeploy é um conjunto de ferramentas das equipas MMRazor e MMDeploy, criado para comprimir, implementar e executar grandes modelos de linguagem sem complicações. O que o faz se destacar? Tem uma excelente velocidade de descodificação - até 1,8x mais pedidos por segundo do que o vLLM numa GPU A100. Isso se deve a truques como batching persistente, cache KV bloqueado e kernels CUDA inteligentes que mantêm a GPU ocupada.
Tem dois motores: O TurboMind para um desempenho máximo e um PyTorch para facilitar os ajustes. O TurboMind é a estrela aqui - ele faz inferência de 4 bits 2,4x mais rápido que o FP16, e lida com modelos grandes como o Llama-2 70B com facilidade. Também é possível quantizar pesos e caches KV para economizar memória sem prejudicar a precisão. A implementação também é muito fácil - um comando configura um servidor em várias máquinas, se necessário. Além disso, memoriza o histórico de conversação em conversas de várias rondas, para não perder tempo a refazer trabalho antigo.
A desvantagem? O TurboMind é exigente - ainda não funciona bem com modelos de atenção de janela deslizante como o Mistral. E se não estiver a utilizar GPUs NVIDIA, fica preso ao motor PyTorch, mais lento. Ainda assim, para velocidade e simplicidade no hardware certo, o LMDeploy é uma ótima escolha.
Vamos analisar como esses mecanismos se comparam em termos de latência (a rapidez com que uma solicitação é concluída), taxa de transferência (quantas solicitações podem ser ingeridas) e escalabilidade (como eles lidam com cargas maiores ou mais hardware).
O TensorRT-LLM destaca-se na latência se tiver GPUs NVIDIA. Está altamente optimizado para o hardware NVIDIA, pelo que os pedidos individuais terminam rapidamente: menos de 50 ms para a maioria dos modelos numa A100. A taxa de transferência também é excelente, especialmente com o agrupamento dinâmico. Os benchmarks do BentoML mostram que este motor atinge 700 tokens por segundo com 100 utilizadores em simultâneo para o Llama 3 70B Q4 numa GPU A100 de 80 GB. O TensorRT-LLM tem um bom desempenho em cenários com entradas longas e taxas de pedido elevadas, oferecendo uma boa taxa de transferência. A escalabilidade em várias GPUs é suportada de imediato com um excelente desempenho.
O vLLM também tem um bom rendimento, particularmente em cargas de trabalho de descodificação pesada, com elevado rendimento e baixa latência após actualizações recentes. Os benchmarks do BentoML mostram que este motor atinge 600-650 tokens por segundo com 100 utilizadores simultâneos para Llama 3 70B Q4 numa GPU A100 80GB. A latência é boa, mas não tão boa como a do TensorRT-LLM: cerca de 60-80ms para execuções a solo. Escala bem entre GPUs, mesmo misturando marcas, mas é menos polido para configurações enormes.
O Hugging Face TGI tem um desempenho semelhante ao vLLM, proporcionando um equilíbrio entre desempenho e facilidade de utilização. A latência é razoável: 50-70ms numa boa GPU. Os benchmarks do BentoML mostram que este motor atinge 600-650 tokens por segundo com 100 utilizadores simultâneos para Llama 3 70B Q4 numa GPU A100 80GB. É construído para escalar para produção, por isso lida com mais utilizadores ou máquinas sem problemas, especialmente com o Docker.
O LMDeploy ganha na velocidade de descodificação. É excelente na taxa de geração de tokens, especialmente para modelos mais pequenos, e tem um tempo baixo para o primeiro token (TTFT) para modelos grandes quantizados. A latência é baixa: 40-60ms. E a taxa de transferência é excelente. Benchmarks do BentoML mostram que este motor atinge 700 tokens por segundo com 100 utilizadores simultâneos para Llama 3 70B Q4 numa GPU A100 80GB. O escalonamento é fácil com a sua configuração de servidor, mas ele se apoia fortemente em GPUs NVIDIA para obter os melhores resultados; o modo PyTorch fica para trás.
Conclusão: O TensorRT-LLM e o LMDeploy lideram em termos de velocidade bruta. A sua escolha depende do seu hardware e do número de pedidos que está a tratar.
A quantização reduz a precisão do modelo para diminuir o uso de memória e acelerar a inferência, o que é importante para ambientes com recursos limitados. Veja a seguir o desempenho de cada mecanismo:
O TensorRT-LLM suporta FP8, FP4, INT4 com Quantização de Peso com Consciência de Ativação (AWQ) e INT8 com SmoothQuant, oferecendo opções robustas para otimizar o desempenho da GPU NVIDIA.
O vLLM oferece flexibilidade com GPTQ, AWQ, INT4, INT8 e FP8, adaptando-se a várias necessidades de hardware e precisão.
O Hugging Face TGI integra bitsandbytes para quantização de 8 bits e 4 bits e GPT-Q para quantização apenas de peso, adequado para implementações de produção.
O LMDeploy oferece AWQ de 4 bits, quantização de 8 bits e quantização online da cache INT8/INT4 KV, aumentando a eficiência de modelos grandes em hardware limitado.
O suporte de hardware determina onde pode implementar estes motores, afectando a escalabilidade e o desempenho:
O TensorRT-LLM é exclusivo do NVIDIA CUDA, aproveitando os aceleradores de GPU para obter alto desempenho.
O vLLM suporta NVIDIA CUDA, AMD ROCm, AWS Neuron e CPU, oferecendo ampla compatibilidade para diversas configurações.
O Hugging Face TGI funciona com NVIDIA CUDA, AMD ROCm, Intel Gaudi e AWS Inferentia, proporcionando flexibilidade para vários ambientes de hardware.
O LMDeploy é otimizado para NVIDIA CUDA, garantindo o melhor desempenho em GPUs NVIDIA, mas com suporte limitado para outras plataformas.
O processo de configuração e integração pode afetar os prazos de desenvolvimento. Veja como cada motor se comporta:
O TensorRT-LLM requer a conversão de pontos de controlo, a construção do motor do TensorRT e a configuração de parâmetros, o que o torna um desafio e consome muito tempo aos engenheiros.
O vLLM é de fácil utilização, com documentação abrangente, instalação fácil e integração perfeita com a biblioteca Python.
A Hugging Face TGI beneficia do ecossistema da Hugging Face, oferecendo imagens Docker pré-construídas e documentação completa para uma implementação rápida.
O LMDeploy apresenta uma configuração simples com um único comando para iniciar o servidor e APIs Python para personalização, equilibrando facilidade com flexibilidade.
A escolha do motor certo depende do seu caso de utilização, hardware e competências.
O TensorRT-LLM é o seu motor de inferência de eleição se estiver a executar grandes modelos em GPUs NVIDIA e precisar de toda a velocidade (pense em aplicações de baixa latência, como chatbots em tempo real ou assistentes de IA, em que as respostas têm de ser geradas em milissegundos). É perfeito para empresas que já estão profundamente envolvidas no mundo da NVIDIA, mas pode ser um exagero se estiver à procura de simplicidade.
O vLLM é um ótimo compromisso entre velocidade e simplicidade. Funciona muito bem para empresas em fase de arranque ou investigadores que pretendam algo flexível e rápido de configurar.
O TGI da Hugging Face é equivalente ao vLLM em termos de velocidade e simplicidade. É fácil de implementar, escala suavemente e liga-se ao hub de modelos da Hugging Face, pelo que é ideal para equipas que pretendem uma solução sem complicações.
O LMDeploy brilha em termos de desempenho, tal como o TensorRT-LLM. É adequado para utilizadores com GPUs NVIDIA que pretendam uma configuração simples e um desempenho de topo, mas é menos útil se os seus modelos não funcionarem bem com o TurboMind.
Se não puder ou não quiser implementar o seu próprio modelo GenAI, pode utilizar o NLP Cloud e tirar partido de modelos rápidos de IA generativa em escala na produção. Experimente agora a inferência rápida no NLP Cloud!
Se tiver dúvidas sobre os motores de inferência em geral, não hesite em perguntar-nos, é sempre um prazer aconselhá-lo!
Julien
CTO na NLP Cloud