Infrastructure IA locale

Bande passante mémoire et limites de vitesse

À quelle vitesse ce modèle peut-il au mieux faire du decode sur ce GPU ?

Comprenez pourquoi la bande passante mémoire, et non le calcul, limite le decode d'un LLM, comparez des GPU pour une même configuration et lisez une mesure par rapport à sa limite.

Unité de taille

1 · Modèle

Paramètres
8,19 Md
Couches
36
Têtes
32 query, 8 KV
Dimension de tête
128
Contexte maximal
40 960 tokens
KV cache par token, 16 bits
147,46 KB/token
Dimension cachée
4 096
Vocabulaire
151 936

Valeurs lues dans le config.json sur Hugging Face le 30 octobre 2026.

Ces valeurs viennent de Hugging Face et ne peuvent pas être modifiées. Personnalisez pour les changer.

2 · Précision

Nombre de bits utilisés pour stocker chaque paramètre.

›Quantifications publiées

Ne s'applique qu'aux formats quantifiés.

Se règle à part des poids. FP8 divise le cache par deux.

3 · Charge de travail

Tokens par séquence, prompt et texte généré compris.

tokens

Requêtes traitées en même temps, le batch.

4 · Matériel

RTX PRO 6000 Blackwell Server Edition

NVIDIA · Blackwell

Centre de données

Mémoire

96 GB

GDDR7 · compté comme 96 GiB

Bande passante

1 597 GB/s

Puissance max

300 to 600 W

Configurable.

Les barres comparent chaque chiffre au plus grand GPU du catalogue.

NVLink
Aucun
Instances MIG
4
Groupe NVLink
Aucun, PCIe seulement
GPU par serveur
jusqu'à 8

Comment il est intégré aux serveurs

Diviser ce GPU

MIG

Se divise en 4 tranches mémoire et 4 tranches de calcul, jusqu'à 4 instances sur un GPU. Les profils :

  • 1g.24gb
  • 2g.48gb
  • 4g.96gb

Où une instance peut démarrer :Déduit

vGPU for Compute

10 types avec 8 à 96 GB de framebuffer, jusqu'à 12 vGPU sur un GPU. Cela nécessite une licence NVIDIA AI Enterprise et un hyperviseur.

Partager sans diviser

Le time-slicing fonctionne sur n'importe quel GPU, sans isolation de la mémoire ni des défaillances entre les replicas. MPS partage un GPU entier, pas une instance MIG.

Formats numériques

FP4FP8FP16BF16TF32FP32
›Spécifications et sources
Mémoire
96 GB[1]
Type
GDDR7[1]
Bande passante
1 597 GB/s[1]
Puissance max
300 to 600 W[2]Configurable.
NVLink
0[3]Non pris en charge.
Instances MIG
4[4]
FP4
4 000 TFLOPS[1]NVIDIA ne précise pas s'il s'agit de dense ou de sparse.
FP8
2 000 TFLOPS[1]NVIDIA ne précise pas s'il s'agit de dense ou de sparse.
FP16 / BF16
1 000 TFLOPS[1]NVIDIA ne précise pas s'il s'agit de dense ou de sparse.
TF32
234 TFLOPS[1]NVIDIA ne précise pas s'il s'agit de dense ou de sparse.

Formats numériques: FP4, FP8, FP16, BF16, TF32, FP32

Les chiffres tensor sont des valeurs de crête tirées des fiches techniques. Ce ne sont pas des performances applicatives.

Sources

Chargement des sources

Total des GPU. Ils se partagent le modèle par tensor parallelism, étages de pipeline et replicas, comme défini par la disposition ci-dessous.

1 serveur de 8 GPU, le dernier avec 1

Comment le GPU est utilisé

Divisez chaque GPU en tranches ou partagez-le entre des replicas au lieu d'utiliser plus de GPU. Les tranches et les parts exécutent des replicas du modèle : elles ne peuvent pas être réunies en un groupe tensor parallel.

Partager un périphérique entre des replicas

Plusieurs replicas sur un même périphérique, chacun avec sa propre part de la mémoire.

Les compute instances n'existent qu'au sein d'une instance MIG.
›Disposition du déploiement

Comment les GPU se partagent le modèle. La mémoire par GPU, la place pour le KV cache et le nombre de GPU en découlent, comme vLLM les répartit.

Étages de pipeline

