C'est quoi, AirLLM ?

AirLLM est une bibliothèque Python open source qui résout un problème en apparence impossible : exécuter un modèle de langage de 70 milliards de paramètres sur un GPU avec seulement 4 Go de mémoire vidéo (VRAM).

Normalement, un modèle 70B en précision FP16 demande environ 140 Go de VRAM — il faut au moins 2 GPU A100 (80 Go chacun) pour le charger. AirLLM utilise une technique d'inférence couche par couche (Layer-wise Inference) : il ne charge qu'une seule couche du modèle sur le GPU à la fois, effectue le calcul, décharge la couche, puis passe à la suivante. Résultat : la consommation de VRAM chute de 140 Go à moins de 4 Go.

En juillet 2026, AirLLM cumule plus de 23 000 étoiles sur GitHub et ses téléchargements PyPI sont en croissance constante. C'est l'un des outils d'inférence locale les plus populaires du moment.

Les avantages clés

Caractéristique Approche classique AirLLM
VRAM pour un modèle 70B ~140 Go (2× A100 80 Go) ~4 Go
671B (DeepSeek-V3) ~1,3 To (cluster multi-GPU) ~12 Go
Quantification / Distillation Obligatoire, perte de précision Inutile (optionnel)
Matériel requis GPU de niveau data center Carte graphique grand public
Complexité d'installation Élevée (CUDA, multi-GPU) pip install airllm, une seule ligne

Le principe technique : l'inférence couche par couche

Inférence classique :  [Couche 1] → [Couche 2] → ... → [Couche 80]   ← tout chargé en VRAM
                       ~140 Go de VRAM requis

AirLLM :               [Couche 1] ← chargée sur le GPU → calcul → sauvegardée en RAM CPU → libérée
                       [Couche 2] ← chargée sur le GPU → calcul → sauvegardée en RAM CPU → libérée
                       ...
                       [Couche 80] ← chargée sur le GPU → calcul → résultat final
                       ~4 Go de VRAM seulement (taille d'une couche)

L'idée est simple : l'inférence d'un grand modèle est séquentielle. La sortie de la couche N sert d'entrée à la couche N+1. AirLLM exploite ce fait en ne gardant qu'une seule couche en VRAM à la fois, en sauvegardant les résultats intermédiaires en mémoire CPU, puis en libérant la VRAM pour charger la couche suivante.

💡 Quel est le compromis ? La vitesse. Comme les données transitent en permanence entre le GPU et le CPU, l'inférence est plus lente qu'un chargement complet sur GPU. Mais pour les développeurs individuels, le plus important est que ça tourne, pas que ça aille vite.


Installation et préparation

Installation de base

BASH
# Créer un environnement virtuel (recommandé)
python -m venv airllm-env
source airllm-env/bin/activate

# Installer airllm
pip install airllm

# Si vous voulez profiter de l'accélération par quantification, installez bitsandbytes
pip install -U bitsandbytes

Configuration système requise

  • Inférence GPU : GPU NVIDIA, 4 Go+ de VRAM, support CUDA
  • Inférence CPU : tout CPU x86_64 (supporté depuis août 2024)
  • macOS : Apple Silicon (M1/M2/M3), le framework mlx doit être installé
  • Espace disque : le modèle est téléchargé au premier lancement (~130 Go pour un 70B), prévoyez assez d'espace
  • RAM : 16 Go+ recommandés (pour le cache des résultats intermédiaires)

Vérifier l'installation

PYTHON
from airllm import AutoModel
print("AirLLM est installé avec succès !")

Mise en route : opérationnel en 5 minutes

Votre premier Hello World

PYTHON
from airllm import AutoModel

MAX_LENGTH = 128

# Une seule ligne pour charger le modèle (téléchargement + découpage automatique)
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

# Préparer l'entrée
input_text = ["What is the capital of France?"]
input_tokens = model.tokenizer(
    input_text,
    return_tensors="pt",
    return_attention_mask=False,
    truncation=True,
    max_length=MAX_LENGTH,
    padding=False
)

# Inférence
generation_output = model.generate(
    input_tokens['input_ids'].cuda(),
    max_new_tokens=50,
    use_cache=True,
    return_dict_in_generate=True
)

# Décoder la sortie
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)

Exemple de sortie :

What is the capital of France? The capital of France is Paris.

C'est aussi simple que ça. Pas de configuration multi-GPU à gérer, pas de code d'optimisation mémoire à écrire, pas de quantification obligatoire — l'AutoModel d'AirLLM s'occupe de tout automatiquement.

Modèles pris en charge

Grâce à l'AutoModel, AirLLM détecte automatiquement le type de modèle et prend en charge la quasi-totalité des grands modèles open source :

