Mining that trains real AI models

Vibe Hash is a proof-of-useful-work test network. Your computer trains small, checkable pieces of a model someone has paid to have trained, on its graphics card if it has one. Every piece that passes its checks is paid at the same rate per unit of work, on an old laptop or a gaming rig.

Get started
> python -m vibehash testnet

That one command runs a node, two workers and a training job on your own computer.

> python -m vibehash workerPowerShell
What vibehash worker shows while it mines: the drill digs while your GPU trains, slows while it checks other workers' results, and the cart fills with every unit you commit. An example session on an RTX 4070 SUPER; your numbers depend on your hardware and the network.
Round
about 38 s
Stake
5 VIBE, earned by working
Block subsidy
50 VIBE, halving every 210 rounds
A block is final
once validators with over ⅔ of the stake sign it
Base unit
1 VIBE = 100,000,000 syn
Trains on
NVIDIA, Intel Arc, Apple, AMD or CPU

What Vibe Hash is

Bitcoin miners spend electricity on hashes nobody uses, and only one lucky winner per block gets paid. Vibe Hash replaces the hashes with training steps on a real model that someone has paid to have trained. There's no lottery: everyone whose work passes the checks is paid in proportion to how much they did.

There are two ways to take part, and you can do both from the same computer.

  • Worker. Let your computer train and check models. This is the mining. You can start with no VIBE at all: your first 5 VIBE of pay becomes your stake.
  • Train a model. Give the network a spreadsheet of examples and some VIBE, and get back a trained model that makes predictions on new rows.

Training a model takes four commands once Vibe Hash is set up. Your data is a CSV file, and the result is a model file that makes predictions; Get started walks through each step.

> vibehash train my-data.csv --budget 100   # posts the job; the network trains it
> vibehash job status                       # rounds done, accuracy, budget left
> vibehash job download                     # saves my-data-model.npz
> vibehash predict new-rows.csv             # a prediction for every row

Most people join the public network, run at node.vibehash.org, and vibehash setup connects to it by itself. To join a different network, you need its node address, such as 203.0.113.7: get it from whoever runs it, or run your own with vibehash testnet.

Test network. VIBE has no cash value, so don't buy or sell it. The software hasn't been audited.

Get started

