2 pontos por GN⁺ 2023-11-30 | 1 comentários | Compartilhar no WhatsApp
  • llamafile é um projeto do Mozilla Builders que reduz a implantação e a execução de LLMs a um único executável, permitindo rodar localmente na maioria dos sistemas operacionais e arquiteturas de CPU sem instalação
  • A implementação combina llama.cpp com Cosmopolitan Libc para condensar a complexidade de executar LLMs em um único executável chamado “llamafile”, e o projeto foi reformulado pela Mozilla.ai
  • O whisperfile incluído junto é uma ferramenta de fala para texto em arquivo único, baseada no mesmo empacotamento Cosmopolitan do whisper.cpp, com suporte a transcrição e tradução de arquivos de áudio
  • Desde a v0.10.0, usa um novo sistema de build para acompanhar mais facilmente as versões mais recentes do llama.cpp, oferecendo suporte a modelos e recursos mais novos, embora alguns recursos familiares das versões anteriores possam ter sido removidos
  • No Windows, é necessário adicionar a extensão .exe antes de executar e, como executáveis acima de 4GB não podem ser executados no Windows, é preciso usar um binário separado do llamafile com pesos/modelos GGUF externos

Executando LLMs em um único arquivo

  • llamafile é um projeto que permite distribuir e executar LLMs em um único arquivo
  • O objetivo é aumentar a acessibilidade a LLMs abertos tanto para desenvolvedores quanto para usuários finais
  • Combina llama.cpp e Cosmopolitan Libc em um único framework
  • O resultado é um executável de arquivo único chamado “llamafile”, que roda localmente sem instalação
  • O suporte abrange a maioria dos sistemas operacionais e arquiteturas de CPU

Reformulação pela Mozilla.ai e projetos relacionados

Inclui whisperfile

  • whisperfile é a ferramenta de fala para texto em arquivo único incluída no llamafile
  • Ela é baseada no mesmo empacotamento Cosmopolitan usado em whisper.cpp
  • Oferece suporte a transcrição e tradução de arquivos de áudio
  • Pode ser usada sem instalação na mesma faixa de plataformas do llamafile
  • A documentação está em Whisperfile

Mudanças no sistema de build da v0.10.x

  • A partir da 0.10.0, o llamafile usa um novo sistema de build
  • O objetivo do novo sistema é facilitar a manutenção do código alinhado com as versões mais recentes do llama.cpp
  • Com essa mudança, há suporte a modelos e recursos mais novos
  • Ao mesmo tempo, alguns recursos com os quais os usuários estavam acostumados podem ter desaparecido
  • Uma explicação em alto nível das mudanças está em README_0.10.0.md
  • Usuários que preferem a “classic experience” podem acessar versões anteriores na página de releases
  • Os llamafiles pré-compilados indicam com qual versão de servidor foram empacotados

Início rápido e limitações no Windows

  • O modelo de exemplo é o Qwen3.5 0.8B, e o README mostra o fluxo para baixar e executar em poucos minutos
curl -LO https://huggingface.co/mozilla-ai/llamafile_0.10/…
chmod +x Qwen3.5-0.8B-Q8_0.llamafile
./Qwen3.5-0.8B-Q8_0.llamafile
  • Esse modelo foi escolhido por ser o menor entre os modelos que o projeto compilou como llamafile, aumentando a chance de funcionar imediatamente
  • Se você tiver hardware mais potente ou GPU, pode escolher modelos maiores e mais expressivos, que podem fornecer respostas mais precisas
  • Usuários do Windows precisam adicionar a extensão .exe ao nome do arquivo antes de executá-lo
  • No Windows, apenas executáveis com menos de 4GB podem ser executados

Documentação e licença

