added systems jcahpc-miyabi-g#1436
Conversation
michaelmckinsey1
left a comment
There was a problem hiding this comment.
I think the allocation modifier changes could be breaking.
| # No GPU chunk sub-resource is emitted here. | ||
| # On Miyabi-G, GPU allocation is already reflected in n_nodes/select, so | ||
| # adding a separate GPU chunk resource is unnecessary. |
There was a problem hiding this comment.
Is this commented out because it breaks Miyabi-G? Should gpus= be unset for a "full node"?
I suppose since there is only 1 gpu the only option is 0 or 1.
There was a problem hiding this comment.
Looking at this again, the issue is not necessarily that gpus= itself breaks Miyabi-G. The pre-existing PBS code path appears to call self.gpus_as_gpus_per_rank(v.n_gpus), but gpus_as_gpus_per_rank() expects the allocation object v, not the integer v.n_gpus.
So this block may fail before we even test whether Miyabi-G accepts gpus=1. Since each Miyabi-G node has one GPU, gpus=1 may be fine. I should not have commented this out globally; I will restore the PBS gpus= emission and fix the call to use self.gpus_as_gpus_per_rank(v).
| # implied by the rank/thread layout. This keeps site policy out of the | ||
| # shared modifier: a system that wants a different value (MIG slices, | ||
| # partial-node sharing, ...) simply sets `n_cores_per_node` accordingly. | ||
| n_cpus_per_node = v.n_cores_per_node or ( |
There was a problem hiding this comment.
We avoid setting the number of cpus/tasks based on the number of cores on a node, because the number of tasks is set per-experiment.
This is essentially a full-node setting @pearce8, which we have avoided in the past.
@yoshifuminakamura Is it not possible to run using less than 72 cores on the system?
There was a problem hiding this comment.
It is possible to run with fewer than 72 cores on Miyabi-G. The issue I hit is more specific: for example, saxpy requests a single thread/rank, and the current PBS modifier then generates ncpus=1. On Miyabi-G that gives the job a one-CPU cpuset, and HPC-X/Open MPI's hwloc fails immediately at program startup.
So the requirement is not "always use all 72 cores"; it is "avoid a too-small cpuset such as ncpus=1". Allocating a larger CPU cpuset avoids the hwloc startup failure. I can rework this so it is expressed as a Miyabi-G-specific minimum/requested PBS ncpus value rather than framing it as a full-node setting.
| variant( | ||
| "group", | ||
| default="none", | ||
| multi=False, | ||
| description=( | ||
| "JCAHPC project/group code for accounting, emitted as " | ||
| "'#PBS -W group_list=<group>' (e.g. group=gz00). Required to " | ||
| "actually submit a job; 'none' omits the directive." | ||
| ), | ||
| ) |
There was a problem hiding this comment.
Is a group different from a bank here? Would -A <group> fail?
There was a problem hiding this comment.
qsub with -A fails on Miyabi.
I don't fully understand the meaning of “bank,” but in Miyabi, a “group” refers to the ID of a project group to which multiple people can belong. A budget (available node time) is linked to this group. Since a single user can belong to multiple project groups with the same uid, you must specify which project group the job belongs to using the -W option when submitting a job.
| # Verified against the live login node (miyabi-g1) on 2026-07-06: | ||
| # NVHPC root : /work/opt/local/aarch64/cores/nvidia/<ver>/Linux_aarch64/<ver> | ||
| # HPC-X MPI : <nvhpc-root>/comm_libs/<cuda>/hpcx/latest/ompi | ||
| # Std. CUDA : /work/opt/local/aarch64/cores/cuda/<ver> | ||
| # nvhpc release -> (bundled default CUDA, HPC-X OpenMPI version) | ||
| nvhpc_to_cuda_mpi = { | ||
| "24.5": ("12.4", "4.1.7"), | ||
| "24.9": ("12.6", "4.1.7"), | ||
| "24.11": ("12.6", "4.1.7"), | ||
| "25.1": ("12.6", "4.1.7"), | ||
| "25.3": ("12.8", "4.1.7"), | ||
| "25.5": ("12.9", "4.1.9"), | ||
| "25.9": ("13.0", "4.1.9"), | ||
| "25.11": ("13.0", "4.1.9"), | ||
| "26.3": ("13.1", "4.1.9"), | ||
| } |
There was a problem hiding this comment.
@yoshifuminakamura Can we specify this in same way you did for riken-gh200 for consistency?
benchpark/systems/riken-gh200/system.py
Lines 66 to 76 in 72ee531
There was a problem hiding this comment.
Yes, I can change this to match the riken-gh200 style for consistency.
| variables = { | ||
| "cuda_arch": "90", | ||
| # Miyabi-G nodes are allocated whole (one GH200 per node, no MIG | ||
| # sharing), so request the node's full core count. Otherwise the | ||
| # generated `ncpus` collapses to the rank/thread count (e.g. 1 for a | ||
| # single-rank job); PBS then pins the job to that narrow cpuset and | ||
| # HPC-X/Open MPI's hwloc segfaults building the topology on GH200. | ||
| "n_cores_per_node": self.sys_cores_per_node, | ||
| } |
There was a problem hiding this comment.
These variables should be set in the id_to_resources section. I didn't catch this with the riken-gh200 PR
There was a problem hiding this comment.
I will move variables into id_to_resources.
Description
n_cores_per_node; Miyabi-G uses this to request the full GH200 CPU cpuset and avoid MPI/hwloc issues with too-smallncpusvalues.n_gpuschunk-resource emission in the allocation modifier; on Miyabi-G, GPU allocation is already represented byn_nodes/select, and adding a separategpuschunk resource is unnecessary for this site configuration.Adding/modifying a system (docs: Adding a System)
systems/jcahpc-miyabi-g/system.pyfilesystems/all_hardware_descriptions/NVIDIA-neoverse-GH200-Infiniband/hardware_description.yaml, which appears in the docs catalogueAdding/modifying core functionality, CI, or documentation:
.github/workflowsand.gitlab/testsunit tests (if needed)rules.ymlresource_rules_* change rules matchshared_*_clusters.ymlrun_test_* job matricies. (if needed)