Vast.ai¶
Experimental — implemented but never paid for
Fully implemented; never once driven end to end with a funded account. The rental lifecycle is unproven against the live marketplace. Start with a small budget and a one-instance cap, and watch instances reach terminated rather than assuming they will. See Maturity.
If you run this, please say what happened — that is the only thing that moves Vast.ai off this list. File a bug report, and send diagnostics by Discord DM rather than attaching them: Reporting a problem.
Every Vast.ai host has root over your container
Vast.ai is a marketplace of individually-owned consumer machines. The owner of the machine your job lands on can read the hashes, wordlists, potfiles and cracked plaintexts on it. The protection is a terms-of-service clause, not an isolation boundary.
This tier requires three separate opt-ins — provider, per client, and per job — each attributed in the audit log. Do not use it for production or client engagement data.
Account setup¶
- Use a dedicated Vast.ai account. Orphan reconciliation destroys anything on the account that KrakenHashes does not recognise.
- Fund it with a fixed prepaid balance and no auto-billing card. Vast.ai offers no spending cap; a prepaid balance is the only hard ceiling available. At zero balance Vast stops instances automatically.
- Create a scoped API key with
misc,user_read,instance_read,instance_write. Offer search lives undermisc, notinstance_read— this is easy to get wrong.
Credentials¶
Unlike AWS and RunPod, Vast.ai takes a bare API key string — not a JSON document.
It is AES-256-GCM encrypted at rest and never returned by the API.
Vast.ai rate-limits without telling you when to retry
Vast enforces a minimum interval between requests per endpoint and returns 429 with no Retry-After header. KrakenHashes paces itself at one request every three seconds to stay under it, so offer searches are not instant.
Settings¶
{
"countries": ["US", "DE"],
"gpu_models": ["rtx_4090", "rtx_5090"],
"denied_gpu_models": [],
"min_reliability": 0.9,
"allow_unverified": false,
"allow_residential": false
}
Every list empty is the default and means no restriction — the widest pool. An empty gpu_models keeps working as you add cards to your fleet; an explicit list freezes the selection.
The zero value is exactly today's behaviour: verified datacenter hosts only, every country, every card, no reliability floor.
| Setting | What it does |
|---|---|
countries | Vast.ai geolocations, matched case-insensitively as a substring, so US matches US, Texas. Doubles as your data-residency control |
gpu_models / denied_gpu_models | Matched on a normalised key, so rtx_4090 matches both NVIDIA GeForce RTX 4090 and RTX 4090. Deny always wins — it is the emergency lever for "that card keeps failing" |
min_reliability | Vast's own host score, 0–1. Hosts that report no score are kept, not dropped. Trades a little availability for fewer dead rentals: a host that drops the instance mid-chunk has still been paid for its commissioning |
allow_unverified | Opens the unverified tier. See below |
allow_residential | Opens non-datacenter hosts. See below |
What opening the tiers actually costs
This is the single largest availability increase available on Vast.ai, and it places client hashes, wordlists, potfiles and cracked plaintexts on machines Vast.ai has not verified. Every Vast host already has root over the container — these toggles remove the one filter that keeps it to hosts Vast has checked.
Some of the extra availability is also illusory: the unverified tier is where "stuck connecting" and "bad driver" reports concentrate, and a rental that never reaches useful work still costs you its commissioning.
Picking countries and cards from the UI¶
Admin → Settings → Cloud Provisioning → Providers → (edit a Vast.ai provider) → Countries and GPU models.
"Check availability" renders a country × GPU model grid with live rentable counts. The two axes are chosen independently — tick the countries you accept and the cards you accept, and every combination is allowed. AWS instead lets you pick types per zone.
| Signal | How much to trust it |
|---|---|
| Offered | Measured, from the live marketplace |
| Available count | Measured, and live. The most useful column here |
| Live price | Measured. There is no configured rate to compare against |
The probe deliberately relaxes your own country and model filters so you can see what you are excluding — but it does not relax the trust tier. If allow_unverified is off, the grid shows verified hosts only, because widening the grid past the boundary you set would advertise capacity you have decided not to use.
The grid caps at 12 GPU-model columns and warns when models are hidden.
The screen reads the saved provider config, so save before checking.
Operational caveats¶
- No provider-enforced TTL. Teardown rests on the in-guest deadline and the backend reaper.
- Storage bills from contract creation and keeps billing while the instance is stopped, so KrakenHashes always deletes and never stops.
- No idempotency token on create, and the id you get back is
new_contract, notid. exited,unknownandofflineare terminal. An instance in one of those states never recovers, so it is torn down rather than waited on.- Unprivileged containers — no
/dev/net/tun, noNET_ADMIN, and the create API silently discards--cap-add/--device. This is why the VPN runs in userspace mode and why OpenVPN cannot be supported. - Disk is sized once and cannot grow after creation.
Related¶
- Cloud GPU Providers — budgets, provisioning rules, trust tiers
- Cloud Agent VPN — the VPN credential every provider needs
- Cloud GPU Provisioning — adapter design notes