Famille de modèles Exemples VRAM minimale
Qwen3 Qwen3-32B / Qwen3-235B ~3 Go
DeepSeek DeepSeek-V3 (671B) ~12 Go
Llama Llama 3.1 405B / Llama 3 70B ~8 Go / ~4 Go
Mistral Mixtral 8x7B ~4 Go
ChatGLM ChatGLM3-6B ~4 Go
Phi Phi-4 ~4 Go
Gemma Gemma 2B/7B ~4 Go
Baichuan Baichuan2-7B ~4 Go

Fonctionnalités avancées

1. Quantification 4 bits / 8 bits pour accélérer

AirLLM intègre une compression par quantification par blocs (block-wise quantization), qui peut multiplier la vitesse d'inférence par 3 avec une perte de précision négligeable.

PYTHON
from airllm import AutoModel

# Quantification 4 bits (la plus rapide, la plus économe en VRAM)
model = AutoModel.from_pretrained(
    "Qwen/Qwen3-32B",
    compression='4bit'  # ou '8bit'
)

Pourquoi la perte de précision est-elle si faible avec AirLLM ? Parce que les méthodes classiques doivent quantifier à la fois les poids et les activations pour accélérer le calcul. Or, chez AirLLM, le goulot d'étranglement est l'I/O disque (chargement des couches depuis le disque), donc seule la quantification des poids est nécessaire — ce qui est beaucoup plus simple à faire sans perdre en précision.

2. Préchargement (Prefetching)

Le prefetching permet de précharger la couche suivante en RAM CPU pendant que le GPU calcule la couche courante. Les calculs et les I/O se superposent, ce qui donne environ 10 % de gain de vitesse.

PYTHON
from airllm import AutoModel

# Le prefetching est activé par défaut (supporté par AirLLMLlama2)
model = AutoModel.from_pretrained(
    "meta-llama/Llama-2-70b-hf",
    hf_token="your_huggingface_token",  # token HuggingFace requis pour les modèles gated
)

3. Panorama des options de configuration

PYTHON
model = AutoModel.from_pretrained(
    "model_name_or_path",

    # Quantification : '4bit' / '8bit' / None
    compression='4bit',

    # Profilage : affiche le temps de chaque phase
    profiling_mode=True,

    # Chemin de sauvegarde des couches découpées (optionnel)
    layer_shards_saving_path='/data/airllm_cache/',

    # Token HuggingFace (requis pour les modèles restreints)
    hf_token="hf_xxxx",

    # Préchargement (activé par défaut)
    prefetching=True,

    # Supprimer le modèle original après découpage (économise de l'espace disque)
    delete_original=True,
)

4. Exemple de conversation multi-tours

PYTHON
from airllm import AutoModel

model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

def chat_with_model(prompt, history=None):
    """Conversation simple (tour par tour)"""
    if history:
        full_prompt = history + "\nUser: " + prompt + "\nAssistant: "
    else:
        full_prompt = f"User: {prompt}\nAssistant: "

    input_tokens = model.tokenizer(
        [full_prompt],
        return_tensors="pt",
        return_attention_mask=False,
        truncation=True,
        max_length=512,
        padding=False
    )

    generation_output = model.generate(
        input_tokens['input_ids'].cuda(),
        max_new_tokens=256,
        use_cache=True,
        return_dict_in_generate=True,
        temperature=0.7,
        top_p=0.9,
    )

    response = model.tokenizer.decode(generation_output.sequences[0])
    # Extraire la partie Assistant
    if "Assistant:" in response:
        response = response.split("Assistant:")[-1].strip()

    return response

# Tests
print(chat_with_model("Explique l'informatique quantique en trois phrases"))
print(chat_with_model("Quelle est la façon la plus élégante de trier une liste en Python ?"))

Scénarios pratiques

Scénario 1 : Q&A sur une base de connaissances privée locale

Combine un modèle d'embedding pour monter un système RAG (Retrieval-Augmented Generation) entièrement en local :

PYTHON
from airllm import AutoModel
# À utiliser avec LangChain
from langchain.llms import HuggingFacePipeline
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA

# Charger le modèle AirLLM comme backend LLM
model = AutoModel.from_pretrained("Qwen/Qwen3-32B", compression='4bit')

# Associer à une base vectorielle locale (par ex. FAISS)
# Pour du Q&A documentaire, de la recherche de code, etc., 100 % hors ligne

Scénario 2 : Déploiement sur matériel embarqué

Raspberry Pi 5 + accélérateur USB IA, ou Jetson Nano et autres périphériques edge :

BASH
# Sur le périphérique edge
pip install airllm
# Mode inférence CPU, aucun GPU nécessaire
PYTHON
from airllm import AutoModel

