Wie ein Canary-Rollout funktioniert
Ein Canary-Rollout schickt einen kleinen Anteil der Nutzer zu einer Änderung, bevor alle sie bekommen. Ist die Änderung schlecht, trifft der Fehler nur wenige Menschen.
Man wechselt zuerst nur einen kleinen Anteil. Diese Lektion macht den Anteil genau und die Entscheidung zu einer Regel, die vor der Änderung feststeht.
Am Ende dieser Lektion
Notiz
Ich kann einen kleinen Anteil des Verkehrs zu einer Änderung schicken und nach einer Regel entscheiden.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Canary | die kleine Gruppe, die eine Änderung zuerst bekommt | |
| Anteil | der Prozentsatz der Nutzer im Canary | 5 |
| Eimer | eine feste Zahl von 0 bis 99 für jeden Nutzer | |
| Ausweiten | die Änderung mehr Nutzern geben | |
| Zurückrollen | die Änderung wieder wegnehmen | |
| Spielraum | um wie viel schlechter der Canary sein darf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein fester Eimer entscheidet, wer dabei ist
Wählen Sie Nutzer nicht bei jeder Anfrage zufällig, sonst springt eine Person zwischen alter und neuer Version hin und her. Geben Sie jedem Nutzer einen Eimer von 0 bis 99, der sich nie ändert.
Ein Nutzer ist im Canary, wenn sein Eimer kleiner als der Anteil ist. Bei einem Anteil von 20 sind die Eimer 0 bis 19 dabei.
Durchgerechnetes Beispiel: fünf Nutzer
| Nutzer | Eimer | Dabei bei Anteil 5 | Dabei bei Anteil 20 | Dabei bei Anteil 50 |
|---|---|---|---|---|
| g10 | 0 | Ja | Ja | Ja |
| g8 | 13 | Nein | Ja | Ja |
| g14 | 28 | Nein | Nein | Ja |
| g1 | 64 | Nein | Nein | Nein |
| g6 | 99 | Nein | Nein | Nein |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein kleiner Canary ohne Fehler beweise, dass die Änderung sicher ist. Fünf Nutzer mit wenigen Anfragen beweisen sehr wenig. Legen Sie vorher eine Mindestzahl von Anfragen fest und warten Sie, bis der Canary so viele hat.
Schreiben Sie die Regel vor dem Rollout
Vergleichen Sie den Fehlerprozentsatz des Canary mit dem der alten Version auf derselben Stufe. Rechnen Sie mit ganzzahliger Division, abgerundet.
Warten Sie, wenn der Canary weniger als 50 Anfragen hat. Rollen Sie zurück, wenn sein Prozentsatz um mehr als den Spielraum von 2 über dem alten liegt. Sonst weiten Sie aus.
Durchgerechnetes Beispiel: drei Stufen
| Anteil | Canary-Anfragen | Canary-Fehler | Alter Prozentsatz | Entscheidung |
|---|---|---|---|---|
| 5 | 40 | 1 | 1 | Warten, nur 40 Anfragen |
| 20 | 180 | 4 | 2 | Ausweiten, 2 liegt nicht über 4 |
| 50 | 300 | 18 | 2 | Zurückrollen, 6 liegt über 4 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Modellhilfe 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.
Die Modellhilfe 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.
Das Canary-Skript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'function eimer(nutzer) {' ' let summe = 0;' ' for (let i = 0; i < nutzer.length; i++) summe = summe + nutzer.charCodeAt(i);' ' return (summe * 7) % 100;' '}' 'function imCanary(nutzer, anteil) { return eimer(nutzer) < anteil; }' 'const nutzerListe = [];' 'for (let i = 1; i <= 20; i++) nutzerListe.push(\"g\" + i);' > canary.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.
Das Canary-Skript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const stufen = [' ' { anteil: 5, cn: 40, cf: 1, an: 760, af: 15 },' ' { anteil: 20, cn: 180, cf: 4, an: 640, af: 13 },' ' { anteil: 50, cn: 300, cf: 18, an: 450, af: 9 },' '];' 'function prozent(f, n) { return Math.floor(f * 100 / n); }' 'function entscheiden(s) {' ' if (s.cn < 50) return \"warten\";' ' return prozent(s.cf, s.cn) > prozent(s.af, s.an) + 2 ? \"zurückrollen\" : \"ausweiten\";' '}' >> canary.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.
Das Canary-Skript schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' [5, 20].forEach(function (anteil) {' ' const drin = nutzerListe.filter(function (g) { return imCanary(g, anteil); });' ' console.log(\"Anteil \" + anteil + \": \" + drin.join(\" \"));' ' });' ' for (const s of stufen) {' ' const d = entscheiden(s);' ' console.log(\"Stufe \" + s.anteil + \": Canary \" + prozent(s.cf, s.cn) + \" Prozent, alt \" + prozent(s.af, s.an) + \" Prozent -> \" + d);' ' if (d === \"zurückrollen\" || d === \"warten\") break;' ' }' ' const f = \"Schreiben Sie in einem kurzen Satz, warum man eine Änderung zuerst nur wenigen Nutzern zeigt.\";' ' const probe = \"Ist die Änderung schlecht, trifft der Fehler nur wenige Menschen, und man macht sie schnell rückgängig.\";' ' const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> canary.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.
Den Canary ausführen
docker exec -w /home/node/project agent node canary.jsHier 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 ausgibt
| Zeile | Was sie zeigt |
|---|---|
| Anteil 5: g10 | Der eine Nutzer im Canary bei 5 |
| Anteil 20: g7 g8 g10 g11 g12 g20 | Sechs Nutzer. g10 ist weiter dabei |
| Stufe 5: Canary 2 Prozent, alt 1 Prozent -> warten | Unter 50 Anfragen, also abwarten |
| Das Modell sagte: ... | Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.