Skip to content

execution_profile reference

The execution_profile object sits under reproduce_contract in every PaperBench rubric (ari-skill-replicate/schemas/replication_rubric.schema.json, v3). It captures the parallel-execution properties the paper requires: SLURM allocation shape, GPU type, memory, NUMA bindings, etc. The ari-skill-paper-re Phase 2 sbatch dispatcher reads it, fills in any caller args left at the default, and emits the matching SLURM flags.

Omit execution_profile entirely for legacy single-CPU papers — every caller arg defaults to 0/""/False/None and the sbatch invocation reduces to the pre-v0.7.2 4-flag form.

Full field list

FieldTypeSLURM flagDefaultNotes
kindenum(agent prompt only)cpu_single | gpu_single | gpu_multi | mpi | mpi_gpu
paper_max_ranksintLargest rank count the paper reports
paper_max_nodesintLargest node count the paper reports
min_ranksint--ntasks=N1Smallest rank count acceptable for partial credit
min_nodesint1Mirror of min_ranks for nodes
result_aggregationenumrank0_csvOnly rank0_csv is supported in v0.7.2
metric_columnslist[str][]Required CSV header (e.g. ["nodes","ranks","runtime_sec","gflops"])
accepts_reduced_scalebooltrueAllow smaller-scale runs (true ⇒ the agent emits a paper_paper_scale_point CSV column)
requested_nodesint--nodes=N0Hint; caller arg wins when set
ntasks_per_nodeint--ntasks-per-node=N00 ⇒ let SLURM decide
requested_nodeliststr--nodelist=...""Pin specific node(s)
exclude_nodesstr--exclude=...""Blacklist nodes (e.g. "badnode01")
exclusivebool--exclusivefalseEssential for faithful performance reproduction
requested_gpus_per_taskint--gpus-per-task=N0
requested_gpus_per_nodeint--gpus-per-node=N0
gpu_typestr--gres=gpu:<type>:N""Combined with requested_gpus_per_task (or _per_node). Auto-dropped when cluster reports no GRES via sinfo.
memory_gb_per_nodeint--mem=NG0
memory_gb_per_cpuint--mem-per-cpu=NG0
constraintstr--constraint=...""E.g. "skylake", `"haswell
cpu_bindstr--cpu-bind=...""E.g. "cores", "sockets", "rank"
mem_bindstr--mem-bind=...""E.g. "local", "nearest"
hintstr--hint=...""E.g. "nomultithread", "compute_bound"
module_loadslist[str](reproduce.sh prelude)[]Cluster modules the agent should module load before running
extra_sbatch_argslist[str](concat)[]Pass-through escape hatch (e.g. ["--account=projX"])

Auto-resolve precedence

ari-skill-paper-re.run_reproduce resolves each flag as:

explicit caller arg  >  rubric execution_profile  >  default (0/""/False/None)

This lets the wizard's Execution profile override form override the rubric without forcing the user to edit the rubric JSON. Boolean fields (exclusive) are merged with OR — once any source enables it, the flag is emitted.

Full HPC example (MPI + GPU)

Faithful reproduction of TS-SpGEMM scaling (4 nodes × 8 ranks × 1 V100 per task, exclusive, Skylake-only):

jsonc
"reproduce_contract": {
  "script_path": "reproduce.sh",
  "max_runtime_sec": 7200,
  "expected_artifacts": ["submission/results/scaling.csv"],
  "execution_profile": {
    "kind": "mpi_gpu",
    "paper_max_ranks": 32,
    "paper_max_nodes": 4,
    "min_ranks": 4,
    "result_aggregation": "rank0_csv",
    "metric_columns": ["nodes","ranks","runtime_sec","gflops"],
    "accepts_reduced_scale": true,

    "requested_nodes": 4,
    "ntasks_per_node": 8,
    "exclusive": true,

    "requested_gpus_per_task": 1,
    "gpu_type": "v100",

    "memory_gb_per_node": 256,
    "constraint": "skylake",
    "cpu_bind": "cores",
    "hint": "nomultithread",

    "module_loads": ["cuda/12.4", "openmpi/4.1"],
    "extra_sbatch_args": ["--account=projX"]
  }
}

The resulting sbatch invocation:

sbatch --wait \
  --partition large \
  --nodes 4 --ntasks 32 --ntasks-per-node 8 \
  --exclusive \
  --gpus-per-task 1 --gres=gpu:v100:1 \
  --mem=256G --cpus-per-task 8 \
  --constraint=skylake --cpu-bind=cores --hint=nomultithread \
  --account=projX \
  --time 02:00:00 \
  reproduce.sh

Single-GPU example

jsonc
"execution_profile": {
  "kind": "gpu_single",
  "paper_max_ranks": 1,
  "metric_columns": ["throughput_GB_s", "PSNR_dB"]
}

The agent prompt is told to use CUDA / PyTorch CUDA / cupy; SLURM allocation falls back to the partition default.

Single-CPU example

jsonc
// Omit execution_profile entirely — legacy single-CPU behaviour.
"reproduce_contract": {
  "script_path": "reproduce.sh",
  "max_runtime_sec": 1800,
  "expected_artifacts": ["results.csv"]
}

See also