2090741942justin's picture
Add CPU multi-node generation orchestration
23e02ba
Raw
History Blame Contribute Delete
2.34 kB
#!/usr/bin/env python3
"""Create a node/chunk plan for full test-set CPU generation."""
from __future__ import annotations
import argparse
import json
import math
from pathlib import Path
import pandas as pd
ROOT = Path("/workspace/mp_20_pxrdnet")
MODEL_PATH = ROOT / "hydra/singlerun/2026-07-20/pxrdgen_raw512_run02"
TEST_PATH = ROOT / "data/mp_20_pxrdgen_xrd90_0p1_raw512/test.csv"
DEFAULT_OUTPUT_ROOT = ROOT / "paper_results_pxrdgen_match_only/cpu_multinode/full_test"
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--chunk-size", type=int, required=True)
parser.add_argument("--output-root", default=str(DEFAULT_OUTPUT_ROOT))
parser.add_argument("--total-materials", type=int, default=0)
args = parser.parse_args()
if args.chunk_size <= 0:
raise ValueError("--chunk-size must be positive.")
total = args.total_materials or int(len(pd.read_pickle(TEST_PATH)))
output_root = Path(args.output_root)
output_root.mkdir(parents=True, exist_ok=True)
node_count = math.ceil(total / args.chunk_size)
rows = []
for node_index in range(node_count):
first_idx = node_index * args.chunk_size
num_materials = min(args.chunk_size, total - first_idx)
rows.append(
{
"node_index": node_index,
"first_idx": first_idx,
"num_materials": num_materials,
"output_dir": str(output_root / f"node_{node_index:05d}"),
}
)
payload = {
"model_path": str(MODEL_PATH),
"test_path": str(TEST_PATH),
"total_materials": total,
"chunk_size": args.chunk_size,
"node_count": node_count,
"output_root": str(output_root),
"rows": rows,
}
(output_root / "plan.json").write_text(json.dumps(payload, indent=2) + "\n")
with (output_root / "plan.tsv").open("w") as f:
f.write("node_index\tfirst_idx\tnum_materials\toutput_dir\n")
for row in rows:
f.write(
f"{row['node_index']}\t{row['first_idx']}\t{row['num_materials']}\t{row['output_dir']}\n"
)
print(json.dumps({k: payload[k] for k in ["total_materials", "chunk_size", "node_count", "output_root"]}, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())