AI气象大模型:从数值预报到GraphCast与盘古
天气预报大概是人类最古老的"科学计算"需求。过去半个世纪,它的答案一直是数值天气预报(NWP):把大气运动写成偏微分方程,在超级计算机上暴力求解。但从 2022 年开始,GraphCast、盘古、FourCastNet 这批 AI 模型接连登上 Nature、Science,中期预报精度第一次系统性地超过了欧洲中期天气预报中心(ECMWF)的金标准 IFS,而且推理只要一块 GPU 一分钟。气象,成了 AI for Science 最出圈的样板间。
数值天气预报的瓶颈
NWP 的基本流程是:收集全球观测数据(卫星、探空气球、雷达、浮标),通过数据同化系统把观测"揉"进模式初值,然后求解大气动力学方程组,向前积分得到未来 10-15 天的预报。
这条链路有两个结构性瓶颈。第一是算力:IFS 在 0.1° 分辨率下跑一次全球预报,要动用数千个 CPU 核心,一次集合预报(几十条路径)耗资巨大。第二是次网格参数化:云、降水、湍流这些尺度小于网格的过程没法直接求解,只能用经验公式近似,这是系统性误差的主要来源。
还有第三个隐性成本:NWP 系统几十年积累的 Fortran 代码极其复杂,想改一个物理过程动辄以年计。这给了数据驱动方法切入的窗口。
AI 气象模型的共同范式
各家 AI 模型做法不同,但范式高度一致:把气象预报建模成"在规则网格上的自回归预测"。输入是当前(有时加 6 小时前)的大气状态——几十个气压层上的温度、湿度、风速、位势,加上地面变量;模型直接预测 6 小时后的状态;然后滚动迭代,得到 10 天预报。
训练数据几乎都来自 ERA5 再分析数据集——ECMWF 用数据同化技术把 40 年历史观测和模式结果融合成的"最佳估计"大气状态,约 0.25° 分辨率,总量上百 TB。换句话说,AI 模型是在模仿 NWP 的历史答案,只是学得快、算得快。
GraphCast:图神经网络建模球面大气
DeepMind 的 GraphCast 是这条路上最有代表性的工作,发表在 Science 上。它的核心结构是 GNN 版的 encode-process-decode:
- 编码器:把 0.25° 规则网格(约 100 万个网格点)映射到一个多重网格的二十面体图上,分辨率逐级降低;
- 处理器:16 层消息传递网络(Message Passing GNN)在图上做信息交换,长距离信息靠粗网格快速传播;
- 解码器:把图上的表征映射回经纬网格,输出下一时刻状态。
图结构的好处是自适应分辨率:赤道上网格密、极区不畸变,还能用少量远程边捕捉罗斯贝波这类行星尺度波动。GraphCast 在 1380 个验证变量上对 ECMWF HRES 的胜率超过 90%,单卡 TPU 推理 10 天预报不到 1 分钟。它还在热带气旋路径、极端高温、大气河流预测上表现亮眼。
盘古气象:3D Transformer 的中国方案
华为云的盘古气象大模型走了另一条路:不用图网络,而是把 ViT 改造后用于气象数据,称为 3D Earth-Specific Transformer(3DEST)。
它有两个关键设计。一是把气压层当作第三维,用 3D 窗口注意力处理(纬度×经度×气压层)的体数据,符合大气的物理结构;二是设计了"层次化时域聚合"策略——训练 1h、3h、6h、24h 四个不同步长的模型,预报时按贪心策略组合调用,避免小步长滚动导致的误差快速累积。
盘古在再分析数据上的精度同样全面超过 IFS,并且推理速度快一万倍以上。它的输出产品已经接入中国气象局系统,台风"玛娃"路径预报的表现曾引发行业广泛讨论。
动手试试:跑通 GraphCast 推理
DeepMind 开源了 GraphCast 的 JAX 实现,配合 ECMWF 开放的 ERA5 数据即可复现:
from graphcast import graphcast, checkpoint, data_utils import dataclasses, haiku as hk import jax, numpy as np, xarray # 1. 加载 ERA5 数据并构造输入 (batch, time=2, lat, lon, level) dataset = xarray.open_dataset("era5_sample.nc") inputs, targets, forcings = data_utils.extract_inputs_targets_forcings( dataset, target_lead_times=slice("6h", "6h"), **dataclasses.asdict(graphcast.TASK) ) # 2. 加载预训练参数 (0.25度, 37层气压) params = checkpoint.load("graphcast_params.npz", graphcast.CheckPoint) state = {} # 3. 滚动自回归推理 40 步 = 10 天 @hk.transform_with_state def rollout(inputs, targets, forcings): model = graphcast.GraphCast(graphcast.ModelConfig(), graphcast.TaskConfig()) return model(inputs, targets_template=targets, forcings=forcings) forecasts, state = rollout.apply( params, state, jax.random.PRNGKey(0), inputs, targets, forcings ) print(forecasts.dims) # 输出 10 天逐 6 小时预报场完整跑通需要几十 GB 内存和 ERA5 下载权限;社区也有 FourCastNet、盘古的 PyTorch 复现版本,显存要求更低,适合 24GB 消费级显卡做实验。
主流 AI 气象模型对比
| 维度 | ECMWF IFS | GraphCast | 盘古 | Fou
