Programs you run on your own computer. The volunteer program and the Linux installer are for verified users: sign in with an approved account to download them. No API key is needed.
Lends this computer's spare CPU, GPU, TPU and NPU time to the grid, within limits you set. It runs parts of language models and other neural networks for the grid — on every GPU it can drive, or on the CPU — and answers single matrix multiplications on whichever device finishes them soonest. Windows, macOS and Linux, Python 3.9 or newer.
For verified users: sign in with an approved account to download it. It runs on your own computer, so it is only handed to people the grid's owner has approved while it is new.
Installs everything and runs the volunteer program in the background from startup, with nothing to look after: its own Python environment under /opt/mpakt-volunteer, a sandboxed service with its own unprivileged user, the lowest CPU and disk priority, a hard cap of 25% CPU and memory (you can choose), paused on battery, and updates twice a day. For Debian, Ubuntu, Raspberry Pi OS, Fedora, RHEL and its rebuilds, openSUSE, Arch and Alpine, on x86-64 and ARM. Not for Windows or macOS yet.
For verified users: sign in with an approved account. The command holds a personal link, good for 10 minutes, and the script it fetches holds a personal update token.
Paste this into a terminal on the Linux computer. It asks for your password to install the service.
Other amounts: add -s -- --cpu 40 --memory 40 after bash. Without root: bash -s -- --user in place of sudo bash. To remove it later: sudo bash /opt/mpakt-volunteer/install-linux.sh --uninstall. Do not share the command: the link in it is yours.
volunteer.py above and open a terminal in the folder it is in.py instead of python3.
python3 volunteer.py
The first time, it offers to install what it needs (numpy and websockets) and a few optional packages that make it faster or let it use more hardware. To install everything without being asked:
python3 volunteer.py --installTo check a download, compare its SHA-256 with the one shown above: sha256sum volunteer.py on Linux, shasum -a 256 volunteer.py on macOS, certutil -hashfile volunteer.py SHA256 on Windows.
DEFAULT_ACCOUNT = "..." near the top holds your volunteer code (see "Getting credit for your work" below), and the listed hash is that of the file with the line left blank. To check it, either read the file (Read the source above shows the plain version) and confirm that the code is the only difference from what you were shown, or blank the line and hash the result: sed 's/^DEFAULT_ACCOUNT = ".*"/DEFAULT_ACCOUNT = "__MPAKT_ACCOUNT__"/' volunteer.py | sha256sum. The Linux installer and the update the program fetches for itself are personalised the same way.The first run creates volunteer.ini next to volunteer.py. Open it in any text editor, change a number and save; the running program picks the change up within a few seconds.
[resources]
cpu = 50 ; processor time
memory = 50 ; system memory (RAM)
gpu = 50 ; graphics cards: compute time
gpu_memory = 50 ; ...and memory on the card
tpu = 50
tpu_memory = 50
npu = 50 ; NPUs and other AI accelerators
npu_memory = 50
memory = 50 lets the volunteer use up to 3 GB. If your other programs then take all but 2 GB, it drops to 1 GB. The same goes for everything else: cpu = 50 on an 8-core computer whose other programs keep 2 cores busy uses 3 cores, and a graphics card that a game keeps 60% busy has 40% free, so gpu = 50 uses 20%. The volunteer measures this continuously and backs off as your own work needs more.0 turns a resource off completely. With everything at 0 the program stays idle and does not connect.--list-devices: cuda:1 = 20, or cuda:1.memory = 30 for its memory.[devices], exclude = wgpu:0 skips a device, and only = cuda:0, cpu uses nothing else.While it runs you can also type into its terminal: status, set gpu 25, quit.
To do only some of them, set work under [general] in volunteer.ini, for example work = models or work = models, boxes.
Any CPU works with nothing extra. Everything else needs the library for that hardware; --list-devices shows what was found and suggests what to install for anything it saw but could not use. For running models, a GPU needs PyTorch; the other libraries below speed up matrix multiplications.
| Hardware | Install |
|---|---|
| Any graphics card, through Vulkan, Metal or DirectX 12 | pip install wgpu (included in --install) |
| NVIDIA GPUs, full speed | PyTorch with CUDA from pytorch.org, or CuPy |
| AMD GPUs, full speed (Linux) | PyTorch for ROCm from pytorch.org |
| AMD, Intel and other GPUs on Windows | pip install torch-directml, or wgpu |
| Intel Arc and Data Center GPUs | PyTorch XPU build, or pip install openvino |
| Apple silicon GPU | pip install torch |
| Apple Neural Engine | pip install onnxruntime |
| Intel AI Boost NPU (Core Ultra) | pip install openvino |
| Qualcomm Hexagon NPU (Snapdragon X) | pip install onnxruntime-qnn |
| Google Cloud TPU | pip install "jax[tpu]" |
| Huawei Ascend, Cambricon, Moore Threads | PyTorch with torch_npu, torch_mlu or torch_musa |
Each device is checked for correct answers before it is used, and anything that fails the check is left alone. A card reachable through two libraries is only driven through the faster one.
python3 volunteer.py # start volunteering
python3 volunteer.py --list-devices # show what it found and how fast each device is
python3 volunteer.py --benchmark # measure every device again
python3 volunteer.py --install # install the required and optional packages
python3 volunteer.py --headless # in the background: no console, lowest priority, logs to ~/.vtmu/volunteer.log
python3 volunteer.py --install-service # start in the background whenever you log in (and now)
python3 volunteer.py --uninstall-service # stop doing that
python3 volunteer.py --config FILE # use a different settings file
python3 volunteer.py --help
Ctrl+C, or quit, stops it; nothing keeps running afterwards. If you set it to start at login, --uninstall-service stops it and undoes that. To remove it completely, delete volunteer.py, volunteer.ini, and the .vtmu folder in your home folder, which holds a random volunteer id and the speed measurements.
Every account has a public volunteer code (it starts with vc_), shown in the volunteering panel on /account and /compute. A copy downloaded while you are signed in already has yours in it; to change it, put it in volunteer.ini or on the command line:
[general]
account = vc_xxxxxxxxxxxx
python3 volunteer.py --account vc_xxxxxxxxxxxx # overrides the file for this run
The code goes to the grid with the program's other messages and tells it which account to credit. It is not a password and the grid never shows it to other volunteers, but anyone who reads your volunteer.ini could credit work to you; rotate it on the panel if that worries you (the old one stops earning at once). Work the grid accepts earns 25% of what it would have cost a paying user, in credits for mPAKT Compute, up to a daily cap; work for your own account's models, tasks or boxes earns nothing. Over the last 30 days your contribution sets a tier (Bronze, Silver, Gold): a discount on what your boxes cost and bonus credits on card purchases. Without a code, or with one the grid does not know, the program works the same and nothing is credited.
On Linux with Docker, the volunteer program can also run boxes for mPAKT Compute: small web services from public GitHub repositories, each in its own container. This is on by default (work = models, matmul, boxes in volunteer.ini; remove boxes to turn it off) and happens only if Docker works. The program itself is for verified accounts, so only verified accounts' volunteers run boxes. The Linux installer does not set Docker up for you.
docker-ce-rootless-extras and uidmap, run dockerd-rootless-setuptool.sh install, then systemctl --user enable --now docker. The program finds the socket by itself. Do not add yourself to the docker group for this: that group is equivalent to root. A normal (root) Docker is accepted with a warning. Docker has to be able to enforce memory and process limits, or boxes stay off, and the program says why.codeload.github.com, or its files from raw.githubusercontent.com) instead of receiving it from the grid, so GitHub sees your IP address. Before anything runs, every file is checked against the size and SHA-256 the grid recorded for that commit; if anything differs, nothing is run and the program asks the grid for the code instead.Websites can let their visitors contribute from the browser with one script tag; see the volunteer script. A browser doing so also contacts GitHub, the npm and PyPI registries and a public content-delivery network from its own connection, as the participation agreement describes.
Running the volunteer program means taking part under the participation agreement, which describes what runs on your device.