如何在超算平台将超大chk文件转换为fchk文件
最近有被问到转换超大chk文件报错的问题,不想搬砖就想着记录一下这个问题的解决办法。
我们在处理Gaussian计算的输出文件时,往往需要用到fchk文件(Win版GaussView并不能直接打开chk文件)。然而,在超算平台使用formchk命令时往往会因为chk文件过大,导致调用的内存资源过多而被管理员kill进程,一般会出现如下提示:
[xxxx@ln0%tianhe2-C 123]$ formchk 123.chk
Read checkpoint file 123.chk
Write formatted file 123.fchk
FChkPn: Initial coordinates match /B/.
Out-of-memory error in routine FChkPn-MO (IEnd= 62159203 MxCore= 33554432)
Use %mem=60MW to provide the minimum amount of memory required to complete this step.
Error termination via Lnk1e at Thu Apr 13 15:15:57 2023.
Error: segmentation violation
rax 0000000000000000, rbx 0000000000697fc8, rcx ffffffffffffffff
rdx 0000000000003d49, rsp 00007fff1d49db48, rbp 00007fff1d49dba0
rsi 000000000000000b, rdi 0000000000003d49, r8 00002ab1e1dcd800
r9 0000000000000000, r10 00007fff1d49d8d0, r11 0000000000000206
r12 00007fff1d49f000, r13 000000000068b10a, r14 0000000000000002
r15 0000000000000000
--- traceback not available
Aborted (core dumped)
我们看到,提示里提到了%mem=60MW ,这表明程序在计算时只能最多调用60M的资源,超出该值就会报Aborted (core dumped)错误。
那么,我们首先会想到通过设置来增加内存资源,比如在环境变量中添加如下内容将资源上限改为4GB:
export GAUSS_MEMDEF=4000000000
但是,我们在运行的时候又发现了新的错误提示,内容如下:
[xxxx@ln0%tianhe2-C 123]$ formchk 123.chk
Read checkpoint file 123.chk
Write formatted file 123.fchk
FChkPn: Initial coordinates match /B/.
Killed
这是因为我们是在登录节点运行的程序,一旦管理员发现登录节点的资源占用过多就会kill掉该进程。那么,最好的办法就是调用计算节点来进行转换。
我们首先需要写一个提交任务的脚本(formchk.sh),内容如下:
#! /bin/sh
formchk *.chk
然后将该脚本上传至chk文件相同位置,并赋予该脚本可执行权限(chmod +x formchk.sh);
最后直接输入yhbatch -N 1 -p work formchk.sh并回车任务就提交了。
当然为了省懒还可以使用alias等。