{
  "schemaVersion": 1,
  "lessonId": "distributed-04",
  "contentHash": "fba8433e52316e9b4754f027642448996809914e15f1853638a5018bfa9eaeb8",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:46:05.852257+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 4,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "Recorded backend/processes/devices: cpu 1 4\nRestored step/cursor: 1 8\nNext sample IDs across epoch boundary: [[12, 5, 4, 1, 8, 13, 2, 11], [9, 0, 7, 15, 11, 13, 8, 14], [1, 6, 5, 4, 3, 12, 2, 10]]\nUninterrupted losses: [0.5069587826728821, 0.19637340307235718, 0.1798383891582489]\nRestored losses: [0.5069587826728821, 0.19637340307235718, 0.1798383891582489]\nCheckpoint: /var/folders/mp/_mq7srqx2y10p5nhjz9m7hj40000gn/T/jax-distributed-recovery-zwvohr77/step-one\n",
  "data": {
    "kind": "line",
    "x": [
      1,
      2,
      3
    ],
    "xlabel": "update after checkpoint",
    "ylabel": "batch mean squared loss",
    "series": [
      {
        "label": "uninterrupted",
        "y": [
          0.5069587826728821,
          0.19637340307235718,
          0.1798383891582489
        ]
      },
      {
        "label": "restored",
        "y": [
          0.5069587826728821,
          0.19637340307235718,
          0.1798383891582489
        ]
      }
    ]
  }
}