Découpe les couches en tronçons sur différents GPU. Peu de données passent d'un étage à l'autre : adapté aux GPU sans liaison rapide et aux serveurs reliés par un réseau.

Replicas

Copies indépendantes du modèle, chacune avec son propre KV cache. Elles se partagent les séquences. Un modèle mixture of experts répartit ses experts sur toutes.

Taille de tensor parallel : 1, soit les GPU divisés par les étages et les replicas.

GPU par serveur

Le tensor parallelism reste dans un serveur. Au-delà, les GPU deviennent des étages de pipeline.

Taille du decode context parallel

Découpe le KV cache de chaque séquence par token entre les GPU en tensor parallel. N'ajoute aucun GPU et ralentit le decode.

Uniquement pour les modèles mixture of experts.

Mesure

Facultatif : la latence inter-token mesurée pour cette configuration, en millisecondes.

ms
Hypothèses du runtime›3,22 GB de surcoût par GPU, 90 % utilisables, 10 % de marge

Mémoire pour le contexte CUDA, les activations et les graphes, dans l'unité de la page. Une heuristique.

GB

Part de la mémoire du GPU que le moteur d'inférence peut utiliser. La valeur par défaut de vLLM est 92 %.

%

Part de la mémoire utilisable qui doit rester libre pour que le modèle tienne confortablement.

%

Ce modèle n'a pas de couches à fenêtre glissante.

Limite théorique, pas la vitesse attendue

Étape de decode la plus courte

13,28 ms

21,21 GB lus par GPU à 1,6 TB/s.

Limite de vitesse d'une séquence

75,28 tok/s

Tokens par seconde qu'elle ne peut pas dépasser, sans speculative decoding.

Total : 4 séquences

301,13 tok/s

Tokens par seconde au total.

Temps de lecture des poids

10,26 ms

Les poids d'un GPU, lus une fois à pleine bande passante.

Batch d'équilibre

313

Le point où le calcul prend le relais de la mémoire. La latence monte plus tôt.

Ce que lit un GPU en une étape

  • Poids lus16,38 GB77,22 %
  • KV cache lu4,83 GB22,78 %

Temps d'étape quand le batch grandit

Chaque séquence en plus ajoute son propre cache aux octets lus par une étape, alors que les poids sont lus une seule fois pour toutes. Les mêmes limites avec un contexte de 8 192 tokens.

  • 1 séquence

    11,01 ms

  • 2 séquences

    11,77 ms

  • 4 séquences

    13,28 ms

  • 8 séquences

    16,31 ms

  • 16 séquences

    22,36 ms

  • 32 séquences

    34,46 ms

  • 64 séquences

    58,67 ms

  • 128 séquences

    107,08 ms

  • 256 séquences

    203,89 ms

La même configuration sur d'autres GPU

Les mêmes octets sur la bande passante de chaque GPU. Un GPU sur lequel la configuration ne tient pas est signalé, et son chiffre est ce qu'il donnerait si elle tenait.

  • GB200 NVL72

    377 tok/s

  • GB300 NVL72

    377 tok/s

  • B200 HGX

    363 tok/s

  • B300 HGX

    363 tok/s

  • GH200 144 GB HBM3e

    231 tok/s

  • H200 SXM

    226 tok/s

  • H200 NVL

    226 tok/s

  • GH200 96 GB HBM3

    189 tok/s

  • H100 NVL

    186 tok/s

  • H100 SXM

    158 tok/s

  • A100 80GB SXM4

    96 tok/s

  • H100 PCIe

    94 tok/s

  • RTX PRO 6000 Blackwell Server EditionSélectionné

    75 tok/s

  • Note: Le fabricant indique le pic de ce GPU sans préciser s'il inclut la sparsity. Le chiffre utilisé en est la moitié, comme pour les GPU de la même génération qui le précisent.

Déployer cette configuration

Ces commandes sont écrites pour la configuration dimensionnée ci-dessus et pour les choix faits ici, et changent dès que l'un ou l'autre change. Rien n'est modifié à votre place : un choix qui ne fonctionne plus est conservé et signalé, avec des moyens de le corriger.

Le serveur

Exécuter avec

Runtime

Le serveur qui charge le modèle.

GPU

Les index des GPU de la machine, tels que nvidia-smi les liste, séparés par des virgules. La configuration utilise 1 GPU.

Identifier les GPU par

Un index dépend de l'ordre dans lequel le pilote trouve les GPU. Un UUID est lié à la carte.

Endpoint

