Launching a GPU instance
From the console
- In the console, go to Compute → GPU Instances.
- Click Launch instance.
- Fill in the dialog:
| Field | What it does |
|---|---|
| Name | Friendly label shown in the list. Optional — defaults to "Instance #<id>". |
| Region | Pick from the dropdown of available regions, based on data locality or latency. |
| GPU type | Auto-filled for the selected region. |
| GPU count | 1, 2, 4, or 8. Must not exceed the region's GPUs-per-node. |
| Container image | Docker image URL (e.g., nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04). See Container Images for saved ones. |
| Startup command | Optional. Overrides the image's default command. Useful to sleep infinity if the image exits otherwise. |
| Estimated duration | Hours. 1 hour minimum. This is the auto-stop time — the instance will terminate when it elapses unless you extend. |
| Cloud drives | Block storage volumes (one per instance at a time). Attach new or existing. See Storage. |
| Shared filesystems | Network filesystems (can be attached to multiple instances). Useful for sharing datasets or model weights. |
| Expose a public service URL | Opt-in checkbox. Tick it to mint a public URL at launch and enter the service port your container listens on. Leave it unticked for a private dev box — you can open the URL later from the detail page. |
- Click Launch.
Once launched, the instance starts in pending status. Within ~30 seconds to 2 minutes (depending on image pull time), it transitions to running. You'll see it on the GPU Instances page with a green dot.
Credit check at launch
At launch time, EcoLink places a credit hold equal to hourly_rate × gpu_count × estimated_duration_hours. The launch dialog shows the per-GPU rate and the total hold for your selection.
If your balance is less than this, the launch fails with:
HTTP 402 Payment Required
{ "error": "insufficient credit balance" }
The held amount is refunded (minus actual usage) when the instance terminates. See How billing works for details.
From the API
You can also launch via the API:
curl https://api.ecohash.com/gpu-instances \
-X POST \
-H "Authorization: Bearer eco_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-dev-box",
"region_id": "<region-id>",
"gpu_type": "<gpu-type-for-region>",
"gpu_count": 1,
"container_image": "nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04",
"startup_command": "/bin/bash -c \"sleep infinity\"",
"estimated_duration_hours": 2
}'
Response:
{
"id": 142,
"status": "pending",
"region_id": "<region-id>",
"gpu_type": "<gpu-type-for-region>",
...
}
See the full POST /gpu-instances schema in API Reference.
Public URL for an HTTP service in your container
If your container exposes an HTTP service (a notebook UI, a custom inference API, ComfyUI, etc.), EcoLink can mint a public URL for it at:
https://api.ecohash.com/gpu-instances/{instance_id}/service/
The URL is authenticated — requests must carry your console session cookie or an Authorization: Bearer eco_YOUR_KEY header. WebSocket and streaming responses both work.
You can open the URL at launch by ticking the "Expose a public service URL" checkbox and entering the port your service listens on, or later from the instance detail page once it's running. The detail page shows a Create endpoint form when no URL is set, and the URL with a copy button once it is. You can change the port at any time by re-submitting the form; the URL stays the same.
Public URL config persists across stop / resume — the URL doesn't change when you stop and resume an instance.
Recommended base images
- General CUDA dev:
nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04 - Jupyter + PyTorch:
quay.io/jupyter/pytorch-notebook:cuda12-latest - vLLM serving:
vllm/vllm-openai:latest - Llama.cpp:
ghcr.io/ggerganov/llama.cpp:full-cuda - Your own: push to Docker Hub / ECR / GHCR, make sure it's publicly pullable, then reference it here
If the container image includes jupyter in its name, EcoLink automatically provisions a Jupyter URL — see Jupyter.