1 comentários

 
GN⁺ 2023-11-30
Opiniões no Hacker News
  • Parece melhor testar com um modelo de texto+imagem, como o LLaVA. O procedimento abaixo é para macOS, mas deve funcionar de forma parecida em outras plataformas

    1. Baixe o llamafile-server-0.1-llava-v1.5-7b-q4, de 4,26 GB, em https://huggingface.co/jartine/llava-v1.5-7B-GGUF/blob/main/...
      wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/…
    2. No terminal, torne-o executável com chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4
    3. Execute ./llamafile-server-0.1-llava-v1.5-7b-q4 e um servidor web subirá na porta 8080
    4. Acesse http://127.0.0.1:8080/, faça upload de uma imagem e converse com o modelo pelo navegador
      Há screenshots em https://simonwillison.net/2023/Nov/29/llamafile/
    • É quase tão bom quanto o chatgpt-web [0], e é impressionante que rode offline e de graça
      Se você ainda não usou o chatgpt-web, recomendo. Com o novo modelo GPT-4, dá para conversar por muito menos do que no ChatGPT Plus, e você ainda pode trocar para o modelo GPT-4 antigo, menos restrito, que realmente ainda programa bem
      [0]: https://github.com/Niek/chatgpt-web
    • Para digitar menos, coloquei isso em uma configuração Docker: https://github.com/tluyben/llamafile-docker
    • Rodei o llamafile-server-0.1-llava-v1.5-7b-q4 nos testes de que precisava para um projeto, e ele passou em tudo, inclusive nas consultas de visão. Estrategicamente, acho que isso vai mudar as coisas para bastante gente
    • Fiz uma pergunta simples e saiu esta resposta
      User: What is the third planet from the sun?
      Llama: The third planet from the sun is called Mars.
  • O trabalho de portabilidade da Justine Tunney / jart é incrível e muito legal, mas ainda não sei bem qual é o caso de uso desta ferramenta
    Estou criando um pequeno app para macOS, https://www.freechat.run, que roda llama.cpp com um frontend em SwiftUI. Na primeira versão, fiquei obcecado por permitir um único download, chat imediato e zero conexões de rede. Empacotar o modelo no app tornou tudo fácil: baixar, abrir e usar. Mas, quando tentei distribuir uma atualização de UI para usuários beta do TestFlight, acabei fazendo todo mundo baixar mais 3 GB, e os 3 reclamaram
    Depois separei o download do modelo padrão da UI, para que atualizações do app distribuam só cerca de 5 MB. Acho que esta ferramenta vai encontrar o mesmo problema bem rápido no momento em que alguém quiser receber atualizações recentes do llama.cpp. Pode haver casos em que isso não importe, mas fico curioso para saber onde ela será útil
    https://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp

    • Não entendo essa obsessão de transformar tudo em 0 clique. É muito irritante quando você não quer instalar tudo no disco principal
      Os modelos já estão baixados, organizados e prontos para uso, mas os apps nem perguntam e tratam o usuário como idiota, baixando tudo de novo
      O Makeayo agora pergunta onde ficam os modelos, então está um pouco melhor; já ter que usar links simbólicos no comfy/automatic é desagradável. Bastaria perguntar a localização dos arquivos na primeira execução e permitir mudar isso nas configurações; não é difícil
    • O binário em si pode ser baixado separadamente: https://github.com/Mozilla-Ocho/llamafile/releases
    • Isso parece mais um problema do MAS/TestFlight não oferecer atualização delta
    • Como é apenas um arquivo zip, em plataformas que não sejam Windows parece que daria para atualizá-lo no próprio lugar mesmo durante a execução. Bastaria substituir o único arquivo alterado e, se estiver em modo servidor, talvez até fazer hot reload do executável sem downtime para o usuário
    • A cosmopolitan libc é realmente quase um truque muito legal, digno de elogios, e deve ter casos reais de uso, mas não parece prática para a maioria dos objetivos
      Se existisse um formato tipo ELF extremamente gordo, que suportasse quantas arquiteturas e sistemas operacionais quiséssemos, será que o usaríamos? Provavelmente não
      Dito isso, depois de usar zig cc por um tempo, comecei a achar que a abordagem de compilar uma vez para criar um binário universal enorme também pode fazer sentido. Despacho por microarquitetura também é um bom ponto; conforme escrevo, parece que estou me convencendo da alternativa
  • Parece que ele não consegue enxergar direito nenhuma imagem enviada. Mesmo assim, esta resposta foi engraçada
    User: Describe the image in the most detailed way possible
    Llama: The image is a close-up of an empty, dark room with no visible objects or people...
    User: is it just a black square?
    Llama: Yes, it is just a black square.

    • Enviei um PNG 50x50 totalmente branco, e ele respondeu, em linhas gerais, que havia um fundo branco com uma pequena área cinza e um ponto laranja à direita
      Quando perguntei se era um quadrado branco, disse que não era um simples quadrado branco e que parecia uma pintura abstrata com cinza e marrom-amarelado também
  • O post relacionado de Simon Willison é bom: https://simonwillison.net/2023/Nov/29/llamafile/

  • É interessante a forma como esse modelo alucina. Mostrei “In the Mountains”, de Albert Bierstadt (https://www.wikiart.org/en/albert-bierstadt/in-the-mountains...), e ele insistiu que havia vacas espalhadas pela cena
    Mesmo dizendo que não havia vacas e perguntando se ele não tinha confundido as rochas com vacas, ele respondeu que não; quando eu disse de novo “não há vacas”, só então descreveu a cena como uma paisagem tranquila com montanhas, lago, árvores, pássaros e um barco

  • Materiais relacionados: https://hacks.mozilla.org/2023/11/introducing-llamafile/ e https://twitter.com/justinetunney/status/1729940628098969799
    A discussão veio de https://news.ycombinator.com/item?id=38463456 e https://news.ycombinator.com/item?id=38464759, mas os comentários foram mesclados aqui

  • Tenho testado vários modelos em formato GGUF do llama.cpp dessa forma
    git clone https://github.com/ggerganov/llama.cpp
    cd llama.cpp
    make
    # M2 Max - 16 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b-16k.Q8_0.gguf -c 16000 -ngl 32
    # M1 - 8 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b.Q4_K_M.gguf -c 2000 -ngl 32

  • Llaminate também parece ser um bom nome para algo assim. Também pode ser usado como verbo genérico para embrulhar um modelo compatível com llama em um pacote pronto para uso

    • Llamanate
  • É legal que haja suporte a CUDA mesmo tendo sido compilado com Cosmopolitan. Parece que, neste mês, o Cosmopolitan adicionou algum suporte a links dinâmicos para viabilizar GPU: https://github.com/jart/cosmopolitan/commit/5e8c928f1a37349a...
    Infelizmente, é preciso instalar o CUDA Developer Toolkit. É perfeitamente possível distribuir apps CUDA que rodem sem dependências extras desde que haja apenas o driver da Nvidia; se resolverem essa parte também, deve ser um divisor de águas

  • Gosto da frase: “coloque o arquivo em um pendrive e guarde-o na gaveta; ele vira um seguro contra um apocalipse futuro. Você nunca mais ficará sem um modelo de linguagem