Configuration¶
SysSim uses two YAML files — a model architecture and a hardware spec — kept separate so a model can be simulated across machines and vice versa. Parallelism and training knobs are passed as Python kwargs (or CLI flags), not YAML.
Model YAML¶
Architecture only. Either provide the Megatron-style fields below, or a single huggingface:
identifier (resolved lazily, no weights downloaded).
# examples/configs/models/qwen3-1_7b.yaml
num_layers: 28
hidden_size: 2048
num_attention_heads: 16
num_query_groups: 8 # GQA
ffn_hidden_size: 6144
seq_length: 4096
max_position_embeddings: 40960
vocab_size: 151936
swiglu: true
rope: true
tie_word_embeddings: true
rms_norm_eps: 1.0e-6
HuggingFace branch:
huggingface: Qwen/Qwen3-8B
overrides: {} # optional Megatron provider overrides
See ModelConfig for every field.
Hardware YAML¶
Accelerator peaks plus a per-dimension topology: block.
# examples/configs/hardware/isambard_gh200_4gpu.yaml
peak_tflops_mm: 1979 # tensor-unit peak (TFLOP/s)
peak_tflops_math: 989 # vector/math peak (TFLOP/s)
peak_memory_bandwidth_GBps: 3350
peak_tflops_mm_fp8: 3958
gpus_per_node: 4
gpu_memory_GB: 96 # per-GPU HBM; enables OOM detection
topology:
dims: [ fully_connected ] # fully_connected | switch | ring
size: [ 4 ] # endpoints in this dimension
bandwidth: [ 450 ] # per-GPU uni-directional GB/s
latency: [ 12000 ] # link latency (ns)
A multi-level fabric (e.g. intra-node NVLink + inter-node Slingshot) adds a second entry to each
list. The number of nodes is derived from world_size / gpus_per_node. See
HardwareConfig for every field.
Generic accelerator targets¶
SysSim hardware targets are described by capabilities, not by vendor-specific code paths. The same model, parallelism, and training configuration can be evaluated against any accelerator-like target once you provide the target’s compute peaks, memory bandwidth, HBM capacity, and communication topology.
AMD is one example of this generic path. An MI300-style target uses the same hardware YAML schema:
# examples/configs/hardware/amd_mi300_8gpu.yaml
peak_tflops_mm: 653 # tensor-unit peak (TFLOP/s)
peak_tflops_math: 326.5 # vector/math peak (TFLOP/s)
peak_memory_bandwidth_GBps: 5200
gpus_per_node: 8
gpu_memory_GB: 192 # set to the HBM capacity of the target card
topology:
dims: [ fully_connected ] # choose fully_connected | switch | ring to match the fabric
size: [ 8 ]
bandwidth: [ 300 ] # replace with measured per-GPU uni-directional GB/s
latency: [ 12000 ] # replace with measured latency (ns)
Only the hardware YAML changes; the model YAML, parallelism config, and training config stay the
same. The default roofline estimator uses the supplied peaks directly, regardless of vendor. For
higher accuracy on a specific accelerator, build a calibrated estimator for that device and set
calibrated_model in the hardware YAML.
Parallelism & training knobs¶
Passed in code via ParallelismConfig and TrainingConfig, or on the CLI:
Knob |
Python (kwarg) |
CLI flag |
|---|---|---|
Tensor parallel |
|
|
Data parallel |
|
|
Context parallel |
|
|
Sequence parallel |
|
|
Pipeline parallel |
|
(Python only) |
Micro / global batch |
|
|
Precision |
|
|
Recompute |
|
|