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 poolconfig_path— path to aDomynLLMSwarmConfigYAML, read withDomynLLMSwarmConfig.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:
validates
pool.yamlagainstSwarmPoolConfigconstructs one
DomynLLMSwarmper element, reading eachconfig_pathenters 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.