Le port sur lequel l'endpoint répond. 8000 (par défaut)

Écouter sur

La valeur par défaut garde l'endpoint sur cette machine.

L'endpoint ne répond qu'aux requêtes qui portent une clé. La clé est créée sur votre machine et n'est jamais écrite dans une commande ni dans un lien.

Autres options

Où sont gardés les poids téléchargés. Un répertoire qui existe déjà évite le téléchargement.

La valeur par défaut est la version pour laquelle ces commandes ont été écrites. latest suit la plus récente.

Ce qui va tourner

DocumentéConfiguration YSTVGT

vLLM · Docker · 1 GPU, RTX PRO 6000 Blackwell

À regarder

  • Vous avez dimensionné un KV cache fp16 pour des poids bf16. Un cache en 16 bits occupe la même place dans l'un ou l'autre type, et vLLM le stocke dans le type propre au modèle sauf indication contraire, donc les commandes n'imposent pas fp16.

16 étapes en 5 phases. Ouvrez-en une à la fois, ou toutes.

1Vérifier le matériel

Regarder ce que la machine ou le cluster offre avant de rien modifier.
  1. Étape 1

    Vérifier le pilote

    Confirmer que le pilote NVIDIA est installé et assez récent pour les logiciels ci-dessous.

    nvidia-smi

    Ce que vous devriez voir

    • Un tableau avec la version du pilote et une version de CUDA d'au moins 13.0, dont l'image a besoin.
    Aide et sources

    Si cela ne fonctionne pas

    • Si la version de CUDA est inférieure à ce que nécessite le logiciel, mettez à jour le pilote et vérifiez à nouveau.

    D'où viennent les valeurs

    • Le GPU choisi : RTX PRO 6000 Blackwell.
  2. Étape 2

    Vérifier les GPU

    Confirmer que la machine liste le GPU à l'index 0.

    nvidia-smi -L

    Ce que vous devriez voir

    • Une ligne par GPU, chacune nommant RTX PRO 6000 Blackwell comme la machine l'écrit.
    Aide et sources

    Si cela ne fonctionne pas

    • Si un GPU que vous avez choisi manque, il n'est pas dans cette machine ou le pilote ne le voit pas.
    • Si les noms ne correspondent pas à ce que vous attendez, les index ne sont pas ceux que vous croyez. Identifiez les GPU par UUID, qui ne dépend pas de l'ordre.

    D'où viennent les valeurs

    • Le calculateur utilise 1 GPU.
    • Le GPU choisi : RTX PRO 6000 Blackwell.
  3. Étape 3

    Vérifier que la mémoire est libre

    Le calculateur attend 22,76 GiB sur chaque GPU, sur les 86,40 GiB que le moteur peut utiliser. Vérifiez que, pour le GPU à l'index 0, la mémoire est libre.

    nvidia-smi --query-gpu=index,name,memory.total,memory.used,memory.free --format=csv -i 0

    Ce que vous devriez voir

    • Presque toute la mémoire du GPU est libre, au moins 22,76 GiB sur chacun.

    À garder en tête

    • D'autres travaux utilisent peut-être déjà ces GPU. Si leur mémoire n'est pas libre, arrêtez ces travaux ou choisissez d'autres GPU avant de démarrer.
    Aide et sources

    D'où viennent les valeurs

    • Le calculateur : 22,76 GiB nécessaires, 86,40 GiB utilisables sur chaque GPU.

2Préparer

Obtenir l'accès au modèle, installer ce dont le serveur a besoin et le récupérer. Un GPU divisé est aussi créé ici.

