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.
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
- 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.
- De job wordt in de wachtrij gezet voor het gevraagde model. Hij draagt je berichten en niets over jou.
- Een host claimt hem — één die met een benchmark op precies die machine heeft bewezen dat hij dat model kan bedienen.
- De GPU produceert tokens, teruggestreamd door de gateway terwijl ze ontstaan.
- 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.
- 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.
| Kaart | Bediende build | Op schijf |
|---|---|---|
| 24 GB | Q5_K_M — referentiekwaliteit | 18,4 GB |
| 16 GB | Q3_K_XL — gebalanceerd | 12,2 GB |
| 12 GB | Q2_K_XL — compact | 9,2 GB |
| 8 GB | IQ2_XXS — compact | 6,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.
| Engine | Vorm | Rol | Status |
|---|---|---|---|
| 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
| Artefact | Vastgepind als | Geverifieerd door |
|---|---|---|
| mahout-binary | SHA-256, naast de download gepubliceerd | de installer, vóór installatie |
| Inferentie-engine | SHA-256, in mahout gecompileerd | mahout, bij eerste gebruik |
| Modelgewichten | upstream-revisie + SHA-256 uit de LFS-pointer | mahout, tijdens streamen en bij elke keer laden |
| Engine-images (toekomst) | image-digest, allowlist in de release | de container-runtime |
| Voltooide jobs | ed25519-handtekening van de hostsleutel | iedereen, 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.
Modelcatalogus · Kennisbank · mahout downloaden · Broncode · Whitepaper · Technische specificatie