Skip to main content

Node

Setup project​

Requirements​

  • Ubuntu OS installed
  • install docker

Node Minimum Requirements​

  • Network: 50 Mbps download speed
  • Storage: 100 GB free available space
  • RAM: 8 GB available memory

Ensure that your Node meets these requirements before proceeding with the setup.

Step 1: Clone project​

git clone https://github.com/Datura-ai/compute-subnet.git

Step 2: Install Required Tools​

Run following command to install required tools:

cd compute-subnet && chmod +x scripts/install_executor_on_ubuntu.sh && scripts/install_executor_on_ubuntu.sh

if you don't have sudo on your machine, run

sed -i 's/sudo //g' scripts/install_executor_on_ubuntu.sh

to remove sudo from the setup script commands

Step 3: Configure Docker for Nvidia​

Please follow this to setup docker for nvidia properly

Step 4: Install and Run​

  • Go to node root
cd neurons/executor
  • Add .env in the project
cp .env.template .env

Add the correct miner wallet hotkey for MINER_HOTKEY_SS58_ADDRESS. You can change the ports for INTERNAL_PORT, EXTERNAL_PORT, SSH_PORT based on your need.

  • INTERNAL_PORT: internal port of your node docker container
  • EXTERNAL_PORT: external expose port of your node docker container
  • SSH_PORT: ssh port map into 22 of your node docker container
  • SSH_PUBLIC_PORT: [Optional] ssh public access port of your node docker container. If SSH_PUBLIC_PORT is equal to SSH_PORT then you don't have to specify this port.
  • MINER_HOTKEY_SS58_ADDRESS: the miner hotkey address
  • RENTING_PORT_RANGE: The port range that are publicly accessible. This can be empty if all ports are open. Available formats are:
    • Range Specification(from-to): Miners can specify a range of ports, such as 2000-2005. This means ports from 2000 to 2005 will be open for the validator to select.
    • Specific Ports(port1,port2,port3): Miners can specify individual ports, such as 2000,2001,2002. This means only ports 2000, 2001, and 2002 will be available for the validator.
    • Default Behavior: If no ports are specified, the validator will assume that all ports on the node are available.
  • RENTING_PORT_MAPPINGS: Internal, external port mappings. Use this env when you are using proxy in front of your nodes and the internal port and external port can't be the same. You can ignore this env, if all ports are open or the internal and external ports are the same. example:
    • if internal port 46681 is mapped to 56681 external port and internal port 46682 is mapped to 56682 external port, then RENTING_PORT_MAPPINGS="[[46681, 56681], [46682, 56682]]"

Note: Please use either RENTING_PORT_RANGE or RENTING_PORT_MAPPINGS and DO NOT use both of them if you have specific ports are available.

  • Run project
docker compose up -d

Step 5 (Optional): Enable Sysbox for +20% Incentive Bonus​

Sysbox is a container runtime that allows users to run Docker-in-Docker securely inside pods — without --privileged mode. Many customers need this for building custom Docker images, running CI/CD pipelines, and other system-level workloads.

Without Sysbox, your node receives a 20% penalty on its emission score. Enabling it takes ~5 minutes.

Install Sysbox​

cd compute-subnet/neurons/executor
chmod +x nvidia_docker_sysbox_setup.sh
./nvidia_docker_sysbox_setup.sh

Make sure your /etc/docker/daemon.json includes the sysbox runtime:

{
"runtimes": {
"sysbox-runc": {
"path": "/usr/bin/sysbox-runc"
}
}
}

Then restart Docker:

sudo systemctl restart docker

Verify​

Run the same command our validator uses:

docker run --rm --runtime=sysbox-runc --gpus all daturaai/compute-subnet-executor:latest nvidia-smi

If you see nvidia-smi output — you're good.

Docker >= 29.2.0: CDI Compatibility Fix​

If you're running Docker 29.2.0 or later, sysbox + GPU will fail with a permission denied error:

OCI runtime create failed: ... failed to open OCI spec file: ... permission denied

This happens because Docker 29.2.x enables CDI (Container Device Interface) by default, which routes --gpus through CDI — incompatible with sysbox's user namespace.

To fix, disable CDI by adding "features": {"cdi": false} to your /etc/docker/daemon.json:

{
"features": {
"cdi": false
}
}

Then restart Docker:

sudo systemctl restart docker

Then run the verify command above again. This is safe and reversible — to re-enable CDI, simply remove the features block and restart Docker.