Installer les outils

  1. Étape 4

    Vérifier Docker

    Confirmer que Docker Engine est installé.

    docker --version

    Ce que vous devriez voir

    • Une version de Docker.
    Aide et sources
  2. Étape 5

    Installer le NVIDIA Container Toolkit

    Droits administrateur requis

    Il permet aux conteneurs d'utiliser les GPU. Ces commandes sont prévues pour Ubuntu et Debian, et la page liée ci-dessous couvre les autres distributions.

    Vient après l'étape 1

    sudo apt-get update && sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg2
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt-get update
    export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.20.1-1
    sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

    Ce que vous devriez voir

    • Les paquets s'installent sans erreur.
    Aide et sources
  3. Étape 6

    Connecter Docker aux GPU

    Droits administrateur requis

    Enregistrer le runtime NVIDIA auprès de Docker et redémarrer Docker.

    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker

    Ce que vous devriez voir

    • Aucune erreur, et Docker redémarre.

    À garder en tête

    • Redémarrer Docker arrête les conteneurs en cours d'exécution.
    Aide et sources
  4. Étape 7

    Vérifier qu'un conteneur voit les GPU

    Exécuter nvidia-smi dans un conteneur qui reçoit le GPU à l'index 0. Seul ce GPU doit apparaître.

    docker run --rm --runtime=nvidia --gpus '"device=0"' \
      ubuntu nvidia-smi

    Ce que vous devriez voir

    • Un tableau avec un GPU, celui que vous avez choisi.
    Aide et sources

    Si cela ne fonctionne pas

    • Si Docker ne peut pas démarrer avec les GPU, le toolkit n'est pas configuré ou les index n'existent pas sur cette machine.
    • Si les noms ne correspondent pas à ce que vous attendez, les index ne sont pas ceux que vous croyez. Identifiez les GPU par UUID, qui ne dépend pas de l'ordre.

    D'où viennent les valeurs

    • --gpus '"device=0"'

      Par défaut Les premiers GPU, comptés à partir de 0.

Récupérer le serveur

  1. Étape 8

    Télécharger l'image

    Télécharger vllm/vllm-openai:v0.32.0 avant le premier démarrage, pour que le démarrage n'ait plus qu'à charger le modèle.

    docker pull vllm/vllm-openai:v0.32.0

    Ce que vous devriez voir

    • Le téléchargement se termine et la dernière ligne nomme l'image.

    À garder en tête

    • L'image fait plusieurs gigaoctets.
    Aide et sources

3Démarrer le serveur

Le démarrer avec la configuration dimensionnée.
  1. Étape 9

    Démarrer le serveur

    Démarrer vllm-qwen3-8b avec la configuration dimensionnée : le modèle Qwen/Qwen3-8B, le parallélisme, le contexte et la mémoire qui lui est donnée. Le premier démarrage télécharge le modèle et prend quelques minutes.

    Vient après l'étape 3

    # config YSTVGT
    docker run -d --name vllm-qwen3-8b \
      --runtime nvidia --gpus '"device=0"' \
      --ipc=host \
      -v "$HOME/.cache/huggingface":/root/.cache/huggingface \
      -p 127.0.0.1:8000:8000 \
      vllm/vllm-openai:v0.32.0 \
      --model Qwen/Qwen3-8B \
      --max-model-len 8192 --max-num-seqs 4 \
      --gpu-memory-utilization 0.90

    Ce que vous devriez voir

    • Un id de conteneur.

    À garder en tête

    • Le premier démarrage télécharge le modèle et prépare les kernels, ce qui prend quelques minutes. Le serveur n'est pas prêt avant.
    Aide et sources

    Si cela ne fonctionne pas

    • S'il s'arrête avec un message out of memory, la configuration nécessite plus que ce que contient le GPU. Réduisez le contexte ou les séquences, donnez plus de mémoire du GPU au moteur, ou utilisez plus de GPU. Le calculateur indique de combien.
    • Si vLLM dit que le contexte est plus long que ce que le KV cache peut contenir, réduisez le contexte ou le nombre de séquences.
    • Si vLLM dit que les têtes d'attention ne sont pas divisibles par la taille de tensor parallel, utilisez une taille qui les divise.
    • Si le port est pris, choisissez-en un autre dans vos choix.
    • Si Docker ne peut pas démarrer avec les GPU, le toolkit n'est pas configuré ou les index n'existent pas sur cette machine.

    D'où viennent les valeurs

    • -d

      Par défaut La façon d'exécuter que vous avez choisie.

    • --name vllm-qwen3-8b

      Du calculateur Le dépôt du modèle choisi.

    • --runtime nvidia

      Par défaut La façon d'exécuter que vous avez choisie.

    • --gpus '"device=0"'

      Par défaut Les premiers GPU, comptés à partir de 0.

    • --ipc=host

      Par défaut La façon d'exécuter que vous avez choisie.

    • -v "$HOME/.cache/huggingface":/root/.cache/huggingface

      Par défaut Où sont gardés les poids téléchargés.

    • -p 127.0.0.1:8000:8000

      Par défaut Le port sur lequel l'endpoint répond.

    • --model Qwen/Qwen3-8B

      Du calculateur Le dépôt du modèle choisi.

    • --max-model-len 8192

      Du calculateur La longueur de contexte que vous avez définie : 8 192 tokens.

    • --max-num-seqs 4

      Déduit 4 séquences à répartir entre 1 replica.

    • --gpu-memory-utilization 0.90

      Déduit La part utilisable que vous avez définie, 90 %, divisée entre 1 replica sur le périphérique, arrondie vers le bas pour que les parts ne dépassent jamais le total du périphérique.

    • Le dépôt du modèle choisi.
    • La longueur de contexte que vous avez définie : 8 192 tokens.
    • La part utilisable que vous avez définie, 90 %, divisée entre 1 replica sur le périphérique, arrondie vers le bas pour que les parts ne dépassent jamais le total du périphérique.

