Motivos para usar o vLLM
O vLLM responde a muitos desafios de runtime ao disponibilizar técnicas avançadas e otimizadas especificamente para o desempenho da inferência:
- Processamento contínuo em lotes: o vLLM minimiza o tempo ocioso da GPU ao processar simultaneamente tokens de várias solicitações recebidas. Em vez de lidar com apenas uma solicitação por vez, ele agrupa tokens de diferentes sequências em lotes, melhorando consideravelmente a utilização da GPU e a taxa de transferência de inferência.
- PagedAttention: o vLLM usa uma nova estratégia de gerenciamento de memória chamada PagedAttention, que lida adequadamente com caches de KV em grande escala. Por conta da alocação dinâmica de memória da GPU, essa técnica consegue lidar com muito mais solicitações simultâneas e sequências longas, sem sofrer com problemas de memória.
Para saber mais detalhes, confira este artigo do blog sobre vLLM.
Benefícios da implantação do vLLM
Recursos de integração abrangente: o vLLM pode carregar modelos diretamente de repositórios conhecidos, como o Hugging Face, e serve como um backend de alto desempenho em frameworks como o Triton Inference Server. Sua compatibilidade com diversas plataformas de hardware, inclusive GPUs da NVIDIA, GPUs da AMD e TPUs do Google, simplifica ainda mais a implantação em escala empresarial.
Padronização e independência de fornecedor: ao usar um runtime amplamente adotado como o vLLM, as organizações obtêm benefícios de padronização, que viabilizam um desempenho confiável em diversos ambientes de hardware e evitam a dependência de soluções proprietárias.
Para entender melhor as técnicas de paralelismo do vLLM, consulte este artigo detalhado.
2. Otimização do modelo de IA
A importância de otimizar Large Language Models
Um dos principais desafios na produção é gerenciar a memória e a eficiência computacional. Modelos grandes costumam exigir uma grande quantidade de memória da GPU para armazenar parâmetros e contexto no cache de KV, principalmente ao lidar com prompts longos ou várias solicitações simultâneas. Se os modelos não forem otimizados, a execução será ineficiente, levando a custos operacionais mais altos. A latência é outra preocupação crítica: os usuários esperam respostas em tempo real, e os atrasos causados pelo grande porte ou pela execução ineficiente do modelo podem afetar negativamente a experiência e a eficácia dos fluxos de trabalho downstream.
Motivos para compactar um modelo
Compactar um modelo ajuda a resolver alguns dos desafios mais significativos que as organizações enfrentam ao implantar a IA em grande escala: economia e otimização do desempenho.
Conforme os modelos aumentam para bilhões de parâmetros, a disponibilização deles na produção se torna intensiva, exigindo muita memória e capacidade computacional. As técnicas de compactação de modelos, como quantização e esparsidade, reduzem um pouco a precisão e o número de parâmetros e diminuem significativamente a área de ocupação da memória e os requisitos de computação, sem sacrificar demais a exatidão. Ao compactar os modelos, as organizações podem executar cargas de trabalho de IA com mais eficiência, usando menos GPUs ou outros aceleradores. Isso reduz muito os custos operacionais e possibilita inferências mais rápidas, essenciais para aplicações que exigem respostas em tempo real.
Como meu modelo pode ter custos otimizados para inferência?
Uma das maneiras mais eficazes de reduzir esses custos é compactar o modelo. Técnicas de compactação, como quantização e esparsidade, reduzem o tamanho do modelo e os requisitos de computação, permitindo que as cargas de trabalho de inferência sejam executadas em GPUs menores ou em menor número.
A quantização otimiza um modelo reduzindo a precisão de seus valores numéricos: mais especificamente, os pesos e as ativações. Os modelos costumam operar com precisão de 16 bits (ou até mesmo de 32 bits), usando formatos como FP16 ou BF16. A quantização compacta esses valores em formatos menores, como 8 bits (INT8 ou FP8) ou 4 bits (INT4). Esse processo reduz significativamente a memória necessária para armazenar os parâmetros, permitindo que modelos como um Llama de 70 bilhões de parâmetros passem de cerca de 140 GB para apenas 40 GB. Essas reduções não apenas liberam memória para cálculos adicionais, mas também aumentam a taxa de transferência, especialmente em situações limitadas pela memória. Por exemplo, uma GPU com 48 GB de VRAM processa um modelo de 40 GB mais rápido do que um de 140 GB.
No entanto, uma quantização intensa pode afetar a exatidão devido à perda de precisão. Para reduzir isso, a quantização de alta granularidade emprega fatores de escala que preservam a exatidão do modelo, geralmente com menos de 1% de degradação. A quantização pode dobrar a taxa de transferência computacional ao otimizar o uso do hardware, diminuindo significativamente a latência e os custos operacionais.
A esparsidade otimiza um modelo ao introduzir uma redução estruturada de parâmetros, essencialmente zerando uma grande parcela dos pesos do modelo. Essa técnica funciona com a identificação e eliminação de pesos redundantes ou menos críticos, simplificando os cálculos durante a inferência. A esparsidade pode levar a uma redução drástica na complexidade do modelo, diminuindo o uso de memória e o processamento, e levando a uma inferência mais rápida e a custos operacionais menores.
No entanto, essa técnica requer treinar novamente o modelo: uma etapa computacional intensiva que exige recursos iniciais significativos. A eficiência disso depende dos recursos de hardware, como a esparsidade semiestruturada compatível com aceleradores modernos, como GPUs, onde padrões específicos de pesos zerados possibilitam cálculos mais rápidos. A principal vantagem é a capacidade de reduzir consideravelmente os requisitos computacionais quando implementada corretamente.
Embora a esparsidade possa gerar benefícios notáveis, principalmente quando combinada a outros métodos de otimização, como a quantização, ela costuma demandar um processo de otimização mais complexo. Por isso, ela é recomendada para cenários com configurações de hardware especializadas ou de escala extensiva. Ao aplicar cuidadosamente a esparsidade, as organizações podem melhorar a eficiência da inferência. Porém, devido à complexidade envolvida, a quantização costuma ser mais recomendada como principal técnica de otimização.
Ao adotar fluxos de trabalho de compactação e runtimes validados, as organizações podem gerenciar melhor os custos operacionais, viabilizar a escalabilidade e se preparar para futuros aumentos no uso da IA sem comprometer demais os recursos de infraestrutura.
A exatidão será comprometida?
Embora as técnicas de compactação de modelos como quantização e esparsidade reduzam os requisitos de memória e computação, elas são projetadas especificamente para manter níveis aceitáveis de exatidão. Por exemplo, a quantização de 8 bits normalmente oferece uma exatidão próxima à linha de base e reduz o consumo de memória pela metade. Até mesmo modelos de 4 bits podem manter um alto desempenho quando otimizados com técnicas avançadas de quantização, como arredondamento de peso e calibragem. Padrões estruturados de esparsidade, como a esparsidade 2:4, permitem que os aceleradores de hardware ignorem operações redundantes sem prejudicar a qualidade da saída. Em vários cenários de produção, as equipes conseguem economias expressivas de recursos com pouca ou nenhuma redução no desempenho do modelo. O teste e a validação ainda são essenciais, mas, para a maioria das aplicações, uma compactação bem implementada gera inferências altamente eficientes sem afetar a exatidão.