数据管道揭秘:Snakemake如何批量调度5个CMIP6数据集的下载与重网格化

发布时间:2026/8/16 20:28:03
数据管道揭秘:Snakemake如何批量调度5个CMIP6数据集的下载与重网格化 数据管道揭秘Snakemake如何批量调度5个CMIP6数据集的下载与重网格化【免费下载链接】ClimaXFoundation model for weather climate项目地址: https://gitcode.com/gh_mirrors/cli/ClimaX想用气候大模型做研究第一步往往不是跑模型而是和数据死磕几十个CMIP6数据集、跨越165年的逐6小时文件、动辄上百GB的体积……手动一个个下载再重网格化几乎是不可能完成的任务。今天这篇文章就带新手和普通用户走进ClimaX开源项目背后的CMIP6数据下载与重网格化数据管道看看它是如何用Snakemake工作流引擎一键批量调度5个CMIP6模式数据集AWI-ESM、CMCC、HAMMOZ、MPI-ESM、TaiESM1完成从原始NetCDF下载到统一分辨率重网格化的全流程。为什么要做CMIP6数据预处理管道CMIP6第六次耦合模式比较计划是全球气候研究的基础数据源但它有个老毛病每个模式的网格分辨率、经纬度定义、变量命名都不一样。AWI-ESM-1-1-LR 的 2 米气温叫tasERA5 里叫t2mCMCC-CM2-HR4 的气温叫taClimaX 里叫tMPI-ESM1-2-HR 的位势高度叫zg重网格化后要换算成z并乘上重力加速度。如果直接把这些五花八门的数据喂给模型训练必然失败。所以需要一条可复现的数据预处理管道先按模式分别下载再统一重网格化到同一分辨率如 1.40625°最后重命名变量对齐 ERA5 规范。ClimaX 项目把这条管道做成了声明式的 Snakemake 工作流配置即数据一条命令跑完全部 5 个数据集。5个CMIP6数据集一份配置一个模式 在snakemake_configs/目录下每个模式都有独立的文件夹里面是一个Snakefile加若干份 YAML 配置。先看配置长什么样——以 MPI-ESM 的位势高度配置 为例datadir: /data/CMIP6/MPI-ESM server_prefix: http://esgf-data1.llnl.gov/thredds/fileServer/css03_data/CMIP6/CMIP name: geopotential cmip_name: zg era_name: z output_type: 6hrPlevPt run: r1i1p1f1 version: v20190815 res: - 1.40625这份配置就是数据管道的大脑cmip_name告诉管道去 ESGF 服务器上找哪个变量era_name告诉管道重网格化后要改成什么名字res指定目标分辨率。5 个数据集AWI-ESM、CMCC、HAMMOZ、MPI-ESM、TaiESM1各自维护自己的 YAML互不干扰想加一个新模式只需要复制一份配置即可。一条Snakefile调度三段式流水线 ⚙️Snakemake 的核心理念是规则即依赖。打开任意模式的 Snakefile你会发现整条 CMIP6 数据管道其实只有 4 条规则环环相扣第一步download 规则——wget 批量拉取原始文件 rule download: output: {dataset}/raw/{name}/{name}_{year_str}_raw.nc shell: wget https://esgf-data1.llnl.gov/.../{config[cmip_name]}_..._{wildcards.year_str}.nc -O {wildcards.dataset}/raw/{config[name]}/{config[name]}_{wildcards.year_str}_raw.nc它用wget从 ESGF 服务器下载原始 NetCDF并按{dataset}/raw/{name}/的目录结构落盘。注意开头的year_strings生成了 1850~2015 年共 165 年的时间分段也就是说每条规则会自动展开成上百个并行下载任务Snakemake 帮你安排得明明白白。第二步regrid 规则——调用重网格化脚本 rule regrid: input: {dataset}/raw/{name}/{name}_{year_str}_raw.nc output: {dataset}/{res}deg/{name}/{name}_{year_str}_{res}deg.nc.tmp shell: python ../../src/data_preprocessing/regrid.py \ --input_fns {input} --output_dir {wildcards.dataset}/{wildcards.res}deg/{wildcards.name} \ --ddeg_out {wildcards.res} --cmip 1 \ --rename {config[cmip_name]} {config[era_name]} --file_ending nc.tmp下载完成会自动触发重网格化。这一步调用的核心脚本是 src/data_preprocessing/regrid.py它用xarray读取 NetCDF用xesmf做双线性插值把数据插值到统一经纬网格同时完成两件事——丢掉 CMIP6 特有的lat_bnds、lon_bnds等边界坐标以及把cmip_name重命名为era_name比如tas→t2m。regridder xe.Regridder(ds_in, grid_out, method, periodicTrue, reuse_weightsreuse_weights) ds_out regridder(ds_in, keep_attrsTrue).astype(float32)值得一提的细节如果变量是位势高度zg脚本会乘上 9.807 换算成位势米z如果是太阳辐射rsdt则会换算成tisr并做时间重采样。这些气候学上的小心思都藏在 regrid 脚本里对新手非常友好。第三步delete 规则——临时文件转正 ✅重网格化先输出.nc.tmp临时文件等该年份所有分辨率都处理完delete规则优先级 100统一把它们mv成最终的*_deg.nc正式文件避免读到写了一半的脏数据。第四步all 规则——最终产物汇总 rule all: input: expand({datadir}/{res}deg/{name}/{name}_{year_str}_{res}deg.nc, datadirconfig[datadir], resconfig[res], nameconfig[name], year_stryear_strings)all规则定义了整条数据管道的终点只有全部 165 年的重网格化文件都齐了Snakemake 才认为任务成功。这就是声明式工作流的好处——你只管描述目标Snakemake 自动反推需要执行哪些下载和重网格化任务。批量调度5个数据集一条命令全搞定 最妙的是5 个模式的配置除了datadir、server_prefix、变量映射不同Snakefile 逻辑完全一致。这意味着你只需要分别在每个模式目录下执行snakemake --configfile config_2m_temperature.yml -j 8Snakemake 就会自动解析 YAML 配置按规则依赖展开成数百个下载与重网格化任务并用-j指定并行度。想要 5 个数据集全部处理写一个简单的循环或用一个总 Snakefile 聚合即可真正的一次配置全家受益。数据管道小结新手能学到什么环节工具作用批量下载wget Snakefile 通配符按年份自动展开 165 年任务重网格化regrid.py xesmf双线性插值到 1.40625° 统一网格变量对齐--rename cmip_name era_nametas→t2m、ta→t、zg→z任务调度Snakemake 规则依赖自动编排下载→重网格化→落盘对新手来说这条数据管道最大的价值在于可复现性只要保留snakemake_configs/下的 YAML 和 Snakefile任何人在任何机器上都能重建一模一样的 CMIP6 训练数据。如果你正准备用 ClimaX 做气候预测研究不妨先从读懂这份 Snakemake 数据管道配置 开始把数据地基打牢模型训练才能事半功倍。快去试试吧【免费下载链接】ClimaXFoundation model for weather climate项目地址: https://gitcode.com/gh_mirrors/cli/ClimaX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考