4Vérifier que cela fonctionne

Attendre qu'il réponde, lui poser une question et comparer la mémoire avec le calculateur.

Vérifier l'endpoint

  1. Étape 10

    Attendre qu'il soit prêt

    Le serveur répond sur /health une fois le modèle chargé.

    timeout 900 bash -c 'until curl -fs http://127.0.0.1:8000/health >/dev/null; do sleep 5; done' && echo ready

    Ce que vous devriez voir

    • Le mot ready, après une minute ou plus, le temps que le modèle se charge.
    Aide et sources

    Si cela ne fonctionne pas

    • S'il ne devient pas prêt, lisez les dernières lignes du log : le modèle est encore en cours de chargement, ou le serveur s'est arrêté avec une erreur.
    • S'il s'arrête avec un message out of memory, la configuration nécessite plus que ce que contient le GPU. Réduisez le contexte ou les séquences, donnez plus de mémoire du GPU au moteur, ou utilisez plus de GPU. Le calculateur indique de combien.
  2. Étape 11

    Vérifier que le modèle est servi

    Demander au serveur quels modèles il sert.

    curl -sS http://127.0.0.1:8000/v1/models

    Ce que vous devriez voir

    • Une liste contenant Qwen/Qwen3-8B.
    Aide et sources

    Si cela ne fonctionne pas

    • Si la réponse est 401, la clé de ce shell n'est pas celle avec laquelle le serveur a été démarré.
  3. Étape 12

    Lui poser une question

    Une requête passant par l'endpoint que vos applications utiliseront.

    curl -sS http://127.0.0.1:8000/v1/chat/completions \
      -H 'Content-Type: application/json' \
      -d '{"model": "Qwen/Qwen3-8B", "messages": [{"role": "user", "content": "Say hello in five words."}], "max_tokens": 32}'

    Ce que vous devriez voir

    • Une réponse JSON avec un message du modèle.
    Aide et sources

    Si cela ne fonctionne pas

    • Si la réponse est 401, la clé de ce shell n'est pas celle avec laquelle le serveur a été démarré.
    • S'il ne devient pas prêt, lisez les dernières lignes du log : le modèle est encore en cours de chargement, ou le serveur s'est arrêté avec une erreur.

Observer la machine

  1. Étape 13

    Observer les GPU

    Voir la mémoire utilisée et le travail en cours sur le GPU à l'index 0 pendant que le serveur tourne.

    nvidia-smi --query-gpu=index,name,memory.used,memory.total,utilization.gpu --format=csv -i 0

    Ce que vous devriez voir

    • Une mémoire utilisée proche de celle qui a été donnée au moteur.
    Aide et sources
  2. Étape 14

    Observer le serveur

    Voir que vllm-qwen3-8b tourne, et son dernier message.

    Vient après l'étape 12

    docker ps --filter name=vllm-qwen3-8b --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
    docker logs --tail 20 vllm-qwen3-8b

    Ce que vous devriez voir

    • Le serveur tourne, et ses dernières lignes de log ne montrent aucune erreur.
    Aide et sources

Comparer avec le calculateur

  1. Étape 15

    Comparer avec le calculateur

    Le calculateur attendait 22,76 GiB sur chaque GPU, avec 90 % du GPU confiés au moteur. Le log du serveur indique ce qu'il a pris pour les poids et ce qui reste pour le KV cache.

    Vient après l'étape 12

    docker logs vllm-qwen3-8b 2>&1 | grep -E 'Model loading took|Available KV cache memory|GPU KV cache size'

    Ce que vous devriez voir

    • Des lignes indiquant la mémoire prise par les poids, la mémoire restante pour le KV cache et le nombre de tokens qu'il contient.
    Aide et sources

    D'où viennent les valeurs

    • Le calculateur : 22,76 GiB nécessaires, 86,40 GiB utilisables sur chaque GPU.

