Providing a GPU
Turn an idle NVIDIA GPU into an earning machine. This takes about 30 minutes the first time.
Requirements
| OS | Linux (Ubuntu 22.04 or 24.04 recommended) |
| GPU | NVIDIA, with a recent driver: nvidia-smi must work |
| Containers | Docker and the NVIDIA Container Toolkit |
| Network | A public IP or router port forwarding for TCP 8443 (gateway) and 30000–30099 (renters' apps) |
| Wallet | A Solana wallet for payouts. It never needs to be on the GPU machine. |
| Disk | 100 GB+ free; ML images are large |
Check that Docker can see the GPU:
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
1. Install the node
Download kiln-provider for Linux from the Download button on List your GPU, then:
chmod +x kiln-provider
sudo mv kiln-provider /usr/local/bin/
kiln-provider --help
It's a single self-contained program with no other dependencies.
2. Create the heartbeat key
kiln-provider heartbeat-key new
This writes ~/.config/kiln/heartbeat.json and prints its public key. Send that key some SOL: it pays the network fee for each heartbeat, one per minute while you're rented. That's about 0.007 SOL per day of rental, so 0.1 SOL covers roughly two weeks of continuous use. Top it up as you earn.
The heartbeat key can do two things: send heartbeats for your listing, and trigger settlement, which anyone can do and which always pays your wallet. It can't move your funds.
3. List your GPU
On Provide, connect your payout wallet and fill in:
- GPU model, count and region
- Price per hour in USD. You're always paid in USDC, even when a renter pays with $KILN.
- Public address: your public IP and port, for example
203.0.113.7:8443, or a hostname - Heartbeat public key from step 2
Submit to create your listing on-chain. You can change price, address and availability any time under Your listings. Open leases keep the price they started with.
4. Start the node
kiln-provider run \
--rpc https://api.devnet.solana.com \
--owner <YOUR_PAYOUT_WALLET> \
--mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v # USDC on mainnet
You should see:
level=INFO msg="listing found" gpu="1x RTX 4090" region=EU-West host=http://203.0.113.7:8443
level=INFO msg="renter gateway listening" addr=:8443 public_host=203.0.113.7 ports=30000-30099
Run it as a service
# /etc/systemd/system/kiln-provider.service
[Unit]
Description=Kiln provider
After=docker.service network-online.target
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/kiln-provider run --rpc https://api.devnet.solana.com --owner <WALLET> --mint <USDC_MINT>
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now kiln-provider
journalctl -u kiln-provider -f
What happens when you're rented
- A renter opens a lease. It appears on the live network.
- They connect. Your gateway checks their wallet signature against the lease on Solana.
- They launch a workload. Your node pulls the image and runs it with the GPU attached and their ports mapped.
- Heartbeats go out only while their container runs. Each one adds verified time to the lease.
- Every hour the node settles: verified time is paid into your wallet in USDC, minus the 2.5% protocol fee.
- When the lease ends or is closed, the node removes the container. Your GPU is free for the next renter.
One workload runs at a time per listing. While you're busy, other renters get a clear message and can close for a full refund.
Configuration
| Flag | Default | |
|---|---|---|
--rpc |
devnet | Solana RPC URL. Use a paid RPC on mainnet. |
--key |
~/.config/kiln/heartbeat.json |
Heartbeat key file |
--listen |
:8443 |
Gateway listen address |
--public-host |
host of your listing's address | Hostname/IP shown to renters for their ports |
--port-range |
30000-30099 |
Host ports for renters' apps |
--interval |
60s |
Heartbeat cadence (max 90 s) |
--settle-every |
1h |
Payout cadence; 0 disables |
--memory, --cpus |
unlimited | Per-container limits, e.g. --memory 48g --cpus 16 |
--shm-size |
8g |
Shared memory for data loaders |
--tls-cert, --tls-key |
off | Serve the gateway over HTTPS |
--runtime |
docker |
none = heartbeat every lease and run workloads yourself |
Pricing your GPU
Look at what similar GPUs are listed for on Rent, and remember you're only paid while you're proven. A reliable machine at a fair price earns more than an expensive one that sits idle.
Security on your machine
- Renters' containers run without
--privileged, withno-new-privilegesand some risky capabilities dropped. - They still have network access and your GPU. Treat the machine as shared: keep nothing sensitive on it, and ideally put it on its own network segment.
- Keep the driver, Docker and the NVIDIA toolkit up to date.
- See Security and trust for the full threat model.
Troubleshooting
| Symptom | Fix |
|---|---|
no listing at … |
The --owner and --mint must match the listing you registered. |
listing's heartbeat key is … but this machine's key is … |
Update the heartbeat key on your listing, or point --key at the right file. |
| Renters can't connect | Check ports 8443 and 30000–30099 are reachable from outside, and that your listing's public address is correct. |
could not read GPU utilisation |
nvidia-smi isn't on the PATH. Heartbeats still go out with 0%. |
| Heartbeats failing | The heartbeat key is out of SOL. Top it up. |