- Install Docker
- Install VSCode
- Install the Remote Development extension
- Clone this repository
- Create your application within a container (see gif below)
Once the container is running inside VSCode, you can run the project locally as follows:
- Create the owner and the subnet
./scripts/setup_owner_subnet.sh
- Create a miner and register to the subnet
./scripts/setup_miner.sh [wallet_name]
# Example: ./scripts/setup_miner.sh miner
- Create a validator and register to the subnet
./scripts/setup_validator.sh [wallet_name]
# Example: ./scripts/setup_validator.sh miner
./scripts/run_openai_miner.sh [wallet_name]
# Example: ./scripts/run_openai_miner.sh miner
./scripts/run_validator.sh [wallet_name]
# Example: ./scripts/run_validator.sh validator
This repository requires python3.8 or higher. To install, simply clone this repository and install the requirements.
git clone https://github.com/nanlabs/bittensor-subnet-example.git
cd bittensor-subnet-example
python -m pip install -r requirements.txt
python -m pip install -e .
If you are running a specific miner or validator, you might need install its specific requirements. For example, the Langchain-based miner requires the following:
cd neurons/miners/openai
python -m pip install -r requirements.txt
- Quickstart using VSCode + Remote Containers (recommended)
- Installation
- Quickstarter template
- In order to simplify the building of subnets, this template abstracts away the complexity of the underlying blockchain and other boilerplate code. While the default behavior of the template is sufficient for a simple subnet, you should customize the template in order to meet your specific requirements
- Introduction
- Installation
- Writing your own incentive mechanism
- Subnet Links
This template contains all the required installation instructions, scripts, and files and functions for:
- Building Bittensor subnets.
- Creating custom incentive mechanisms and running these mechanisms on the subnets.
In order to simplify the building of subnets, this template abstracts away the complexity of the underlying blockchain and other boilerplate code. While the default behavior of the template is sufficient for a simple subnet, you should customize the template in order to meet your specific requirements
IMPORTANT: If you are new to Bittensor subnets, read this section before proceeding to Installation section.
The Bittensor blockchain hosts multiple self-contained incentive mechanisms called subnets. Subnets are playing fields in which:
- Subnet miners who produce value, and
- Subnet validators who produce consensus
determine together the proper distribution of TAO for the purpose of incentivizing the creation of value, i.e., generating digital commodities, such as intelligence or data.
Each subnet consists of:
- Subnet miners and subnet validators.
- A protocol using which the subnet miners and subnet validators interact with one another. This protocol is part of the incentive mechanism.
- The Bittensor API using which the subnet miners and subnet validators interact with Bittensor's onchain consensus engine Yuma Consensus. The Yuma Consensus is designed to drive these actors: subnet validators and subnet miners, into agreement on who is creating value and what that value is worth.
This starter template is split into three primary files. To write your own incentive mechanism, you should edit these files. These files are:
template/protocol.py
: Contains the definition of the protocol used by subnet miners and subnet validators.neurons/miner.py
: Script that defines the subnet miner's behavior, i.e., how the subnet miner responds to requests from subnet validators.neurons/validator.py
: This script defines the subnet validator's behavior, i.e., how the subnet validator requests information from the subnet miners and determines the scores.
The Bittensor Subnet 1 for Text Prompting is built using this template. See Bittensor Text-Prompting for how to configure the files and how to add monitoring and telemetry and support multiple miner types. Also see this Subnet 1 in action on Taostats explorer.
Before you proceed with the installation of the subnet, note the following:
- Use these instructions to run your subnet locally for your development and testing, or on Bittensor testnet or on Bittensor mainnet.
- IMPORTANT: We strongly recommend that you first run your subnet locally and complete your development and testing before running the subnet on Bittensor testnet. Furthermore, make sure that you next run your subnet on Bittensor testnet before running it on the Bittensor mainnet.
- You can run your subnet either as a subnet owner, or as a subnet validator or as a subnet miner.
- IMPORTANT: Make sure you are aware of the minimum compute requirements for your subnet. See the Minimum compute YAML configuration.
- Note that installation instructions differ based on your situation: For example, installing for local development and testing will require a few additional steps compared to installing for testnet. Similarly, installation instructions differ for a subnet owner vs a validator or a miner.
- Running locally: Follow the step-by-step instructions described in this section: Running Subnet Locally.
- Running on Bittensor testnet: Follow the step-by-step instructions described in this section: Running on the Test Network.
- Running on Bittensor mainnet: Follow the step-by-step instructions described in this section: Running on the Main Network.
As described in Quickstarter template section above, when you are ready to write your own incentive mechanism, update this template repository by editing the following files. The code in these files contains detailed documentation on how to update the template. Read the documentation in each of the files to understand how to update the template. There are multiple TODOs in each of the files identifying sections you should update. These files are:
template/protocol.py
: Contains the definition of the wire-protocol used by miners and validators.neurons/miner.py
: Script that defines the miner's behavior, i.e., how the miner responds to requests from validators.neurons/validator.py
: This script defines the validator's behavior, i.e., how the validator requests information from the miners and determines the scores.template/forward.py
: Contains the definition of the validator's forward pass.template/reward.py
: Contains the definition of how validators reward miner responses.
In addition to the above files, you should also update the following files:
README.md
: This file contains the documentation for your project. Update this file to reflect your project's documentation.CONTRIBUTING.md
: This file contains the instructions for contributing to your project. Update this file to reflect your project's contribution guidelines.template/__init__.py
: This file contains the version of your project.setup.py
: This file contains the metadata about your project. Update this file to reflect your project's metadata.docs/
: This directory contains the documentation for your project. Update this directory to reflect your project's documentation.
Note
The template
directory should also be renamed to your project name
In order to see real-world examples of subnets in-action, see the subnet_links.json
document or access them from inside the template
package by:
import template
template.SUBNET_LINKS
[{'name': 'sn0', 'url': ''},
{'name': 'sn1', 'url': 'https://github.com/opentensor/text-prompting/'},
{'name': 'sn2', 'url': 'https://github.com/bittranslateio/bittranslate/'},
{'name': 'sn3', 'url': 'https://github.com/gitphantomman/scraping_subnet/'},
{'name': 'sn4', 'url': 'https://github.com/manifold-inc/targon/'},
...
]
This repository is licensed under the MIT License.
# The MIT License (MIT)
# Copyright © 2023 Yuma Rao
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
# documentation files (the “Software”), to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of
# the Software.
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.