Operator hub

Provide GPU capacity for a FLOP miner

devnet · next · development

Last updated 2026-10-02

Provide GPU capacity for a FLOP miner

Current scope: a GPU provider can run the devnet miner on an owned Linux host or rented Docker-capable NVIDIA VM. This is an operator procedure, not a permissionless production onboarding promise. SOFT is the working development tier. HARD requires an attestation bridge that the repository does not currently ship.

Choose a host

The validated serving drill used an NVIDIA A40 with Qwen2.5-0.5B-Instruct, BF16, and a same-host worker/backend pair. Other NVIDIA cards may work if they fit the model, but they need their own throughput and TOPLOC check. GPU memory alone does not establish an accepted cap: chain-backed calibration measures delivered work across the whole host. More attached GPUs are counted once in aggregate. Faster throughput means a larger capacity-stake requirement. Size that stake using live chain constants before renting capacity.

Check the offered machine before paying for a long lease:

CheckWhy it matters
Full VM or owned host with Docker, Compose, NVIDIA driver and Container ToolkitThe backend Compose service reserves an NVIDIA GPU and mounts a local checkpoint. A provider's container-only product may forbid nested Docker.
GPU visible to nvidia-smi on host and in a Docker GPU testProves the rental actually exposes the card to the container runtime.
Enough disk for the exact checkpoint; persistent env, seed and worker volumeModel root and calibration state must survive restarts.
Private tailnet plus inbound 8645 from the gatewayThe worker needs chain/DA egress; gateway needs a private session path.
One approved, pinned worker/backend image pairAvoids drift in model, capture, and protocol behavior.
Provider deletion path and billing readbackStopping Compose does not stop VM billing.

GPU.ai VM is the documented candidate for same-host Compose. Its container instances cannot run Docker and it documents no public inbound port, so use the VM with tailnet access. The current repository notes have not verified whether a chosen GPU.ai VM offering exists with Docker and NVIDIA runtime preinstalled. Check that before committing spend. An owned Docker GPU server follows the same Compose path. The core FLOP GPU-provider library in infra/vultr/gpu_providers/ surveys, provisions, monitors, and destroys provider instances; it does not by itself enroll an inference miner on-chain or satisfy model/calibration gates.

RunPod has separate pods and serverless endpoints. Its pod proxy can serve the vLLM backend, but the current pod creation script passes only MODEL_NAME. It cannot mount/re-measure the checkpoint and pass the registered modelpack MODEL_HASH, so an onboarded worker's turns are rejected (#1995). The pod proxy also has no authentication (#1398). The serverless backend currently returns 503 for /session/open. Do not use either path as the current end-to-end miner procedure.

Provision and connect

  1. Rent or prepare a GPU VM, confirm its GPU and Docker runtime, then place it on the private FLOP tailnet with the miner tag. Keep SSH restricted to your administration path; keep the backend's unauthenticated port off public interfaces.
  2. Obtain the approved image SHA tags and a read-only private GHCR credential. Until public distribution exists, https://images.flop.invalid is a placeholder for operator access instructions.
  3. Use the devnet operator's pre-registered model for the documented drill. Obtain the approved 40-character checkpoint commit from the model operator, then read its on-chain MODEL_HASH (modelpack root) with flop model get, as in Run a FLOP miner. That command does not return the checkpoint commit. A model publisher with a measured backend capture can onboard a new SOFT checkpoint with flop model onboard --soft, following the same guide; do not claim a TEE platform for this non-attested backend. Download the exact revision to the host, remove download metadata, and confirm its modelpack root equals the on-chain hash; if it differs, stop. Prepare a separate miner signer file and fund/register that account. A validator account must not double as this miner account.
  4. Fill one private env file from infra/devnet/devnet-ts/miners/miner.env.example, pin both images, set RPC, model/policy binding, signer, tailnet address, auth token and DA URL. Use the same-host Compose pair described in Run a FLOP miner.
  5. Ask the private ghost-task issuer to enroll the miner and the gateway to allowlist its tailnet URL, token, account, model, and current enclave key. The key changes each worker start. https://ops.flop.invalid is a placeholder for this access process.

Accept capacity and operate

The supervisor reads live chain constants and accepts a cap only after issuer jobs and a minimum finalized-block window. The source runtime requires 64 jobs over 600 blocks; a deployed chain may still require 512 over 21,600. The worker tops up capacity self-stake before acceptance. Watch /session/info for calibration.ready and is_ready; GET /session/info itself requires the SESSION_AUTH_TOKEN bearer header. Use the token-safe probe in Run a FLOP miner, not an unauthenticated public request. Sessions remain closed until calibration is accepted. Renewal requires eight fresh jobs and verified work, with a seven-day lease. Changing the GPU inventory or hardware fingerprint triggers the initial flow again. Keep the backend loaded through calibration; it measures served throughput.

For each planned upgrade, record image SHA tags, model revision, policy hash, cap, and host inventory. Recreate the two Compose services with the same persistent volume and seed; check backend /health, worker /session/info, and gateway reachability. Refresh the regenerated enclave key in the gateway allowlist. When retiring a rental, shut down Compose and delete the provider instance; verify the provider console reports it gone and billing stopped.

The repository files infra/vultr/gpu_providers/ONBOARDING.md and infra/devnet/devnet-ts/miners/README.md contain operator-specific commands. Their private credentials, endpoints, and image distribution still need a public release path. Compare outside operator patterns in the source-backed docs/research/operator-provider-references.md (repository access pending).