|
| 1 | +['Frontier'](https://docs.olcf.ornl.gov/systems/frontier_user_guide.html#system-overview) is a HPE Cray EX supercomputer. |
| 2 | +The system has 77 Olympus rack HPE cabinets, each with 128 AMD compute nodes, and a total of 9,856 AMD compute nodes. |
| 3 | +Each node has 8 GPUs,each having 64 GB of high-bandwidth memory (HBM2E). |
| 4 | + |
| 5 | +**Installing the dependencies** |
| 6 | + |
| 7 | +The list of required modules is |
| 8 | + |
| 9 | +```sh |
| 10 | +module load PrgEnv-cray |
| 11 | +module load cmake |
| 12 | +module load rocm |
| 13 | +module load cray-mpich |
| 14 | +module load craype-accel-amd-gfx90a |
| 15 | +``` |
| 16 | + |
| 17 | +**Compiling & running the code** |
| 18 | + |
| 19 | +Even though the documentaion states that the MPI implementation is Cray’s MPICH, which is “GPU-aware", it seems to be bugged, |
| 20 | +so you will always need to add the flag `gpu_aware_mpi=OFF`. |
| 21 | + |
| 22 | +Your `cmake` setting should look something like this: |
| 23 | +```sh |
| 24 | +cmake -B build \ |
| 25 | + -D pgen=<PGEN> \ |
| 26 | + -D mpi=ON \ |
| 27 | + -D Kokkos_ENABLE_HIP=ON \ |
| 28 | + -D Kokkos_ARCH_AMD_GFX90A=ON \ |
| 29 | + -D CMAKE_CXX_COMPILER=hipcc \ |
| 30 | + -D CMAKE_C_COMPILER=hipcc \ |
| 31 | + -D gpu_aware_mpi=OFF \ |
| 32 | + -D CMAKE_CXX_FLAGS="-Wno-c++11-narrowing -munsafe-fp-atomics" \ |
| 33 | + -D CMAKE_C_FLAGS="-Wno-c++11-narrowing -munsafe-fp-atomics" |
| 34 | +``` |
| 35 | + |
| 36 | +The queue policies encourage users to run jobs on Frontier that are as large as possible. To that end, OLCF implements queue policies that enable large jobs to run in a timely fashion: |
| 37 | + |
| 38 | +| Bin | Min Nodes | Max Nodes | Max Walltime (Hours) | Aging Boost (Days) | |
| 39 | +| --- | --------- | --------- | -------------------- | ------------------ | |
| 40 | +| 1 | 5,645 | 9,472 | 12.0 | 8 | |
| 41 | +| 2 | 1,882 | 5,644 | 12.0 | 4 | |
| 42 | +| 3 | 184 | 1,881 | 12.0 | 0 | |
| 43 | +| 4 | 92 | 183 | 6.0 | 0 | |
| 44 | +| 5 | 1 | 91 | 2.0 | 0 | |
| 45 | + |
| 46 | +Jobs are aged according to the job’s requested node count (older age equals higher queue priority). |
| 47 | + |
| 48 | +Finally an example `SLURM` script using the full node looks like this: |
| 49 | + |
| 50 | +```slurm |
| 51 | +#!/bin/bash |
| 52 | +#SBATCH -A <YOUR_PROJECT_ID> |
| 53 | +#SBATCH -J entity_prod |
| 54 | +#SBATCH -o entity_prod_%j.out |
| 55 | +#SBATCH -t 12:00:00 |
| 56 | +#SBATCH -p batch |
| 57 | +#SBATCH -N 184 |
| 58 | +
|
| 59 | +module load PrgEnv-cray |
| 60 | +module load cmake |
| 61 | +module load rocm |
| 62 | +module load cray-mpich |
| 63 | +module load craype-accel-amd-gfx90a |
| 64 | +
|
| 65 | +srun -N184 -n1472 -c1 --gpus-per-task=1 --gpu-bind=closest ./entity -input <INPUT>.toml |
| 66 | +``` |
| 67 | +For post-processing and visualization it is possible to use `extended` partition. This allows to have 24-Hour maximum wall time with 64-Node maximum job size. |
| 68 | + |
| 69 | +```slurm |
| 70 | +#!/bin/bash |
| 71 | +#SBATCH -A <YOUR_PROJECT_ID> |
| 72 | +#SBATCH -J entity_postproc |
| 73 | +#SBATCH -o entity_postproc_%j.out |
| 74 | +#SBATCH -t 06:00:00 |
| 75 | +#SBATCH -p extended |
| 76 | +#SBATCH -N 1 |
| 77 | +
|
| 78 | +module load cray-python |
| 79 | +source ~/.venv/bin/activate |
| 80 | +
|
| 81 | +python3 <your_script.py> |
| 82 | +``` |
0 commit comments