5Nettoyer

Arrêter le serveur et supprimer ce que ces étapes ont créé.
  1. Étape 16

    Arrêter le serveur

    Peut arrêter ou supprimer

    Arrêter vllm-qwen3-8b et libérer les GPU.

    Vient après l'étape 9

    docker stop vllm-qwen3-8b && docker rm vllm-qwen3-8b

    Ce que vous devriez voir

    • Aucune sortie, et les GPU sont libres.

    À garder en tête

    • L'endpoint cesse de répondre.
    Aide et sources

Calcul

  • Votre saisie
  • Spécification officielle
  • Résultat calculé
  • Estimation
  • Heuristique
  • Limite théorique
›Poids
  1. Taille brute des poids

    Résultat calculé

    Taille brute des poids = paramètres × bits nominaux par paramètre ÷ 8

    = Votre saisie: 8,19 Md paramètres × Spécification officielle: 16 bit/param ÷ 8

    = 16,38 GB

  2. Poids en mémoire

    Résultat calculé

    Poids en mémoire = paramètres × bits effectifs par paramètre ÷ 8

    = Votre saisie: 8,19 Md paramètres × Spécification officielle: 16 bit/param ÷ 8

    = 16,38 GB

›KV cache
  1. KV cache par token

    Résultat calculé

    KV cache par token = 2 × couches avec KV cache × têtes KV × dimension de tête × bits du KV cache par valeur ÷ 8

    = 2 × Votre saisie: 36 × Votre saisie: 8 × Votre saisie: 128 × Votre saisie: 16 bit ÷ 8

    = 147,46 KB/token

  2. KV cache par séquence

    Résultat calculé

    KV cache par séquence = KV cache par token × longueur du contexte

    = Résultat calculé: 147,46 KB/token × Votre saisie: 8 192 tokens

    = 1,21 GB

  3. KV cache

    Résultat calculé

    KV cache = KV cache par séquence × séquences simultanées

    = Résultat calculé: 1,21 GB × Votre saisie: 4

    = 4,83 GB

›Mémoire par GPU et au total
  1. Mémoire requise par GPU

    Estimation

    Mémoire requise par GPU = Poids en mémoire + KV cache + Surcoût du runtime

    = Résultat calculé: 16,38 GB + Résultat calculé: 4,83 GB + Heuristique: 3,22 GB

    = 24,43 GB

  2. Modèle avec surcoût du runtime

    Estimation

    Modèle avec surcoût du runtime = Poids en mémoire + Surcoût du runtime

    = Résultat calculé: 16,38 GB + Heuristique: 3,22 GB

    = 19,6 GB

›Une étape de decode et ses limites
  1. Poids lus par GPU en une étape

    Résultat calculé

    Poids lus par GPU en une étape = Poids en mémoire

    = Résultat calculé: 16,38 GB

    = 16,38 GB

  2. Octets lus par GPU en une étape

    Résultat calculé

    Octets lus par GPU en une étape = Poids lus par GPU en une étape + KV cache

    = Résultat calculé: 16,38 GB + Résultat calculé: 4,83 GB

    = 21,21 GB

  3. Temps pour lire les poids une fois

    Limite théorique

    Temps pour lire les poids une fois = Poids en mémoire ÷ Bande passante mémoire du GPU

    = Résultat calculé: 16,38 GB ÷ Spécification officielle: 1,6 TB/s

    = 10,26 ms

  4. Durée minimale d'une étape

    Limite théorique

    Durée minimale d'une étape = Octets lus par GPU en une étape ÷ Bande passante mémoire du GPU

    = Résultat calculé: 21,21 GB ÷ Spécification officielle: 1,6 TB/s

    = 13,28 ms

  5. Limite de vitesse d'une séquence

    Limite théorique

    Limite de vitesse d'une séquence = 1 ÷ Durée minimale d'une étape

    = 1 ÷ Limite théorique: 13,28 ms

    = 75,28 tok/s

  6. Limite de vitesse de toutes les séquences

    Limite théorique

    Limite de vitesse de toutes les séquences = séquences simultanées ÷ Durée minimale d'une étape

    = Votre saisie: 4 ÷ Limite théorique: 13,28 ms

    = 301,13 tok/s

