Skip to content

CHELSA present-day baseline (#448) — the reference the future projections are measured against - #613

Open
cboettig wants to merge 2 commits into
mainfrom
baseline-448
Open

cboettig wants to merge 2 commits into
mainfrom
baseline-448

Conversation

@cboettig

Copy link
Copy Markdown
Member

Adds the CHELSA v2.1 1981–2010 observed baseline at H3 resolution 8, which is what makes the #564 future projections interpretable. Until now a consumer could not compute warming from this catalog at all — there was nothing to difference against.

Published and verified: verify-stac.py exits 0 against live S3.

What ships

collection chelsa-2-1/baseline-1981-2010
cells 195,048,994 — identical to all nine future collections, so every cell pairs
columns 11 — seven observed variables plus h8/h5/h4/h0
parents 5,4,0 as scoped on the issue
size 4.05 GB

The schema deliberately differs from the futures, because the source does. This is an observational climatology — one raster per variable, no GCM members — so it carries plain bio1, bio4, … rather than five members plus median/min/max. Plain names so a delta reads directly:

SELECT AVG(f.bio1_median - b.bio1) AS warming_degrees_c
FROM   <future> f JOIN <baseline> b USING (h8)

Validation: Arctic amplification, reproduced

Global land mean for 1981–2010 comes out at 9.409 °C, in line with published land climatology. Joining against the projections at h0 79.2°N (mean cell latitude 76°N), across 456,928 cells:

scenario, 2071–2100 vs baseline warming
SSP1-2.6 +3.64 °C
SSP3-7.0 +7.05 °C
SSP5-8.5 +8.32 °C (range 4.61–12.10)
cells not warming under SSP5-8.5 0 of 456,928

Against a global land mean of +4.7 °C, that is ~1.8× amplification at high latitude. Nothing in the pipeline can manufacture that — it requires the baseline, the futures, the land mask, the units and the H3 alignment to be simultaneously correct. Structural checks also pass: zero nulls, zero parent mismatches on h3_cell_to_parent.

Reuses the #564 Armada pathway

854 hex jobs (one per h0 × variable) then 122 joins, at the measured 8 Gi / 4 cores. Raw was already staged during #564, so no download. The hex phase finished with zero gaps — consistent with the ~0.02% transient failure rate measured over ~30,000 jobs there.

Two defects caught before publishing

A path mismatch. The data landed at baseline/1981-2010/ while the STAC pointed at baseline-1981-2010/. With a slash the last path segment is 1981-2010, which would have produced the asset key 1981-2010-hex — undescriptive and the same naming defect caught during #564. Moved the data (108/108, old path emptied) rather than degrade the key.

An ephemeral over-request, now recorded in the hex-tuning skill. One join asked for 40 Gi of ephemeral storage to write a 2 KB partition and cycled Leased → Pending → LeaseReturned indefinitely, because no node had that much free — while 121 identical jobs placed fine. It did not run slowly; it never ran, and nothing in the logs says the request is too large.

That makes three dimensions over-requested on this build by inheriting a number instead of measuring it — memory (~6×), cpu (~2.4×), ephemeral (enormous) — each throttling throughput a different way. The skill now covers all three with measurement recipes.

Scope

Seven variables, matching the futures so the pair is symmetric and every column has a defined delta. Extending both to all 19 bioclim variables stays a follow-up.

#448 stays open: Köppen-Geiger (CC-BY-4.0, categorical, mode reducer) and WorldClim (non-redistributable, MinIO-only) are separate ingests with different licences and reducers, not touched here.

…hway

The 1981-2010 baseline is what makes the #564 futures interpretable — a projected 14.1 degC means
little without a baseline to difference against, and until now a consumer could not compute
warming from this catalog at all.

Schema differs from the futures because the source does: this is an observational climatology, one
raster per variable with no GCM members. So it is 7 plain columns (bio1, bio4, bio5, bio6, bio12,
bio15, bio17) plus h8/h5/h4/h0, rather than five members plus median/min/max. Plain names so a
delta reads directly:

    SELECT AVG(f.bio1_median - b.bio1) FROM <future> f JOIN <baseline> b USING (h8)

Same pathway as #564 otherwise: one hex job per (h0, variable) = 854 jobs at the measured 8Gi /
4 cores, masked to land before staging, then one join per h0 that refuses a partial set. Parents
5,4,0 per the scope agreed on the issue, so the baseline meets the futures at h8 and coarser
catalog assets at h5/h4.

Raw was already staged during the #564 build, so no download is needed.

Scoped to the seven variables the futures carry, so the pair is symmetric and deltas are defined
for every column. Extending both to all 19 bioclim variables stays a follow-up. Koppen-Geiger and
WorldClim, the other two products on #448, are separate ingests and not touched here.
Three dimensions over-requested on the same build, all by inheriting a number from a neighbouring
job rather than measuring, and each throttled throughput differently:

  memory     32 Gi requested, 5.2 Gi peak  -> '4,231 jobs do not fit on any node'
  cpu        8 cores requested, 3.3 mean   -> halved the pods fitting in the core budget
  ephemeral  40 Gi requested, kilobytes    -> job unschedulable outright

The ephemeral case is the one worth spelling out. A join pod asked for 40Gi to write a 2KB
partition and then cycled Leased -> Pending -> LeaseReturned indefinitely, because no node had
that much free, while 121 identical jobs placed fine. It did not run slowly; it never ran. And
nothing in the logs says the request is too large — the job simply never starts, which reads like
a cluster problem rather than a spec problem.

Adds the df/du measurement recipe alongside the existing kubectl top ones.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant