Hoe ElephantPool werkt

Een gedistribueerd inferentienetwerk: open-weight-modellen, bediend door community-GPU's door heel Europa, achter één OpenAI-compatibele API. Het hele pad, van API-aanroep tot ondertekend ontvangstbewijs.

1. De vorm van het systeem

Drie partijen, één contract ertussen.

Jouw codeOpenAI-SDKprompt heentokens terugHTTPSControlelaag (EU)gateway · scheduler · grootboekbewaart nooit promptstelt tokens, betaalt 80%pollHTTPSHostmachinemahout + enginede GPU doet het werkondertekent elke job

De host pollt naar buiten; niets verbindt naar binnen. Die ene beslissing verklaart waarom een GPU achter een thuisrouter zonder enige configuratie werkt, en waarom een host nooit een poort naar internet openzet.

2. Wat er met één verzoek gebeurt

  1. Je aanroep komt aan bij de gateway met een API-sleutel. We controleren de sleutel, schatten de kosten, en bevestigen dat je prepaid saldo en het uitgavenplafond ze dekken.
  2. De job wordt in de wachtrij gezet voor het gevraagde model. Hij draagt je berichten en niets over jou.
  3. Een host claimt hem — één die met een benchmark op precies die machine heeft bewezen dat hij dat model kan bedienen.
  4. De GPU produceert tokens, teruggestreamd door de gateway terwijl ze ontstaan.
  5. De job wordt afgerekend. Tokens geteld, je saldo tot op de micro-cent afgeschreven, de host voor 80% gecrediteerd, en de prompt verdwijnt uit het register. Wat blijft: tellingen en tijdstempels — geen tekst.
  6. De host ondertekent een ontvangstbewijs met een sleutel die zijn machine nooit verlaat: model, exacte build, tokentellingen, timing.

Prompts leven in het geheugen zolang de job duurt. Ze worden niet naar schijf geschreven, niet gelogd en niet voor training gebruikt — door ons noch door hosts.

3. mahout — de agent op de host

mahout is één open-source Rust-binary van zo'n 5 MB, genoemd naar de persoon die de olifant berijdt. Het draait als gewone gebruiker, heeft geen root nodig, en doet zes dingen:

  • Peilt de machine — CPU, RAM, GPU's en hun VRAM.
  • Registreert zich met een eenmalige code uit het dashboard en maakt lokaal een ed25519-identiteit; de privésleutel verlaat de machine nooit.
  • Downloadt en verifieert modelgewichten en engine in een content-geadresseerde cache — tegen vastgepinde SHA-256-digests, tijdens de download en bij elke keer laden.
  • Bewaakt de engine: start hem, houdt zijn gezondheid in de gaten, herstart hem één keer als hij sterft, stopt hem netjes.
  • Pollt en bedient jobs, tokens in batches teruggestreamd.
  • Ondertekent een ontvangstbewijs per job, toegevoegd aan een lokaal logboek dat je offline kunt narekenen met mahout receipts verify.

Het pauzeert zichzelf terwijl jij de machine gebruikt, en mahout uninstall toont een verwijderplan voordat het iets weghaalt. Broncode en installer zijn openbaar.

4. Modellen zijn builds, geen bestanden

Een model is wat een klant vraagt (qwen3.8-27b). Een build is een concreet artefact: één kwantisatie, één engine, één exact bestand van één exacte upstream-revisie, met gepubliceerde SHA-256.

Die scheiding laat één model elke GPU-klasse bereiken. Qwen3.8 27B komt in vijf builds, van Q5_K_M voor een kaart van 24 GB tot IQ2_XXS voor eentje van 8 GB. Het verzoek van de klant verandert nooit; de host kiest de build die zijn kaart echt kan draaien.

KaartBediende buildOp schijf
24 GBQ5_K_M — referentiekwaliteit18,4 GB
16 GBQ3_K_XL — gebalanceerd12,2 GB
12 GBQ2_K_XL — compact9,2 GB
8 GBIQ2_XXS — compact6,8 GB

Een build wordt op een machine pas claimbaar nadat die machine hem heeft geladen en gebenchmarkt. Schattingen bepalen wat het downloaden waard is; metingen bepalen wat het routeren waard is.

5. Engines — en de containervraag

mahout rekent niet zelf. Het stuurt een inferentie-engine aan, en de engine hoort bij de build, niet bij de host — daardoor is een nieuwe engine een toevoeging in plaats van een herschrijving.

EngineVormRolStatus
llama.cpp ~5-MB-binary, geen container, geen root Het consumentenniveau. Eén Vulkan-build bedient AMD, NVIDIA en Intel gelijk. In productie
vLLM containerimage van 10–30 GB, GPU-toolkit Het workstation- en datacenterniveau: continu batchen op schaal, paged attention, native AWQ/FP8, multi-LoRA. Gepland

Dus wat zijn die images nu precies?

Vandaag, op een hostmachine: geen. Geen Docker-image om te pullen, geen daemon om te installeren, geen root om te verlenen. Een binary van 5 MB en een per checksum geverifieerd modelbestand zijn de hele voetafdruk. Dat vinden we de juiste vorm voor een game-pc in een woonkamer, en we wilden niets anders voorwenden om cloud-native te klinken.

Containers tellen aan de andere kant van de markt. Wanneer het vLLM-niveau komt, worden engine-images upstream-images op digest — vllm/vllm-openai@sha256:…, geen bewegende tag — en de lijst van images die een host mag draaien is in de mahout-release zelf gecompileerd. De controlelaag kan je machine zeggen welke toegestane image te starten; een nieuwe introduceren kan ze nooit. De container krijgt geen netwerktoegang naar buiten en een alleen-lezen mount van de geverifieerde gewichten.

Drie regels gelden op dat niveau — dezelfde die de modelgewichten regeren:

  • Vastgepind op digest. Een digest is onveranderlijk en wordt door de runtime geverifieerd; een tag is een belofte die iemand anders kan wijzigen.
  • Allowlist in de client. Een host draait wat zijn eigen binary toestaat, niet wat een server vraagt.
  • Opt-in per host. Niemand wordt wakker met een nieuwe engine.

En de registry?

Voor upstream-engines hosten we helemaal geen images — een openbare image spiegelen kost terabytes aan opslag en levert nul veiligheid op, want de digest bewijst al wat je kreeg. We draaien een eigen registry voor precies één geval: images die wij bouwen. De eerste is de verificatiehook — een engine-build die een cryptografische verbintenis over zijn eigen activaties uitzendt, zodat de output van een job gecontroleerd kan worden in plaats van geloofd. Die image moet van ons zijn: gepubliceerd vanuit onze eigen EU-registry, ondertekend en op digest vastgepind zoals al het andere.

Kortom: vandaag geen images op hosts; upstream-images op digest zodra het vLLM-niveau landt; een eigen registry alleen voor images die we zelf maken.

6. Wat geverifieerd wordt, en door wie

ArtefactVastgepind alsGeverifieerd door
mahout-binarySHA-256, naast de download gepubliceerdde installer, vóór installatie
Inferentie-engineSHA-256, in mahout gecompileerdmahout, bij eerste gebruik
Modelgewichtenupstream-revisie + SHA-256 uit de LFS-pointermahout, tijdens streamen en bij elke keer laden
Engine-images (toekomst)image-digest, allowlist in de releasede container-runtime
Voltooide jobsed25519-handtekening van de hostsleuteliedereen, offline, vanuit het ontvangstbewijs

Een mislukte controle is geen waarschuwing: het artefact wordt weggegooid en de job draait niet. Liever een host die niets bedient dan iets dat we niet exact kunnen benoemen.

7. Het geld

Klanten betalen per token, in euro's, per model, zonder abonnement en zonder minimum: je laadt een prepaid saldo op, en elke API-sleutel draagt een uitgavenplafond zodat een op hol geslagen loop het niet kan leegtrekken. Hosts ontvangen 80% van de omzet van de jobs die ze bedienen, per SEPA-overschrijving vanaf € 50.

Het dashboard drukt de inkomsten van een host uit in euro's per bedieningsuur, berekend uit de decodeersnelheid die zijn eigen kaart heeft gemeten — nooit een projectie, en nooit een maandcijfer, want dat zou vraag beloven die we niet kunnen beloven.

8. Waar we eerlijk zijn over grenzen

  • De engine draait vandaag als onbevoorrecht kindproces gebonden aan localhost, niet in een syscall-sandbox. Verharding (seccomp, Landlock, containers zonder egress) is gepland en nog niet gebouwd.
  • Linux en Windows x86_64 zijn de enige uitgebrachte hostplatformen. macOS is in principe porteerbaar en in de praktijk niet geleverd.
  • Outputverificatie (activatie-verbintenissen) is ontworpen en nog niet afgedwongen; de garanties van vandaag zijn ontvangstbewijzen en reputatie.

De technische specificatie maakt overal onderscheid tussen wat vandaag draait en wat ontworpen is. mahouts eigen AGENTS.md in de openbare repository doet hetzelfde.

Beginnen

Bouwen: richt de basis-URL van je SDK op https://app.elephantpool.ai/api/gateway/v1 en geef een model-id uit de catalogus mee.
Hosten: curl -fsSL https://elephantpool.ai/install-mahout.sh | sh # Windows (PowerShell) irm https://elephantpool.ai/install-mahout.ps1 | iex, en koppel daarna de machine vanuit je dashboard.

Model catalogue · Knowledge base · Blog · Sign in