{
  "schemaVersion": 1,
  "lessonId": "deployment-08",
  "contentHash": "ca01511bddec81ea2245eb5085cd368dc5d5c02708cf83929268b92134ae94f5",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:46:48.017044+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "Maximum absolute error per layer: {'hidden': 2.384185791015625e-07, 'norm': 3.5762786865234375e-07, 'activation': 3.5762786865234375e-07, 'output': 1.1920928955078125e-07}\nWrong epsilon: first mismatch is norm; intermediate outputs and input gradients verified on CPU.\n",
  "data": {
    "kind": "bar",
    "labels": [
      "hidden",
      "norm",
      "activation",
      "output"
    ],
    "xlabel": "operation in execution order",
    "ylabel": "maximum absolute output error",
    "series": [
      {
        "label": "matched architecture (max across inputs)",
        "y": [
          2.384185791015625e-07,
          3.5762786865234375e-07,
          3.5762786865234375e-07,
          1.1920928955078125e-07
        ]
      },
      {
        "label": "wrong epsilon (last input batch)",
        "y": [
          2.384185791015625e-07,
          0.046508073806762695,
          0.05144989490509033,
          0.011958837509155273
        ]
      }
    ]
  },
  "diagram": {
    "title": "Small errors need a scale-aware budget",
    "prediction": "Why can a larger absolute difference pass at a larger reference value?",
    "reading": "Read each row as one elementwise decision using absolute tolerance \\(2\\times10^{-6}\\) and relative tolerance \\(2\\times10^{-5}\\). Near zero the absolute term determines the allowance. At reference \\(100\\), the relative term increases it. These are hand-worked tolerance examples, not measured conversion errors; the executed bar plot below reports the model comparison.",
    "alt": "Read each row as one elementwise decision using absolute tolerance \\(2\\times10^{-6}\\) and relative tolerance \\(2\\times10^{-5}\\). Near zero the absolute term determines the allowance. At reference \\(100\\), the relative term increases it. These are hand-worked tolerance examples, not measured conversion errors; the executed bar plot below reports the model comparison.",
    "scope": "Architecture and dataflow mechanism diagram.",
    "height": 4.2,
    "panel": {
      "kind": "table",
      "headers": [
        "Reference",
        "Actual",
        "Allowed error",
        "Decision"
      ],
      "rows": [
        [
          "0",
          "0.000001",
          "0.000002",
          "pass"
        ],
        [
          "0",
          "0.000003",
          "0.000002",
          "fail"
        ],
        [
          "100",
          "100.001",
          "0.002002",
          "pass"
        ]
      ],
      "widths": [
        0.2,
        0.25,
        0.3,
        0.25
      ]
    }
  }
}
