版本与源码阅读路线
锁定什么版本
截至 2026-10-20,GitHub 最新正式发布与 PyPI 版本均为 0.19.0。GitHub 发布时刻为 2026-09-30 22:08 UTC,即北京时间 10 月 1 日 06:08。标签对应提交为 1a6e3669db0b04c1b42253cf0e631ed1ee8817ea。正式发布、PyPI
用户常看的 /main/ 文档跟随主分支。研究新功能时有用;部署时应对照固定 tag 的源码、依赖和示例。官方 FAQ 也明确说明文档可能比 pip 包更新。版本差异说明
建议记录四类版本:Earth2Studio 版本与 commit、依赖锁文件、模型权重 revision 与哈希、运行镜像 digest。只有 pip install earth2studio==0.19.0 仍不等于整个环境可复现,因为许多依赖使用范围约束。
按一条预报链读源码
| 目录或文件 | 负责什么 | 初学时关注的问题 |
|---|---|---|
earth2studio/data/ |
GFS、ERA5 等数据源 | 数据从哪里来?什么时候可用? |
earth2studio/lexicon/ |
变量名称和源数据转换 | 温度单位是什么?z 是高度还是位势? |
earth2studio/models/px/ |
预报模型包装 | 输入需要几帧?如何推进一帧? |
earth2studio/models/dx/ |
诊断与降尺度模型 | 它依赖哪些预报场?适用区域是什么? |
earth2studio/models/da/ |
同化模型 | 输入观测与输出分析怎样定义? |
earth2studio/models/auto/ |
包与权重加载 | 默认权重是否固定 revision?缓存在哪里? |
earth2studio/run.py |
确定性、诊断、集合工作流 | 模型、数据源、输出如何组合? |
earth2studio/io/ |
Zarr、NetCDF 等后端 | 怎样写坐标、分块和数值数组? |
earth2studio/perturbation/、statistics/ |
扰动与统计工具 | 集合如何产生?怎样衡量质量? |
examples/ |
单个能力的入门用法 | 先读 getting_started,再读具体模型 |
recipes/ |
更完整的领域流程 | 评估、组合模型等如何组织? |
earth2studio/serve/、serve/ |
推理服务实现、配置与部署材料 | 请求如何入队、执行并取得结果? |
test/、pyproject.toml、uv.lock |
测试与依赖契约 | 哪些假设被验证,哪些需要自己验证? |
这是对 0.19.0 源码树 的阅读地图,不建议第一次就把所有可选模型依赖装进同一环境。
三个值得直接打开的实现细节
工作流会保存初始帧。 run.deterministic(..., nsteps=4) 生成 0、1、2、3、4 共五个时效位置。若模型步长为 6 小时,最后一帧是 +24 小时。nsteps 不是天数。run.py
ZarrBackend 默认可以在内存中运行。 小测试使用 ZarrBackend() 很方便,长预报应提供文件路径;0.19.0 默认按 time、lead_time、ensemble 等维度逐个分块,变量通常是独立数组。不能只凭“用了 Zarr”就假定它已经采用压缩或适合所有查询的分块。Zarr 后端
源数据适配可能已经转换单位。 GFS lexicon 将 HGT 乘以 9.81,变成模型使用的位势量。下游再把它当米来绘图就会产生明显错误。保存模型输出时应使用模型词汇的语义,而不是继续沿用上游 GRIB 的名称和单位。GFS lexicon
仓库成熟度应怎样判断
已有明确的组件接口、自动化测试、模型包装、推理服务与评估材料,适合用作 AI 天气推理基础。与此同时,版本仍为 0.x,多种 GPU 生态依赖共存,示例与注释也可能出现同步问题。一次 import 成功不能证明模型可运行,一次预报成功不能证明业务适用。
一个具体例子:0.19.0 的入门示例说明文字提到 FCN,但实际导入 DLWP;另一个是 FCN3 类注释写了排除南极,实际 input_coords() 和 output_coords() 是包含两极的 721 行。学习时优先读执行路径并打印实际坐标。入门示例、FCN3 包装
许可分层检查
框架的 Apache-2.0 许可不自动覆盖所有第三方模型、权重和输入数据。FCN 与 FCN3 当前官方模型卡标注 Apache-2.0;使用其他模型需要分别检查其权重许可、使用限制、署名和输出分发条款。提供商业天气产品时,也应核对初始资料的再分发条件。FCN 模型卡、FCN3 模型卡