Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
72fa195
optimize: add OpenMP parallelization to MD per-atom loops
lijianing-sudo Jun 26, 2026
a02fe6a
refactor: clean up source_cell/source_estate/source_io reverse depend…
Critsium-xy Jun 27, 2026
353b417
Add ASCII Art for ABACUS (#7515)
Critsium-xy Jun 27, 2026
5231beb
Toolchain: Block installation of prebuilt libtorch when enabling MKL …
Growl1234 Jun 27, 2026
43e4e78
Fix DFT-D4 calculations for charged systems (#7532)
Growl1234 Jun 27, 2026
d965aca
Fix module_hs sparse output controls (#7510)
goodchong Jun 27, 2026
ee6ec4c
Bump version to v3.11.0-beta.5 (#7531)
Critsium-xy Jun 27, 2026
64d11d0
fix: preserve HR data when wrapping HContainer with external data_arr…
dyzheng Jun 30, 2026
698e187
Fix Pauli-to-Spinor Conversion in LCAO Non-Collinear Calculations (#7…
dyzheng Jun 30, 2026
84ca04b
refactor(pw): optimize bspline structure factor grid (#7508)
goodchong Jun 30, 2026
51e2074
Refactor&Test: Share RT-TDDFT velocity gauge projector snap integrati…
AsTonyshment Jul 1, 2026
33a7acd
Toolchain/CMake: Improve dependency handling (#7449)
Growl1234 Jul 1, 2026
7a556a4
fix KEDF (#7579)
mohanchen Jul 2, 2026
548bf8f
Test: Refactor DeePKS Unit Tests (#7577)
AsTonyshment Jul 2, 2026
4fa13e1
Refactor: remove dead cross module includes (#7574)
Critsium-xy Jul 2, 2026
eff0934
feat: update interfaces with ATAT (#7534)
Zanthoxylum Jul 2, 2026
2d21aec
Support NPZ output for LCAO H(R), S(R), and DM(R) (#7471)
pincher-chen Jul 2, 2026
59dc884
Add FindKML.cmake and resolve FFTW3 issue (#7576)
Growl1234 Jul 3, 2026
ed09fe7
feat: GPU-accelerated WT KEDF multi_kernel convolution (#7448)
SunsetStand Jul 3, 2026
0b7a266
Add ABACUS agent governance checks (#7505)
QuantumMisaka Jul 3, 2026
12515e5
Fix: some easy-to-fix problems in [Code scan] issues (#7582)
Critsium-xy Jul 3, 2026
69e2b1e
Modify AI agent (#7586)
mohanchen Jul 4, 2026
a446d94
Build(deps): Bump actions/checkout from 4 to 7 (#7594)
dependabot[bot] Jul 6, 2026
36fa6a1
CMake: Centralize target linkage in source/CMakeLists.txt (#7584)
Growl1234 Jul 6, 2026
c9a59ae
Refine agent governance global dependency downgrade (#7591)
QuantumMisaka Jul 6, 2026
b389b8f
Fix and harden abacuslite ASE interface (#7588)
QuantumMisaka Jul 6, 2026
d989b82
Feature: term-separated LCAO Hamiltonian atomic derivatives (dH) (#7473)
maki49 Jul 6, 2026
2a46653
Test: Add `<phi|r_a|p_{l,m}>` snap_psibeta unit test (#7587)
AsTonyshment Jul 7, 2026
a02d7c7
Feature: velocity matrix correction for meta-gga xc functionals (#7391)
Flying-dragon-boxing Jul 7, 2026
4593f9e
Relax PR metadata governance checks (#7607)
QuantumMisaka Jul 8, 2026
8e99806
Refactor: drop source_cell dependency on serialization_cereal (cell->…
Critsium-xy Jul 8, 2026
8e5d457
Refactor: move version.h from source_main to source_base (#7611)
Critsium-xy Jul 8, 2026
0ec14ab
Add MPI in neighbor_search (#7537)
19hello Jul 8, 2026
a9132cb
Fix .gitattributes (#7602)
Growl1234 Jul 8, 2026
c43b14e
Docs: suggesting smaller mixing parameters for non converging spin-po…
Cstandardlib Jul 8, 2026
86ae025
[toolchain] Harden installation failure handling and RapidJSON CMake …
QuantumMisaka Jul 10, 2026
52a15fc
CMake: Rewrite FindMKL.cmake (#7595)
Growl1234 Jul 10, 2026
ba4de63
Use environment variable instead to allow OpenMPI run as root (#7617)
Growl1234 Jul 11, 2026
01d9ad4
Add check for parameter yaml to ensure consistence with source (#7592)
Cstandardlib Jul 11, 2026
cf1b47a
CMake: Remove FindPEXSI.cmake (#7615)
Growl1234 Jul 12, 2026
a76c946
Try removing GlobalC::exx_info (#7575)
mohanchen Jul 12, 2026
38eb1db
resolve the wrong dependency between klist and berryphase (#7622)
mohanchen Jul 12, 2026
9e7a043
Fix: Support out_current=2 with multiple MPI processes (#7624)
AsTonyshment Jul 12, 2026
4031363
CMake: Deprecate ENABLE_LIBCOMM and rename options (#7620)
Growl1234 Jul 13, 2026
5a8ff7c
Update core.py (#7628)
ZhouXY-PKU Jul 13, 2026
1a0d849
Update version to v3.11.0-beta6 (#7627)
ZhouXY-PKU Jul 13, 2026
31c899d
Update source_cell module and agent governance (#7625)
mohanchen Jul 13, 2026
12fd38a
Remove dead dependencies in source_cell (#7639)
Critsium-xy Jul 14, 2026
a2a45f8
fix: resolve undefined variable and early termination in aveElecStatP…
DanielZhao0432 Jul 15, 2026
68280a4
CMake: Mark ELPA_DIR as deprecated (#7630)
Growl1234 Jul 17, 2026
6040a5e
Doc: Fix a LaTeX rendering issue of out_current in the doc (#7641)
AsTonyshment Jul 17, 2026
60ccbff
Fix: remove .bak file, update comments and warnings in module_dh (#7643)
maki49 Jul 17, 2026
cb86cc4
Refactor: move read_orb from source_estate to source_cell (#7634) (#7…
Critsium-xy Jul 17, 2026
5282500
Remove GlobalC::exx_info in module_ri (#7631)
mohanchen Jul 18, 2026
4155157
Toolchain: Avoid flooding container logs with download progress (#7618)
Growl1234 Jul 18, 2026
2257279
Docs: restore csvr option in md_thermostat documentation (#7654)
mintleaf84 Jul 18, 2026
5b4ed07
add TB2J_interface (#7659)
Shen-Zhen-Xiong Jul 20, 2026
5a6a6f5
Fix GPU segfaults in PW USPP calculations (#7647)
chengleizheng Jul 21, 2026
bf54db6
Remove PARAM in source_cell (including tests); revert the dependency …
mohanchen Jul 21, 2026
1dd484d
Fix: Restore incremental builds with pkg-config ELPA (#7662)
AsTonyshment Jul 21, 2026
83e5099
Refactor: move EXX file-list broadcast out of source_cell (#7635) (#7…
Critsium-xy Jul 21, 2026
f67e344
Refactor: read EXX ABFS/JLE file lists via UnitCell, decouple source_…
Critsium-xy Jul 22, 2026
a6e1d70
cmake: require cuSolverMp 0.9.0 (#7658)
Stardust0831 Jul 22, 2026
ff5f570
fix: include direct cuSolverMp solver dependencies (#7666)
Stardust0831 Jul 22, 2026
fa14bdd
DFT+U Refactor (#7538)
mohanchen Jul 22, 2026
70f7ed6
CMake: Introduce CMake dependent options and print build summary (#7626)
Growl1234 Jul 22, 2026
1457e26
Fix: correct Pauli-to-spinor Hamiltonian conversion for nspin=4 (#7664)
dyzheng Jul 23, 2026
67bb9e6
fix include headers (#7674)
mohanchen Jul 23, 2026
f26d766
Fix: Prevent MPI communicator growth in LCAO matrix output (#7676)
AsTonyshment Jul 23, 2026
abdc863
For source_cell module, standardize code formatting, align contents, …
mohanchen Jul 24, 2026
af5f1a5
move read_pseudo.cpp and .h from source_estate to source_cell (#7670)
mohanchen Jul 24, 2026
854103e
Fix: Remove nonzero tails beyond spherical Bessel projector cutoffs (…
AsTonyshment Jul 24, 2026
079fd0c
Fix: check restart file reading and fix MPI datatype mismatch for boo…
DanielZhao0432 Jul 24, 2026
820a367
Refactor: remove source_lcao dependency from source_hsolver (#7683)
Critsium-xy Jul 24, 2026
085b91e
Update version to v3.11.0-beta7 (#7685)
ieiue Jul 24, 2026
177fa66
CMake: Refactor feature build requirements into source/CMakeLists.txt…
Growl1234 Jul 26, 2026
dba674b
Build(deps): Bump actions/setup-python from 6 to 7 (#7694)
dependabot[bot] Jul 27, 2026
18a0da0
Fix CUDA-aware MPI send synchronization in PGemm (#7688)
Stardust0831 Jul 27, 2026
609f927
Docs: update BPCG solver guidance (#7701)
lanshuyue Jul 29, 2026
df6b782
CMake: Move global compiler flags to target options (#7695)
Growl1234 Jul 29, 2026
4b6ce1c
add 01_PW to GPU CI test suite (#7690)
chengleizheng Jul 29, 2026
b18c11c
CMake: migrate cuSolverMp feature definitions after #7671 (#7697)
Stardust0831 Jul 29, 2026
64e0f34
Reject distributed matrices in DiagoLapack (#7696)
Growl1234 Jul 29, 2026
83c89c4
Libxc: 7.0.0 -> 7.1.2 (toolchain); fix external parameter handling (#…
Growl1234 Jul 29, 2026
7be31be
keep cleaning source_cell (#7684)
mohanchen Jul 29, 2026
c1023ca
Refactor: remove PARAM usage from hsolver.cpp and two redundant reads…
Critsium-xy Jul 29, 2026
cab0ecd
Fix CUDA 13+ link error (#7705)
Flying-dragon-boxing Jul 30, 2026
408b661
Refactor init_esolver factory interface (#7702)
19hello Jul 30, 2026
39c688e
move hcontainer from source_lcao to source_hamilt (#7708)
mohanchen Jul 30, 2026
3e64d44
Fix Dockerfiles (#7703)
Growl1234 Jul 30, 2026
11d1112
Feature: fully utilized magnetic space group (MSG) enabling SOC (#7692)
maki49 Jul 30, 2026
45969a6
Refactor: inject solver config into HSolver/PEXSI instead of reading …
Critsium-xy Jul 30, 2026
d6ed1fc
Move module_gint from source_lcao to source_hamilt (#7710)
mohanchen Jul 30, 2026
f83f423
change the threshold of the exx-nspin4-sym test case (#7715)
maki49 Jul 31, 2026
c5e066e
Fix: use real radial grids in RT projector interpolation (Useful Info…
AsTonyshment Jul 31, 2026
1cd141d
Fix and cleanup devcontainer workflow (#7716)
Growl1234 Jul 31, 2026
13d0428
Fix(input): require explicit GPU device selection (#7720)
Stardust0831 Jul 31, 2026
673bfef
Fix: quit explicitly for unsupported EXX stress combinations (#7717)
Flying-dragon-boxing Jul 31, 2026
1ee758f
Temporarily remove DeePKS nspin test. (#7725)
ErjieWu Jul 31, 2026
d670348
refactor: use BaseCell in ESolver interface (#7700)
19hello Jul 31, 2026
6aecf0e
Add unified H/S matrix output options and gamma-only H(R)/S(R) output…
goodchong Jul 31, 2026
bb2cb4b
Add GPU validation and multinode cuSolverMp smoke (Useful Information…
Stardust0831 Jul 31, 2026
7ef087d
Refactor the operators in source_lcao (#7714)
mohanchen Aug 1, 2026
b95f433
Fix(input): validate contradictory final parameters (#7731)
Stardust0831 Aug 1, 2026
be4f130
Evaluate vdW corrections once per ionic step (#7712)
Growl1234 Aug 1, 2026
d91ae4c
Fix GPU validation authorization and accounting retries (#7732)
Stardust0831 Aug 1, 2026
aba938d
Refactor(input): encode relaxation variants in relax_method (#7735)
Stardust0831 Aug 1, 2026
4a86b41
Reject negative DeePKS output frequency (#7740)
Stardust0831 Aug 1, 2026
5f7a9eb
fix: reject genelpa with GPU device (#7738)
Stardust0831 Aug 1, 2026
2ddd27b
Fix relax_new test linkage for Relax_Data (#7737)
Stardust0831 Aug 1, 2026
3a7ce9f
Fix non-LCAO elecstate energy test mock (#7736)
Stardust0831 Aug 1, 2026
2c6ce39
Validate explicit diago_proc bounds (#7739)
Stardust0831 Aug 1, 2026
5451b70
Fix(hsolver): sync d_eigenvalue before GPU refresh in Diago_DavSubspa…
dyzheng Aug 1, 2026
d2ed0cc
Fix redundant density symmetrization in OFDFT (#7749)
Cstandardlib Aug 2, 2026
48a3954
fix a bug when init_wfc=nao in pw basis for nspin=4 (#7747)
mohanchen Aug 2, 2026
0b88142
Fix JSON coordinate units (#7760)
MoseyQAQ Aug 2, 2026
4261f5e
fix: preserve PW ordering in WT CUDA convolution (#7763)
Stardust0831 Aug 2, 2026
d8ff3fb
Fix: DeltaSpin energy fix (#7748)
dyzheng Aug 2, 2026
0797d01
Feat/issue 7726 dftu pw nspin fixes (#7744)
dyzheng Aug 2, 2026
d40a987
God class UnitCell.h: Remove redundant parts (#7734)
mohanchen Aug 3, 2026
9b7b758
Update cell-relaxation output format (#7752)
mohanchen Aug 3, 2026
16afa8e
Build(deps): Bump actions/checkout from 6.1.0 to 7.0.1 (#7765)
dependabot[bot] Aug 3, 2026
8978f28
reformat the MD output energy, potential, T, P, etc. (#7745)
mohanchen Aug 3, 2026
f36f201
test: expand SAI GPU validation matrix (#7764)
Stardust0831 Aug 3, 2026
df5567a
ci(cuda): build only for CI runner GPU arch and raise parallelism (#7…
MrLi000001 Aug 3, 2026
e6754bb
Merge remote-tracking branch 'audrey/refactor/merge-openmp' into conf…
lijianing-sudo Aug 4, 2026
17774c3
Resolve merge conflicts and fix Verlet CSVR test# Please enter the co…
lijianing-sudo Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
130 changes: 130 additions & 0 deletions .ci/slurm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Remote GPU validation

This workflow rebuilds one committed ABACUS revision on a remote GPU cluster, runs the test matrix in `config.ini` through Slurm, and reports each build and test group separately. It is a functional test, not a benchmark.

The maintained setup runs at the [Open Source Supercomputing Center of SAI](https://www.open-sai.com/). The same client can be configured for another Slurm cluster.

**Trust boundary:** the selected commit is compiled and executed as the remote SSH user. Approve only code that may run with that account's permissions.

## Set up GitHub

A repository administrator performs these steps once. Forks start disabled because GitHub does not copy variables or secrets from the parent repository.

1. Open **Settings > Secrets and variables > Actions > Variables**, choose **New repository variable**, and set:

- Name: `GPU_VALIDATION_ENABLED`
- Value: `true`

The value is the lowercase text `true`. If this variable is absent or has another value, the workflow skips all remote work.

2. Open **Settings > Environments** and create:

- `gpu-ci-scheduled`, with no required reviewers, for daily tests.
- `gpu-ci-manual`, with the maintainers who may approve PR and manual tests listed as required reviewers.

3. Open each environment, choose **Environment secrets > Add environment secret**, and add:

- Name: `REMOTE_SSH_PRIVATE_KEY`
- Value: the complete private key, including its `BEGIN` and `END` lines.

Install the matching public key in `authorized_keys` for the remote account named in `config.ini`. Add the private key to both environments because they have different approval rules. Do not create a repository-level SSH secret; the workflow reads this environment secret only after entering the selected environment.

Host, port, user, and the normal remote project directory are read from the trusted `[remote]` section of `config.ini`.

## Run validation

All GitHub methods below require `GPU_VALIDATION_ENABLED=true`. The workflow must already be present on the repository's default branch.

### Test a pull request

On an open pull request, add this exact comment:

```text
/abacus-ci gpu
```

The comment cannot contain other text. The author of the comment needs Triage, Write, Maintain, or Admin permission. The bot immediately posts a link to the queued Actions run. After a reviewer approves the `gpu-ci-manual` environment, the workflow tests the PR head commit and updates that same bot comment with the result and raw-file link.

### Run the daily test

No manual action is needed. The workflow is scheduled every day at 20:30 UTC (`30 20 * * *`). It tests the current default branch of `deepmodeling/abacus-develop` and uses `gpu-ci-scheduled`, so it does not wait for approval.

### Start a run from Actions

1. Open **Actions > GPU validation > Run workflow**.
2. Select the repository default branch under **Use workflow from**.
3. Enter the full, lowercase 40-character commit SHA in `source_sha`.
4. Leave `project_root` empty to use `config.ini`, or enter another permitted remote directory.
5. Start the run and approve the `gpu-ci-manual` environment when prompted.

The commit must exist in the repository where the workflow is running. For an external contributor's pull request, use the PR comment command instead.

### Run from a local checkout

Create an SSH host entry. The default alias is `gpu-ci`; use the host, port, user, and key for your account:

```sshconfig
Host gpu-ci
HostName <host>
Port <port>
User <user>
IdentityFile ~/.ssh/<private-key>
```

Then run this command from a committed ABACUS checkout:

```bash
python3 .ci/slurm/runner.py run
```

By default, the command uses the checkout's committed `HEAD`, `~/.ssh/config`, the `gpu-ci` alias, and the remote directory from `config.ini`. Uncommitted candidate-source changes are not sent. The local command does use the current `.ci/slurm` control files, including local changes to its scripts and templates. The command waits for Slurm, prints live build and test progress, downloads the results, and exits nonzero if validation fails.

Local results go to `/tmp/abacus_gpu_ci_<uid>/<namespace>/<run_id>_<attempt>/`. Use `--artifacts` for a permanent local directory or `--target my-cluster` for another SSH alias. All available options and defaults are shown by:

```bash
python3 .ci/slurm/runner.py --help
python3 .ci/slurm/runner.py run --help
```

## Configuration

`config.ini` is validated before jobs are submitted.

- `[site]`: the resource acknowledgement, site name, and public URL shown at the end of result reports. Change these values for another cluster.
- `[remote]`: SSH `host`, `port`, `user`, `project_root`, and comma-separated `allowed_project_roots`. The project root may use `~/` or an absolute path, but its remote resolved path must be below one of the allowed roots. Prefixes are also resolved remotely, so aliases such as `/home` pointing to `/org` are accepted.
- `[cluster]`: Slurm `partition`, absolute `mapping_root` for the MPI mapping script, `disable_nccl_ib` (`true` or `false`), and `poll_seconds` (1-300).
- `[build]`: build-job `qos`, `nodes`, `tasks_per_node`, `gpus_per_node`, and `time_seconds`.
- `[resource.NAME]`: the same allocation fields plus `parallelism`, the maximum number of array tasks running at once. Each resource must have a case. There is one rank per GPU and no resource may exceed 16 GPUs.
- `[case.NNN]`: contiguous, zero-padded sections with `suite`, `name`, `resource`, and `runner` (`autotest` or `cusolvermp`).

Resource labels are generated, not configured separately. A single-node resource is shown as `N GPU` or `N GPUs`; a multi-node resource is shown as `N nodes / M GPUs`. Thus `gpu1`, `gpu2`, and `gpu4` display `1 GPU`, `2 GPUs`, and `4 GPUs`; `gpu4x2` displays `2 nodes / 8 GPUs`. Test results are reported by their `tests/` folder even though Slurm arrays remain grouped by resource. `case.049` is `15_rtTDDFT_GPU/19_NO_Si48_CUSOLVERMP_TDDFT_GPU`; it uses `gpu4x2` and the `cusolvermp` runner.

## Results and retention

On the remote cluster, a run is created below:

```
<project-root>/runs/<namespace>/<run-id>-<attempt>/
```

Its `results/` directory contains `result.json`, `summary.md`, build and case logs, Slurm output, module/tool records, and status files. The coordinator and working data are alongside it while the run is active. After results are collected, the client archives `results/` and `jobs/` as:

```
<project-root>/archives/<namespace>/<run-id>-<attempt>.tar.gz
```

The client removes archived files older than 72 hours when preparing a later run, and removes the active run after archiving. On the GitHub runner, `ARTIFACT_ROOT` is `${runner.temp}/gpu-ci-artifacts`; it contains the collected `results/`, `run.json`, and `client.log`. CI uploads that directory as `gpu-validation-<run-id>-<attempt>` and retains it for 30 days. A pull-request comment links to the Actions run and the uploaded raw files. If the client stops before completion, the remote run is left in place so that its detached coordinator and Slurm jobs are not interrupted.

Source is sent as a compressed Git bundle. The remote Git cache keeps the three most recent PR or manual revisions, the latest two daily dates, the first daily revision of every UTC month, and one weekly revision for the current month. Weekly revisions from earlier months are removed. Concurrent runs reserve the cache revisions they use, so another run cannot remove their transfer base.

## Troubleshooting

**SSH fails.** Check the `[remote]` values in `config.ini`, that the key matches the configured account, and that the target is reachable. CI uses the committed `.ci/slurm/known_hosts` with strict host-key checking. Test the same target with the SSH config before retrying; do not disable host-key checking.

**A module cannot be loaded.** `modules.sh` sources Lmod, purges modules, and loads `cmake/3.31.6` and the configured ABACUS dependency module. Ask the site administrator to provide or update those modules. Modules provide the compiler, CUDA, MPI, and library dependencies; do not add library paths to CI (`LD_LIBRARY_PATH`, `CPATH`, or `CMAKE_PREFIX_PATH`) or hard-code site paths.

**CMake or linking fails.** Inspect `results/configure.log`, `build.log`, `install.log`, `CMakeCache.txt`, `tools.txt`, and `ldd.txt`. The build uses Unix Makefiles, CUDA architecture 70, CUDA MPI, cuSOLVERMP, cuBLASMP, and NCCL parallel-device options. A missing runtime library causes the `ldd` check to fail; fix the module environment rather than adding a CI path.

**A job stays pending or times out.** Check the selected partition and QoS, GPU availability, node and task limits, and the `time_seconds` value for that resource. Slurm output is in `results/`; an allocation or queue delay is an infrastructure issue, not a case failure.

**MPI/PMIx initialization fails.** Both runners retry once after a recognized MPI startup failure. If it persists, inspect the attempt logs and the loaded MPI module, Slurm allocation, and mapping file.
49 changes: 49 additions & 0 deletions .ci/slurm/build.sbatch.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
#SBATCH --job-name=@JOB_NAME@
#SBATCH --partition=@PARTITION@
#SBATCH --qos=@QOS@
#SBATCH --nodes=@NODES@
#SBATCH --ntasks=@TASKS@
#SBATCH --ntasks-per-node=@TASKS_PER_NODE@
#SBATCH --gpus-per-node=@GPUS_PER_NODE@
#SBATCH --time=@TIME@
#SBATCH --output=@OUTPUT@
#SBATCH --export=NIL

set -euo pipefail

export HOME=@HOME@
export USER=${SLURM_JOB_USER:?}
export LOGNAME=$USER
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

source @CONTROL@/modules.sh
module -t list 2>&1 | tee @RESULTS@/modules.txt
command -v cmake make mpicxx nvcc | tee @RESULTS@/tools.txt
nvidia-smi dmon -s pucvmte -o T > @RESULTS@/dmon-${SLURM_JOB_ID}.log &

cmake -S @SOURCE@ -B @BUILD@ -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=@INSTALL@ \
-DCMAKE_CUDA_ARCHITECTURES=70 \
-DENABLE_LIBXC=ON \
-DUSE_CUDA=ON \
-DUSE_CUDA_MPI=ON \
-DENABLE_CUSOLVERMP=ON \
-DENABLE_CUBLASMP=ON \
-DENABLE_NCCL_PARALLEL_DEVICE=ON \
-DBUILD_TESTING=OFF \
-DGIT_SUBMODULE=OFF 2>&1 | tee @RESULTS@/configure.log
cmake --build @BUILD@ --parallel 32 2>&1 | tee @RESULTS@/build.log
cmake --install @BUILD@ 2>&1 | tee @RESULTS@/install.log

@INSTALL@/bin/abacus --info | tee @RESULTS@/abacus-info.txt
ldd @INSTALL@/bin/abacus | tee @RESULTS@/ldd.txt
if grep -q 'not found' @RESULTS@/ldd.txt; then
echo "ERROR: unresolved dynamic dependencies" >&2
sed -n 's/.*not found.*/&/p' @RESULTS@/ldd.txt >&2
exit 1
fi
cp @BUILD@/CMakeCache.txt @RESULTS@/CMakeCache.txt

exit 0
44 changes: 44 additions & 0 deletions .ci/slurm/case.sbatch.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
#SBATCH --job-name=@JOB_NAME@
#SBATCH --partition=@PARTITION@
#SBATCH --qos=@QOS@
#SBATCH --nodes=@NODES@
#SBATCH --ntasks=@TASKS@
#SBATCH --ntasks-per-node=@TASKS_PER_NODE@
#SBATCH --gpus-per-node=@GPUS_PER_NODE@
#SBATCH --time=@TIME@
#SBATCH --array=@ARRAY@
#SBATCH --dependency=afterok:@BUILD_JOB@
#SBATCH --output=@OUTPUT@
#SBATCH --export=NIL

set -euo pipefail

export HOME=@HOME@
export USER=${SLURM_JOB_USER:?}
export LOGNAME=$USER
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export OMP_NUM_THREADS=1

# shellcheck source=/dev/null
source @MAPPING_ROOT@/${SLURM_JOB_PARTITION}.bash
source @CONTROL@/modules.sh
CI_SYSTEM_MPIRUN=$(command -v mpirun)
export CI_SYSTEM_MPIRUN
export MAP_OPT
export SLURM_EXPORT_ENV=ALL
export OMPI_MCA_plm_slurm_args=--external-launcher
export PRTE_MCA_plm_slurm_args=--external-launcher
nvidia-smi dmon -s pucvmte -o T > @RESULTS@/dmon-${SLURM_JOB_ID}.log &

CI_DISABLE_NCCL_IB=@DISABLE_NCCL_IB@
if [[ $CI_DISABLE_NCCL_IB == true ]]; then
export NCCL_IB_DISABLE=1
else
unset NCCL_IB_DISABLE
fi

python3 @CONTROL@/runner.py worker \
@SOURCE@ @CONTROL@ @INSTALL@ @RESULTS@ @MANIFEST@

exit $?
Loading
Loading