---
sidebar_position: 1
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 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

| Path | Best for | Time |
|------|----------|------|
| [**Quickstart with the `lium` CLI**](./quickstart.md) | Most providers — single command sets up the node end-to-end | ~5 min |
| [Confidential VM (CVM)](./cvm.md) | TDX-isolated nodes for sensitive customer workloads | Advanced |

## Required follow-ups

After the node is running, complete the setup:

- [**Docker storage setup**](./docker-storage.md) — 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**](./gpu-splitting.md) — optional, lets a single node serve multiple customers at once.
- [**GPU Profiling (ncu)**](./gpu-profiling.md) — optional, opens GPU performance counters so renters can run Nsight Compute. Makes the node whole-host-only while enabled.
- [**GPU power cap**](./gpu-power-cap.md) — 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.

:::info 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](../rewards/emission.mdx#unrented-pool) only if at least one of [GPU splitting](./gpu-splitting.md), [GPU Profiling (ncu)](./gpu-profiling.md), or an attested [confidential VM](./cvm.md) 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](../troubleshooting.md#6-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`](https://github.com/Datura-ai/lium-io/blob/main/neurons/executor/EXECUTOR_UPDATE.md) covers that case.

```bash
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:

```bash
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`](https://github.com/Datura-ai/lium-io/blob/main/neurons/executor/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](./gpu-power-cap.md#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](../portal/managing-nodes.md) page.
