Cost Estimation¶
Canard uses spot GPU instances. Cost depends on num_envs, max_iterations, and gpu_count. The SDK and dashboard show estimates before you submit.
Pricing Model¶
| GPUs | Hourly Rate | Speedup |
|---|---|---|
| 1 | ~$0.50/hr | 1.0x |
| 2 | ~$1.00/hr | 1.7x |
| 4 | ~$2.00/hr | 2.9x |
How It's Calculated¶
iter_time = 4.4s × (num_envs / 4096) / gpu_speedup
task_hours = (max_iterations × iter_time / 3600) + startup_overhead
task_cost = task_hours × gpu_count × $0.50/hr
total_cost = task_cost × num_tasks
- Base: 4.4 seconds per iteration on RTX 4090 with 4096 envs
- Startup overhead: ~2 minutes (Isaac Sim boot + environment init)
- GPU speedup: 1.0x (1 GPU), 1.7x (2 GPU), 2.9x (4 GPU)
Estimate from Python¶
from canard.models import TrainingConfig
config = TrainingConfig(
task_name="Template-Go2-Standing-Direct-v0",
num_envs=8192,
max_iterations=5000,
gpu_count=2,
)
est = config.estimate_cost(total_tasks=1)
print(f"Iter time: {est['iter_sec']:.1f}s")
print(f"Task time: {est['task_time_hr']:.1f} hr")
print(f"Hourly rate: ${est['hourly_rate']:.2f}")
print(f"Task cost: ${est['task_cost']:.2f}")
For a sweep:
est = config.estimate_cost(total_tasks=12)
print(f"Per task: ${est['task_cost']:.2f}")
print(f"Total: ${est['total_cost']:.2f}")
print(f"Wall time: ~{est['wall_time_hr']:.1f} hr (parallel)")
Examples¶
| Config | Time | Cost |
|---|---|---|
| 5000 iter, 4096 envs, 1 GPU | ~6.1 hr | ~$3.09 |
| 5000 iter, 4096 envs, 2 GPU | ~3.6 hr | ~$3.63 |
| 5000 iter, 8192 envs, 2 GPU | ~7.2 hr | ~$7.23 |
| 5000 iter, 4096 envs, 4 GPU | ~2.1 hr | ~$4.26 |
| 12-task sweep, 8192 envs, 2 GPU | ~7.2 hr wall | ~$86.76 |
Tips¶
- More GPUs = faster but slightly more expensive per run (sublinear speedup, linear cost)
num_envsscales linearly with time — 8192 takes 2x longer than 4096- Spot pricing fluctuates — these are estimates based on typical rates
- The dashboard shows estimates before you click "Start Training"