Skip to main content
A fleet pools hosted model capacity across a cluster of robots, automatically scaling GPU compute based on the maximum number of robots active simultaneously (peak_active). Each robot runs servo daemon locally and connects its sensors and motor controllers directly to the shared fleet.
Preview. The servo.connect API is currently in developer preview and not yet shipped in general availability. Early feedback and testing are welcome. Code samples on this page import connect/camera explicitly from servo.universal — they don’t yet resolve as servo.connect etc.

1. Assign stable robot identities

To connect a robot to a fleet, assign it a stable name (and optional site/labels) in servo.connect():
The first connection with a given name registers the robot in your organization; subsequent connections attach to that existing record. Registration derives a configuration digest from the robot’s actual bound observe/act sources, so there’s no CLI equivalent to pre-register a name before hardware and a driver exist — connect(robot=...) is the only registration path today. List registered robots in your organization with:

2. Deploy shared fleet capacity

From your central management script or developer machine, provision shared GPU capacity for your fleet:
peak_active defines the maximum number of robots that run concurrently. Servo automatically manages GPU provisioning to guarantee 30 Hz control loop latency for all active sessions. For larger deployments, you can dynamically select robots using site and label selectors:

Readiness modes


3. Run each robot locally

On each robot computer, install the Servo daemon as a supervised system service (which provides automatic restarts on reboot or failure):
Run zero-motion preflight verification:
In rig.py, point servo.connect to your fleet name instead of a single standalone model:

4. Roll out model updates without downtime

When a newly trained or fine-tuned checkpoint (ckpt_...) is ready, update the fleet without disrupting active robot operations:
  • Zero-Downtime Cutover: Active episodes finish uninterrupted on the current release. Once the new model checkpoint is warm and verified, subsequent rollouts automatically route to it.
  • Instant Rollback: If an issue occurs with a new checkpoint, call fleet.rollback() at any time to immediately revert to the prior healthy version: