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(エージェントプロンプトのみ)cpu_single | gpu_single | gpu_multi | mpi | mpi_gpu
paper_max_ranksint論文が報告した最大ランク数
paper_max_nodesint論文が報告した最大ノード数
min_ranksint--ntasks=N1部分点を許容する最小ランク数
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](連結)[]上記で表せないフラグの escape hatch (例: ["--account=projX"])

自動解決の優先順位

ari-skill-paper-re.run_reproduce は各フラグを次のように解決する:

明示的な呼出側引数  >  ルーブリックの execution_profile  >  既定値

ウィザードの「実行プロファイル上書き」フォームがルーブリックを上書き できるのはこの順序のため。bool フィールド (exclusive) は OR 結合のため、 どちらか有効ならフラグが発行される。

HPC フル例 (MPI + GPU)

TS-SpGEMM スケーリング (4 ノード × 8 ランク × V100×1 task, exclusive, 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"]
}

関連