{
  "schemaVersion": 1,
  "lessonId": "performance-05",
  "contentHash": "0ed4e1e9692f1cf9c00068841c968e0f59192c11c421262b792093399bfce201",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:46:02.014854+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "Saved residual descriptions:\nplain \nf32[16,16] from a constant\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of sub from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of sub from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of sub from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of sub from performance-05-example:14:20 (layer)\nremat \nf32[16,16] from a constant\nf32[16] from the argument v\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nf32[16] output of tanh from performance-05-example:14:20 (layer)\nCompiler memory estimates: [{'argument_size_in_bytes': 64, 'output_size_in_bytes': 64, 'temp_size_in_bytes': 256, 'alias_size_in_bytes': 0}, {'argument_size_in_bytes': 64, 'output_size_in_bytes': 64, 'temp_size_in_bytes': 256, 'alias_size_in_bytes': 0}]\nSynchronized gradient samples: [[3.1750183552503586e-05, 1.5875324606895447e-05, 9.583309292793274e-06, 9.375158697366714e-06, 9.292270988225937e-06], [1.5125144273042679e-05, 7.874798029661179e-06, 9.082723408937454e-06, 9.792391210794449e-06, 8.875038474798203e-06]]\nIndependent reverse recurrence agrees with both gradients.\n",
  "data": {
    "kind": "panels",
    "panels": [
      {
        "kind": "bar",
        "title": "Autodiff residual descriptions",
        "labels": [
          "ordinary",
          "layer remat"
        ],
        "ylabel": "saved entries (not bytes)",
        "series": [
          {
            "label": "residual descriptions",
            "y": [
              9,
              6
            ]
          }
        ]
      },
      {
        "kind": "bar",
        "title": "Compiler memory estimate",
        "labels": [
          "ordinary",
          "layer remat"
        ],
        "ylabel": "estimated temporary bytes",
        "series": [
          {
            "label": "compiler temporaries",
            "y": [
              256,
              256
            ]
          }
        ]
      }
    ]
  }
}