You need Python 3.10 or newer, free from python.org. On Windows, tick “Add python.exe to PATH” while installing it. Choose what you want to do, then paste the commands into PowerShell on Windows or Terminal on macOS.

    A round

    The network runs in rounds. With default settings a round takes about 38 seconds and ends with one new block. The bar is drawn to scale, in the colours the worker's dashboard uses for each phase. Jobs with big models get longer rounds, sized so an ordinary computer on a home connection can still download the model, train a unit and upload its snapshots in time. A model with 34 million weights, for example, gets rounds of about 17 minutes.

    • Register3 s

      Workers check in with their measured speed and memory. Those with 5 VIBE staked get work first; newcomers still earning their stake get small batches from what's left.

    • Compute20 s

      The work is split into small units sized so a slow laptop can finish one in time; faster machines get more units, not bigger ones. Each worker trains its units and sends a sealed fingerprint of each result before the deadline.

    • Reveal5 s

      A random number that nobody could know earlier picks which parts of each unit get checked. Workers reveal their results and those parts.

    • Verify, then seal10 s

      Other workers re-run the chosen parts and report whether they match; checking is paid work too. Passing results are averaged into the model, and payments and penalties go into a block, with a record of the round's signed messages that anyone can replay to check every decision. The network's validators vote on the block before it counts.

    Who runs the network

    No single computer is in charge. The network is run by validators: nodes with VIBE staked that take turns leading rounds, in an order weighted by stake and fixed in advance.

    1. The leader runs the round. Workers do the round with whichever validator is leading it. They find it on their own, so nothing changes for you.
    2. The others check its block. Each validator replays the round from its record of signed messages, and votes against any block whose payments, penalties or choices don't follow from them.
    3. Two thirds make it final. A block counts once validators holding more than two thirds of the stake have signed it. Those signatures travel with the block, so anyone can check them.

    A leader that pays itself extra, favours a worker or drops someone's work is voted down, and the next validator runs the round again. If a validator goes offline, the others carry on without it, and it catches up when it's back. Two different blocks can never both be final unless more than a third of the stake signs both, and a validator that votes two ways leaves signed proof behind.

    Anyone can check all of this without trusting a node: vibehash chain verify replays every round and checks every block's signatures, and a node started with --peer syncs the chain and refuses any block that fails those checks. A staked account can become a validator with vibehash validator join, and vibehash validator list shows who votes.

    Checking the work

    Re-doing all the work would double its cost, so Vibe Hash re-runs small random pieces and makes cheating a losing bet. Each unit of training is split into 8 segments, with a saved snapshot of the model between each one. These are the checks, cheapest first.

    1. Sealed answerWorkers send a fingerprint of their result before anyone reveals anything. Copying someone else's answer can't match your own fingerprint.
    2. Proven snapshotsEvery snapshot a worker reveals must match the fingerprint, so nobody can swap in different ones after seeing which parts get checked.
    3. Sanity checkTraining must start from this round's model and end where the worker says it did, and the change must be a sensible size. That stops boosted updates that would wreck the model.
    4. Spot-check replayA randomly chosen worker re-runs 3 random segments and compares. A result must be within the job's tolerance and within 1% of what that segment of training actually changed, which absorbs rounding differences between chips but not skipped work.
    5. Duplicate unitsAbout 1 in 5 units secretly goes to two workers. If their answers differ, the whole unit is re-run to see who was wrong.
    6. Planted fakesTwo known-fake results per round are slipped to checkers. A checker who approves one is caught being lazy; a checker who rejects honest work is caught too, because every rejection is re-run.
    7. Checking the nodeEvery choice the node makes in a round follows from the round's signed messages, which its block commits to, so anyone can replay the round. It keeps recent rounds' checkpoints, so anyone can also re-run its checks on the actual results. And it signs a receipt for every message it accepts, so a worker whose message goes missing from the round can prove it.

    Would faking part of the work pay off?

    A worker skips some segments and makes up the snapshots. The spot-check picks segments at random.

    Caught
    87.5%
    Gets away with it
    12.5%

    Getting caught costs half your stake and the whole round's pay, and the duplicate-unit check is a second chance to catch you. Faking less saves less work but still risks the stake.

    CPUs and GPUs

    AI is trained on graphics cards, and Vibe Hash uses them. A worker with an NVIDIA, Intel Arc, AMD (on Linux) or Apple GPU trains on it through PyTorch, which vibehash setup installs for your card. Without one, it trains on the CPU. Both run exactly the same maths in the same order, so any worker can check any other worker's result.

    • GPUs get more of the work. Each worker measures its real training speed and the network hands out units in proportion once it has delivered: a new worker starts with a few units and can take up to twice as many each round it delivers in full, dropping back to what it managed if it misses a deadline. A GPU that's 20 times faster ends up with about 20 times the units and 20 times the pay. Pay per unit of work is the same for everyone.
    • Memory decides which jobs you can take. For GPU jobs the worker reports your graphics memory, and you're only given jobs that fit in it.
    • GPU jobs use float32, the number format GPUs are built for. Many consumer GPUs, including Intel Arc and Apple, can't do float64 at all, so float64 jobs always run on the CPU.
    • Checking works across devices. Chips round numbers very slightly differently, so a GPU's result and a CPU's replay never match bit for bit. The replay rule above allows for that without letting skipped training through, even late in training when each step barely moves the model.
    • Shortcuts are off. Workers disable GPU modes that trade accuracy for speed, such as NVIDIA's TF32, and use deterministic kernels. Otherwise replays on another device wouldn't match.

    Measured on an NVIDIA RTX 4070 SUPER against a CPU: results differed by at most 8e-8, more than a thousand times inside the 0.0001 tolerance, and by under 0.1% of what each segment of training changed. The same GPU gave identical results every run. On a 2.2-million-weight model the GPU ran each step about 10 times faster than a 28-thread CPU.

    Payment

    Each round creates a pool of VIBE: new coins from the block subsidy (50 VIBE, halving every 210 rounds, as in Bitcoin) plus the job poster's fee for the units that passed. Job posters pay nothing for work that failed. The pool is split three ways, drawn to scale here.

    • 80%Workers, by verified training work × reputation
    • 15%Checkers, by re-run work × reputation
    • 5%Block producer, only if work was verified

    Anything nobody earned is burned, so nobody gains by rejecting good work. Everyone is paid at the same rate per unit of work, so a laptop earns less in total but gets paid every round it contributes. You don't need a mining pool.

    Worked example: one round

    Subsidy 50 VIBE + job fee 10 VIBE = a 60 VIBE pool. 22 units passed, everyone at full reputation.

    WhoDidSharePaid
    Old laptop2 units2 / 22 of 48 VIBE4.36 VIBE
    Office desktop5 units5 / 22 of 48 VIBE10.91 VIBE
    RTX 3060 rig15 units15 / 22 of 48 VIBE32.73 VIBE
    Checkersre-ran segments15% of pool9.00 VIBE
    Block producersealed the block5% of pool3.00 VIBE

    Every worker gets 2.18 VIBE per unit, the same rate on every machine. Reputation scales your share between 0.5× and 1.0×. New wallets start at 0.8×, gain 0.02 each round they deliver verified work, and lose 0.05 for missing a deadline. It moves per round rather than per unit, so a laptop builds reputation as fast as a big rig.

    Penalties

    Crashes and dropped connections cost you only that round's pay. Your stake is at risk only for things an honest machine never does.

    What happenedStakePayReputation
    Unit passed its checkskeptpaid for the unit+0.02 for the round
    Didn't finish before the compute deadlinekeptthat unit unpaid−0.05
    Crashed or went offline after sending a sealed answerkeptwhole round unpaid−0.05, and back to the new-worker limit of 4 units
    Didn't answer a checking taskkeptno checking pay−0.05
    Result failed a replay, sanity or duplicate check, or didn't match its fingerprint−50%whole round unpaidreset to 0.5
    Approved a planted fake while checking−50%whole round unpaidreset to 0.5
    Rejected honest work while checking−50%whole round unpaidreset to 0.5

    Half of any slashed stake goes to whoever caught the problem and the other half is burned. When you unstake, the coins wait 20 rounds before you can spend them, and they can still be slashed in that time. A wallet whose stake falls below the 5 VIBE minimum goes back to earning it in: small batches of work, no checking others, and its pay refills the stake first.

    Starting with nothing

    Bitcoin needed no stake, because a hash proves itself. Training can only be spot-checked, so the stake is what a cheater stands to lose. To keep that without anyone handing out coins, a new worker earns its stake in. Its first 5 VIBE of pay goes into its stake instead of its wallet, so what it could lose by cheating grows with what it has earned. Until then it's held to small batches, gets units only after staked workers have theirs, and never checks other workers' results. Its own results are always checked by a staked worker. The network's first validators vote with bootstrap stake, which can never be withdrawn or spent and is burned if they leave. So every spendable coin starts from work.

    Job file

    vibehash train writes and posts the job for you from a CSV, choosing these settings to fit your data. To control every setting yourself, vibehash job template writes a job file to edit and vibehash post-job posts it. The network checks every field when a job is posted and rejects anything out of range.

    FieldAllowedWhat it does
    id1–64 chars: a–z 0–9 . _ -Unique name for the job
    fee_per_roundwhole syn, ≥ 0What you pay for a round where every unit passes. 1 VIBE = 100,000,000 syn.
    model.n_in / n_out1–4096 / 2–1000Number of inputs and number of classes
    model.n_hiddenone width, or a list of 1–8 widths up to 8192Hidden layers. [512, 512] is two layers of 512.
    precisionfloat32 or float64float32 runs on GPUs. float64 always runs on the CPU, because many GPUs can't do it.
    datasynthetic + seed, or npz + sha256post-job --dataset fills in the npz hash for you
    lr, batch_size0–10, 1–4096Training settings
    steps_per_unitup to 100,000Training steps in one unit of work
    checkpoint_everymust divide steps_per_unitSteps per checked segment
    units_per_round1–10,000How much work each round hands out
    memory_mb1–1,000,000Machines with less memory won't be given or asked to check this job: graphics memory on a GPU, RAM on a CPU
    toleranceup to 0.01How closely a replay must match. Use 0.0001 for float32 jobs, so a GPU's result checks out on a CPU, and 0.000001 for float64.
    max_update_ratioup to 10Largest change one unit may make to the model
    compute_soptional, 5–3600A longer compute phase for this job's rounds, in seconds, for bigger units. Without it, rounds are sized from the model automatically.

    A dataset is an .npz file with four arrays: x_train, y_train, x_val and y_val. It's loaded without running any code inside it, and every worker checks its hash against the job before using it.

    Troubleshooting

    The messages you're most likely to see, and what to do about each.

    'python' is not recognized / command not found

    Python isn't installed, or isn't on your PATH. On Windows, run the python.org installer again and tick “Add python.exe to PATH”. On macOS and Linux, use python3; the “Your computer” setting in Get started does this for you.

    No matching distribution found for vibehash

    Vibe Hash is on PyPI, so this means pip couldn't use it. Usually your Python is older than 3.10: python --version shows which you have, and python.org has the current one. Otherwise update pip with python -m pip install --upgrade pip, check you're online, and run the install command again.

    I lost my wallet file

    Rebuild it from the 24 recovery words setup showed you when it created the wallet: vibehash wallet restore asks for them and saves a new wallet file with the same address and coins. Wallets made before recovery words existed (before version 0.4) have no words, so for those the backed-up file is the only copy.

    row 12, column 'colour': 'red' isn't a number

    Every input column must hold numbers. Leave text columns out of the file, or turn them into numbers, such as small = 1, medium = 2, large = 3. The column you're predicting can hold names; if it isn't the last column, name it with --label.

    No module named vibehash

    Vibe Hash was installed for a different copy of Python. Run the install command again, starting with the same python or python3 you use for everything else.

    no node address / no wallet: run `vibehash setup`

    Commands use the node address and wallet that setup saved. Run setup once, or add --node or --wallet to the command. To switch networks, run vibehash setup --node NEW-ADDRESS.

    can't reach node at http://…

    Check the node address with whoever runs the network. The node may also be offline for a moment; the worker keeps retrying on its own, so you can leave it running.

    stake at least 500000000 syn to take work

    This network was set up to require stake, rather than letting workers earn it in, and yours is under the 5 VIBE minimum (500,000,000 syn). Ask whoever runs it for some VIBE, then stake it as Get started shows.

    message timestamp too far from node clock

    Your computer's clock is more than 2 minutes off. Turn on automatic time sync in your system settings.

    node switched networks (genesis changed); refusing to continue

    The address you're connected to now runs a different network. Check you have the right node address, then start the worker again.

    this wallet is encrypted; a password is required

    Run the command in a normal terminal window so it can ask for your password. To run unattended, set VIBEHASH_PASSWORD in that terminal first.

    dataset … not available on this node

    The job expects a dataset the network doesn't have. Post the job with the dataset file filled in, which uploads it with the job.

    vibehash devices only lists the CPU

    GPU support isn't installed, or was installed without support for your card (a plain pip install torch on Windows does that). Run vibehash install-gpu: it finds your card, installs the PyTorch build that runs on it, and tests it. If it says your driver is too old, update it from your card maker's website and run it again.

    GPU training needs PyTorch / device … not found

    You asked for a GPU with --device, but PyTorch can't see one. Run vibehash devices to see what's available, or leave out --device to fall back to the CPU automatically.

    censored: round 12: the node signed a receipt for your commit but sealed the round without it

    The node accepted one of your messages, promised in a signed receipt to record it, then sealed the round without it, which can cost you that round's pay and reputation. Your receipts are proof: they're saved in receipts.jsonl in your worker's folder under ~/.vibehash/cache. Anyone can check that file with vibehash chain verify --receipts receipts.jsonl, so share it with whoever runs the network, and with other workers deciding whether to trust that node.

    The dashboard looks garbled, or I want plain log lines

    Add --plain to worker or testnet. Logs redirected to a file get plain lines automatically, and setting NO_COLOR turns the colours off.

    I'm registered but never get any units

    Check three things. Your memory must be at least the job's memory_mb: graphics memory for jobs that run on your GPU, system RAM otherwise (add --memory-mb if it's detected wrong). New workers get at most 4 units until they've delivered once, so the first round is small. And while you're still earning your stake, you only get units staked workers didn't need, so on a busy network the first rounds can pass with none; that changes once your first 5 VIBE is in.