Skip to content

Guard known-affected cuSolverMp NCCL versions#7658

Open
Stardust0831 wants to merge 2 commits into
deepmodeling:developfrom
Stardust0831:ci/sai-gpu-full-20260720
Open

Guard known-affected cuSolverMp NCCL versions#7658
Stardust0831 wants to merge 2 commits into
deepmodeling:developfrom
Stardust0831:ci/sai-gpu-full-20260720

Conversation

@Stardust0831

@Stardust0831 Stardust0831 commented Jul 19, 2026

Copy link
Copy Markdown

Summary

  • preserve the existing cuSolverMp 0.4.0 minimum and CAL backend selection below 0.7.0
  • reject the known-affected NCCL-backed cuSolverMp 0.7.x/0.8.x range by default
  • provide ALLOW_KNOWN_AFFECTED_CUSOLVERMP=ON as an explicit risk override
  • recommend cuSolverMp 0.9.0 with cuBLASMp 0.9.1 in the CUDA documentation
  • make diago_cusolvermp.cpp include the BLAS connector and title helper it uses directly

Related issue: #7657

Rationale

NVIDIA documents an STEDC defect through cuSolverMp 0.8.0 affecting non-power-of-two block sizes and certain 2D configurations. Syevd and Sygvd use STEDC internally. The failure was independently reproduced with NVIDIA's official mp_sygvd sample and with a 16-rank ABACUS RT-TDDFT run; the same ABACUS case completed with cuSolverMp 0.9.0 and cuBLASMp 0.9.1.

The direct includes make the cuSolverMp translation unit self-contained; they do not change solver behavior. The remaining changes are configure-time diagnostics and dependency documentation. No INPUT parameter or numerical algorithm changes are introduced. The SAI GPU workflow and multinode Si48 smoke are intentionally handled in a separate Draft PR.

Tests

cmake/tests/test_cusolvermp_version_guard.cmake covers:

  • 0.6.0: CAL backend accepted
  • 0.7.0, 0.7.2, and 0.8.0: rejected with the known-affected diagnostic
  • 0.9.0: NCCL backend accepted
  • 0.7.2 with explicit override: accepted with a risk warning

The exact diago_cusolvermp.cpp blob in this PR was compiled successfully on SAI with cuSolverMp 0.9.0, cuBLASMp 0.9.1, NCCL 2.29.3, CUDA 12.9.1, and OpenMPI 5.0.10. It then passed the 2-node/16-GPU Si48 RT-TDDFT smoke in runs 29870131642 and 29870141313.

The current local environment does not provide a cmake executable, so the CMake script was not rerun during the final PR split.

@Stardust0831
Stardust0831 force-pushed the ci/sai-gpu-full-20260720 branch from fcedb4a to 44b5034 Compare July 19, 2026 23:54
@AsTonyshment

Copy link
Copy Markdown
Collaborator

Great job, thanks for the detailed diagnosis! @Stardust0831 I developed the multi-GPU RT-TDDFT path, and I have also encountered hangs with cuSOLVERMp/cuBLASMp under certain BLACS process grids and library versions. At the time, however, I did not isolate the problem using NVIDIA’s official samples or verify the affected version range in detail, so this investigation is very helpful.

It is especially useful that the same failure can be reproduced independently of ABACUS and that upgrading to cuSOLVERMp 0.9.x resolves the 16-rank RT-TDDFT case. This gives us much stronger evidence that the hang is caused by the upstream library rather than the RT-TDDFT implementation itself.

What are your planned next steps for this PR? Are you planning to add the cuSOLVERMp version guard and documentation mentioned in the description, and possibly keep the 4-rank smoke test as regular coverage while using a 16-rank 4×4-grid case as a periodic regression test?

@Stardust0831
Stardust0831 force-pushed the ci/sai-gpu-full-20260720 branch from 44b5034 to 5821e69 Compare July 21, 2026 21:49
@Stardust0831 Stardust0831 changed the title Add cuSolverMp RT-TDDFT smoke coverage and version notes Guard known-affected cuSolverMp NCCL versions Jul 21, 2026
@Stardust0831
Stardust0831 marked this pull request as ready for review July 21, 2026 22:11
@Stardust0831

Copy link
Copy Markdown
Author

@AsTonyshment Thanks for the suggestions. I have split the follow-up into two focused PRs.
In this PR (#7658), I added the recommended dependency stack of cuSolverMp 0.9.0 with cuBLASMp 0.9.1. It also adds a configure-time guard for the known-affected NCCL-backed cuSolverMp 0.7.x/0.8.x range, with an explicit opt-in override for users who still need those versions.
Separately, #7665 adds GPU CI on SAI. It runs daily against the upstream default branch and can also be triggered manually by authorized maintainers through a protected GitHub Environment. The workflow rebuilds ABACUS and runs the existing GPU test matrix.
I also added a reconstructed Si48 RT-TDDFT smoke case using ks_solver=cusolvermp. It runs with 16 MPI ranks and 16 GPUs across two nodes, specifically covering the multinode cuSolverMp communication and diagonalization path. This is a functional regression smoke rather than a physical or performance reference.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants