Passt dieses Modell auf meinen Rechner
Der Speicherbedarf eines Modells ist der Platz für seine Zahlen plus der Platz für den Prompt, den es gerade liest. Sie können ihn mit einer kurzen Rechnung bestimmen, bevor Sie etwas herunterladen.
Das ist wichtig, weil ein Modell, das nicht passt, gar nicht erst startet. Eine falsche Schätzung kostet einen Nachmittag und manchmal den Preis eines größeren Rechners.
Am Ende dieser Lektion
Notiz
Ich kann berechnen, wie viel Speicher ein Modell braucht.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Parameter | eine Zahl, die das Modell gelernt hat | |
| Gewichte | alle Parameter zusammen | |
| Genauigkeit | wie viele Bit jede Zahl speichern | 16 Bit |
| Cache | Speicher für den bisher gelesenen Prompt | |
| Gigabyte (GB) | tausend Millionen Bytes |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Gewichte sind Parameter mal Bytes
Ein Modell ist im Kern eine sehr lange Liste von Zahlen. Jede Zahl ist ein Parameter. Jeder Parameter wird mit einer bestimmten Zahl von Bit gespeichert, und 8 Bit sind ein Byte.
Die Gewichte brauchen also Parameter mal Bytes je Parameter. Ein Modell mit 8 Milliarden Parametern bei 16 Bit (2 Bytes) braucht allein für die Gewichte 16 Gigabyte.
Modell A, nur die Gewichte
| Genauigkeit | Bytes je Zahl | Gewichte bei 8 Milliarden |
|---|---|---|
| 32 Bit | 4 | 32 GB |
| 16 Bit | 2 | 16 GB |
| 8 Bit | 1 | 8 GB |
| 4 Bit | 0,5 | 4 GB |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein langer Prompt braucht einen Cache
Beim Lesen führt ein Modell Notizen zu jedem bisherigen Token. Diese Notizen sind der Cache. Ein Token braucht 2 mal die Schichten mal die Breite mal die Bytes.
Für Modell A sind das 2 x 32 x 1024 x 2 = 131.072 Bytes je Token. Bei 8000 Token ist der Cache etwa 1 GB groß. Der Cache wächst mit dem Prompt, die Gewichte nicht.
Modell A, Cache nach Promptlänge
| Token im Prompt | Cache |
|---|---|
| 1000 | 0,13 GB |
| 8000 | 1,05 GB |
| 32.000 | 4,19 GB |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, ein Modell mit 16 GB Download brauche zum Laufen 16 GB. Die Gewichte sind nur ein Teil. Der Cache wächst mit dem Prompt, und ein Rechner braucht noch freien Speicher. Addieren Sie den Cache und lassen Sie dann ein Fünftel frei.
Modell-Helfer schreiben, Teil 1
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
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.
Speicherrechner schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const modell = { milliarden: 8, schichten: 32, kvBreite: 1024 };' 'const BITS = [32, 16, 8, 4];' 'function gewichteGB(bits) {' ' return modell.milliarden * bits / 8;' '}' > speicher.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.
Speicherrechner schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function cacheGB(token) {' ' const jeToken = 2 * modell.schichten * modell.kvBreite * 2;' ' return jeToken * token / 1000000000;' '}' >> speicher.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.
Speicherrechner schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"Modell A: 8 Milliarden Parameter, Cache mit 16 Bit\");' ' for (const bits of BITS) {' ' const gesamt = gewichteGB(bits) + cacheGB(8000);' ' console.log(bits + \" Bit: Gewichte \" + gewichteGB(bits) + \" GB, gesamt \" + gesamt.toFixed(2) + \" GB\");' ' }' ' console.log(\"Cache bei 1000 Token: \" + cacheGB(1000).toFixed(2) + \" GB\");' ' console.log(\"Cache bei 32000 Token: \" + cacheGB(32000).toFixed(2) + \" GB\");' >> speicher.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.
Speicherrechner schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' const q = \"In einem kurzen Satz: Warum braucht ein längerer Prompt mehr Speicher?\";' ' const probe = \"Jedes Token des Prompts kommt in den Cache, den das Modell führt, also wird der Cache mit dem Prompt größer.\";' ' const r = await fragen([{ role: \"user\", content: q }], probe, 60);' ' console.log(\"Das Modell sagte: \" + r.text);' '}' 'main();' >> speicher.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.
Speicherrechner ausführen
docker exec -w /home/node/project agent node speicher.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Es wird nichts heruntergeladen
Dieses Labor hat keine GPU und hält keine Modelldateien. Modell A ist erfunden, und jede Größe ist eine Rechnung. Der eine kurze Aufruf an das Modell des Labors formuliert nur einen Satz.
Antwortet kein Modell, druckt der Run zuerst Aufgezeichnete Probe, und die Rechnungen bleiben gleich.
Was der Run druckt
| Zeile | Was sie zeigt |
|---|---|
| 32 Bit: Gewichte 32 GB, gesamt 33.05 GB | Volle Größe passt auf keinen kleinen Rechner |
| 4 Bit: Gewichte 4 GB, gesamt 5.05 GB | Weniger Bit, viel weniger Speicher |
| Cache bei 32000 Token: 4.19 GB | Ein langer Prompt kostet wirklich |
| Das Modell sagte: ... | Ein Satz. Die Worte ändern sich bei jedem Lauf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.