# Exécuter un petit modèle sur CPU
model = AutoModel.from_pretrained("microsoft/Phi-3-mini-4k-instruct")

# Idéal pour l'inférence IA locale sur IoT
# Contrôle vocal domotique, inspection industrielle, etc.

Scénario 3 : Inférence locale sur MacBook

Les utilisateurs Apple Silicon peuvent lancer de gros modèles directement :

PYTHON
# Sur macOS, il faut installer mlx
# pip install mlx

from airllm import AutoModel

# Exécution sur un MacBook M1/M2/M3
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

# Grâce à l'architecture mémoire unifiée, les performances sont proches du natif

AirLLM comparé aux autres solutions d'inférence locale

Solution Principe VRAM minimale Vitesse Précision Facilité
AirLLM Chargement couche par couche 4 Go Plus lente ✅ Sans perte ⭐⭐⭐⭐⭐
llama.cpp Quantification GGUF 4 Go Rapide Perte par quantification ⭐⭐⭐⭐
vLLM PagedAttention 80 Go+ Ultra-rapide ✅ Sans perte ⭐⭐⭐
Ollama Encapsulation GGUF 4 Go Rapide Perte par quantification ⭐⭐⭐⭐⭐
ExLlamaV2 GPTQ 4 bits 24 Go+ Ultra-rapide Perte par quantification ⭐⭐⭐

Comment choisir : - VRAM < 8 Go : AirLLM (sans perte) ou llama.cpp/Ollama (quantification avec perte) - VRAM 8-24 Go : AirLLM + quantification 4 bits, ou ExLlamaV2 - Multi-GPU / Data center : vLLM (niveau production) - Simplicité avant tout : Ollama (lancement en un clic) ou AirLLM (une ligne pip)


Résultats de performance de référence

Données mesurées par la communauté (varient selon le matériel et la version du modèle, à titre indicatif uniquement) :

Modèle Matériel tokens/s Remarque
Llama-3-8B RTX 3060 12 Go ~8-12 Quantification 4 bits
Llama-3-70B RTX 3060 12 Go ~1-2 Quantification 4 bits
Qwen3-32B GTX 1650 4 Go ~1-2 Sans quantification
DeepSeek-V3 671B RTX 4090 24 Go ~0,3 ~12 Go de VRAM

⚠️ Note : La vitesse d'inférence d'AirLLM est effectivement plus lente qu'un chargement complet sur GPU (généralement 1 à 3 tokens/s). Mais son vrai mérite est de permettre à du matériel modeste d'exécuter de grands modèles, ce qui le rend parfait pour le développement, les tests locaux et l'inférence hors ligne.


Questions fréquentes

Q : Est-ce qu'AirLLM permet d'entraîner des modèles ?

Non. AirLLM est dédié à l'inférence uniquement. Il ne supporte ni l'entraînement ni le fine-tuning. Pour le fine-tuning, orientez-vous vers LoRA / QLoRA.

Q : Pourquoi ça tourne si lentement chez moi ?

C'est normal avec le mécanisme de chargement couche par couche. Pour améliorer les choses : 1. Utilisez la quantification 4 bits (compression='4bit') 2. Activez le prefetching (prefetching=True, activé par défaut) 3. Stockez les fichiers du modèle sur un SSD (réduit la latence I/O disque)

Q : Pourquoi le premier chargement est-il si long ?

Au premier lancement, AirLLM télécharge le modèle et le découpe couche par couche dans un cache. Pour un modèle 70B, le téléchargement représente ~130 Go, et le découpage prend du temps aussi. Le second lancement utilise directement le cache et sera beaucoup plus rapide.

Q : Je manque d'espace disque, que faire ?

PYTHON
# Définir delete_original=True pour supprimer le modèle HuggingFace original après découpage
model = AutoModel.from_pretrained(
    "Qwen/Qwen3-32B",
    delete_original=True  # Économise ~50 % d'espace disque
)

Résumé

La valeur d'AirLLM tient en une phrase : permettre à chaque développeur de faire tourner de grands modèles sur son propre ordinateur.

Dimension Évaluation
🎯 Point fort 70B avec 4 Go de VRAM, sans quantification
📦 Difficulté d'installation pip install, zéro configuration
🧪 Couverture des modèles Tous les grands modèles open source
⚡ Vitesse d'inférence Plus lente (1-3 tok/s), mais ça tourne
🔧 Cas d'usage Développement, tests locaux, déploiement edge
📄 Licence Apache 2.0 / BELLE License

Pour aller plus loin : - Repository GitHub — 23K+ étoiles, maintenance active - Blog HuggingFace — Analyse technique approfondie - Démo Colab — Essai gratuit en ligne

Si cet article vous a été utile, n'hésitez pas à le partager avec d'autres développeurs !