Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Latence, délai maximal et centiles

Après cette leçon: Je peux dire où va le temps dans un appel à un modèle et fixer un délai maximal à partir de durées enregistrées.

Leçon de 60 min5 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Dire où va le temps

La latence est le temps entre une requête et sa réponse. Pour un appel à un modèle, ce sont deux nombres : l’attente du premier jeton, et celle du dernier. C’est utile parce que les utilisateurs jugent une fonction sur ses pires moments, pas sur sa moyenne.

Une fonction qui répond en une seconde à dix-neuf utilisateurs et en huit secondes au vingtième paraît cassée à ce vingtième.

À la fin de cette leçon

Remarque

Je peux dire où va le temps dans un appel à un modèle et fixer un délai maximal à partir de durées enregistrées.

Mots clés

MotCe que ça veut dire
Latencele temps qu’une requête met à recevoir sa réponse
Premier jetonle premier morceau d’une réponse en flux
Centilela valeur sous laquelle tombe une part des requêtes
Queueles quelques requêtes les plus lentes
Délai maximall’attente la plus longue avant d’abandonner
Fluxl’envoi d’une réponse par morceaux, au fur et à mesure

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les centiles montrent la queue

Une moyenne cache les requêtes lentes. Triez plutôt les durées. La médiane (p50) est celle du milieu. Le p95 est la valeur sous laquelle ou à laquelle se trouvent 95 pour cent des requêtes. Les quelques-unes au-dessus forment la queue.

Utilisez le rang le plus proche. Avec n valeurs, prenez celle de la place p pour cent de n, arrondie vers le haut, en comptant à partir de 1. Aucune interpolation : tous les outils donnent la même réponse.

Exemple détaillé : vingt durées

MesurePlace sur 20Valeur
p5010e900 ms
p9018e2300 ms
p9519e4200 ms
p9920e7800 ms
Moyenneaucune1493 ms

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Fixer un délai maximal avec les données

Un délai maximal est l’attente la plus longue que vous acceptez. Trop court, il coupe de bonnes réponses. Trop long, un appel bloqué retient un utilisateur et une connexion. Prenez un centile élevé comme le p95, ajoutez une marge et arrondissez.

Le flux masque l’attente : l’utilisateur lit le premier jeton après quelques centaines de millisecondes pendant que le reste arrive. Mesurez le premier jeton et la réponse entière séparément, et donnez à chacun sa limite.

Une erreur courante

Attention

Beaucoup fixent le délai maximal d’après la moyenne, parce que c’est un seul nombre facile. Ici, avec la moyenne de 1493 ms, 4 requêtes sur 20 seraient coupées alors qu’elles allaient aboutir. Fixez-le d’après un centile élevé de durées enregistrées, et vérifiez combien il en couperait.

Écrire le rapport de latence, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Vingt durées enregistrées et inventées, en millisecondes : la réponse entière et le premier jeton.' 'const TOTAL = [820, 910, 760, 1500, 880, 940, 830, 4200, 900, 870, 1020, 790, 850, 2300, 910, 880, 960, 840, 7800, 900];' 'const PREMIER = [210, 240, 200, 300, 220, 250, 215, 500, 230, 225, 260, 205, 222, 380, 240, 228, 255, 218, 900, 232];' > latency4.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le rapport de latence, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Rang le plus proche : on trie, puis on prend la valeur à la place plafond(p pour cent de n).' 'function centile(valeurs, p) {' '  const triees = valeurs.slice().sort(function (a, b) { return a - b; });' '  const rang = Math.ceil(p * triees.length / 100);' '  return triees[rang - 1];' '}' 'function moyenne(valeurs) {' '  return Math.round(valeurs.reduce(function (somme, v) { return somme + v; }, 0) / valeurs.length);' '}' >> latency4.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le rapport de latence, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Un délai maximal : le 95e centile plus 20 pour cent de marge, arrondi à 100 ms au-dessus.' 'function delaiMax(valeurs) {' '  return Math.ceil(centile(valeurs, 95) * 120 / 100 / 100) * 100;' '}' 'function au_dela(valeurs, limite) {' '  return valeurs.filter(function (v) { return v > limite; }).length;' '}' >> latency4.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le rapport de latence, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const limite = delaiMax(TOTAL);' 'console.log(\"réponse entière : p50 \" + centile(TOTAL, 50) + \", p90 \" + centile(TOTAL, 90) + \", p95 \" + centile(TOTAL, 95) + \", p99 \" + centile(TOTAL, 99) + \" ms\");' 'console.log(\"moyenne \" + moyenne(TOTAL) + \" ms, plus lent \" + Math.max(...TOTAL) + \" ms\");' 'console.log(\"premier jeton : p50 \" + centile(PREMIER, 50) + \", p95 \" + centile(PREMIER, 95) + \" ms\");' 'console.log(\"délai maximal \" + limite + \" ms coupe \" + au_dela(TOTAL, limite) + \" sur \" + TOTAL.length);' 'console.log(\"un délai de 2000 ms couperait \" + au_dela(TOTAL, 2000) + \" sur \" + TOTAL.length);' >> latency4.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer le rapport

Commande
docker exec -w /home/node/project agent node latency4.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ces durées sont enregistrées

Rien ici ne ralentit un appel exprès. Les vingt durées sont enregistrées et inventées, donc chaque étudiant a les mêmes nombres. Un vrai système les lit dans ses traces, comme dans la première leçon.

Le Run n’appelle aucun modèle : il n’a besoin d’aucun assistant et n’a rien à remplacer.

Sortie du Run

LigneCe qu’elle montre
réponse entière : p50 900, p90 2300, p95 4200, p99 7800 msLa forme de la réponse entière
moyenne 1493 ms, plus lent 7800 msLa moyenne est tirée vers le haut par quelques requêtes très lentes
premier jeton : p50 230, p95 500 msLe flux montre un premier jeton bien plus tôt
délai maximal 5100 ms coupe 1 sur 20p95 plus 20 pour cent, arrondi à 100
un délai de 2000 ms couperait 3 sur 20Une supposition coupe de bonnes réponses

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.