- 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
- O llamafile é um projeto do Mozilla Builders e atualmente está sendo reformulado pela Mozilla.ai
- A apresentação do projeto está ligada ao announcement blog post
- A equipe está recebendo opiniões sobre o que os usuários consideram valioso e o que tornaria o projeto mais útil
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
- A documentação completa está em docs.mozilla.ai/llamafile
- Principais itens da documentação:
- O projeto llamafile é licenciado sob a Apache 2.0
- As modificações em llama.cpp e whisper.cpp seguem a mesma licença MIT dos projetos originais, uma escolha feita para manter aberta a possibilidade de upstream no futuro
1 comentários
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
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/…chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4./llamafile-server-0.1-llava-v1.5-7b-q4e um servidor web subirá na porta 8080Há screenshots em https://simonwillison.net/2023/Nov/29/llamafile/
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
llamafile-server-0.1-llava-v1.5-7b-q4nos 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 genteUser: 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.cppcom 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 reclamaramDepois 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á útilhttps://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp
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
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 objetivosSe 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 ccpor 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 alternativaParece 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 possibleLlama: 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.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.cppdessa formagit clone https://github.com/ggerganov/llama.cppcd llama.cppmake# M2 Max - 16 GB RAMwget -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 RAMwget -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 32Llaminate 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
É 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”