CESM2 实战调优——从create_newcase到case.submit的完整避坑指南
1. CESM2入门从create_newcase开始第一次接触CESM2这个庞然大物时我完全被它复杂的目录结构和各种配置文件搞晕了。经过多次尝试和踩坑终于总结出了一套适合新手的操作流程。CESM2Community Earth System Model version 2是目前最先进的地球系统模型之一广泛应用于气候模拟和研究领域。创建案例是使用CESM2的第一步也是最关键的一步。在CIME目录下的scripts文件夹中create_newcase脚本就是我们的起点。这里有个小技巧在运行create_newcase之前最好先确认你的compset组件集和分辨率是否匹配。我曾经因为选错了分辨率导致后续build失败白白浪费了半天时间。cd /path/to/cesm/cime/scripts ./create_newcase --case my_first_case --compset FWHIST --res f09_f09_mg17 --machine your_machine_name创建案例后你会得到一个以案例名命名的文件夹。这时候不要急着进行下一步先检查.env_mach_specific.xml文件中的配置是否正确。特别是当你使用共享计算资源时要确认machine设置与你的实际环境匹配。2. 精准配置xmlquery与xmlchange实战技巧2.1 任务分配的艺术CESM2的并行计算配置是个技术活也是新手最容易出错的地方。xmlquery和xmlchange这对黄金组合能帮你快速查看和修改配置参数。我第一次配置时完全搞不懂ATM_NTASKS这些参数的含义直到模型崩溃了三次才明白其中的门道。# 查看当前任务配置 ./xmlquery ATM_NTASKS,CPL_NTASKS,MAX_TASKS_PER_NODE # 修改配置示例 ./xmlchange ATM_NTASKS-4,MAX_TASKS_PER_NODE32这里有个重要细节ATM_NTASKS为正值表示任务数负值表示节点数。如果你的计算资源有限建议从较小的配置开始测试。我曾经因为贪心设置了过大的节点数结果作业排队等了三天都没排上。2.2 运行时间与重启配置RUN_TYPE和STOP_OPTION这些参数决定了模型的运行行为。对于新手来说建议先从短期运行开始测试./xmlquery RUN_TYPE,STOP_OPTION,STOP_N ./xmlchange RUN_TYPEstartup,STOP_OPTIONndays,STOP_N5重启配置是另一个需要注意的地方。REST_OPTION和REST_N决定了模型保存重启文件的频率。我建议在测试阶段设置较频繁的保存间隔这样即使模型崩溃也能从最近的检查点继续而不是从头开始。3. 并行参数优化npr_yz的奥秘3.1 npr_yz与任务分配的关系npr_yz参数是影响CESM2并行效率的关键之一。这个参数定义了处理器网格的划分方式必须与之前设置的ATM_NTASKS和MAX_TASKS_PER_NODE严格匹配。我第一次配置时忽略了这一点结果模型运行速度比预期慢了近10倍。在user_nl_cam中添加npr_yz时要确保满足以下条件x1 × x2 y1 × y2 ATM_NTASKS × MAX_TASKS_PER_NODEx1 y2x2 y1# 示例配置 npr_yz 32,4,4,323.2 节点限制与性能平衡在配置npr_yz时必须考虑实际可用的计算资源。每个用户的节点数通常有限制超限的配置不仅无法运行还可能影响其他用户。我的经验是在保证科学目标的前提下尽量优化资源配置。如果总核数超过128记得修改env_mach_specific.xml中的num_tasks参数。我曾经遇到一个案例模型在400核上运行但因为忘记修改这个参数导致资源利用率不足50%。4. 输出配置避免常见报错的技巧4.1 变量输出设置CESM2的输出配置非常灵活但也容易出错。fincl参数定义了要输出的变量列表而fexcl则是要排除的变量。新手常犯的错误是在fincl中添加了不存在的变量名忘记清空不需要的fincl条目变量名拼写错误# 正确设置示例 fincl1 T,U,V,PS fincl2 建议参考CESM官方文档核对变量名或者先用xmlquery查看默认输出配置。我曾经因为一个变量名拼写错误导致模型运行了三天才发现输出文件是空的。4.2 输出频率与文件管理mfilt和nhtfrq参数控制着输出频率和每个文件包含的时间步长。对于长期运行合理的设置可以避免生成过多小文件# 月输出每60个月5年一个文件 mfilt 60 nhtfrq 0需要注意的是nhtfrq为0表示月平均负值表示小时间隔。我曾经错误地设置了正值结果模型直接崩溃。另一个常见错误是忘记设置avgflag_pertape导致需要的平均输出变成了瞬时值。5. 高效提交作业case.submit的最佳实践5.1 作业脚本配置case.submit是模型运行的最后一环但配置不当会导致资源浪费或作业失败。在Slurm系统中nodes和ntasks-per-node必须与之前的配置一致#!/bin/bash #SBATCH --nodes4 #SBATCH --ntasks-per-node32 #SBATCH --job-namemy_cesm_run记得检查节点数不超过用户限制ntasks-per-node与MAX_TASKS_PER_NODE一致总核数与npr_yz计算值匹配5.2 环境变量与路径设置PERL环境变量是CESM2运行的关键依赖之一。如果遇到奇怪的报错很可能是环境变量问题export PATH/path/to/perl/bin:$PATH export PERL5LIB/path/to/perl/lib:$PERL5LIB建议将这些设置放在~/.bashrc中避免每次提交作业都要重新设置。我曾经因为PERL路径错误花了整整一周时间排查一个看似毫无关联的报错。6. 调试技巧与常见问题解决模型运行过程中难免会遇到各种问题。掌握一些调试技巧可以节省大量时间检查CaseStatus文件这个文件记录了模型运行的详细状态是排查问题的第一手资料查看日志文件特别是cesm.log和atm.log里面往往包含关键错误信息使用--resubmit选项对于可恢复的错误可以利用这个选项从检查点继续运行一个实际案例模型在运行到第50天时突然崩溃。通过查看日志发现是磁盘空间不足清理后使用./case.submit --resubmit成功继续运行避免了从头开始的麻烦。7. 高级调优从能跑到跑得好当模型能够正常运行后下一步就是优化性能。几个关键点负载平衡不同组件的任务分配要合理避免某个组件成为瓶颈I/O优化调整输出频率和文件大小减少I/O等待时间内存管理监控内存使用情况避免交换影响性能我曾经通过优化组件任务分配将一个原本需要7天的模拟缩短到4天完成。关键是根据组件计算强度合理分配计算资源而不是简单平均分配。