nep框架重构 03.train

This commit is contained in:
2025-12-10 00:32:35 +08:00
parent 323790ee66
commit d67bce1109
2 changed files with 21 additions and 15 deletions

View File

@@ -26,7 +26,7 @@ iterations:
# Step 2: 筛选 # Step 2: 筛选
- name: "01.select" - name: "01.select"
method: "distance" method: "distance"
params: [0.01, 60, 120] params: [0.012, 60, 120]
# Step 3: SCF (VASP) # Step 3: SCF (VASP)
# 逻辑cp template/02.scf/INCAR; check KPOINTS; cp data/POTCAR # 逻辑cp template/02.scf/INCAR; check KPOINTS; cp data/POTCAR
@@ -43,14 +43,16 @@ iterations:
steps: steps:
- name: "00.md" - name: "00.md"
sub_tasks: sub_tasks:
- template_sub: "preheat"
- template_sub: "production" # 第二轮可能只需要 sampling - template_sub: "production" # 第二轮可能只需要 sampling
# 注意:这一轮的 nep.txt 会自动指向 iter_00/03.train/nep.txt # 注意:这一轮的 nep.txt 会自动指向 iter_00/03.train/nep.txt
- name: "01.select" - name: "01.select"
method: "distance" method: "distance"
params: [0.012, 60, 120] params: [0.01, 60, 120]
- name: "02.scf" - name: "02.scf"
executor: "vasp_std" executor: "vasp_std"
- name: "03.train" - name: "03.train"
executor: "nep_local"

View File

@@ -76,7 +76,19 @@ class Workflow:
return return
else: else:
self.logger.info("Skipping Init (Already Done).") self.logger.info("Skipping Init (Already Done).")
else:
# --- [新增逻辑] 后续轮次:从上一轮复制 model.xyz ---
# 只要当前目录下没有 model.xyz就去搬运
if not os.path.exists(os.path.join(step_dir, "model.xyz")):
prev_iter_name = f"iter_{iter_id - 1:02d}"
prev_model_src = os.path.join(self.workspace, prev_iter_name, "00.md", "model.xyz")
if os.path.exists(prev_model_src):
self.logger.info(f"Copying model.xyz from {prev_iter_name}...")
shutil.copy(prev_model_src, os.path.join(step_dir, "model.xyz"))
else:
self.logger.error(f"Previous model.xyz not found: {prev_model_src}")
return
# 确保 gpumdkit 路径可用 # 确保 gpumdkit 路径可用
kit_path = self.machine.config['paths'].get('gpumdkit', 'gpumdkit.sh') kit_path = self.machine.config['paths'].get('gpumdkit', 'gpumdkit.sh')
@@ -525,26 +537,18 @@ class Workflow:
run_cmd_with_log(cmd_plt, step_dir, "plot.log") run_cmd_with_log(cmd_plt, step_dir, "plot.log")
# 检查并移动图片 # [修改] 创建 output 目录在当前 iter 内部
# gpumdkit 通常生成 loss.png, energy.png, force.png 等,或者你说的 train.png output_dir = os.path.join(iter_path, "05.output")
# 我们创建一个专门的 output 目录存放这一轮的成果
output_dir = os.path.join(self.workspace, "05.output", iter_name)
os.makedirs(output_dir, exist_ok=True) os.makedirs(output_dir, exist_ok=True)
# 移动 loss.png / train.png 到 output # 移动 png 图片
# 假设生成的文件名包含 png
for file in os.listdir(step_dir): for file in os.listdir(step_dir):
if file.endswith(".png"): if file.endswith(".png"):
src_png = os.path.join(step_dir, file) src_png = os.path.join(step_dir, file)
dst_png = os.path.join(output_dir, file) # 保持原名 dst_png = os.path.join(output_dir, file)
shutil.copy(src_png, dst_png) shutil.copy(src_png, dst_png)
self.logger.info(f"Archived plot: {file}") self.logger.info(f"Archived plot: {file}")
# 特别处理:你提到的 train.png
if os.path.exists(os.path.join(step_dir, "train.png")):
# 如果你需要重命名或者确保它存在
pass
self.tracker.mark_done(task_id_train) self.tracker.mark_done(task_id_train)
else: else: