30 points par xguru 2023-11-14 | 5 commentaires | Partager sur WhatsApp
  • La pile Rust+WASM peut constituer une alternative puissante à Python pour l’inférence IA
    • Par rapport à Python, les applications Rust+Wasm ont une taille 100 fois plus petite, sont 100 fois plus rapides et peuvent s’exécuter partout en toute sécurité avec une accélération matérielle complète, sans modifier le code binaire
    • Rust est le langage de l’AGI
  • Si l’on écrit un programme Rust simple qui exécute l’inférence de Llama2 à vitesse native
    • Une fois compilé en Wasm, le binaire ne fait que 2 Mo, tout en restant entièrement portable sur des accélérateurs matériels hétérogènes
    • Le runtime Wasm (WasmEdge) fournit également un environnement d’exécution sécurisé pour le cloud. Il s’intègre parfaitement aux outils de conteneurisation pour orchestrer et exécuter des applications portables sur une grande variété d’appareils

Pourquoi pas Python ?

  • Les LLM comme llama2 sont généralement entraînés en Python (par ex. : PyTorch, Tensorflow, JAX)
  • Mais utiliser Python pour les applications d’inférence, qui représentent environ 95 % du calcul en IA, est une grosse erreur
  • Les packages Python ont des dépendances complexes. Ils sont difficiles à configurer et à utiliser
  • Les dépendances Python sont énormes. Une image Docker pour Python ou PyTorch pèse généralement plusieurs Go, voire des dizaines de Go, ce qui pose particulièrement problème lorsqu’on exécute de l’inférence IA sur des serveurs ou appareils en edge
  • Python est un langage très lent. Il peut être jusqu’à 35 000 fois plus lent que des langages compilés comme C, C++ ou Rust
  • Comme Python est lent, la plupart des charges de travail réelles doivent être déléguées à des bibliothèques natives partagées sous le wrapper Python
    • Les applications d’inférence en Python sont donc excellentes pour les démonstrations, mais très difficiles à modifier en profondeur pour répondre à des besoins métier spécifiques
    • En raison de la forte dépendance aux bibliothèques natives et de la complexité de la gestion des dépendances, il est très difficile de porter des programmes d’IA Python sur plusieurs appareils tout en exploitant les capacités matérielles propres à chacun
  • Les packages Python couramment utilisés dans l’outillage LLM entrent souvent directement en conflit les uns avec les autres
  • Chris Lattner, connu pour LLVM, TensorFlow et le langage Swift, a donné cette semaine une excellente interview dans un podcast de startup, où il explique pourquoi Python est très bien pour l’entraînement des modèles, mais un mauvais choix pour les applications d’inférence

Les avantages de Rust+Wasm

  • La pile Rust+Wasm fournit une infrastructure de cloud computing unifiée, allant des appareils à l’edge cloud, jusqu’aux serveurs on-premise et au cloud public
  • C’est une alternative solide à la pile Python pour les applications d’inférence IA, et il n’est pas surprenant qu’Elon Musk ait qualifié Rust de langage de l’AGI
  • Ultra-léger : l’application d’inférence ne fait que 2 Mo, dépendances incluses. Cela représente moins de 1 % de la taille d’un conteneur PyTorch typique
  • Très rapide : offre des performances natives en C/Rust dans toutes les parties de l’application d’inférence, du prétraitement aux opérations sur tenseurs, jusqu’au post-traitement
  • Portable : la même application en bytecode Wasm peut s’exécuter sur toutes les principales plateformes de calcul prenant en charge l’accélération matérielle hétérogène
  • Facile à configurer, développer et déployer : fini les dépendances complexes. Il suffit d’utiliser les outils standard de son laptop pour construire un unique fichier Wasm et le déployer partout
  • Sûr et pensé pour le cloud : le runtime Wasm est conçu pour isoler du code utilisateur non fiable. Il peut être géré avec des outils de conteneurisation et déployé facilement sur des plateformes cloud-native

Démo d’inférence en Rust

  • Écrite en 40 lignes de code Rust, puis compilée en Wasm
  • Une fois le bytecode Wasm obtenu, il peut être déployé sur n’importe quel appareil prenant en charge le runtime WasmEdge
  • Le plugin WasmEdge GGML, basé sur llama.cpp, exploite automatiquement l’accélération matérielle de l’appareil pour exécuter le modèle llama2

Prochaines étapes

  • L’outillage WasmEdge GGML est déjà disponible et utilisé en pratique par des clients cloud-native, mais il en est encore à ses débuts
  • Si vous souhaitez contribuer à l’open source et aider à façonner l’avenir de l’infrastructure d’inférence LLM, voici quelques pistes de contribution possibles
    • Ajouter des plugins GGML pour davantage de matériels et de plateformes OS : TPU sous Linux et Windows, NPU ARM et autres puces IA spécialisées
    • Prendre en charge davantage de configurations de llama.cpp : certaines options peuvent déjà être transmises depuis Wasm au plugin GGML, mais l’objectif est de supporter toutes celles offertes par GGML
    • Prendre en charge l’API WASI NN dans d’autres langages compatibles Wasm : notamment Go, Zig, Kotlin, JavaScript, C et C++

5 commentaires

 
gcback 2023-11-14

L’approche la plus réaliste qu’Apple, actuellement en retard dans l’IA, pourrait adopter semble être la suivante :

un moteur d’inférence logicielle optimisé comme celui de l’article principal serait accéléré par le NPU des puces A de l’iPhone, et le fichier du modèle foundation serait embarqué tel quel dans l’iPhone.
Le consensus récent dans le monde académique et industriel est que, pour les performances en IA, les données et le fine-tuning comptent plus que la taille, et beaucoup estiment que les performances après fine-tuning de Llama2 sont assez bonnes ; je pense donc qu’il serait tout à fait possible de continuer à déployer vers les edge devices des modèles bien entraînés. Dans cette optique, une stratégie consistant à tout embarquer dans l’iPhone paraît assez réaliste.

 
ragingwind 2023-11-14

WASM a autant le vent en poupe ? Mais ne faudrait-il pas plutôt comparer Python à Mojo ?

 
freedomzero 2023-11-14

Je suis d’accord. Il faut considérer Mojo comme étant encore au stade expérimental.

 
cosine20 2023-11-14

Mojo n’a pas encore été officiellement lancé, mais Rust est déjà un langage assez mature et remplace déjà plusieurs éléments dans des contextes de production.

 
xguru 2023-11-14

GN⁺ : Inférence Llama2 rapide et portable sur des environnements edge hétérogènes
Consultez également le résumé de GN⁺ et les commentaires de Hacker News.