The idea: the LLM's math is the mining
Pearl is a Layer-1 blockchain whose proof-of-work is large matrix multiplication — the
same primitive every AI model runs (we wrote the full breakdown in
Mining Pearl on Consumer GPUs). Jonathan's
alpha-inference-miner takes that to its logical conclusion: he quantized
Qwen3.6-27B so its weight matmuls are int7 GEMMs in Pearl's exact mining shape.
A chat request and a mining share are now the same computation.
The container supervises the whole stack — pool connection, share submission, a lazy-load vLLM server, and an outbound chat tunnel — and keeps the card mining the entire time it's up. It doesn't just mine when idle; it merge-mines your chat prompt too:
| Idle > 90 s (model asleep) | mines full 131072² profile — ~385 TMAC/s |
| Loaded, between messages | co-resident 16384² — ~240 TMAC/s |
| Chat prefill (your prompt) | the prompt matmul is merge-mined — ~130 TMAC/s |
| Chat decode (reply streaming) | ~50 tok/s (0 mining by default; flip a flag to keep mining) |
The card never stops mining while the container is up. Talking to it isn't downtime — it's a different mining profile. Same 5090, same int7 kernels, answering you and earning Pearl at once.
What you need
The mining kernels and the serve sizing are tuned and validated exclusively for the 5090 (sm_120, 32 GB). Other cards — including the 5080 — are not supported. Host driver must be R570 or newer.
CUDA is bundled inside the image, so the host only needs the NVIDIA driver plus the
toolkit (the package that lets docker run --gpus all see your GPU). On
managed hosts like vast.ai / RunPod these are already set up.
The image is ~25.7 GB and the model is ~28 GB (downloaded once on first run into a mounted volume, then reused). Allow ~60 GB for headroom.
The model
It runs
dominant-strategies/Qwen3.6-27B-heretic-pearl
— a decensored ("heretic") Qwen3.6-27B with int7 weights, Apache-2.0, ~28 GB across 12
shards, a 102,400-token context window, served through a custom vLLM pearl_gemm
kernel plugin. It's a reasoning model, so it emits a "thinking" block before its answer
(the chat UI shows that as a collapsible Thoughts section). The
quantization to int7 is precisely what makes inference be proof-of-useful-work.
The setup, step by step
Every command below is a standalone copy-paste line. Replace <YOUR_PRL_ADDRESS>, <YOUR_PASSWORD>, and <RIG_NAME> with your own values.
Step 0 — Verify you have a supported box
You want an RTX 5090, driver ≥ R570, and ~60 GB free:
nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader
df -h / Step 1 — Install Docker (skip if docker --version already works)
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER && newgrp docker Step 2 — Install the NVIDIA Container Toolkit (skip if nvidia-ctk --version works)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker Step 3 — Confirm Docker can see the GPU
docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi Step 4 — Create the model cache folder
This just makes an empty folder — nothing downloads yet. The model gets saved here when you launch the container in Step 6, so it only ever downloads once and is reused on every later run.
mkdir -p ~/.cache/alpha-inference-miner/model Step 5 — Stop any miner already using the GPU
The 5090 can only do one at a time. If your current miner runs in a tmux session named pearl:
tmux kill-session -t pearl Step 6 — Launch the inference miner in a detachable tmux session
tmux new -d -s inference 'docker run --rm --name alpha-inference --gpus all --ipc=host --shm-size=2g -v ~/.cache/alpha-inference-miner/model:/root/models/qwen36-27b-pearl-e8 jonathanquai/alpha-inference-miner:1.1.0 -a <YOUR_PRL_ADDRESS> -p <YOUR_PASSWORD> -w <RIG_NAME> 2>&1 | tee ~/alpha-inference.log'
This is the heavy step — it pulls the ~25.7 GB image, then downloads the ~28 GB model, so
expect roughly 8 minutes on a gigabit connection. It runs in a tmux session
named inference and tees all output to ~/alpha-inference.log.
Attach to watch it live (detach again with Ctrl-b then d):
tmux attach -t inference Step 7 — Monitor the download, and know when it's done
The image pull + model download happen inside the container on first run (~8 min on gigabit). The way to watch it from the very first second — including the image pull — is to follow the log file Step 6 writes:
tail -f ~/alpha-inference.log
(Or tmux attach -t inference to watch the live session.) The standard
docker logs -f alpha-inference works too — but only after the
~25.7 GB image finishes pulling and the container is created. During the pull it returns
No such container, which is normal: the container doesn't exist yet.
Prefer a raw byte counter? Watch the on-disk size climb toward ~28 GB. (HuggingFace's "Fetching 23 files" progress bar looks frozen at a low percent in a non-interactive log — it only ticks on whole-file completion, so trust the byte count, not the bar.)
watch -n 5 'du -sh ~/.cache/alpha-inference-miner/model' You'll know it's complete and the miner is live when the logs stop showing
download progress and start showing vLLM loading — Starting vLLM server, then
init engine ... took ~95 s — followed by mining lines:
SHARE VALIDATED ok=True and IDLE_MINE_RATE tmac_s=~350. That's the
green light: the download finished, the model loaded, and the card is mining. First-run
total is roughly 8 minutes on a gigabit connection. You can also just wait
for your worker to appear at
pearl.alphapool.tech.
Step 8 — Verify it's running, loaded, and mining
docker ps --filter name=alpha-inference
nvidia-smi --query-gpu=utilization.gpu,power.draw,memory.used --format=csv,noheader
docker logs --tail 40 alpha-inference
You're looking for SHARE VALIDATED ok=True + accepted=True lines
and an IDLE_MINE_RATE around ~350 TMAC/s.
Step 9 — Confirm shares are landing on the pool
curl -s https://pearl.alphapool.tech/api/miner/<YOUR_PRL_ADDRESS> | python3 -m json.tool | grep -A4 <RIG_NAME> Step 10 — Chat with your own mining rig 🎉
Open pearl.alphapool.tech/chat,
enter your payout address, your worker name (<RIG_NAME>), and
your worker password (<YOUR_PASSWORD> — the secret part of
-p before any ;d=). No port-forwarding or public IP needed — the
rig dials an outbound tunnel. The first message takes a few seconds while the model wakes
from sleep (~5 s), then it streams. Keep your tmux visible and watch it flip from
IDLE_MINE_RATE to prefill (your prompt gets merge-mined) and back. That's the
whole story on one screen.
Optional tuning flags
Append any of these to the docker run command:
-e PEARL_LAZY_MINE_DURING_DECODE=1 | Keep mining (+~100-130 TMAC/s) while it streams a reply, at the cost of token speed (~50 → ~34 tok/s). |
-d 0 | Use the pool's vardiff instead of the static 500000 default. |
--no-chat | Disable the public chat tunnel (local :8000 API still works). |
-p 8000:8000 | Expose the OpenAI-compatible API to the host at http://localhost:8000/v1. |
Managing it
# stop it
docker stop alpha-inference
# follow logs
docker logs -f alpha-inference
# update to the newest version
docker pull jonathanquai/alpha-inference-miner:latest Prefer a resilient background service over a tmux session (auto-restarts on reboot)?
docker run -d --name alpha-inference --restart unless-stopped --gpus all --ipc=host --shm-size=2g -v ~/.cache/alpha-inference-miner/model:/root/models/qwen36-27b-pearl-e8 jonathanquai/alpha-inference-miner:1.1.0 -a <YOUR_PRL_ADDRESS> -p <YOUR_PASSWORD> -w <RIG_NAME> Honest notes
- 5090-only, for now. The kernels are tuned for Blackwell sm_120 / 32 GB. If you don't have a 5090, mine Pearl with the standard
alpha-minerinstead — it supports the whole RTX 30/40/50 lineup. - It's a trade, not free hashrate. A dedicated miner squeezes out a bit more raw Pearl hashrate than the inference miner's idle ~350 TMAC/s. What you gain is a live, chattable 27B LLM that doubles as useful-work mining. For a showcase rig that's a great deal; for pure max-hashrate, run the dedicated miner.
- 1% dev fee. The inference miner contributes 1% of its mining time (10 s of every 1000 s) to the project's dev address, via a brief separate pool connection — your shares are otherwise untouched.
- Brand new. The container shipped in June 2026. Expect frequent updates; pin a version (
:1.1.0) for reproducibility or use:latestfor the newest build.
Final take
This is the cleanest demonstration of Pearl's whole thesis we've found: you're not burning a 5090 on arbitrary hashes, you're running a 27B language model that happens to secure a blockchain as a byproduct of answering your questions. Spin it up, open the chat, and watch the same card type back at you while it mines. Then make a video showing your friends — it's the kind of thing that doesn't quite click until you see it live.
This post is mining commentary, not investment advice. PRL has no exchange listing or USD price discovery as of publication. Mine what you can afford to throw away.