# Prerequisites

{% hint style="warning" %}
**Note:** This software is in **beta** and primarily targets **Ubuntu/Debian** machines with **CUDA**-enabled GPUs. Support for other hardware/software configurations is **experimental** and will improve over time.
{% endhint %}

### Introduction

Before running a Nesa node, ensure your system meets the following prerequisites. This will help you set up and run the node smoothly.

***

### System Requirements

**Hardware Recommendations**

* **CPU**: Multi-core processor
* **Memory**: 4 GB RAM minimum
* **Storage**: 50 GB free disk space (or more depending on the size of the model(s) you'd like to power)
* **Network**: Stable internet connection

{% hint style="info" %}
**Note:** Miner nodes operate optimally with high-performance graphics hardware.
{% endhint %}

**Supported Operating Systems**

* Linux (Ubuntu, Debian, CentOS, etc.)
* macOS
* Windows (with WSL recommended)

### Software Requirements

**Required Software**

* **GPU Drivers:** Required for hardware acceleration. Please consult your GPU manufacturer's website for reference.
* **Nvidia Toolkit:** Applicable to machines with an NVIDIA graphics card. [Install Toolkit](https://github.com/nesaorg/bootstrap/blob/master/helpers/install_nvidia_container_toolkit.sh)
* **Docker**: Required to run the node. [Install Docker](https://docs.docker.com/get-docker/)

  ```bash
  # Example command to install Docker on Debian/Ubuntu
    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add the repository to APT sources:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  ```

  ```bash
  # Example command to install Docker on macOS using Homebrew
  brew install --cask docker
  ```

  ```powershell
  # Example command to install Docker on Windows using PowerShell
  choco install docker-desktop
  ```
* **curl**: Required to fetch the bootstrap script. [Install curl](https://curl.se/docs/install.html)

  ```bash
  # Example command to install curl on Ubuntu
  sudo apt-get update
  sudo apt-get install -y curl
  ```

  ```bash
  # Example command to install curl on macOS using Homebrew
  brew install curl
  ```

  ```powershell
  # Example command to install curl on Windows using PowerShell
  choco install curl
  ```

**Installing Necessary Dependencies**

* **gum**: The script installs gum if not present.
* **jq**: The script installs jq if not present.

  ```bash
  # Command to check if jq is installed
  jq --version

  # If jq is not installed, the script will attempt to install it
  ```

### Account and Token Requirements

**Hugging Face API Token**

You will need a Hugging Face API token. [Get your token here](https://huggingface.co/docs/hub/security-tokens).

{% hint style="info" %}
**Hint**: Make sure to save your Hugging Face API token securely. You will need it during setup.
{% endhint %}

**Moniker for Your Node**

Decide on a unique name (moniker) for your node.

{% hint style="info" %}
**Hint**: Choose a moniker that reflects the identity of your node within the network.
{% endhint %}

**Node Type Selection**

Decide whether your node will be a Validator or a Miner. Validators participate in consensus, while Miners handle inference tasks.

**Validator**

* **Role**: Validators are responsible for verifying transactions, creating new blocks, and maintaining the security and integrity of the blockchain.
* **Tasks**: Participate in the consensus process, validate transactions and blocks, and earn rewards for their services.
* **Requirements**: Require a stable internet connection and typically less less computational power than miner nodes. In a PoS network, they also stake tokens as collateral.

**Miner**

* **Role**: Miners execute the heavy-lifting components of AI inference.
* **Tasks**: Collect and verify transactions, bundle them into blocks, and earn rewards for successfully adding blocks to the blockchain.
* **Types**:
  * **Distributed Miner**: Joins existing swarms for collaborative mining.
  * **Non-Distributed Miner**: Operates independently without collaboration.
* **Requirements**: Vary depending on whether they are distributed or non-distributed. Both types require good computational power and internet stability.

### Administrative Rights

Ensure you have administrative rights on your system.

**Linux/macOS**

You should have the ability to use `sudo` for installing packages and running Docker.

{% hint style="info" %}
For linux-based systems, ensure your user is part of the `docker` group by running the following commands:
{% endhint %}

```bash
# Create a docker group (if non-existent), adds the current user, 
# and applies group membership immediately in the current session
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% hint style="info" %}
**Hint**: To check if you have sudo privileges, run the following command:
{% endhint %}

```bash
sudo -v
```

**Windows**

You should have an administrator account or use WSL with administrative privileges.

{% hint style="info" %}
**Hint**: On Windows, you can check if you are an administrator by going to Control Panel > User Accounts > Manage User Accounts.
{% endhint %}

***

### Additional Help/Support

If you need any additional help or support, please visit the [Nesa Discord](https://discord.gg/nesa) for community support and discussion. You can also explore additional documentation to deepen your understanding of Nesa and its features.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nesa.ai/nesa/run-a-nesa-node/prerequisites.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
