跳至主要内容

dpgen,deepmd,lammps,vasp 报错记录

2024/05/20 VASP 加压优化报错: | ZBRENT: fatal error in bracketing | | please rerun with smaller EDIFF, or copy CONTCAR | | to POSCAR and continue | | | | ----> I REFUSE TO CONTINUE WITH THIS SICK JOB ... BYE!!! <----

其实是EDIFFG = 由-0.01 改成-0.02就可以了

2024/04/04

nohup dpgen init_bulk param.json machine.json  1>log 2>err&
报如下错误,解决办法,重新手动写出上面的命令搞定了

    elements = jdata["elements"]

KeyError: 'elements'

2024/01/20

dpgen Simplify dp采样报错: /work/qan/kluo/anaconda3/envs/deepmd221/lib/python3.10/importlib/__init__.py:169: UserWarning: The NumPy module was reloaded (imported a second time). This can in some cases result in small but subtle issues and is discouraged. _bootstrap._exec(spec, module) usage: dp [-h] [--version] {config,transfer,train,freeze,test,compress,doc-train-input,model-devi,convert-from,neighbor-stat,train-nvnmd} ... dp: error: unrecognized arguments: --real_error

对比发现可能是用了deepmd221导致的 改成deepmd227 正常了

2024/1/2

/anvil/projects/x-phy220096/kluo/anaconda3/envs/deepmd227/bin/lmp: line 11: 1742149 Killed                  /anvil/projects/x-phy220096/kluo/anaconda3/envs/deepmd227/bin/_lmp "$@"

slurmstepd: error: Detected 1 oom_kill event in StepId=4201973.0. Some of the step tasks have been OOM Killed.

srun: error: a977: task 1: Out Of Memory

srun: Job step aborted: Waiting up to 32 seconds for job step to finish.

解决办法就是改小核数,128核可以算4ns,64核8ns,现在改成27核应该可以算16ns

官方(RCAC - Knowledge Base: Anvil User Guide: OpenMP job in wholenode queue (purdue.edu))也是这样建议的If an OpenMP program uses a lot of memory and 128 threads use all of the memory of the compute node, use fewer processor cores (OpenMP threads) on that compute node.

2023/12/29

/anvil/projects/x-phy220096/kluo/anaconda3/envs/deepmd221/bin/lmp: line 11: 2894955 Segmentation fault      /anvil/projects/x-phy220096/kluo/anaconda3/envs/deepmd221/bin/_lmp "$@"

猜测解决办法是升级deepmd到最新版本2.2.7.,结果并不是,最后发现原因是 region不能和前面的fix脚本连用只能分割使用.

还有一种常见情况就是势文件train版本和lammps(deempmd版本不匹配导致了),保持一直不会出这种错误,有时候不一致也能用,分情况了。Segmentation fault这种报错一般是版本问题。可以重新freeze+compress

但是压缩后的力场还是这个报错 现在猜测可能是少了一个元素的原因:未找到的张量: 错误消息表明模型中指定的张量 spin_attr/ntypes_spin:0 未在图中找到。这可能是因为模型预期第六个元素的张量但未训练该元素。

图结构: 定义机器学习模型的图时,所有预期的输入及其形状需要一致。如果某个元素缺失或未训练,会导致预期张量的匹配失败,从而引发错误。 压缩影响: 压缩模型通常通过修剪冗余部分来减小其大小,但它仍然依赖于基础结构的完整性。如果模型结构包括未训练的元素,在压缩和后续使用过程中可能会导致不一致。所以快速测试一下80w试试.确实解决了


conda create -n deepmd deepmd-kit=*=*cpu libdeepmd=*=*cpu lammps -c https://conda.deepmodeling.com -c defaults

dp freeze -o graph.pb

dp compress -i graph.pb -o graph-compress.pb

/work/qan/kluo/TiCdpgen/Run/iter.000298 由于新添加5种元素,导致压缩模型由14.1MB暴涨到161MB,所以下面这种四连用报错,估计单独的应该可以用,最后手动压缩吧

pair_style      deepmd ../graph.001.pb ../graph.002.pb ../graph.003.pb ../graph.000.pb  out_freq ${THERMO_FREQ} out_file model_devi.out

2023/12/26

