2 puntos por GN⁺ 2023-11-30 | 1 comentarios | Compartir por WhatsApp
  • 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

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

1 comentarios

 
GN⁺ 2023-11-30
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

    1. Descargar el archivo de 4.26 GB llamafile-server-0.1-llava-v1.5-7b-q4 desde https://huggingface.co/jartine/llava-v1.5-7B-GGUF/blob/main/...
      wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/…
    2. En la terminal, hacerlo ejecutable con chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4
    3. Ejecutar ./llamafile-server-0.1-llava-v1.5-7b-q4 para levantar un servidor web en el puerto 8080
    4. Ir a http://127.0.0.1:8080/ para subir una imagen y conversar con el modelo desde el navegador
      Hay capturas de pantalla en https://simonwillison.net/2023/Nov/29/llamafile/
    • Sorprende que sea casi tan bueno como chatgpt-web [0] y que además funcione gratis y sin conexión
      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
    • Para escribir menos, lo puse dentro de una configuración de Docker: https://github.com/tluyben/llamafile-docker
    • Probé llamafile-server-0.1-llava-v1.5-7b-q4 con 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 gente
    • Le pregunté algo simple y respondió esto
      User: 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.cpp con 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 quejaron
    Despué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 útil
    https://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp

    • No entiendo esa obsesión por hacer que todo sea de 0 clics. Es realmente molesto cuando no quieres instalarlo todo en el disco principal
      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
    • El binario en sí puede descargarse por separado: https://github.com/Mozilla-Ocho/llamafile/releases
    • Eso parece más bien un problema de que MAS/TestFlight no ofrece actualizaciones delta
    • Como básicamente es solo un archivo zip, en plataformas que no sean Windows probablemente se podría actualizar en su lugar incluso mientras está en ejecución. Solo habría que reemplazar el archivo que cambió, y en modo servidor quizá hasta se podría recargar en caliente el ejecutable sin tiempo de inactividad para el usuario
    • cosmopolitan libc se 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áctico
      Si 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 cc por 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 alternativa
  • Parece 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 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.

    • Subí un PNG blanco de 50x50 y respondió que, en general, había un pequeño área gris sobre un fondo blanco y un punto naranja a la derecha
      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.cpp
    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 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

    • Llamanate
  • 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