在国产超算上从零部署CESM2.1.3:我的三天踩坑实录与完整配置文件分享
2026/6/8 3:36:10 网站建设 项目流程

国产超算环境CESM2.1.3部署实战:关键配置与问题解决全记录

1. 环境准备与源码获取

在国产超算环境中部署CESM(Community Earth System Model)需要面对特殊的网络环境和模块管理系统。不同于常规Linux服务器,超算平台通常存在以下特征:

  • 受限的网络访问:GitHub等外部代码仓库可能无法直接访问
  • 模块化软件管理:依赖库通过module load方式加载
  • 非标准目录结构:输入数据和临时文件存储位置有特殊规范

1.1 源码下载的变通方案

由于直接git clone官方仓库经常失败,可采用分步下载策略:

# 先下载主仓库(可能需多次尝试) git clone -b release-cesm2.1.3 https://github.com/ESCOMP/CESM.git my_cesm_sandbox # 修改Git配置解决SSL问题 git config --global http.sslVerify false git config --global url."https://".insteadOf git://

组件下载失败的典型报错及处理:

ERROR: Command '[u'git', u'clone', u'--quiet', u'https://github.com/ESCOMP/ctsm/', u'clm']' returned non-zero exit status 128

此时应进入my_cesm_sandbox目录手动执行:

./manage_externals/checkout_externals -S

1.2 模块环境配置

超算平台通常预装Intel编译器和MPI环境,需在~/.bashrc中固化模块加载命令:

# 基础环境配置 module purge module load compiler/intel/2017.5.239 module load mpi/hpcx/2.7.4/intel-2017.5.239 module load mathlib/netcdf/intel/4.4.1 module load mathlib/pnetcdf/intel/1.12.1

关键检查点

# 验证编译器 mpiicc --version # 验证NetCDF ncdump --version

2. 机器配置文件深度定制

2.1 config_machines.xml核心参数

以下为经过验证的国产超算适配配置(关键部分):

<machine MACH="CAS-ESM"> <NODENAME_REGEX>login04</NODENAME_REGEX> <COMPILERS>intel</COMPILERS> <MPILIBS>intelmpi</MPILIBS> <CIME_OUTPUT_ROOT>${HOME}/cesm/scratch</CIME_OUTPUT_ROOT> <DIN_LOC_ROOT>${HOME}/cesm/inputdata</DIN_LOC_ROOT> <MAX_TASKS_PER_NODE>24</MAX_TASKS_PER_NODE> <module_system type="module"> <modules compiler="intel"> <command name="load">compiler/intel/2017.5.239</command> <command name="load">mpi/hpcx/2.7.4/intel-2017.5.239</command> </modules> </module_system> </machine>

2.2 常见配置陷阱

  1. NODENAME_REGEX匹配问题

    • 必须确保正则表达式能匹配计算节点和登录节点主机名
    • 错误配置会导致Expected one child报错
  2. default_run_suffix陷阱

    • 新版CESM要求严格XML格式,删除此标签可避免解析错误
  3. 环境变量优先级

    • $CIME_OUTPUT_ROOT等路径变量会覆盖case设置
    • 建议使用$ENV{HOME}替代绝对路径

3. 编译系统配置实战

3.1 config_compilers.xml优化

针对Intel编译器的最佳实践配置:

<compiler COMPILER="intel" MACH="CAS-ESM"> <FFLAGS> <base>-qno-opt-dynamic-align -convert big_endian -assume byterecl</base> <append DEBUG="FALSE">-O2 -debug minimal</append> </FFLAGS> <SLIBS> <append MPILIB="intelmpi">-mkl=cluster</append> </SLIBS> </compiler>

3.2 编译问题诊断

典型错误及解决方案:

错误现象可能原因解决方案
undefined reference库链接顺序错误在SLIBS中添加-mkl=cluster
File format not recognized编译器版本不匹配统一使用Intel 2017工具链
MPI_Init_thread失败MPI环境冲突执行module purge后重新加载

4. 案例创建与验证

4.1 创建测试案例

通过验证的创建命令:

./create_newcase \ --case FHIST_f19 \ --res f19_f19 \ --compset FHIST \ --compiler intel \ --mach CAS-ESM \ --run-unsupported

4.2 常见创建错误处理

  1. XML验证失败

    xmllint --noout --schema $CIMEROOT/config/xml_schemas/config_machines.xsd config_machines.xml
  2. 机器未识别

    • 确保config_machines.xml位于~/.cime/$CIMEROOT/config/cesm/machines/
    • 检查NODENAME_REGEX与实际主机名匹配
  3. 批处理系统配置

    • 无作业调度系统时应设置<BATCH_SYSTEM>none</BATCH_SYSTEM>
    • 错误配置会导致no element found解析错误

5. 性能调优与稳定性保障

5.1 超算环境特有优化

内存管理

<environment_variables> <env name="OMP_STACKSIZE">256M</env> </environment_variables> <resource_limits> <resource name="RLIMIT_STACK">-1</resource> </resource_limits>

并行配置建议

  • MAX_TASKS_PER_NODE不超过物理核心数
  • 实际运行时ntasks应为节点数的整数倍

5.2 长期运行保障措施

  1. 输入数据管理

    • 将常用输入数据缓存到$DIN_LOC_ROOT
    • 定期清理$CIME_OUTPUT_ROOT中的临时文件
  2. 模块版本固化

    # 记录当前环境模块版本 module list > cesm_modules.versions
  3. 日志监控要点

    • 检查cesm.log.$LID中的内存泄漏警告
    • 关注OMP_STACKSIZE相关错误

6. 完整配置文件参考

config_machines.xml(精简版)

<?xml version="1.0"?> <config_machines version="2.0"> <machine MACH="CAS-ESM"> <NODENAME_REGEX>login\d+</NODENAME_REGEX> <COMPILERS>intel</COMPILERS> <MPILIBS>intelmpi</MPILIBS> <CIME_OUTPUT_ROOT>$ENV{HOME}/cesm_output</CIME_OUTPUT_ROOT> <MAX_TASKS_PER_NODE>24</MAX_TASKS_PER_NODE> <module_system type="module"> <modules compiler="intel"> <command name="load">compiler/intel/2017.5.239</command> <command name="load">mathlib/netcdf/intel/4.4.1</command> </modules> </module_system> </machine> </config_machines>

config_compilers.xml(关键片段)

<compiler COMPILER="intel" MACH="CAS-ESM"> <MPIFC>mpiifort</MPIFC> <SFC>ifort</SFC> <SLIBS> <append MPILIB="intelmpi">-mkl=cluster</append> </SLIBS> </compiler>

在国产超算这类特殊环境中,CESM部署成功的关键在于准确识别平台特性并针对性调整配置。经过三天的问题排查,最深刻的体会是:超算环境的差异性远大于文档假设,必须通过实际测试验证每个配置项的有效性。特别是NODENAME_REGEX和模块加载顺序这类看似简单的设置,往往成为阻碍成功的"最后一公里"。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询