Skip to main content

Nodes

A node is a GPU machine you connect to your provider so it can be rented out by Lium customers. A provider alone earns nothing — your idle payout and your rental revenue both come from the nodes you bring online.

Pick your setup path​

PathBest forTime
Quickstart with the lium CLIMost providers — single command sets up the node end-to-end~5 min
Confidential VM (CVM)TDX-isolated nodes for sensitive customer workloadsAdvanced

Required follow-ups​

After the node is running, complete the setup:

  • Docker storage setup — required for GPU splitting today, and rolling out to every node soon. Migrates /var/lib/docker to an overlay2 + xfs (pquota, ftype=1) backing.
  • GPU splitting — optional, lets a single node serve multiple customers at once.
  • GPU Profiling (ncu) — optional, opens GPU performance counters so renters can run Nsight Compute. Makes the node whole-host-only while enabled.
  • GPU power cap — diagnostic, check it when a node stops earning its idle payout. A node whose container cannot set a GPU power limit stays rentable but earns nothing while idle.
8× H200 / B200 / B300: offer splitting, profiling, or a CVM

A full 8× node of a flagship model (H200, B200, B300) earns the unrented incentive only if at least one of GPU splitting, GPU Profiling (ncu), or an attested confidential VM is in place. With none of the three, the node stays active and rentable but earns no idle payout. Enabling GPU Profiling suspends GPU splitting — open counters make the node whole-host-only — so pick the one that fits your fleet.

One node, one fixed set of GPUs​

The GPU set of a listed node is fixed. The validator records the GPU UUIDs it sees on the node's first successful check. Every later check is compared against that set. A card that is not visible fails the check as GPU_UUID_CHANGED (as GPU_MISSING once the anchor rule, the validator flag GPU_ANCHOR_HARD_ENABLED, is switched on; it is off today). The node scores 0 until the full set is back. A card that was not in the set (a swapped card, or a cloud VM rebuilt on another host) fails the check as GPU_UUID_CHANGED. The recorded set is kept, so the node keeps scoring 0. To list a different set of GPUs, delete the node in the portal and register it again. It starts as a new node: its uptime starts at 0 and penalties on the old node stay. See Troubleshooting → Validator reason codes.

Automatic updates​

Your node updates itself. The executor-watchtower-1 container reads the digest of the current runner image from https://lium.io/api/watchtower/digest at start and every 5 minutes. A digest is the identity of an image: sha256: followed by 64 hex characters. The validator signs the response. When your runner runs a different digest, the updater pulls the runner by that digest and recreates it. It never pulls by tag, so a Docker Hub mirror on your network cannot hold your node on an old image.

To check your node, run this on the host (EXTERNAL_PORT is in your .env); runner.update_pending must be false. A null means one of the two digests is unknown and runner.error says which; EXECUTOR_UPDATE.md covers that case.

curl -s http://127.0.0.1:<EXTERNAL_PORT>/update-status

If your stack was installed before 18 September 2026, it still runs the old updater, which never replaced itself. Run this once:

cd ~/compute-subnet/neurons/executor && git pull && docker compose pull watchtower && docker compose up -d watchtower

The node container restarts once. Pods keep running. EXECUTOR_UPDATE.md in the node repository covers each step and the checks to run afterwards. The same case, seen from a node whose image stopped moving, is described under GPU power cap → The standard stack, which stopped updating.

Operate your nodes​

Day-to-day tasks (registering in the portal, updating prices, notice periods, deletion, troubleshooting) live under the Provider Portal → Managing Nodes page.