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

Was Quantisierung an einem Modell ändert

Nach dieser Lektion: Ich kann sagen, was verloren geht, wenn Zahlen kleiner werden.

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

Kleinere Zahlen, kleineres Modell

Ein Modell zu quantisieren heißt, jede seiner Zahlen mit weniger Bit zu speichern, damit es weniger Speicher braucht. Der Preis ist, dass jede Zahl gerundet wird.

Das ist wichtig, weil Runden der Weg ist, ein großes Modell auf einen kleinen Rechner zu pressen. Sie sollten wissen, was das Pressen kostet, bevor Sie dem Ergebnis trauen.

Am Ende dieser Lektion

Notiz

Ich kann sagen, was verloren geht, wenn Zahlen kleiner werden.

Schlüsselwörter

BegriffWas er bedeutet
QuantisierenZahlen auf wenige feste Stufen runden
Stufeeiner der Werte, auf die eine Zahl gerundet wird
Skalader größte Betrag in der Tabelle
Fehlerder Abstand zwischen einer Zahl und ihrer gerundeten Kopie
Ausreißerein Wert, der viel größer ist als die übrigen

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

Weniger Bit heißt weniger Stufen

Mit 8 Bit kann eine Zahl auf 255 Stufen liegen. Mit 4 Bit sind es nur 15, mit 2 Bit nur 3. Jede Zahl wandert zur nächsten Stufe.

Zum Wählen der Stufen teilen Sie jeden Wert durch die Skala (den größten Betrag), multiplizieren mit der obersten Stufe und runden. Um eine Zahl zurückzubekommen, kehren Sie die Schritte um.

Acht Zahlen bei vier Genauigkeiten

BitStufenBehaltene ganze ZahlenSchlimmster Fehler
8255127 -59 10 71 -124 44 -7 900,0031
4157 -3 1 4 -7 2 0 50,0586
373 -1 0 2 -3 1 0 20,12
231 0 0 1 -1 0 0 10,42

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

Wo Runden am meisten wehtut

Kleine Zahlen leiden zuerst. Bei 4 Bit wurde der Wert -0,05 zu 0 und war damit verloren. Bei 2 Bit wurden vier der acht Zahlen zu 0.

Ein einziger Ausreißer schadet allen. Ist ein Wert 9,0, dann ist die Skala 9,0, jede Stufe liegt weit auseinander, und alle kleinen Zahlen runden auf 0.

Ein häufiger Fehler

Warnung

Viele glauben, weniger Bit mache alles nur ein wenig unschärfer. Es ist nicht gleichmäßig. Kleine Zahlen können verschwinden, und ein Ausreißer kann die ganze Tabelle verderben. Messen Sie immer den Fehler, bevor Sie einer quantisierten Tabelle trauen.

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.

Quantisierer schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const werte = [0.9, -0.42, 0.07, 0.5, -0.88, 0.31, -0.05, 0.64];' 'function quantisieren(liste, bits) {' '  const spitze = Math.pow(2, bits - 1) - 1;' '  const skala = Math.max(...liste.map(Math.abs));' '  return liste.map(function (w) { return Math.floor(w / skala * spitze + 0.5); });' '}' > quant.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.

Quantisierer schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function wiederherstellen(q, liste, bits) {' '  const spitze = Math.pow(2, bits - 1) - 1;' '  const skala = Math.max(...liste.map(Math.abs));' '  return q.map(function (n) { return n * skala / spitze; });' '}' >> quant.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.

Quantisierer schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function schlimmster(liste, bits) {' '  const zurueck = wiederherstellen(quantisieren(liste, bits), liste, bits);' '  let s = 0;' '  liste.forEach(function (w, i) { s = Math.max(s, Math.abs(w - zurueck[i])); });' '  return s;' '}' >> quant.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.

Quantisierer schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const bits of [8, 4, 3, 2]) {' '    console.log(bits + \" Bit: \" + quantisieren(werte, bits).join(\" \") + \" | schlimmster Fehler \" + schlimmster(werte, bits).toFixed(4));' '  }' '  console.log(\"mit einer 9.0 dazu, 4 Bit, schlimmster Fehler \" + schlimmster(werte.concat([9.0]), 4).toFixed(4));' '  const q = \"In einem kurzen Satz: Was geht verloren, wenn Zahlen mit weniger Bit gespeichert werden?\";' '  const probe = \"Jede Zahl wird auf eine nahe Stufe gerundet, also gehen kleine Unterschiede zwischen den Zahlen verloren.\";' '  const r = await fragen([{ role: \"user\", content: q }], probe, 60);' '  console.log(\"Das Modell sagte: \" + r.text);' '}' 'main();' >> quant.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.

Quantisierer ausführen

Befehl
docker exec -w /home/node/project agent node quant.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
8 Bit: ... schlimmster Fehler 0.0031Fast nichts geht verloren
4 Bit: 7 -3 1 4 -7 2 0 5 ...Aus 0,05 wurde 0
2 Bit: ... schlimmster Fehler 0.4200Die meisten kleinen Werte sind weg
mit einer 9.0 dazu ...Ein Ausreißer macht den Fehler groß
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.