p4

Die Engine hinter Kvasir: ein ereignisadressiertes Protokoll, in dem Agents Nodes besitzen, Stage-Server Layer halten und Platzierung etwas ist, das ein Betreiber festlegt, statt dass das Netzwerk es errät.

p4 führt ein Modell über mehrere Maschinen aus, indem es das Modell in Stages schneidet — zusammenhängende Scheiben seiner Layer — und jeder Stage einen eigenen Prozess gibt. Ein Agent besitzt die Nodes eines Hosts: Er startet Stage-Server, routet Ereignisse zwischen ihnen und verantwortet ihren Lebenszyklus. Es gibt keinen Scheduler, der entscheidet, wo etwas landet; ein Betreiber schreibt einen Platzierungsplan, lädt ihn, und das Netzwerk bedient danach exakt das.

Der Anfragepfad durch ein p4-Deployment.

browser / SDK
  → gateway :8791              # payment, settlement, the wallet app
  → bridge :19000              # OUTER: session, submit, gather
  → p4 agent                   # owns this host's nodes
  → stage servers              # one process per layer slice
Adressierung

Eine Stage wählt den Agent der nächsten Stage

Wenn eine Stage ihre Layer abgeschlossen hat, reicht sie das Ergebnis an die nächste weiter, indem sie ihren eigenen Agent bittet, eine Verbindung zu dem Agent jener Stage zu öffnen, unter der Adresse, die dieser Agent bewirbt. Die beworbene Adresse ist damit nicht kosmetisch: Sie muss von jedem anderen Host im Ring erreichbar sein und sollte das schnellste Netz benennen, das sie teilen. Bewirb Loopback, und ein Zwei-Host-Ring wählt still sich selbst an.

Lebenszyklus

Eine Zahl hält einen Load zusammen

  • Die Load-Generation wählt, wer lädt, und sie wird bei jeder Session, jeder Inferenz, jeder Abrechnung und jedem Unload auf exakte Gleichheit geprüft. Auf den Maschinen ist sie nirgends festgehalten, der Ladende schreibt sie also auf die Platte, *bevor* das erste Kommando hinausgeht — ohne sie lässt sich ein geladenes Modell nicht einmal abbauen.
  • Die Generation eines Nodes und die Load-Generation sind dieselbe Zahl. Der Adapter prüft die Quell-Generation einer Release-Quittung gegen den Load, zu dem sie gehört, und stoppt den Node bei Abweichung — ein Ring, der mit zwei verschiedenen Zahlen geladen wurde, bedient eine Anfrage und verliert dann seinen Kopf.
  • Ein Betriebsjournal ist Pflicht, bevor ein Modell überhaupt lädt: Es ist der Zulassungsnachweis, der einen Load replay-sicher macht, kein Debugging-Hilfsmittel.
Was es nicht tut

Bewusste Auslassungen

p4 wendet kein Chat-Template an — es leitet einen opaken Prompt weiter und erwartet, dass der Aufrufer das Turn-Format des Modells gerendert hat. Es trifft keine Platzierungsentscheidungen. Und es kennt keinen Begriff davon, wer bezahlt werden soll: Stages melden die Token-Zeilen, die sie ausgeführt haben, und die Abrechnung ist der Vertrag von jemand anderem. Jede dieser Nähte füllt Kvasir in der [Bridge](/wiki/bridge), was die Engine schmal genug hält, um dem Upstream zu folgen.

Der Agent und der native Stage-Server sind ein Release. Ein Agent aus einem neueren Baum scheitert bei READY an einer fehlenden Capability im HELLO des Stage-Servers — nachdem das ganze Modell geladen wurde. Baue beide aus demselben Checkout.