跳转至

8.2 单节点资源 临时目录与安全 Slurm 提交

这些输入和起始模型为未执行的教学示例。原创配图为示意图,不是计算结果。使用前请验证版本相关语法、授权数据、数值收敛及科学模型。

8.2.1 模型、单位与来源记录

结构长度使用 Å,电子能使用 hartree,振动波数使用 cm⁻¹。核对各输出字段,区分热修正与标准态项。

共享输入、约定与证据

原创示意图:单节点资源 临时目录与安全 Slurm 提交。不声称已有数值计算结果。
原创示意图:单节点资源 临时目录与安全 Slurm 提交。不声称已有数值计算结果。

8.2.2 未执行输入与明确修改片段

按照下方说明确认每个片段的母计算与替换位置;片段不自动构成独立输入。保留空行与文件来源要求。

8.2.2.1 输入块 1

#!/bin/bash
#SBATCH --job-name=g30-water
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=6G
#SBATCH --time=00:30:00
#SBATCH --output=g30-slurm-%j.out
#SBATCH --error=g30-slurm-%j.err
set -euo pipefail
module load Gaussian/g16
cd "$SLURM_SUBMIT_DIR"
base="${SLURM_TMPDIR:-${TMPDIR:-/tmp}}"
export GAUSS_SCRDIR
GAUSS_SCRDIR=$(mktemp -d "$base/g30-${SLURM_JOB_ID}-XXXXXX")
printf 'Scratch: %s\n' "$GAUSS_SCRDIR"
printf 'Started UTC: '; date -u
set +e
g16 < g30_water.com > "g30_water-${SLURM_JOB_ID}.log" 2>&1
status=$?
set -e
printf 'Gaussian exit code: %s\n' "$status"
printf 'Ended UTC: '; date -u
printf 'Scratch retained at %s until site cleanup\n' "$GAUSS_SCRDIR"
exit "$status"

8.2.3 实作研究

8.2.3.1 直觉与前提

计算资源由两份约定控制:调度器负责分配,Gaussian 负责使用,两者必须一致。本例申请单节点四核和 6 GB 总内存,让 Gaussian 使用其中 4 GB,并创建作业专用临时目录。这些数字只是教学起点,不是内存预测。必须有 Slurm 平台、合法授权模块及本地管理员说明。多节点 Linda 和 GPU 配置不属于本入门脚本,随意增加 mpirun 不能把共享内存程序变成分布式程序。

8.2.3.2 原创批处理模板

提交前把模块名换为本地实际名称,并确保输入资源与指定值一致。

参见上方输入块 1。

由案例 08 修改资源和检查点得到输入。脚本故意不自动删除可能有助排错的临时文件,但节点临时目录可能在作业后由平台清理,记录路径不等于持久备份。需要临时文件续算的任务必须另行制定并测试持久化策略,且保证存储空间,不能声称本简化脚本已保全全部状态。

8.2.3.3 操作步骤

核实模块名、临时目录政策、内存计费与启动包装脚本。 保持核数一致,为程序额外开销留出合理内存余量。 先做短单点测试,确认日志与检查点写入持久目录。 提交并记录作业号,查询状态时避免重复提交。 同时检查返回码与科学任务完成情况,不能只看启动器零退出。 依据实际资源统计调整下一次申请。

8.2.3.4 解读 核查与局限

%mem 不按核心数相乘;超用核心可能更慢并违反政策。临时盘耗尽有时会在日志末端表现为程序错误,需同时查看文件系统及调度信息。Shell trap 无法保证从强制杀进程、节点故障或自动清理中救回文件。比较并行效率时,应对同一收敛任务同时比较墙钟时间和核时,更多核心并不必然更快或更省。

练习。 在总申请内存不变时改为八核,解释为何不能把 %mem 自动乘八。

8.2.4 相关计算

8.2.5 来源与进一步阅读