Manage Vast GPU Fleet
Use one repository-owned workflow for every current and future Vast workload.
Treat
GPU_INSTANCES.md as the
live inventory and each model directory as the source of truth for its setup
and verification commands.
Establish authority
Read the repository AGENTS.md and GPU_INSTANCES.md before using provider
tools. Determine the requested mode:
- Audit: inspect fleet, offers, utilization, traffic, errors, and costs
without changing external state.
- Prepare: rent and test isolated candidates for one or more production GPU
slots, but do not route production traffic.
- Promote: cut over one already-qualified candidate only after explicit
human approval naming the workload and instance.
Default to Audit. A scheduled task may use Prepare only when its prompt
explicitly authorizes candidate spend. Never infer Promote authority from a
scheduled run or an earlier approval.
Never print credentials. Creating, adding, rotating, synchronizing, or
deploying a secret requires the separate approval and dedicated secret PR
defined in AGENTS.md. If Prepare lacks an approved, narrowly scoped canary
credential path, report the blocker and stop before provisioning.
Invoke from scheduled tasks
Keep scheduling configuration outside this skill, but make every task prompt
invoke this checked-in file explicitly:
Read and use .claude/skills/manage-vast-gpu-fleet/SKILL.md.
Mode: <Audit|Prepare>. Do not enter Promote mode.
Use Audit in the daily model-operations scout so it can reconcile fleet
economics without spending or duplicating the high-frequency task. Use
Prepare in the dedicated Vast offer scout only after its spend ceiling and
canary credential path are configured.
Keep volatile operating policy in the scheduled task, including cadence,
savings and reliability thresholds, credit discounts, exchange rates, hardware
filters, candidate TTL and spend ceilings, aggregate concurrency budget, and
temporary machine cooldowns. Keep durable coordination, validation, approval,
cleanup, and documentation rules in this skill.
Discover current state
Rebuild state from live evidence; do not trust instance IDs in documentation
without checking them.
- List every Vast instance, including stopped storage, its machine, GPU,
status, all-in hourly rate, reliability, location, disk, and utilization.
- Map each active instance to its workload using labels, process health,
Cloudflare connectivity, the Pollinations registry, and recent production
attribution.
- Measure recent demand, success rate, fallback volume, queue pressure, p50,
p95, and GPU utilization over both burst and idle windows.
- Reconcile the result with
GPU_INSTANCES.md. Report stale documentation,
paid idle resources, unregistered workers, or traffic served elsewhere.
Do not stop or destroy anything during Audit.
Qualify offers
Inspect offers for every active Vast workload at the cadence configured by the
scheduled task. Treat each current production instance as an independently
replaceable GPU slot. A workload with two replicas therefore has two target
slots.
A candidate qualifies only when all conditions pass:
- It passes the scheduled task's current savings, reliability, availability,
hardware, network, and spend policy.
- Its all-in rate includes storage and is compared using the task's current
credit discount and verified exchange rate.
- GPU, VRAM, disk, CPU, CUDA/driver, and network preserve the workload's
documented capability and recent production capacity.
- A replica replacement preserves host, machine, and failure-domain diversity.
- The cash comparison is verifiable; otherwise do not auto-prepare it.
Marketplace metadata and previous failures are only filters. Require real image
pull, outbound network, model-download, disk, driver, bootstrap, and
workload-specific checks. Apply time-bounded machine cooldowns from automation
memory; do not turn a transient provider failure into a permanent repository
blacklist.
Coordinate overlapping runs
Use an atomic lease keyed by the exact production instance being replaced.
Automation memory is not a lock.
- Before renting, check live Vast labels and the lease store for an existing
candidate for that target.
- Acquire the target lease atomically, then recheck the production instance
and offer before spending.
- Label the candidate with its workload, target production instance, and
lease ID so a later run can recover state.
- Keep a heartbeat while provisioning and testing. A stale lease with a live
candidate must be adopted or cleaned up, never ignored.
- Release only that target's lease after confirmed cleanup or completed
promotion.
One scheduled run may claim every qualifying unlocked target and prepare those
candidates in parallel. Another overlapping run may prepare other unlocked
targets, but never a second candidate for an already locked production slot.
Enforce the aggregate concurrency and spend ceiling supplied by the scheduled
task.
Prepare isolated canaries
Keep the existing production worker and fallback unchanged.
- Run each affected workload's executor preflight independently. Exclude only
targets whose workload is not ready; do not block other ready workloads.
- Acquire the per-target leases, revalidate each offer, and immediately rent
all claimed offers before their availability changes.
- Deploy and test the claimed candidates in parallel. Enforce the
per-candidate TTL and spend ceiling supplied by the scheduled task.
- Attach the approved SSH public key and run each model's checked-in setup
script.
- Keep registration and shared production tunnels disabled while validating
locally. Use a dedicated canary tunnel or VPC route for public-path tests.
- Run the checked-in verification script when the model has one, then test:
- exact checkpoint, quantization, runtime, and output quality;
- direct authenticated API and the actual Cloudflare data path;
- fixed-seed parity where deterministic;
- normal, maximum, and invalid dimensions;
- concurrency, queue shedding, latency, and error rate;
- restart persistence and automatic service recovery;
- sustained load representative of recent production demand;
- input variants such as multi-image editing when the model supports them.
- Inspect model, tunnel, CUDA, OOM, and network logs after the tests.
Handle targets independently. Destroy a failed candidate, verify its compute
and storage billing ended, release only its target lease, and leave production
and other canaries untouched. Record transient host failures in automation
memory with the task's cooldown. Add repository guidance only when a failure
reveals a durable, repeatable deployment requirement.
Stop at READY FOR APPROVAL
After a candidate passes all checks, do not change production. Keep it running,
hold its target lease, and send the configured notification to Elliot and
Thomas with:
- workload, target production instance/GPU/rate, and candidate
offer/machine/location;
- candidate rate, monthly credit savings, cash-equivalent savings, and runway;
- every test result, measured capacity, latency, and error rate;
- risks, caveats, current hold state, and whether stopping may lose capacity;
- the exact request:
Yes, promote Vast canary <instance> for <workload> target <production-instance> to production now.
Keep the candidate running when the short hold cost is smaller than the risk of
losing the offer. Stop it only when the user accepts that Vast may not restart
it on the same GPU. A ready candidate blocks only its target; scouting and
preparation may continue for other unlocked production slots.
Promote after explicit approval
Approval is valid for one named candidate, workload, and target production
instance. Serialize promotions within a workload even when multiple candidates
are ready.
- Revalidate health, restart recovery, rate, and offer ownership if the
candidate was stopped or the approval was delayed.
- Join the intended production tunnel, VPC, registry pool, or route without
changing model pricing or fallback policy.
- Confirm real production requests are attributed to the new instance.
- Verify production latency, success rate, queue behavior, and logs.
- If verification fails, restore the prior route and keep the old instance.
- If verification passes, drain and immediately destroy the replaced
instance. Do not retain a paid rollback instance.
- Confirm the destroyed instance no longer accrues compute or storage charges.
- Release its target lease. Before promoting another candidate for the same
workload, revalidate savings, capacity, and failure-domain diversity against
the newly changed fleet.
Document the completed change
After a successful cutover and old-instance destruction, create a focused
repository PR:
- Update
operations/infrastructure/gpu/GPU_INSTANCES.md with the new instance,
machine/region, rate, status, total fleet burn, savings, validation evidence,
and Last updated date.
- Update the model README only when deployment behavior, limits, commands,
performance, or a reusable failure mode changed.
- Update setup or verification scripts only when the successful deployment
required a durable implementation change.
- Update the shared model registry only if the configured provider or public
model contract changed. Replacing one Vast instance with another normally
does not require a registry edit.
- Keep secret mutations out of the operational PR.
- Run the repository checks, open a ready PR with measured evidence, and do
not merge it without explicit instruction.
Do not create a documentation-only PR for a failed candidate unless it produced
a reusable deployment lesson.
1---2name: manage-vast-gpu-fleet3description: Inspect, price, canary, replace, and document Pollinations-operated Vast.ai GPU workers. Use for scheduled Vast offer scouting, GPU fleet cost or utilization reviews, preparing an isolated replacement, human-approved production cutovers, retiring replaced instances, and the follow-up repository PR.4---56# Manage Vast GPU Fleet78Use one repository-owned workflow for every current and future Vast workload.9Treat10[`GPU_INSTANCES.md`](../../../operations/infrastructure/gpu/GPU_INSTANCES.md) as the11live inventory and each model directory as the source of truth for its setup12and verification commands.1314## Establish authority1516Read the repository `AGENTS.md` and `GPU_INSTANCES.md` before using provider17tools. Determine the requested mode:1819- **Audit:** inspect fleet, offers, utilization, traffic, errors, and costs20 without changing external state.21- **Prepare:** rent and test isolated candidates for one or more production GPU22 slots, but do not route production traffic.23- **Promote:** cut over one already-qualified candidate only after explicit24 human approval naming the workload and instance.2526Default to Audit. A scheduled task may use Prepare only when its prompt27explicitly authorizes candidate spend. Never infer Promote authority from a28scheduled run or an earlier approval.2930Never print credentials. Creating, adding, rotating, synchronizing, or31deploying a secret requires the separate approval and dedicated secret PR32defined in `AGENTS.md`. If Prepare lacks an approved, narrowly scoped canary33credential path, report the blocker and stop before provisioning.3435## Invoke from scheduled tasks3637Keep scheduling configuration outside this skill, but make every task prompt38invoke this checked-in file explicitly:3940```text41Read and use .claude/skills/manage-vast-gpu-fleet/SKILL.md.42Mode: <Audit|Prepare>. Do not enter Promote mode.43```4445Use **Audit** in the daily model-operations scout so it can reconcile fleet46economics without spending or duplicating the high-frequency task. Use47**Prepare** in the dedicated Vast offer scout only after its spend ceiling and48canary credential path are configured.4950Keep volatile operating policy in the scheduled task, including cadence,51savings and reliability thresholds, credit discounts, exchange rates, hardware52filters, candidate TTL and spend ceilings, aggregate concurrency budget, and53temporary machine cooldowns. Keep durable coordination, validation, approval,54cleanup, and documentation rules in this skill.5556## Discover current state5758Rebuild state from live evidence; do not trust instance IDs in documentation59without checking them.60611. List every Vast instance, including stopped storage, its machine, GPU,62 status, all-in hourly rate, reliability, location, disk, and utilization.632. Map each active instance to its workload using labels, process health,64 Cloudflare connectivity, the Pollinations registry, and recent production65 attribution.663. Measure recent demand, success rate, fallback volume, queue pressure, p50,67 p95, and GPU utilization over both burst and idle windows.684. Reconcile the result with `GPU_INSTANCES.md`. Report stale documentation,69 paid idle resources, unregistered workers, or traffic served elsewhere.7071Do not stop or destroy anything during Audit.7273## Qualify offers7475Inspect offers for every active Vast workload at the cadence configured by the76scheduled task. Treat each current production instance as an independently77replaceable GPU slot. A workload with two replicas therefore has two target78slots.7980A candidate qualifies only when all conditions pass:8182- It passes the scheduled task's current savings, reliability, availability,83 hardware, network, and spend policy.84- Its all-in rate includes storage and is compared using the task's current85 credit discount and verified exchange rate.86- GPU, VRAM, disk, CPU, CUDA/driver, and network preserve the workload's87 documented capability and recent production capacity.88- A replica replacement preserves host, machine, and failure-domain diversity.89- The cash comparison is verifiable; otherwise do not auto-prepare it.9091Marketplace metadata and previous failures are only filters. Require real image92pull, outbound network, model-download, disk, driver, bootstrap, and93workload-specific checks. Apply time-bounded machine cooldowns from automation94memory; do not turn a transient provider failure into a permanent repository95blacklist.9697## Coordinate overlapping runs9899Use an atomic lease keyed by the exact production instance being replaced.100Automation memory is not a lock.1011021. Before renting, check live Vast labels and the lease store for an existing103 candidate for that target.1042. Acquire the target lease atomically, then recheck the production instance105 and offer before spending.1063. Label the candidate with its workload, target production instance, and107 lease ID so a later run can recover state.1084. Keep a heartbeat while provisioning and testing. A stale lease with a live109 candidate must be adopted or cleaned up, never ignored.1105. Release only that target's lease after confirmed cleanup or completed111 promotion.112113One scheduled run may claim every qualifying unlocked target and prepare those114candidates in parallel. Another overlapping run may prepare other unlocked115targets, but never a second candidate for an already locked production slot.116Enforce the aggregate concurrency and spend ceiling supplied by the scheduled117task.118119## Prepare isolated canaries120121Keep the existing production worker and fallback unchanged.1221231. Run each affected workload's executor preflight independently. Exclude only124 targets whose workload is not ready; do not block other ready workloads.1252. Acquire the per-target leases, revalidate each offer, and immediately rent126 all claimed offers before their availability changes.1273. Deploy and test the claimed candidates in parallel. Enforce the128 per-candidate TTL and spend ceiling supplied by the scheduled task.1294. Attach the approved SSH public key and run each model's checked-in setup130 script.1315. Keep registration and shared production tunnels disabled while validating132 locally. Use a dedicated canary tunnel or VPC route for public-path tests.1336. Run the checked-in verification script when the model has one, then test:134 - exact checkpoint, quantization, runtime, and output quality;135 - direct authenticated API and the actual Cloudflare data path;136 - fixed-seed parity where deterministic;137 - normal, maximum, and invalid dimensions;138 - concurrency, queue shedding, latency, and error rate;139 - restart persistence and automatic service recovery;140 - sustained load representative of recent production demand;141 - input variants such as multi-image editing when the model supports them.1427. Inspect model, tunnel, CUDA, OOM, and network logs after the tests.143144Handle targets independently. Destroy a failed candidate, verify its compute145and storage billing ended, release only its target lease, and leave production146and other canaries untouched. Record transient host failures in automation147memory with the task's cooldown. Add repository guidance only when a failure148reveals a durable, repeatable deployment requirement.149150## Stop at READY FOR APPROVAL151152After a candidate passes all checks, do not change production. Keep it running,153hold its target lease, and send the configured notification to Elliot and154Thomas with:155156- workload, target production instance/GPU/rate, and candidate157 offer/machine/location;158- candidate rate, monthly credit savings, cash-equivalent savings, and runway;159- every test result, measured capacity, latency, and error rate;160- risks, caveats, current hold state, and whether stopping may lose capacity;161- the exact request:162 `Yes, promote Vast canary <instance> for <workload> target163 <production-instance> to production now.`164165Keep the candidate running when the short hold cost is smaller than the risk of166losing the offer. Stop it only when the user accepts that Vast may not restart167it on the same GPU. A ready candidate blocks only its target; scouting and168preparation may continue for other unlocked production slots.169170## Promote after explicit approval171172Approval is valid for one named candidate, workload, and target production173instance. Serialize promotions within a workload even when multiple candidates174are ready.1751761. Revalidate health, restart recovery, rate, and offer ownership if the177 candidate was stopped or the approval was delayed.1782. Join the intended production tunnel, VPC, registry pool, or route without179 changing model pricing or fallback policy.1803. Confirm real production requests are attributed to the new instance.1814. Verify production latency, success rate, queue behavior, and logs.1825. If verification fails, restore the prior route and keep the old instance.1836. If verification passes, drain and immediately destroy the replaced184 instance. Do not retain a paid rollback instance.1857. Confirm the destroyed instance no longer accrues compute or storage charges.1868. Release its target lease. Before promoting another candidate for the same187 workload, revalidate savings, capacity, and failure-domain diversity against188 the newly changed fleet.189190## Document the completed change191192After a successful cutover and old-instance destruction, create a focused193repository PR:1941951. Update `operations/infrastructure/gpu/GPU_INSTANCES.md` with the new instance,196 machine/region, rate, status, total fleet burn, savings, validation evidence,197 and `Last updated` date.1982. Update the model README only when deployment behavior, limits, commands,199 performance, or a reusable failure mode changed.2003. Update setup or verification scripts only when the successful deployment201 required a durable implementation change.2024. Update the shared model registry only if the configured provider or public203 model contract changed. Replacing one Vast instance with another normally204 does not require a registry edit.2055. Keep secret mutations out of the operational PR.2066. Run the repository checks, open a ready PR with measured evidence, and do207 not merge it without explicit instruction.208209Do not create a documentation-only PR for a failed candidate unless it produced210a reusable deployment lesson.