26
Perturb
sn26Robotics & IoTClean16Fair entry52No description set on the registered repo.
0xsigurd/Perturb· pushed 28d ago reg. open
Emission
1.4
TAO / day · live
Alpha
0.0151
τ · mcap 14.9K
Top-slot payout
0.028
τ per winning epoch · live
Stars
5
live from the GitHub API
Primary language
Python
repo-reported
Last push
28d ago
feeds the dormancy integrity signal
Topics
—
repo-declared tags
About the repo
what the project says about itself — the input for semantic labels
No description set on the repo.
Reading this tab
scope of the data
Taonets fetches the repo's public metadata (description, topics, language, stars, last push) and the head of its README. Commit-count histories, contributor lists and release notes require the GitHub commits/releases endpoints, which the worker doesn't consume yet — those panels are coming with the ingest upgrade and are not simulated in the meantime.
README head
first lines of the default branch README, unedited
# Perturb Subnet Perturb is a decentralized adversarial robustness network built on Bittensor. Miners compete to find adversarial examples — imperceptible input perturbations that cause state-of-the-art image classifiers to fail — while validators construct challenges from real images, verify every response with mathematical precision, and reward the best attackers with on-chain emissions. Modern AI models achieve remarkable accuracy on clean data yet remain catastrophically brittle: a perturbation invisible to any human observer can make a production classifier misclassify a tumor scan, a stop sign, or a fraudulent transaction. The tooling to systematically discover these vulnerabilities is fragmented, expensive, and static. Perturb replaces it with a financially incentivized, continuously improving adversarial testing network — every day miners compete, attacks get stronger and the network's outputs get more valuable. The network produces two commercially valuable outputs: - **Adversarial training dataset** — a continuously growing corpus of verified adversarial examples, the raw material for adversarial training (the most effective known defense) - **Model robustness certificates** — on-chain, auditable proof of adversarial evaluation, relevant to EU AI Act conformity and enterprise AI procurement Why Bittensor: finding an adversarial example is computationally hard, but verifying one is trivially cheap — run the model, compare the prediction, measure the perturbation norm. This verification asymmetry makes the incentive mechanism clean, objective, and manipulation-resistant, while TAO emissions drive a level of continuous attack research no salaried red team can match. Read the full vision and roadmap in the [Perturb whitepaper](https://www.perturbai.io/whitepaper). This repository provides: - validator node implementation (`neurons/validator.py`) - baseline miner implementation (`neurons/miner.py`) - one-command launchers for validator and miner ## Architecture ### Validator responsibilities - Sample challenge images from the full ImageNet-100 train split (~126k images, auto-downloaded) - Run fixed classifier (`EfficientNetV2-L`) on pulled image - Build and broadcast `AttackChallenge` synapse to selected miners - Verify miner responses and compute rewards - Maintain rolling histories and set on-chain weights periodically ### Miner responsibilities - Poll the task API for the current task - Run baseline PGD-style attack - Upload the perturbed image and submit its URL - Let validator handle all authoritative verification and scoring ### Challenge lifecycle 1. The team task generator samples an ImageNet-100 image and publishes one API task 2. Miners poll the task API, perturb the task image, upload the result, and submit the image URL 3. Validators read submitted miner images from the API 4. Validators score responses and report the full miner results ## Hardware and System Requirements ### Miner - Minimum: 4 vCPU, 16 GB RAM, 50 GB SSD, stable 20+ Mbps network - Recommended: 8 vCPU, 32 GB RAM, NVIDIA GPU with 8+ GB VRAM, 100+ GB SSD ### Validator - Minimum: 8 vCPU, 32 GB RAM, NVIDIA GPU with 12+ GB VRAM, 100 GB SSD - Recommended: 16 vCPU, 64 GB RAM, NVIDIA GPU with 24+ GB VRAM, 200 GB SSD ### Common software prerequisites - Python 3.10+ - Node.js 18+ (includes `npm`) for PM2 installation - `pip` and virtualenv support (`python -m venv`) - OS build tools needed by Python wheels - For GPU usage: correct NVIDIA driver + CUDA stack compatible with installed PyTorch ## Common Installation (Do Once) Run role-specific setup once before starting nodes: ```bash git clone https://github.com/0xsigurd/Perturb cd Perturb ``` For miner setup: ```bash bash ./scripts/setup_common.sh miner ``` For validator setup: ```bash bash ./scripts/setup_common.sh validator ``` `setup_common.sh` behavior by role: - both roles: install PM2, create `.venv`, install Python/Bittensor dependencies If `npm: command not found`, install Node.js first, then rerun: macOS (Homebrew): ```bash brew install node node --version npm --version bash ./scripts/setup_common.sh validator ``` Ubuntu/Debian: ```bash sudo apt-get update sudo apt-get install -y nodejs npm node --version npm --version bash ./scripts/setup_common.sh validator ``` ## Installation and Setup (Validator Side) This section is specifically for validator operators. ### 1) Configure validator runtime Create validator env: ```bash cp scripts/validator.env.example scripts/validator.env ``` Edit required fields in `scripts/validator.env`: - `WALLET_NAME` - `WALLET_HOTKEY` - `PERTURB_API_KEY` Optional: - `PERTURB_API_BASE_URL` - `LOG_LEVEL` (`DEBUG` default, set `INFO`/`WARNING`/`ERROR` for quieter logs) ### 2) Start validator ```bash bash ./scripts/run_validator.sh ``` Expected log behavior: - API task polling messages - submitted response scoring logs - per-miner score logs - periodic `set_weights` attempts ### 3) Validator-side notes - Validators fetch the task image and submitted miner image URLs from the API, then run local verification and scoring. - Validators use miner-submitted response URLs in leaderboard reports. ## Installation and Setup (Miner Side) This section is specifically for miner operators. ### 1) Configure miner runtime Create miner env: ```bash cp scripts/miner.env.example scripts/miner.env ``` Edit required fields in `scripts/miner.env`: - `WALLET_NAME` - `WALLET_HOTKEY` - `NETUID` - `NETWORK` Optional: - `PYTHON_BIN` - `LOG_LEVEL` (`DEBUG` default, set `INFO`/`WARNING`/`ERROR` if you want quieter logs) - `PERTURB_API_BASE_URL` - Storage credentials (`PERTURB_STORAGE_BACKEND`, `PERTURB_STORAGE_BUCKET`, `PERTURB_STORAGE_ACCESS_KEY_ID`, `PERTURB_STORAGE_SECRET_ACCESS_KEY`; Hippius is default, R2 is supported) - `MINER_EXTRA_ARGS` ### 2) Start miner ```bash bash ./scripts/run_miner.sh ``` Expected log behavior: - `Miner started. Polling task API.` - task upload/submission messages ###