CESM2环境配置——从零到一的避坑指南
1. 环境准备从零搭建CESM2的基石第一次接触CESM2Community Earth System Model时最让人头疼的就是环境配置。我至今记得在实验室服务器上折腾了整整三天才把依赖库全部装好的经历。为了让后来者少走弯路这里分享一套经过验证的配置方案。硬件选择建议虽然CESM2可以在个人笔记本上运行简单案例但推荐使用至少16核CPU64GB内存的工作站。我曾用Dell Precision 5820Xeon W-2245/128GB内存测试完整的大气模块编译需要约45分钟。关键依赖库的版本搭配非常重要经过多次测试验证的黄金组合是HDF5 1.10.7必须开启并行IO支持NetCDF-C 4.7.4 NetCDF-Fortran 4.5.3ESMF 8.1.0注意与MPI版本的兼容性Perl 5.30XML解析模块必须完整重要提示所有库建议统一使用Intel编译器套件icc/ifort或GNU套件gcc/gfortran混合使用会导致链接错误。我在AWS c5.4xlarge实例上测试时Intel编译的版本比GNU快约18%。2. 依赖库安装实战指南2.1 HDF5编译的隐藏陷阱执行./configure时90%的失败源于缺少zlib开发包。在Ubuntu上要先运行sudo apt-get install zlib1g-dev libcurl4-openssl-dev推荐配置参数Intel编译器环境./configure --prefix/opt/hdf5-1.10.7-intel \ --enable-parallel \ --with-zlib/usr/include \ CCmpiicc FCmpiifort CXXmpiicpc编译完成后务必检查h5pcc -showconfig输出是否包含Parallel HDF5: yes。有次我漏了--enable-parallel参数导致后续NetCDF无法启用并行功能不得不全部重装。2.2 NetCDF的C/Fortran双剑合璧NetCDF的C库和Fortran库必须分开编译这是新手最容易踩的坑。正确的操作流程先编译C库关键环境变量设置export CPPFLAGS-I/opt/hdf5-1.10.7-intel/include export LDFLAGS-L/opt/hdf5-1.10.7-intel/lib ./configure --prefix/opt/netcdf-c-4.7.4 --disable-dap再编译Fortran库时需要额外添加export LD_LIBRARY_PATH/opt/netcdf-c-4.7.4/lib:$LD_LIBRARY_PATH测试时运行ncdump和nf-config都应能正确显示路径。有次我遇到Fortran库找不到C库的问题最后发现是LD_LIBRARY_PATH没设置永久生效。3. ESMF安装的魔鬼细节地球系统建模框架(ESMF)对MPI版本极其敏感。在OpenMPI 4.0环境下编译ESMF 8.1.0时需要特别处理export ESMF_COMMopenmpi export ESMF_COMPILERgfortran export ESMF_NETCDFsplit export ESMF_NETCDF_INCLUDE/opt/netcdf-c-4.7.4/include export ESMF_NETCDF_LIBPATH/opt/netcdf-c-4.7.4/lib编译过程中常见两个报错mpi.h not found → 设置ESMF_MPI_INCLUDE/usr/lib/openmpi/includelibmpi.so missing → 添加export ESMF_LIBPATH/usr/lib/openmpi/lib成功编译后会生成ESMF_RegridWeightGen工具这是后续数据处理的关键。我在CentOS 7上测试发现GCC 9.3需要打补丁才能通过编译。4. 配置文件修改的艺术config_machines.xml的每个标签都关乎运行成败。以AWS c5实例为例的关键配置machine MACHaws_linux CIME_OUTPUT_ROOT/cesm_run/case/CIME_OUTPUT_ROOT DIN_LOC_ROOT/cesm_inputdata/DIN_LOC_ROOT GMAKE_J32/GMAKE_J environment_variables env nameOMP_STACKSIZE512M/env env nameHDF5_USE_FILE_LOCKINGFALSE/env /environment_variables /machine特别提醒GMAKE_J不要超过物理核心数的80%云环境一定要设置HDF5_USE_FILE_LOCKINGFALSE输入数据路径建议用符号链接到EBS卷我在配置南京大学超算中心的环境时发现config_compilers.xml的Intel编译器参数需要调整FFLAGS base-qno-opt-dynamic-align -convert big_endian -assume byterecl/base append DEBUGFALSE-O3 -ip -no-prec-div/append /FFLAGS5. 完整测试流程验证环境搭建完成后建议用以下测试案例验证./create_newcase --case F2000climo --compset F2000climo --res f19_g17 cd F2000climo ./case.setup ./case.build ./case.submit常见问题排查构建失败检查CaseStatus文件通常是路径权限问题运行崩溃查看cesm.log中的MPI错误代码结果异常验证atm.log中的物理参数是否合理我在阿里云上测试时遇到一个典型问题案例能运行但结果全零。最后发现是DIN_LOC_ROOT路径没有组读写权限用chmod -R grX解决。6. 性能调优实战技巧经过50次测试总结出这些加速技巧在env_run.xml中设置entry idNTASKS value32 !-- 等于物理核心数 -- entry idNTHRDS value1 !-- 超线程反而降速 --添加编译优化参数export FFLAGS-O3 -xHost -ipo使用tmpfs加速I/Oexport TMPDIR/dev/shm实测在128核服务器上这些优化能使1年模拟时间从6.2小时降至4.8小时。但要注意-O3优化可能导致某些物理过程计算异常需要对比测试结果。