diff --git a/docs/usage/apps/cp2k.md b/docs/usage/apps/cp2k.md index bf3c668..b506aff 100644 --- a/docs/usage/apps/cp2k.md +++ b/docs/usage/apps/cp2k.md @@ -146,9 +146,11 @@ CP2K 是可用于DFT计算和分子动力学模拟的强大软件包。它支持 ## 已知问题 -### 内存泄漏 +### 内存 OOM 问题排查 -一些版本可能存在严重的内存泄漏 Issue,若遇到此问题,建议用户关闭 ELPA 功能,使用 Scalapack 进行对角化。 +请首先检查所申请内存是否足够,若所运行计算可以跑满整个节点,请设置 `#SBATCH --mem=251G`。 + +一些版本可能存在严重的内存泄漏 Issue,若遇到内存 OOM 问题,建议用户关闭 ELPA 功能(特别是使用 DIIS 做对角化的情况),使用 Scalapack 进行对角化。 ``` &GLOBAL @@ -156,4 +158,37 @@ CP2K 是可用于DFT计算和分子动力学模拟的强大软件包。它支持 &END GLOBAL ``` -若仍然存在问题,建议尝试降低每个节点上的核数,即调整 `--ntasks-per-node` 为更低的值。 +若仍然存在问题,请进一步按照以下步骤进行测试: + +1. 若为多节点并行任务,请调查任务是否正确并行在每个节点上,当使用 `mpirun` 时,一般需要确保 `-np` 的值为所有节点的进程总数(通常使用 `popt` 或者 `OMP_NUM_THREADS=1` 时为核数) + +2. 检查输入参数中交换关联泛函部分的 `MAX_MEMORY` 设置(单位为MB),若该值太大则需要根据节点总量适当缩减。 + 例如采用杂化泛函进行模拟时, + + ``` + &XC + &HF + &MEMORY + MAX_MEMORY 1500 + EPS_STORAGE_SCALING 0.1 + &END + &END + &END XC + ``` + + 具体数值请根据体系情况进行测试,确保不会造成OOM + +3. 使用psmp版本并尝试提高OMP线程数,以减少总进程数,线程间可以共享内存 + + 例如总共申请64核,采用16个进程,每个进程4个线程: + + ```bash + ... + #SBATCH -N 1 + #SBATCH --ntasks-per-node=64 + ... + export OMP_NUM_THREADS=4 + mpirun -np 16 cp2k.psmp -i input + ``` + +4. 若问题仍然存在或者出现了意料之外的报错(此时请恢复到 `popt` 版本),建议尝试降低每个节点上的核数,即调整 `#SBATCH --ntasks-per-node` 为更低的值。