›Points d'équilibre
  1. Batch où le calcul prend le relais

    Limite théorique

    Batch où le calcul prend le relais = (Pic de calcul, dense × 1 000 000 000 000 ÷ Bande passante mémoire du GPU) × bits effectifs par paramètre ÷ 8 ÷ 2

    = (Estimation: 500 TFLOPS × 1 000 000 000 000 ÷ Spécification officielle: 1,6 TB/s) × Spécification officielle: 16 bit/param ÷ 8 ÷ 2

    = 313,09

Hypothèses

  • Hypothèse: Le KV cache est stocké par blocs (16 tokens dans vLLM), donc la capacité réelle est légèrement inférieure au nombre affiché.
  • Heuristique: Le surcoût du runtime est de 3,22 GB par GPU pour le contexte CUDA, les activations et les graphes. C'est une heuristique : vLLM a mesuré 2,57 GiB pour un modèle 8B, et cela varie selon le moteur et les réglages. Modifier
  • Hypothèse: Seuls 90 % de la mémoire du GPU sont donnés au modèle. Les moteurs d'inférence réservent le reste : la valeur par défaut de vLLM est 92 % (documentation de la version 0.32). Modifier
  • Hypothèse: On considère que le modèle tient confortablement quand au moins 10 % de la mémoire utilisable reste libre. Modifier
  • Hypothèse: NVIDIA indique la mémoire GPU en GB, et le matériel en contient autant de GiB : un H100 80 GB a 80 GiB, et nvidia-smi affiche 79,6. Les quelques pour cent que l'ECC et le pilote retiennent sont couverts par la part utilisable.
  • Hypothèse: La précision du KV cache se règle à part de celle des poids. Quantifier les poids ne réduit ni le KV cache ni le surcoût. Modifier
  • Hypothèse: On suppose que chaque séquence utilise tout le contexte en même temps, le pire cas. Le trafic réel est en général plus court. Modifier
  • Hypothèse: On suppose que plusieurs GPU se partagent le modèle par tensor parallelism, comme le fait vLLM : les poids et les têtes KV sont répartis, et chaque GPU paie le surcoût du runtime.
  • Limite théorique: Ce sont des limites, pas des prévisions. Les moteurs réels ajoutent du temps de kernels, d'ordonnancement et de réseau : les mesures publiées de vLLM étaient de 30 à 270 % plus lentes que la même formule, et les exécutions de l'atelier sur un seul GPU de 10 à 15 %.
  • Hypothèse: Pas de speculative decoding. Il peut produire plusieurs tokens en une étape et dépasser une limite par séquence.
  • Hypothèse: Chaque poids hors des experts compte comme lu à chaque étape. Les recherches d'embeddings ne lisent que quelques lignes de la table d'entrée, donc le vrai minimum est de quelques pour cent plus bas pour les petits modèles.
  • Limite théorique: Le batch où le calcul d'une étape égale son temps mémoire, d'après le pic dense du format dans lequel les poids sont calculés. La latence commence à monter avant. Pour un modèle mixture of experts, chaque expert a besoin d'autant de tokens pour lui seul.

Continuer avec

Votre modèle et vos réglages sont repris.

13,28 ms75,28 tok/sLimite de vitesse d'une séquence

Pourquoi c'est important

Chaque étape de decode lit une fois les poids dont elle a besoin et le cache de chaque séquence en cours, donc une étape ne peut pas être plus courte que ces octets divisés par la bande passante mémoire. La bande passante est ainsi le chiffre qui fixe la vitesse de réponse d'un modèle, bien avant le calcul du GPU. Les limites données ici relèvent de la physique. Les moteurs réels sont plus lents, et une mesure dit de combien.

Comment lire le résultat

L'étape la plus courte, ce sont les octets qu'un GPU lit en une étape divisés par sa bande passante, et les limites de vitesse en découlent. Ce sont des limites, jamais des prévisions : les mesures publiées de vLLM étaient de 30 à 270 % plus lentes. Saisissez votre propre temps mesuré par token pour voir à quel point vous vous approchez de la limite. Le batch d'équilibre est le point où le calcul commence à compter. Pour un modèle mixture of experts, les octets croissent avec le batch, car davantage d'experts sont touchés.

IA locale et souveraineté

Exécuter un modèle sur du matériel que vous contrôlez est un élément d'une décision de souveraineté. Cela ne suffit pas à rendre un déploiement souverain, conforme au RGPD ou à l'AI Act européen.

Ces outils sont issus de l'atelier L'IA sans le cloud.

← Tous les outils