2 points par GN⁺ 2023-11-14 | 1 commentaires | Partager sur WhatsApp

Pile Rust+Wasm : une alternative puissante à Python

  • Les applications Rust+Wasm ont une taille 100 fois plus petite que celles en Python, sont 100 fois plus rapides et peuvent s’exécuter en toute sécurité partout, sans aucun changement de l’accélération matérielle.
  • Rust est le langage de l’AGI (intelligence artificielle générale), et permet de créer un programme Rust simple capable d’exécuter l’inférence du modèle llama2 à sa vitesse d’origine.
  • L’application binaire compilée en Wasm (2 Mo) est entièrement portable sur des appareils dotés de divers accélérateurs matériels.
  • Le runtime Wasm (WasmEdge) fournit un environnement d’exécution sûr et sécurisé dans le cloud.

Installation et exécution du programme Rust

  • Étape 1. Installer WasmEdge et le plugin GGML : sur un appareil Linux ou Mac, utiliser les commandes ci-dessous pour l’installation.
  • Étape 2. Télécharger l’application Wasm précompilée et le modèle : télécharger le modèle llama2 au format GGUF et, dans l’exemple, une version du modèle llama2 7B chat-tuned quantifiée en poids sur 5 bits.
  • Étape 3. Exécuter : lancer l’application d’inférence wasm avec WasmEdge, lui passer le modèle GGUF, puis saisir une question pour dialoguer avec le modèle.

Configuration du comportement du modèle

  • Il est possible de configurer la manière d’interagir avec le modèle à l’aide d’options en ligne de commande.
  • Par exemple, on peut spécifier une longueur de contexte donnée, définir le nombre maximal de tokens à prédire dans chaque réponse, afficher des statistiques et diffuser la réponse du modèle vers stdout.
  • Le programme génère environ 25 tokens par seconde sur un MacBook M2 d’entrée de gamme.

Agents et applications LLM

  • Un serveur API compatible OpenAI est créé à l’aide de Rust et WasmEdge.
  • Cela permet de créer des agents et des applications LLM avec des outils de développement compatibles OpenAI.

Les avantages de Rust+Wasm par rapport à Python

  • La pile Rust+Wasm constitue une alternative puissante à la pile Python pour les applications d’inférence IA et fournit une infrastructure de cloud computing.
  • Ultra-léger : l’application d’inférence ne pèse que 2 Mo, dépendances comprises.
  • Très rapide : elle offre des performances natives C/Rust dans toutes les parties de l’application d’inférence.
  • Portabilité : la même application en bytecode Wasm peut s’exécuter sur toutes les principales plateformes informatiques prenant en charge des accélérations matérielles hétérogènes.
  • Installation, développement et déploiement faciles : sans dépendances complexes, il est possible de compiler un seul fichier Wasm avec des outils standards sur un ordinateur portable et de le déployer partout.
  • Sûr et prêt pour le cloud : le runtime Wasm est conçu pour isoler du code utilisateur non fiable, peut être géré par des outils de conteneurisation et se déploie facilement sur des plateformes cloud-native.

Programme d’inférence Rust

  • Le programme de démonstration d’inférence est écrit en Rust et compilé en Wasm.
  • Le code source Rust est très simple et tient en seulement 40 lignes de code.
  • Le programme Rust gère les entrées utilisateur, suit l’historique de la conversation, convertit le texte dans le template de chat de llama2 et exécute les tâches d’inférence via l’API WASI NN.

Exécution dans le cloud ou en edge

  • Une fois le fichier bytecode Wasm obtenu, il peut être déployé sur tout appareil prenant en charge le runtime WasmEdge.
  • WasmEdge s’installe avec le plugin GGML et exploite automatiquement diverses accélérations matérielles pour exécuter le modèle llama2.

Étapes suivantes

  • Les outils WasmEdge GGML sont déjà disponibles et utilisés par des clients cloud-native, mais ils en sont encore à un stade précoce.
  • Si vous souhaitez contribuer au projet open source et aider à façonner l’avenir de l’infrastructure d’inférence LLM, plusieurs tâches de bas niveau permettent de participer.

Autres modèles d’IA

  • WasmEdge et WASI NN permettent de construire, en alternative à Python, des applications d’inférence à la fois légères, rapides, portables et sûres.
  • Par exemple, le projet mediapipe-rs fournit une API Rust+Wasm pour les modèles Tensorflow mediapipe de Google.

L’avis de GN⁺

L’essentiel de cet article est de proposer, avec Rust et WebAssembly (Wasm), une alternative à Python pour l’inférence IA, offrant des avantages marqués en termes de taille, de vitesse, de portabilité et de sécurité. Cette pile technologique intègre une infrastructure de cloud computing afin d’améliorer les performances sur divers appareils et dans des environnements cloud, de résoudre les problèmes de dépendances complexes et de simplifier le développement comme le déploiement. Cette approche pourrait avoir un impact majeur, en particulier sur l’avenir de l’edge computing et de l’inférence IA, ce qui en fait un sujet particulièrement intéressant pour les passionnés de technologie.

1 commentaires

 
GN⁺ 2023-11-14
Avis Hacker News
  • Tout en affichant un soutien à Rust et à WASM, le code réel n’est en pratique qu’un script basique en ligne de commande écrit en Rust, et le traitement principal repose sur une seule ligne de code qui appelle le backend WASI-NN. Dans ce cas, celui-ci est fourni par le runtime WasmEdge, lui-même écrit en C++.
  • Pour les développeurs d’applications, ce projet offre le moyen le plus simple d’empaqueter un moteur d’inférence dans un fichier déployable. Les poids du modèle sont déjà portables et peuvent être téléchargés selon les besoins.
  • Un doute est exprimé sur le fait que le projet ne fasse que wrapper llama.cpp, avec un retour d’expérience partagé sur le développement d’un framework de ML en Rust et WebGPU.
  • Il est souligné qu’un projet dépendant de wasm-nn n’est en réalité pas portable et peut même être impossible à exécuter en l’absence de support pour un matériel donné. Une situation qui va à l’encontre de l’objectif de WASI.
  • Des doutes sont émis quant à l’exactitude de l’affirmation selon laquelle le build Mac OS du plugin GGML exécute l’inférence via l’API Metal sur le GPU, et non sur le moteur neuronal des M1/M2/M3.
  • Il est estimé que des méthodes seront développées pour exécuter l’architecture des transformeurs de manière plus efficace et plus rapide en edge computing, mais il existe une inquiétude quant au fait que les besoins en VRAM deviennent un goulot d’étranglement majeur, limitant le chargement des grands modèles.
  • Une question est posée sur la possibilité pour le projet de fonctionner hors ligne sur iPhone, ce qui pourrait être utile dans des situations sans accès à Internet.
  • Une critique vise la façon dont le projet est présenté comme innovant en taille ou en vitesse parce qu’il utilise un wrapper écrit dans un autre langage. En réalité, il s’agit d’un projet basé sur llama.cpp, et la vitesse d’inférence comme la taille du binaire ne sont pas limitées par le choix du wrapper.
  • Une question est posée sur la manière de réduire la taille sans perdre en précision lorsque les poids entraînés du modèle représentent une part importante du volume total.
  • Le cœur du code source Rust est très simple : environ 40 lignes qui gèrent l’entrée utilisateur, suivent l’historique de la conversation, convertissent le texte dans le template de chat de llama2 et exécutent l’inférence via l’API WASI NN.