2 points par GN⁺ 2023-11-30 | 1 commentaires | Partager sur WhatsApp
  • llamafile est un projet qui réduit le déploiement et l’exécution des LLM à un exécutable unique, permettant une exécution locale sans installation sur la plupart des systèmes d’exploitation et architectures CPU
  • L’implémentation combine llama.cpp et Cosmopolitan Libc pour replier la complexité d’exécution des LLM dans un unique exécutable « llamafile », et le projet a été remanié par Mozilla.ai
  • whisperfile, inclus avec l’ensemble, est un outil de transcription vocale en fichier unique basé sur le même empaquetage Cosmopolitan que whisper.cpp, avec prise en charge de la transcription et de la traduction de fichiers audio
  • Depuis la v0.10.0, le projet utilise un nouveau système de build pour suivre plus facilement les versions récentes de llama.cpp, ce qui permet de prendre en charge des modèles et fonctionnalités plus récents, mais certaines fonctions familières ont pu disparaître
  • Sous Windows, il faut ajouter l’extension .exe avant l’exécution et, les exécutables de plus de 4 Go ne pouvant pas être lancés sous Windows, il faut utiliser un binaire llamafile séparé avec des poids/modèles GGUF externes

Exécuter un LLM dans un fichier unique

  • llamafile est un projet qui permet de distribuer et d’exécuter un LLM dans un seul fichier
  • Son objectif est d’améliorer l’accessibilité aux LLM ouverts pour les développeurs comme pour les utilisateurs finaux
  • Il combine llama.cpp et Cosmopolitan Libc dans un même framework
  • Le résultat est un exécutable en fichier unique appelé « llamafile », lancé en local sans installation
  • La prise en charge couvre la plupart des systèmes d’exploitation et architectures CPU

Remaniement par Mozilla.ai et projets associés

whisperfile inclus

  • whisperfile est un outil de transcription vocale en fichier unique inclus dans llamafile
  • Il repose sur le même empaquetage Cosmopolitan que whisper.cpp
  • Il prend en charge la transcription et la traduction des fichiers audio
  • Il peut être utilisé sans installation sur la même plage de plateformes que llamafile
  • La documentation est disponible ici : Whisperfile

Changement du système de build dans la v0.10.x

  • À partir de la 0.10.0, llamafile utilise un nouveau système de build
  • L’objectif de ce nouveau système est de faciliter l’alignement du code sur les versions récentes de llama.cpp
  • Ce changement permet de prendre en charge des modèles et fonctionnalités plus récents
  • En contrepartie, certaines fonctions auxquelles les utilisateurs étaient habitués ont pu disparaître
  • Une explication de haut niveau du changement est disponible dans README_0.10.0.md
  • Les utilisateurs qui préfèrent la « classic experience » peuvent accéder aux versions précédentes sur la page releases
  • Les llamafile précompilés indiquent avec quelle version serveur ils sont fournis

Démarrage rapide et limitations sous Windows

  • Le modèle d’exemple est Qwen3.5 0.8B, et le README présente un flux de téléchargement et d’exécution en quelques minutes
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
  • Ce modèle a été choisi parce que c’est le plus petit parmi ceux que le projet a construits en llamafile, donc celui qui a le plus de chances de fonctionner immédiatement
  • Avec un matériel plus puissant ou un GPU, il est possible de choisir des modèles plus grands et plus expressifs, capables de fournir des réponses plus précises
  • Les utilisateurs de Windows doivent ajouter l’extension .exe au nom du fichier avant l’exécution
  • Sous Windows, seuls les exécutables de moins de 4 Go peuvent être lancés

Documentation et licence