(base) [kluo@nova run]$ dpgen collect ./ ./collect -p param.json 报错

  File "/work/qan/kluo/anaconda3/lib/python3.9/site-packages/dpdata/system.py", line 421, in append
    raise RuntimeError(
RuntimeError: systems with inconsistent formula could not be append: S32Zn32 v.s. S36Zn36

找到原因了 因为中途更改过002config 由各向同性的Zn32S32 diamond 结构改成了 三个晶格不同的Zn36S36结构 所以不匹配了。解决办法就是将这些有问题的数据文件夹重命名,到时候单独收集

还有个解决办法:dpgen collect ./ ./collect -p param.json -m #自动分类功能也许可以绕过

Data002 21-35
Data015 51-55
Data012 52-55
#!/bin/bash

# 起始和结束的迭代编号
start=52
end=55

# 循环遍历每个迭代
for i in $(seq -f "%06g" $start $end)
do
  # 构建原始文件夹路径
  old_folder="iter.$i/02.fp/data.012"
  # 构建新的文件夹路径
  new_folder="iter.$i/02.fp/data.012a"

  # 检查原始文件夹是否存在
  if [ -d "$old_folder" ]; then
    # 执行重命名
    mv -f "$old_folder" "$new_folder"
    echo "Renamed $old_folder to $new_folder"
  else
    echo "Directory $old_folder does not exist"
  fi
done

#####

将这段代码保存为一个文件,比如叫做rename_folders.sh。然后,你可以通过在命令行中运行以下命令来执行这个脚本:

bash
chmod +x rename_folders.sh ./rename_folders.sh

这个脚本做了以下几件事:

  1. 定义了起始和结束的迭代编号。
  2. 使用seq命令和格式化选项-f来生成固定宽度的序列号(这里使用%06g确保序列号是六位数字,例如000021)。
  3. 为每个迭代构建了旧文件夹和新文件夹的路径。
  4. 检查旧文件夹是否存在,如果存在则执行重命名,并打印出一条确认信息。
  5. 如果旧文件夹不存在,打印出一条错误信息。

在运行这个脚本之前,请确保你在脚本所在的目录下,或者提供脚本中文件夹路径的绝对路径。此外,请确保你对这些文件夹有足够的权限来执行重命名操作。

2023/11/11

lammps计算 浮点异常(核心转储) /work/qan/kluo/anaconda3/envs/deepmd221/bin/lmp: line 11: 22434 Floating point exception(core dumped) /work/qan/kluo/anaconda3/envs/deepmd221/bin/_lmp "$@" /work/qan/kluo/anaconda3/envs/deepmd221/bin/lmp: line 11: 22462 Floating point exception(core dumped) /work/qan/kluo/anaconda3/envs/deepmd221/bin/_lmp "$@" srun: error: nova18-49: tasks 4,22: Exited with exit code 136

通过与chatGPT沟通最后解决办法是用最新版本的deepmd227解决了。

但是在training的时候又碰到新的问题,而且确认是deepmd227带来的,221没问题 packages/typing_extensions.py", line 152, in _check_generic raise TypeError(f"{cls} is not a generic class") TypeError: typing.List[str] is not a generic class

折腾了一圈 还是妥协了 改成221training 227lammps能跑起来就行

总结:版本更新确实能解决一些问题,但是又会有新的问题出现,因为机器的配置特别是库文件都不一样。

真实原因是drags版本太低导致的(需要0.4以上)Deepmd-kit2.2.7 version errors during training · deepmodeling/deepmd-kit · Discussion #2965 (github.com)

pip list | grep dargs查看当前环境的版本

pip install --upgrade dargs 更新



train.log报错显示tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [4,832] rhs shape= [4,1008] [[{{node save/Assign_2}}]]

原因是(transfer Learning)初始化旧模型的时候,sel我用的是自动挡"sel": "auto:1.01",这个在新数据集的基础上生存的具体sel 与旧模型的sel不匹配导致的。shape= [4,1008] 代表[元素种类,sel加合*元素种类]=[4, 4*(52+60+36+104)].所以找到旧模型的tran.log 推测出具体的sel(被4整除的最小数),就可以了。

/work/qan-free/kluo/HEMC/dpgen/iter.000185/00.train/000 一直报错 无法继续 raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 之前猜测是磁盘空间不够的问题,现在想想 很可能是压缩的模型197.22MB太大导致的,所以果断关闭compress 试试


lammps计算有表面的结构时 势能 温度 压力 都出现周期性震荡 很难平衡,一般用drag 0.3
在某些情况下(譬如固体),当向系统施加Nose/Hoover控压和控温器的时候,系统的压强(体积)和温度会意料之外的剧烈振荡。此时,采用关键词drag可以阻缓这些振荡的发生,但是这将修改Nose/Hoover方程。当drag值设定为0.0时,意味着Nose/Hoover方程不发生改变。当采用非零值时,此时会向方程添加一个drag项;drag值设定的越大,阻尼效应越明显。短期执行并监视压强和温度是确定阻尼项是否起作用的最佳方法。 通常,介于0.2到2.0之间的值足以抑制几个周期后的振荡。 请注意,使用drag关键词将干扰能量守恒,并且还将更改位置和速度的分布,以使其与名义上的NVT,NPT或NPH系综不完全相符。这是为了平衡后期produce阶段 不用这个关键词
还有就是可以用很大的timestep(10fs可以试试,只要不报错就行)长时间平衡就好了

File "/data/gpfs/home/kluo/.local/lib/python3.8/site-packages/dpgen/generator/run.py", line 691, in expand_matrix_values

    for ii in target_list[cur_idx]:

TypeError: 'int' object is not iterable

Int integer 整数的意思 list of integer 不一样。

原因是:param等脚本文件里的数据类型没有区分 List of integer 需要[10], Integer 不需要。

注意自己模板里定义的变量需要括号[],而外部数据根据手册来,不统一的

  File "/data/gpfs/home/kluo/.local/lib/python3.8/site-packages/dpdispatcher/submission.py", line 241, in handle_unexpected_submission_state

    raise RuntimeError(

RuntimeError: Meet errors will handle unexpected submission state.

Debug information: remote_root==/data/gpfs/assoc/matersimul/kunluo/dpgentestlmp/work/1f1c9b7b10698827bb7aa53772c3c17b2b7c1c0a.

Debug information: submission_hash==1f1c9b7b10698827bb7aa53772c3c17b2b7c1c0a.

Please check the dirs and scripts in remote_rootThe job information mentioned above may help

这个很可能是节点问题导致任务提上run20s内掉了,可以单独提交简单对应的lmp或者vasp任务验证 如果没问题

就按提示仔细检查所有log文件 有收获 我出现过版本不对应问题 需要激活环境换高版本的,在.bashrc里注释掉老版本重新进入系统

nohup dpgen init_bulk param.json machine.json > log 2> err 在最后一步数据转格式的时候出错。询问chaGPT发现可能是vasp升级成6.2导致的。但是发现之前的dpgen run 都是正常的 那只有一种可能,qmd的数据不行,单独的一帧数据的outcar可以识别??正在测试中
nohup: ignoring input
Traceback (most recent call last):
  File "/home/kluo/.local/bin/dpgen", line 8, in <module>
    sys.exit(main())
  File "/home/kluo/.local/lib/python3.9/site-packages/dpgen/main.py", line 185, in main
    args.func(args)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpgen/data/gen.py", line 1497, in gen_init_bulk
    coll_vasp_md(jdata)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpgen/data/gen.py", line 1005, in coll_vasp_md
    _sys = dpdata.LabeledSystem(oo, type_map= type_map)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/system.py", line 227, in __init__
    self.from_fmt(file_name, fmt, type_map=type_map, begin= begin, step=step, **kwargs)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/system.py", line 253, in from_fmt
    return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/system.py", line 1013, in from_fmt_obj
    data = fmtobj.from_labeled_system(file_name, **kwargs)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/plugins/vasp.py", line 68, in from_labeled_system
    = dpdata.vasp.outcar.get_frames(file_name, begin=begin, step=step, ml=ml)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/vasp/outcar.py", line 71, in get_frames
    coord, cell, energy, force, virial, is_converge = analyze_block(blk, ntot, nelm, ml)
  File "/home/kluo/.local/lib/python3.9/site-packages/dpdata/vasp/outcar.py", line 134, in analyze_block
    virial[0][2] = tmp_v[5]
IndexError: list index out of range

结果发现是加入vdW修正导致的

[BUG] OUTCAR transformation · Issue #347 · deepmodeling/dpdata · GitHub

需要最新的dpdata就可以了。
pip install --upgrade dpdata





评论

此博客中的热门博文

lammps 压痕划痕模拟设置参考

  Molecular dynamics study on the effect of electric current on electrically-assisted scratching for crystal copper - IOPscience 原因深入分析如下: ✅ 切削 / 摩擦 / 划痕:局部剧烈变形 → 热量集中 这类过程模拟的是工具与材料 接触区域的强烈局部非平衡过程 ; 如果对整个系统控温,会 严重抹平局部发热、滑移带的应变能耗散 等重要现象; 所以 只在边界区域(如底部、侧边)设 thermostat,起到“热沉”作用 ; 文献经典设置就是: 底部固定 ; 边缘 slab 控温 ; 接触区完全不控温,自由演化 。 ✅ 拉伸 / 压缩 / 剪切:全局加载 → 热传导充分 是材料整体在受力,不存在特别“集中”的能量输入区域; 局部发热相对温和,且在 bulk 系统中可以通过自身结构进行导热 ; 实验中常常是等温加载(准静态过程); 所以 很多文献就直接用整体 fix nvt 控温 ,保持恒温环境,简化模拟; 注意有些更精细的研究会改为: 只在两端 slab 控温,中间 Newtonian 自由演化 。 📚 二、典型模拟场景下的控温策略总览 场景类别 控温方式 控温范围 控温方法 控温目的 注意事项 ✅ 平衡态热力学性质 (如热容、扩散、应力) 整体控温 全体系 fix nvt , fix npt 模拟室温等温状态 标准EMD方法 ✅ 热导率(Green-Kubo) 整体控温 全体系 fix nvt (前期平衡), 后期 nve 采集能流自相关函数 采样期不能控温 ✅ 热导率(NEMD) 区域控温 热源/热沉 fix langevin , fix heat 人为施加温差形成热流 中间区自由演化 ✅ 拉伸 / 压缩 / 剪切 整体控温(常用)或局部控温 全体系或上下 slab fix nvt 或 langevin slab 保持恒温,避免非真实升温 全控温可抹平热应变 ✅ 应力松弛 / 加热冷却过程 整体控温 全体系 fix nvt 或温度渐变 等温退火、升温或冷却 控温方式决定退火速率 ✅ 位错运动 / 缺陷扩散 局部控温 边界或部分 slab ...

lammps Pdamp,Tdamp的设置经验

 一张小抄(固体/位错/二维材料都适用) fix             11    all npt temp 0.1 0.1 0.5 tri 0.0 0.0 5   drag 2 tchain 3 pchain 3 保持 Pdamp ≫ Tdamp(通常 10× 左右)。 固体/低温:Tdamp 取 0.5–1 ps,Pdamp 取 5–15 ps;需要更稳就再加大 Pdamp。 所以推荐如下: 0.1K 用1 10 300K 固体 用0.5 5  高温用0.2 2 液体用0.1 1 液体/高温:Tdamp 0.2–0.5 ps,Pdamp 2–5 ps 往往够。 2D(石墨烯等,只控平面 x/y):Pdamp 常用 10–20 ps 起步,z 固定或 z NULL。 观察到体积/压力振荡大:增加 Pdamp 或加 drag 2–3,必要时把 dt 临时降到 0.5 fs。 drag 2、tchain/pchain 3 保留没坏处,确实能再抑制一点振荡;不是硬性必须,但在固体+低温+(可能还有 tri 或剪切)的组合里,“更稳”>“更快”,我一般会开着。

dpgen训练经验

最新的dpgen参考PtCuP /work/qan/kluo/PtCuP 0.1K的第0代采样很重要 可以多重复几次确保99以上的准确率,它是后续高温的基础 单点能计算  ISYM = 2 nohup dpgen run param.json machine.json 1>log 2>err& nohup dpgen init_bulk param.json machine.json  1>log 2>err& 初始数据集产生,只能一个POSCAR的计算 但是可以同时提多个任务,但是每个任务都需要 POTCAR POSCAR 一 一对应才行。  elements 和POSCAR POTCAR保持一致。 " type_map " : [ "Ti" , "C" , "V" , "Cr" , "Nb" , "Mo" ],都写全才行 POSCAR 不需要 改成特定顺序 程序最终生成数据集的时候会根据 type_map自动统一匹配 usage: dpgen [-h] {init_surf,init_bulk,auto_gen_param,init_reaction,run,run/report,collect,simplify,autotest,db,gui} ... dpgen is a convenient script that uses DeepGenerator to prepare initial data, drive DeepMDkit and analyze results. This script works based on several sub-commands with their own options. To see the options for the sub-commands, type "dpgen sub-command -h". positional arguments:   {init_surf,init_bulk,auto_gen_param,init_reaction,run,run/report,collect,simpli...