- llamafile es un proyecto de Mozilla Builders que reduce el despliegue y la ejecución de LLM a un único archivo ejecutable, permitiendo correrlos localmente sin instalación en la mayoría de sistemas operativos y arquitecturas de CPU
- La implementación combina llama.cpp y Cosmopolitan Libc para condensar la complejidad de ejecutar LLM en un solo ejecutable llamado “llamafile”, y Mozilla.ai renovó el proyecto
- whisperfile, incluido junto con él, es una herramienta de voz a texto en un solo archivo basada en el mismo empaquetado Cosmopolitan que whisper.cpp, y admite transcripción y traducción de archivos de audio
- Desde v0.10.0, usa un nuevo sistema de compilación para alinearse más fácilmente con las versiones más recientes de llama.cpp, lo que permite soportar modelos y funciones más nuevos, aunque puede que falten algunas funciones conocidas de antes
- En Windows, es necesario agregar la extensión
.exe antes de ejecutarlo, y los ejecutables de más de 4 GB no pueden ejecutarse en Windows, por lo que se requiere usar un binario llamafile separado y pesos/modelos GGUF externos
Ejecutar un LLM en un solo archivo
- llamafile es un proyecto que permite distribuir y ejecutar un LLM en un solo archivo
- Su objetivo es mejorar la accesibilidad a los LLM abiertos tanto para desarrolladores como para usuarios finales
- Combina llama.cpp y Cosmopolitan Libc en un solo framework
- El resultado es un ejecutable de archivo único llamado “llamafile”, que se ejecuta localmente sin instalación
- Su compatibilidad cubre la mayoría de sistemas operativos y arquitecturas de CPU
Renovación por Mozilla.ai y proyectos relacionados
- llamafile es un proyecto de Mozilla Builders y actualmente fue renovado por Mozilla.ai
- La presentación del proyecto está enlazada en el announcement blog post
- Están recibiendo opiniones sobre qué valoran los usuarios y qué lo haría más útil
Incluye whisperfile
- whisperfile es una herramienta de voz a texto en un solo archivo incluida en llamafile
- Está basada en el mismo empaquetado Cosmopolitan que whisper.cpp
- Admite transcripción y traducción de archivos de audio
- Puede usarse sin instalación en el mismo rango de plataformas que llamafile
- La documentación está en Whisperfile
Cambios en el sistema de compilación de v0.10.x
- Desde 0.10.0, llamafile usa un nuevo sistema de compilación
- El objetivo del nuevo sistema es mantener el código alineado más fácilmente con las versiones más recientes de llama.cpp
- Este cambio permite soportar modelos y funciones más recientes
- Al mismo tiempo, puede que falten algunas funciones a las que los usuarios estaban acostumbrados
- Hay una explicación de alto nivel de los cambios en README_0.10.0.md
- Quienes prefieran la “classic experience” pueden acceder a versiones anteriores en la página de releases
- Los llamafile precompilados indican con qué versión del servidor fueron empaquetados
Inicio rápido y limitaciones en Windows
- El modelo de ejemplo es Qwen3.5 0.8B, y el README muestra el flujo para descargarlo y ejecutarlo en unos 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
- Este modelo se eligió porque es el más pequeño entre los modelos que el proyecto compiló como llamafile, por lo que es más probable que funcione de inmediato
- Si tienes hardware más potente o GPU, puedes elegir modelos más grandes y con mayor capacidad de expresión, que pueden ofrecer respuestas más precisas
- Los usuarios de Windows deben agregar la extensión
.exe al nombre del archivo antes de ejecutarlo
- En Windows, solo pueden ejecutarse archivos ejecutables de menos de 4 GB
Documentación y licencia
- La documentación completa está en docs.mozilla.ai/llamafile
- Principales secciones de la documentación:
- El proyecto llamafile está bajo licencia Apache 2.0
- Los cambios hechos sobre llama.cpp y whisper.cpp están bajo la misma licencia MIT que los proyectos originales, una decisión tomada para mantener abierta la posibilidad de integrarlos upstream en el futuro
1 comentarios
Comentarios de Hacker News
Parece que lo mejor es probarlo con un modelo de texto+imagen como LLaVA. El procedimiento es para macOS, pero da la impresión de que en otras plataformas funciona de forma similar
llamafile-server-0.1-llava-v1.5-7b-q4desde 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-q4para levantar un servidor web en el puerto 8080Hay capturas de pantalla en https://simonwillison.net/2023/Nov/29/llamafile/
Si no has usado chatgpt-web, lo recomiendo. Con los nuevos modelos GPT-4 puedes chatear mucho más barato que con ChatGPT Plus, y todavía puedes cambiar al antiguo modelo GPT-4 menos restringido que seguía siendo realmente bueno programando
[0]: https://github.com/Niek/chatgpt-web
llamafile-server-0.1-llava-v1.5-7b-q4con las pruebas que necesitaba para el proyecto, y pasó todo, incluso las consultas de visión. Estratégicamente, siento que esto puede cambiarle las cosas a bastante genteUser: What is the third planet from the sun?Llama: The third planet from the sun is called Mars.El trabajo de portabilidad de Justine Tunney / jart es impresionante y realmente genial, pero todavía no tengo claro el caso de uso de esta herramienta
Estoy creando una pequeña app para macOS que ejecuta
llama.cppcon un frontend en SwiftUI: https://www.freechat.run. En la primera versión estaba obsesionado con que fuera una sola descarga, abrir y empezar a chatear, con cero conexiones de red. Incluir el modelo dentro de la app lo hizo fácil, porque se descargaba, se abría y ya se podía usar, pero cuando quise distribuir actualizaciones de UI a los usuarios beta de TestFlight, terminé haciéndoles bajar otros 3 GB y los 3 se quejaronDespués separé la descarga del modelo base de la UI para que las actualizaciones de la app fueran de solo unos 5 MB. Siento que esta herramienta se va a topar bastante rápido con el mismo problema en cuanto uno quiera recibir las actualizaciones más recientes de
llama.cpp. Habrá casos en los que no importe, pero me da curiosidad dónde sería útilhttps://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp
Los modelos ya los tengo descargados y organizados, listos para usar, pero las apps ni siquiera preguntan y los vuelven a descargar, tratando al usuario como si fuera tonto
Makeayo ahora al menos pregunta dónde está el modelo, así que ya mejoró algo, pero tener que usar enlaces simbólicos en comfy/automatic es desagradable. Solo tendrían que pedir la ubicación del archivo en el primer inicio y permitir cambiarla en la configuración; no es algo difícil
cosmopolitan libcse parece mucho a una hazaña muy genial, merece elogios y seguramente tiene casos de uso reales, pero para la mayoría de los propósitos no parece prácticoSi existiera un formato como un ELF súper pesado que soportara tantas arquitecturas y sistemas operativos como quisiéramos, ¿lo usaríamos? Probablemente no
Dicho eso, después de usar
zig ccpor un tiempo, me da la impresión de que esto de compilar una vez y obtener un binario universal enorme sí podría ser razonable. El despacho por microarquitectura también es un buen detalle, así que mientras lo escribo siento que hasta me estoy convenciendo solo de la alternativaParece que no puede ver bien ninguna imagen que le subas. Aun así, esta respuesta dio risa
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.Cuando le pregunté si era un cuadrado blanco, dijo que no era un simple cuadrado blanco, sino que parecía más bien una abstracción con gris y marrón amarillento
El post relacionado de Simon Willison está bueno: https://simonwillison.net/2023/Nov/29/llamafile/
Es interesante la forma en que este modelo alucina. Le mostraron “In the Mountains” de Albert Bierstadt (https://www.wikiart.org/en/albert-bierstadt/in-the-mountains...) y seguía insistiendo en que había vacas dispersas por toda la escena
Aunque le dijeron que no había vacas y que quizá estaba confundiendo las rocas con vacas, respondió que no; solo cuando le dijeron otra vez “no hay vacas” entonces por fin la describió como una escena tranquila con montañas, lago, árboles, aves y un bote
Material relacionado: https://hacks.mozilla.org/2023/11/introducing-llamafile/ y https://twitter.com/justinetunney/status/1729940628098969799
Viene del flujo de https://news.ycombinator.com/item?id=38463456 y https://news.ycombinator.com/item?id=38464759, pero los comentarios se consolidaron aquí
Han estado probando así varios modelos en formato GGUF de
llama.cppgit 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 también podría ser un buen nombre para algo así. Incluso podría usarse como verbo genérico para envolver un modelo compatible con llama en un paquete listo para usar
Está genial que tenga soporte para CUDA aunque esté compilado con Cosmopolitan. Parece que este mes Cosmopolitan agregó algo de soporte para enlace dinámico para habilitar GPU: https://github.com/jart/cosmopolitan/commit/5e8c928f1a37349a...
Lástima que hace falta instalar el toolkit de desarrollo de CUDA. Ya sería totalmente posible distribuir apps CUDA que corran solo con el driver de Nvidia, sin dependencias adicionales; si también resuelven esa parte, podría ser un cambio de juego
Me gustó la frase: “Si metes el archivo en una memoria USB y la guardas en un cajón, es un seguro contra el apocalipsis del futuro. Nunca más volverás a vivir sin un modelo de lenguaje”