国产超算平台CESM2.1.3部署实战:从环境配置到案例创建的完整指南
当第一次在国产超算平台上部署CESM(Community Earth System Model)时,即使是经验丰富的研究人员也可能会遇到各种意想不到的挑战。本文将分享在国产超算环境(如"地球模拟器"类平台)上从零开始部署CESM2.1.3的完整过程,特别针对那些官方文档未明确说明的配置问题提供解决方案。
1. 环境准备与依赖库安装
在开始部署CESM之前,必须确保超算平台满足所有基础依赖要求。国产超算通常采用模块化环境管理(module load),这要求我们熟悉相关命令:
# 查看可用模块 module avail # 加载必要模块 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.1CESM2.1.3的核心依赖包括:
- 编译器:Intel(建议2017或更新版本)
- MPI库:Intel MPI或MPICH
- NetCDF库:版本4.4.1及以上
- PnetCDF:并行NetCDF库(建议1.12.1)
- 其他工具:Git(v1.8+)、Subversion(v1.8+)、Perl、csh等
常见问题1:模块冲突
当加载多个模块时可能出现冲突,建议每次开始前执行module purge清除已有环境。
配置验证命令:
# 检查编译器 icc --version mpiicc --version # 检查NetCDF ncdump --version2. 获取CESM源代码
从CESM2开始,代码托管在GitHub上,但由于网络环境限制,国内用户可能遇到克隆失败的问题:
# 标准克隆命令(可能失败) git clone -b release-cesm2.1.3 https://github.com/ESCOMP/CESM.git my_cesm_sandbox # 解决方案:禁用SSL验证(临时措施) git config --global http.sslVerify false git config --global url."https://".insteadOf git://关键步骤:组件检出
克隆主仓库后,需要检出所有子模块:
cd my_cesm_sandbox ./manage_externals/checkout_externals若遇到组件下载失败,可尝试多次执行该命令。验证组件是否完整:
./manage_externals/checkout_externals -S3. 机器配置文件深度解析
CESM通过XML文件定义机器特定配置,主要涉及三个关键文件:
- config_machines.xml- 机器硬件和路径配置
- config_compilers.xml- 编译器选项设置
- config_batch.xml- 作业调度系统配置(可选)
3.1 config_machines.xml配置要点
<machine MACH="CAS-ESM"> <DESC>国产超算环境配置示例</DESC> <NODENAME_REGEX>login04</NODENAME_REGEX> <OS>LINUX</OS> <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> <!-- MPI执行命令配置 --> <mpirun mpilib="default"> <executable>mpirun</executable> <arguments> <arg name="ntasks">-np {{ total_tasks }}</arg> </arguments> </mpirun> <!-- 模块加载配置 --> <module_system type="module" allow_error="true"> <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>关键参数说明:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| MAX_TASKS_PER_NODE | 24-64 | 单节点最大任务数 |
| GMAKE_J | 8-16 | 编译并行线程数 |
| DIN_LOC_ROOT | 自定义路径 | 输入数据目录 |
| CIME_OUTPUT_ROOT | 自定义路径 | 输出目录 |
3.2 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> <CFLAGS> <base>-qno-opt-dynamic-align -fp-model precise -std=gnu99</base> </CFLAGS> <SLIBS> <append MPILIB="intelmpi">-mkl=cluster</append> </SLIBS> </compiler>配置验证命令:
xmllint --noout --schema $CIMEROOT/config/xml_schemas/config_machines.xsd config_machines.xml xmllint --noout --schema $CIMEROOT/config/xml_schemas/config_compilers_v2.xsd config_compilers.xml4. 创建并运行测试案例
成功配置机器环境后,可以创建测试案例:
./create_newcase --case FHIST_f19 --res f19_f19 --compset FHIST \ --run-unsupported --compiler intel --mach CAS-ESM案例管理命令:
# 进入案例目录 cd FHIST_f19 # 案例配置 ./case.setup # 构建模型 ./case.build # 提交运行 ./case.submit常见错误处理:
"Expected one child"错误
检查XML文件格式,确保所有标签正确闭合组件下载不完整
手动执行./manage_externals/checkout_externals多次模块加载失败
确认模块名称与版本是否匹配当前环境
5. 性能调优与实用技巧
编译优化
在case.build前修改env_build.xml:./xmlchange BUILD_THREADED=TRUE ./xmlchange BUILD_WALLCLOCK=3600资源分配策略
组件 NTASKS NTHRDS 说明 ATM 32 1 大气组件 LND 16 2 陆面过程 ICE 8 1 海冰模型 输入数据管理
使用check_input_data脚本预下载所需数据:./check_input_data --download超算环境适配
针对不同作业调度系统(如Slurm、PBS),需调整config_batch.xml中的提交命令格式
在国产超算上部署CESM确实会遇到各种文档中未提及的挑战,特别是网络环境和模块管理的特殊性。经过多次尝试后,我发现最关键的是保持耐心,逐步验证每个环节。当遇到问题时,查看日志文件(如cesm.log.*)中的详细错误信息往往能快速定位问题根源。