Ganhos de velocidade do LLaMA na CPU
- O projeto llamafile, da Mozilla, escreveu 84 novos kernels de multiplicação de matrizes
- Ao usar pesos F16 e Q8_0 na CPU, o tempo de avaliação de prompt ficou entre 30% e 500% mais rápido em comparação com o llama.cpp
- As melhorias mais dramáticas ocorreram em computadores ARMv8.2+ (ex.: RPI 5), Intel (ex.: Alderlake) e AVX512 (ex.: Zen 4)
- Para matrizes que cabem no cache L2, mostrou velocidade 2x maior que a do MKL
- O ganho de velocidade funciona melhor para prompts com menos de 1.000 tokens
Contexto
- O llamafile é um projeto local de LLM iniciado com a Mozilla em novembro de 2023
- Empacota o llama.cpp como um binário multiplataforma de arquivo único usando Cosmopolitan Libc
- Roda em 6 sistemas operacionais para AMD64 e ARM64, com algumas modificações
- Acreditam que, ao melhorar a tecnologia central, podem oferecer aos usuários a melhor experiência com llama.cpp e ajudar os dois projetos a alcançar um público mais amplo
- A Mozilla vem fornecendo recursos para isso
Ganhos de desempenho em hardware corporativo
- Quando começou a se interessar por LLMs, o ambiente de trabalho era um modesto Hewlett Packard rodando Alpine, com disco rígido mecânico, RAM lenta, processador AVX2 e sem GPU
- O que gostava no llama.cpp era que eles priorizavam pessoas como ele
- Começou a colaborar em tempo integral como voluntário e, junto com pessoas como Slaren, introduziu suporte a
mmap(), o que permitiu carregar os pesos instantaneamente enquanto reduzia pela metade o uso de RAM
- Na época, isso foi um grande salto para LLMs locais, mas quase não ajudou a melhorar a velocidade de avaliação
- A maior parte do código de inferência foi escrita pelo próprio Georgi Gerganov e era tão boa que levou mais um ano até conseguir melhorá-la
- Agora que melhorou, a ideia é ver quanto mais rápido ficou naquele antigo Hewlett Packard
Ganhos de desempenho em hardware hobbyista
- É possível rodar grandes modelos de linguagem mesmo sem um computador grande
- Um dos melhores computadores pessoais disponíveis hoje nas lojas é o Raspberry Pi
- Ele oferece excelente desempenho por um preço baixo e consome pouquíssima energia
- O Raspberry Pi lançou a 5ª geração há poucos dias, e ela é incrivelmente mais rápida que os modelos anteriores
- Também passou a oferecer suporte à ISA ARMv8.2 dotprod e à aritmética fp16, que são muito úteis para LLMs
- Só essas duas funcionalidades já permitiram que o llama.cpp alcançasse um ganho de desempenho de 10x para pesos f16 no ano passado
- Nesta semana, usando kernels originalmente pensados para AVX512, foi possível extrair mais um ganho de 2x por cima disso
- Não parecia provável que kernels projetados para equipamentos de data center se encaixassem tão bem em um Raspberry Pi pequeno e leve, mas isso funcionou perfeitamente porque ambas as CPUs têm 32 registradores vetoriais
Ganhos de desempenho em hardware gamer
- Jogadores têm algumas das maiores expectativas de qualidade entre consumidores preocupados com custo-benefício, então o hardware feito para eles costuma ser muito bom
- A indústria de machine learning prosperou por anos reaproveitando hardware criado para gamers
- Sem a importante contribuição dos gamers, o inverno da IA provavelmente teria durado mais 10 anos
- Há alguns meses, ele pediu a um gamer que montasse um computador capaz de substituir o antigo Hewlett Packard
- Considera o Alderlake uma excelente CPU, mas ela parece amplamente subestimada, já que foi possível aumentar o desempenho em float16 em até 5x com relativa facilidade
- Diferentemente do ARMv8.2, os kernels x86 usam internamente operações em float32, então isso foi possível sem introduzir erro de arredondamento
- Isso significa que dá para criar um filtro de spam mais inteligente
- Executar o script de shell
spam.sh leva apenas 420 milissegundos, o que é 7x mais rápido que o Raspberry Pi 5
- Em cargas pequenas, esse chip consegue terminar antes mesmo de o CUDA começar
- Donos de Alderlake podem esperar que o llamafile tome cuidado especial para não rodar nos efficiency cores
- Esse é um dos fatores que ajudam o llamafile a rodar mais rápido que o llama.cpp
- Isso também significa que, mesmo deixando um LLM rodando 24 horas por dia, ainda sobra recurso suficiente para os outros programas do computador
- O llama.cpp despacha threads em lockstep, então se 1 núcleo levasse mais tempo que outro para concluir o trabalho, todos os outros n núcleos precisariam ficar em busy loop até terminar
- A maior característica desse microprocessador é a velocidade com que consegue compilar as 2,6 milhões de linhas de código do monorepo Cosmopolitan
- O Hewlett Packard sempre levava 64 segundos, mas esse computador gamer faz isso em 20 segundos
- Originalmente levava 35 segundos, mas ficou mais rápido após aplicar metal líquido e overclock com IA
- Outro motivo pelo qual o código de sistema é tão rápido no Alderlake é que, durante a criação dessa CPU, houve uma disputa feroz entre hackers e cientistas, e os hackers venceram
- Espera-se que no futuro haja um compromisso melhor em relação ao AVX512, mas, no geral, há muita satisfação com esse chip porque ele representa um avanço considerável em relação ao modelo anterior
Ganhos de desempenho em hardware da Apple
- Se for para escolher o computador pessoal mais sofisticado, seria sem dúvida o Mac Studio
- Aqui conquistar vantagem de desempenho foi mais difícil, porque essa é a plataforma de hardware com a qual os desenvolvedores do llama.cpp mais se importam, e a escolha de usar o compilador do Stallman impõe uma desvantagem em relação às ferramentas proprietárias da Apple
- Não surpreenderia que o microprocessador M2 transformasse o llamafile em uma mangueira de incêndio de conteúdo sintético
- O truque usado pela Apple para isso é tirar proveito da integração vertical
- Ao comprar um Mac Studio e olhar por dentro, você perceberá que eles colocaram a RAM DIMM dentro da CPU
- Como a CPU não precisa mais fazer essas chamadas de longa distância, tarefas sensíveis à latência, como geração de tokens, ficam muito mais rápidas
- No entanto, em termos de FLOPs puros (medidos em tok/sec de prompt), a ISA ARM do M2 Ultra expõe apenas 30% mais computação que o computador Intel dele, muito mais barato
- Só é possível acessar mais desempenho por meio de frameworks proprietários como Metal ou Accelerate
- Se o
xcode estiver instalado, o llamafile compilará por padrão um pequeno módulo stub para ajudar a colocar você à frente de todas as bibliotecas closed source entre você e o silício
- Se estiver pensando em comprar um Mac Studio, um ponto importante é que, assim como o Windows Executive, o XNU faz um trabalho realmente bom em manter o desktop estável, e isso significa proteger o sistema de você mesmo
- Por causa de todos esses recursos de segurança, compilar o monorepo Cosmo no Mac Studio leva 45 segundos, mas parece que nem uma fork bomb faria o Netflix perder um único frame
- O script
spam.sh também roda em 430ms, sendo mais lento que no Intel
- Ainda assim, nada disso preocupa, porque já foi visto como o Asahi Linux pode liberar todo o potencial do M2
Ganhos de desempenho em hardware profissional
- O llamafile se preocupa muito em ajudar quem não tem GPU, mas também oferece uma experiência de alto nível para o 1% do topo
- O AMD Ryzen Threadripper PRO 7995WX foi lançado há alguns meses e atualmente é a CPU mais cara que o dinheiro pode comprar
- Custa 10 mil dólares, mas entrega 96 núcleos de AVX512 com base na arquitetura Zen4
- Mesmo custando o dobro, a ISA x86 do 7995WX oferece 7x mais desempenho bruto de computação que a ISA ARM do M2 Ultra, com velocidade de geração de tokens quase igual
- Isso provavelmente se deve ao cache L3 de 384MB
- Uma vantagem do AVX512 é que o modelo Gemma, do Google, consegue resolver enigmas matemáticos em AVX512, mas não em AVX2, porque vetores maiores geralmente facilitam a redução de erros de arredondamento
- A instrução
VDPBF16PS ajuda a fazer updot de bf16 de forma semelhante ao VNNI e ao ARM dotprod
- Modelos como Mistral e TinyLLaMA distribuem pesos em bfloat16 no formato oficial, então um bom suporte nativo a bf16 é importante
- Ao converter bf16 para fp16, apenas 13% dos números possíveis podem ser representados com precisão
- Na prática isso quase não importa, porque 99,71% dos números usados pelo Mistral 7b estão dentro desses 13%
- Ainda assim, o llamafile faz o possível para entregar a quantidade de bits anunciada
2 comentários
Não há dados sobre máquinas intermediárias como o Intel 14600 ou o Ryzen 5600. Parece que a intenção foi mostrar que roda até em um Raspberry Pi, mas para uso real parece algo meio impraticável. Mesmo assim, quero me consolar com o fato de que as especificações de hardware necessárias para rodar um LLM local estão caindo cada vez mais.
Comentários do Hacker News
Opinião sobre a implementação de
SGEMMem Fortran:-funroll-all-loops).Opinião sobre uma alternativa ao cuBLAS:
Opinião sobre executar LLMs (Local Language Models):
Opinião sobre medição de desempenho:
Links relacionados:
Opinião sobre o título:
Opinião sobre melhoria de desempenho em relação ao MKL-DNN:
Opinião sobre execução de LLMs:
Opinião sobre o uso de CPU pela Pixar:
Opinião sobre AMD Zen4 e AVX512: