PowerInfer: comment booster son inférence

PowerInfer est un moteur d’inférence LLM qui a pour objective d’optimiser au maximum l’inférence de modèle sur des machines à usage personnel.

Cet article est un aperçu rapide, si vous voulez en savoir plus, voici le github qui explique comment utiliser le moteur: https://github.com/SJTU-IPADS/PowerInfer

Ce modèle annonce des performances extraordinaires, de l’ordre de dix fois plus rapide que le moteur llama.

Mais comment il fait ça?

Un design « Locality-centric »

Dans un but d’optimisation, l’équipe qui travaille sur le moteur a décidé d’utiliser un design basé sur la notion de localité.
Ce design permet de ne pas activer certains neurones et liaisons entre neurones basé sur leur utilisation, en employant deux concepts : la « sparse activation » qui a pour but de réduire le nombre de neurones activés et les « hot/cold » neurones dans le but de prédire les neurones actifs.

Voici un article intéressant sur la « sparse activation »: https://medium.com/geekculture/sparse-weight-activation-training-reduce-memory-and-training-time-in-machine-learning-8c0fad7d5def

L’implémentation de ces concepts permets d’augmenter grandement les performances du moteur d’inférence avec une dégradation des performances qui reste très limitée.

Inférence hybride CPU/GPU

Si vous compilez powerinfer avec l’option qui va bien le moteur va répartir la charge entre le CPU et le GPU pour obtenir les meilleures performances possibles.

De même, avec le combo RAM / VRAM, le moteur va utiliser les deux mémoires pour pouvoir charger des modèles gros demandeur de mémoire. Bien évidemment, plus de VRAM est disponible, plus l’inférence sera performante. Une option est disponible pour limiter la consommation de VRAM si besoin.

Modèles compatibles

Ce moteur d’inférence est actuellement compatible avec deux modèles:

  • Falcon-40B
  • Llama2 (7B, 13B et 70B)

L’équipe a annoncé supporter le modèle Mistral-7B dans le futur proche.

Système compatibles annoncés

PowerInfer est testé et supporté sur les configurations suivantes:

  • CPU x86-64 (avec instructions AVX2) sur Linux et Windows
    • J’ai testé sur des processeurs Intel Xeon e5-2650v2 qui n’ont pas les instructions AVX2, les modèles semblent inférer correctement, aucune erreur n’est levée.
  • CPU x86-64 et GPU NVIDIA sur Linux et Windows
  • CPU Apple M sur macOS
    • Fonctionnel, mais non optimisé actuellement avec l’API Metal
    • Optimisation de l’inférence avec Metal est prévu dans le futur

Le mot de la fin

A mon sens ce moteur d’inférence parait intéressant, selon les objectives pour lesquels il a était conçu : pouvoir inférer facilement et efficacement sur une machine locale avec du matériel accessible.

Ce n’est que le début du projet, les informations sur l’avancée du projet sont disponibles à ce lien : https://github.com/orgs/SJTU-IPADS/projects/2/views/2

Avec le développement de fonctionnalités, ce genre de moteur d’inférence pourrait permettre de démocratiser l’inférence en local sur des machines personnelles.

Pour aller plus loin, si vous aimez les documents de recherches, voici le whitepaper de powerinfer:
https://arxiv.org/abs/2312.12456

Partager l'article:

Autres articles