1 commentaires

 
GN⁺ 2023-11-30
Avis de Hacker News
  • Le mieux semble être de tester avec un modèle texte+image comme LLaVA. La procédure ci-dessous est pour macOS, mais cela devrait fonctionner de façon similaire sur d’autres plateformes

    1. Télécharger le fichier de 4,26 Go llamafile-server-0.1-llava-v1.5-7b-q4 depuis https://huggingface.co/jartine/llava-v1.5-7B-GGUF/blob/main/...
      wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/…
    2. Dans le terminal, le rendre exécutable avec chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4
    3. Lancer ./llamafile-server-0.1-llava-v1.5-7b-q4 : un serveur web démarre sur le port 8080
    4. Aller sur http://127.0.0.1:8080/, téléverser une image et discuter avec le modèle dans le navigateur
      La capture d’écran est disponible sur https://simonwillison.net/2023/Nov/29/llamafile/
    • C’est presque aussi bien que chatgpt-web [0], et le fait que ça tourne gratuitement hors ligne est étonnant
      Si vous n’avez pas essayé chatgpt-web, je le recommande. Avec le nouveau modèle GPT-4, les conversations coûtent bien moins cher que ChatGPT Plus, et on peut encore basculer vers l’ancien modèle GPT-4, moins restreint, qui reste vraiment bon pour coder
      [0]: https://github.com/Niek/chatgpt-web
    • Pour réduire encore la saisie, je l’ai mis dans une configuration Docker : https://github.com/tluyben/llamafile-docker
    • J’ai fait tourner llamafile-server-0.1-llava-v1.5-7b-q4 sur les tests nécessaires à mon projet, et il les a tous passés, y compris les requêtes de vision. Stratégiquement, je pense que cela va changer pas mal de choses pour beaucoup de monde
    • Je lui ai posé une question simple et j’ai obtenu cette réponse
      User: What is the third planet from the sun?
      Llama: The third planet from the sun is called Mars.
  • Le travail de portabilité de Justine Tunney / jart est impressionnant et vraiment brillant, mais je ne vois pas encore très bien le cas d’usage de cet outil
    Je développe une petite app macOS https://www.freechat.run qui fait tourner llama.cpp avec une interface SwiftUI. Dans la première version, j’étais obsédé par l’idée d’avoir un téléchargement unique, puis une utilisation immédiate du chat et zéro connexion réseau. En intégrant le modèle à l’app, c’était simple : télécharger, ouvrir, utiliser. Mais quand j’ai voulu distribuer une mise à jour de l’UI aux bêta-testeurs TestFlight, je leur ai fait télécharger à nouveau 3 Go, et les trois s’en sont plaints
    Depuis, j’ai séparé le téléchargement du modèle par défaut et l’UI, de sorte que les mises à jour de l’app ne font plus qu’environ 5 Mo. J’ai l’impression que cet outil rencontrera assez vite le même problème dès qu’on voudra récupérer les dernières mises à jour de llama.cpp. Il y a sans doute des cas où ce n’est pas gênant, mais je me demande où ce sera utile
    https://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp

    • Je ne comprends pas cette obsession de vouloir tout rendre en zéro clic. C’est vraiment agaçant quand on ne veut pas tout installer sur son disque principal
      Les modèles sont déjà téléchargés, rangés et prêts à l’emploi, mais les apps ne demandent même pas où ils sont et traitent l’utilisateur comme un idiot en les retéléchargeant
      Makeayo s’en sort un peu mieux maintenant parce qu’il demande l’emplacement des modèles, et devoir utiliser des liens symboliques dans comfy/automatic est déplaisant. Il suffirait de demander l’emplacement des fichiers au premier lancement et de permettre de le modifier dans les réglages ; ce n’est pas difficile
    • Le binaire lui-même peut être téléchargé séparément : https://github.com/Mozilla-Ocho/llamafile/releases
    • Cela ressemble plutôt à un problème du côté de MAS/TestFlight, qui ne fournit pas de mises à jour delta
    • Comme ce n’est qu’un fichier zip, sur les plateformes non Windows, on devrait pouvoir le mettre à jour sur place même pendant l’exécution. Il suffit de remplacer le fichier modifié, et en mode serveur on pourrait même sans doute hot reloader l’exécutable sans interruption pour l’utilisateur
    • cosmopolitan libc est vraiment un tour de force brillant, digne d’éloges, et il a sûrement des cas d’usage réels, mais pour la plupart des besoins, cela ne me paraît pas très pratique
      Si nous avions eu un format façon ELF très volumineux capable de prendre en charge autant d’architectures et de systèmes d’exploitation qu’on le souhaite, l’aurions-nous utilisé ? Probablement pas
      Cela dit, après avoir utilisé zig cc pendant quelque temps, je me dis qu’une approche consistant à compiler une fois pour produire un très gros binaire universel peut aussi être raisonnable. Le dispatch par microarchitecture est également un bon point ; à force d’y réfléchir, j’ai l’impression d’être en train de me convaincre moi-même de l’alternative
  • Quelle que soit l’image envoyée, il ne semble pas la voir correctement. Mais cette réponse m’a quand même fait rire
    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.

    • J’ai envoyé un PNG 50x50 entièrement blanc, et il a répondu en gros qu’il y avait un fond blanc, une petite zone grise et un point orange à droite
      Quand je lui ai demandé si c’était un carré blanc, il a dit que ce n’était pas un simple carré blanc et que cela ressemblait à une peinture abstraite avec aussi du gris et du brun jaunâtre
  • Le billet connexe de Simon Willison est excellent : https://simonwillison.net/2023/Nov/29/llamafile/

  • La manière dont ce modèle hallucine est intéressante. Quand on lui a montré « In the Mountains » d’Albert Bierstadt (https://www.wikiart.org/en/albert-bierstadt/in-the-mountains...), il a insisté en disant qu’il y avait des vaches dispersées un peu partout dans la scène
    Même quand on lui a dit qu’il n’y avait pas de vaches et qu’il avait peut-être pris des rochers pour des vaches, il a répondu que non ; puis, quand on lui a répété « il n’y a pas de vaches », il a enfin décrit une scène paisible avec des montagnes, un lac, des arbres, des oiseaux et un bateau

  • Ressources associées : https://hacks.mozilla.org/2023/11/introducing-llamafile/ et https://twitter.com/justinetunney/status/1729940628098969799
    Le fil vient de https://news.ycombinator.com/item?id=38463456 et https://news.ycombinator.com/item?id=38464759, mais les commentaires ont été fusionnés ici

  • Je fais tourner plusieurs modèles au format GGUF de llama.cpp de cette façon
    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 pourrait aussi être un bon nom pour ce genre de chose. On pourrait même l’employer comme verbe générique pour emballer un modèle compatible llama dans un bloc directement utilisable

    • Llamanate
  • C’est impressionnant qu’il y ait une prise en charge de CUDA alors que c’est compilé avec Cosmopolitan. Il semble que Cosmopolitan ait ajouté ce mois-ci une partie du support de l’édition de liens dynamique pour permettre l’usage du GPU : https://github.com/jart/cosmopolitan/commit/5e8c928f1a37349a...
    Dommage qu’il faille installer le toolkit de développement CUDA. Il est tout à fait possible de distribuer des applis CUDA qui s’exécutent avec seulement le pilote Nvidia, sans dépendances supplémentaires ; si cette partie était réglée aussi, ce serait un vrai game changer

  • J’aime bien la formule : « mettez le fichier sur une clé USB et rangez-la dans un tiroir, ce sera une assurance pour l’apocalypse future. Vous ne serez plus jamais privé de modèles de langage »