- 人工智能
- 大模型
- 深度学习
- 科学计算
- 科研
【免费下载链接】earth2studio
Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows.
Earth2Studio是 NVIDIA 开源的深度学习框架,用于构建和部署 AI 天气/气候工作流。本文带你从零开始掌握它的模型评估体系:看懂CRPS与RMSE两大核心指标,并学会用自带的Scorecard评分配方对 AI 天气模型做完整、可复现的技能评估——即使你是第一次接触气象模型验证,也能照着一步步完成。
1️⃣ 为什么需要一套标准的 AI 天气模型评估方法?
AI 天气模型(如 FCN、GraphCast、Aurora 等)跑出一个预报结果后,真正的问题来了:它预报得准不准?比传统数值模式强在哪?预报 3 天和 14 天分别有多可靠?
手动写脚本对比预报和再分析数据费时费力,而且不同人用的网格、权重、区域口径不一致,结果没法横向比较。Earth2Studio 的解法是把评估变成可配置、可复现的流水线:
- 📦统计指标库
earth2studio/statistics/:CRPS、RMSE、LSD、ACC 等现成指标,统一接口,支持加权与分布式计算 - 🧪评估配方(Eval Recipe)
recipes/eval/:预下载数据 → 分布式推理 → 评分 → 生成报告的完整流程 - 📊Scorecard 评分卡
recipes/eval/scorecard/:所有模型跑同一套标准 campaign,保证横向可比
核心思路:同一个模型、同一套初始条件、同一套验证数据(ERA5 再分析)、同一套指标,才能公平对比技能。
2️⃣ 指标全家福:CRPS、RMSE 和其他常用评分
Earth2Studio 在 earth2studio/statistics/init.py 中统一导出了全部指标,每个指标都是独立的源文件,可以按需取用:
| 指标 | 类型 | 方向 | 源码文件 |
|---|---|---|---|
| RMSE/MAE | 误差类 | 越低越好 | rmse.py |
| CRPS(连续排序概率评分) | 概率/集合 | 越低越好 | crps.py |
| ACC(异常相关系数) | 确定性技能 | 越高越好 | acc.py |
| LSD(对数谱距离) | 功率谱误差 | 越低越好 | lsd.py |
| Energy Score | 概率/集合 | 越低越好 | energy_score.py |
| Brier Score | 二值概率 | 越低越好 | brier.py |
| Rank Histogram(排序直方图) | 集合可靠性 | 越平越好 | rank.py |
| lat_weight(余弦纬度权重) | 加权工具 | — | weights.py |
官方 Scorecard 页面默认把rmse、mae、lsd、ensemble_mean_mse、crps、ensemble_variance视为"越低越好",acc为"越高越好"(见 docs/scorecard/config/default.md)。看图表前先确认指标方向,是新手最常踩的坑。
3️⃣ CRPS 详解:衡量概率预报质量的黄金指标
什么是 CRPS?
CRPS(Continuous Ranked Probability Score,连续排序概率评分)用来回答一个问题:"模型给出的一整套可能性(集合预报),离真实情况有多近?"它的定义是对预报的经验累积分布函数 F(x) 与实际观测指示函数做积分:
CRPS = ∫ [F(x) - 1(x - y)]² dx其中 F 是集合成员构成的经验 CDF,y 是真实观测。直觉上:
- 集合越集中且越覆盖观测值,CRPS 越小
- 集合均值很准但离散度(spread)严重偏大或偏小,CRPS 都会变差
- 因此 CRPS 同时惩罚偏差、欠离散和过离散,比单纯看集合均值的 RMSE 更严格
Earth2Studio 的 CRPS 实现要点
实现位于 earth2studio/statistics/crps.py,使用"精确 CDF 法"(对排序后的成员做分段积分,见 crps.py 中的_crps_from_empirical_cdf),关键参数:
| 参数 | 作用 |
|---|---|
ensemble_dimension | 集合成员所在维度名(如ensemble),CRPS 沿它归约 |
reduction_dimensions | 额外要平均掉的维度(如lat、lon),可配余弦纬度权重 |
fair | 设为True时计算"公平(无偏)CRPS",消除成员数带来的系统性偏差,跨模型对比时建议开启 |
crps_metric = crps( ensemble_dimension="ensemble", reduction_dimensions=["lat", "lon"], weights=lat_weight, # 余弦纬度加权,避免高纬度被过度放大 )💡小贴士:Scorecard 在线评分产出的
crps__{变量}就是公平 CRPS(fair CRPS),不同集合大小的模型之间可以直接比较。
4️⃣ RMSE 详解:最直观的误差度量
RMSE(均方根误差)衡量预报场与真实场逐格点偏差的大小,是确定性预报最经典的技能指标。Earth2Studio 的 rmse.py 提供了几个很实用的开关:
| 参数 | 作用 |
|---|---|
reduction_dimensions | 沿哪些维度归约(如["lat", "lon"]得全球 RMSE) |
weights | 纬度加权张量,配合纬度余弦权重使用 |
batch_update | 数据以批次流式到达时,输出累积 RMSE(内部对运行 MSE 开方) |
ensemble_dimension | 指定后先取集合均值再算 RMSE,用于评价集合平均预报 |
两个使用细节值得注意(来自 recipes/eval/README.md):
- 配
reduction_dimensions: [lat, lon]得到的是每个 (初始时刻, 预报时次) 一个 RMSE 值;要得到跨所有初始时刻的聚合 RMSE,需要sqrt(mean(rmse²)),报告的report.py会自动处理这一步。 - 同文件里还有
mae(平均绝对误差)、skill_spread、spread_skill_ratio(离散度-技巧比),常与 RMSE 搭配诊断集合预报的校准状况。
5️⃣ Scorecard 评分卡:所有模型同一套考卷
统一 campaign 是什么?
Scorecard(recipes/eval/scorecard/README.md)的核心设计:每个参评模型都跑完全相同的标准战役——
- ⏱️48 个初始条件(IC):全年每月 4 个,分别在 00/06/12/18 UTC 时次
- 📅14 天预报时效(56 步 × 6 小时)
- 🌍ERA5 再分析验证:通过 ARCO_ERA5 数据源取"真值"
- 🗺️全球 + 区域分割:区域定义统一在 cfg/regions/standard.yaml
- 📉两条基线对比:persistence(持续性预报)与 climatology(气候态)
同一考卷下,分数才能横向比较。已内置的模型 campaign 配置包括 FCN3、FCN、Aurora、Aurora 1.5 Ensemble、Atlas CRPS、GraphCast、FengWu、Fuxi、Pangu、DLWP 等,都在 recipes/eval/scorecard/cfg/campaign/ 目录下,每个文件自包含、开箱即用。
在线评分:把 12 TB 压到几百 MB
大规模 campaign 的最大瓶颈是存储:50 个成员 × 730 个 IC × 14 天的原始预报场可达 ~170 TB,而最终分数只有 ~20 MB。Earth2Studio 的在线评分(scoring.mode: online)在推理循环内直接把每帧预报压成"充分统计量"写入stats.zarr,再从中导出scores.zarr,从不落盘原始预报(recipes/eval/README.md)。
以 Atlas CRPS 的 campaign 为例(atlas_crps_2025_scorecard.yaml):
scoring: mode: online lat_weights: true # 余弦纬度加权 online: members_per_rank: 2 # CRPS 成员间交换留在节点内 NVLink mae: true lsd: true在线评分自动产出的指标包括:mse__{变量}、ensemble_mean_mse__{变量}(集合均值误差)、ensemble_variance__{变量}(集合离散度²)、crps__{变量}(公平 CRPS)、rank_reliability__{变量}(排序可靠性)、bias__{变量}与corr__{变量}(recipes/eval/README.md)。
6️⃣ 一键跑起来:Scorecard 三步走
在装有 GPU 和配方环境的节点上,整个流程只需三条命令(recipes/eval/scorecard/README.md):
# 1. 运行 campaign:predownload -> infer(在线评分) -> score/prune python run_scorecard.py fcn3_2025_scorecard # 2. 导出分数 JSON python export_scores.py fcn3 --docs # 3. 重新生成文档评分页 python ../../../docs/generate_scorecard.py每个阶段都支持resume: true断点续跑,大 campaign 可以跨多次队列分配逐步推进。如果你想自己搭一套 campaign(而不是用 Scorecard 的模板),底层入口是 eval 配方的四件套(recipes/eval/):
python predownload.py campaign=my_campaign # 预下载 IC 与验证数据 python main.py campaign=my_campaign # 分布式推理(torchrun 扩展) python score.py campaign=my_campaign # 评分(离线或在线模式) python report.py campaign=my_campaign # 生成 markdown 报告campaign 配置只需覆盖差异项,三层配置结构为:基础层cfg/default.yaml+ 模型层cfg/model/*.yaml+ 战役层cfg/campaign/*.yaml(recipes/eval/README.md)。
报告长什么样?
report.py生成一个自包含的report/目录:report.md主报告 +figures/曲线图 +tables/scores_summary.csv(recipes/eval/README.md)。可配置的章节类型包括:
| 章节 | 内容 |
|---|---|
summary_table | 关键预报时次(1/3/5/7/10/14 天)× 关键变量的分数总表 |
lead_time_curves | 指标随预报时次变化的技能曲线,可按季节(DJF/MAM/JJA/SON)分组 |
ic_heatmap | 时间 × 预报时次的 RMSE/CRPS 热力图,快速定位"哪次初始条件预报差" |
spread_skill | 离散度-技巧比诊断(基于ensemble_mean_mse+ensemble_variance) |
visualization | 预报场 vs 真实场地图(需保留原始预报数据) |
例如 Atlas CRPS 的报告配置在 atlas_crps_2025_scorecard.yaml 的report段:汇总表选t2m, z500, u10m, t850, msl五个变量、六个预报时次,并附带季节分解与 IC 热力图。
7️⃣ 进阶技巧:区域评分与事件评分
区域评分:在scoring.regions中声明任意经纬度方框即可在全球评分之外叠加区域分,例如(recipes/eval/README.md):
scoring: regions: global: null # 全球 europe: {lat: [35, 75], lon: [-12.5, 42.5]} # 欧洲框 extra_tropics: # 多个框取并集 - {lat: [20, 90]} - {lat: [-90, -20]}事件评分:想专门考察模型在某次极端天气(如某次风暴)中的表现,用scoring.events把"时间窗口 + 区域"绑定为一个命名事件即可。Scorecard 自带模板:StormCast 的 2025 严重对流事件 campaign(stormcast_2025_events.yaml),每个事件导出独立的技能曲线并与全年曲线对照。
⚠️注意:离线评分可以事后补区域(重跑
score.py即可);但在线评分的区域掩码是烧进累积权重里的,区域必须在运行前确定。
8️⃣ 结果解读避坑指南
结合 Scorecard 的标准考卷,给你一份新手解读清单:
- 先认方向:RMSE、MAE、LSD、CRPS、
ensemble_variance越低越好;ACC 越高越好。混淆方向会得出完全相反的结论。 - 看技能曲线而非单点:
lead_time_curves里曲线与 persistence / climatology 基线的差距,才是模型"真实增值"。14 天外多数模型都会逼近气候态。 - CRPS 要看公平版本:不同模型集合成员数不同(如 16 vs 50),用
fair: True(公平 CRPS)消除成员数偏差后才可比。 - 诊断集合校准:
spread_skill_ratio接近 1 说明离散度与误差匹配;明显 <1 说明集合"过于自信",>1 说明过于发散。配合rank_reliability(排序可靠性)一起看。 - 区域分 ≠ 全球分:热带、中纬度的技能常常差异很大,
regions分割能暴露全球平均数掩盖的短板;LSD 是谱指标,仅在网格全框下有值(区域框内为 NaN,属正常)。 - 分数全为 NaN 时:先检查 IC 日期是否落在数据源覆盖窗口内——这是评估配方文档特别强调的第一排查项(recipes/eval/README.md)。
9️⃣ 小结
| 你想做的事 | 去哪里 |
|---|---|
| 理解单个指标的实现 | earth2studio/statistics/(crps.py、rmse.py、acc.py…) |
| 指标接口与自定义指标 | docs/userguide/components/statistics.md |
| 自己搭评估 campaign | recipes/eval/README.md(predownload → main → score → report) |
| 标准横向对比 | recipes/eval/scorecard/README.md + cfg/campaign/ 各模型配置 |
| 区域/事件/在线评分细节 | recipes/eval/README.md 的 Scoring 章节 |
一句话总结:用 RMSE 看确定性误差,用 CRPS 看概率预报质量,用 Scorecard 的统一 campaign 保证结论可复现、可对比——这就是 Earth2Studio 评估 AI 天气模型的完整方法论。现在,挑一个cfg/campaign/里的配置文件,跑一次run_scorecard.py吧 🚀
- 人工智能
- 大模型
- 深度学习
- 科学计算
- 科研
【免费下载链接】earth2studio
Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows.
相关推荐
LXDUI核心功能详解:容器、镜像与存储池一站式管理
LXDUI核心功能详解:容器、镜像与存储池一站式管理 LXDUI是一款专为Linux原生容器技术LXD/LXC打造的Web管理界面,提供直观高效的容器生命周期管
模型评估与优化:如何提升Udacity自动驾驶系统的RMSE指标
模型评估与优化:如何提升Udacity自动驾驶系统的RMSE指标 在Udacity开源自动驾驶项目中,RMSE(均方根误差)是衡量转向角度预测准确性的关键指标。
示例工程自动驾驶mlpack模型评估指标:准确率、召回率、F1分数与RMSE
mlpack模型评估指标:准确率、召回率、F1分数与RMSE 在机器学习项目开发过程中,模型评估是至关重要的一环。mlpack作为一个高效的C++机器学习库,提
人工智能机器学习深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考