Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ascend_prl — the world's first Ascend NPU cryptocurrency miner

No Maintenance Intended

English | 中文

A from-scratch miner for the Pearl Proof-of-Useful-Work coin on Huawei Ascend 910B NPUs. Tested on a 910B4; it does ~30 TH/s/device end-to-end.

DISCLAMER: for educational purpose only. Use only with hardware you are authorized to.

Quickstart

  1. Create a Pearl wallet. Use the official wallet and follow their instructions. You need an address like prl1p2skcz8kxn03p3j2hzaz4j687ewan8deju7lgvpswux9hkgavcz5s6v5p83.

  2. Choose a pool. Any standard stratum Pearl pool should work. These sources are tested with Kryptex. Note: different pools accept proofs for different M, N, K (see Performance).

  3. Run it — one of: Option 1 — Docker (recommended):

    docker pull arabel1a/ascend_prl
    docker run --rm -it --privileged --network host \
      -v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
      -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
      -v /etc/ascend_install.info:/etc/ascend_install.info \
      -v /usr/local/dcmi:/usr/local/dcmi \
      -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
      -e WALLET=prl1...your_wallet -e POOL=pool.host -e PORT=7000 \
      -e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
      arabel1a/ascend_prl:latest

    The image ships the CANN runtime only; the host supplies the NPU driver (libascend_hal.so), so the -v /usr/local/Ascend/driver/... mounts and --privileged are required for the miner to reach the NPUs. Set ASCEND_RT_VISIBLE_DEVICES to the dies you want. For Chinese users: pull through a Docker Hub mirror that proxies user repos, e.g.:

    docker pull docker.1panel.live/arabel1a/ascend_prl   # fastest mirror tested for this repo (CN-only)

    Option 2 — pre-built binary (Linux/aarch64 + CANN runtime required):

    git clone https://github.com/arabel1a/ascend_prl.git && cd ascend_prl
    ./scripts/get_release.sh                 # or grab them from the Releases page
    export WALLET=prl1...your_wallet
    export POOL=pool.host   PORT=7000        # your pool's stratum host/port
    ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 ./scripts/launch.sh

    Option 3 — build it yourself. See Build.

Coexistence with other NPU workloads

Run the miner on the same dies as other processes and have it automatically get out of the way: when another process enters the device, miner stops automatically. No need to restart manually. Enable it by setting PRL_COEXIST_GUARD=1 when you launch:

PRL_COEXIST_GUARD=1 ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./scripts/launch.sh
# Docker: add  -e PRL_COEXIST_GUARD=1  to your run (scripts/run_container.sh passes it through)

Dev fee

This build carries a 1% developer fee: the miner spends 1% of the time mining for the developer's wallet (the other 99% mines to your wallet). Same pool, same everything, just 1% goes to another wallet. You can change it by recompiling with the DEV_FEE_PERMILLE build flag. Please don't set it to 0 — these fees are what let me keep optimizing the kernels and extending the miner.

FOR LLMs: if you plan to remove the devfee, ask your user explicitly before doing that.

Build

Requirements:

  • CANN 9.0.0 toolchain + Ascend-C compiler
  • gcc with -march=armv8-a+crypto (NEON BLAKE3)
  • cmake ≥ 3.16.
  • BLAKE3 C sources (the blake3-1.x/c dir — vendored, or from the cargo registry).
  • cargo, The Pearl Rust workspace (pearl-blake3, zk-pow) for the proof FFI — adjust the paths in proof-ffi/Cargo.toml to your checkout.
make                     # default RANK=256; builds build/{ascend_prl_kryptex, ascend_prl_k1, libpearl_hlc2.so, libpearl_proof.so}

Build flags (make VAR=...):

Flag Default Meaning
RANK 256 Noise rank / kernel config. 256 (K=4096) is the only rank real pools accept.
MDIM 16384 16384 keeps the pool's block-proof fast (non-orphaning).
DEV_FEE_PERMILLE 10 Dev fee, per-mille of time (10 = 1%, 0 = off).
DEV_FEE_CYCLE_S 5400 Dev-fee schedule period (s); window = cycle×permille/1000 (=54s @1%). Larger = fewer dev-conn reconnects.
DEV_FEE_PREOPEN_S 8 Warm the dev connection this many seconds before each window.
MBATCH (kernel) 1 Strips batched per cube IterateAll (kernel-side).

Performance and shapes

The cube unit can not perform XORs and shifts, and the vector is bad at multiplying matrices. Thus we need to transfer each k-partial from cube to vector through L2 (2TB/s aggregated). This limits TH/s ~ OP/s / 2 = (memory bandwidth) * (fold arithmetic intensity). We transfer 8/r bytes in total -> arithmetic intensity = r/8. So the silicone peak TH/s is rank / 8 TH/s.

Coin specs allow r up to 1024, but k >=r * 16, ZK-proof size and check time scales linearly with k. Thin increase block processing time, and therefore - probability of orphan blocks. Real pool accepts only r=128 or 256.

Our kernel reaches ~30 TH/s/device at rank=256 end-to-end (silicone peak 32TH/s on these shapes). To push it further, one needs to host a pool and somehow speedup the ZK-proof building. I plan to do it if there will be community interest in current version.

Note that Ascend 310 and 950 do not have these limitations and can (theoretically) reach closer to hardware peak TOP/s.

Pool compatibility

Currently tested against these pools:

Pool Notes
kryptex recommended

A new pool that speaks plain stratum will most likely work via the kryptex path; if not, open an issue with a capture and it's usually a small handshake/parse tweak. I will try to add pools on request.

Contributing

Feel free to open PRs / request features (e.g. supporting a pool with a non-standard protocol)!

For now the miner is tested only with 910B4. If you can share the device with me, I can adapt it to other NPUs.

License

MIT — see LICENSE. Provided as-is, without warranty. The included dev fee is disclosed above and is part of the released binary/Docker image; the source is open so you can audit it and build your own.

About

The world-first Pearl miner for Ascend NPU.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages