Tenzro
Deployment

Docker.

Multi-stage Dockerfile builds a Rust 1.85 stage and ships on debian-slim. .gcloudignore excludes apps/, target/, node_modules/.
STATUS
Testnet
TYPE
Guide
STABILITY
Stable
REFERENCE
Dockerfile
01

Build

docker build -t tenzro-node:local .
02

Run

Expose both TCP and UDP on 9000 — tenzro-node defaults to listening on both /ip4/0.0.0.0/tcp/9000 and /ip4/0.0.0.0/udp/9000/quic-v1, the universal transport set that lets any device reach the node via whichever transport NAT permits.

docker run -d --name tenzro \
  --restart unless-stopped \
  -p 8545:8545 \
  -p 9000:9000/tcp -p 9000:9000/udp \
  -p 3001:3001 -p 3002:3002 \
  -v tenzro-data:/data \
  tenzro-node:local \
  --roles validator \
  --data-dir /data
03

Resources

Validators need 4 vCPU, 8 GB RAM, 200 GB NVMe minimum. Model providers add GPU resources for accelerated inference.

04

Accelerator builds

The default image is CPU-only plus the ggml RPC backend for LAN layer-pipeline serving (the cluster-serving cargo default on tenzro-model). Model providers with a GPU build with an accelerator feature so the llama.cpp/ggml runtime forwards to the matching GGML_<X> cmake define. Three GPU images ship as separate Dockerfiles:

docker build -f Dockerfile.cuda   -t tenzro-node:cuda   .   # NVIDIA
docker build -f Dockerfile.rocm   -t tenzro-node:rocm   .   # AMD
docker build -f Dockerfile.vulkan -t tenzro-node:vulkan .   # cross-vendor

Each forwards --features to the corresponding tenzro-model backend. The full set of backend features on tenzro-model: cuda, cuda-no-vmm, rocm, vulkan, metal, sycl, openvino, opencl, musa, cann, webgpu, zdnn, blas. A node compiled with a backend feature detects the device at runtime and reports the compiled set and the active backend through HardwareInfo (compiled_backends / active_backend), separate from the runtime ggml device profile the node advertises for clustering.

Dockerfile.cuda builds on multi-arch CUDA bases, so the same file covers x86_64 and arm64 NVIDIA hosts — Grace-Blackwell, Grace Hopper, Jetson Thor — with no extra flags. Leave CUDAARCHS unset: ggml selects the architecture list itself, and a hand-written list will omit the one the machine has.

The image enables onnx-cuda on both architectures, so the non-LLM modalities run on the GPU alongside the language path. No prebuilt aarch64 GPU build of ONNX Runtime exists — the CPU build is served in its place without an error — so on that architecture the image compiles ONNX Runtime with the CUDA execution provider in a separate stage, targeting sm_90, sm_110, and sm_121. That stage needs CUDA 13.0 or newer and adds roughly an hour and 60 GB of RAM to the build; set ORT_CUDA_ARCHITECTURES to the single target when building for one machine.

Related
← All docs