Swarm pools#

Warning

Swarm pools are incomplete. domyn-swarm pool pool validates the pool configuration and brings every swarm in it up, then immediately tears them all down again — there is no way to submit work to a pool. The command’s own help text is marked “not yet implemented”.

Do not build a workflow on this. Running several swarms today describes what actually works.

This page documents the configuration shape so it is ready when the feature lands, and so nobody loses an afternoon discovering the above.

Configuration shape#

A pool is a list of swarms, each pointing at its own config file:

# pool.yaml
pool:
  - name: qwen-32b
    config_path: configs/qwen3_32B.yaml
  - name: deepseek-r1
    config_path: configs/deepseek_r1.yaml

SwarmPoolConfig.pool is a list of SwarmPoolElement, each with:

  • name — a label identifying this swarm within the pool

  • config_path — path to a DomynLLMSwarmConfig YAML, read with DomynLLMSwarmConfig.read

The referenced files are ordinary swarm configs, exactly as used with domyn-swarm up -c. Nothing about them is pool-specific, so the same config can be used both ways.

What the command does today#

domyn-swarm pool pool pool.yaml

Note the doubled word: the subcommand is registered as pool inside the pool app, so the invocation is domyn-swarm pool pool.

In order, it:

  1. validates pool.yaml against SwarmPoolConfig

  2. constructs one DomynLLMSwarm per element, reading each config_path

  3. enters a pool context that brings every swarm up — then exits it immediately, tearing them all down

Step 3 is the problem: the body of the context is empty. Every swarm is allocated and deallocated with no opportunity to submit anything.

What it is useful for is validating a set of configs — a malformed config_path or an invalid swarm config fails before any resources are requested. That is a real if narrow use.

Running several swarms today#

Launch each independently and address them by name:

domyn-swarm up -c configs/qwen3_32B.yaml
domyn-swarm up -c configs/deepseek_r1.yaml

domyn-swarm swarm list

domyn-swarm job submit --name qwen-32b   --input prompts.parquet --output qwen.parquet
domyn-swarm job submit --name deepseek-r1 --input prompts.parquet --output deepseek.parquet

domyn-swarm down qwen-32b
domyn-swarm down deepseek-r1

This is what the state database is for — every swarm is independently addressable by name across processes, so a shell script or job array coordinates them without needing pool support. See Managing swarm state.

For A/B comparisons between checkpoints of the same model, replicas in a single config launches multiple independent clusters, which may be what you wanted from a pool in the first place. See Configuration.