全球天气预报实战:用ClimaX微调出72小时ERA5预报模型
全球天气预报实战:用ClimaX微调出72小时ERA5预报模型
【免费下载链接】ClimaXFoundation model for weather & climate项目地址: https://gitcode.com/gh_mirrors/cli/ClimaX
想做全球天气预报,却觉得深度学习门槛太高?本文手把手带你完成一次真实的ClimaX 微调实战:从零准备 ERA5 数据,到训练出可用的 72 小时全球天气预报模型,全程只需一条条清晰的命令。ClimaX是微软开源的气候与天气基础模型,能像大语言模型预训练后微调一样,只需少量标注数据,就能在气象预报任务上快速收敛。这篇文章不堆砌代码,只讲清楚"每一步该做什么、为什么这么做",让你照着做就能跑通自己的全球天气预报流程。
为什么选 ClimaX 做全球天气预报?
传统数值天气预报依赖超级计算机求解大气方程,而 ClimaX 走的是另一条路:它把气象变量当作"token",用 Transformer 架构在海量 CMIP6 气候模拟数据上预训练,再微调到 ERA5 再分析数据上做预报。它的核心优势有三个:
- 预训练即插即用:官方提供 5.625° 和 1.40625° 两套预训练权重,微调时不用从零训练,省下大量算力;
- 变量自由组合:输入输出变量可随意指定,比如只预测
z_500(500hPa 位势高度)、t_850(850hPa 温度)和t2m(2 米气温); - 预报时长可调:通过
predict_range参数一键切换 6 小时、72 小时甚至更长的预报窗口。
模型主体定义在 src/climax/arch.py 的ClimaX类中,采用 ViT 骨干加变量嵌入(variable embedding)与变量聚合(cross-attention)结构,这正是它能把多变量天气场揉进一个模型的关键。
第一步:克隆仓库并安装运行环境
全球天气预报实战的第一步,是把项目拉下来并装好依赖。安装方式有 conda 和 Docker 两种,新手推荐 conda:
git clone https://gitcode.com/gh_mirrors/cli/ClimaX cd ClimaX conda env create --file docker/environment.yml conda activate climaX pip install -e .如果机器上有 GPU 且偏好隔离环境,也可以走 Docker 路线,参考 docker/Dockerfile 构建镜像。安装完成后,整个实战会用到三个关键目录:
- configs/global_forecast_climax.yaml:微调配置,训练参数都在这里;
- src/data_preprocessing/nc2np_equally_era5.py:ERA5 数据预处理脚本;
- src/climax/global_forecast/train.py:全球预报训练入口。
第二步:ERA5 数据准备,把 NetCDF 转成模型能吃的格式
ClimaX 微调使用的 ERA5 数据来自 WeatherBench 公开数据集,下载后目录里是2m_temperature、geopotential、u_component_of_wind等按变量分好的 NetCDF 文件。模型不能直接读取这种原始格式,需要先用预处理脚本转成 numpy 小文件并计算统计量:
python src/data_preprocessing/nc2np_equally_era5.py \ --root_dir /mnt/data/5.625deg \ --save_dir /mnt/data/5.625deg_npz \ --start_train_year 1979 --start_val_year 2016 \ --start_test_year 2017 --end_year 2019 --num_shards 8处理完成后,save_dir下会生成train、val、test三个分区,以及normalize_mean.npz、normalize_std.npz、lat.npy、lon.npy等文件。其中归一化统计量会被 src/climax/global_forecast/datamodule.py 里的GlobalForecastDataModule自动加载,用于训练时的标准化和评估时的反标准化,这一步千万不能跳过。
第三步:72小时预报微调,核心训练命令逐条拆解
数据就绪后,就到了本次全球天气预报实战的重头戏——用预训练权重微调出 72 小时预报模型。训练入口是train.py,它基于 PyTorch Lightning CLI 封装,所有参数都可以通过命令行覆盖。下面是官方推荐的 8 卡微调命令:
python src/climax/global_forecast/train.py --config configs/global_forecast_climax.yaml \ --trainer.strategy=ddp --trainer.devices=8 \ --trainer.max_epochs=50 \ --data.root_dir=/mnt/data/5.625deg_npz \ --data.predict_range=72 --data.out_variables=['z_500','t_850','t2m'] \ --data.batch_size=16 \ --model.pretrained_path='https://huggingface.co/tungnd/climax/resolve/main/5.625deg.ckpt' \ --model.lr=5e-7 --model.beta_1="0.9" --model.beta_2="0.99" \ --model.weight_decay=1e-5这条命令里的关键参数怎么理解?
--data.predict_range=72:72小时预报窗口就由它决定,配合hrs_each_step=1(每小时一个步长),模型会学到从当前时刻起 72 小时后的天气状态;--data.out_variables=['z_500','t_850','t2m']:只预测三个目标变量,训练速度更快、显存占用更小,也便于后续可视化验证;--model.pretrained_path=...:加载 5.625° 分辨率下的 CMIP6 预训练权重,微调的关键就在这里——不加载它就是从零训练,效果和收敛速度会差很多;--model.lr=5e-7:微调时学习率要远小于预训练(5e-4),避免破坏已经学好的通用天气表征。
如果没有 8 张卡,把devices改成 1 或 2 也能跑,只是单卡训练时间会更长。训练过程中,TensorBoard 日志会记录val/w_rmse等指标,配置里的ModelCheckpoint回调会自动保存最优权重。
第四步:看结果,RMSE 和 ACC 怎么读?
训练结束后,train.py会自动加载最优 checkpoint 在测试集上评估,输出三个关键指标:
- RMSE(均方根误差):预报值与 ERA5 真值的偏差,越小越好;
- ACC(距平相关系数):衡量空间分布与真值的相关程度,越接近 1 越好;
- wRMSE(纬度加权 RMSE):考虑了高纬度网格面积权重后的综合误差,配置里的早停(EarlyStopping)就是监控它。
评估逻辑在 src/climax/global_forecast/module.py 的GlobalForecastModule中,实际用到的指标函数来自 src/climax/utils/metrics.py。想要更直观地感受模型能力,可以看看官方仓库里 6 小时预报的验证动图:
每张图从左到右依次是初始场、真值、预报和偏差,偏差图上颜色越浅代表预报越准。微调出 72 小时模型后,你也可以用同样的方式渲染不同预报时长的对比图。
常见问题与调优技巧
- 显存不够怎么办?调小
batch_size,或减少out_variables的变量数量;配置里默认的 46 个输入变量是固定的,但输出变量可以只留 1 个; - 训练不收敛?检查
pretrained_path是否正确加载(启动日志会打印加载信息),并确认lr是否在 1e-6 量级——微调阶段学习率过大是常见翻车点; - 想预报更长时间?把
predict_range改成 168(一周)甚至更大即可,但要注意更长预报窗口对数据量和训练轮数的要求也更高; - 单卡也想跑?删掉
--trainer.strategy=ddp,把devices设为 1,代码无需任何改动。
结语
到这里,你已经完成了从 ERA5 数据准备到ClimaX 72小时全球天气预报模型微调的全流程。整个过程的核心就三步:预处理数据、指定预训练权重、调好predict_range和lr。下一步你可以尝试更换输出变量、调整预报时长,或者把训练好的模型接到 src/climax/regional_forecast 做区域降尺度预报,探索更多全球天气预报的应用场景。动手跑一次,你会发现自己离"用 AI 做天气预报"只差一条命令的距离。
【免费下载链接】ClimaXFoundation model for weather & climate项目地址: https://gitcode.com/gh_mirrors/cli/ClimaX
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
