llamafile, un projet pour des LLM vraiment « portables »

llamafile

Mozilla soutient le projet llamafile, qui propose un format de type exécutable portable pour distribuer les LLM.

Faire la synthèse entre les formats binaires d’UNIX, Windows et macOS ? C’est l’objectif du projet APE (Actually Portable Executable), qu’on doit à Justine Tunney.

Sur cette base, l’intéressée a donné corps à une autre initiative : Cosmopolitan. Son but : faire de C un langage vraiment « portable ». Le principe : reconfigurer GCC et Clang pour produire un format POSIX utilisable sur de multiples OS (Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD) et architectures CPU (AMD64/ARM64)*.

Appliqué au framework llama.cpp, Cosmopolitan permet de distribuer des LLM (poids + code d’inférence) en un seul fichier, exécutable sans installation. C’est l’objet du projet llamafile. Une première version vient de faire son entrée, avec le soutien de Mozilla. Elle est sous licence Apache 2.0 – l’adaptation de llama.cpp étant quant à elle sous licence MIT.

Mistral, LLaVA et WizardCoder mis au régime llamafile

Trois exemples de « llamafiles » sont fournis, pour Mistral 7B Instruct, LLaVA 1.5 et WizardCoder-Python-13B. Deux options : une version CLI fonctionnant dans le terminal et une version serveur à laquelle on accède dans un navigateur (localhost:8080).

Les llamafiles peuvent embarquer les poids (support de PKZIP ajouté à la bibliothèque GGML). Ces derniers sont alors mappés directement en mémoire (le script extrait un loader).
On peut aussi utiliser des poids externes. Cela permet notamment de passer outre la limite de taille d’exécutable sur Windows (4 Go).

En matière de sécurité, llamafile apporte une sandbox à llama.cpp avec seccomp-pledge. C’est pour le moment pris en charge sur les environnements Linux et OpenBSD sans GPU.
Le serveur HTTP ne peut quant à lui pas accéder au système de fichiers. Idem pour la commande CLI principale, qui ne peut par ailleurs pas accéder au réseau.

Pour permettre une telle portabilité, Cosmopolitan utilise la liaison statique. Un défi pour la prise en charge des GPU. Aussi, llamafile s’appuie sur le compilateur du système hôte (Xcode pour Apple Silicon, nvcc pour les autres plates-formes).

* CPU compatibles SSE3 (Intel Core, AMD Bullzdozer) et ARMv8a+

Illustration © Jamie – Adobe Stock