当前位置: 首页 > news >正文

数据管道揭秘: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 米气温叫tas,ERA5 里叫t2m
  • CMCC-CM2-HR4 的气温叫ta,ClimaX 里叫t
  • MPI-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_bndslon_bnds等边界坐标,以及把cmip_name重命名为era_name(比如tast2m)。

regridder = xe.Regridder(ds_in, grid_out, method, periodic=True, reuse_weights=reuse_weights) ds_out = regridder(ds_in, keep_attrs=True).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", datadir=config['datadir'], res=config['res'], name=config['name'], year_str=year_strings)

all规则定义了整条数据管道的"终点":只有全部 165 年的重网格化文件都齐了,Snakemake 才认为任务成功。这就是声明式工作流的好处——你只管描述目标,Snakemake 自动反推需要执行哪些下载和重网格化任务

批量调度5个数据集:一条命令全搞定 🚀

最妙的是,5 个模式的配置除了datadirserver_prefix、变量映射不同,Snakefile 逻辑完全一致。这意味着你只需要分别在每个模式目录下执行:

snakemake --configfile config_2m_temperature.yml -j 8

Snakemake 就会自动解析 YAML 配置,按规则依赖展开成数百个下载与重网格化任务,并用-j指定并行度。想要 5 个数据集全部处理?写一个简单的循环或用一个总 Snakefile 聚合即可,真正的"一次配置,全家受益"。

数据管道小结:新手能学到什么?💡

环节工具作用
批量下载wget+ Snakefile 通配符按年份自动展开 165 年任务
重网格化regrid.py +xesmf双线性插值到 1.40625° 统一网格
变量对齐--rename cmip_name era_nametas→t2mta→tzg→z
任务调度Snakemake 规则依赖自动编排下载→重网格化→落盘

对新手来说,这条数据管道最大的价值在于可复现性:只要保留snakemake_configs/下的 YAML 和 Snakefile,任何人在任何机器上都能重建一模一样的 CMIP6 训练数据。如果你正准备用 ClimaX 做气候预测研究,不妨先从读懂这份 Snakemake 数据管道配置 开始,把数据地基打牢,模型训练才能事半功倍。快去试试吧!🔥

【免费下载链接】ClimaXFoundation model for weather & climate项目地址: https://gitcode.com/gh_mirrors/cli/ClimaX

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1406860/

相关文章:

  • 2026年8月综合盘点 衢州涂料门店选购全指南 - 滚动商讯
  • 2026年国内卫浴仓储店招商 高性价比品牌推荐 - 产品推荐官
  • IntelliJ IDEA与Maven依赖本地优先配置:提升构建速度与稳定性
  • MacOS系统状态查询指令全解析:从进程监控到性能调优
  • 终极指南:Accuracy与MRA双指标如何量化大模型的空间理解力?VSI-Bench评测体系全解析
  • 中转接入测评:Claude 啃难题,小模型打杂,模型路由怎么选
  • 拖拽十分钟,胜过手写一下午:Tkinter可视化布局助手到底香在哪?
  • Tullio.jl高级技巧:卷积、广播和复杂张量运算实现
  • 四会市锡及锡合金成分分析+金属材料检测+本地实验室+业务指南 - 第三方检测机构
  • SSH免密登录故障排查:从PubkeyAuthentication配置到完整解决方案
  • 力扣刷题#34-0105-从前序与中序遍历序列构造二叉树
  • 腾讯云OpenClaw部署AI模型与小红书Skill接入实战指南
  • 一个运维老哥用 AI 造了个完整产品:写代码一文不值,难的是审美
  • 2026年重庆除甲醛公司哪家靠谱?看这三个标准就够了 - 滚动商讯
  • pandastable统计建模功能:回归分析与数据探索内建工具详解
  • Dagger Reflect调试技巧:5个实用方法快速定位依赖注入问题
  • eNSP启动卡在#号?网络模拟器环境配置与故障排查全解析
  • 零成本部署 Fudoki:GitHub Pages 发布你的日语学习工具的完整指南
  • 从Linux命令到Hadoop集群搭建:大数据工程师的底层技能实战
  • VulFi 数据管理指南:结果持久化、多选批量操作与 JSON/CSV 导入导出
  • react-avatar 首字母头像生成指南:1 行代码把用户名变成个性头像
  • 2026/8/16
  • 2026年国内RCO催化燃烧厂家 质量靠谱评价优 精选推荐参考 - 产品推荐官
  • Sublime Text 4 高效开发环境配置指南:从安装到插件与性能调优
  • Mac配置VSCode SSH远程开发环境:从原理到实战
  • 2026年重庆除甲醛生产厂家哪家专业?口碑好才是硬道理 - 滚动商讯
  • mesh-llm 故障排查手册:网络、GPU 与拆分失败的 12 个常见问题
  • 奇安信天擎V10.0卸载全攻略:从密码绕过到深度清理
  • 使用 MobaXterm 工具连接 Linux 服务器的操作步骤
  • 认识 LangChain.dart:为什么 Flutter 开发者需要它?Dart 生态首个 LLM 应用框架全解析