Models on a GPU
Managed GPU
Prepaid GPU balance, published rates, and how to launch, check and stop a managed GPU session.
Reviewed 2026-09-08
Managed GPU is an opt-in tier for GPU sessions that run in Chalupa's cloud account, so you do not need one of your own. It requires an active Solo or Crew plan and a separate prepaid USD balance per organization. The balance does not replace the managed hours included in your plan.
Availability and privacy
The CLI supports queued provisioning for organizations on an eligible plan. Review the plan and confirm each launch; adding balance alone does not launch a host. Availability depends on provider capacity.
An active Solo plan allows 1 concurrent managed GPU host and Crew allows 3. Active hosts and queued launches both count against that limit. Launches are limited to ten per minute per organization.
The console accepts managed launch jobs and validates plan eligibility, concurrent host limits, the prepaid balance, and current GPU capacity before queueing work. Adding balance does not launch a host. Each launch holds the cost of its requested session plus 15 minutes from the balance before any work is queued, and a launch the balance cannot cover is refused. When the host ends, its actual usage from launch to end is debited, never more than the hold, and the rest of the hold is returned. A launch that fails before a host exists returns its whole hold. Automatic refunds are not yet implemented.
The managed privacy posture is: our account, isolated per organization, destroyed at the end; BYOC keeps your-account guarantees. Managed hosts will be destroyed at the deadline, including powered-off hosts, rather than parked. Use BYOC when the cloud account must remain yours.
Capacity and launch overrides
Before queueing a launch, the console checks the current GPU size/region capacity. It caches the result for 60 seconds and gives the probe 10 seconds. A failed probe leaves capacity unknown and allows the launch to proceed. Capacity can change between the check and provisioning; this is not a reservation.
If your tier has no capacity in your region, no launch job is created. In an
interactive terminal, chalupa up offers other regions for the same tier and
other tiers with capacity, cheapest first (your region first for equal prices).
Each option shows its hourly rate and estimated cost for your session. GPUs that
cannot fit your model's estimated VRAM are disabled with a reason.
Choose an alternative to retry the launch, Wait to check every 60 seconds for
up to 20 minutes, or Cancel. Waiting starts the launch when capacity returns.
The console checks plan, host limit and balance again on every launch attempt.
With --json or outside a TTY, an unavailable launch prints
{ "code": "no_capacity", "alternatives": [...] } and exits 1 without prompting.
Scripts need --yes or CHALUPA_YES=1 to authorize a launch.
Override the YAML for one launch:
chalupa up --model llama3.1:70b --tier gpu-max --region eu-west
chalupa up --model qwen3.8:27b --tier gpu-large --region ca-east
All three flags are optional. Tiers are gpu-small, gpu-large and gpu-max;
regions are us-east, ca-east, eu-west, and us-south. The model must be a
local Ollama tag with a known VRAM estimate that fits the selected tier;
otherwise the CLI refuses before making requests. The header shows the
overrides. YAML stays unchanged, including when you select a capacity
alternative.
The successful launch saves model, tier, region and the worker's weight-size ceiling in
~/.config/chalupa/managed/<slug>.json. launch, tunnel and status use the
record's model when present, so an agent targets the model the host pulled.
Older records fall back to the YAML model. If provisioning still loses the
capacity race, the failed job advises: Run chalupa up again: it now checks capacity first.
Rates
Rates effective September 6, 2026. Hourly rates are rounded up to the next whole cent, and all balances and ledger amounts are stored in integer cents.
| Tier | GPU | VRAM | Managed / hour |
|---|---|---|---|
| gpu-small | RTX 4000 Ada | 20 GiB | $0.95 |
| gpu-large | RTX 6000 Ada | 48 GiB | $1.97 |
| gpu-max | H100 | 80 GiB | $5.52 |
Models use temporary host storage by default and download on each launch. GPU
time includes these downloads. An explicitly requested retained cache stays
billable after compute stops, at $0.13/GiB-month, debited from the balance once
a day. If the balance cannot cover a day, the cache is kept for seven days, the
account owners are emailed, and the cache is deleted after that unless the
balance is topped up. A plan keeps as many retained caches as it can run hosts
(Solo 1, Crew 3); relaunching an environment that already has one reuses it.
Session estimates use the published hourly rate and a five-minute minimum. Each
launch holds the cost of its requested session plus 15 minutes from the balance,
and is debited its actual usage when the host ends, never more than that hold.
Sessions stop at their configured deadline or after a successful chalupa down;
a managed session's deadline cannot be extended from the box or the CLI.
Top-ups and refunds
Top up $10, $25, or $50 through Stripe Checkout from the billing page. An active Solo or Crew plan is required; Community organizations can still read their balance. Only paid Checkout sessions credit the balance. Repeated payment notifications do not credit it twice.
Balance is refundable within 30 days. Contact support to request a refund; self-service refunds are not available in this phase. A refund or a card dispute removes the refunded amount from the balance as soon as Stripe reports it; a dispute decided in your favor returns it.
From the CLI
Start in your project directory:
chalupa setup
chalupa open billing # activate Solo or Crew if needed
chalupa balance --top-up 10 # after activating a plan, if the balance is empty
chalupa up
chalupa launch
chalupa down
Setup defaults to managed GPU and writes the starter config with gpu-large,
a 60-minute session, qwen3.8:27b, temporary model storage and OpenCode as the
default agent. Add inference.cache.sizeGb only to request a retained cache. Existing configs and valid account sessions are reused. No provider
token, provider SSH registration, or reaper token is needed. The local SSH
identity is ~/.config/chalupa/ssh/id_ed25519.
Managed commands require the account session in ~/.config/chalupa/account.json
and an eligible Solo or Crew plan. chalupa setup signs you in with your email
and a code, creating a hosted account if needed, and stores that account session.
chalupa login is a separate, operator-only terminal approval flow; customers
do not need it. See Quickstart.
Use chalupa balance --top-up 25 or chalupa balance --top-up 50 to add more than $10.
./chalupa.yml is automatic; --config PATH selects another project.
chalupa preview is an optional offline estimate. chalupa launch omp
overrides inference.agents.default for one run.
Ephemeral environments (no chalupa.yml)
After the one-time chalupa setup (account session + SSH key), launch a
GPU without any project file. The environment auto-names itself
(mansa-ola-style, memorable and unique) unless --name is given, and
nothing is written to the working directory:
chalupa up --model ornith-1.5:35b --tier gpu-large --context 128k --expires-after 45
chalupa launch
chalupa down
--model, --tier, --region, --context, --expires-after (15–480
minutes, default 45) and --agent work as per-launch overrides on YAML
projects too, leaving the file unchanged. The tier auto-fits the model when
--tier is omitted. chalupa up --dry-run prints the resolved plan and
cost with zero spend.
chalupa ls lists environments with remaining session time.
tunnel, launch, status and down accept --name, or run bare when a
single environment exists. The ready message shows a session card with the
dashboard link and the exact stop command.
up detects your current public IPv4 /32, shows the tier, GPU, hourly rate,
session estimate and remaining balance, then asks for confirmation. For scripts,
use chalupa up --yes or CHALUPA_YES=1. It follows the queued job and prints
a phase checklist until the host is ready. --json emits phase events;
--verbose prints the redacted diagnostic transcript after completion. preview is offline and shows managed hours,
session expiry, and the estimated prepaid balance charge.
inference.contextSize defaults to auto. The worker preserves that choice;
launch and exec negotiate from the model’s native ceiling down to a window
the GPU admits. Set an integer (2048–262144 for managed hosts) for a fixed
default, or override a launch/exec session with --context auto, native, or 128k (up --context takes a fixed token count only).
If omp reports “compaction freed too little context” after one message, its
system prompt may already consume most of a fixed 32K window. Remove that
fixed setting, reprovision the host through the normal lifecycle, and launch
again with auto; changing YAML alone does not update a running host daemon.
When portless is installed, tunnels publish a named .localhost route and
remove it on exit or Ctrl-C. Set CHALUPA_PORTLESS=0 to opt out. Agents keep
using the numeric loopback address.
Close the standalone tunnel with Ctrl-C before running an agent:
launch and exec open and close their own tunnels.
chalupa launch
chalupa exec -- your-command
chalupa status
# After changing networks:
chalupa session allow
# When finished:
chalupa down # yes/no confirmation; use --yes for scripts
The console enforces the session deadline even while the laptop sleeps.
session allow re-detects your IPv4 and updates SSH access.
session extend is not available yet for managed hosts.
The CLI stores the host IP, pinned SSH host key, expiry, and job details in
~/.config/chalupa/managed/<environmentSlug>.json with mode 0600.
tunnel uses a temporary pinned known_hosts and strict host-key checking.
A successful down removes the local record. Optional model cache storage
remains billable after compute stops.
See Plans and billing and API and schema.
Checkout asks Stripe for Adaptive Pricing, so customers see and pay in their local currency when Stripe supports it for the Chalupa account; the balance is always credited in USD at the amount you chose, and the ledger notes the local amount paid. Where Stripe does not convert, Checkout charges the USD price as shown.
Launch requests
chalupa up submits the launch for you. An active Solo plan allows one
concurrent host; Crew allows three. Queued and running launches count toward
that limit. Each launch holds its estimated cost from your balance and is never
charged more than that hold.
A launch names a GPU tier, a model, an SSH Ed25519 public key, one allowed IPv4
/32, and a 15–480 minute lifetime. Region defaults to ca-east; us-east,
eu-west and us-south are also accepted. Omitting cacheGb uses temporary
host storage.
A launch that was interrupted or whose outcome is uncertain is never relaunched automatically; it is reconciled against the real resources first.
When inference.model is omitted, Chalupa uses qwen3.8:27b (~18 GB of Ollama weights). Allowing room for context and runtime requires gpu-large or gpu-max; preview and up reject this default on gpu-small (20 GiB VRAM).
Console telemetry
After up, the CLI uses your account session to issue an ingest key and streams
it with the log collector over SSH, pinned to the worker-reported host key. The
key stays off your laptop's disk. Successful delivery prints:
✓ Telemetry armed
The console shows heartbeats, NVIDIA GPU samples and collected Ollama service logs. Inference runs still require an explicit compatible receipt report; launching OpenCode alone does not generate those receipts. Heartbeats update reported idle deadlines through the same ingestion path as BYOC; session expiry remains enforced by the managed reaper. An idle deadline requires an idle limit in the host config.
tunnel and launch retry delivery when bootstrap is incomplete. To rotate and
redeliver the key explicitly:
chalupa session bootstrap
chalupa session bootstrap --json
Failures print a reason and Retry: chalupa session bootstrap. The GPU may still
be running. Hosts provisioned before telemetry services were installed need to
be stopped and relaunched with the updated worker; retry cannot install missing
cloud-init services. No past samples or logs are backfilled.
First launch readiness
chalupa launch and chalupa tunnel wait up to 25 minutes for Ollama and the
selected model. One spinner shows the current step:
Waiting for the host to accept connections
Ollama is starting
Downloading ornith-1.5:35b · 4.2/23 GB
✓ Host ready · ornith-1.5:35b · 23 GB
New hosts expose download bytes through a private loopback health forward.
Older hosts show Downloading <model>… (first launch, ~1 min per 4 GB).
chalupa status probes through a temporary pinned tunnel and prints Host: ready,
Host: starting, or Host: downloading <model> (x/y GB).
A timeout closes the tunnel; the host continues running. Check chalupa status.
Telemetry failure does not prevent connecting. For example:
Telemetry not armed yet (console returned 500). Retry later: chalupa session bootstrap
Configuration limits
Managed accepts a fixed context of 2,048–262,144 tokens or auto, model tags up to
128 characters, an optional model cache of 20–500 GiB, and a maxModelBytes
budget of at most 500 GiB in bytes. The CLI validates these limits
before calling the console. BYOC supports its own wider context/cache bounds.
Set idleShutdownMinutes (5–10,080) at the top level to request inactivity-based
shutdown in addition to absolute session expiry. The CLI passes this setting to
the managed worker; it takes effect on a new host. It depends on accepted host
heartbeats and a working console reaper. Reconnecting does not change the policy
of an existing host.
When inference.model is omitted, Chalupa uses qwen3.8:27b (~18 GB of Ollama weights). Allowing room for context and runtime requires gpu-large or gpu-max; preview and up reject this default on gpu-small (20 GiB VRAM).