14 pontos por GN⁺ 2024-04-02 | 2 comentários | Compartilhar no WhatsApp

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

 
savvykang 2024-04-02

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.

 
GN⁺ 2024-04-02
Comentários do Hacker News
  • Opinião sobre a implementação de SGEMM em Fortran:

    • Compiladores Fortran modernos conseguem aplicar otimizações AVX e FMA sem alterações adicionais.
    • A otimização de desenrolamento de laço (loop unrolling) pode ser habilitada por meio da flag do compilador (-funroll-all-loops).
    • O compilador da Intel faz desenrolamento de laço mesmo sem solicitação explícita do usuário.
    • Adicionar paralelização a código-fonte em Fortran 77 pode ser difícil, mas é possível incluir diretivas OpenMP ou usar estruturas de paralelização do Fortran moderno.
    • Não subestime funções em Fortran 77. O objetivo do Fortran é livrar o desenvolvedor de detalhes específicos da plataforma e deixar o trabalho para o compilador.
  • Opinião sobre uma alternativa ao cuBLAS:

    • Parece uma tentativa de reescrever o cuBLAS dentro de CUDA.
    • O próximo passo pode ser remover a dependência de CUDA e usar diretamente compute shaders em Vulkan ou Metal.
  • Opinião sobre executar LLMs (Local Language Models):

    • Todo mundo deveria poder baixar e executar um LLM localmente mesmo com requisitos mínimos.
    • Isso pode servir como uma forma de backup de uma grande parte do conhecimento humano.
  • Opinião sobre medição de desempenho:

    • Há preferência por usar C++ para definir sub-rotinas. C++ é mais de três ordens de grandeza mais rápido que Python.
    • A ideia de medir diferenças de desempenho em "anos da Lei de Moore" é considerada interessante.
  • Links relacionados:

  • Opinião sobre o título:

    • O título é confuso. À primeira vista, pode parecer que se está afirmando que o modelo é mais rápido na CPU do que na GPU.
    • Um título mais claro seria algo como "Melhoria de desempenho do LLaMA na CPU".
  • Opinião sobre melhoria de desempenho em relação ao MKL-DNN:

    • Houve uma tentativa frustrada de superar o MKL-DNN para tamanhos de matriz limitados.
    • Esse tipo de eficiência energética em CPU é fisicamente impossível.
  • Opinião sobre execução de LLMs:

    • É possível executar grandes modelos de linguagem sem um computador grande.
    • Executar modelos com poucos parâmetros tecnicamente ainda conta como executar um modelo de linguagem, mas talvez não atenda ao padrão que a maioria das pessoas considera útil.
  • Opinião sobre o uso de CPU pela Pixar:

    • Grandes estúdios como a Pixar usam CPU para renderização de filmes por causa da relação custo/desempenho e do acesso a mais RAM.
    • Link de notícia relacionada.
  • Opinião sobre AMD Zen4 e AVX512:

    • A ISA x86 do 7995WX custa o dobro da ISA ARM do M2 Ultra, mas oferece 7 vezes mais poder computacional bruto, enquanto a velocidade de geração de tokens é quase igual.
    • Isso provavelmente se deve aos 384MB de cache L3.
    • Foi feito um trabalho que permite executar o LLaMA no Zen4 2,8 vezes mais rápido do que antes.