Um desenvolvedor publicou um projeto de aprendizado gratuito que leva o espectador de um arquivo em branco até um motor de inferência de grande modelo de linguagem em pleno funcionamento. O projeto, chamado samir-vllm, reúne mais de seis horas de vídeo e mais de 80 páginas de anotações manuscritas e diagramas. Seu objetivo é mostrar o que de fato acontece entre um prompt e os tokens gerados que são devolvidos.

O que o curso samir-vllm abrange?

A série é organizada como uma construção passo a passo. Ela começa com uma visão geral da inferência de IA e avança pelo carregamento dos pesos do modelo, pelas consultas de embeddings, pela normalização, pelos embeddings posicionais rotacionais e pelas projeções de consulta, chave e valor. Vídeos posteriores tratam da autoatenção, da rede feed-forward, da etapa de decodificação e do cache KV, e depois do processamento em lotes e dos caches KV paginados. Um encerramento aborda a atenção paginada. Anotações complementares para cada vídeo estão disponíveis em formato Markdown e PDF.

O motor é escrito em C++17 e CUDA e construído com CMake. Ele tem como alvo o modelo Llama 3.2 1B Instruct e carrega os pesos diretamente de um arquivo model.safetensors, copiando os tensores BF16 brutos para a memória da GPU. Também está incluído um carregador com mapeamento de memória, para evitar uma cópia extra no lado da CPU.

Grande parte do código se concentra nas partes da inferência que a maioria dos tutoriais ignora. O projeto inclui um tokenizador local de codificação por pares de bytes (BPE) que trata Unicode e tokens especiais, com um executável de testes dedicado. Seus kernels CUDA cobrem consultas de embeddings e RMSNorm, que faz a redução em FP32 ao aplicar os pesos BF16 aprendidos. A fase de preenchimento executa todas as 16 camadas do modelo, incluindo a atenção de consultas agrupadas, o perceptron multicamadas SwiGLU e as conexões residuais. Uma etapa de argmax na GPU seleciona cada próximo token.

Como o motor gerencia a memória do cache KV?

O sistema de memória é onde o projeto faz a maior parte de seu trabalho didático. Um pool compartilhado de páginas KV em BF16 armazena 16 tokens de chaves e valores por página física, com uma tabela de blocos para cada sequência e cada camada. O pool padrão é de 128 MiB e pode ser alterado por meio de uma flag de linha de comando. A atenção de decodificação lê diretamente as páginas em cache de cada sequência, usando um softmax online em FP32, em vez de reunir um prefixo contínuo.

O motor oferece tanto o processamento em lotes estático, que espera um grupo terminar antes de aceitar mais requisições, quanto o processamento em lotes contínuo, que admite prompts na fila quando há orçamento de páginas suficiente livre. Requisições que não cabem aguardam em ordem FIFO (primeiro a entrar, primeiro a sair). Uma requisição cujo orçamento excede todo o pool é rejeitada com um erro. O autor descreve essa abordagem como conservadora. Ela evita preempção e recomputação, mas um orçamento de saída solicitado grande pode limitar quantas requisições são executadas simultaneamente, mesmo que o modelo pare antes.

O README também aponta uma limitação que costuma surpreender as pessoas. A aritmética BF16 pode arredondar de maneira diferente em tamanhos de lote distintos, de modo que, quando dois logits do vocabulário estão quase empatados, a saída gulosa pode diferir entre execuções individuais e em lote. Saídas bit a bit idênticas entre tamanhos de lote não são garantidas.

Que hardware e licenças são necessários para executá-lo?

Executar o motor exige uma GPU NVIDIA compatível com CUDA, o CUDA Toolkit, CMake 3.24 ou mais recente, um compilador C++17, as bibliotecas de desenvolvimento ICU e o cabeçalho nlohmann/json. Os usuários também precisam dos pesos e do tokenizador do Llama 3.2, que são regidos pela Llama 3.2 Community License e pela Acceptable Use Policy da Meta e não são cobertos pela licença MIT do projeto.

O licenciamento é dividido. O código-fonte do motor, nos diretórios src, include, tests e python, tem licença MIT. As anotações, digitalizações, ilustrações e PDFs têm direitos reservados. A leitura e o estudo pessoais são permitidos, mas redistribuir ou republicar os materiais, gratuitamente ou mediante pagamento, exige autorização prévia por escrito.

Este artigo foi escrito com a assistência de IA.
News Factory APP - notícias agênticas para impulsionar seu SEO e AEO.