Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Wie ein Modellserver Anfragen bündelt

Nach dieser Lektion: Ich kann beschreiben, wie ein Server viele Anfragen zu Stapeln macht.

Lektion, 70 Min.7 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Fünfzig Studierende fragen gleichzeitig

Ein Modellserver ist ein Programm, das ein Modell im Speicher hält und viele Menschen bedient. Er stellt Anfragen in eine Warteschlange und fasst sie zu Stapeln zusammen.

Das ist wichtig, weil ein Chip, der immer nur eine Person bedient, alle anderen warten lässt. Stapeln hält einen Server schnell, wenn der Hörsaal voll ist.

Am Ende dieser Lektion

Notiz

Ich kann beschreiben, wie ein Server viele Anfragen zu Stapeln macht.

Schlüsselwörter

BegriffWas er bedeutet
WarteschlangeAnfragen, die in der Reihenfolge ihres Eintreffens warten
StapelAnfragen, die gemeinsam beantwortet werden
WartezeitZeit vom Eintreffen bis zum Start
Zeit bis zum ersten WortWartezeit plus die Zeit für das erste Token
Durchsatzwie viele Anfragen in einer festen Zeit fertig werden

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Warteschlange füttert den Chip

Anfragen reihen sich in eine Warteschlange ein. Ist der Chip frei, nimmt der Server die eingetroffenen Anfragen und führt sie gemeinsam als einen Stapel aus.

In unserem Modell kostet ein Stapel 2 Takte zum Start plus die Arbeit seiner längsten Anfrage. Eine kurze Anfrage zu einem Stapel hinzuzufügen kostet daher fast nichts.

Dieselben fünf Anfragen, zwei Stapelgrößen

StapelgrößeWartezeiten (a, b, c, d, e)Mittlere Wartezeit
10 5 9 16 148,80
30 5 4 3 53,40

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Zwei Geschwindigkeiten: erstes Wort und Wörter je Sekunde

Die Zeit bis zum ersten Wort ist die Wartezeit plus die Zeit für das erste Token. Eine Person erlebt sie als Verzögerung. Der Durchsatz sagt, wie viele Anfragen in einer festen Zeit fertig werden. Ihn bezahlt der Betreiber.

Ein Stapel erhöht den Durchsatz. Aber eine kurze Anfrage im Stapel endet erst, wenn die längste endet, eine sehr lange Anfrage kann also die übrigen bremsen.

Ein häufiger Fehler

Warnung

Viele glauben, ein größerer Stapel sei immer besser. Ein größerer Stapel erhöht den Durchsatz, aber jeder Stapel dauert so lange wie seine längste Anfrage. Wählen Sie die Größe, indem Sie Wartezeiten und Durchsatz zusammen beobachten.

Modell-Helfer schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' '  return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Modell-Helfer schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function fragen(nachrichten, probe, max) {' '  try {' '    const res = await fetch(basis + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' '  }' '}' 'module.exports = { fragen };' >> model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warteschlangen-Simulator schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const anfragen = [[\"a\", 0, 4], [\"b\", 1, 3], [\"c\", 2, 6], [\"d\", 3, 2], [\"e\", 9, 3]];' 'function simulieren(liste, maxStapel) {' '  const aus = [];' '  let zeit = 0;' '  let naechste = 0;' '  while (naechste < liste.length) {' '    if (liste[naechste][1] > zeit) zeit = liste[naechste][1];' '    const stapel = [];' '    while (naechste < liste.length && stapel.length < maxStapel && liste[naechste][1] <= zeit) {' '      stapel.push(liste[naechste]);' '      naechste++;' '    }' > server.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warteschlangen-Simulator schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '    const ende = zeit + 2 + Math.max(...stapel.map(function (a) { return a[2]; }));' '    stapel.forEach(function (a) { aus.push({ id: a[0], warten: zeit - a[1], ende: ende }); });' '    zeit = ende;' '  }' '  return aus;' '}' >> server.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warteschlangen-Simulator schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function bericht(maxStapel) {' '  const zeilen = simulieren(anfragen, maxStapel);' '  const warten = zeilen.map(function (z) { return z.warten; });' '  const mittel = warten.reduce(function (a, b) { return a + b; }, 0) / warten.length;' '  console.log(\"Stapel \" + maxStapel + \": Wartezeiten \" + warten.join(\" \") + \", Mittel \" + mittel.toFixed(2) + \", fertig bei \" + zeilen[zeilen.length - 1].ende);' '}' >> server.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warteschlangen-Simulator schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  bericht(1);' '  bericht(3);' '  const q = \"In einem kurzen Satz: Warum fasst ein Server Anfragen zu einem Stapel zusammen?\";' '  const probe = \"Ein Stapel lässt den Chip mehrere Anfragen gleichzeitig bearbeiten, also werden in derselben Zeit mehr Menschen bedient.\";' '  const r = await fragen([{ role: \"user\", content: q }], probe, 60);' '  console.log(\"Das Modell sagte: \" + r.text);' '}' 'main();' >> server.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warteschlangen-Simulator ausführen

Befehl
docker exec -w /home/node/project agent node server.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was der Run druckt

ZeileWas sie zeigt
Stapel 1: Wartezeiten 0 5 9 16 14, Mittel 8.80 ...Einzeln: lange Wartezeiten
Stapel 3: Wartezeiten 0 5 4 3 5, Mittel 3.40 ...Gebündelt: kürzere Wartezeiten
fertig bei 28 und 19Die ganze Schlange ist früher abgearbeitet
Das Modell sagte: ...Ein Satz. Die Worte ändern sich bei jedem Lauf

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.