Skip to content

execution_profile 参考

PaperBench 评分单 (ari-skill-replicate/schemas/replication_rubric.schema.json, v3) 中 reproduce_contract 下的 execution_profile 对象描述论文要求的 并行执行属性 (SLURM 分配形态、GPU 类型、内存、NUMA 绑定等)。 ari-skill-paper-re 的 Phase 2 sbatch 调度器会读取它,用以补全调用方 未提供的参数并生成相应的 SLURM 标志。

对于传统单 CPU 论文,可完全省略 execution_profile —— 所有调用方参数 默认为 0/""/False/None,sbatch 命令会回退到 v0.7.2 之前的 4 标志形式。

完整字段表

字段类型SLURM 标志默认备注
kindenum(仅 agent prompt)cpu_single | gpu_single | gpu_multi | mpi | mpi_gpu
paper_max_ranksint论文报告的最大 rank 数
paper_max_nodesint论文报告的最大节点数
min_ranksint--ntasks=N1部分得分允许的最小 rank 数
min_nodesint1节点版本
result_aggregationenumrank0_csvv0.7.2 仅支持 rank0_csv
metric_columnslist[str][]CSV 表头 (如 ["nodes","ranks","runtime_sec","gflops"])
accepts_reduced_scalebooltrue允许缩小规模再现 (true → CSV 添加 paper_paper_scale_point 列)
requested_nodesint--nodes=N0提示。调用方参数优先
ntasks_per_nodeint--ntasks-per-node=N00 → 交给 SLURM
requested_nodeliststr--nodelist=...""指定节点
exclude_nodesstr--exclude=...""排除节点
exclusivebool--exclusivefalse忠实性能复现必备
requested_gpus_per_taskint--gpus-per-task=N0
requested_gpus_per_nodeint--gpus-per-node=N0
gpu_typestr--gres=gpu:<type>:N""与 gpus_per_task 组合;sinfo 报告无 GRES 时自动剥离
memory_gb_per_nodeint--mem=NG0
memory_gb_per_cpuint--mem-per-cpu=NG0
constraintstr--constraint=...""例: "skylake", `"haswell
cpu_bindstr--cpu-bind=...""例: "cores", "sockets", "rank"
mem_bindstr--mem-bind=...""例: "local", "nearest"
hintstr--hint=...""例: "nomultithread"
module_loadslist[str](reproduce.sh 开头)[]代理执行的 module load 列表
extra_sbatch_argslist[str](拼接)[]上述无法表达的标志的逃生口 (如 ["--account=projX"])

自动解析优先级

ari-skill-paper-re.run_reproduce 按以下顺序解析每个标志:

显式调用方参数  >  评分单 execution_profile  >  默认值

向导的「执行配置覆盖」表单因此能覆盖评分单。布尔字段 (exclusive) 取 OR — 任一来源启用即发出该标志。

HPC 完整示例 (MPI + GPU)

TS-SpGEMM 扩展性 (4 节点 × 8 ranks × V100×1/task, 独占, 仅 Skylake) 忠实再现:

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"]
  }
}

实际 sbatch 命令:

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

单 GPU 示例

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

代理提示词会要求使用 CUDA / PyTorch CUDA / cupy;SLURM 分配回退至 分区默认。

单 CPU 示例

jsonc
// 完全省略 execution_profile → 回退到传统单节点行为
"reproduce_contract": {
  "script_path": "reproduce.sh",
  "max_runtime_sec": 1800,
  "expected_artifacts": ["results.csv"]
}

相关