Networks that run their own node on the board

Networks that run their own node on the board

Another kind of source does not rent the board to a stranger's container: the host runs the network's own node, which takes the network's work and is paid for it. Inference networks serve model requests (some for NVIDIA boards, some for Apple silicon Macs); training networks pay for contributed training; render, transcode and cloud-gaming networks pay per job or per stream; zero-knowledge proving networks and proof-of-work mining pay for proofs. A node runs only while its source earns the host at least as much per board-hour as every other source with a value (see below).

Stado does not install a network's node. The operator declares it as a service from the network's official release (stado service declare), then declares the node and what it holds while it runs:

stado market node add <name> --source <source id> --target <host> \
  --service <service> --cpu-cores N --ram-gb N --vram-gb N [--disk-gb N]
stado market node edit <name> --listed true      # offer it
stado market node follow <name> --idle-window-s 600 --poll-interval-s 60
stado market node list | show <name> | remove <name>   [--json]

add refuses a name already taken, a source stado market sources does not declare, a host that declares no such service, and a node that holds nothing (it could not be kept off a busy board). A node is declared withdrawn; edit --listed true offers it. follow holds the role lock market-node--<name> for its life. Once the host has had no fleet work for --idle-window-s, and the node is offered, it takes the node's capacity reservation on its host, as stado capacity hold does, and starts the service; a host with no room is not started, and the run record says not started: <the reservation's refusal>. The moment fleet work appears for the host or the node is withdrawn, it stops the service and releases the reservation. Each transition is kept at state/market/node-runs/<name>.json and printed by list and show. --dry-run --once prints the next decision without starting or stopping anything (--once without --dry-run is refused: a node started by one poll would run on with nothing holding its reservation). remove refuses a node its loop has running. What the network paid is its own statement, kept with stado market payout record --source <source id> --host <host>, which stado market earnings adds to the day. Desktop's Registry screen lists, declares, offers, withdraws, removes and previews nodes.

Every finished run is kept at state/market/node-hours/<name>/<start>.json with its source, host and times. A source's value on a host is what it paid there (kept payouts, each at its own rate) divided by the hours its nodes ran there, a run still going counted up to now; Vast.ai's is the gross of the days stado market earnings kept over their hours. Both are read over the autonomy policy's freshness.pricing_max_age_seconds, the window the board allocator prices in. On every poll follow stops its node, record stopped: <source> earns X USD per board-hour and <other> earns Y, while another source with a value earns more; a source with no value yet (no hours run, no payout kept, an unpriced payout) keeps running, since only running values it, and a fleet with no autonomy policy is not compared, said in the log. The values are income: the energy a use draws is not subtracted per use, since the beacon measures a board, not what each use on it drew.

A storage, RPC or indexing network's node fills disk, so a node declares what its data may take with --disk-gb (edit --disk-gb changes it). The host's beacon publishes disk_headroom_gb, what may still be written before the disk-full rule's 80 % threshold on the volume the rule judges (or disk_headroom_unread with why), and follow starts the node only while its disk fits inside that headroom: a node that does not fit, a host whose beacon states no headroom yet, and one whose headroom is unread are each not started and stopped if running, the run record naming which (the node's N GiB of disk does not fit <host>'s M GiB before the disk-full rule's 80% threshold). So a sold disk never eats the space the rule keeps free.

A network that sells the host's connection (bandwidth, storage, RPC, render, transcode, cloud gaming) states what the connection must carry. add and edit take it as --min-download-mbps, --min-upload-mbps and --requirements-source <the network's page that states them>; a figure without its source, a source without a figure, and a figure at or below zero are refused, and edit with any of them replaces the whole set. follow then starts the node only while the host's beacon carries a current bandwidth measurement (host.bandwidth_probe, as stado market readiness reads it, Vast) in both directions at or above the floors, and stops it otherwise, the run record naming which (the host's measured upload is 12.0 Mbit/s, below the 20 Mbit/s <source> requires, or that the bandwidth is unmeasured or stale). Board memory is the node's own --vram-gb reservation, admitted through capacity like any workload. show prints the requirements; Desktop's Registry screen declares and edits them.

A decentralized inference network's node serves a model; it serves the fleet's own inference deployment, the same engine, model and board the registry declares, named with --deployment (edit --deployment "" stops it serving one). add and edit refuse a deployment that is not declared, runs on another host, is not desired running, or whose model license was never read or whose model chain declares none, naming which; follow checks the same on every poll and treats a failure like withdrawal, so the model is offered only while its board carries no fleet work and its license is declared. show prints serves inference deployment <name> to its network. What the network paid is kept with stado market payout record, as for any node.

Source: this website