<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.jayaprakash.net/index.xml" rel="self" type="application/atom+xml" /><link href="https://www.jayaprakash.net/" rel="alternate" type="text/html" /><updated>2026-10-06T03:59:16+00:00</updated><id>https://www.jayaprakash.net/index.xml</id><title type="html">Jayaprakash Sundararaj</title><subtitle>Blog and personal notes by Jayaprakash Sundararaj</subtitle><author><name>Jayaprakash Sundararaj</name></author><entry><title type="html">The Gemma 4 Developer Agent competition, day one</title><link href="https://www.jayaprakash.net/blog/2026-09-24-gemma-4-developer-agent-on-kaggle/" rel="alternate" type="text/html" title="The Gemma 4 Developer Agent competition, day one" /><published>2026-09-24T12:00:00+00:00</published><updated>2026-09-24T12:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/gemma-4-developer-agent-on-kaggle</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-09-24-gemma-4-developer-agent-on-kaggle/"><![CDATA[<p>Most coding-agent benchmarks let you bring the strongest model you can pay for. The <a href="https://www.kaggle.com/competitions/gemma-4-developer-agent">Gemma 4 Developer Agent competition</a> on Kaggle fixes the model instead: every entry runs the same 4-bit Gemma 4 31B on four NVIDIA L4 GPUs, with no internet, and has to fix real Python bugs well enough to pass hidden tests. What you get to change is the agent around it: its prompts, its budgets, its structure, and fine-tuned LoRA adapters. The competition opened on September 23 and runs until December 2 with $65,000 in prizes, plus $35,000 for an optional paper track. After the first day the best public score is 0.12.</p>

<p>This post explains the competition from the ground up: what a task looks like, what a submission can and can’t do, and why scores start so low. Then it goes through what I learned in the first 24 hours: replicating the evaluation harness locally, measuring Gemma on it, and comparing it with a model of the same size. I finish with the fine-tuning pipeline I built from that. Every source is listed at the end.</p>

<h2 id="the-task">The task</h2>

<p>Each task is a real pull request from a Python repository, frozen at the commit just before the fix. The agent gets:</p>

<ul>
  <li>The <strong>pull request description</strong> as its problem statement. It is often short and written for maintainers, not as a specification.</li>
  <li>A <strong>sandbox</strong> with the repository checked out in <code class="language-plaintext highlighter-rouge">/workspace</code>, its dependencies installed, and no network.</li>
  <li><strong>Nine tools</strong>: run a shell command, read a file (150 lines at a time), edit a file by replacing a string, write a file, check the remaining budget, submit the patch, and three code-graph tools backed by precomputed call graphs and embeddings.</li>
</ul>

<p>When the agent calls <code class="language-plaintext highlighter-rouge">submit_patch</code>, the harness takes <code class="language-plaintext highlighter-rouge">git diff</code> of the workspace, applies it to a fresh copy of the repository together with the maintainers’ own tests from the pull request, and runs <code class="language-plaintext highlighter-rouge">pytest</code>. The task counts only if every test passes. The score is the fraction of tasks solved.</p>

<p>The 129 public development tasks come from fastapi (67), rich (48), requests (13) and httpx (1). The roughly 120 scored tasks come from <strong>private repositories</strong>, split evenly between the public and private leaderboards. The organizers kept only tasks that a frontier model could solve or nearly solve.</p>

<h2 id="what-a-submission-can-change">What a submission can change</h2>

<p>A submission is a zip of declarative <a href="https://adk.dev/">Google ADK</a> configuration: YAML for the agents, Markdown prompts, sampling settings, a per-task budget file, optional ADK skills, and optional LoRA adapters. No Python from the submission ever runs on the host. That leaves these levers:</p>

<ul>
  <li><strong>Prompts and structure.</strong> One agent, or several: an agent can call another agent as a tool, and agents can be chained in sequences or loops.</li>
  <li><strong>Sampling and budgets.</strong> Temperature, output length, and the per-task time, tool-call and turn limits.</li>
  <li><strong>LoRA adapters.</strong> Up to eight, rank 128 or less, attached to specific agents, with the whole submission under 3 GiB. This is where post-training comes in.</li>
</ul>

<p>The model is fixed: <code class="language-plaintext highlighter-rouge">gemma-4-31b-it-qat-w4a16-ct</code>, a 4-bit build of Google’s quantization-aware-trained Gemma 4 31B, served by vLLM with a 32k-token context. All ~120 tasks must finish within 12 hours, and each team gets one submission a day.</p>

<h2 id="why-scores-start-near-10">Why scores start near 10%</h2>

<p>Almost every first-day entry scored 0.00 to 0.12. Several things stack up:</p>

<ol>
  <li><strong>The official sample configuration</strong> gives each task one minute and ten tool calls, which is not enough to finish anything. Many early entries kept it.</li>
  <li><strong>The tasks are pitched at frontier models</strong>, and come from repositories the model has never seen.</li>
  <li><strong>Grading is all or nothing.</strong> The hidden tests check exact function names, error messages and output formats described in the pull request. A fix that is almost right scores zero.</li>
  <li><strong>The time budget is tight.</strong> Twelve hours for about 120 tasks leaves around five minutes each on four L4s.</li>
  <li><strong>Scores move in big steps.</strong> With about 60 tasks on the public leaderboard, one task is worth about 1.7 points, so 0.10 and 0.12 differ by a single task.</li>
</ol>

<p>My first submission, a single agent with a directive prompt and a five-minute, sixty-call budget, scored <strong>0.10</strong>, tied for second. Scoring took about eight of the twelve hours, so there is little room to give each task more time.</p>

<h2 id="replicating-the-harness">Replicating the harness</h2>

<p>The organizers published a detailed description of their harness but not the harness itself, so I rebuilt it: the nine tools with the same output limits, the same prompt construction, the same “please continue” nudges, patch extraction, and verification in a fresh copy of the repository. Two checks keep it honest:</p>

<ul>
  <li><strong>Oracle run.</strong> Applying each task’s real fix must pass its tests. 110 of 129 public tasks pass locally; the other 19 need older library versions than my environments have.</li>
  <li><strong>Baseline run.</strong> Applying no fix must fail. Three tasks passed without any change and were dropped, leaving 107 development tasks.</li>
</ul>

<p>The model runs wherever I can get it: vLLM on a Kaggle TPU v5e-8 with the unquantized QAT weights (free, 20 hours a week, but often a two-hour queue), or an OpenAI-compatible API such as OpenRouter for quick checks.</p>

<h2 id="what-gemma-4-does-as-an-agent">What Gemma 4 does as an agent</h2>

<p>On the TPU, the single-agent baseline solved 9 of 29 and 11 of 30 development tasks in two runs. Variants I expected to help did not:</p>

<table>
  <thead>
    <tr>
      <th>Variant</th>
      <th>Solved</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Baseline, one agent</td>
      <td>9/29, then 11/30</td>
    </tr>
    <tr>
      <td>A read-only analyzer sub-agent for code search</td>
      <td>8/29</td>
    </tr>
    <tr>
      <td>Thinking disabled</td>
      <td>7/29</td>
    </tr>
    <tr>
      <td>Prompt fixes for the failures below</td>
      <td>8/30</td>
    </tr>
    <tr>
      <td>Prompt fixes plus temperature 1.0</td>
      <td>9/30</td>
    </tr>
  </tbody>
</table>

<p>The traces were more informative than the scores. Gemma either solves a task quickly (6 to 38 tool calls) or gets stuck and burns the whole budget. Two patterns dominate the stuck runs:</p>

<ul>
  <li><strong>Failed edits.</strong> In one run 48 of 77 <code class="language-plaintext highlighter-rouge">edit_file</code> calls failed because the text to replace contained backslashes the file didn’t: Gemma copied <code class="language-plaintext highlighter-rouge">\"</code> where the source had <code class="language-plaintext highlighter-rouge">"</code>.</li>
  <li><strong>Loops.</strong> One run issued the same failing shell command 39 times in a row.</li>
</ul>

<p>A third problem is structural: several tasks per run crashed when the conversation grew past about 24,500 tokens. vLLM requires the prompt plus the space reserved for the reply to fit in 32,768 tokens, and my configuration reserved 8,192 for the reply (the official sample reserves 16,384, which caps the conversation even lower). ADK’s context compaction only starts at 32,768, so it never gets a chance to run first.</p>

<p>To see whether this is Gemma or my harness, I ran <a href="https://huggingface.co/Qwen/Qwen3.8-27B">Qwen 3.8 27B</a>, an open model of similar size, through the identical harness and prompt. On the tasks both ran cleanly, Qwen solved 5 of 13 and Gemma 2 of 13, and Qwen made almost no failed edits. The tools work; Gemma’s behavior with them is the bottleneck, and prompt changes alone didn’t fix it. That points to changing the weights.</p>

<h2 id="the-fine-tuning-pipeline">The fine-tuning pipeline</h2>

<p>The goal is supervised fine-tuning on successful agent runs, rendered exactly as the host renders them:</p>

<ul>
  <li><strong>Data.</strong> Gemma’s own runs that passed, and public agent trajectories from an open-weight teacher: <a href="https://huggingface.co/datasets/nebius/SWE-rebench-openhands-trajectories">nebius/SWE-rebench-openhands-trajectories</a>, generated by Qwen3-Coder-480B under Apache 2.0. I converted them to my nine tools and kept resolved runs that don’t install packages, don’t leave scratch files in the patch, don’t depend on file views my read limit would cut, and fit in 28,000 tokens. I left out public trajectory sets generated by proprietary models, whose providers’ terms restrict training competing models on their outputs. Whether the competition allows distillation from other models at all is still an open question on the forum; the organizers have said they are discussing it.</li>
  <li><strong>Rendering.</strong> Each conversation is rebuilt exactly the way the host’s ADK harness would send it, and passed through Gemma 4’s own chat template the way vLLM applies it. Only the tokens the model generates itself receive loss.</li>
  <li><strong>Training.</strong> QLoRA on the unquantized QAT weights, rank 64, adapting attention and MLP projections in the language model only. Gemma 4 31B’s full-attention layers share one projection for keys and values; I leave that projection out on those layers, because a server may apply it differently from training.</li>
  <li><strong>Checking.</strong> After training, the adapter is served on top of the exact 4-bit competition model in vLLM, as the host does, and must change the model’s output. Some Gemma 4 adapters have been reported to load in vLLM without taking effect.</li>
</ul>

<p>The first training set has 843 conversations and 18 million tokens, about six million of them trained. I expect one epoch to take two to three and a half hours on a single rented H100.</p>

<h2 id="what-im-doing-next">What I’m doing next</h2>

<ol>
  <li>Train the first adapter and compare it with the baseline on 45 development tasks, served the way the host serves it.</li>
  <li>Test the context fix, a smaller output reservation so conversations can grow to about 28,600 tokens, against the baseline on the same tasks.</li>
  <li>If the adapter helps, collect more of Gemma’s own successful runs on a larger pool of public tasks with runnable environments, retrain, and repeat. Later, train on pairs of passing and failing attempts at the same task.</li>
</ol>

<p>I’ll write up what holds up.</p>

<h2 id="sources">Sources</h2>

<p><strong>Competition</strong></p>

<ul>
  <li>Google DeepMind, <a href="https://www.kaggle.com/competitions/gemma-4-developer-agent">The Gemma 4 Developer Agent Competition</a> on Kaggle: overview, rules, evaluation, data description and harness guide; and the <a href="https://www.kaggle.com/competitions/gemma-4-developer-agent-paper">paper track</a>.</li>
  <li>Kaggle discussion: <a href="https://www.kaggle.com/competitions/gemma-4-developer-agent/discussion/742807">Clarification on distillation from external LLMs</a>.</li>
  <li>Google, <a href="https://www.kaggle.com/models/google/gemma-4">Gemma 4 on Kaggle Models</a> (<code class="language-plaintext highlighter-rouge">gemma-4-31b-it-qat-w4a16-ct</code> and <code class="language-plaintext highlighter-rouge">gemma-4-31b-it-qat-q4_0-unquantized</code>).</li>
</ul>

<p><strong>Software</strong></p>

<ul>
  <li>Google, <a href="https://adk.dev/">Agent Development Kit (ADK)</a> and its <a href="https://adk.dev/agents/config/">agent config</a> format.</li>
  <li><a href="https://github.com/vllm-project/vllm">vLLM</a>, its <a href="https://recipes.vllm.ai/Google/gemma-4-31B-it">Gemma 4 recipe</a>, and <a href="https://pypi.org/project/vllm-tpu/">vllm-tpu</a> for TPU serving.</li>
  <li><a href="https://github.com/BerriAI/litellm">LiteLLM</a> and <a href="https://openrouter.ai/">OpenRouter</a>.</li>
</ul>

<p><strong>Data</strong></p>

<ul>
  <li>Nebius, <a href="https://huggingface.co/datasets/nebius/SWE-rebench">SWE-rebench</a> and <a href="https://huggingface.co/datasets/nebius/SWE-rebench-openhands-trajectories">SWE-rebench-openhands-trajectories</a>.</li>
  <li>Jimenez et al., <a href="https://www.swebench.com/SWE-bench/">SWE-bench</a>.</li>
  <li>Pan et al., <a href="https://huggingface.co/datasets/SWE-Gym/SWE-Gym">SWE-Gym</a>; Yang et al., <a href="https://huggingface.co/datasets/SWE-bench/SWE-smith-py">SWE-smith</a>.</li>
</ul>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[What Google DeepMind's Gemma 4 Developer Agent competition asks for, why every score starts near 10%, what I learned running Gemma 4 31B as a coding agent, and how I plan to fine-tune it.]]></summary></entry><entry><title type="html">Pretraining a 0.5B model on one rented GPU</title><link href="https://www.jayaprakash.net/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/" rel="alternate" type="text/html" title="Pretraining a 0.5B model on one rented GPU" /><published>2026-09-22T12:00:00+00:00</published><updated>2026-09-22T12:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/pretraining-a-0.5b-model-on-one-gpu</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/"><![CDATA[<p>I trained a 489M-parameter Llama-style model from scratch on a single rented RTX 5090. The run is finished: three phases, 4.19 billion tokens, $13.70 of GPU time. This post covers what I built, how it scores, and two things I tried that did not work.</p>

<p>The final weights are on the Hub as <a href="https://huggingface.co/osjayaprakash/llm-0.5b-fineweb-edu">osjayaprakash/llm-0.5b-fineweb-edu</a>, under MIT. It loads as a plain <code class="language-plaintext highlighter-rouge">LlamaForCausalLM</code>, so nothing custom is needed to run it.</p>

<h2 id="the-setup">The setup</h2>

<p>The model is a standard decoder-only transformer, written in plain PyTorch:</p>

<dl class="facts">
<dt>Parameters</dt><dd>489.3M (448.3M excluding embeddings)</dd>
<dt>Layers and width</dt><dd>24 layers, d_model 1280</dd>
<dt>Attention</dt><dd>Grouped-query, 20 query heads sharing 4 key/value heads</dd>
<dt>Feed-forward</dt><dd>SwiGLU, d_ff 3840</dd>
<dt>Normalization and positions</dt><dd>Pre-norm RMSNorm, RoPE</dd>
<dt>Vocabulary</dt><dd>32,000-token byte-level BPE, trained on the same corpus</dd>
<dt>Context</dt><dd>2048 tokens</dd>
<dt>Batch</dt><dd>524,288 tokens per step</dd>
</dl>

<p>The training data is 2.03B tokens of <a href="https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu">FineWeb-Edu</a>, with 50M held out for validation. The GPU was a 32 GB RTX 5090 rented on Vast.ai at $0.479 an hour. It trained at 48,000 tokens a second, about 85% of the card’s theoretical peak.</p>

<h2 id="results">Results</h2>

<table>
  <thead>
    <tr>
      <th> </th>
      <th style="text-align: right">Phase 1</th>
      <th style="text-align: right">Phase 2</th>
      <th style="text-align: right">Phase 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Training tokens</td>
      <td style="text-align: right">1.05B</td>
      <td style="text-align: right">2.10B</td>
      <td style="text-align: right">4.19B</td>
    </tr>
    <tr>
      <td>Validation loss</td>
      <td style="text-align: right">3.323</td>
      <td style="text-align: right">3.139</td>
      <td style="text-align: right">2.998</td>
    </tr>
    <tr>
      <td>Zero-shot average, 9 tasks</td>
      <td style="text-align: right">0.412</td>
      <td style="text-align: right">0.433</td>
      <td style="text-align: right">0.445</td>
    </tr>
    <tr>
      <td>MMLU, 5-shot</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right">0.254</td>
      <td style="text-align: right">0.272</td>
    </tr>
    <tr>
      <td>Wall clock</td>
      <td style="text-align: right">6.4 h</td>
      <td style="text-align: right">6.4 h</td>
      <td style="text-align: right">12.2 h</td>
    </tr>
  </tbody>
</table>

<p>Each doubling of the tokens paid, and each paid a little less than the one before. The first took validation loss down 0.18 and average accuracy up 2 points; the second, 0.14 and 1.2 points. Neither curve has bent toward a floor. At 4.2B tokens the model has seen about 8.5 tokens per parameter, still under half the Chinchilla-optimal ratio. Tokens were the limit from start to finish. I stopped because the budget ran out, not because the model stopped learning.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 300" role="img" aria-labelledby="validation-loss-against--t validation-loss-against--d">
<title id="validation-loss-against--t">Validation loss against tokens</title>
<desc id="validation-loss-against--d">Validation loss against training tokens, both axes logarithmic. The points fall on a near-straight line from 6.10 at 0.05B tokens to 2.998 at 4.19B, with a fitted slope of -0.106 over the second half. A straight line means the run is still in the power-law regime and has not begun to flatten.</desc>
<text class="axis-label" x="52" y="16">validation loss, log scale</text>
<line class="grid" x1="52" x2="734" y1="246.5" y2="246.5" />
<text class="tick" x="44" y="250.5" text-anchor="end">3.0</text>
<line class="grid" x1="52" x2="734" y1="203.3" y2="203.3" />
<text class="tick" x="44" y="207.3" text-anchor="end">3.5</text>
<line class="grid" x1="52" x2="734" y1="165.8" y2="165.8" />
<text class="tick" x="44" y="169.8" text-anchor="end">4.0</text>
<line class="grid" x1="52" x2="734" y1="132.8" y2="132.8" />
<text class="tick" x="44" y="136.8" text-anchor="end">4.5</text>
<line class="grid" x1="52" x2="734" y1="103.2" y2="103.2" />
<text class="tick" x="44" y="107.2" text-anchor="end">5.0</text>
<line class="grid" x1="52" x2="734" y1="76.5" y2="76.5" />
<text class="tick" x="44" y="80.5" text-anchor="end">5.5</text>
<line class="grid" x1="52" x2="734" y1="52.1" y2="52.1" />
<text class="tick" x="44" y="56.1" text-anchor="end">6.0</text>
<text class="tick" x="68.8" y="276" text-anchor="middle">50M</text>
<text class="tick" x="169.7" y="276" text-anchor="middle">100M</text>
<text class="tick" x="404.0" y="276" text-anchor="middle">500M</text>
<text class="tick" x="504.9" y="276" text-anchor="middle">1B</text>
<text class="tick" x="605.8" y="276" text-anchor="middle">2B</text>
<text class="tick" x="706.7" y="276" text-anchor="middle">4B</text>
<text class="axis-label" x="734" y="294" text-anchor="end">training tokens, log scale</text>
<path class="line line-gap line-2" d="M616.3,228.3 L730.2,251.4" />
<text class="note" x="606.3" y="248.3" text-anchor="end">fitted slope -0.106</text>
<path class="line" d="M75.7,47.3 L176.6,84.8 L235.6,118.3 L277.5,139.9 L310.0,157.1 L336.5,169.6 L359.0,179.3 L378.4,186.8 L395.6,192.5 L410.9,197.0 L424.8,200.9 L437.4,204.2 L449.1,207.1 L459.9,209.7 L469.9,211.8 L479.3,213.7 L488.2,215.1 L496.5,216.2 L504.3,217.1 L511.8,217.8 L518.9,212.9 L525.7,212.8 L532.2,214.4 L538.4,216.3 L544.3,217.5 L550.0,219.0 L555.5,220.6 L560.8,222.2 L565.9,223.8 L570.9,224.9 L575.6,226.3 L580.2,227.6 L584.7,228.8 L589.1,229.9 L593.3,231.0 L597.4,231.8 L601.4,232.5 L605.3,233.1 L609.0,233.5 L612.7,233.8 L616.3,229.9 L619.8,229.0 L623.3,229.4 L626.6,229.9 L629.9,230.3 L633.1,230.9 L636.2,231.6 L639.3,232.5 L642.3,233.1 L645.2,233.8 L648.1,234.5 L650.9,235.2 L653.7,235.9 L656.4,236.2 L659.1,236.9 L661.7,237.7 L664.3,238.2 L666.8,238.8 L669.3,239.6 L671.8,240.1 L674.2,240.6 L676.5,241.1 L678.9,241.7 L681.2,242.2 L683.4,242.5 L685.6,243.0 L687.8,243.4 L690.0,244.0 L692.1,244.3 L694.2,244.6 L696.3,245.0 L698.3,245.3 L700.3,245.5 L702.3,245.7 L704.3,246.0 L706.2,246.1 L708.1,246.3 L710.0,246.4 L711.8,246.6 L713.7,246.7" />
<circle class="hit" cx="75.7" cy="47.3" r="7"><title>0.05B tokens: validation loss 6.1040</title></circle>
<circle class="hit" cx="176.6" cy="84.8" r="7"><title>0.10B tokens: validation loss 5.3402</title></circle>
<circle class="hit" cx="235.6" cy="118.3" r="7"><title>0.16B tokens: validation loss 4.7384</title></circle>
<circle class="hit" cx="277.5" cy="139.9" r="7"><title>0.21B tokens: validation loss 4.3870</title></circle>
<circle class="hit" cx="310.0" cy="157.1" r="7"><title>0.26B tokens: validation loss 4.1264</title></circle>
<circle class="hit" cx="336.5" cy="169.6" r="7"><title>0.31B tokens: validation loss 3.9457</title></circle>
<circle class="hit" cx="359.0" cy="179.3" r="7"><title>0.37B tokens: validation loss 3.8117</title></circle>
<circle class="hit" cx="378.4" cy="186.8" r="7"><title>0.42B tokens: validation loss 3.7120</title></circle>
<circle class="hit" cx="395.6" cy="192.5" r="7"><title>0.47B tokens: validation loss 3.6366</title></circle>
<circle class="hit" cx="410.9" cy="197.0" r="7"><title>0.52B tokens: validation loss 3.5790</title></circle>
<circle class="hit" cx="424.8" cy="200.9" r="7"><title>0.58B tokens: validation loss 3.5292</title></circle>
<circle class="hit" cx="437.4" cy="204.2" r="7"><title>0.63B tokens: validation loss 3.4889</title></circle>
<circle class="hit" cx="449.1" cy="207.1" r="7"><title>0.68B tokens: validation loss 3.4524</title></circle>
<circle class="hit" cx="459.9" cy="209.7" r="7"><title>0.73B tokens: validation loss 3.4203</title></circle>
<circle class="hit" cx="469.9" cy="211.8" r="7"><title>0.79B tokens: validation loss 3.3948</title></circle>
<circle class="hit" cx="479.3" cy="213.7" r="7"><title>0.84B tokens: validation loss 3.3722</title></circle>
<circle class="hit" cx="488.2" cy="215.1" r="7"><title>0.89B tokens: validation loss 3.3553</title></circle>
<circle class="hit" cx="496.5" cy="216.2" r="7"><title>0.94B tokens: validation loss 3.3419</title></circle>
<circle class="hit" cx="504.3" cy="217.1" r="7"><title>1.00B tokens: validation loss 3.3314</title></circle>
<circle class="hit" cx="511.8" cy="217.8" r="7"><title>1.05B tokens: validation loss 3.3226</title></circle>
<circle class="hit" cx="518.9" cy="212.9" r="7"><title>1.10B tokens: validation loss 3.3822</title></circle>
<circle class="hit" cx="525.7" cy="212.8" r="7"><title>1.15B tokens: validation loss 3.3827</title></circle>
<circle class="hit" cx="532.2" cy="214.4" r="7"><title>1.21B tokens: validation loss 3.3633</title></circle>
<circle class="hit" cx="538.4" cy="216.3" r="7"><title>1.26B tokens: validation loss 3.3412</title></circle>
<circle class="hit" cx="544.3" cy="217.5" r="7"><title>1.31B tokens: validation loss 3.3265</title></circle>
<circle class="hit" cx="550.0" cy="219.0" r="7"><title>1.36B tokens: validation loss 3.3085</title></circle>
<circle class="hit" cx="555.5" cy="220.6" r="7"><title>1.42B tokens: validation loss 3.2900</title></circle>
<circle class="hit" cx="560.8" cy="222.2" r="7"><title>1.47B tokens: validation loss 3.2711</title></circle>
<circle class="hit" cx="565.9" cy="223.8" r="7"><title>1.52B tokens: validation loss 3.2525</title></circle>
<circle class="hit" cx="570.9" cy="224.9" r="7"><title>1.57B tokens: validation loss 3.2397</title></circle>
<circle class="hit" cx="575.6" cy="226.3" r="7"><title>1.63B tokens: validation loss 3.2236</title></circle>
<circle class="hit" cx="580.2" cy="227.6" r="7"><title>1.68B tokens: validation loss 3.2089</title></circle>
<circle class="hit" cx="584.7" cy="228.8" r="7"><title>1.73B tokens: validation loss 3.1955</title></circle>
<circle class="hit" cx="589.1" cy="229.9" r="7"><title>1.78B tokens: validation loss 3.1823</title></circle>
<circle class="hit" cx="593.3" cy="231.0" r="7"><title>1.84B tokens: validation loss 3.1707</title></circle>
<circle class="hit" cx="597.4" cy="231.8" r="7"><title>1.89B tokens: validation loss 3.1618</title></circle>
<circle class="hit" cx="601.4" cy="232.5" r="7"><title>1.94B tokens: validation loss 3.1532</title></circle>
<circle class="hit" cx="605.3" cy="233.1" r="7"><title>1.99B tokens: validation loss 3.1471</title></circle>
<circle class="hit" cx="609.0" cy="233.5" r="7"><title>2.04B tokens: validation loss 3.1424</title></circle>
<circle class="hit" cx="612.7" cy="233.8" r="7"><title>2.10B tokens: validation loss 3.1387</title></circle>
<circle class="hit" cx="616.3" cy="229.9" r="7"><title>2.15B tokens: validation loss 3.1833</title></circle>
<circle class="hit" cx="619.8" cy="229.0" r="7"><title>2.20B tokens: validation loss 3.1931</title></circle>
<circle class="hit" cx="623.3" cy="229.4" r="7"><title>2.25B tokens: validation loss 3.1888</title></circle>
<circle class="hit" cx="626.6" cy="229.9" r="7"><title>2.31B tokens: validation loss 3.1825</title></circle>
<circle class="hit" cx="629.9" cy="230.3" r="7"><title>2.36B tokens: validation loss 3.1781</title></circle>
<circle class="hit" cx="633.1" cy="230.9" r="7"><title>2.41B tokens: validation loss 3.1715</title></circle>
<circle class="hit" cx="636.2" cy="231.6" r="7"><title>2.46B tokens: validation loss 3.1634</title></circle>
<circle class="hit" cx="639.3" cy="232.5" r="7"><title>2.52B tokens: validation loss 3.1540</title></circle>
<circle class="hit" cx="642.3" cy="233.1" r="7"><title>2.57B tokens: validation loss 3.1467</title></circle>
<circle class="hit" cx="645.2" cy="233.8" r="7"><title>2.62B tokens: validation loss 3.1393</title></circle>
<circle class="hit" cx="648.1" cy="234.5" r="7"><title>2.67B tokens: validation loss 3.1314</title></circle>
<circle class="hit" cx="650.9" cy="235.2" r="7"><title>2.73B tokens: validation loss 3.1235</title></circle>
<circle class="hit" cx="653.7" cy="235.9" r="7"><title>2.78B tokens: validation loss 3.1157</title></circle>
<circle class="hit" cx="656.4" cy="236.2" r="7"><title>2.83B tokens: validation loss 3.1117</title></circle>
<circle class="hit" cx="659.1" cy="236.9" r="7"><title>2.88B tokens: validation loss 3.1044</title></circle>
<circle class="hit" cx="661.7" cy="237.7" r="7"><title>2.94B tokens: validation loss 3.0959</title></circle>
<circle class="hit" cx="664.3" cy="238.2" r="7"><title>2.99B tokens: validation loss 3.0900</title></circle>
<circle class="hit" cx="666.8" cy="238.8" r="7"><title>3.04B tokens: validation loss 3.0832</title></circle>
<circle class="hit" cx="669.3" cy="239.6" r="7"><title>3.09B tokens: validation loss 3.0749</title></circle>
<circle class="hit" cx="671.8" cy="240.1" r="7"><title>3.15B tokens: validation loss 3.0696</title></circle>
<circle class="hit" cx="674.2" cy="240.6" r="7"><title>3.20B tokens: validation loss 3.0641</title></circle>
<circle class="hit" cx="676.5" cy="241.1" r="7"><title>3.25B tokens: validation loss 3.0578</title></circle>
<circle class="hit" cx="678.9" cy="241.7" r="7"><title>3.30B tokens: validation loss 3.0514</title></circle>
<circle class="hit" cx="681.2" cy="242.2" r="7"><title>3.36B tokens: validation loss 3.0464</title></circle>
<circle class="hit" cx="683.4" cy="242.5" r="7"><title>3.41B tokens: validation loss 3.0430</title></circle>
<circle class="hit" cx="685.6" cy="243.0" r="7"><title>3.46B tokens: validation loss 3.0379</title></circle>
<circle class="hit" cx="687.8" cy="243.4" r="7"><title>3.51B tokens: validation loss 3.0330</title></circle>
<circle class="hit" cx="690.0" cy="244.0" r="7"><title>3.57B tokens: validation loss 3.0268</title></circle>
<circle class="hit" cx="692.1" cy="244.3" r="7"><title>3.62B tokens: validation loss 3.0234</title></circle>
<circle class="hit" cx="694.2" cy="244.6" r="7"><title>3.67B tokens: validation loss 3.0200</title></circle>
<circle class="hit" cx="696.3" cy="245.0" r="7"><title>3.72B tokens: validation loss 3.0165</title></circle>
<circle class="hit" cx="698.3" cy="245.3" r="7"><title>3.77B tokens: validation loss 3.0130</title></circle>
<circle class="hit" cx="700.3" cy="245.5" r="7"><title>3.83B tokens: validation loss 3.0103</title></circle>
<circle class="hit" cx="702.3" cy="245.7" r="7"><title>3.88B tokens: validation loss 3.0084</title></circle>
<circle class="hit" cx="704.3" cy="246.0" r="7"><title>3.93B tokens: validation loss 3.0053</title></circle>
<circle class="hit" cx="706.2" cy="246.1" r="7"><title>3.98B tokens: validation loss 3.0038</title></circle>
<circle class="hit" cx="708.1" cy="246.3" r="7"><title>4.04B tokens: validation loss 3.0025</title></circle>
<circle class="hit" cx="710.0" cy="246.4" r="7"><title>4.09B tokens: validation loss 3.0007</title></circle>
<circle class="hit" cx="711.8" cy="246.6" r="7"><title>4.14B tokens: validation loss 2.9990</title></circle>
<circle class="hit" cx="713.7" cy="246.7" r="7"><title>4.19B tokens: validation loss 2.9982</title></circle>
<circle class="dot" cx="75.7" cy="47.3" r="4" />
<circle class="dot" cx="713.7" cy="246.7" r="4" />
<text class="value" x="703.7" y="236.7" text-anchor="end">2.998</text>
</svg>

</div>
<figcaption>Validation loss against tokens with both axes logarithmic. A straight line here means the model is still in the regime where each doubling of data buys a fixed fraction of the remaining loss. Mine is still straight at the end, which is why I say the budget stopped the run rather than the model. Hover a point for its exact value.</figcaption>
</figure>

<p>Training was stable throughout: across all 8,000 steps there were no loss spikes and no non-finite gradients, and gradient clipping stopped triggering after step 540.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 260" role="img" aria-labelledby="throughput-t throughput-d">
<title id="throughput-t">Throughput</title>
<desc id="throughput-d">Training throughput across the run, median 48.4 thousand tokens per second at 85% model-FLOPs utilisation. The dips are benchmark evaluations sharing the GPU with training.</desc>
<text class="axis-label" x="52" y="16">thousand tokens per second</text>
<line class="grid" x1="52" x2="708" y1="216.0" y2="216.0" />
<text class="tick" x="44" y="220.0" text-anchor="end">0</text>
<line class="grid" x1="52" x2="708" y1="182.9" y2="182.9" />
<text class="tick" x="44" y="186.9" text-anchor="end">10</text>
<line class="grid" x1="52" x2="708" y1="149.8" y2="149.8" />
<text class="tick" x="44" y="153.8" text-anchor="end">20</text>
<line class="grid" x1="52" x2="708" y1="116.7" y2="116.7" />
<text class="tick" x="44" y="120.7" text-anchor="end">30</text>
<line class="grid" x1="52" x2="708" y1="83.6" y2="83.6" />
<text class="tick" x="44" y="87.6" text-anchor="end">40</text>
<line class="grid" x1="52" x2="708" y1="50.5" y2="50.5" />
<text class="tick" x="44" y="54.5" text-anchor="end">50</text>
<text class="tick" x="716" y="220.0">0%</text>
<text class="tick" x="716" y="174.5">25%</text>
<text class="tick" x="716" y="129.0">50%</text>
<text class="tick" x="716" y="83.5">75%</text>
<text class="tick" x="716" y="38.0">100%</text>
<text class="axis-label" x="716" y="16">MFU</text>
<text class="tick" x="216.0" y="236" text-anchor="middle">2000</text>
<text class="tick" x="380.0" y="236" text-anchor="middle">4000</text>
<text class="tick" x="544.0" y="236" text-anchor="middle">6000</text>
<text class="tick" x="708.0" y="236" text-anchor="middle">8000</text>
<text class="axis-label" x="708" y="254" text-anchor="end">step</text>
<path class="line line-thin line-2" d="M52.8,65.7 L53.6,60.6 L54.5,60.6 L55.3,60.9 L56.1,98.1 L56.9,97.2 L57.7,95.0 L58.6,93.7 L59.4,84.3 L60.2,61.0 L61.0,60.8 L61.8,91.4 L62.7,98.1 L63.5,95.8 L64.3,93.5 L65.1,87.9 L65.9,61.9 L66.8,61.0 L67.6,60.8 L68.4,87.2 L69.2,96.7 L70.0,94.6 L70.9,92.9 L71.7,77.2 L72.5,61.0 L73.3,60.9 L74.1,61.3 L75.0,60.9 L75.8,102.6 L76.6,104.6 L77.4,101.0 L78.2,96.4 L79.1,90.7 L79.9,62.3 L80.7,61.4 L81.5,97.2 L82.3,106.8 L83.2,99.6 L84.0,95.7 L84.8,94.0 L85.6,61.1 L86.4,61.0 L87.3,61.4 L88.1,61.2 L88.9,61.1 L89.7,60.9 L90.5,61.3 L91.4,60.9 L92.2,61.3 L93.0,61.0 L93.8,60.9 L94.6,61.3 L95.5,61.4 L96.3,69.5 L97.1,101.9 L97.9,100.0 L98.7,98.9 L99.6,94.3 L100.4,84.6 L101.2,61.1 L102.0,61.1 L102.8,61.0 L103.7,61.3 L104.5,61.0 L105.3,61.0 L106.1,61.3 L106.9,60.9 L107.8,60.9 L108.6,61.3 L109.4,61.1 L110.2,61.0 L111.0,61.4 L111.9,61.0 L112.7,61.0 L113.5,61.4 L114.3,61.0 L115.1,61.0 L116.0,61.3 L116.8,61.0 L117.6,61.5 L118.4,60.8 L119.2,61.0 L120.1,61.3 L120.9,61.0 L121.7,61.0 L122.5,61.3 L123.3,60.9 L124.2,60.9 L125.0,61.2 L125.8,61.0 L126.6,60.9 L127.4,61.2 L128.3,60.8 L129.1,60.9 L129.9,61.3 L130.7,60.8 L131.5,61.1 L132.4,60.8 L133.2,60.8 L134.0,61.3 L134.8,60.9 L135.6,97.6 L136.5,100.6 L137.3,99.6 L138.1,95.3 L138.9,91.1 L139.7,62.1 L140.6,60.9 L141.4,61.1 L142.2,61.0 L143.0,60.8 L143.8,61.1 L144.7,60.8 L145.5,61.1 L146.3,61.0 L147.1,60.8 L147.9,61.2 L148.8,60.9 L149.6,61.0 L150.4,61.6 L151.2,60.8 L152.0,61.0 L152.9,61.4 L153.7,61.1 L154.5,61.1 L155.3,61.4 L156.1,61.1 L157.0,60.9 L157.8,61.1 L158.6,60.9 L159.4,61.0 L160.2,60.8 L161.1,60.8 L161.9,61.2 L162.7,71.9 L163.5,60.8 L164.3,61.2 L165.2,60.8 L166.0,60.8 L166.8,61.2 L167.6,60.5 L168.4,60.7 L169.3,60.9 L170.1,60.7 L170.9,61.1 L171.7,60.7 L172.5,60.8 L173.4,61.2 L174.2,60.8 L175.0,61.0 L175.8,61.0 L176.6,69.4 L177.5,61.6 L178.3,72.0 L179.1,101.6 L179.9,99.6 L180.7,98.8 L181.6,93.9 L182.4,82.9 L183.2,61.3 L184.0,60.5 L184.8,61.1 L185.7,60.7 L186.5,60.6 L187.3,60.9 L188.1,60.5 L188.9,60.6 L189.8,60.9 L190.6,60.6 L191.4,60.8 L192.2,61.1 L193.0,60.8 L193.9,60.8 L194.7,61.0 L195.5,60.8 L196.3,60.7 L197.1,61.0 L198.0,60.7 L198.8,61.0 L199.6,60.8 L200.4,60.5 L201.2,60.9 L202.1,60.5 L202.9,60.5 L203.7,61.1 L204.5,60.7 L205.3,60.7 L206.2,60.8 L207.0,60.7 L207.8,60.8 L208.6,61.0 L209.4,60.7 L210.3,60.7 L211.1,61.1 L211.9,60.8 L212.7,61.0 L213.5,60.7 L214.4,60.7 L215.2,60.9 L216.0,60.9 L216.8,67.2 L217.6,92.4 L218.5,91.9 L219.3,90.7 L220.1,86.0 L220.9,84.7 L221.7,63.4 L222.6,60.5 L223.4,60.8 L224.2,60.6 L225.0,60.4 L225.8,60.5 L226.7,60.8 L227.5,60.4 L228.3,61.0 L229.1,60.4 L229.9,60.4 L230.8,60.7 L231.6,60.4 L232.4,60.6 L233.2,60.8 L234.0,60.7 L234.9,100.2 L235.7,106.4 L236.5,96.3 L237.3,80.7 L238.1,61.1 L239.0,60.7 L239.8,74.5 L240.6,95.4 L241.4,95.3 L242.2,94.0 L243.1,92.6 L243.9,90.2 L244.7,90.7 L245.5,89.3 L246.3,80.8 L247.2,60.9 L248.0,60.5 L248.8,60.6 L249.6,93.9 L250.4,96.8 L251.3,93.0 L252.1,93.8 L252.9,97.3 L253.7,96.0 L254.5,94.5 L255.4,94.2 L256.2,94.0 L257.0,83.1 L257.8,60.6 L258.6,61.0 L259.5,84.0 L260.3,99.4 L261.1,100.0 L261.9,99.4 L262.7,99.0 L263.6,99.1 L264.4,98.5 L265.2,98.7 L266.0,97.7 L266.8,98.4 L267.7,98.5 L268.5,99.9 L269.3,101.6 L270.1,103.2 L270.9,97.1 L271.8,71.7 L272.6,68.1 L273.4,69.6 L274.2,70.5 L275.0,60.9 L275.9,60.4 L276.7,60.4 L277.5,61.1 L278.3,60.4 L279.1,60.4 L280.0,60.9 L280.8,60.5 L281.6,61.0 L282.4,60.3 L283.2,60.5 L284.1,60.9 L284.9,60.4 L285.7,60.5 L286.5,60.8 L287.3,60.4 L288.2,60.4 L289.0,60.8 L289.8,60.6 L290.6,60.4 L291.4,60.8 L292.3,60.4 L293.1,60.4 L293.9,60.9 L294.7,60.3 L295.5,60.6 L296.4,60.4 L297.2,60.4 L298.0,60.9 L298.8,60.3 L299.6,60.4 L300.5,60.8 L301.3,60.4 L302.1,60.5 L302.9,60.7 L303.7,60.4 L304.6,60.4 L305.4,60.8 L306.2,60.5 L307.0,60.3 L307.8,60.8 L308.7,60.4 L309.5,60.8 L310.3,60.5 L311.1,60.4 L311.9,60.7 L312.8,60.4 L313.6,60.4 L314.4,60.8 L315.2,60.3 L316.0,60.4 L316.9,60.8 L317.7,60.4 L318.5,60.5 L319.3,60.8 L320.1,60.4 L321.0,60.7 L321.8,60.4 L322.6,60.5 L323.4,60.7 L324.2,60.4 L325.1,60.4 L325.9,60.7 L326.7,60.5 L327.5,60.4 L328.3,60.6 L329.2,60.3 L330.0,60.3 L330.8,60.9 L331.6,60.2 L332.4,60.4 L333.3,60.7 L334.1,60.3 L334.9,60.8 L335.7,60.3 L336.5,60.3 L337.4,60.5 L338.2,60.3 L339.0,60.5 L339.8,60.7 L340.6,60.3 L341.5,60.4 L342.3,60.7 L343.1,60.5 L343.9,60.4 L344.7,60.6 L345.6,60.4 L346.4,60.3 L347.2,60.8 L348.0,60.2 L348.8,60.8 L349.7,60.3 L350.5,60.3 L351.3,60.6 L352.1,60.3 L352.9,60.3 L353.8,60.6 L354.6,60.3 L355.4,60.5 L356.2,60.6 L357.0,60.3 L357.9,60.3 L358.7,60.7 L359.5,60.4 L360.3,60.3 L361.1,60.7 L362.0,60.3 L362.8,60.6 L363.6,60.4 L364.4,60.2 L365.2,60.8 L366.1,60.3 L366.9,60.3 L367.7,60.7 L368.5,60.3 L369.3,60.2 L370.2,60.5 L371.0,60.3 L371.8,60.4 L372.6,60.6 L373.4,60.3 L374.3,60.3 L375.1,60.7 L375.9,60.5 L376.7,60.7 L377.5,60.4 L378.4,60.3 L379.2,60.6 L380.0,60.5 L380.8,68.0 L381.6,98.9 L382.5,100.4 L383.3,98.9 L384.1,94.8 L384.9,89.3 L385.7,62.1 L386.6,60.4 L387.4,60.6 L388.2,60.4 L389.0,60.3 L389.8,60.8 L390.7,60.4 L391.5,60.4 L392.3,60.8 L393.1,60.4 L393.9,60.3 L394.8,60.6 L395.6,60.3 L396.4,60.4 L397.2,60.6 L398.0,60.3 L398.9,60.3 L399.7,60.7 L400.5,60.4 L401.3,60.2 L402.1,60.7 L403.0,60.3 L403.8,60.5 L404.6,60.4 L405.4,60.3 L406.2,60.5 L407.1,60.3 L407.9,60.4 L408.7,60.8 L409.5,60.3 L410.3,60.3 L411.2,60.6 L412.0,60.2 L412.8,60.4 L413.6,60.6 L414.4,60.2 L415.3,60.2 L416.1,60.6 L416.9,60.4 L417.7,60.5 L418.5,60.3 L419.4,60.3 L420.2,60.6 L421.0,60.4 L421.8,60.1 L422.6,60.7 L423.5,60.3 L424.3,60.3 L425.1,60.8 L425.9,60.2 L426.7,60.2 L427.6,60.5 L428.4,60.2 L429.2,60.7 L430.0,60.3 L430.8,60.3 L431.7,60.6 L432.5,60.3 L433.3,60.4 L434.1,60.5 L434.9,60.2 L435.8,60.3 L436.6,60.6 L437.4,60.4 L438.2,60.2 L439.0,60.6 L439.9,60.2 L440.7,60.2 L441.5,60.7 L442.3,60.1 L443.1,60.7 L444.0,60.3 L444.8,60.3 L445.6,60.7 L446.4,60.2 L447.2,60.3 L448.1,60.6 L448.9,60.2 L449.7,60.4 L450.5,60.6 L451.3,60.2 L452.2,60.2 L453.0,60.5 L453.8,60.4 L454.6,60.2 L455.4,60.6 L456.3,60.3 L457.1,60.5 L457.9,60.4 L458.7,60.2 L459.5,60.5 L460.4,60.3 L461.2,60.2 L462.0,60.7 L462.8,60.1 L463.6,60.3 L464.5,60.6 L465.3,60.3 L466.1,60.4 L466.9,60.6 L467.7,60.3 L468.6,60.3 L469.4,60.6 L470.2,60.4 L471.0,60.6 L471.8,60.3 L472.7,60.3 L473.5,60.6 L474.3,60.4 L475.1,60.3 L475.9,60.6 L476.8,60.3 L477.6,60.3 L478.4,60.9 L479.2,60.6 L480.0,60.6 L480.9,60.8 L481.7,60.6 L482.5,60.7 L483.3,60.6 L484.1,60.6 L485.0,61.0 L485.8,60.6 L486.6,60.7 L487.4,60.9 L488.2,60.6 L489.1,60.6 L489.9,60.9 L490.7,60.8 L491.5,60.6 L492.3,60.9 L493.2,60.6 L494.0,60.6 L494.8,61.1 L495.6,60.5 L496.4,60.6 L497.3,60.8 L498.1,60.6 L498.9,61.0 L499.7,60.6 L500.5,60.6 L501.4,61.0 L502.2,60.6 L503.0,60.7 L503.8,60.8 L504.6,60.7 L505.5,60.7 L506.3,61.0 L507.1,60.8 L507.9,60.7 L508.7,61.1 L509.6,60.7 L510.4,61.0 L511.2,60.8 L512.0,60.7 L512.8,61.0 L513.7,60.7 L514.5,60.7 L515.3,61.0 L516.1,60.7 L516.9,60.7 L517.8,60.9 L518.6,60.7 L519.4,60.8 L520.2,61.0 L521.0,60.7 L521.9,60.7 L522.7,61.0 L523.5,60.8 L524.3,60.9 L525.1,60.7 L526.0,60.7 L526.8,61.0 L527.6,60.8 L528.4,60.7 L529.2,61.1 L530.1,60.7 L530.9,60.7 L531.7,61.1 L532.5,60.7 L533.3,60.8 L534.2,61.1 L535.0,60.8 L535.8,60.9 L536.6,61.0 L537.4,60.8 L538.3,61.2 L539.1,60.8 L539.9,60.9 L540.7,61.1 L541.5,60.6 L542.4,60.8 L543.2,61.0 L544.0,60.9 L544.8,60.6 L545.6,61.2 L546.5,60.8 L547.3,60.8 L548.1,61.3 L548.9,60.8 L549.7,61.2 L550.6,60.9 L551.4,60.9 L552.2,61.3 L553.0,60.8 L553.8,60.9 L554.7,61.2 L555.5,60.8 L556.3,61.0 L557.1,61.1 L557.9,60.8 L558.8,60.8 L559.6,61.1 L560.4,61.0 L561.2,60.8 L562.0,61.2 L562.9,60.9 L563.7,61.2 L564.5,61.0 L565.3,60.6 L566.1,61.2 L567.0,60.9 L567.8,60.9 L568.6,61.3 L569.4,60.8 L570.2,60.9 L571.1,61.3 L571.9,60.9 L572.7,61.1 L573.5,61.3 L574.3,60.9 L575.2,60.9 L576.0,61.3 L576.8,61.1 L577.6,61.3 L578.4,61.0 L579.3,61.0 L580.1,61.3 L580.9,61.1 L581.7,60.9 L582.5,61.3 L583.4,60.9 L584.2,61.0 L585.0,61.4 L585.8,60.8 L586.6,61.0 L587.5,61.4 L588.3,61.0 L589.1,61.5 L589.9,61.0 L590.7,61.0 L591.6,61.4 L592.4,61.1 L593.2,61.2 L594.0,61.3 L594.8,61.0 L595.7,61.0 L596.5,61.3 L597.3,61.1 L598.1,61.0 L598.9,61.2 L599.8,60.7 L600.6,60.7 L601.4,61.2 L602.2,60.7 L603.0,61.0 L603.9,60.7 L604.7,60.7 L605.5,61.2 L606.3,60.6 L607.1,60.8 L608.0,61.1 L608.8,60.7 L609.6,60.9 L610.4,61.1 L611.2,60.7 L612.1,60.7 L612.9,61.0 L613.7,64.8 L614.5,61.1 L615.3,60.7 L616.2,60.7 L617.0,61.1 L617.8,60.9 L618.6,60.8 L619.4,61.1 L620.3,60.8 L621.1,60.8 L621.9,61.2 L622.7,60.8 L623.5,60.8 L624.4,61.1 L625.2,60.8 L626.0,60.9 L626.8,60.9 L627.6,60.8 L628.5,61.2 L629.3,60.8 L630.1,60.9 L630.9,61.1 L631.7,60.8 L632.6,60.8 L633.4,61.2 L634.2,61.0 L635.0,60.8 L635.8,61.1 L636.7,60.8 L637.5,60.8 L638.3,61.3 L639.1,60.8 L639.9,60.8 L640.8,61.2 L641.6,60.8 L642.4,61.3 L643.2,60.8 L644.0,60.8 L644.9,61.2 L645.7,60.8 L646.5,61.0 L647.3,61.0 L648.1,60.8 L649.0,60.9 L649.8,61.1 L650.6,61.0 L651.4,60.8 L652.2,61.1 L653.1,60.8 L653.9,61.2 L654.7,61.0 L655.5,61.1 L656.3,61.5 L657.2,61.3 L658.0,61.3 L658.8,61.7 L659.6,61.2 L660.4,61.3 L661.3,61.6 L662.1,61.3 L662.9,61.4 L663.7,61.6 L664.5,61.3 L665.4,61.3 L666.2,61.5 L667.0,61.4 L667.8,61.2 L668.6,61.3 L669.5,61.3 L670.3,61.6 L671.1,61.4 L671.9,61.3 L672.7,61.7 L673.6,61.3 L674.4,61.3 L675.2,61.8 L676.0,61.3 L676.8,61.3 L677.7,61.7 L678.5,61.4 L679.3,61.5 L680.1,61.6 L680.9,61.3 L681.8,61.6 L682.6,61.3 L683.4,61.5 L684.2,61.6 L685.0,61.4 L685.9,61.3 L686.7,61.6 L687.5,61.5 L688.3,61.1 L689.1,61.7 L690.0,61.4 L690.8,61.4 L691.6,61.9 L692.4,61.4 L693.2,61.7 L694.1,61.4 L694.9,61.3 L695.7,61.8 L696.5,61.4 L697.3,61.4 L698.2,61.7 L699.0,61.4 L699.8,61.5 L700.6,61.6 L701.4,61.4 L702.3,61.4 L703.1,61.6 L703.9,61.5 L704.7,61.4 L705.5,61.7 L706.4,61.4 L707.2,61.7 L708.0,61.6" />
<path class="line line-thin" d="M52.8,60.9 L53.6,55.6 L54.5,55.6 L55.3,55.9 L56.1,94.3 L56.9,93.4 L57.7,91.1 L58.6,89.8 L59.4,80.0 L60.2,56.0 L61.0,55.8 L61.8,87.4 L62.7,94.3 L63.5,91.9 L64.3,89.6 L65.1,83.8 L65.9,56.9 L66.8,56.0 L67.6,55.8 L68.4,83.1 L69.2,92.9 L70.0,90.7 L70.9,88.9 L71.7,72.7 L72.5,56.0 L73.3,55.9 L74.1,56.3 L75.0,55.9 L75.8,99.0 L76.6,101.0 L77.4,97.3 L78.2,92.5 L79.1,86.6 L79.9,57.3 L80.7,56.5 L81.5,93.4 L82.3,103.3 L83.2,95.8 L84.0,91.8 L84.8,90.1 L85.6,56.1 L86.4,56.0 L87.3,56.4 L88.1,56.2 L88.9,56.1 L89.7,55.9 L90.5,56.3 L91.4,55.9 L92.2,56.3 L93.0,56.1 L93.8,55.9 L94.6,56.3 L95.5,56.5 L96.3,64.8 L97.1,98.2 L97.9,96.3 L98.7,95.2 L99.6,90.4 L100.4,80.3 L101.2,56.1 L102.0,56.1 L102.8,56.0 L103.7,56.3 L104.5,56.0 L105.3,56.0 L106.1,56.3 L106.9,55.9 L107.8,56.0 L108.6,56.3 L109.4,56.1 L110.2,56.0 L111.0,56.4 L111.9,56.0 L112.7,56.0 L113.5,56.4 L114.3,56.0 L115.1,56.0 L116.0,56.3 L116.8,56.0 L117.6,56.5 L118.4,55.8 L119.2,56.0 L120.1,56.4 L120.9,56.0 L121.7,56.1 L122.5,56.3 L123.3,55.9 L124.2,55.9 L125.0,56.2 L125.8,56.0 L126.6,55.9 L127.4,56.2 L128.3,55.9 L129.1,55.9 L129.9,56.3 L130.7,55.8 L131.5,56.1 L132.4,55.8 L133.2,55.8 L134.0,56.3 L134.8,55.9 L135.6,93.8 L136.5,96.9 L137.3,95.9 L138.1,91.4 L138.9,87.1 L139.7,57.1 L140.6,55.9 L141.4,56.1 L142.2,56.0 L143.0,55.8 L143.8,56.1 L144.7,55.8 L145.5,56.1 L146.3,56.0 L147.1,55.8 L147.9,56.2 L148.8,55.9 L149.6,56.0 L150.4,56.6 L151.2,55.8 L152.0,56.0 L152.9,56.5 L153.7,56.1 L154.5,56.1 L155.3,56.4 L156.1,56.1 L157.0,55.9 L157.8,56.1 L158.6,55.9 L159.4,56.0 L160.2,55.8 L161.1,55.8 L161.9,56.2 L162.7,67.3 L163.5,55.8 L164.3,56.2 L165.2,55.8 L166.0,55.7 L166.8,56.2 L167.6,55.5 L168.4,55.7 L169.3,55.9 L170.1,55.7 L170.9,56.1 L171.7,55.7 L172.5,55.8 L173.4,56.2 L174.2,55.8 L175.0,56.0 L175.8,56.0 L176.6,64.7 L177.5,56.6 L178.3,67.3 L179.1,97.9 L179.9,95.8 L180.7,95.0 L181.6,90.0 L182.4,78.7 L183.2,56.4 L184.0,55.5 L184.8,56.1 L185.7,55.7 L186.5,55.6 L187.3,55.9 L188.1,55.5 L188.9,55.6 L189.8,55.9 L190.6,55.6 L191.4,55.9 L192.2,56.1 L193.0,55.8 L193.9,55.8 L194.7,56.0 L195.5,55.8 L196.3,55.7 L197.1,56.0 L198.0,55.7 L198.8,56.0 L199.6,55.8 L200.4,55.5 L201.2,55.9 L202.1,55.5 L202.9,55.5 L203.7,56.1 L204.5,55.7 L205.3,55.7 L206.2,55.8 L207.0,55.7 L207.8,55.8 L208.6,56.0 L209.4,55.7 L210.3,55.7 L211.1,56.2 L211.9,55.8 L212.7,56.1 L213.5,55.7 L214.4,55.7 L215.2,55.9 L216.0,55.9 L216.8,62.4 L217.6,88.4 L218.5,87.9 L219.3,86.7 L220.1,81.9 L220.9,80.5 L221.7,58.5 L222.6,55.5 L223.4,55.8 L224.2,55.6 L225.0,55.4 L225.8,55.5 L226.7,55.9 L227.5,55.4 L228.3,56.0 L229.1,55.4 L229.9,55.4 L230.8,55.7 L231.6,55.4 L232.4,55.6 L233.2,55.8 L234.0,55.7 L234.9,96.5 L235.7,102.8 L236.5,92.5 L237.3,76.4 L238.1,56.1 L239.0,55.7 L239.8,70.0 L240.6,91.6 L241.4,91.4 L242.2,90.1 L243.1,88.7 L243.9,86.1 L244.7,86.7 L245.5,85.3 L246.3,76.4 L247.2,55.9 L248.0,55.5 L248.8,55.6 L249.6,90.0 L250.4,92.9 L251.3,89.0 L252.1,89.9 L252.9,93.4 L253.7,92.1 L254.5,90.6 L255.4,90.3 L256.2,90.1 L257.0,78.8 L257.8,55.6 L258.6,56.0 L259.5,79.7 L260.3,95.6 L261.1,96.2 L261.9,95.7 L262.7,95.2 L263.6,95.3 L264.4,94.8 L265.2,95.0 L266.0,93.9 L266.8,94.7 L267.7,94.8 L268.5,96.2 L269.3,97.9 L270.1,99.5 L270.9,93.3 L271.8,67.1 L272.6,63.3 L273.4,64.9 L274.2,65.9 L275.0,55.9 L275.9,55.4 L276.7,55.4 L277.5,56.1 L278.3,55.4 L279.1,55.4 L280.0,55.9 L280.8,55.5 L281.6,56.0 L282.4,55.3 L283.2,55.5 L284.1,55.9 L284.9,55.4 L285.7,55.5 L286.5,55.8 L287.3,55.4 L288.2,55.4 L289.0,55.8 L289.8,55.5 L290.6,55.4 L291.4,55.8 L292.3,55.4 L293.1,55.4 L293.9,55.9 L294.7,55.3 L295.5,55.6 L296.4,55.4 L297.2,55.4 L298.0,55.9 L298.8,55.3 L299.6,55.4 L300.5,55.9 L301.3,55.4 L302.1,55.5 L302.9,55.7 L303.7,55.4 L304.6,55.3 L305.4,55.8 L306.2,55.5 L307.0,55.3 L307.8,55.9 L308.7,55.4 L309.5,55.8 L310.3,55.5 L311.1,55.4 L311.9,55.7 L312.8,55.4 L313.6,55.4 L314.4,55.8 L315.2,55.3 L316.0,55.4 L316.9,55.8 L317.7,55.3 L318.5,55.5 L319.3,55.8 L320.1,55.4 L321.0,55.7 L321.8,55.4 L322.6,55.5 L323.4,55.7 L324.2,55.4 L325.1,55.4 L325.9,55.7 L326.7,55.5 L327.5,55.3 L328.3,55.6 L329.2,55.3 L330.0,55.3 L330.8,55.9 L331.6,55.2 L332.4,55.4 L333.3,55.7 L334.1,55.3 L334.9,55.8 L335.7,55.3 L336.5,55.3 L337.4,55.5 L338.2,55.3 L339.0,55.5 L339.8,55.7 L340.6,55.3 L341.5,55.3 L342.3,55.7 L343.1,55.5 L343.9,55.4 L344.7,55.7 L345.6,55.3 L346.4,55.3 L347.2,55.8 L348.0,55.2 L348.8,55.8 L349.7,55.3 L350.5,55.3 L351.3,55.6 L352.1,55.3 L352.9,55.3 L353.8,55.6 L354.6,55.3 L355.4,55.5 L356.2,55.6 L357.0,55.3 L357.9,55.3 L358.7,55.7 L359.5,55.4 L360.3,55.3 L361.1,55.7 L362.0,55.3 L362.8,55.6 L363.6,55.4 L364.4,55.2 L365.2,55.8 L366.1,55.3 L366.9,55.3 L367.7,55.7 L368.5,55.3 L369.3,55.2 L370.2,55.5 L371.0,55.3 L371.8,55.4 L372.6,55.6 L373.4,55.3 L374.3,55.3 L375.1,55.7 L375.9,55.5 L376.7,55.7 L377.5,55.3 L378.4,55.3 L379.2,55.7 L380.0,55.5 L380.8,63.2 L381.6,95.1 L382.5,96.7 L383.3,95.2 L384.1,90.9 L384.9,85.2 L385.7,57.2 L386.6,55.4 L387.4,55.5 L388.2,55.4 L389.0,55.3 L389.8,55.8 L390.7,55.3 L391.5,55.3 L392.3,55.8 L393.1,55.4 L393.9,55.3 L394.8,55.5 L395.6,55.3 L396.4,55.4 L397.2,55.5 L398.0,55.2 L398.9,55.3 L399.7,55.7 L400.5,55.4 L401.3,55.1 L402.1,55.7 L403.0,55.3 L403.8,55.5 L404.6,55.4 L405.4,55.3 L406.2,55.5 L407.1,55.3 L407.9,55.3 L408.7,55.9 L409.5,55.3 L410.3,55.3 L411.2,55.6 L412.0,55.2 L412.8,55.4 L413.6,55.6 L414.4,55.2 L415.3,55.2 L416.1,55.6 L416.9,55.4 L417.7,55.5 L418.5,55.2 L419.4,55.3 L420.2,55.6 L421.0,55.4 L421.8,55.1 L422.6,55.7 L423.5,55.3 L424.3,55.3 L425.1,55.8 L425.9,55.2 L426.7,55.2 L427.6,55.5 L428.4,55.2 L429.2,55.7 L430.0,55.3 L430.8,55.3 L431.7,55.6 L432.5,55.3 L433.3,55.4 L434.1,55.5 L434.9,55.2 L435.8,55.3 L436.6,55.6 L437.4,55.4 L438.2,55.2 L439.0,55.5 L439.9,55.2 L440.7,55.2 L441.5,55.7 L442.3,55.1 L443.1,55.7 L444.0,55.2 L444.8,55.2 L445.6,55.7 L446.4,55.2 L447.2,55.3 L448.1,55.6 L448.9,55.2 L449.7,55.4 L450.5,55.6 L451.3,55.2 L452.2,55.2 L453.0,55.5 L453.8,55.4 L454.6,55.2 L455.4,55.6 L456.3,55.2 L457.1,55.5 L457.9,55.4 L458.7,55.2 L459.5,55.5 L460.4,55.2 L461.2,55.2 L462.0,55.7 L462.8,55.1 L463.6,55.3 L464.5,55.6 L465.3,55.3 L466.1,55.4 L466.9,55.5 L467.7,55.3 L468.6,55.3 L469.4,55.6 L470.2,55.4 L471.0,55.6 L471.8,55.3 L472.7,55.3 L473.5,55.6 L474.3,55.4 L475.1,55.3 L475.9,55.6 L476.8,55.3 L477.6,55.3 L478.4,55.9 L479.2,55.5 L480.0,55.6 L480.9,55.8 L481.7,55.6 L482.5,55.7 L483.3,55.7 L484.1,55.6 L485.0,56.0 L485.8,55.6 L486.6,55.7 L487.4,55.9 L488.2,55.6 L489.1,55.6 L489.9,55.9 L490.7,55.8 L491.5,55.6 L492.3,55.9 L493.2,55.6 L494.0,55.6 L494.8,56.1 L495.6,55.5 L496.4,55.6 L497.3,55.8 L498.1,55.6 L498.9,56.1 L499.7,55.6 L500.5,55.6 L501.4,56.0 L502.2,55.6 L503.0,55.7 L503.8,55.8 L504.6,55.7 L505.5,55.7 L506.3,56.0 L507.1,55.8 L507.9,55.7 L508.7,56.1 L509.6,55.7 L510.4,56.0 L511.2,55.9 L512.0,55.7 L512.8,56.0 L513.7,55.7 L514.5,55.7 L515.3,56.1 L516.1,55.7 L516.9,55.7 L517.8,56.0 L518.6,55.7 L519.4,55.8 L520.2,56.0 L521.0,55.7 L521.9,55.7 L522.7,56.0 L523.5,55.8 L524.3,55.9 L525.1,55.7 L526.0,55.7 L526.8,56.1 L527.6,55.9 L528.4,55.7 L529.2,56.1 L530.1,55.7 L530.9,55.7 L531.7,56.1 L532.5,55.7 L533.3,55.8 L534.2,56.1 L535.0,55.8 L535.8,55.9 L536.6,56.0 L537.4,55.8 L538.3,56.2 L539.1,55.8 L539.9,55.9 L540.7,56.1 L541.5,55.7 L542.4,55.8 L543.2,56.1 L544.0,55.9 L544.8,55.6 L545.6,56.2 L546.5,55.8 L547.3,55.8 L548.1,56.3 L548.9,55.8 L549.7,56.2 L550.6,55.9 L551.4,55.9 L552.2,56.3 L553.0,55.8 L553.8,55.9 L554.7,56.2 L555.5,55.8 L556.3,56.0 L557.1,56.1 L557.9,55.8 L558.8,55.8 L559.6,56.2 L560.4,56.0 L561.2,55.8 L562.0,56.2 L562.9,55.9 L563.7,56.2 L564.5,56.0 L565.3,55.7 L566.1,56.2 L567.0,55.9 L567.8,55.9 L568.6,56.4 L569.4,55.8 L570.2,55.9 L571.1,56.3 L571.9,55.9 L572.7,56.1 L573.5,56.3 L574.3,55.9 L575.2,55.9 L576.0,56.3 L576.8,56.1 L577.6,56.3 L578.4,56.0 L579.3,56.0 L580.1,56.3 L580.9,56.1 L581.7,55.9 L582.5,56.3 L583.4,55.9 L584.2,56.0 L585.0,56.5 L585.8,55.8 L586.6,56.0 L587.5,56.4 L588.3,56.0 L589.1,56.5 L589.9,56.0 L590.7,56.0 L591.6,56.4 L592.4,56.1 L593.2,56.2 L594.0,56.3 L594.8,56.0 L595.7,56.0 L596.5,56.4 L597.3,56.1 L598.1,56.0 L598.9,56.3 L599.8,55.7 L600.6,55.7 L601.4,56.2 L602.2,55.7 L603.0,56.0 L603.9,55.7 L604.7,55.7 L605.5,56.2 L606.3,55.6 L607.1,55.8 L608.0,56.1 L608.8,55.7 L609.6,55.9 L610.4,56.1 L611.2,55.7 L612.1,55.7 L612.9,56.0 L613.7,59.9 L614.5,56.1 L615.3,55.7 L616.2,55.7 L617.0,56.1 L617.8,55.9 L618.6,55.8 L619.4,56.1 L620.3,55.8 L621.1,55.8 L621.9,56.3 L622.7,55.8 L623.5,55.8 L624.4,56.1 L625.2,55.8 L626.0,55.9 L626.8,55.9 L627.6,55.8 L628.5,56.2 L629.3,55.8 L630.1,55.9 L630.9,56.1 L631.7,55.8 L632.6,55.9 L633.4,56.2 L634.2,56.0 L635.0,55.8 L635.8,56.1 L636.7,55.9 L637.5,55.8 L638.3,56.3 L639.1,55.8 L639.9,55.8 L640.8,56.2 L641.6,55.8 L642.4,56.3 L643.2,55.8 L644.0,55.9 L644.9,56.2 L645.7,55.8 L646.5,56.0 L647.3,56.0 L648.1,55.8 L649.0,55.9 L649.8,56.1 L650.6,56.0 L651.4,55.8 L652.2,56.1 L653.1,55.8 L653.9,56.2 L654.7,56.0 L655.5,56.1 L656.3,56.6 L657.2,56.3 L658.0,56.4 L658.8,56.8 L659.6,56.3 L660.4,56.3 L661.3,56.6 L662.1,56.3 L662.9,56.4 L663.7,56.6 L664.5,56.3 L665.4,56.3 L666.2,56.5 L667.0,56.4 L667.8,56.2 L668.6,56.3 L669.5,56.3 L670.3,56.7 L671.1,56.4 L671.9,56.3 L672.7,56.7 L673.6,56.4 L674.4,56.3 L675.2,56.8 L676.0,56.3 L676.8,56.4 L677.7,56.7 L678.5,56.4 L679.3,56.5 L680.1,56.6 L680.9,56.3 L681.8,56.7 L682.6,56.4 L683.4,56.5 L684.2,56.6 L685.0,56.4 L685.9,56.4 L686.7,56.6 L687.5,56.5 L688.3,56.1 L689.1,56.7 L690.0,56.4 L690.8,56.4 L691.6,56.9 L692.4,56.4 L693.2,56.7 L694.1,56.4 L694.9,56.4 L695.7,56.8 L696.5,56.4 L697.3,56.4 L698.2,56.7 L699.0,56.4 L699.8,56.5 L700.6,56.6 L701.4,56.4 L702.3,56.4 L703.1,56.7 L703.9,56.5 L704.7,56.4 L705.5,56.8 L706.4,56.5 L707.2,56.7 L708.0,56.6" />
<circle class="hit" cx="52.8" cy="60.9" r="6"><title>Step 10: 46.9k tokens per second, 82.6% MFU</title></circle>
<circle class="hit" cx="59.4" cy="80.0" r="6"><title>Step 90: 41.1k tokens per second, 72.4% MFU</title></circle>
<circle class="hit" cx="65.9" cy="56.9" r="6"><title>Step 170: 48.1k tokens per second, 84.7% MFU</title></circle>
<circle class="hit" cx="72.5" cy="56.0" r="6"><title>Step 250: 48.3k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="79.1" cy="86.6" r="6"><title>Step 330: 39.1k tokens per second, 68.9% MFU</title></circle>
<circle class="hit" cx="85.6" cy="56.1" r="6"><title>Step 410: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="92.2" cy="56.3" r="6"><title>Step 490: 48.3k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="98.7" cy="95.2" r="6"><title>Step 570: 36.5k tokens per second, 64.3% MFU</title></circle>
<circle class="hit" cx="105.3" cy="56.0" r="6"><title>Step 650: 48.3k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="111.9" cy="56.0" r="6"><title>Step 730: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="118.4" cy="55.8" r="6"><title>Step 810: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="125.0" cy="56.2" r="6"><title>Step 890: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="131.5" cy="56.1" r="6"><title>Step 970: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="138.1" cy="91.4" r="6"><title>Step 1050: 37.6k tokens per second, 66.3% MFU</title></circle>
<circle class="hit" cx="144.7" cy="55.8" r="6"><title>Step 1130: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="151.2" cy="55.8" r="6"><title>Step 1210: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="157.8" cy="56.1" r="6"><title>Step 1290: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="164.3" cy="56.2" r="6"><title>Step 1370: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="170.9" cy="56.1" r="6"><title>Step 1450: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="177.5" cy="56.6" r="6"><title>Step 1530: 48.2k tokens per second, 84.8% MFU</title></circle>
<circle class="hit" cx="184.0" cy="55.5" r="6"><title>Step 1610: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="190.6" cy="55.6" r="6"><title>Step 1690: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="197.1" cy="56.0" r="6"><title>Step 1770: 48.3k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="203.7" cy="56.1" r="6"><title>Step 1850: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="210.3" cy="55.7" r="6"><title>Step 1930: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="216.8" cy="62.4" r="6"><title>Step 2010: 46.4k tokens per second, 81.8% MFU</title></circle>
<circle class="hit" cx="223.4" cy="55.8" r="6"><title>Step 2090: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="229.9" cy="55.4" r="6"><title>Step 2170: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="236.5" cy="92.5" r="6"><title>Step 2250: 37.3k tokens per second, 65.8% MFU</title></circle>
<circle class="hit" cx="243.1" cy="88.7" r="6"><title>Step 2330: 38.5k tokens per second, 67.8% MFU</title></circle>
<circle class="hit" cx="249.6" cy="90.0" r="6"><title>Step 2410: 38.1k tokens per second, 67.1% MFU</title></circle>
<circle class="hit" cx="256.2" cy="90.1" r="6"><title>Step 2490: 38.0k tokens per second, 67.0% MFU</title></circle>
<circle class="hit" cx="262.7" cy="95.2" r="6"><title>Step 2570: 36.5k tokens per second, 64.3% MFU</title></circle>
<circle class="hit" cx="269.3" cy="97.9" r="6"><title>Step 2650: 35.7k tokens per second, 62.9% MFU</title></circle>
<circle class="hit" cx="275.9" cy="55.4" r="6"><title>Step 2730: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="282.4" cy="55.3" r="6"><title>Step 2810: 48.6k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="289.0" cy="55.8" r="6"><title>Step 2890: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="295.5" cy="55.6" r="6"><title>Step 2970: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="302.1" cy="55.5" r="6"><title>Step 3050: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="308.7" cy="55.4" r="6"><title>Step 3130: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="315.2" cy="55.3" r="6"><title>Step 3210: 48.6k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="321.8" cy="55.4" r="6"><title>Step 3290: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="328.3" cy="55.6" r="6"><title>Step 3370: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="334.9" cy="55.8" r="6"><title>Step 3450: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="341.5" cy="55.3" r="6"><title>Step 3530: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="348.0" cy="55.2" r="6"><title>Step 3610: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="354.6" cy="55.3" r="6"><title>Step 3690: 48.6k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="361.1" cy="55.7" r="6"><title>Step 3770: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="367.7" cy="55.7" r="6"><title>Step 3850: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="374.3" cy="55.3" r="6"><title>Step 3930: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="380.8" cy="63.2" r="6"><title>Step 4010: 46.2k tokens per second, 81.3% MFU</title></circle>
<circle class="hit" cx="387.4" cy="55.5" r="6"><title>Step 4090: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="393.9" cy="55.3" r="6"><title>Step 4170: 48.6k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="400.5" cy="55.4" r="6"><title>Step 4250: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="407.1" cy="55.3" r="6"><title>Step 4330: 48.6k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="413.6" cy="55.6" r="6"><title>Step 4410: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="420.2" cy="55.6" r="6"><title>Step 4490: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="426.7" cy="55.2" r="6"><title>Step 4570: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="433.3" cy="55.4" r="6"><title>Step 4650: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="439.9" cy="55.2" r="6"><title>Step 4730: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="446.4" cy="55.2" r="6"><title>Step 4810: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="453.0" cy="55.5" r="6"><title>Step 4890: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="459.5" cy="55.5" r="6"><title>Step 4970: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="466.1" cy="55.4" r="6"><title>Step 5050: 48.5k tokens per second, 85.5% MFU</title></circle>
<circle class="hit" cx="472.7" cy="55.3" r="6"><title>Step 5130: 48.6k tokens per second, 85.6% MFU</title></circle>
<circle class="hit" cx="479.2" cy="55.5" r="6"><title>Step 5210: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="485.8" cy="55.6" r="6"><title>Step 5290: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="492.3" cy="55.9" r="6"><title>Step 5370: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="498.9" cy="56.1" r="6"><title>Step 5450: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="505.5" cy="55.7" r="6"><title>Step 5530: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="512.0" cy="55.7" r="6"><title>Step 5610: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="518.6" cy="55.7" r="6"><title>Step 5690: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="525.1" cy="55.7" r="6"><title>Step 5770: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="531.7" cy="56.1" r="6"><title>Step 5850: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="538.3" cy="56.2" r="6"><title>Step 5930: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="544.8" cy="55.6" r="6"><title>Step 6010: 48.5k tokens per second, 85.4% MFU</title></circle>
<circle class="hit" cx="551.4" cy="55.9" r="6"><title>Step 6090: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="557.9" cy="55.8" r="6"><title>Step 6170: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="564.5" cy="56.0" r="6"><title>Step 6250: 48.3k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="571.1" cy="56.3" r="6"><title>Step 6330: 48.3k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="577.6" cy="56.3" r="6"><title>Step 6410: 48.3k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="584.2" cy="56.0" r="6"><title>Step 6490: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="590.7" cy="56.0" r="6"><title>Step 6570: 48.3k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="597.3" cy="56.1" r="6"><title>Step 6650: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="603.9" cy="55.7" r="6"><title>Step 6730: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="610.4" cy="56.1" r="6"><title>Step 6810: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="617.0" cy="56.1" r="6"><title>Step 6890: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="623.5" cy="55.8" r="6"><title>Step 6970: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="630.1" cy="55.9" r="6"><title>Step 7050: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="636.7" cy="55.9" r="6"><title>Step 7130: 48.4k tokens per second, 85.2% MFU</title></circle>
<circle class="hit" cx="643.2" cy="55.8" r="6"><title>Step 7210: 48.4k tokens per second, 85.3% MFU</title></circle>
<circle class="hit" cx="649.8" cy="56.1" r="6"><title>Step 7290: 48.3k tokens per second, 85.1% MFU</title></circle>
<circle class="hit" cx="656.3" cy="56.6" r="6"><title>Step 7370: 48.2k tokens per second, 84.9% MFU</title></circle>
<circle class="hit" cx="662.9" cy="56.4" r="6"><title>Step 7450: 48.2k tokens per second, 84.9% MFU</title></circle>
<circle class="hit" cx="669.5" cy="56.3" r="6"><title>Step 7530: 48.3k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="676.0" cy="56.3" r="6"><title>Step 7610: 48.3k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="682.6" cy="56.4" r="6"><title>Step 7690: 48.2k tokens per second, 85.0% MFU</title></circle>
<circle class="hit" cx="689.1" cy="56.7" r="6"><title>Step 7770: 48.1k tokens per second, 84.8% MFU</title></circle>
<circle class="hit" cx="695.7" cy="56.8" r="6"><title>Step 7850: 48.1k tokens per second, 84.7% MFU</title></circle>
<circle class="hit" cx="702.3" cy="56.4" r="6"><title>Step 7930: 48.2k tokens per second, 85.0% MFU</title></circle>
</svg>

</div>
<figcaption>Throughput and model-FLOPs utilisation over the run. It held 48,000 tokens a second at 85% of the card's theoretical peak from the first step to the last. The dips are benchmark runs sharing the GPU with training, which is the price of measuring as you go.</figcaption>
</figure>

<h2 id="against-public-models">Against public models</h2>

<p>I ran every model through the same <a href="https://github.com/EleutherAI/lm-evaluation-harness">lm-evaluation-harness</a> tasks on the same machine. Before evaluating my checkpoints, I converted them to the Hugging Face Llama format and confirmed the converted model gives the same outputs as the original.</p>

<figure class="wide">
<ul class="legend">
<li><span class="legend-key"></span>My model, at each checkpoint</li>
<li><span class="legend-key k-2"></span>Pythia-410M</li>
<li><span class="legend-key k-other"></span>Other public models</li>
</ul>
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 330" role="img" aria-labelledby="accuracy-against-trainin-t accuracy-against-trainin-d">
<title id="accuracy-against-trainin-t">Accuracy against training tokens</title>
<desc id="accuracy-against-trainin-d">Average accuracy against training tokens on a log scale. My model climbs from 0.328 at 262M tokens to 0.445 at 4.2B. Pythia-410M scores 0.348 at 2.1B tokens and 0.493 at 300B. Pythia-1B scores 0.298 at 1.07B. SmolLM2-360M scores 0.587 at 4T tokens and Qwen2.5-0.5B 0.565 at 18T.</desc>
<text class="axis-label" x="44" y="16">average zero-shot accuracy, 9 tasks</text>
<line class="grid" x1="44" x2="730" y1="286.0" y2="286.0" />
<text class="tick" x="36" y="290.0" text-anchor="end">0.25</text>
<line class="grid" x1="44" x2="730" y1="250.0" y2="250.0" />
<text class="tick" x="36" y="254.0" text-anchor="end">0.30</text>
<line class="grid" x1="44" x2="730" y1="214.0" y2="214.0" />
<text class="tick" x="36" y="218.0" text-anchor="end">0.35</text>
<line class="grid" x1="44" x2="730" y1="178.0" y2="178.0" />
<text class="tick" x="36" y="182.0" text-anchor="end">0.40</text>
<line class="grid" x1="44" x2="730" y1="142.0" y2="142.0" />
<text class="tick" x="36" y="146.0" text-anchor="end">0.45</text>
<line class="grid" x1="44" x2="730" y1="106.0" y2="106.0" />
<text class="tick" x="36" y="110.0" text-anchor="end">0.50</text>
<line class="grid" x1="44" x2="730" y1="70.0" y2="70.0" />
<text class="tick" x="36" y="74.0" text-anchor="end">0.55</text>
<line class="grid" x1="44" x2="730" y1="34.0" y2="34.0" />
<text class="tick" x="36" y="38.0" text-anchor="end">0.60</text>
<text class="tick" x="44.0" y="306" text-anchor="middle">100M</text>
<text class="tick" x="169.2" y="306" text-anchor="middle">1B</text>
<text class="tick" x="294.5" y="306" text-anchor="middle">10B</text>
<text class="tick" x="419.7" y="306" text-anchor="middle">100B</text>
<text class="tick" x="545.0" y="306" text-anchor="middle">1T</text>
<text class="tick" x="670.2" y="306" text-anchor="middle">10T</text>
<text class="axis-label" x="730" y="324" text-anchor="end">training tokens, log scale</text>
<path class="line line-2" d="M172.9,250.7 L209.6,215.8" />
<path class="line line-2 line-gap" d="M209.6,215.8 L479.5,111.2" />
<path class="line" d="M96.4,229.8 L134.1,182.9 L156.2,175.0 L171.9,169.2 L209.5,154.5 L247.2,145.7" />
<circle class="dot dot-2" cx="172.9" cy="250.7" r="4"><title>Pythia-410M, 1.07B tokens: 0.299</title></circle>
<circle class="dot dot-2" cx="209.6" cy="215.8" r="4"><title>Pythia-410M, 2.1B tokens: 0.348</title></circle>
<circle class="dot dot-2" cx="479.5" cy="111.2" r="4"><title>Pythia-410M, 300B tokens: 0.493</title></circle>
<circle class="dot" cx="96.4" cy="229.8" r="4"><title>My model, 0.26B tokens: 0.328</title></circle>
<circle class="dot" cx="134.1" cy="182.9" r="4"><title>My model, 0.52B tokens: 0.393</title></circle>
<circle class="dot" cx="156.2" cy="175.0" r="4"><title>My model, 0.79B tokens: 0.404</title></circle>
<circle class="dot" cx="171.9" cy="169.2" r="4"><title>My model, 1.05B tokens: 0.412</title></circle>
<circle class="dot" cx="209.5" cy="154.5" r="4"><title>My model, 2.10B tokens: 0.433</title></circle>
<circle class="dot" cx="247.2" cy="145.7" r="4"><title>My model, 4.19B tokens: 0.445</title></circle>
<circle class="dot dot-other" cx="172.9" cy="251.8" r="4"><title>Pythia-1B, 1.07B tokens: 0.298</title></circle>
<text class="note" x="180.9" y="267.8" text-anchor="start">Pythia-1B</text>
<circle class="dot dot-other" cx="620.4" cy="43.6" r="4"><title>SmolLM2-360M, 4000B tokens: 0.587</title></circle>
<text class="note" x="610.4" y="37.6" text-anchor="end">SmolLM2-360M</text>
<circle class="dot dot-other" cx="702.2" cy="59.1" r="4"><title>Qwen2.5-0.5B, 18000B tokens: 0.565</title></circle>
<text class="note" x="702.2" y="81.1" text-anchor="middle">Qwen2.5-0.5B</text>
<text class="value" x="257.2" y="137.7">Mine, 4.2B: 0.445</text>
<text class="value value-2" x="219.6" y="231.8">Pythia-410M, 2.1B: 0.348</text>
<text class="value value-2" x="479.5" y="99.2" text-anchor="middle">Pythia-410M, 300B: 0.493</text>
</svg>

</div>
<figcaption>Average zero-shot accuracy on nine tasks against training tokens, on a log scale. Pythia-410M was only measured at the three points shown; the dotted line just joins them. At 1.07B tokens, Pythia-1B and Pythia-410M score almost the same (0.298 and 0.299), so their dots overlap.</figcaption>
</figure>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 330" role="img" aria-labelledby="every-model-compared-t every-model-compared-d">
<title id="every-model-compared-t">Every model compared</title>
<desc id="every-model-compared-d">Average zero-shot accuracy for every model measured, sorted low to high. My checkpoints are the filled bars: 0.412 at 1.05B tokens, 0.433 at 2.10B and 0.445 at 4.19B, with the weight-averaged version just behind at 0.443. Pythia-410M scores 0.348 at a matched 2.1B tokens and 0.493 fully trained; SmolLM2-360M leads at 0.587.</desc>
<text class="axis-label" x="46" y="16">average zero-shot accuracy, 9 tasks</text>
<line class="grid" x1="46" x2="740" y1="268.0" y2="268.0" />
<text class="tick" x="38" y="272.0" text-anchor="end">0.0</text>
<line class="grid" x1="46" x2="740" y1="192.5" y2="192.5" />
<text class="tick" x="38" y="196.5" text-anchor="end">0.2</text>
<line class="grid" x1="46" x2="740" y1="117.0" y2="117.0" />
<text class="tick" x="38" y="121.0" text-anchor="end">0.4</text>
<line class="grid" x1="46" x2="740" y1="41.5" y2="41.5" />
<text class="tick" x="38" y="45.5" text-anchor="end">0.6</text>
<rect class="bar bar-2" x="59.9" y="155.7" width="41.6" height="112.3" rx="2"><title>Pythia-1B, 1.07B tokens: 0.298</title></rect>
<text class="value" x="80.7" y="148.7" text-anchor="middle">0.298</text>
<text class="tick" x="80.7" y="284" text-anchor="middle">Pythia</text>
<text class="note" x="80.7" y="298" text-anchor="middle" style="font-size:10.5px">1B, 1.07B</text>
<rect class="bar bar-2" x="129.3" y="155.2" width="41.6" height="112.8" rx="2"><title>Pythia-410M, 1.07B tokens: 0.299</title></rect>
<text class="value" x="150.1" y="148.2" text-anchor="middle">0.299</text>
<text class="tick" x="150.1" y="284" text-anchor="middle">Pythia</text>
<text class="note" x="150.1" y="298" text-anchor="middle" style="font-size:10.5px">410M, 1.07B</text>
<rect class="bar bar-2" x="198.7" y="136.8" width="41.6" height="131.2" rx="2"><title>Pythia-410M, 2.1B tokens: 0.348</title></rect>
<text class="value" x="219.5" y="129.8" text-anchor="middle">0.348</text>
<text class="tick" x="219.5" y="284" text-anchor="middle">Pythia</text>
<text class="note" x="219.5" y="298" text-anchor="middle" style="font-size:10.5px">410M, 2.1B</text>
<rect class="bar" x="268.1" y="112.4" width="41.6" height="155.6" rx="2"><title>Mine, 1.05B tokens: 0.412</title></rect>
<text class="value" x="288.9" y="105.4" text-anchor="middle">0.412</text>
<text class="tick" x="288.9" y="284" text-anchor="middle">Mine</text>
<text class="note" x="288.9" y="298" text-anchor="middle" style="font-size:10.5px">1.05B</text>
<rect class="bar" x="337.5" y="104.7" width="41.6" height="163.3" rx="2"><title>Mine, 2.10B tokens: 0.433</title></rect>
<text class="value" x="358.3" y="97.7" text-anchor="middle">0.433</text>
<text class="tick" x="358.3" y="284" text-anchor="middle">Mine</text>
<text class="note" x="358.3" y="298" text-anchor="middle" style="font-size:10.5px">2.10B</text>
<rect class="bar" x="406.9" y="100.8" width="41.6" height="167.2" rx="2"><title>Mine, EMA, 4.19B tokens: 0.443</title></rect>
<text class="value" x="427.7" y="93.8" text-anchor="middle">0.443</text>
<text class="tick" x="427.7" y="284" text-anchor="middle">Mine, EMA</text>
<text class="note" x="427.7" y="298" text-anchor="middle" style="font-size:10.5px">4.19B</text>
<rect class="bar" x="476.3" y="100.1" width="41.6" height="167.9" rx="2"><title>Mine, 4.19B tokens: 0.445</title></rect>
<text class="value" x="497.1" y="93.1" text-anchor="middle">0.445</text>
<text class="tick" x="497.1" y="284" text-anchor="middle">Mine</text>
<text class="note" x="497.1" y="298" text-anchor="middle" style="font-size:10.5px">4.19B</text>
<rect class="bar bar-2" x="545.7" y="82.0" width="41.6" height="186.0" rx="2"><title>Pythia-410M, 300B tokens: 0.493</title></rect>
<text class="value" x="566.5" y="75.0" text-anchor="middle">0.493</text>
<text class="tick" x="566.5" y="284" text-anchor="middle">Pythia</text>
<text class="note" x="566.5" y="298" text-anchor="middle" style="font-size:10.5px">410M, 300B</text>
<rect class="bar bar-2" x="615.1" y="54.7" width="41.6" height="213.3" rx="2"><title>Qwen2.5-0.5B, 18T tokens: 0.565</title></rect>
<text class="value" x="635.9" y="47.7" text-anchor="middle">0.565</text>
<text class="tick" x="635.9" y="284" text-anchor="middle">Qwen2.5</text>
<text class="note" x="635.9" y="298" text-anchor="middle" style="font-size:10.5px">0.5B, 18T</text>
<rect class="bar bar-2" x="684.5" y="46.6" width="41.6" height="221.4" rx="2"><title>SmolLM2-360M, 4T tokens: 0.587</title></rect>
<text class="value" x="705.3" y="39.6" text-anchor="middle">0.587</text>
<text class="tick" x="705.3" y="284" text-anchor="middle">SmolLM2</text>
<text class="note" x="705.3" y="298" text-anchor="middle" style="font-size:10.5px">360M, 4T</text>
</svg>

</div>
<figcaption>Every model I measured, sorted by score. Filled bars are mine. The gap between my best and the fully trained Pythia-410M is the cost of 72 times less data; the gap from there to SmolLM2 is mostly what data selection buys.</figcaption>
</figure>

<details>
  <summary>Show every task for every model</summary>

  <table>
    <thead>
      <tr>
        <th>Model</th>
        <th style="text-align: right">Tokens</th>
        <th style="text-align: right">Avg</th>
        <th style="text-align: right">LAMBADA</th>
        <th style="text-align: right">SciQ</th>
        <th style="text-align: right">ARC-Easy</th>
        <th style="text-align: right">BoolQ</th>
        <th style="text-align: right">PIQA</th>
        <th style="text-align: right">OpenBookQA</th>
        <th style="text-align: right">HellaSwag</th>
        <th style="text-align: right">WinoGrande</th>
        <th style="text-align: right">ARC-Challenge</th>
        <th style="text-align: right">WikiText ppl</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><strong>Mine</strong></td>
        <td style="text-align: right"><strong>4.19B</strong></td>
        <td style="text-align: right"><strong>0.445</strong></td>
        <td style="text-align: right">0.230</td>
        <td style="text-align: right">0.660</td>
        <td style="text-align: right">0.458</td>
        <td style="text-align: right">0.621</td>
        <td style="text-align: right">0.628</td>
        <td style="text-align: right">0.312</td>
        <td style="text-align: right">0.326</td>
        <td style="text-align: right">0.502</td>
        <td style="text-align: right">0.265</td>
        <td style="text-align: right">42.1</td>
      </tr>
      <tr>
        <td>Mine, weight-averaged</td>
        <td style="text-align: right">4.19B</td>
        <td style="text-align: right">0.443</td>
        <td style="text-align: right">0.228</td>
        <td style="text-align: right">0.655</td>
        <td style="text-align: right">0.460</td>
        <td style="text-align: right">0.621</td>
        <td style="text-align: right">0.631</td>
        <td style="text-align: right">0.312</td>
        <td style="text-align: right">0.321</td>
        <td style="text-align: right">0.495</td>
        <td style="text-align: right">0.265</td>
        <td style="text-align: right">42.5</td>
      </tr>
      <tr>
        <td>Pythia-410M</td>
        <td style="text-align: right">1.07B</td>
        <td style="text-align: right">0.299</td>
        <td style="text-align: right">0.000</td>
        <td style="text-align: right">0.246</td>
        <td style="text-align: right">0.285</td>
        <td style="text-align: right">0.386</td>
        <td style="text-align: right">0.523</td>
        <td style="text-align: right">0.268</td>
        <td style="text-align: right">0.251</td>
        <td style="text-align: right">0.495</td>
        <td style="text-align: right">0.237</td>
        <td style="text-align: right">974.8</td>
      </tr>
      <tr>
        <td>Pythia-1B</td>
        <td style="text-align: right">1.07B</td>
        <td style="text-align: right">0.297</td>
        <td style="text-align: right">0.000</td>
        <td style="text-align: right">0.261</td>
        <td style="text-align: right">0.294</td>
        <td style="text-align: right">0.379</td>
        <td style="text-align: right">0.522</td>
        <td style="text-align: right">0.268</td>
        <td style="text-align: right">0.252</td>
        <td style="text-align: right">0.493</td>
        <td style="text-align: right">0.208</td>
        <td style="text-align: right">598.1</td>
      </tr>
      <tr>
        <td>Pythia-410M</td>
        <td style="text-align: right">2.1B</td>
        <td style="text-align: right">0.348</td>
        <td style="text-align: right">0.038</td>
        <td style="text-align: right">0.415</td>
        <td style="text-align: right">0.295</td>
        <td style="text-align: right">0.597</td>
        <td style="text-align: right">0.534</td>
        <td style="text-align: right">0.250</td>
        <td style="text-align: right">0.260</td>
        <td style="text-align: right">0.516</td>
        <td style="text-align: right">0.222</td>
        <td style="text-align: right">172.4</td>
      </tr>
      <tr>
        <td>Pythia-410M</td>
        <td style="text-align: right">300B</td>
        <td style="text-align: right">0.493</td>
        <td style="text-align: right">0.479</td>
        <td style="text-align: right">0.735</td>
        <td style="text-align: right">0.458</td>
        <td style="text-align: right">0.598</td>
        <td style="text-align: right">0.675</td>
        <td style="text-align: right">0.300</td>
        <td style="text-align: right">0.406</td>
        <td style="text-align: right">0.538</td>
        <td style="text-align: right">0.247</td>
        <td style="text-align: right">20.8</td>
      </tr>
      <tr>
        <td>SmolLM2-360M</td>
        <td style="text-align: right">4T</td>
        <td style="text-align: right">0.587</td>
        <td style="text-align: right">0.539</td>
        <td style="text-align: right">0.857</td>
        <td style="text-align: right">0.656</td>
        <td style="text-align: right">0.616</td>
        <td style="text-align: right">0.725</td>
        <td style="text-align: right">0.370</td>
        <td style="text-align: right">0.564</td>
        <td style="text-align: right">0.588</td>
        <td style="text-align: right">0.365</td>
        <td style="text-align: right">15.8</td>
      </tr>
      <tr>
        <td>Qwen2.5-0.5B</td>
        <td style="text-align: right">18T</td>
        <td style="text-align: right">0.565</td>
        <td style="text-align: right">0.519</td>
        <td style="text-align: right">0.906</td>
        <td style="text-align: right">0.584</td>
        <td style="text-align: right">0.622</td>
        <td style="text-align: right">0.697</td>
        <td style="text-align: right">0.352</td>
        <td style="text-align: right">0.522</td>
        <td style="text-align: right">0.565</td>
        <td style="text-align: right">0.319</td>
        <td style="text-align: right">—</td>
      </tr>
    </tbody>
  </table>

  <p>Qwen2.5-0.5B has no WikiText figure: its 152,000-token vocabulary ran out of GPU memory on that task’s long rolling windows while training was using the same card, so I re-ran it without WikiText rather than interrupt the run.</p>

</details>

<p>At a matched 2.1B tokens, my model scored 8.5 points above Pythia-410M. Finishing at 4.19B puts it 9.7 points above that checkpoint and 4.8 points behind the fully trained Pythia-410M, which saw 72 times as much data.</p>

<p>SmolLM2-360M beats Qwen2.5-0.5B with fewer parameters and less than a quarter of the tokens. That gap comes from how its training data was chosen and mixed. I haven’t worked on data selection at all yet, so it’s the most promising next step once tokens stop being the bottleneck.</p>

<p>On MMLU (5-shot) the model finished at 0.272, up from 0.254 at half the tokens. Chance is 0.25 on a four-way multiple choice, so this is the first sign of that kind of knowledge appearing, and not much more than a sign: social sciences carries it at 0.320 while humanities is still at chance. I leave MMLU out of the average.</p>

<details>
  <summary>Show MMLU by category</summary>

  <table>
    <thead>
      <tr>
        <th>MMLU, 5-shot</th>
        <th style="text-align: right">At 2.10B tokens</th>
        <th style="text-align: right">At 4.19B tokens</th>
        <th style="text-align: right">Change</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>All 57 subjects</td>
        <td style="text-align: right">0.254</td>
        <td style="text-align: right">0.272</td>
        <td style="text-align: right">+0.018</td>
      </tr>
      <tr>
        <td>STEM</td>
        <td style="text-align: right">0.272</td>
        <td style="text-align: right">0.273</td>
        <td style="text-align: right">+0.002</td>
      </tr>
      <tr>
        <td>Social sciences</td>
        <td style="text-align: right">0.256</td>
        <td style="text-align: right">0.320</td>
        <td style="text-align: right">+0.064</td>
      </tr>
      <tr>
        <td>Other</td>
        <td style="text-align: right">0.260</td>
        <td style="text-align: right">0.258</td>
        <td style="text-align: right">-0.002</td>
      </tr>
      <tr>
        <td>Humanities</td>
        <td style="text-align: right">0.236</td>
        <td style="text-align: right">0.248</td>
        <td style="text-align: right">+0.012</td>
      </tr>
      <tr>
        <td><em>Chance</em></td>
        <td style="text-align: right"><em>0.250</em></td>
        <td style="text-align: right"><em>0.250</em></td>
        <td style="text-align: right"> </td>
      </tr>
    </tbody>
  </table>

  <p>Nearly all of the movement is in social sciences. The other three categories are still within a point or two of chance, which is what you would expect from a model this size trained on this little.</p>

</details>

<h2 id="restarting-the-learning-rate-schedule-has-a-cost">Restarting the learning-rate schedule has a cost</h2>

<p>Each phase used a cosine schedule: warm the learning rate up, then decay it to a tenth of its peak. To continue after phase 1, I warmed the learning rate back up to 2e-4 and decayed it again.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 436" role="img" aria-labelledby="validation-loss-and-lear-t validation-loss-and-lear-d">
<title id="validation-loss-and-lear-t">Validation loss and learning rate</title>
<desc id="validation-loss-and-lear-d">Two panels sharing the training-token axis. Top: validation loss falls from 3.579 to 2.998 across 3 phases. Each restart pushes it back above the previous phase's final loss; the shaded wedges show those debts, costing 600, 1100 steps. Bottom: the learning rate, decayed and restarted once per phase.</desc>
<text class="axis-label" x="44" y="16">validation loss</text>
<line class="grid" x1="44" x2="736" y1="244.5" y2="244.5" />
<text class="tick" x="36" y="248.5" text-anchor="end">3.0</text>
<line class="grid" x1="44" x2="736" y1="209.4" y2="209.4" />
<text class="tick" x="36" y="213.4" text-anchor="end">3.1</text>
<line class="grid" x1="44" x2="736" y1="174.3" y2="174.3" />
<text class="tick" x="36" y="178.3" text-anchor="end">3.2</text>
<line class="grid" x1="44" x2="736" y1="139.2" y2="139.2" />
<text class="tick" x="36" y="143.2" text-anchor="end">3.3</text>
<line class="grid" x1="44" x2="736" y1="104.2" y2="104.2" />
<text class="tick" x="36" y="108.2" text-anchor="end">3.4</text>
<line class="grid" x1="44" x2="736" y1="69.1" y2="69.1" />
<text class="tick" x="36" y="73.1" text-anchor="end">3.5</text>
<line class="grid" x1="44" x2="736" y1="34.0" y2="34.0" />
<text class="tick" x="36" y="38.0" text-anchor="end">3.6</text>
<path class="debt" d="M143.4,131.3 L152.9,110.4 L162.4,110.2 L171.9,117.0 L181.4,124.8 L190.9,129.9 L200.4,131.3 Z" />
<line class="ref" x1="143.4" x2="200.4" y1="131.3" y2="131.3" />
<path class="debt" d="M333.3,195.8 L342.8,180.2 L352.3,176.7 L361.8,178.2 L371.3,180.4 L380.8,182.0 L390.3,184.3 L399.8,187.1 L409.3,190.4 L418.8,193.0 L428.3,195.6 L437.8,195.8 Z" />
<line class="ref" x1="333.3" x2="437.8" y1="195.8" y2="195.8" />
<line class="leader" x1="171.9" y1="127.3" x2="171.9" y2="105.3" />
<text class="note-strong" x="171.9" y="101.3" text-anchor="middle">600 steps to recover</text>
<line class="leader" x1="385.6" y1="191.8" x2="385.6" y2="169.8" />
<text class="note-strong" x="385.6" y="165.8" text-anchor="middle">1100 steps to recover</text>
<line class="boundary" x1="143.4" x2="143.4" y1="34" y2="392" />
<text class="note" x="149.4" y="46">phase 2 starts</text>
<line class="boundary" x1="333.3" x2="333.3" y1="34" y2="392" />
<text class="note" x="339.3" y="46">phase 3 starts</text>
<path class="line" d="M48.4,41.4 L57.9,58.8 L67.4,73.0 L76.9,85.8 L86.4,97.0 L95.9,106.0 L105.4,113.9 L114.9,119.8 L124.4,124.5 L133.9,128.2 L143.4,131.3" />
<path class="line" d="M143.4,131.3 L152.9,110.4 L162.4,110.2 L171.9,117.0 L181.4,124.8 L190.9,129.9 L200.4,136.2 L209.9,142.7 L219.4,149.4 L228.8,155.9 L238.3,160.4 L247.8,166.0 L257.3,171.2 L266.8,175.9 L276.3,180.5 L285.8,184.6 L295.3,187.7 L304.8,190.7 L314.3,192.9 L323.8,194.5 L333.3,195.8" />
<path class="line" d="M333.3,195.8 L342.8,180.2 L352.3,176.7 L361.8,178.2 L371.3,180.4 L380.8,182.0 L390.3,184.3 L399.8,187.1 L409.3,190.4 L418.8,193.0 L428.3,195.6 L437.8,198.4 L447.3,201.1 L456.8,203.9 L466.3,205.3 L475.8,207.8 L485.3,210.8 L494.8,212.9 L504.3,215.3 L513.8,218.2 L523.3,220.0 L532.8,222.0 L542.3,224.2 L551.8,226.4 L561.3,228.2 L570.7,229.4 L580.2,231.2 L589.7,232.9 L599.2,235.1 L608.7,236.3 L618.2,237.4 L627.7,238.7 L637.2,239.9 L646.7,240.8 L656.2,241.5 L665.7,242.6 L675.2,243.1 L684.7,243.6 L694.2,244.2 L703.7,244.8 L713.2,245.1" />
<circle class="hit" cx="48.4" cy="41.4" r="8"><title>Step 1000, 0.52B tokens: validation loss 3.5790</title></circle>
<circle class="hit" cx="57.9" cy="58.8" r="8"><title>Step 1100, 0.58B tokens: validation loss 3.5292</title></circle>
<circle class="hit" cx="67.4" cy="73.0" r="8"><title>Step 1200, 0.63B tokens: validation loss 3.4889</title></circle>
<circle class="hit" cx="76.9" cy="85.8" r="8"><title>Step 1300, 0.68B tokens: validation loss 3.4524</title></circle>
<circle class="hit" cx="86.4" cy="97.0" r="8"><title>Step 1400, 0.73B tokens: validation loss 3.4203</title></circle>
<circle class="hit" cx="95.9" cy="106.0" r="8"><title>Step 1500, 0.79B tokens: validation loss 3.3948</title></circle>
<circle class="hit" cx="105.4" cy="113.9" r="8"><title>Step 1600, 0.84B tokens: validation loss 3.3722</title></circle>
<circle class="hit" cx="114.9" cy="119.8" r="8"><title>Step 1700, 0.89B tokens: validation loss 3.3553</title></circle>
<circle class="hit" cx="124.4" cy="124.5" r="8"><title>Step 1800, 0.94B tokens: validation loss 3.3419</title></circle>
<circle class="hit" cx="133.9" cy="128.2" r="8"><title>Step 1900, 1.00B tokens: validation loss 3.3314</title></circle>
<circle class="hit" cx="143.4" cy="131.3" r="8"><title>Step 2000, 1.05B tokens: validation loss 3.3226</title></circle>
<circle class="hit" cx="152.9" cy="110.4" r="8"><title>Step 2100, 1.10B tokens: validation loss 3.3822</title></circle>
<circle class="hit" cx="162.4" cy="110.2" r="8"><title>Step 2200, 1.15B tokens: validation loss 3.3827</title></circle>
<circle class="hit" cx="171.9" cy="117.0" r="8"><title>Step 2300, 1.21B tokens: validation loss 3.3633</title></circle>
<circle class="hit" cx="181.4" cy="124.8" r="8"><title>Step 2400, 1.26B tokens: validation loss 3.3412</title></circle>
<circle class="hit" cx="190.9" cy="129.9" r="8"><title>Step 2500, 1.31B tokens: validation loss 3.3265</title></circle>
<circle class="hit" cx="200.4" cy="136.2" r="8"><title>Step 2600, 1.36B tokens: validation loss 3.3085</title></circle>
<circle class="hit" cx="209.9" cy="142.7" r="8"><title>Step 2700, 1.42B tokens: validation loss 3.2900</title></circle>
<circle class="hit" cx="219.4" cy="149.4" r="8"><title>Step 2800, 1.47B tokens: validation loss 3.2711</title></circle>
<circle class="hit" cx="228.8" cy="155.9" r="8"><title>Step 2900, 1.52B tokens: validation loss 3.2525</title></circle>
<circle class="hit" cx="238.3" cy="160.4" r="8"><title>Step 3000, 1.57B tokens: validation loss 3.2397</title></circle>
<circle class="hit" cx="247.8" cy="166.0" r="8"><title>Step 3100, 1.63B tokens: validation loss 3.2236</title></circle>
<circle class="hit" cx="257.3" cy="171.2" r="8"><title>Step 3200, 1.68B tokens: validation loss 3.2089</title></circle>
<circle class="hit" cx="266.8" cy="175.9" r="8"><title>Step 3300, 1.73B tokens: validation loss 3.1955</title></circle>
<circle class="hit" cx="276.3" cy="180.5" r="8"><title>Step 3400, 1.78B tokens: validation loss 3.1823</title></circle>
<circle class="hit" cx="285.8" cy="184.6" r="8"><title>Step 3500, 1.84B tokens: validation loss 3.1707</title></circle>
<circle class="hit" cx="295.3" cy="187.7" r="8"><title>Step 3600, 1.89B tokens: validation loss 3.1618</title></circle>
<circle class="hit" cx="304.8" cy="190.7" r="8"><title>Step 3700, 1.94B tokens: validation loss 3.1532</title></circle>
<circle class="hit" cx="314.3" cy="192.9" r="8"><title>Step 3800, 1.99B tokens: validation loss 3.1471</title></circle>
<circle class="hit" cx="323.8" cy="194.5" r="8"><title>Step 3900, 2.04B tokens: validation loss 3.1424</title></circle>
<circle class="hit" cx="333.3" cy="195.8" r="8"><title>Step 4000, 2.10B tokens: validation loss 3.1387</title></circle>
<circle class="hit" cx="342.8" cy="180.2" r="8"><title>Step 4100, 2.15B tokens: validation loss 3.1833</title></circle>
<circle class="hit" cx="352.3" cy="176.7" r="8"><title>Step 4200, 2.20B tokens: validation loss 3.1931</title></circle>
<circle class="hit" cx="361.8" cy="178.2" r="8"><title>Step 4300, 2.25B tokens: validation loss 3.1888</title></circle>
<circle class="hit" cx="371.3" cy="180.4" r="8"><title>Step 4400, 2.31B tokens: validation loss 3.1825</title></circle>
<circle class="hit" cx="380.8" cy="182.0" r="8"><title>Step 4500, 2.36B tokens: validation loss 3.1781</title></circle>
<circle class="hit" cx="390.3" cy="184.3" r="8"><title>Step 4600, 2.41B tokens: validation loss 3.1715</title></circle>
<circle class="hit" cx="399.8" cy="187.1" r="8"><title>Step 4700, 2.46B tokens: validation loss 3.1634</title></circle>
<circle class="hit" cx="409.3" cy="190.4" r="8"><title>Step 4800, 2.52B tokens: validation loss 3.1540</title></circle>
<circle class="hit" cx="418.8" cy="193.0" r="8"><title>Step 4900, 2.57B tokens: validation loss 3.1467</title></circle>
<circle class="hit" cx="428.3" cy="195.6" r="8"><title>Step 5000, 2.62B tokens: validation loss 3.1393</title></circle>
<circle class="hit" cx="437.8" cy="198.4" r="8"><title>Step 5100, 2.67B tokens: validation loss 3.1314</title></circle>
<circle class="hit" cx="447.3" cy="201.1" r="8"><title>Step 5200, 2.73B tokens: validation loss 3.1235</title></circle>
<circle class="hit" cx="456.8" cy="203.9" r="8"><title>Step 5300, 2.78B tokens: validation loss 3.1157</title></circle>
<circle class="hit" cx="466.3" cy="205.3" r="8"><title>Step 5400, 2.83B tokens: validation loss 3.1117</title></circle>
<circle class="hit" cx="475.8" cy="207.8" r="8"><title>Step 5500, 2.88B tokens: validation loss 3.1044</title></circle>
<circle class="hit" cx="485.3" cy="210.8" r="8"><title>Step 5600, 2.94B tokens: validation loss 3.0959</title></circle>
<circle class="hit" cx="494.8" cy="212.9" r="8"><title>Step 5700, 2.99B tokens: validation loss 3.0900</title></circle>
<circle class="hit" cx="504.3" cy="215.3" r="8"><title>Step 5800, 3.04B tokens: validation loss 3.0832</title></circle>
<circle class="hit" cx="513.8" cy="218.2" r="8"><title>Step 5900, 3.09B tokens: validation loss 3.0749</title></circle>
<circle class="hit" cx="523.3" cy="220.0" r="8"><title>Step 6000, 3.15B tokens: validation loss 3.0696</title></circle>
<circle class="hit" cx="532.8" cy="222.0" r="8"><title>Step 6100, 3.20B tokens: validation loss 3.0641</title></circle>
<circle class="hit" cx="542.3" cy="224.2" r="8"><title>Step 6200, 3.25B tokens: validation loss 3.0578</title></circle>
<circle class="hit" cx="551.8" cy="226.4" r="8"><title>Step 6300, 3.30B tokens: validation loss 3.0514</title></circle>
<circle class="hit" cx="561.3" cy="228.2" r="8"><title>Step 6400, 3.36B tokens: validation loss 3.0464</title></circle>
<circle class="hit" cx="570.7" cy="229.4" r="8"><title>Step 6500, 3.41B tokens: validation loss 3.0430</title></circle>
<circle class="hit" cx="580.2" cy="231.2" r="8"><title>Step 6600, 3.46B tokens: validation loss 3.0379</title></circle>
<circle class="hit" cx="589.7" cy="232.9" r="8"><title>Step 6700, 3.51B tokens: validation loss 3.0330</title></circle>
<circle class="hit" cx="599.2" cy="235.1" r="8"><title>Step 6800, 3.57B tokens: validation loss 3.0268</title></circle>
<circle class="hit" cx="608.7" cy="236.3" r="8"><title>Step 6900, 3.62B tokens: validation loss 3.0234</title></circle>
<circle class="hit" cx="618.2" cy="237.4" r="8"><title>Step 7000, 3.67B tokens: validation loss 3.0200</title></circle>
<circle class="hit" cx="627.7" cy="238.7" r="8"><title>Step 7100, 3.72B tokens: validation loss 3.0165</title></circle>
<circle class="hit" cx="637.2" cy="239.9" r="8"><title>Step 7200, 3.77B tokens: validation loss 3.0130</title></circle>
<circle class="hit" cx="646.7" cy="240.8" r="8"><title>Step 7300, 3.83B tokens: validation loss 3.0103</title></circle>
<circle class="hit" cx="656.2" cy="241.5" r="8"><title>Step 7400, 3.88B tokens: validation loss 3.0084</title></circle>
<circle class="hit" cx="665.7" cy="242.6" r="8"><title>Step 7500, 3.93B tokens: validation loss 3.0053</title></circle>
<circle class="hit" cx="675.2" cy="243.1" r="8"><title>Step 7600, 3.98B tokens: validation loss 3.0038</title></circle>
<circle class="hit" cx="684.7" cy="243.6" r="8"><title>Step 7700, 4.04B tokens: validation loss 3.0025</title></circle>
<circle class="hit" cx="694.2" cy="244.2" r="8"><title>Step 7800, 4.09B tokens: validation loss 3.0007</title></circle>
<circle class="hit" cx="703.7" cy="244.8" r="8"><title>Step 7900, 4.14B tokens: validation loss 2.9990</title></circle>
<circle class="hit" cx="713.2" cy="245.1" r="8"><title>Step 8000, 4.19B tokens: validation loss 2.9982</title></circle>
<circle class="dot" cx="143.4" cy="131.3" r="4" />
<text class="value" x="135.4" y="149.3" text-anchor="end">3.323</text>
<circle class="dot" cx="333.3" cy="195.8" r="4" />
<text class="value" x="325.3" y="213.8" text-anchor="end">3.139</text>
<circle class="dot" cx="713.2" cy="245.1" r="4" />
<text class="value" x="705.2" y="235.1" text-anchor="end">2.998</text>
<text class="axis-label" x="44" y="302">learning rate</text>
<line class="grid" x1="44" x2="736" y1="392.0" y2="392.0" />
<text class="tick" x="36" y="396.0" text-anchor="end">0</text>
<line class="grid" x1="44" x2="736" y1="353.9" y2="353.9" />
<text class="tick" x="36" y="357.9" text-anchor="end">1e-4</text>
<line class="grid" x1="44" x2="736" y1="315.8" y2="315.8" />
<text class="tick" x="36" y="319.8" text-anchor="end">2e-4</text>
<path class="line line-thin" d="M44.6,316.6 L45.6,317.5 L46.5,318.4 L47.4,319.2 L48.4,320.1 L49.3,321.0 L50.3,321.9 L51.2,322.8 L52.2,323.7 L53.1,324.6 L54.1,325.5 L55.0,326.4 L56.0,327.3 L56.9,328.2 L57.9,329.1 L58.8,330.0 L59.8,330.8 L60.7,331.7 L61.7,332.6 L62.6,333.5 L63.6,334.4 L64.5,335.3 L65.5,336.2 L66.4,337.1 L67.4,338.0 L68.3,338.9 L69.3,339.7 L70.2,340.6 L71.2,341.5 L72.1,342.4 L73.1,343.2 L74.0,344.1 L75.0,344.9 L75.9,345.8 L76.9,346.6 L77.8,347.5 L78.8,348.3 L79.7,349.2 L80.7,350.0 L81.6,350.8 L82.6,351.6 L83.5,352.4 L84.5,353.2 L85.4,354.0 L86.4,354.8 L87.3,355.6 L88.3,356.3 L89.2,357.1 L90.2,357.8 L91.1,358.6 L92.1,359.3 L93.0,360.0 L94.0,360.7 L94.9,361.4 L95.9,362.1 L96.8,362.8 L97.8,363.5 L98.7,364.2 L99.7,364.8 L100.6,365.4 L101.6,366.1 L102.5,366.7 L103.5,367.3 L104.4,367.9 L105.4,368.5 L106.3,369.1 L107.3,369.6 L108.2,370.2 L109.2,370.7 L110.1,371.2 L111.1,371.7 L112.0,372.2 L113.0,372.7 L113.9,373.2 L114.9,373.6 L115.8,374.1 L116.8,374.5 L117.7,374.9 L118.7,375.3 L119.6,375.7 L120.6,376.1 L121.5,376.4 L122.5,376.8 L123.4,377.1 L124.4,377.4 L125.3,377.7 L126.3,378.0 L127.2,378.3 L128.2,378.6 L129.1,378.8 L130.1,379.0 L131.0,379.2 L132.0,379.4 L132.9,379.6 L133.9,379.8 L134.8,379.9 L135.8,380.1 L136.7,380.2 L137.7,380.3 L138.6,380.4 L139.6,380.4 L140.5,380.5 L141.5,380.5 L142.4,380.6 L143.4,380.6 L144.3,384.4 L145.3,376.8 L146.2,369.1 L147.2,361.5 L148.1,353.9 L149.1,346.3 L150.0,338.7 L151.0,331.0 L151.9,323.4 L152.9,315.8 L153.8,315.8 L154.8,315.8 L155.7,315.8 L156.7,315.9 L157.6,315.9 L158.6,316.0 L159.5,316.0 L160.5,316.1 L161.4,316.2 L162.4,316.3 L163.3,316.4 L164.3,316.5 L165.2,316.6 L166.2,316.7 L167.1,316.8 L168.1,317.0 L169.0,317.1 L170.0,317.3 L170.9,317.5 L171.9,317.6 L172.8,317.8 L173.8,318.0 L174.7,318.2 L175.7,318.5 L176.6,318.7 L177.6,318.9 L178.5,319.1 L179.5,319.4 L180.4,319.7 L181.4,319.9 L182.3,320.2 L183.3,320.5 L184.2,320.8 L185.2,321.1 L186.1,321.4 L187.1,321.7 L188.0,322.0 L189.0,322.3 L189.9,322.7 L190.9,323.0 L191.8,323.4 L192.8,323.7 L193.7,324.1 L194.7,324.5 L195.6,324.8 L196.6,325.2 L197.5,325.6 L198.5,326.0 L199.4,326.4 L200.4,326.8 L201.3,327.3 L202.3,327.7 L203.2,328.1 L204.2,328.5 L205.1,329.0 L206.1,329.4 L207.0,329.9 L208.0,330.4 L208.9,330.8 L209.9,331.3 L210.8,331.8 L211.8,332.3 L212.7,332.7 L213.7,333.2 L214.6,333.7 L215.6,334.2 L216.5,334.7 L217.5,335.2 L218.4,335.8 L219.4,336.3 L220.3,336.8 L221.2,337.3 L222.2,337.8 L223.1,338.4 L224.1,338.9 L225.0,339.4 L226.0,340.0 L226.9,340.5 L227.9,341.1 L228.8,341.6 L229.8,342.2 L230.7,342.7 L231.7,343.3 L232.6,343.8 L233.6,344.4 L234.5,345.0 L235.5,345.5 L236.4,346.1 L237.4,346.6 L238.3,347.2 L239.3,347.8 L240.2,348.3 L241.2,348.9 L242.1,349.5 L243.1,350.0 L244.0,350.6 L245.0,351.2 L245.9,351.7 L246.9,352.3 L247.8,352.9 L248.8,353.4 L249.7,354.0 L250.7,354.6 L251.6,355.1 L252.6,355.7 L253.5,356.2 L254.5,356.8 L255.4,357.4 L256.4,357.9 L257.3,358.5 L258.3,359.0 L259.2,359.6 L260.2,360.1 L261.1,360.6 L262.1,361.2 L263.0,361.7 L264.0,362.2 L264.9,362.8 L265.9,363.3 L266.8,363.8 L267.8,364.3 L268.7,364.8 L269.7,365.4 L270.6,365.9 L271.6,366.4 L272.5,366.9 L273.5,367.4 L274.4,367.8 L275.4,368.3 L276.3,368.8 L277.3,369.3 L278.2,369.7 L279.2,370.2 L280.1,370.7 L281.1,371.1 L282.0,371.6 L283.0,372.0 L283.9,372.4 L284.9,372.9 L285.8,373.3 L286.8,373.7 L287.7,374.1 L288.7,374.5 L289.6,374.9 L290.6,375.3 L291.5,375.7 L292.5,376.0 L293.4,376.4 L294.4,376.8 L295.3,377.1 L296.3,377.5 L297.2,377.8 L298.2,378.1 L299.1,378.5 L300.1,378.8 L301.0,379.1 L302.0,379.4 L302.9,379.7 L303.9,379.9 L304.8,380.2 L305.8,380.5 L306.7,380.7 L307.7,381.0 L308.6,381.2 L309.6,381.5 L310.5,381.7 L311.5,381.9 L312.4,382.1 L313.4,382.3 L314.3,382.5 L315.3,382.7 L316.2,382.9 L317.2,383.0 L318.1,383.2 L319.1,383.3 L320.0,383.5 L321.0,383.6 L321.9,383.7 L322.9,383.8 L323.8,383.9 L324.8,384.0 L325.7,384.1 L326.7,384.1 L327.6,384.2 L328.6,384.3 L329.5,384.3 L330.5,384.3 L331.4,384.4 L332.4,384.4 L333.3,384.4 L334.3,386.3 L335.2,380.6 L336.2,374.9 L337.1,369.1 L338.1,363.4 L339.0,357.7 L340.0,352.0 L340.9,346.3 L341.9,340.6 L342.8,334.9 L343.8,334.9 L344.7,334.9 L345.7,334.9 L346.6,334.9 L347.6,334.9 L348.5,334.9 L349.5,334.9 L350.4,334.9 L351.4,334.9 L352.3,334.9 L353.3,335.0 L354.2,335.0 L355.2,335.0 L356.1,335.0 L357.1,335.0 L358.0,335.1 L359.0,335.1 L359.9,335.1 L360.9,335.2 L361.8,335.2 L362.8,335.2 L363.7,335.3 L364.7,335.3 L365.6,335.3 L366.6,335.4 L367.5,335.4 L368.5,335.5 L369.4,335.5 L370.4,335.6 L371.3,335.6 L372.3,335.7 L373.2,335.7 L374.2,335.8 L375.1,335.8 L376.1,335.9 L377.0,336.0 L378.0,336.0 L378.9,336.1 L379.9,336.2 L380.8,336.2 L381.8,336.3 L382.7,336.4 L383.7,336.4 L384.6,336.5 L385.6,336.6 L386.5,336.7 L387.5,336.7 L388.4,336.8 L389.4,336.9 L390.3,337.0 L391.3,337.1 L392.2,337.2 L393.1,337.2 L394.1,337.3 L395.0,337.4 L396.0,337.5 L396.9,337.6 L397.9,337.7 L398.8,337.8 L399.8,337.9 L400.7,338.0 L401.7,338.1 L402.6,338.2 L403.6,338.3 L404.5,338.4 L405.5,338.5 L406.4,338.6 L407.4,338.7 L408.3,338.9 L409.3,339.0 L410.2,339.1 L411.2,339.2 L412.1,339.3 L413.1,339.4 L414.0,339.6 L415.0,339.7 L415.9,339.8 L416.9,339.9 L417.8,340.1 L418.8,340.2 L419.7,340.3 L420.7,340.5 L421.6,340.6 L422.6,340.7 L423.5,340.9 L424.5,341.0 L425.4,341.1 L426.4,341.3 L427.3,341.4 L428.3,341.5 L429.2,341.7 L430.2,341.8 L431.1,342.0 L432.1,342.1 L433.0,342.3 L434.0,342.4 L434.9,342.6 L435.9,342.7 L436.8,342.9 L437.8,343.0 L438.7,343.2 L439.7,343.3 L440.6,343.5 L441.6,343.7 L442.5,343.8 L443.5,344.0 L444.4,344.1 L445.4,344.3 L446.3,344.5 L447.3,344.6 L448.2,344.8 L449.2,345.0 L450.1,345.1 L451.1,345.3 L452.0,345.5 L453.0,345.7 L453.9,345.8 L454.9,346.0 L455.8,346.2 L456.8,346.4 L457.7,346.5 L458.7,346.7 L459.6,346.9 L460.6,347.1 L461.5,347.3 L462.5,347.4 L463.4,347.6 L464.4,347.8 L465.3,348.0 L466.3,348.2 L467.2,348.4 L468.2,348.5 L469.1,348.7 L470.1,348.9 L471.0,349.1 L472.0,349.3 L472.9,349.5 L473.9,349.7 L474.8,349.9 L475.8,350.1 L476.7,350.3 L477.7,350.5 L478.6,350.7 L479.6,350.9 L480.5,351.1 L481.5,351.2 L482.4,351.4 L483.4,351.6 L484.3,351.8 L485.3,352.0 L486.2,352.2 L487.2,352.5 L488.1,352.7 L489.1,352.9 L490.0,353.1 L491.0,353.3 L491.9,353.5 L492.9,353.7 L493.8,353.9 L494.8,354.1 L495.7,354.3 L496.7,354.5 L497.6,354.7 L498.6,354.9 L499.5,355.1 L500.5,355.3 L501.4,355.5 L502.4,355.7 L503.3,356.0 L504.3,356.2 L505.2,356.4 L506.2,356.6 L507.1,356.8 L508.1,357.0 L509.0,357.2 L510.0,357.4 L510.9,357.6 L511.9,357.9 L512.8,358.1 L513.8,358.3 L514.7,358.5 L515.7,358.7 L516.6,358.9 L517.6,359.1 L518.5,359.4 L519.5,359.6 L520.4,359.8 L521.4,360.0 L522.3,360.2 L523.3,360.4 L524.2,360.6 L525.2,360.9 L526.1,361.1 L527.1,361.3 L528.0,361.5 L529.0,361.7 L529.9,361.9 L530.9,362.1 L531.8,362.4 L532.8,362.6 L533.7,362.8 L534.7,363.0 L535.6,363.2 L536.6,363.4 L537.5,363.6 L538.5,363.9 L539.4,364.1 L540.4,364.3 L541.3,364.5 L542.3,364.7 L543.2,364.9 L544.2,365.1 L545.1,365.4 L546.1,365.6 L547.0,365.8 L548.0,366.0 L548.9,366.2 L549.9,366.4 L550.8,366.6 L551.8,366.8 L552.7,367.0 L553.7,367.3 L554.6,367.5 L555.6,367.7 L556.5,367.9 L557.5,368.1 L558.4,368.3 L559.4,368.5 L560.3,368.7 L561.3,368.9 L562.2,369.1 L563.2,369.3 L564.1,369.5 L565.0,369.7 L566.0,369.9 L566.9,370.2 L567.9,370.4 L568.8,370.6 L569.8,370.8 L570.7,371.0 L571.7,371.2 L572.6,371.4 L573.6,371.6 L574.5,371.8 L575.5,372.0 L576.4,372.2 L577.4,372.4 L578.3,372.5 L579.3,372.7 L580.2,372.9 L581.2,373.1 L582.1,373.3 L583.1,373.5 L584.0,373.7 L585.0,373.9 L585.9,374.1 L586.9,374.3 L587.8,374.5 L588.8,374.7 L589.7,374.8 L590.7,375.0 L591.6,375.2 L592.6,375.4 L593.5,375.6 L594.5,375.8 L595.4,375.9 L596.4,376.1 L597.3,376.3 L598.3,376.5 L599.2,376.7 L600.2,376.8 L601.1,377.0 L602.1,377.2 L603.0,377.4 L604.0,377.5 L604.9,377.7 L605.9,377.9 L606.8,378.0 L607.8,378.2 L608.7,378.4 L609.7,378.5 L610.6,378.7 L611.6,378.9 L612.5,379.0 L613.5,379.2 L614.4,379.4 L615.4,379.5 L616.3,379.7 L617.3,379.8 L618.2,380.0 L619.2,380.1 L620.1,380.3 L621.1,380.4 L622.0,380.6 L623.0,380.7 L623.9,380.9 L624.9,381.0 L625.8,381.2 L626.8,381.3 L627.7,381.5 L628.7,381.6 L629.6,381.8 L630.6,381.9 L631.5,382.0 L632.5,382.2 L633.4,382.3 L634.4,382.4 L635.3,382.6 L636.3,382.7 L637.2,382.8 L638.2,383.0 L639.1,383.1 L640.1,383.2 L641.0,383.3 L642.0,383.5 L642.9,383.6 L643.9,383.7 L644.8,383.8 L645.8,383.9 L646.7,384.1 L647.7,384.2 L648.6,384.3 L649.6,384.4 L650.5,384.5 L651.5,384.6 L652.4,384.7 L653.4,384.8 L654.3,384.9 L655.3,385.0 L656.2,385.1 L657.2,385.2 L658.1,385.3 L659.1,385.4 L660.0,385.5 L661.0,385.6 L661.9,385.7 L662.9,385.8 L663.8,385.9 L664.8,386.0 L665.7,386.0 L666.7,386.1 L667.6,386.2 L668.6,386.3 L669.5,386.4 L670.5,386.4 L671.4,386.5 L672.4,386.6 L673.3,386.7 L674.3,386.7 L675.2,386.8 L676.2,386.9 L677.1,386.9 L678.1,387.0 L679.0,387.1 L680.0,387.1 L680.9,387.2 L681.9,387.2 L682.8,387.3 L683.8,387.4 L684.7,387.4 L685.7,387.5 L686.6,387.5 L687.6,387.6 L688.5,387.6 L689.5,387.6 L690.4,387.7 L691.4,387.7 L692.3,387.8 L693.3,387.8 L694.2,387.8 L695.2,387.9 L696.1,387.9 L697.1,387.9 L698.0,388.0 L699.0,388.0 L699.9,388.0 L700.9,388.0 L701.8,388.1 L702.8,388.1 L703.7,388.1 L704.7,388.1 L705.6,388.1 L706.6,388.1 L707.5,388.2 L708.5,388.2 L709.4,388.2 L710.4,388.2 L711.3,388.2 L712.3,388.2 L713.2,388.2" />
<circle class="hit" cx="44.6" cy="316.6" r="6"><title>Step 960, 0.50B tokens: learning rate 1.98e-04</title></circle>
<circle class="hit" cx="54.1" cy="325.5" r="6"><title>Step 1060, 0.56B tokens: learning rate 1.75e-04</title></circle>
<circle class="hit" cx="63.6" cy="334.4" r="6"><title>Step 1160, 0.61B tokens: learning rate 1.51e-04</title></circle>
<circle class="hit" cx="73.1" cy="343.2" r="6"><title>Step 1260, 0.66B tokens: learning rate 1.28e-04</title></circle>
<circle class="hit" cx="82.6" cy="351.6" r="6"><title>Step 1360, 0.71B tokens: learning rate 1.06e-04</title></circle>
<circle class="hit" cx="92.1" cy="359.3" r="6"><title>Step 1460, 0.77B tokens: learning rate 8.58e-05</title></circle>
<circle class="hit" cx="101.6" cy="366.1" r="6"><title>Step 1560, 0.82B tokens: learning rate 6.81e-05</title></circle>
<circle class="hit" cx="111.1" cy="371.7" r="6"><title>Step 1660, 0.87B tokens: learning rate 5.32e-05</title></circle>
<circle class="hit" cx="120.6" cy="376.1" r="6"><title>Step 1760, 0.92B tokens: learning rate 4.18e-05</title></circle>
<circle class="hit" cx="130.1" cy="379.0" r="6"><title>Step 1860, 0.98B tokens: learning rate 3.41e-05</title></circle>
<circle class="hit" cx="139.6" cy="380.4" r="6"><title>Step 1960, 1.03B tokens: learning rate 3.03e-05</title></circle>
<circle class="hit" cx="149.1" cy="346.3" r="6"><title>Step 2060, 1.08B tokens: learning rate 1.20e-04</title></circle>
<circle class="hit" cx="158.6" cy="316.0" r="6"><title>Step 2160, 1.13B tokens: learning rate 2.00e-04</title></circle>
<circle class="hit" cx="168.1" cy="317.0" r="6"><title>Step 2260, 1.18B tokens: learning rate 1.97e-04</title></circle>
<circle class="hit" cx="177.6" cy="318.9" r="6"><title>Step 2360, 1.24B tokens: learning rate 1.92e-04</title></circle>
<circle class="hit" cx="187.1" cy="321.7" r="6"><title>Step 2460, 1.29B tokens: learning rate 1.85e-04</title></circle>
<circle class="hit" cx="196.6" cy="325.2" r="6"><title>Step 2560, 1.34B tokens: learning rate 1.75e-04</title></circle>
<circle class="hit" cx="206.1" cy="329.4" r="6"><title>Step 2660, 1.39B tokens: learning rate 1.64e-04</title></circle>
<circle class="hit" cx="215.6" cy="334.2" r="6"><title>Step 2760, 1.45B tokens: learning rate 1.52e-04</title></circle>
<circle class="hit" cx="225.0" cy="339.4" r="6"><title>Step 2860, 1.50B tokens: learning rate 1.38e-04</title></circle>
<circle class="hit" cx="234.5" cy="345.0" r="6"><title>Step 2960, 1.55B tokens: learning rate 1.23e-04</title></circle>
<circle class="hit" cx="244.0" cy="350.6" r="6"><title>Step 3060, 1.60B tokens: learning rate 1.09e-04</title></circle>
<circle class="hit" cx="253.5" cy="356.2" r="6"><title>Step 3160, 1.66B tokens: learning rate 9.39e-05</title></circle>
<circle class="hit" cx="263.0" cy="361.7" r="6"><title>Step 3260, 1.71B tokens: learning rate 7.95e-05</title></circle>
<circle class="hit" cx="272.5" cy="366.9" r="6"><title>Step 3360, 1.76B tokens: learning rate 6.60e-05</title></circle>
<circle class="hit" cx="282.0" cy="371.6" r="6"><title>Step 3460, 1.81B tokens: learning rate 5.37e-05</title></circle>
<circle class="hit" cx="291.5" cy="375.7" r="6"><title>Step 3560, 1.87B tokens: learning rate 4.29e-05</title></circle>
<circle class="hit" cx="301.0" cy="379.1" r="6"><title>Step 3660, 1.92B tokens: learning rate 3.39e-05</title></circle>
<circle class="hit" cx="310.5" cy="381.7" r="6"><title>Step 3760, 1.97B tokens: learning rate 2.71e-05</title></circle>
<circle class="hit" cx="320.0" cy="383.5" r="6"><title>Step 3860, 2.02B tokens: learning rate 2.24e-05</title></circle>
<circle class="hit" cx="329.5" cy="384.3" r="6"><title>Step 3960, 2.08B tokens: learning rate 2.02e-05</title></circle>
<circle class="hit" cx="339.0" cy="357.7" r="6"><title>Step 4060, 2.13B tokens: learning rate 9.00e-05</title></circle>
<circle class="hit" cx="348.5" cy="334.9" r="6"><title>Step 4160, 2.18B tokens: learning rate 1.50e-04</title></circle>
<circle class="hit" cx="358.0" cy="335.1" r="6"><title>Step 4260, 2.23B tokens: learning rate 1.49e-04</title></circle>
<circle class="hit" cx="367.5" cy="335.4" r="6"><title>Step 4360, 2.29B tokens: learning rate 1.48e-04</title></circle>
<circle class="hit" cx="377.0" cy="336.0" r="6"><title>Step 4460, 2.34B tokens: learning rate 1.47e-04</title></circle>
<circle class="hit" cx="386.5" cy="336.7" r="6"><title>Step 4560, 2.39B tokens: learning rate 1.45e-04</title></circle>
<circle class="hit" cx="396.0" cy="337.5" r="6"><title>Step 4660, 2.44B tokens: learning rate 1.43e-04</title></circle>
<circle class="hit" cx="405.5" cy="338.5" r="6"><title>Step 4760, 2.50B tokens: learning rate 1.40e-04</title></circle>
<circle class="hit" cx="415.0" cy="339.7" r="6"><title>Step 4860, 2.55B tokens: learning rate 1.37e-04</title></circle>
<circle class="hit" cx="424.5" cy="341.0" r="6"><title>Step 4960, 2.60B tokens: learning rate 1.34e-04</title></circle>
<circle class="hit" cx="434.0" cy="342.4" r="6"><title>Step 5060, 2.65B tokens: learning rate 1.30e-04</title></circle>
<circle class="hit" cx="443.5" cy="344.0" r="6"><title>Step 5160, 2.71B tokens: learning rate 1.26e-04</title></circle>
<circle class="hit" cx="453.0" cy="345.7" r="6"><title>Step 5260, 2.76B tokens: learning rate 1.22e-04</title></circle>
<circle class="hit" cx="462.5" cy="347.4" r="6"><title>Step 5360, 2.81B tokens: learning rate 1.17e-04</title></circle>
<circle class="hit" cx="472.0" cy="349.3" r="6"><title>Step 5460, 2.86B tokens: learning rate 1.12e-04</title></circle>
<circle class="hit" cx="481.5" cy="351.2" r="6"><title>Step 5560, 2.92B tokens: learning rate 1.07e-04</title></circle>
<circle class="hit" cx="491.0" cy="353.3" r="6"><title>Step 5660, 2.97B tokens: learning rate 1.02e-04</title></circle>
<circle class="hit" cx="500.5" cy="355.3" r="6"><title>Step 5760, 3.02B tokens: learning rate 9.63e-05</title></circle>
<circle class="hit" cx="510.0" cy="357.4" r="6"><title>Step 5860, 3.07B tokens: learning rate 9.07e-05</title></circle>
<circle class="hit" cx="519.5" cy="359.6" r="6"><title>Step 5960, 3.12B tokens: learning rate 8.51e-05</title></circle>
<circle class="hit" cx="529.0" cy="361.7" r="6"><title>Step 6060, 3.18B tokens: learning rate 7.95e-05</title></circle>
<circle class="hit" cx="538.5" cy="363.9" r="6"><title>Step 6160, 3.23B tokens: learning rate 7.39e-05</title></circle>
<circle class="hit" cx="548.0" cy="366.0" r="6"><title>Step 6260, 3.28B tokens: learning rate 6.83e-05</title></circle>
<circle class="hit" cx="557.5" cy="368.1" r="6"><title>Step 6360, 3.33B tokens: learning rate 6.28e-05</title></circle>
<circle class="hit" cx="566.9" cy="370.2" r="6"><title>Step 6460, 3.39B tokens: learning rate 5.74e-05</title></circle>
<circle class="hit" cx="576.4" cy="372.2" r="6"><title>Step 6560, 3.44B tokens: learning rate 5.21e-05</title></circle>
<circle class="hit" cx="585.9" cy="374.1" r="6"><title>Step 6660, 3.49B tokens: learning rate 4.70e-05</title></circle>
<circle class="hit" cx="595.4" cy="375.9" r="6"><title>Step 6760, 3.54B tokens: learning rate 4.22e-05</title></circle>
<circle class="hit" cx="604.9" cy="377.7" r="6"><title>Step 6860, 3.60B tokens: learning rate 3.75e-05</title></circle>
<circle class="hit" cx="614.4" cy="379.4" r="6"><title>Step 6960, 3.65B tokens: learning rate 3.32e-05</title></circle>
<circle class="hit" cx="623.9" cy="380.9" r="6"><title>Step 7060, 3.70B tokens: learning rate 2.92e-05</title></circle>
<circle class="hit" cx="633.4" cy="382.3" r="6"><title>Step 7160, 3.75B tokens: learning rate 2.55e-05</title></circle>
<circle class="hit" cx="642.9" cy="383.6" r="6"><title>Step 7260, 3.81B tokens: learning rate 2.21e-05</title></circle>
<circle class="hit" cx="652.4" cy="384.7" r="6"><title>Step 7360, 3.86B tokens: learning rate 1.91e-05</title></circle>
<circle class="hit" cx="661.9" cy="385.7" r="6"><title>Step 7460, 3.91B tokens: learning rate 1.65e-05</title></circle>
<circle class="hit" cx="671.4" cy="386.5" r="6"><title>Step 7560, 3.96B tokens: learning rate 1.44e-05</title></circle>
<circle class="hit" cx="680.9" cy="387.2" r="6"><title>Step 7660, 4.02B tokens: learning rate 1.26e-05</title></circle>
<circle class="hit" cx="690.4" cy="387.7" r="6"><title>Step 7760, 4.07B tokens: learning rate 1.13e-05</title></circle>
<circle class="hit" cx="699.9" cy="388.0" r="6"><title>Step 7860, 4.12B tokens: learning rate 1.05e-05</title></circle>
<circle class="hit" cx="709.4" cy="388.2" r="6"><title>Step 7960, 4.17B tokens: learning rate 1.00e-05</title></circle>
<text class="tick" x="134.6" y="412" text-anchor="middle">1B</text>
<text class="tick" x="315.7" y="412" text-anchor="middle">2B</text>
<text class="tick" x="496.9" y="412" text-anchor="middle">3B</text>
<text class="tick" x="678.0" y="412" text-anchor="middle">4B</text>
<text class="axis-label" x="736" y="430" text-anchor="end">training tokens</text>
</svg>

</div>
<figcaption>Validation loss from 0.5B tokens on, with the learning rate underneath on the same axis. The shaded areas are where each phase sits above the previous phase's final loss. Hover a point to see its exact value; on a phone, scroll the chart sideways.</figcaption>
</figure>

<p>Raising the learning rate on a model that had just been annealed undid part of that annealing. Validation loss rose from 3.323 to 3.383 and took 600 steps to get back below 3.323, about a third of phase 2. The shaded areas in the chart are that cost.</p>

<p>Phase 3 repeated it and showed what governs the size of the bill. It rose from 3.139 to 3.193, then needed 1,100 steps to recover, nearly twice phase 2’s 600. The restart itself wasn’t worse; phase 3’s cosine simply runs over 4,000 steps instead of 2,000, so it holds the learning rate near its peak for twice as long. The cost tracks how long the schedule stays hot, not the act of restarting.</p>

<p>Both phases finished well ahead, so both restarts were worth doing. But together they spent 1,700 of the run’s 8,000 steps, 21% of the budget, re-earning ground already taken. A warmup-stable-decay schedule avoids this entirely: hold the learning rate constant and decay it only at the very end. It’s the better choice whenever the total training budget isn’t fixed in advance, which for me it usually isn’t.</p>

<h2 id="what-moved-and-what-didnt">What moved and what didn’t</h2>

<figure class="wide">
<ul class="legend">
<li><span class="legend-key"></span>My model</li>
<li><span class="legend-key k-target"></span>Pythia-410M after 300B tokens</li>
<li><span class="legend-key k-chance"></span>Chance</li>
</ul>
<ul class="small-multiples">
<li>
<h3>LAMBADA <span class="panel-value">0.230</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="lambada-accuracy-t lambada-accuracy-d">
<title id="lambada-accuracy-t">LAMBADA accuracy</title>
<desc id="lambada-accuracy-d">LAMBADA accuracy rises from 0.021 at 262M tokens to 0.230 at 4.2B. Fully trained Pythia-410M scores 0.479.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="target" x1="30" x2="210" y1="56.6" y2="56.6"><title>Pythia-410M after 300B tokens: 0.479</title></line>
<path class="line" d="M41.0,123.0 L51.9,110.5 L62.9,105.6 L73.9,104.1 L117.8,95.3 L205.6,92.6" />
<circle class="dot dot-sm" cx="41.0" cy="123.0" r="3"><title>LAMBADA, 0.26B tokens: 0.021</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="110.5" r="3"><title>LAMBADA, 0.52B tokens: 0.107</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="105.6" r="3"><title>LAMBADA, 0.79B tokens: 0.141</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="104.1" r="3"><title>LAMBADA, 1.05B tokens: 0.151</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="95.3" r="3"><title>LAMBADA, 2.10B tokens: 0.212</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="92.6" r="3"><title>LAMBADA, 4.19B tokens: 0.230</title></circle>
</svg>
</li>
<li>
<h3>SciQ <span class="panel-value">0.660</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="sciq-accuracy-t sciq-accuracy-d">
<title id="sciq-accuracy-t">SciQ accuracy</title>
<desc id="sciq-accuracy-d">SciQ accuracy rises from 0.397 at 262M tokens to 0.660 at 4.2B, against chance at 0.25. Fully trained Pythia-410M scores 0.735.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="89.8" y2="89.8"><title>Chance: 0.25</title></line>
<line class="target" x1="30" x2="210" y1="19.4" y2="19.4"><title>Pythia-410M after 300B tokens: 0.735</title></line>
<path class="line" d="M41.0,68.4 L51.9,42.9 L62.9,41.9 L73.9,37.6 L117.8,34.9 L205.6,30.3" />
<circle class="dot dot-sm" cx="41.0" cy="68.4" r="3"><title>SciQ, 0.26B tokens: 0.397</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="42.9" r="3"><title>SciQ, 0.52B tokens: 0.573</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="41.9" r="3"><title>SciQ, 0.79B tokens: 0.580</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="37.6" r="3"><title>SciQ, 1.05B tokens: 0.610</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="34.9" r="3"><title>SciQ, 2.10B tokens: 0.628</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="30.3" r="3"><title>SciQ, 4.19B tokens: 0.660</title></circle>
</svg>
</li>
<li>
<h3>ARC-Easy <span class="panel-value">0.458</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="arc-easy-accuracy-t arc-easy-accuracy-d">
<title id="arc-easy-accuracy-t">ARC-Easy accuracy</title>
<desc id="arc-easy-accuracy-d">ARC-Easy accuracy rises from 0.333 at 262M tokens to 0.458 at 4.2B, against chance at 0.25. Fully trained Pythia-410M scores 0.458.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="89.8" y2="89.8"><title>Chance: 0.25</title></line>
<line class="target" x1="30" x2="210" y1="59.5" y2="59.5"><title>Pythia-410M after 300B tokens: 0.458</title></line>
<path class="line" d="M41.0,77.8 L51.9,69.9 L62.9,67.3 L73.9,65.8 L117.8,61.2 L205.6,59.6" />
<circle class="dot dot-sm" cx="41.0" cy="77.8" r="3"><title>ARC-Easy, 0.26B tokens: 0.333</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="69.9" r="3"><title>ARC-Easy, 0.52B tokens: 0.387</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="67.3" r="3"><title>ARC-Easy, 0.79B tokens: 0.405</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="65.8" r="3"><title>ARC-Easy, 1.05B tokens: 0.415</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="61.2" r="3"><title>ARC-Easy, 2.10B tokens: 0.447</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="59.6" r="3"><title>ARC-Easy, 4.19B tokens: 0.458</title></circle>
</svg>
</li>
<li>
<h3>BoolQ <span class="panel-value">0.621</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="boolq-accuracy-t boolq-accuracy-d">
<title id="boolq-accuracy-t">BoolQ accuracy</title>
<desc id="boolq-accuracy-d">BoolQ accuracy rises from 0.423 at 262M tokens to 0.621 at 4.2B, against chance at 0.50. Fully trained Pythia-410M scores 0.598.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="53.5" y2="53.5"><title>Chance: 0.50</title></line>
<line class="target" x1="30" x2="210" y1="39.3" y2="39.3"><title>Pythia-410M after 300B tokens: 0.598</title></line>
<path class="line" d="M41.0,64.7 L51.9,40.8 L62.9,36.0 L73.9,36.0 L117.8,35.8 L205.6,35.9" />
<circle class="dot dot-sm" cx="41.0" cy="64.7" r="3"><title>BoolQ, 0.26B tokens: 0.423</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="40.8" r="3"><title>BoolQ, 0.52B tokens: 0.588</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="36.0" r="3"><title>BoolQ, 0.79B tokens: 0.621</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="36.0" r="3"><title>BoolQ, 1.05B tokens: 0.621</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="35.8" r="3"><title>BoolQ, 2.10B tokens: 0.622</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="35.9" r="3"><title>BoolQ, 4.19B tokens: 0.621</title></circle>
</svg>
</li>
<li>
<h3>PIQA <span class="panel-value">0.628</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="piqa-accuracy-t piqa-accuracy-d">
<title id="piqa-accuracy-t">PIQA accuracy</title>
<desc id="piqa-accuracy-d">PIQA accuracy rises from 0.545 at 262M tokens to 0.628 at 4.2B, against chance at 0.50. Fully trained Pythia-410M scores 0.675.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="53.5" y2="53.5"><title>Chance: 0.50</title></line>
<line class="target" x1="30" x2="210" y1="28.2" y2="28.2"><title>Pythia-410M after 300B tokens: 0.675</title></line>
<path class="line" d="M41.0,47.0 L51.9,42.9 L62.9,40.6 L73.9,39.9 L117.8,37.0 L205.6,35.0" />
<circle class="dot dot-sm" cx="41.0" cy="47.0" r="3"><title>PIQA, 0.26B tokens: 0.545</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="42.9" r="3"><title>PIQA, 0.52B tokens: 0.573</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="40.6" r="3"><title>PIQA, 0.79B tokens: 0.589</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="39.9" r="3"><title>PIQA, 1.05B tokens: 0.594</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="37.0" r="3"><title>PIQA, 2.10B tokens: 0.614</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="35.0" r="3"><title>PIQA, 4.19B tokens: 0.628</title></circle>
</svg>
</li>
<li>
<h3>OpenBookQA <span class="panel-value">0.312</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="openbookqa-accuracy-t openbookqa-accuracy-d">
<title id="openbookqa-accuracy-t">OpenBookQA accuracy</title>
<desc id="openbookqa-accuracy-d">OpenBookQA accuracy rises from 0.254 at 262M tokens to 0.312 at 4.2B, against chance at 0.25. Fully trained Pythia-410M scores 0.300.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="89.8" y2="89.8"><title>Chance: 0.25</title></line>
<line class="target" x1="30" x2="210" y1="82.5" y2="82.5"><title>Pythia-410M after 300B tokens: 0.300</title></line>
<path class="line" d="M41.0,89.2 L51.9,85.1 L62.9,85.7 L73.9,85.4 L117.8,81.9 L205.6,80.8" />
<circle class="dot dot-sm" cx="41.0" cy="89.2" r="3"><title>OpenBookQA, 0.26B tokens: 0.254</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="85.1" r="3"><title>OpenBookQA, 0.52B tokens: 0.282</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="85.7" r="3"><title>OpenBookQA, 0.79B tokens: 0.278</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="85.4" r="3"><title>OpenBookQA, 1.05B tokens: 0.280</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="81.9" r="3"><title>OpenBookQA, 2.10B tokens: 0.304</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="80.8" r="3"><title>OpenBookQA, 4.19B tokens: 0.312</title></circle>
</svg>
</li>
<li>
<h3>HellaSwag <span class="panel-value">0.326</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="hellaswag-accuracy-t hellaswag-accuracy-d">
<title id="hellaswag-accuracy-t">HellaSwag accuracy</title>
<desc id="hellaswag-accuracy-d">HellaSwag accuracy rises from 0.260 at 262M tokens to 0.326 at 4.2B, against chance at 0.25. Fully trained Pythia-410M scores 0.406.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="89.8" y2="89.8"><title>Chance: 0.25</title></line>
<line class="target" x1="30" x2="210" y1="67.2" y2="67.2"><title>Pythia-410M after 300B tokens: 0.406</title></line>
<path class="line" d="M41.0,88.3 L51.9,86.8 L62.9,85.9 L73.9,85.1 L117.8,82.8 L205.6,78.7" />
<circle class="dot dot-sm" cx="41.0" cy="88.3" r="3"><title>HellaSwag, 0.26B tokens: 0.260</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="86.8" r="3"><title>HellaSwag, 0.52B tokens: 0.271</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="85.9" r="3"><title>HellaSwag, 0.79B tokens: 0.277</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="85.1" r="3"><title>HellaSwag, 1.05B tokens: 0.282</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="82.8" r="3"><title>HellaSwag, 2.10B tokens: 0.298</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="78.7" r="3"><title>HellaSwag, 4.19B tokens: 0.326</title></circle>
</svg>
</li>
<li>
<h3>WinoGrande <span class="panel-value">0.502</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="winogrande-accuracy-t winogrande-accuracy-d">
<title id="winogrande-accuracy-t">WinoGrande accuracy</title>
<desc id="winogrande-accuracy-d">WinoGrande accuracy rises from 0.489 at 262M tokens to 0.502 at 4.2B, against chance at 0.50. Fully trained Pythia-410M scores 0.538.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="53.5" y2="53.5"><title>Chance: 0.50</title></line>
<line class="target" x1="30" x2="210" y1="47.9" y2="47.9"><title>Pythia-410M after 300B tokens: 0.538</title></line>
<path class="line" d="M41.0,55.2 L51.9,48.4 L62.9,51.3 L73.9,50.0 L117.8,50.6 L205.6,53.2" />
<circle class="dot dot-sm" cx="41.0" cy="55.2" r="3"><title>WinoGrande, 0.26B tokens: 0.489</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="48.4" r="3"><title>WinoGrande, 0.52B tokens: 0.535</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="51.3" r="3"><title>WinoGrande, 0.79B tokens: 0.515</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="50.0" r="3"><title>WinoGrande, 1.05B tokens: 0.524</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="50.6" r="3"><title>WinoGrande, 2.10B tokens: 0.520</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="53.2" r="3"><title>WinoGrande, 4.19B tokens: 0.502</title></circle>
</svg>
</li>
<li>
<h3>ARC-Challenge <span class="panel-value">0.265</span></h3>
<svg class="chart chart-small" viewBox="0 0 220 150" role="img" aria-labelledby="arc-challenge-accuracy-t arc-challenge-accuracy-d">
<title id="arc-challenge-accuracy-t">ARC-Challenge accuracy</title>
<desc id="arc-challenge-accuracy-d">ARC-Challenge accuracy rises from 0.232 at 262M tokens to 0.265 at 4.2B, against chance at 0.25. Fully trained Pythia-410M scores 0.247.</desc>
<line class="grid" x1="30" x2="210" y1="126.0" y2="126.0" />
<text class="tick tick-sm" x="25" y="129.5" text-anchor="end">0.0</text>
<line class="grid" x1="30" x2="210" y1="97.0" y2="97.0" />
<text class="tick tick-sm" x="25" y="100.5" text-anchor="end">0.2</text>
<line class="grid" x1="30" x2="210" y1="68.0" y2="68.0" />
<text class="tick tick-sm" x="25" y="71.5" text-anchor="end">0.4</text>
<line class="grid" x1="30" x2="210" y1="39.0" y2="39.0" />
<text class="tick tick-sm" x="25" y="42.5" text-anchor="end">0.6</text>
<line class="grid" x1="30" x2="210" y1="10.0" y2="10.0" />
<text class="tick tick-sm" x="25" y="13.5" text-anchor="end">0.8</text>
<text class="tick tick-sm" x="71.9" y="140" text-anchor="middle">1B</text>
<text class="tick tick-sm" x="113.7" y="140" text-anchor="middle">2B</text>
<text class="tick tick-sm" x="155.6" y="140" text-anchor="middle">3B</text>
<text class="tick tick-sm" x="197.4" y="140" text-anchor="middle">4B</text>
<line class="chance" x1="30" x2="210" y1="89.8" y2="89.8"><title>Chance: 0.25</title></line>
<line class="target" x1="30" x2="210" y1="90.2" y2="90.2"><title>Pythia-410M after 300B tokens: 0.247</title></line>
<path class="line" d="M41.0,92.3 L51.9,93.6 L62.9,92.5 L73.9,92.2 L117.8,89.9 L205.6,87.5" />
<circle class="dot dot-sm" cx="41.0" cy="92.3" r="3"><title>ARC-Challenge, 0.26B tokens: 0.232</title></circle>
<circle class="dot dot-sm" cx="51.9" cy="93.6" r="3"><title>ARC-Challenge, 0.52B tokens: 0.224</title></circle>
<circle class="dot dot-sm" cx="62.9" cy="92.5" r="3"><title>ARC-Challenge, 0.79B tokens: 0.231</title></circle>
<circle class="dot dot-sm" cx="73.9" cy="92.2" r="3"><title>ARC-Challenge, 1.05B tokens: 0.233</title></circle>
<circle class="dot dot-sm" cx="117.8" cy="89.9" r="3"><title>ARC-Challenge, 2.10B tokens: 0.249</title></circle>
<circle class="dot dot-sm" cx="205.6" cy="87.5" r="3"><title>ARC-Challenge, 4.19B tokens: 0.265</title></circle>
</svg>
</li>
</ul>

<figcaption>Accuracy on each task against training tokens, all on the same 0 to 0.8 scale. The number beside each name is the final score at 4.19B tokens. LAMBADA asks for a free-text word, so it has no chance line.</figcaption>
</figure>

<details>
  <summary>Show the numbers</summary>

  <table>
    <thead>
      <tr>
        <th>Task</th>
        <th style="text-align: right">262M</th>
        <th style="text-align: right">524M</th>
        <th style="text-align: right">786M</th>
        <th style="text-align: right">1.05B</th>
        <th style="text-align: right">2.10B</th>
        <th style="text-align: right">4.19B</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>LAMBADA</td>
        <td style="text-align: right">0.021</td>
        <td style="text-align: right">0.107</td>
        <td style="text-align: right">0.141</td>
        <td style="text-align: right">0.151</td>
        <td style="text-align: right">0.212</td>
        <td style="text-align: right">0.230</td>
      </tr>
      <tr>
        <td>SciQ</td>
        <td style="text-align: right">0.397</td>
        <td style="text-align: right">0.573</td>
        <td style="text-align: right">0.580</td>
        <td style="text-align: right">0.610</td>
        <td style="text-align: right">0.628</td>
        <td style="text-align: right">0.660</td>
      </tr>
      <tr>
        <td>ARC-Easy</td>
        <td style="text-align: right">0.332</td>
        <td style="text-align: right">0.387</td>
        <td style="text-align: right">0.404</td>
        <td style="text-align: right">0.415</td>
        <td style="text-align: right">0.447</td>
        <td style="text-align: right">0.458</td>
      </tr>
      <tr>
        <td>BoolQ</td>
        <td style="text-align: right">0.423</td>
        <td style="text-align: right">0.588</td>
        <td style="text-align: right">0.620</td>
        <td style="text-align: right">0.621</td>
        <td style="text-align: right">0.622</td>
        <td style="text-align: right">0.621</td>
      </tr>
      <tr>
        <td>PIQA</td>
        <td style="text-align: right">0.545</td>
        <td style="text-align: right">0.573</td>
        <td style="text-align: right">0.589</td>
        <td style="text-align: right">0.594</td>
        <td style="text-align: right">0.614</td>
        <td style="text-align: right">0.628</td>
      </tr>
      <tr>
        <td>OpenBookQA</td>
        <td style="text-align: right">0.254</td>
        <td style="text-align: right">0.282</td>
        <td style="text-align: right">0.278</td>
        <td style="text-align: right">0.280</td>
        <td style="text-align: right">0.304</td>
        <td style="text-align: right">0.312</td>
      </tr>
      <tr>
        <td>HellaSwag</td>
        <td style="text-align: right">0.260</td>
        <td style="text-align: right">0.270</td>
        <td style="text-align: right">0.277</td>
        <td style="text-align: right">0.282</td>
        <td style="text-align: right">0.298</td>
        <td style="text-align: right">0.326</td>
      </tr>
      <tr>
        <td>WinoGrande</td>
        <td style="text-align: right">0.489</td>
        <td style="text-align: right">0.535</td>
        <td style="text-align: right">0.515</td>
        <td style="text-align: right">0.524</td>
        <td style="text-align: right">0.520</td>
        <td style="text-align: right">0.502</td>
      </tr>
      <tr>
        <td>ARC-Challenge</td>
        <td style="text-align: right">0.232</td>
        <td style="text-align: right">0.224</td>
        <td style="text-align: right">0.231</td>
        <td style="text-align: right">0.233</td>
        <td style="text-align: right">0.249</td>
        <td style="text-align: right">0.265</td>
      </tr>
      <tr>
        <td><strong>Average</strong></td>
        <td style="text-align: right"><strong>0.328</strong></td>
        <td style="text-align: right"><strong>0.393</strong></td>
        <td style="text-align: right"><strong>0.404</strong></td>
        <td style="text-align: right"><strong>0.412</strong></td>
        <td style="text-align: right"><strong>0.433</strong></td>
        <td style="text-align: right"><strong>0.445</strong></td>
      </tr>
      <tr>
        <td>WikiText perplexity</td>
        <td style="text-align: right">185.2</td>
        <td style="text-align: right">86.7</td>
        <td style="text-align: right">68.1</td>
        <td style="text-align: right">62.1</td>
        <td style="text-align: right">49.5</td>
        <td style="text-align: right">42.1</td>
      </tr>
    </tbody>
  </table>

</details>

<p>LAMBADA, which asks the model to predict the last word of a passage, rose elevenfold from 0.021 to 0.230, making it the most useful single sign of progress. SciQ nearly doubled. HellaSwag sat nearly still for two phases and then finally began to move in phase 3, from 0.298 to 0.326.</p>

<p>ARC-Challenge ended at 0.265 and WinoGrande at 0.502, both at or near chance after the whole run, and Pythia’s checkpoints at the same token counts behave the same way. At this scale those two cost evaluation time without informing a single decision. I’d drop them from the tracking suite and watch validation perplexity and LAMBADA instead.</p>

<h2 id="averaging-the-weights-didnt-help">Averaging the weights didn’t help</h2>

<p>Phase 3 also kept an exponential moving average of the weights, on the usual reasoning that averaging away the noise the last steps leave in each parameter is worth a few tenths of a point. It wasn’t. The averaged weights scored 0.443 against the final checkpoint’s 0.445, and were slightly worse on validation perplexity too, 42.5 against 42.1. That’s within noise, but it is certainly not a gain.</p>

<p>The reason makes sense in hindsight. Averaging helps when training ends while the learning rate is still high and the weights are still being jostled around. This run ends at 1e-5 after a full cosine decay, so the last thousand steps are already taking tiny, quiet steps. The decay had done the averaging already. The two techniques are substitutes, not complements.</p>

<details>
  <summary>Show the head-to-head</summary>

  <table>
    <thead>
      <tr>
        <th> </th>
        <th style="text-align: right">Final weights</th>
        <th style="text-align: right">Weight-averaged</th>
        <th style="text-align: right">Difference</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><strong>Average accuracy</strong></td>
        <td style="text-align: right"><strong>0.4448</strong></td>
        <td style="text-align: right">0.4430</td>
        <td style="text-align: right">-0.0018</td>
      </tr>
      <tr>
        <td>LAMBADA</td>
        <td style="text-align: right">0.230</td>
        <td style="text-align: right">0.228</td>
        <td style="text-align: right">-0.002</td>
      </tr>
      <tr>
        <td>SciQ</td>
        <td style="text-align: right">0.660</td>
        <td style="text-align: right">0.655</td>
        <td style="text-align: right">-0.005</td>
      </tr>
      <tr>
        <td>ARC-Easy</td>
        <td style="text-align: right">0.458</td>
        <td style="text-align: right">0.460</td>
        <td style="text-align: right">+0.003</td>
      </tr>
      <tr>
        <td>BoolQ</td>
        <td style="text-align: right">0.621</td>
        <td style="text-align: right">0.621</td>
        <td style="text-align: right">-0.000</td>
      </tr>
      <tr>
        <td>PIQA</td>
        <td style="text-align: right">0.628</td>
        <td style="text-align: right">0.631</td>
        <td style="text-align: right">+0.003</td>
      </tr>
      <tr>
        <td>OpenBookQA</td>
        <td style="text-align: right">0.312</td>
        <td style="text-align: right">0.312</td>
        <td style="text-align: right">+0.000</td>
      </tr>
      <tr>
        <td>HellaSwag</td>
        <td style="text-align: right">0.326</td>
        <td style="text-align: right">0.321</td>
        <td style="text-align: right">-0.006</td>
      </tr>
      <tr>
        <td>WinoGrande</td>
        <td style="text-align: right">0.502</td>
        <td style="text-align: right">0.495</td>
        <td style="text-align: right">-0.007</td>
      </tr>
      <tr>
        <td>ARC-Challenge</td>
        <td style="text-align: right">0.265</td>
        <td style="text-align: right">0.265</td>
        <td style="text-align: right">-0.001</td>
      </tr>
      <tr>
        <td>WikiText perplexity</td>
        <td style="text-align: right">42.13</td>
        <td style="text-align: right">42.53</td>
        <td style="text-align: right">+0.39</td>
      </tr>
    </tbody>
  </table>

</details>

<p>So: if you can afford to decay the learning rate properly, do that and skip the averaging. Keep it for runs that end while the rate is still high, which is what happens with a constant-rate schedule, an early stop, or a budget that runs out mid-decay. Finding this out cost one gigabyte of disk and no measurable training time, which is a fair price for knowing.</p>

<h2 id="training-health">Training health</h2>

<p>I also logged per-layer gradient norms, activation sizes, and prediction entropy throughout. None of them needed action this time, but each would have caught a problem long before it showed up in the loss curve.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 250" role="img" aria-labelledby="gradient-norm-t gradient-norm-d">
<title id="gradient-norm-t">Gradient norm</title>
<desc id="gradient-norm-d">Global gradient norm over the run, measured before clipping. It spikes above the clipping threshold of 1.0 21 times, all within the first 540 steps, then settles between 0.2 and 0.4 for the remaining 7460 steps and never triggers clipping again.</desc>
<text class="axis-label" x="46" y="16">global gradient norm, before clipping</text>
<line class="grid" x1="46" x2="736" y1="206.0" y2="206.0" />
<text class="tick" x="38" y="210.0" text-anchor="end">0</text>
<line class="grid" x1="46" x2="736" y1="178.8" y2="178.8" />
<text class="tick" x="38" y="182.8" text-anchor="end">1</text>
<line class="grid" x1="46" x2="736" y1="151.7" y2="151.7" />
<text class="tick" x="38" y="155.7" text-anchor="end">2</text>
<line class="grid" x1="46" x2="736" y1="124.5" y2="124.5" />
<text class="tick" x="38" y="128.5" text-anchor="end">3</text>
<line class="grid" x1="46" x2="736" y1="97.4" y2="97.4" />
<text class="tick" x="38" y="101.4" text-anchor="end">4</text>
<line class="grid" x1="46" x2="736" y1="70.2" y2="70.2" />
<text class="tick" x="38" y="74.2" text-anchor="end">5</text>
<line class="grid" x1="46" x2="736" y1="43.1" y2="43.1" />
<text class="tick" x="38" y="47.1" text-anchor="end">6</text>
<line class="ref" x1="46" x2="736" y1="178.8" y2="178.8" />
<text class="note" x="732" y="172.8" text-anchor="end">clipping threshold, 1.0</text>
<line class="boundary" x1="218.5" x2="218.5" y1="34" y2="206" />
<line class="boundary" x1="391.0" x2="391.0" y1="34" y2="206" />
<path class="line line-thin" d="M46.9,46.7 L47.7,150.7 L48.6,123.5 L49.5,140.6 L50.3,179.7 L51.2,172.5 L52.0,172.8 L52.9,182.7 L53.8,167.1 L54.6,177.3 L55.5,183.7 L56.4,165.9 L57.2,161.3 L58.1,164.6 L58.9,177.8 L59.8,184.0 L60.7,179.7 L61.5,187.6 L62.4,176.6 L63.2,136.2 L64.1,172.0 L65.0,166.4 L65.8,178.9 L66.7,193.8 L67.6,189.7 L68.4,188.1 L69.3,189.6 L70.2,194.3 L71.0,191.4 L71.9,195.2 L72.7,187.7 L73.6,174.2 L74.5,175.9 L75.3,186.8 L76.2,195.1 L77.0,190.9 L77.9,194.8 L78.8,195.3 L79.6,194.4 L80.5,195.1 L81.4,195.2 L82.2,193.3 L83.1,188.3 L84.0,196.4 L84.8,194.7 L85.7,192.5 L86.5,194.7 L87.4,153.2 L88.3,192.3 L89.1,191.1 L90.0,195.6 L90.8,72.6 L91.7,195.5 L92.6,150.0 L93.4,188.6 L94.3,194.2 L95.2,197.0 L96.0,196.2 L96.9,181.3 L97.8,195.6 L98.6,194.7 L99.5,192.9 L100.3,193.1 L101.2,197.1 L102.1,193.8 L102.9,195.8 L103.8,193.6 L104.7,196.7 L105.5,196.1 L106.4,195.8 L107.2,195.9 L108.1,196.3 L109.0,196.5 L109.8,197.8 L110.7,196.7 L111.5,197.1 L112.4,194.2 L113.3,197.8 L114.1,197.9 L115.0,196.9 L115.9,198.1 L116.7,196.8 L117.6,195.4 L118.5,192.6 L119.3,197.6 L120.2,193.1 L121.0,198.1 L121.9,194.9 L122.8,196.3 L123.6,197.3 L124.5,197.8 L125.4,197.4 L126.2,197.6 L127.1,194.8 L127.9,194.4 L128.8,198.2 L129.7,197.7 L130.5,196.0 L131.4,198.4 L132.2,197.4 L133.1,195.7 L134.0,198.4 L134.8,197.9 L135.7,198.4 L136.6,196.1 L137.4,197.9 L138.3,198.5 L139.2,198.4 L140.0,198.2 L140.9,198.2 L141.7,198.2 L142.6,198.6 L143.5,198.4 L144.3,198.5 L145.2,198.5 L146.1,198.1 L146.9,198.1 L147.8,198.8 L148.6,197.9 L149.5,198.1 L150.4,198.7 L151.2,198.6 L152.1,198.8 L152.9,198.4 L153.8,198.7 L154.7,198.7 L155.5,197.8 L156.4,198.5 L157.3,198.6 L158.1,198.3 L159.0,198.1 L159.9,199.1 L160.7,198.9 L161.6,198.8 L162.4,198.9 L163.3,198.4 L164.2,198.0 L165.0,198.7 L165.9,199.1 L166.8,198.5 L167.6,198.3 L168.5,199.0 L169.3,199.0 L170.2,199.0 L171.1,198.5 L171.9,199.3 L172.8,199.2 L173.6,199.1 L174.5,199.0 L175.4,198.9 L176.2,199.2 L177.1,199.2 L178.0,198.8 L178.8,199.0 L179.7,199.3 L180.6,198.9 L181.4,198.7 L182.3,199.1 L183.1,199.1 L184.0,199.0 L184.9,199.1 L185.7,199.1 L186.6,199.2 L187.4,198.8 L188.3,199.2 L189.2,199.2 L190.0,199.2 L190.9,199.0 L191.8,199.3 L192.6,198.7 L193.5,198.9 L194.3,199.0 L195.2,193.6 L196.1,199.3 L196.9,198.8 L197.8,198.9 L198.7,199.1 L199.5,199.0 L200.4,199.1 L201.2,199.2 L202.1,199.1 L203.0,199.2 L203.8,199.1 L204.7,198.8 L205.6,199.2 L206.4,198.9 L207.3,199.2 L208.1,199.2 L209.0,199.1 L209.9,199.3 L210.7,199.3 L211.6,199.2 L212.5,199.4 L213.3,199.1 L214.2,199.1 L215.0,199.2 L215.9,199.0 L216.8,199.0 L217.6,198.8 L218.5,198.9 L219.4,199.3 L220.2,199.0 L221.1,197.6 L222.0,198.3 L222.8,197.4 L223.7,197.2 L224.5,195.5 L225.4,197.3 L226.3,196.6 L227.1,196.1 L228.0,196.2 L228.9,196.3 L229.7,197.8 L230.6,196.8 L231.4,197.7 L232.3,197.3 L233.2,196.8 L234.0,197.1 L234.9,196.8 L235.8,195.6 L236.6,196.9 L237.5,197.0 L238.3,197.5 L239.2,197.8 L240.1,197.6 L240.9,197.5 L241.8,196.8 L242.6,196.9 L243.5,197.5 L244.4,197.6 L245.2,197.5 L246.1,197.1 L247.0,197.5 L247.8,197.3 L248.7,197.7 L249.5,197.3 L250.4,197.7 L251.3,197.8 L252.1,196.9 L253.0,197.7 L253.9,197.9 L254.7,198.1 L255.6,197.7 L256.4,198.4 L257.3,198.3 L258.2,197.3 L259.0,198.0 L259.9,198.1 L260.8,198.7 L261.6,198.4 L262.5,197.3 L263.4,198.3 L264.2,198.4 L265.1,198.2 L265.9,197.9 L266.8,198.4 L267.7,198.2 L268.5,198.4 L269.4,198.3 L270.2,198.4 L271.1,198.0 L272.0,198.3 L272.8,198.3 L273.7,198.3 L274.6,198.1 L275.4,198.2 L276.3,198.1 L277.1,198.9 L278.0,198.7 L278.9,198.6 L279.7,197.6 L280.6,198.3 L281.5,198.4 L282.3,198.5 L283.2,198.5 L284.0,198.6 L284.9,198.6 L285.8,198.6 L286.6,198.8 L287.5,198.1 L288.4,198.9 L289.2,198.2 L290.1,198.7 L290.9,198.5 L291.8,199.2 L292.7,198.7 L293.5,198.7 L294.4,197.9 L295.3,198.9 L296.1,198.3 L297.0,198.6 L297.9,198.7 L298.7,198.9 L299.6,199.2 L300.4,198.4 L301.3,198.7 L302.2,199.1 L303.0,198.3 L303.9,199.0 L304.8,198.3 L305.6,198.8 L306.5,199.0 L307.3,198.6 L308.2,198.0 L309.1,199.1 L309.9,198.8 L310.8,199.1 L311.7,198.8 L312.5,199.0 L313.4,199.0 L314.2,199.1 L315.1,199.2 L316.0,199.2 L316.8,199.1 L317.7,199.2 L318.6,199.2 L319.4,198.4 L320.3,199.1 L321.1,198.8 L322.0,199.1 L322.9,198.7 L323.7,198.9 L324.6,199.0 L325.5,199.2 L326.3,199.3 L327.2,199.1 L328.0,199.1 L328.9,199.3 L329.8,198.9 L330.6,199.1 L331.5,199.2 L332.3,199.1 L333.2,199.3 L334.1,199.1 L334.9,199.4 L335.8,199.3 L336.7,199.4 L337.5,199.1 L338.4,198.7 L339.2,199.3 L340.1,199.1 L341.0,199.3 L341.8,199.2 L342.7,199.3 L343.6,199.2 L344.4,199.3 L345.3,199.4 L346.1,199.4 L347.0,199.4 L347.9,199.2 L348.7,199.3 L349.6,199.2 L350.5,199.4 L351.3,199.5 L352.2,199.3 L353.1,199.4 L353.9,199.4 L354.8,199.5 L355.6,199.3 L356.5,199.5 L357.4,199.4 L358.2,199.5 L359.1,199.3 L359.9,199.3 L360.8,199.4 L361.7,199.4 L362.5,199.4 L363.4,199.3 L364.3,199.5 L365.1,199.7 L366.0,199.3 L366.9,199.7 L367.7,199.5 L368.6,199.3 L369.4,199.4 L370.3,199.1 L371.2,199.5 L372.0,199.5 L372.9,199.6 L373.8,199.5 L374.6,199.5 L375.5,199.5 L376.3,199.4 L377.2,199.6 L378.1,199.6 L378.9,199.4 L379.8,199.3 L380.6,199.5 L381.5,199.5 L382.4,199.4 L383.2,199.6 L384.1,199.5 L385.0,199.5 L385.8,199.5 L386.7,199.3 L387.6,199.4 L388.4,199.5 L389.3,199.4 L390.1,199.4 L391.0,199.1 L391.9,199.5 L392.7,199.3 L393.6,199.2 L394.4,198.7 L395.3,198.7 L396.2,198.5 L397.0,197.6 L397.9,197.4 L398.8,197.6 L399.6,197.0 L400.5,197.5 L401.4,198.0 L402.2,197.3 L403.1,197.9 L403.9,197.7 L404.8,198.3 L405.7,197.2 L406.5,197.1 L407.4,197.8 L408.2,197.4 L409.1,197.8 L410.0,197.2 L410.8,198.2 L411.7,198.0 L412.6,197.8 L413.4,197.9 L414.3,197.7 L415.2,198.5 L416.0,197.9 L416.9,198.2 L417.7,198.3 L418.6,197.7 L419.5,198.0 L420.3,197.9 L421.2,198.3 L422.1,198.3 L422.9,197.5 L423.8,198.6 L424.6,198.5 L425.5,197.8 L426.4,197.6 L427.2,198.0 L428.1,198.1 L429.0,198.8 L429.8,198.5 L430.7,198.1 L431.5,198.1 L432.4,198.4 L433.3,197.8 L434.1,198.5 L435.0,198.4 L435.8,197.6 L436.7,198.7 L437.6,198.4 L438.4,198.5 L439.3,198.7 L440.2,198.6 L441.0,198.2 L441.9,198.4 L442.7,198.2 L443.6,198.2 L444.5,198.2 L445.3,198.7 L446.2,198.2 L447.1,198.5 L447.9,198.4 L448.8,198.5 L449.6,198.3 L450.5,197.9 L451.4,197.7 L452.2,198.1 L453.1,198.1 L454.0,198.2 L454.8,198.0 L455.7,198.2 L456.5,198.3 L457.4,198.0 L458.3,198.4 L459.1,198.1 L460.0,197.6 L460.9,198.6 L461.7,198.2 L462.6,198.6 L463.4,198.5 L464.3,198.7 L465.2,197.4 L466.0,198.4 L466.9,198.3 L467.8,198.6 L468.6,198.3 L469.5,198.6 L470.3,198.6 L471.2,198.7 L472.1,198.7 L472.9,198.6 L473.8,198.6 L474.7,198.3 L475.5,198.9 L476.4,197.9 L477.2,198.1 L478.1,198.7 L479.0,198.9 L479.8,198.6 L480.7,198.7 L481.6,198.5 L482.4,198.3 L483.3,198.4 L484.2,198.5 L485.0,198.8 L485.9,198.9 L486.7,198.1 L487.6,198.8 L488.5,199.1 L489.3,198.6 L490.2,198.7 L491.1,198.1 L491.9,198.3 L492.8,198.7 L493.6,198.9 L494.5,198.6 L495.4,198.8 L496.2,198.8 L497.1,198.5 L498.0,198.5 L498.8,198.7 L499.7,198.4 L500.5,198.7 L501.4,198.9 L502.3,198.8 L503.1,198.5 L504.0,198.9 L504.9,199.0 L505.7,199.0 L506.6,198.7 L507.4,198.6 L508.3,198.5 L509.2,199.0 L510.0,198.8 L510.9,198.3 L511.8,198.7 L512.6,198.2 L513.5,198.4 L514.3,198.7 L515.2,198.2 L516.1,198.7 L516.9,198.8 L517.8,199.0 L518.7,198.5 L519.5,199.0 L520.4,198.3 L521.2,198.8 L522.1,199.1 L523.0,198.1 L523.8,197.8 L524.7,198.8 L525.5,198.9 L526.4,198.8 L527.3,198.8 L528.1,198.9 L529.0,198.8 L529.9,198.8 L530.7,198.8 L531.6,198.9 L532.5,198.7 L533.3,199.3 L534.2,199.0 L535.0,198.6 L535.9,198.6 L536.8,199.0 L537.6,199.0 L538.5,199.0 L539.3,198.2 L540.2,198.8 L541.1,199.0 L541.9,199.0 L542.8,199.0 L543.7,198.8 L544.5,199.1 L545.4,198.6 L546.2,198.8 L547.1,198.7 L548.0,199.1 L548.8,198.9 L549.7,199.2 L550.6,199.1 L551.4,198.8 L552.3,198.9 L553.1,199.0 L554.0,199.0 L554.9,198.7 L555.7,199.1 L556.6,198.4 L557.5,199.1 L558.3,198.9 L559.2,198.9 L560.0,199.2 L560.9,198.9 L561.8,198.7 L562.6,199.0 L563.5,199.3 L564.4,199.2 L565.2,198.5 L566.1,198.7 L567.0,198.6 L567.8,198.8 L568.7,198.9 L569.5,198.9 L570.4,198.9 L571.3,198.9 L572.1,199.0 L573.0,198.9 L573.9,198.9 L574.7,199.1 L575.6,199.2 L576.4,198.8 L577.3,199.2 L578.2,199.2 L579.0,198.9 L579.9,198.8 L580.8,199.1 L581.6,198.8 L582.5,199.0 L583.3,199.0 L584.2,198.9 L585.1,199.1 L585.9,198.8 L586.8,199.1 L587.6,199.3 L588.5,199.3 L589.4,199.3 L590.2,198.9 L591.1,198.7 L592.0,199.1 L592.8,199.1 L593.7,199.1 L594.6,199.0 L595.4,199.0 L596.3,199.0 L597.1,199.1 L598.0,198.6 L598.9,199.0 L599.7,198.9 L600.6,199.0 L601.5,199.1 L602.3,199.1 L603.2,198.9 L604.0,199.1 L604.9,198.8 L605.8,199.2 L606.6,199.2 L607.5,198.9 L608.3,198.5 L609.2,198.8 L610.1,199.3 L610.9,199.0 L611.8,198.9 L612.7,199.0 L613.5,198.9 L614.4,199.1 L615.2,198.6 L616.1,199.0 L617.0,199.2 L617.8,199.0 L618.7,199.2 L619.6,199.2 L620.4,199.0 L621.3,199.0 L622.1,199.0 L623.0,199.0 L623.9,199.0 L624.7,199.2 L625.6,199.0 L626.5,198.9 L627.3,199.0 L628.2,199.2 L629.0,199.0 L629.9,198.9 L630.8,199.1 L631.6,199.0 L632.5,199.1 L633.4,199.1 L634.2,199.1 L635.1,199.1 L635.9,198.9 L636.8,199.2 L637.7,199.1 L638.5,199.2 L639.4,199.1 L640.3,199.2 L641.1,199.1 L642.0,199.2 L642.9,199.1 L643.7,199.1 L644.6,199.3 L645.4,199.3 L646.3,199.3 L647.2,199.0 L648.0,199.2 L648.9,199.2 L649.8,199.1 L650.6,199.2 L651.5,199.2 L652.3,199.0 L653.2,199.2 L654.1,199.2 L654.9,198.9 L655.8,199.1 L656.6,199.1 L657.5,199.1 L658.4,199.2 L659.2,199.3 L660.1,199.1 L661.0,199.1 L661.8,199.2 L662.7,199.1 L663.6,199.3 L664.4,199.2 L665.3,199.2 L666.1,199.2 L667.0,199.3 L667.9,199.1 L668.7,199.2 L669.6,199.0 L670.5,199.1 L671.3,199.2 L672.2,199.1 L673.0,199.1 L673.9,199.3 L674.8,199.1 L675.6,199.3 L676.5,199.2 L677.4,199.2 L678.2,199.3 L679.1,199.3 L679.9,199.3 L680.8,199.1 L681.7,199.2 L682.5,199.2 L683.4,199.2 L684.2,199.2 L685.1,199.2 L686.0,199.2 L686.8,199.1 L687.7,199.2 L688.6,199.2 L689.4,199.2 L690.3,199.2 L691.2,199.2 L692.0,199.1 L692.9,199.4 L693.7,199.2 L694.6,199.3 L695.5,199.2 L696.3,199.3 L697.2,199.3 L698.0,199.3 L698.9,199.2 L699.8,199.2 L700.6,199.4 L701.5,199.1 L702.4,199.3 L703.2,199.3 L704.1,199.1 L704.9,199.2 L705.8,199.2 L706.7,199.1 L707.5,199.3 L708.4,199.2 L709.3,199.3 L710.1,199.4 L711.0,199.2 L711.9,199.3 L712.7,199.2 L713.6,199.3 L714.4,199.2 L715.3,199.2 L716.2,199.3 L717.0,199.2 L717.9,199.2 L718.8,199.2 L719.6,199.2 L720.5,199.2 L721.3,199.3 L722.2,199.3 L723.1,199.2 L723.9,199.1 L724.8,199.3 L725.6,199.2 L726.5,199.1 L727.4,199.1 L728.2,199.2 L729.1,199.2 L730.0,199.3 L730.8,199.1 L731.7,199.3 L732.5,199.3 L733.4,199.2 L734.3,199.2 L735.1,199.3 L736.0,199.2" />
<circle class="dot dot-2" cx="46.9" cy="46.7" r="3.5"><title>Step 10: gradient norm 5.86, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="47.7" cy="150.7" r="3.5"><title>Step 20: gradient norm 2.04, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="48.6" cy="123.5" r="3.5"><title>Step 30: gradient norm 3.04, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="49.5" cy="140.6" r="3.5"><title>Step 40: gradient norm 2.41, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="51.2" cy="172.5" r="3.5"><title>Step 60: gradient norm 1.23, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="52.0" cy="172.8" r="3.5"><title>Step 70: gradient norm 1.22, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="53.8" cy="167.1" r="3.5"><title>Step 90: gradient norm 1.43, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="54.6" cy="177.3" r="3.5"><title>Step 100: gradient norm 1.06, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="56.4" cy="165.9" r="3.5"><title>Step 120: gradient norm 1.48, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="57.2" cy="161.3" r="3.5"><title>Step 130: gradient norm 1.65, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="58.1" cy="164.6" r="3.5"><title>Step 140: gradient norm 1.52, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="58.9" cy="177.8" r="3.5"><title>Step 150: gradient norm 1.04, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="62.4" cy="176.6" r="3.5"><title>Step 190: gradient norm 1.08, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="63.2" cy="136.2" r="3.5"><title>Step 200: gradient norm 2.57, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="64.1" cy="172.0" r="3.5"><title>Step 210: gradient norm 1.25, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="65.0" cy="166.4" r="3.5"><title>Step 220: gradient norm 1.46, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="73.6" cy="174.2" r="3.5"><title>Step 320: gradient norm 1.17, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="74.5" cy="175.9" r="3.5"><title>Step 330: gradient norm 1.11, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="87.4" cy="153.2" r="3.5"><title>Step 480: gradient norm 1.95, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="90.8" cy="72.6" r="3.5"><title>Step 520: gradient norm 4.91, clipped to 1.0</title></circle>
<circle class="dot dot-2" cx="92.6" cy="150.0" r="3.5"><title>Step 540: gradient norm 2.06, clipped to 1.0</title></circle>
<circle class="hit" cx="46.9" cy="46.7" r="6"><title>Step 10: gradient norm 5.865</title></circle>
<circle class="hit" cx="55.5" cy="183.7" r="6"><title>Step 110: gradient norm 0.823</title></circle>
<circle class="hit" cx="64.1" cy="172.0" r="6"><title>Step 210: gradient norm 1.251</title></circle>
<circle class="hit" cx="72.7" cy="187.7" r="6"><title>Step 310: gradient norm 0.673</title></circle>
<circle class="hit" cx="81.4" cy="195.2" r="6"><title>Step 410: gradient norm 0.396</title></circle>
<circle class="hit" cx="90.0" cy="195.6" r="6"><title>Step 510: gradient norm 0.383</title></circle>
<circle class="hit" cx="98.6" cy="194.7" r="6"><title>Step 610: gradient norm 0.417</title></circle>
<circle class="hit" cx="107.2" cy="195.9" r="6"><title>Step 710: gradient norm 0.372</title></circle>
<circle class="hit" cx="115.9" cy="198.1" r="6"><title>Step 810: gradient norm 0.293</title></circle>
<circle class="hit" cx="124.5" cy="197.8" r="6"><title>Step 910: gradient norm 0.301</title></circle>
<circle class="hit" cx="133.1" cy="195.7" r="6"><title>Step 1010: gradient norm 0.378</title></circle>
<circle class="hit" cx="141.7" cy="198.2" r="6"><title>Step 1110: gradient norm 0.289</title></circle>
<circle class="hit" cx="150.4" cy="198.7" r="6"><title>Step 1210: gradient norm 0.269</title></circle>
<circle class="hit" cx="159.0" cy="198.1" r="6"><title>Step 1310: gradient norm 0.293</title></circle>
<circle class="hit" cx="167.6" cy="198.3" r="6"><title>Step 1410: gradient norm 0.282</title></circle>
<circle class="hit" cx="176.2" cy="199.2" r="6"><title>Step 1510: gradient norm 0.251</title></circle>
<circle class="hit" cx="184.9" cy="199.1" r="6"><title>Step 1610: gradient norm 0.254</title></circle>
<circle class="hit" cx="193.5" cy="198.9" r="6"><title>Step 1710: gradient norm 0.261</title></circle>
<circle class="hit" cx="202.1" cy="199.1" r="6"><title>Step 1810: gradient norm 0.255</title></circle>
<circle class="hit" cx="210.7" cy="199.3" r="6"><title>Step 1910: gradient norm 0.247</title></circle>
<circle class="hit" cx="219.4" cy="199.3" r="6"><title>Step 2010: gradient norm 0.247</title></circle>
<circle class="hit" cx="228.0" cy="196.2" r="6"><title>Step 2110: gradient norm 0.360</title></circle>
<circle class="hit" cx="236.6" cy="196.9" r="6"><title>Step 2210: gradient norm 0.335</title></circle>
<circle class="hit" cx="245.2" cy="197.5" r="6"><title>Step 2310: gradient norm 0.313</title></circle>
<circle class="hit" cx="253.9" cy="197.9" r="6"><title>Step 2410: gradient norm 0.299</title></circle>
<circle class="hit" cx="262.5" cy="197.3" r="6"><title>Step 2510: gradient norm 0.322</title></circle>
<circle class="hit" cx="271.1" cy="198.0" r="6"><title>Step 2610: gradient norm 0.293</title></circle>
<circle class="hit" cx="279.7" cy="197.6" r="6"><title>Step 2710: gradient norm 0.308</title></circle>
<circle class="hit" cx="288.4" cy="198.9" r="6"><title>Step 2810: gradient norm 0.260</title></circle>
<circle class="hit" cx="297.0" cy="198.6" r="6"><title>Step 2910: gradient norm 0.273</title></circle>
<circle class="hit" cx="305.6" cy="198.8" r="6"><title>Step 3010: gradient norm 0.265</title></circle>
<circle class="hit" cx="314.2" cy="199.1" r="6"><title>Step 3110: gradient norm 0.253</title></circle>
<circle class="hit" cx="322.9" cy="198.7" r="6"><title>Step 3210: gradient norm 0.268</title></circle>
<circle class="hit" cx="331.5" cy="199.2" r="6"><title>Step 3310: gradient norm 0.249</title></circle>
<circle class="hit" cx="340.1" cy="199.1" r="6"><title>Step 3410: gradient norm 0.255</title></circle>
<circle class="hit" cx="348.7" cy="199.3" r="6"><title>Step 3510: gradient norm 0.247</title></circle>
<circle class="hit" cx="357.4" cy="199.4" r="6"><title>Step 3610: gradient norm 0.244</title></circle>
<circle class="hit" cx="366.0" cy="199.3" r="6"><title>Step 3710: gradient norm 0.245</title></circle>
<circle class="hit" cx="374.6" cy="199.5" r="6"><title>Step 3810: gradient norm 0.238</title></circle>
<circle class="hit" cx="383.2" cy="199.6" r="6"><title>Step 3910: gradient norm 0.237</title></circle>
<circle class="hit" cx="391.9" cy="199.5" r="6"><title>Step 4010: gradient norm 0.238</title></circle>
<circle class="hit" cx="400.5" cy="197.5" r="6"><title>Step 4110: gradient norm 0.313</title></circle>
<circle class="hit" cx="409.1" cy="197.8" r="6"><title>Step 4210: gradient norm 0.303</title></circle>
<circle class="hit" cx="417.7" cy="198.3" r="6"><title>Step 4310: gradient norm 0.283</title></circle>
<circle class="hit" cx="426.4" cy="197.6" r="6"><title>Step 4410: gradient norm 0.310</title></circle>
<circle class="hit" cx="435.0" cy="198.4" r="6"><title>Step 4510: gradient norm 0.279</title></circle>
<circle class="hit" cx="443.6" cy="198.2" r="6"><title>Step 4610: gradient norm 0.287</title></circle>
<circle class="hit" cx="452.2" cy="198.1" r="6"><title>Step 4710: gradient norm 0.289</title></circle>
<circle class="hit" cx="460.9" cy="198.6" r="6"><title>Step 4810: gradient norm 0.271</title></circle>
<circle class="hit" cx="469.5" cy="198.6" r="6"><title>Step 4910: gradient norm 0.271</title></circle>
<circle class="hit" cx="478.1" cy="198.7" r="6"><title>Step 5010: gradient norm 0.268</title></circle>
<circle class="hit" cx="486.7" cy="198.1" r="6"><title>Step 5110: gradient norm 0.292</title></circle>
<circle class="hit" cx="495.4" cy="198.8" r="6"><title>Step 5210: gradient norm 0.265</title></circle>
<circle class="hit" cx="504.0" cy="198.9" r="6"><title>Step 5310: gradient norm 0.261</title></circle>
<circle class="hit" cx="512.6" cy="198.2" r="6"><title>Step 5410: gradient norm 0.286</title></circle>
<circle class="hit" cx="521.2" cy="198.8" r="6"><title>Step 5510: gradient norm 0.264</title></circle>
<circle class="hit" cx="529.9" cy="198.8" r="6"><title>Step 5610: gradient norm 0.265</title></circle>
<circle class="hit" cx="538.5" cy="199.0" r="6"><title>Step 5710: gradient norm 0.259</title></circle>
<circle class="hit" cx="547.1" cy="198.7" r="6"><title>Step 5810: gradient norm 0.271</title></circle>
<circle class="hit" cx="555.7" cy="199.1" r="6"><title>Step 5910: gradient norm 0.255</title></circle>
<circle class="hit" cx="564.4" cy="199.2" r="6"><title>Step 6010: gradient norm 0.249</title></circle>
<circle class="hit" cx="573.0" cy="198.9" r="6"><title>Step 6110: gradient norm 0.260</title></circle>
<circle class="hit" cx="581.6" cy="198.8" r="6"><title>Step 6210: gradient norm 0.267</title></circle>
<circle class="hit" cx="590.2" cy="198.9" r="6"><title>Step 6310: gradient norm 0.261</title></circle>
<circle class="hit" cx="598.9" cy="199.0" r="6"><title>Step 6410: gradient norm 0.259</title></circle>
<circle class="hit" cx="607.5" cy="198.9" r="6"><title>Step 6510: gradient norm 0.262</title></circle>
<circle class="hit" cx="616.1" cy="199.0" r="6"><title>Step 6610: gradient norm 0.259</title></circle>
<circle class="hit" cx="624.7" cy="199.2" r="6"><title>Step 6710: gradient norm 0.250</title></circle>
<circle class="hit" cx="633.4" cy="199.1" r="6"><title>Step 6810: gradient norm 0.254</title></circle>
<circle class="hit" cx="642.0" cy="199.2" r="6"><title>Step 6910: gradient norm 0.250</title></circle>
<circle class="hit" cx="650.6" cy="199.2" r="6"><title>Step 7010: gradient norm 0.251</title></circle>
<circle class="hit" cx="659.2" cy="199.3" r="6"><title>Step 7110: gradient norm 0.246</title></circle>
<circle class="hit" cx="667.9" cy="199.1" r="6"><title>Step 7210: gradient norm 0.255</title></circle>
<circle class="hit" cx="676.5" cy="199.2" r="6"><title>Step 7310: gradient norm 0.250</title></circle>
<circle class="hit" cx="685.1" cy="199.2" r="6"><title>Step 7410: gradient norm 0.249</title></circle>
<circle class="hit" cx="693.7" cy="199.2" r="6"><title>Step 7510: gradient norm 0.250</title></circle>
<circle class="hit" cx="702.4" cy="199.3" r="6"><title>Step 7610: gradient norm 0.248</title></circle>
<circle class="hit" cx="711.0" cy="199.2" r="6"><title>Step 7710: gradient norm 0.251</title></circle>
<circle class="hit" cx="719.6" cy="199.2" r="6"><title>Step 7810: gradient norm 0.250</title></circle>
<circle class="hit" cx="728.2" cy="199.2" r="6"><title>Step 7910: gradient norm 0.252</title></circle>
<text class="tick" x="218.5" y="226" text-anchor="middle">2000</text>
<text class="tick" x="391.0" y="226" text-anchor="middle">4000</text>
<text class="tick" x="563.5" y="226" text-anchor="middle">6000</text>
<text class="tick" x="736.0" y="226" text-anchor="middle">8000</text>
<text class="axis-label" x="736" y="244" text-anchor="end">step</text>
</svg>

</div>
<figcaption>The global gradient norm, measured before clipping, with the clipped steps marked. Clipping only ever bound early: 21 steps in total, the last at step 540, and never again across the remaining 7,460.</figcaption>
</figure>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 298" role="img" aria-labelledby="gradient-norm-by-layer-t gradient-norm-by-layer-d">
<title id="gradient-norm-by-layer-t">Gradient norm by layer</title>
<desc id="gradient-norm-by-layer-d">Heatmap of gradient norm for each of the 24 layers at every 100 steps. Layer 0 is consistently the darkest, with roughly four times the gradient of the early-middle layers, and the second half of the network runs darker than the first. All layers lighten together as training proceeds, darken slightly when the learning rate restarts at steps 2000 and 4000, and no layer drifts away from the rest.</desc>
<path class="heat heat-0" d="M108.8,61.0h7.5v8h-7.5zM108.8,70.0h7.5v8h-7.5zM108.8,88.0h7.5v8h-7.5zM117.3,43.0h7.5v8h-7.5zM117.3,52.0h7.5v8h-7.5zM117.3,61.0h7.5v8h-7.5zM117.3,70.0h7.5v8h-7.5zM117.3,79.0h7.5v8h-7.5zM117.3,88.0h7.5v8h-7.5zM125.8,43.0h7.5v8h-7.5zM125.8,52.0h7.5v8h-7.5zM125.8,61.0h7.5v8h-7.5zM125.8,70.0h7.5v8h-7.5zM125.8,79.0h7.5v8h-7.5zM125.8,88.0h7.5v8h-7.5zM125.8,97.0h7.5v8h-7.5zM134.3,34.0h7.5v8h-7.5zM134.3,43.0h7.5v8h-7.5zM134.3,52.0h7.5v8h-7.5zM134.3,61.0h7.5v8h-7.5zM134.3,70.0h7.5v8h-7.5zM134.3,79.0h7.5v8h-7.5zM134.3,88.0h7.5v8h-7.5zM134.3,97.0h7.5v8h-7.5zM142.8,34.0h7.5v8h-7.5zM142.8,43.0h7.5v8h-7.5zM142.8,52.0h7.5v8h-7.5zM142.8,61.0h7.5v8h-7.5zM142.8,70.0h7.5v8h-7.5zM142.8,79.0h7.5v8h-7.5zM142.8,88.0h7.5v8h-7.5zM142.8,97.0h7.5v8h-7.5zM151.2,34.0h7.5v8h-7.5zM151.2,43.0h7.5v8h-7.5zM151.2,52.0h7.5v8h-7.5zM151.2,61.0h7.5v8h-7.5zM151.2,70.0h7.5v8h-7.5zM151.2,79.0h7.5v8h-7.5zM151.2,88.0h7.5v8h-7.5zM151.2,97.0h7.5v8h-7.5zM159.7,34.0h7.5v8h-7.5zM159.7,43.0h7.5v8h-7.5zM159.7,52.0h7.5v8h-7.5zM159.7,61.0h7.5v8h-7.5zM159.7,70.0h7.5v8h-7.5zM159.7,79.0h7.5v8h-7.5zM159.7,88.0h7.5v8h-7.5zM159.7,97.0h7.5v8h-7.5zM168.2,34.0h7.5v8h-7.5zM168.2,43.0h7.5v8h-7.5zM168.2,52.0h7.5v8h-7.5zM168.2,61.0h7.5v8h-7.5zM168.2,70.0h7.5v8h-7.5zM168.2,79.0h7.5v8h-7.5zM168.2,88.0h7.5v8h-7.5zM168.2,97.0h7.5v8h-7.5zM176.6,34.0h7.5v8h-7.5zM176.6,43.0h7.5v8h-7.5zM176.6,52.0h7.5v8h-7.5zM176.6,61.0h7.5v8h-7.5zM176.6,70.0h7.5v8h-7.5zM176.6,79.0h7.5v8h-7.5zM176.6,88.0h7.5v8h-7.5zM176.6,97.0h7.5v8h-7.5zM185.1,34.0h7.5v8h-7.5zM185.1,43.0h7.5v8h-7.5zM185.1,52.0h7.5v8h-7.5zM185.1,61.0h7.5v8h-7.5zM185.1,70.0h7.5v8h-7.5zM185.1,79.0h7.5v8h-7.5zM185.1,88.0h7.5v8h-7.5zM185.1,97.0h7.5v8h-7.5zM193.6,34.0h7.5v8h-7.5zM193.6,43.0h7.5v8h-7.5zM193.6,52.0h7.5v8h-7.5zM193.6,61.0h7.5v8h-7.5zM193.6,70.0h7.5v8h-7.5zM193.6,79.0h7.5v8h-7.5zM193.6,88.0h7.5v8h-7.5zM193.6,97.0h7.5v8h-7.5zM202.1,34.0h7.5v8h-7.5zM202.1,43.0h7.5v8h-7.5zM202.1,52.0h7.5v8h-7.5zM202.1,61.0h7.5v8h-7.5zM202.1,70.0h7.5v8h-7.5zM202.1,79.0h7.5v8h-7.5zM202.1,88.0h7.5v8h-7.5zM202.1,97.0h7.5v8h-7.5zM210.5,34.0h7.5v8h-7.5zM210.5,43.0h7.5v8h-7.5zM210.5,52.0h7.5v8h-7.5zM210.5,61.0h7.5v8h-7.5zM210.5,70.0h7.5v8h-7.5zM210.5,79.0h7.5v8h-7.5zM210.5,88.0h7.5v8h-7.5zM210.5,97.0h7.5v8h-7.5zM219.0,34.0h7.5v8h-7.5zM219.0,43.0h7.5v8h-7.5zM219.0,52.0h7.5v8h-7.5zM219.0,61.0h7.5v8h-7.5zM219.0,70.0h7.5v8h-7.5zM219.0,79.0h7.5v8h-7.5zM219.0,88.0h7.5v8h-7.5zM227.5,70.0h7.5v8h-7.5zM236.0,61.0h7.5v8h-7.5zM236.0,70.0h7.5v8h-7.5zM244.4,34.0h7.5v8h-7.5zM244.4,43.0h7.5v8h-7.5zM244.4,52.0h7.5v8h-7.5zM244.4,61.0h7.5v8h-7.5zM244.4,70.0h7.5v8h-7.5zM244.4,79.0h7.5v8h-7.5zM244.4,88.0h7.5v8h-7.5zM252.9,34.0h7.5v8h-7.5zM252.9,43.0h7.5v8h-7.5zM252.9,52.0h7.5v8h-7.5zM252.9,61.0h7.5v8h-7.5zM252.9,70.0h7.5v8h-7.5zM252.9,79.0h7.5v8h-7.5zM252.9,88.0h7.5v8h-7.5zM261.4,34.0h7.5v8h-7.5zM261.4,43.0h7.5v8h-7.5zM261.4,52.0h7.5v8h-7.5zM261.4,61.0h7.5v8h-7.5zM261.4,70.0h7.5v8h-7.5zM261.4,79.0h7.5v8h-7.5zM261.4,88.0h7.5v8h-7.5zM261.4,97.0h7.5v8h-7.5zM269.9,34.0h7.5v8h-7.5zM269.9,43.0h7.5v8h-7.5zM269.9,52.0h7.5v8h-7.5zM269.9,61.0h7.5v8h-7.5zM269.9,70.0h7.5v8h-7.5zM269.9,79.0h7.5v8h-7.5zM269.9,88.0h7.5v8h-7.5zM269.9,97.0h7.5v8h-7.5zM278.4,25.0h7.5v8h-7.5zM278.4,34.0h7.5v8h-7.5zM278.4,43.0h7.5v8h-7.5zM278.4,52.0h7.5v8h-7.5zM278.4,61.0h7.5v8h-7.5zM278.4,70.0h7.5v8h-7.5zM278.4,79.0h7.5v8h-7.5zM278.4,88.0h7.5v8h-7.5zM278.4,97.0h7.5v8h-7.5zM286.8,34.0h7.5v8h-7.5zM286.8,43.0h7.5v8h-7.5zM286.8,52.0h7.5v8h-7.5zM286.8,61.0h7.5v8h-7.5zM286.8,70.0h7.5v8h-7.5zM286.8,79.0h7.5v8h-7.5zM286.8,88.0h7.5v8h-7.5zM295.3,25.0h7.5v8h-7.5zM295.3,34.0h7.5v8h-7.5zM295.3,43.0h7.5v8h-7.5zM295.3,52.0h7.5v8h-7.5zM295.3,61.0h7.5v8h-7.5zM295.3,70.0h7.5v8h-7.5zM295.3,79.0h7.5v8h-7.5zM295.3,88.0h7.5v8h-7.5zM295.3,97.0h7.5v8h-7.5zM303.8,25.0h7.5v8h-7.5zM303.8,34.0h7.5v8h-7.5zM303.8,43.0h7.5v8h-7.5zM303.8,52.0h7.5v8h-7.5zM303.8,61.0h7.5v8h-7.5zM303.8,70.0h7.5v8h-7.5zM303.8,79.0h7.5v8h-7.5zM303.8,88.0h7.5v8h-7.5zM303.8,97.0h7.5v8h-7.5zM312.2,25.0h7.5v8h-7.5zM312.2,34.0h7.5v8h-7.5zM312.2,43.0h7.5v8h-7.5zM312.2,52.0h7.5v8h-7.5zM312.2,61.0h7.5v8h-7.5zM312.2,70.0h7.5v8h-7.5zM312.2,79.0h7.5v8h-7.5zM312.2,88.0h7.5v8h-7.5zM312.2,97.0h7.5v8h-7.5zM320.7,25.0h7.5v8h-7.5zM320.7,34.0h7.5v8h-7.5zM320.7,43.0h7.5v8h-7.5zM320.7,52.0h7.5v8h-7.5zM320.7,61.0h7.5v8h-7.5zM320.7,70.0h7.5v8h-7.5zM320.7,79.0h7.5v8h-7.5zM320.7,88.0h7.5v8h-7.5zM320.7,97.0h7.5v8h-7.5zM329.2,25.0h7.5v8h-7.5zM329.2,34.0h7.5v8h-7.5zM329.2,43.0h7.5v8h-7.5zM329.2,52.0h7.5v8h-7.5zM329.2,61.0h7.5v8h-7.5zM329.2,70.0h7.5v8h-7.5zM329.2,79.0h7.5v8h-7.5zM329.2,88.0h7.5v8h-7.5zM329.2,97.0h7.5v8h-7.5zM337.7,25.0h7.5v8h-7.5zM337.7,34.0h7.5v8h-7.5zM337.7,43.0h7.5v8h-7.5zM337.7,52.0h7.5v8h-7.5zM337.7,61.0h7.5v8h-7.5zM337.7,70.0h7.5v8h-7.5zM337.7,79.0h7.5v8h-7.5zM337.7,88.0h7.5v8h-7.5zM337.7,97.0h7.5v8h-7.5zM346.1,25.0h7.5v8h-7.5zM346.1,34.0h7.5v8h-7.5zM346.1,43.0h7.5v8h-7.5zM346.1,52.0h7.5v8h-7.5zM346.1,61.0h7.5v8h-7.5zM346.1,70.0h7.5v8h-7.5zM346.1,79.0h7.5v8h-7.5zM346.1,88.0h7.5v8h-7.5zM346.1,97.0h7.5v8h-7.5zM354.6,25.0h7.5v8h-7.5zM354.6,34.0h7.5v8h-7.5zM354.6,43.0h7.5v8h-7.5zM354.6,52.0h7.5v8h-7.5zM354.6,61.0h7.5v8h-7.5zM354.6,70.0h7.5v8h-7.5zM354.6,79.0h7.5v8h-7.5zM354.6,88.0h7.5v8h-7.5zM354.6,97.0h7.5v8h-7.5zM363.1,25.0h7.5v8h-7.5zM363.1,34.0h7.5v8h-7.5zM363.1,43.0h7.5v8h-7.5zM363.1,52.0h7.5v8h-7.5zM363.1,61.0h7.5v8h-7.5zM363.1,70.0h7.5v8h-7.5zM363.1,79.0h7.5v8h-7.5zM363.1,88.0h7.5v8h-7.5zM363.1,97.0h7.5v8h-7.5zM371.6,25.0h7.5v8h-7.5zM371.6,34.0h7.5v8h-7.5zM371.6,43.0h7.5v8h-7.5zM371.6,52.0h7.5v8h-7.5zM371.6,61.0h7.5v8h-7.5zM371.6,70.0h7.5v8h-7.5zM371.6,79.0h7.5v8h-7.5zM371.6,88.0h7.5v8h-7.5zM371.6,97.0h7.5v8h-7.5zM380.1,25.0h7.5v8h-7.5zM380.1,34.0h7.5v8h-7.5zM380.1,43.0h7.5v8h-7.5zM380.1,52.0h7.5v8h-7.5zM380.1,61.0h7.5v8h-7.5zM380.1,70.0h7.5v8h-7.5zM380.1,79.0h7.5v8h-7.5zM380.1,88.0h7.5v8h-7.5zM388.5,25.0h7.5v8h-7.5zM388.5,34.0h7.5v8h-7.5zM388.5,43.0h7.5v8h-7.5zM388.5,52.0h7.5v8h-7.5zM388.5,61.0h7.5v8h-7.5zM388.5,70.0h7.5v8h-7.5zM388.5,79.0h7.5v8h-7.5zM388.5,88.0h7.5v8h-7.5zM397.0,43.0h7.5v8h-7.5zM397.0,52.0h7.5v8h-7.5zM397.0,61.0h7.5v8h-7.5zM397.0,70.0h7.5v8h-7.5zM405.5,52.0h7.5v8h-7.5zM405.5,61.0h7.5v8h-7.5zM405.5,70.0h7.5v8h-7.5zM413.9,25.0h7.5v8h-7.5zM413.9,34.0h7.5v8h-7.5zM413.9,43.0h7.5v8h-7.5zM413.9,52.0h7.5v8h-7.5zM413.9,61.0h7.5v8h-7.5zM413.9,70.0h7.5v8h-7.5zM413.9,79.0h7.5v8h-7.5zM413.9,88.0h7.5v8h-7.5zM422.4,34.0h7.5v8h-7.5zM422.4,43.0h7.5v8h-7.5zM422.4,52.0h7.5v8h-7.5zM422.4,61.0h7.5v8h-7.5zM422.4,70.0h7.5v8h-7.5zM422.4,88.0h7.5v8h-7.5zM430.9,25.0h7.5v8h-7.5zM430.9,34.0h7.5v8h-7.5zM430.9,43.0h7.5v8h-7.5zM430.9,52.0h7.5v8h-7.5zM430.9,61.0h7.5v8h-7.5zM430.9,70.0h7.5v8h-7.5zM430.9,79.0h7.5v8h-7.5zM430.9,88.0h7.5v8h-7.5zM439.4,25.0h7.5v8h-7.5zM439.4,34.0h7.5v8h-7.5zM439.4,43.0h7.5v8h-7.5zM439.4,52.0h7.5v8h-7.5zM439.4,61.0h7.5v8h-7.5zM439.4,70.0h7.5v8h-7.5zM439.4,79.0h7.5v8h-7.5zM439.4,88.0h7.5v8h-7.5zM447.8,34.0h7.5v8h-7.5zM447.8,43.0h7.5v8h-7.5zM447.8,52.0h7.5v8h-7.5zM447.8,61.0h7.5v8h-7.5zM447.8,70.0h7.5v8h-7.5zM447.8,88.0h7.5v8h-7.5zM456.3,25.0h7.5v8h-7.5zM456.3,34.0h7.5v8h-7.5zM456.3,43.0h7.5v8h-7.5zM456.3,52.0h7.5v8h-7.5zM456.3,61.0h7.5v8h-7.5zM456.3,70.0h7.5v8h-7.5zM456.3,79.0h7.5v8h-7.5zM456.3,88.0h7.5v8h-7.5zM464.8,25.0h7.5v8h-7.5zM464.8,34.0h7.5v8h-7.5zM464.8,43.0h7.5v8h-7.5zM464.8,52.0h7.5v8h-7.5zM464.8,61.0h7.5v8h-7.5zM464.8,70.0h7.5v8h-7.5zM464.8,88.0h7.5v8h-7.5zM473.3,25.0h7.5v8h-7.5zM473.3,43.0h7.5v8h-7.5zM473.3,52.0h7.5v8h-7.5zM473.3,61.0h7.5v8h-7.5zM473.3,70.0h7.5v8h-7.5zM473.3,88.0h7.5v8h-7.5zM481.8,25.0h7.5v8h-7.5zM481.8,34.0h7.5v8h-7.5zM481.8,43.0h7.5v8h-7.5zM481.8,52.0h7.5v8h-7.5zM481.8,61.0h7.5v8h-7.5zM481.8,70.0h7.5v8h-7.5zM481.8,79.0h7.5v8h-7.5zM481.8,88.0h7.5v8h-7.5zM490.2,25.0h7.5v8h-7.5zM490.2,34.0h7.5v8h-7.5zM490.2,43.0h7.5v8h-7.5zM490.2,52.0h7.5v8h-7.5zM490.2,61.0h7.5v8h-7.5zM490.2,70.0h7.5v8h-7.5zM490.2,88.0h7.5v8h-7.5zM498.7,25.0h7.5v8h-7.5zM498.7,34.0h7.5v8h-7.5zM498.7,43.0h7.5v8h-7.5zM498.7,52.0h7.5v8h-7.5zM498.7,61.0h7.5v8h-7.5zM498.7,70.0h7.5v8h-7.5zM498.7,79.0h7.5v8h-7.5zM498.7,88.0h7.5v8h-7.5zM507.2,25.0h7.5v8h-7.5zM507.2,52.0h7.5v8h-7.5zM507.2,61.0h7.5v8h-7.5zM507.2,70.0h7.5v8h-7.5zM507.2,88.0h7.5v8h-7.5zM515.6,25.0h7.5v8h-7.5zM515.6,43.0h7.5v8h-7.5zM515.6,52.0h7.5v8h-7.5zM515.6,61.0h7.5v8h-7.5zM515.6,70.0h7.5v8h-7.5zM515.6,88.0h7.5v8h-7.5zM524.1,25.0h7.5v8h-7.5zM524.1,34.0h7.5v8h-7.5zM524.1,43.0h7.5v8h-7.5zM524.1,52.0h7.5v8h-7.5zM524.1,61.0h7.5v8h-7.5zM524.1,70.0h7.5v8h-7.5zM524.1,79.0h7.5v8h-7.5zM524.1,88.0h7.5v8h-7.5zM532.6,25.0h7.5v8h-7.5zM532.6,34.0h7.5v8h-7.5zM532.6,43.0h7.5v8h-7.5zM532.6,52.0h7.5v8h-7.5zM532.6,61.0h7.5v8h-7.5zM532.6,70.0h7.5v8h-7.5zM532.6,79.0h7.5v8h-7.5zM532.6,88.0h7.5v8h-7.5zM541.1,25.0h7.5v8h-7.5zM541.1,34.0h7.5v8h-7.5zM541.1,43.0h7.5v8h-7.5zM541.1,52.0h7.5v8h-7.5zM541.1,61.0h7.5v8h-7.5zM541.1,70.0h7.5v8h-7.5zM541.1,79.0h7.5v8h-7.5zM541.1,88.0h7.5v8h-7.5zM549.5,25.0h7.5v8h-7.5zM549.5,43.0h7.5v8h-7.5zM549.5,52.0h7.5v8h-7.5zM549.5,61.0h7.5v8h-7.5zM549.5,70.0h7.5v8h-7.5zM549.5,79.0h7.5v8h-7.5zM549.5,88.0h7.5v8h-7.5zM558.0,25.0h7.5v8h-7.5zM558.0,34.0h7.5v8h-7.5zM558.0,43.0h7.5v8h-7.5zM558.0,52.0h7.5v8h-7.5zM558.0,61.0h7.5v8h-7.5zM558.0,70.0h7.5v8h-7.5zM558.0,79.0h7.5v8h-7.5zM558.0,88.0h7.5v8h-7.5zM566.5,25.0h7.5v8h-7.5zM566.5,34.0h7.5v8h-7.5zM566.5,43.0h7.5v8h-7.5zM566.5,52.0h7.5v8h-7.5zM566.5,61.0h7.5v8h-7.5zM566.5,70.0h7.5v8h-7.5zM566.5,88.0h7.5v8h-7.5zM575.0,25.0h7.5v8h-7.5zM575.0,34.0h7.5v8h-7.5zM575.0,43.0h7.5v8h-7.5zM575.0,52.0h7.5v8h-7.5zM575.0,61.0h7.5v8h-7.5zM575.0,70.0h7.5v8h-7.5zM575.0,79.0h7.5v8h-7.5zM575.0,88.0h7.5v8h-7.5zM583.4,25.0h7.5v8h-7.5zM583.4,34.0h7.5v8h-7.5zM583.4,43.0h7.5v8h-7.5zM583.4,52.0h7.5v8h-7.5zM583.4,61.0h7.5v8h-7.5zM583.4,70.0h7.5v8h-7.5zM583.4,88.0h7.5v8h-7.5zM591.9,25.0h7.5v8h-7.5zM591.9,34.0h7.5v8h-7.5zM591.9,43.0h7.5v8h-7.5zM591.9,52.0h7.5v8h-7.5zM591.9,61.0h7.5v8h-7.5zM591.9,70.0h7.5v8h-7.5zM591.9,88.0h7.5v8h-7.5zM600.4,25.0h7.5v8h-7.5zM600.4,34.0h7.5v8h-7.5zM600.4,43.0h7.5v8h-7.5zM600.4,52.0h7.5v8h-7.5zM600.4,61.0h7.5v8h-7.5zM600.4,70.0h7.5v8h-7.5zM600.4,79.0h7.5v8h-7.5zM600.4,88.0h7.5v8h-7.5zM608.9,25.0h7.5v8h-7.5zM608.9,43.0h7.5v8h-7.5zM608.9,52.0h7.5v8h-7.5zM608.9,61.0h7.5v8h-7.5zM608.9,70.0h7.5v8h-7.5zM608.9,88.0h7.5v8h-7.5zM617.4,25.0h7.5v8h-7.5zM617.4,34.0h7.5v8h-7.5zM617.4,43.0h7.5v8h-7.5zM617.4,52.0h7.5v8h-7.5zM617.4,61.0h7.5v8h-7.5zM617.4,70.0h7.5v8h-7.5zM617.4,88.0h7.5v8h-7.5zM625.8,25.0h7.5v8h-7.5zM625.8,43.0h7.5v8h-7.5zM625.8,52.0h7.5v8h-7.5zM625.8,61.0h7.5v8h-7.5zM625.8,70.0h7.5v8h-7.5zM634.3,25.0h7.5v8h-7.5zM634.3,34.0h7.5v8h-7.5zM634.3,43.0h7.5v8h-7.5zM634.3,52.0h7.5v8h-7.5zM634.3,61.0h7.5v8h-7.5zM634.3,70.0h7.5v8h-7.5zM634.3,88.0h7.5v8h-7.5zM642.8,25.0h7.5v8h-7.5zM642.8,34.0h7.5v8h-7.5zM642.8,52.0h7.5v8h-7.5zM642.8,61.0h7.5v8h-7.5zM642.8,70.0h7.5v8h-7.5zM651.2,25.0h7.5v8h-7.5zM651.2,34.0h7.5v8h-7.5zM651.2,43.0h7.5v8h-7.5zM651.2,52.0h7.5v8h-7.5zM651.2,61.0h7.5v8h-7.5zM651.2,70.0h7.5v8h-7.5zM659.7,25.0h7.5v8h-7.5zM659.7,34.0h7.5v8h-7.5zM659.7,43.0h7.5v8h-7.5zM659.7,52.0h7.5v8h-7.5zM659.7,61.0h7.5v8h-7.5zM659.7,70.0h7.5v8h-7.5zM668.2,25.0h7.5v8h-7.5zM668.2,43.0h7.5v8h-7.5zM668.2,52.0h7.5v8h-7.5zM668.2,61.0h7.5v8h-7.5zM668.2,70.0h7.5v8h-7.5zM676.7,25.0h7.5v8h-7.5zM676.7,34.0h7.5v8h-7.5zM676.7,43.0h7.5v8h-7.5zM676.7,52.0h7.5v8h-7.5zM676.7,61.0h7.5v8h-7.5zM676.7,70.0h7.5v8h-7.5zM685.1,25.0h7.5v8h-7.5zM685.1,34.0h7.5v8h-7.5zM685.1,43.0h7.5v8h-7.5zM685.1,52.0h7.5v8h-7.5zM685.1,61.0h7.5v8h-7.5zM685.1,70.0h7.5v8h-7.5zM693.6,25.0h7.5v8h-7.5zM693.6,34.0h7.5v8h-7.5zM693.6,43.0h7.5v8h-7.5zM693.6,52.0h7.5v8h-7.5zM693.6,61.0h7.5v8h-7.5zM693.6,70.0h7.5v8h-7.5zM702.1,25.0h7.5v8h-7.5zM702.1,34.0h7.5v8h-7.5zM702.1,43.0h7.5v8h-7.5zM702.1,52.0h7.5v8h-7.5zM702.1,61.0h7.5v8h-7.5zM702.1,70.0h7.5v8h-7.5zM710.6,25.0h7.5v8h-7.5zM710.6,43.0h7.5v8h-7.5zM710.6,61.0h7.5v8h-7.5zM710.6,70.0h7.5v8h-7.5zM719.0,25.0h7.5v8h-7.5zM719.0,34.0h7.5v8h-7.5zM719.0,43.0h7.5v8h-7.5zM719.0,52.0h7.5v8h-7.5zM719.0,61.0h7.5v8h-7.5zM719.0,70.0h7.5v8h-7.5zM727.5,25.0h7.5v8h-7.5zM727.5,34.0h7.5v8h-7.5zM727.5,43.0h7.5v8h-7.5zM727.5,52.0h7.5v8h-7.5zM727.5,61.0h7.5v8h-7.5zM727.5,70.0h7.5v8h-7.5z" />
<path class="heat heat-1" d="M75.0,61.0h7.5v8h-7.5zM75.0,70.0h7.5v8h-7.5zM75.0,79.0h7.5v8h-7.5zM75.0,88.0h7.5v8h-7.5zM75.0,97.0h7.5v8h-7.5zM75.0,106.0h7.5v8h-7.5zM75.0,115.0h7.5v8h-7.5zM83.4,52.0h7.5v8h-7.5zM83.4,61.0h7.5v8h-7.5zM83.4,70.0h7.5v8h-7.5zM83.4,79.0h7.5v8h-7.5zM83.4,88.0h7.5v8h-7.5zM83.4,97.0h7.5v8h-7.5zM83.4,106.0h7.5v8h-7.5zM83.4,115.0h7.5v8h-7.5zM100.4,34.0h7.5v8h-7.5zM100.4,43.0h7.5v8h-7.5zM100.4,52.0h7.5v8h-7.5zM100.4,61.0h7.5v8h-7.5zM100.4,70.0h7.5v8h-7.5zM100.4,79.0h7.5v8h-7.5zM100.4,88.0h7.5v8h-7.5zM100.4,97.0h7.5v8h-7.5zM100.4,106.0h7.5v8h-7.5zM100.4,115.0h7.5v8h-7.5zM100.4,178.0h7.5v8h-7.5zM108.8,34.0h7.5v8h-7.5zM108.8,43.0h7.5v8h-7.5zM108.8,52.0h7.5v8h-7.5zM108.8,79.0h7.5v8h-7.5zM108.8,97.0h7.5v8h-7.5zM108.8,106.0h7.5v8h-7.5zM108.8,115.0h7.5v8h-7.5zM117.3,25.0h7.5v8h-7.5zM117.3,34.0h7.5v8h-7.5zM117.3,97.0h7.5v8h-7.5zM117.3,106.0h7.5v8h-7.5zM117.3,115.0h7.5v8h-7.5zM125.8,25.0h7.5v8h-7.5zM125.8,34.0h7.5v8h-7.5zM125.8,106.0h7.5v8h-7.5zM125.8,115.0h7.5v8h-7.5zM125.8,133.0h7.5v8h-7.5zM125.8,178.0h7.5v8h-7.5zM125.8,187.0h7.5v8h-7.5zM125.8,196.0h7.5v8h-7.5zM134.3,25.0h7.5v8h-7.5zM134.3,106.0h7.5v8h-7.5zM134.3,115.0h7.5v8h-7.5zM134.3,124.0h7.5v8h-7.5zM134.3,133.0h7.5v8h-7.5zM134.3,178.0h7.5v8h-7.5zM134.3,187.0h7.5v8h-7.5zM142.8,25.0h7.5v8h-7.5zM142.8,106.0h7.5v8h-7.5zM142.8,115.0h7.5v8h-7.5zM142.8,178.0h7.5v8h-7.5zM142.8,187.0h7.5v8h-7.5zM142.8,196.0h7.5v8h-7.5zM151.2,25.0h7.5v8h-7.5zM151.2,106.0h7.5v8h-7.5zM151.2,115.0h7.5v8h-7.5zM151.2,124.0h7.5v8h-7.5zM151.2,133.0h7.5v8h-7.5zM151.2,178.0h7.5v8h-7.5zM151.2,187.0h7.5v8h-7.5zM159.7,25.0h7.5v8h-7.5zM159.7,106.0h7.5v8h-7.5zM159.7,115.0h7.5v8h-7.5zM159.7,133.0h7.5v8h-7.5zM159.7,178.0h7.5v8h-7.5zM159.7,187.0h7.5v8h-7.5zM159.7,196.0h7.5v8h-7.5zM168.2,25.0h7.5v8h-7.5zM168.2,106.0h7.5v8h-7.5zM168.2,115.0h7.5v8h-7.5zM168.2,178.0h7.5v8h-7.5zM168.2,187.0h7.5v8h-7.5zM168.2,196.0h7.5v8h-7.5zM176.6,25.0h7.5v8h-7.5zM176.6,106.0h7.5v8h-7.5zM176.6,115.0h7.5v8h-7.5zM176.6,124.0h7.5v8h-7.5zM176.6,133.0h7.5v8h-7.5zM176.6,178.0h7.5v8h-7.5zM176.6,187.0h7.5v8h-7.5zM176.6,196.0h7.5v8h-7.5zM185.1,25.0h7.5v8h-7.5zM185.1,106.0h7.5v8h-7.5zM185.1,115.0h7.5v8h-7.5zM185.1,124.0h7.5v8h-7.5zM185.1,133.0h7.5v8h-7.5zM185.1,178.0h7.5v8h-7.5zM185.1,187.0h7.5v8h-7.5zM185.1,196.0h7.5v8h-7.5zM193.6,25.0h7.5v8h-7.5zM193.6,106.0h7.5v8h-7.5zM193.6,115.0h7.5v8h-7.5zM193.6,133.0h7.5v8h-7.5zM193.6,178.0h7.5v8h-7.5zM193.6,187.0h7.5v8h-7.5zM193.6,196.0h7.5v8h-7.5zM202.1,25.0h7.5v8h-7.5zM202.1,106.0h7.5v8h-7.5zM202.1,115.0h7.5v8h-7.5zM202.1,124.0h7.5v8h-7.5zM202.1,133.0h7.5v8h-7.5zM202.1,178.0h7.5v8h-7.5zM202.1,187.0h7.5v8h-7.5zM202.1,196.0h7.5v8h-7.5zM210.5,25.0h7.5v8h-7.5zM210.5,106.0h7.5v8h-7.5zM210.5,115.0h7.5v8h-7.5zM210.5,133.0h7.5v8h-7.5zM210.5,178.0h7.5v8h-7.5zM210.5,187.0h7.5v8h-7.5zM210.5,196.0h7.5v8h-7.5zM219.0,25.0h7.5v8h-7.5zM219.0,97.0h7.5v8h-7.5zM219.0,106.0h7.5v8h-7.5zM219.0,115.0h7.5v8h-7.5zM219.0,133.0h7.5v8h-7.5zM219.0,187.0h7.5v8h-7.5zM219.0,196.0h7.5v8h-7.5zM227.5,25.0h7.5v8h-7.5zM227.5,34.0h7.5v8h-7.5zM227.5,43.0h7.5v8h-7.5zM227.5,52.0h7.5v8h-7.5zM227.5,61.0h7.5v8h-7.5zM227.5,79.0h7.5v8h-7.5zM227.5,88.0h7.5v8h-7.5zM227.5,97.0h7.5v8h-7.5zM227.5,106.0h7.5v8h-7.5zM227.5,115.0h7.5v8h-7.5zM236.0,25.0h7.5v8h-7.5zM236.0,34.0h7.5v8h-7.5zM236.0,43.0h7.5v8h-7.5zM236.0,52.0h7.5v8h-7.5zM236.0,79.0h7.5v8h-7.5zM236.0,88.0h7.5v8h-7.5zM236.0,97.0h7.5v8h-7.5zM236.0,106.0h7.5v8h-7.5zM244.4,25.0h7.5v8h-7.5zM244.4,97.0h7.5v8h-7.5zM244.4,106.0h7.5v8h-7.5zM244.4,115.0h7.5v8h-7.5zM252.9,25.0h7.5v8h-7.5zM252.9,97.0h7.5v8h-7.5zM252.9,106.0h7.5v8h-7.5zM252.9,115.0h7.5v8h-7.5zM261.4,25.0h7.5v8h-7.5zM261.4,106.0h7.5v8h-7.5zM261.4,115.0h7.5v8h-7.5zM261.4,133.0h7.5v8h-7.5zM261.4,196.0h7.5v8h-7.5zM269.9,25.0h7.5v8h-7.5zM269.9,106.0h7.5v8h-7.5zM269.9,115.0h7.5v8h-7.5zM269.9,124.0h7.5v8h-7.5zM269.9,133.0h7.5v8h-7.5zM269.9,196.0h7.5v8h-7.5zM278.4,106.0h7.5v8h-7.5zM278.4,115.0h7.5v8h-7.5zM278.4,124.0h7.5v8h-7.5zM278.4,133.0h7.5v8h-7.5zM278.4,187.0h7.5v8h-7.5zM278.4,196.0h7.5v8h-7.5zM286.8,25.0h7.5v8h-7.5zM286.8,97.0h7.5v8h-7.5zM286.8,106.0h7.5v8h-7.5zM286.8,115.0h7.5v8h-7.5zM295.3,106.0h7.5v8h-7.5zM295.3,115.0h7.5v8h-7.5zM295.3,196.0h7.5v8h-7.5zM303.8,106.0h7.5v8h-7.5zM303.8,115.0h7.5v8h-7.5zM303.8,187.0h7.5v8h-7.5zM303.8,196.0h7.5v8h-7.5zM312.2,106.0h7.5v8h-7.5zM312.2,115.0h7.5v8h-7.5zM312.2,124.0h7.5v8h-7.5zM312.2,133.0h7.5v8h-7.5zM312.2,178.0h7.5v8h-7.5zM312.2,187.0h7.5v8h-7.5zM312.2,196.0h7.5v8h-7.5zM320.7,106.0h7.5v8h-7.5zM320.7,115.0h7.5v8h-7.5zM320.7,124.0h7.5v8h-7.5zM320.7,187.0h7.5v8h-7.5zM320.7,196.0h7.5v8h-7.5zM329.2,106.0h7.5v8h-7.5zM329.2,115.0h7.5v8h-7.5zM329.2,124.0h7.5v8h-7.5zM329.2,187.0h7.5v8h-7.5zM329.2,196.0h7.5v8h-7.5zM337.7,106.0h7.5v8h-7.5zM337.7,115.0h7.5v8h-7.5zM337.7,124.0h7.5v8h-7.5zM337.7,133.0h7.5v8h-7.5zM337.7,178.0h7.5v8h-7.5zM337.7,187.0h7.5v8h-7.5zM337.7,196.0h7.5v8h-7.5zM346.1,106.0h7.5v8h-7.5zM346.1,115.0h7.5v8h-7.5zM346.1,124.0h7.5v8h-7.5zM346.1,133.0h7.5v8h-7.5zM346.1,187.0h7.5v8h-7.5zM346.1,196.0h7.5v8h-7.5zM354.6,106.0h7.5v8h-7.5zM354.6,115.0h7.5v8h-7.5zM354.6,124.0h7.5v8h-7.5zM354.6,133.0h7.5v8h-7.5zM354.6,178.0h7.5v8h-7.5zM354.6,187.0h7.5v8h-7.5zM354.6,196.0h7.5v8h-7.5zM363.1,106.0h7.5v8h-7.5zM363.1,115.0h7.5v8h-7.5zM363.1,124.0h7.5v8h-7.5zM363.1,133.0h7.5v8h-7.5zM363.1,178.0h7.5v8h-7.5zM363.1,187.0h7.5v8h-7.5zM363.1,196.0h7.5v8h-7.5zM363.1,205.0h7.5v8h-7.5zM371.6,106.0h7.5v8h-7.5zM371.6,115.0h7.5v8h-7.5zM371.6,124.0h7.5v8h-7.5zM371.6,133.0h7.5v8h-7.5zM371.6,178.0h7.5v8h-7.5zM371.6,187.0h7.5v8h-7.5zM371.6,196.0h7.5v8h-7.5zM380.1,97.0h7.5v8h-7.5zM380.1,106.0h7.5v8h-7.5zM380.1,115.0h7.5v8h-7.5zM380.1,124.0h7.5v8h-7.5zM380.1,133.0h7.5v8h-7.5zM380.1,178.0h7.5v8h-7.5zM380.1,187.0h7.5v8h-7.5zM380.1,196.0h7.5v8h-7.5zM388.5,97.0h7.5v8h-7.5zM388.5,106.0h7.5v8h-7.5zM388.5,115.0h7.5v8h-7.5zM388.5,124.0h7.5v8h-7.5zM388.5,187.0h7.5v8h-7.5zM388.5,196.0h7.5v8h-7.5zM397.0,25.0h7.5v8h-7.5zM397.0,34.0h7.5v8h-7.5zM397.0,79.0h7.5v8h-7.5zM397.0,88.0h7.5v8h-7.5zM397.0,97.0h7.5v8h-7.5zM397.0,106.0h7.5v8h-7.5zM397.0,115.0h7.5v8h-7.5zM405.5,25.0h7.5v8h-7.5zM405.5,34.0h7.5v8h-7.5zM405.5,43.0h7.5v8h-7.5zM405.5,79.0h7.5v8h-7.5zM405.5,88.0h7.5v8h-7.5zM405.5,97.0h7.5v8h-7.5zM405.5,106.0h7.5v8h-7.5zM405.5,115.0h7.5v8h-7.5zM413.9,97.0h7.5v8h-7.5zM413.9,106.0h7.5v8h-7.5zM413.9,115.0h7.5v8h-7.5zM422.4,25.0h7.5v8h-7.5zM422.4,79.0h7.5v8h-7.5zM422.4,97.0h7.5v8h-7.5zM422.4,106.0h7.5v8h-7.5zM422.4,115.0h7.5v8h-7.5zM430.9,97.0h7.5v8h-7.5zM430.9,106.0h7.5v8h-7.5zM430.9,115.0h7.5v8h-7.5zM439.4,97.0h7.5v8h-7.5zM439.4,106.0h7.5v8h-7.5zM439.4,115.0h7.5v8h-7.5zM447.8,25.0h7.5v8h-7.5zM447.8,79.0h7.5v8h-7.5zM447.8,97.0h7.5v8h-7.5zM447.8,106.0h7.5v8h-7.5zM447.8,115.0h7.5v8h-7.5zM456.3,97.0h7.5v8h-7.5zM456.3,106.0h7.5v8h-7.5zM456.3,115.0h7.5v8h-7.5zM464.8,79.0h7.5v8h-7.5zM464.8,97.0h7.5v8h-7.5zM464.8,106.0h7.5v8h-7.5zM464.8,115.0h7.5v8h-7.5zM473.3,34.0h7.5v8h-7.5zM473.3,79.0h7.5v8h-7.5zM473.3,97.0h7.5v8h-7.5zM473.3,106.0h7.5v8h-7.5zM473.3,115.0h7.5v8h-7.5zM481.8,97.0h7.5v8h-7.5zM481.8,106.0h7.5v8h-7.5zM481.8,115.0h7.5v8h-7.5zM481.8,196.0h7.5v8h-7.5zM490.2,79.0h7.5v8h-7.5zM490.2,97.0h7.5v8h-7.5zM490.2,106.0h7.5v8h-7.5zM490.2,115.0h7.5v8h-7.5zM490.2,196.0h7.5v8h-7.5zM498.7,97.0h7.5v8h-7.5zM498.7,106.0h7.5v8h-7.5zM498.7,115.0h7.5v8h-7.5zM507.2,34.0h7.5v8h-7.5zM507.2,43.0h7.5v8h-7.5zM507.2,79.0h7.5v8h-7.5zM507.2,97.0h7.5v8h-7.5zM507.2,106.0h7.5v8h-7.5zM507.2,115.0h7.5v8h-7.5zM507.2,196.0h7.5v8h-7.5zM515.6,34.0h7.5v8h-7.5zM515.6,79.0h7.5v8h-7.5zM515.6,97.0h7.5v8h-7.5zM515.6,106.0h7.5v8h-7.5zM515.6,115.0h7.5v8h-7.5zM524.1,97.0h7.5v8h-7.5zM524.1,106.0h7.5v8h-7.5zM524.1,115.0h7.5v8h-7.5zM524.1,124.0h7.5v8h-7.5zM524.1,187.0h7.5v8h-7.5zM524.1,196.0h7.5v8h-7.5zM532.6,97.0h7.5v8h-7.5zM532.6,106.0h7.5v8h-7.5zM532.6,115.0h7.5v8h-7.5zM532.6,124.0h7.5v8h-7.5zM532.6,187.0h7.5v8h-7.5zM532.6,196.0h7.5v8h-7.5zM541.1,97.0h7.5v8h-7.5zM541.1,106.0h7.5v8h-7.5zM541.1,115.0h7.5v8h-7.5zM541.1,124.0h7.5v8h-7.5zM541.1,196.0h7.5v8h-7.5zM549.5,34.0h7.5v8h-7.5zM549.5,97.0h7.5v8h-7.5zM549.5,106.0h7.5v8h-7.5zM549.5,115.0h7.5v8h-7.5zM558.0,97.0h7.5v8h-7.5zM558.0,106.0h7.5v8h-7.5zM558.0,115.0h7.5v8h-7.5zM558.0,124.0h7.5v8h-7.5zM558.0,178.0h7.5v8h-7.5zM558.0,187.0h7.5v8h-7.5zM558.0,196.0h7.5v8h-7.5zM566.5,79.0h7.5v8h-7.5zM566.5,97.0h7.5v8h-7.5zM566.5,106.0h7.5v8h-7.5zM566.5,115.0h7.5v8h-7.5zM566.5,124.0h7.5v8h-7.5zM566.5,196.0h7.5v8h-7.5zM575.0,97.0h7.5v8h-7.5zM575.0,106.0h7.5v8h-7.5zM575.0,115.0h7.5v8h-7.5zM575.0,124.0h7.5v8h-7.5zM575.0,187.0h7.5v8h-7.5zM575.0,196.0h7.5v8h-7.5zM583.4,79.0h7.5v8h-7.5zM583.4,97.0h7.5v8h-7.5zM583.4,106.0h7.5v8h-7.5zM583.4,115.0h7.5v8h-7.5zM583.4,124.0h7.5v8h-7.5zM583.4,187.0h7.5v8h-7.5zM583.4,196.0h7.5v8h-7.5zM591.9,79.0h7.5v8h-7.5zM591.9,97.0h7.5v8h-7.5zM591.9,106.0h7.5v8h-7.5zM591.9,115.0h7.5v8h-7.5zM600.4,97.0h7.5v8h-7.5zM600.4,106.0h7.5v8h-7.5zM600.4,115.0h7.5v8h-7.5zM600.4,124.0h7.5v8h-7.5zM600.4,187.0h7.5v8h-7.5zM600.4,196.0h7.5v8h-7.5zM608.9,34.0h7.5v8h-7.5zM608.9,79.0h7.5v8h-7.5zM608.9,97.0h7.5v8h-7.5zM608.9,106.0h7.5v8h-7.5zM608.9,115.0h7.5v8h-7.5zM608.9,196.0h7.5v8h-7.5zM617.4,79.0h7.5v8h-7.5zM617.4,97.0h7.5v8h-7.5zM617.4,106.0h7.5v8h-7.5zM617.4,115.0h7.5v8h-7.5zM617.4,124.0h7.5v8h-7.5zM617.4,196.0h7.5v8h-7.5zM625.8,34.0h7.5v8h-7.5zM625.8,79.0h7.5v8h-7.5zM625.8,88.0h7.5v8h-7.5zM625.8,97.0h7.5v8h-7.5zM625.8,106.0h7.5v8h-7.5zM625.8,115.0h7.5v8h-7.5zM625.8,187.0h7.5v8h-7.5zM625.8,196.0h7.5v8h-7.5zM634.3,79.0h7.5v8h-7.5zM634.3,97.0h7.5v8h-7.5zM634.3,106.0h7.5v8h-7.5zM634.3,115.0h7.5v8h-7.5zM634.3,124.0h7.5v8h-7.5zM634.3,196.0h7.5v8h-7.5zM642.8,43.0h7.5v8h-7.5zM642.8,79.0h7.5v8h-7.5zM642.8,88.0h7.5v8h-7.5zM642.8,97.0h7.5v8h-7.5zM642.8,106.0h7.5v8h-7.5zM642.8,115.0h7.5v8h-7.5zM642.8,187.0h7.5v8h-7.5zM642.8,196.0h7.5v8h-7.5zM651.2,79.0h7.5v8h-7.5zM651.2,88.0h7.5v8h-7.5zM651.2,97.0h7.5v8h-7.5zM651.2,106.0h7.5v8h-7.5zM651.2,115.0h7.5v8h-7.5zM651.2,187.0h7.5v8h-7.5zM651.2,196.0h7.5v8h-7.5zM659.7,79.0h7.5v8h-7.5zM659.7,88.0h7.5v8h-7.5zM659.7,97.0h7.5v8h-7.5zM659.7,106.0h7.5v8h-7.5zM659.7,115.0h7.5v8h-7.5zM659.7,124.0h7.5v8h-7.5zM659.7,187.0h7.5v8h-7.5zM659.7,196.0h7.5v8h-7.5zM668.2,34.0h7.5v8h-7.5zM668.2,79.0h7.5v8h-7.5zM668.2,88.0h7.5v8h-7.5zM668.2,97.0h7.5v8h-7.5zM668.2,106.0h7.5v8h-7.5zM668.2,115.0h7.5v8h-7.5zM668.2,124.0h7.5v8h-7.5zM668.2,187.0h7.5v8h-7.5zM668.2,196.0h7.5v8h-7.5zM676.7,79.0h7.5v8h-7.5zM676.7,88.0h7.5v8h-7.5zM676.7,97.0h7.5v8h-7.5zM676.7,106.0h7.5v8h-7.5zM676.7,115.0h7.5v8h-7.5zM676.7,124.0h7.5v8h-7.5zM676.7,196.0h7.5v8h-7.5zM685.1,79.0h7.5v8h-7.5zM685.1,88.0h7.5v8h-7.5zM685.1,97.0h7.5v8h-7.5zM685.1,106.0h7.5v8h-7.5zM685.1,115.0h7.5v8h-7.5zM685.1,124.0h7.5v8h-7.5zM685.1,187.0h7.5v8h-7.5zM685.1,196.0h7.5v8h-7.5zM693.6,79.0h7.5v8h-7.5zM693.6,88.0h7.5v8h-7.5zM693.6,97.0h7.5v8h-7.5zM693.6,106.0h7.5v8h-7.5zM693.6,115.0h7.5v8h-7.5zM702.1,79.0h7.5v8h-7.5zM702.1,88.0h7.5v8h-7.5zM702.1,97.0h7.5v8h-7.5zM702.1,106.0h7.5v8h-7.5zM702.1,115.0h7.5v8h-7.5zM702.1,124.0h7.5v8h-7.5zM702.1,187.0h7.5v8h-7.5zM702.1,196.0h7.5v8h-7.5zM710.6,34.0h7.5v8h-7.5zM710.6,52.0h7.5v8h-7.5zM710.6,79.0h7.5v8h-7.5zM710.6,88.0h7.5v8h-7.5zM710.6,97.0h7.5v8h-7.5zM710.6,106.0h7.5v8h-7.5zM710.6,115.0h7.5v8h-7.5zM710.6,124.0h7.5v8h-7.5zM710.6,196.0h7.5v8h-7.5zM719.0,79.0h7.5v8h-7.5zM719.0,88.0h7.5v8h-7.5zM719.0,97.0h7.5v8h-7.5zM719.0,106.0h7.5v8h-7.5zM719.0,115.0h7.5v8h-7.5zM719.0,196.0h7.5v8h-7.5zM727.5,79.0h7.5v8h-7.5zM727.5,88.0h7.5v8h-7.5zM727.5,97.0h7.5v8h-7.5zM727.5,106.0h7.5v8h-7.5zM727.5,115.0h7.5v8h-7.5zM727.5,124.0h7.5v8h-7.5zM727.5,196.0h7.5v8h-7.5z" />
<path class="heat heat-2" d="M75.0,34.0h7.5v8h-7.5zM75.0,43.0h7.5v8h-7.5zM75.0,52.0h7.5v8h-7.5zM75.0,124.0h7.5v8h-7.5zM75.0,133.0h7.5v8h-7.5zM75.0,142.0h7.5v8h-7.5zM75.0,151.0h7.5v8h-7.5zM75.0,169.0h7.5v8h-7.5zM75.0,178.0h7.5v8h-7.5zM75.0,187.0h7.5v8h-7.5zM75.0,196.0h7.5v8h-7.5zM75.0,205.0h7.5v8h-7.5zM83.4,34.0h7.5v8h-7.5zM83.4,43.0h7.5v8h-7.5zM83.4,124.0h7.5v8h-7.5zM83.4,133.0h7.5v8h-7.5zM83.4,142.0h7.5v8h-7.5zM83.4,169.0h7.5v8h-7.5zM83.4,178.0h7.5v8h-7.5zM83.4,187.0h7.5v8h-7.5zM83.4,196.0h7.5v8h-7.5zM83.4,223.0h7.5v8h-7.5zM91.9,34.0h7.5v8h-7.5zM91.9,43.0h7.5v8h-7.5zM91.9,52.0h7.5v8h-7.5zM91.9,61.0h7.5v8h-7.5zM91.9,70.0h7.5v8h-7.5zM91.9,79.0h7.5v8h-7.5zM91.9,88.0h7.5v8h-7.5zM91.9,97.0h7.5v8h-7.5zM91.9,106.0h7.5v8h-7.5zM91.9,115.0h7.5v8h-7.5zM91.9,124.0h7.5v8h-7.5zM91.9,178.0h7.5v8h-7.5zM91.9,187.0h7.5v8h-7.5zM100.4,25.0h7.5v8h-7.5zM100.4,124.0h7.5v8h-7.5zM100.4,133.0h7.5v8h-7.5zM100.4,142.0h7.5v8h-7.5zM100.4,160.0h7.5v8h-7.5zM100.4,169.0h7.5v8h-7.5zM100.4,187.0h7.5v8h-7.5zM100.4,196.0h7.5v8h-7.5zM100.4,205.0h7.5v8h-7.5zM100.4,214.0h7.5v8h-7.5zM100.4,223.0h7.5v8h-7.5zM108.8,25.0h7.5v8h-7.5zM108.8,124.0h7.5v8h-7.5zM108.8,133.0h7.5v8h-7.5zM108.8,142.0h7.5v8h-7.5zM108.8,160.0h7.5v8h-7.5zM108.8,169.0h7.5v8h-7.5zM108.8,178.0h7.5v8h-7.5zM108.8,187.0h7.5v8h-7.5zM108.8,196.0h7.5v8h-7.5zM108.8,205.0h7.5v8h-7.5zM108.8,214.0h7.5v8h-7.5zM117.3,124.0h7.5v8h-7.5zM117.3,133.0h7.5v8h-7.5zM117.3,142.0h7.5v8h-7.5zM117.3,160.0h7.5v8h-7.5zM117.3,169.0h7.5v8h-7.5zM117.3,178.0h7.5v8h-7.5zM117.3,187.0h7.5v8h-7.5zM117.3,196.0h7.5v8h-7.5zM117.3,205.0h7.5v8h-7.5zM117.3,214.0h7.5v8h-7.5zM117.3,223.0h7.5v8h-7.5zM125.8,124.0h7.5v8h-7.5zM125.8,142.0h7.5v8h-7.5zM125.8,151.0h7.5v8h-7.5zM125.8,160.0h7.5v8h-7.5zM125.8,169.0h7.5v8h-7.5zM125.8,205.0h7.5v8h-7.5zM125.8,214.0h7.5v8h-7.5zM125.8,223.0h7.5v8h-7.5zM134.3,142.0h7.5v8h-7.5zM134.3,151.0h7.5v8h-7.5zM134.3,160.0h7.5v8h-7.5zM134.3,169.0h7.5v8h-7.5zM134.3,196.0h7.5v8h-7.5zM134.3,205.0h7.5v8h-7.5zM134.3,214.0h7.5v8h-7.5zM134.3,223.0h7.5v8h-7.5zM142.8,124.0h7.5v8h-7.5zM142.8,133.0h7.5v8h-7.5zM142.8,142.0h7.5v8h-7.5zM142.8,151.0h7.5v8h-7.5zM142.8,160.0h7.5v8h-7.5zM142.8,169.0h7.5v8h-7.5zM142.8,205.0h7.5v8h-7.5zM142.8,214.0h7.5v8h-7.5zM142.8,223.0h7.5v8h-7.5zM151.2,142.0h7.5v8h-7.5zM151.2,151.0h7.5v8h-7.5zM151.2,160.0h7.5v8h-7.5zM151.2,169.0h7.5v8h-7.5zM151.2,196.0h7.5v8h-7.5zM151.2,205.0h7.5v8h-7.5zM151.2,214.0h7.5v8h-7.5zM151.2,223.0h7.5v8h-7.5zM159.7,124.0h7.5v8h-7.5zM159.7,142.0h7.5v8h-7.5zM159.7,151.0h7.5v8h-7.5zM159.7,160.0h7.5v8h-7.5zM159.7,169.0h7.5v8h-7.5zM159.7,205.0h7.5v8h-7.5zM159.7,214.0h7.5v8h-7.5zM159.7,223.0h7.5v8h-7.5zM168.2,124.0h7.5v8h-7.5zM168.2,133.0h7.5v8h-7.5zM168.2,142.0h7.5v8h-7.5zM168.2,160.0h7.5v8h-7.5zM168.2,169.0h7.5v8h-7.5zM168.2,205.0h7.5v8h-7.5zM168.2,214.0h7.5v8h-7.5zM168.2,223.0h7.5v8h-7.5zM176.6,142.0h7.5v8h-7.5zM176.6,151.0h7.5v8h-7.5zM176.6,160.0h7.5v8h-7.5zM176.6,169.0h7.5v8h-7.5zM176.6,205.0h7.5v8h-7.5zM176.6,214.0h7.5v8h-7.5zM176.6,223.0h7.5v8h-7.5zM185.1,142.0h7.5v8h-7.5zM185.1,151.0h7.5v8h-7.5zM185.1,160.0h7.5v8h-7.5zM185.1,169.0h7.5v8h-7.5zM185.1,205.0h7.5v8h-7.5zM185.1,214.0h7.5v8h-7.5zM185.1,223.0h7.5v8h-7.5zM193.6,124.0h7.5v8h-7.5zM193.6,142.0h7.5v8h-7.5zM193.6,160.0h7.5v8h-7.5zM193.6,169.0h7.5v8h-7.5zM193.6,205.0h7.5v8h-7.5zM193.6,214.0h7.5v8h-7.5zM193.6,223.0h7.5v8h-7.5zM202.1,142.0h7.5v8h-7.5zM202.1,151.0h7.5v8h-7.5zM202.1,160.0h7.5v8h-7.5zM202.1,169.0h7.5v8h-7.5zM202.1,205.0h7.5v8h-7.5zM202.1,214.0h7.5v8h-7.5zM202.1,223.0h7.5v8h-7.5zM210.5,124.0h7.5v8h-7.5zM210.5,142.0h7.5v8h-7.5zM210.5,151.0h7.5v8h-7.5zM210.5,160.0h7.5v8h-7.5zM210.5,169.0h7.5v8h-7.5zM210.5,205.0h7.5v8h-7.5zM210.5,214.0h7.5v8h-7.5zM210.5,223.0h7.5v8h-7.5zM219.0,124.0h7.5v8h-7.5zM219.0,142.0h7.5v8h-7.5zM219.0,160.0h7.5v8h-7.5zM219.0,169.0h7.5v8h-7.5zM219.0,178.0h7.5v8h-7.5zM219.0,205.0h7.5v8h-7.5zM219.0,214.0h7.5v8h-7.5zM219.0,223.0h7.5v8h-7.5zM227.5,124.0h7.5v8h-7.5zM227.5,133.0h7.5v8h-7.5zM227.5,169.0h7.5v8h-7.5zM227.5,178.0h7.5v8h-7.5zM227.5,187.0h7.5v8h-7.5zM227.5,196.0h7.5v8h-7.5zM227.5,205.0h7.5v8h-7.5zM236.0,115.0h7.5v8h-7.5zM236.0,124.0h7.5v8h-7.5zM236.0,133.0h7.5v8h-7.5zM236.0,169.0h7.5v8h-7.5zM236.0,178.0h7.5v8h-7.5zM236.0,187.0h7.5v8h-7.5zM236.0,196.0h7.5v8h-7.5zM236.0,205.0h7.5v8h-7.5zM236.0,223.0h7.5v8h-7.5zM244.4,124.0h7.5v8h-7.5zM244.4,133.0h7.5v8h-7.5zM244.4,142.0h7.5v8h-7.5zM244.4,160.0h7.5v8h-7.5zM244.4,169.0h7.5v8h-7.5zM244.4,178.0h7.5v8h-7.5zM244.4,187.0h7.5v8h-7.5zM244.4,196.0h7.5v8h-7.5zM244.4,205.0h7.5v8h-7.5zM244.4,214.0h7.5v8h-7.5zM244.4,223.0h7.5v8h-7.5zM252.9,124.0h7.5v8h-7.5zM252.9,133.0h7.5v8h-7.5zM252.9,142.0h7.5v8h-7.5zM252.9,160.0h7.5v8h-7.5zM252.9,169.0h7.5v8h-7.5zM252.9,178.0h7.5v8h-7.5zM252.9,187.0h7.5v8h-7.5zM252.9,196.0h7.5v8h-7.5zM252.9,205.0h7.5v8h-7.5zM252.9,214.0h7.5v8h-7.5zM252.9,223.0h7.5v8h-7.5zM261.4,124.0h7.5v8h-7.5zM261.4,142.0h7.5v8h-7.5zM261.4,151.0h7.5v8h-7.5zM261.4,160.0h7.5v8h-7.5zM261.4,169.0h7.5v8h-7.5zM261.4,178.0h7.5v8h-7.5zM261.4,187.0h7.5v8h-7.5zM261.4,205.0h7.5v8h-7.5zM261.4,214.0h7.5v8h-7.5zM261.4,223.0h7.5v8h-7.5zM269.9,142.0h7.5v8h-7.5zM269.9,151.0h7.5v8h-7.5zM269.9,160.0h7.5v8h-7.5zM269.9,169.0h7.5v8h-7.5zM269.9,178.0h7.5v8h-7.5zM269.9,187.0h7.5v8h-7.5zM269.9,205.0h7.5v8h-7.5zM269.9,214.0h7.5v8h-7.5zM269.9,223.0h7.5v8h-7.5zM278.4,142.0h7.5v8h-7.5zM278.4,151.0h7.5v8h-7.5zM278.4,160.0h7.5v8h-7.5zM278.4,169.0h7.5v8h-7.5zM278.4,178.0h7.5v8h-7.5zM278.4,205.0h7.5v8h-7.5zM278.4,214.0h7.5v8h-7.5zM278.4,223.0h7.5v8h-7.5zM286.8,124.0h7.5v8h-7.5zM286.8,133.0h7.5v8h-7.5zM286.8,142.0h7.5v8h-7.5zM286.8,160.0h7.5v8h-7.5zM286.8,169.0h7.5v8h-7.5zM286.8,178.0h7.5v8h-7.5zM286.8,187.0h7.5v8h-7.5zM286.8,196.0h7.5v8h-7.5zM286.8,205.0h7.5v8h-7.5zM286.8,214.0h7.5v8h-7.5zM286.8,223.0h7.5v8h-7.5zM295.3,124.0h7.5v8h-7.5zM295.3,133.0h7.5v8h-7.5zM295.3,142.0h7.5v8h-7.5zM295.3,160.0h7.5v8h-7.5zM295.3,169.0h7.5v8h-7.5zM295.3,178.0h7.5v8h-7.5zM295.3,187.0h7.5v8h-7.5zM295.3,205.0h7.5v8h-7.5zM295.3,214.0h7.5v8h-7.5zM295.3,223.0h7.5v8h-7.5zM303.8,124.0h7.5v8h-7.5zM303.8,133.0h7.5v8h-7.5zM303.8,142.0h7.5v8h-7.5zM303.8,160.0h7.5v8h-7.5zM303.8,169.0h7.5v8h-7.5zM303.8,178.0h7.5v8h-7.5zM303.8,205.0h7.5v8h-7.5zM303.8,214.0h7.5v8h-7.5zM303.8,223.0h7.5v8h-7.5zM312.2,142.0h7.5v8h-7.5zM312.2,151.0h7.5v8h-7.5zM312.2,160.0h7.5v8h-7.5zM312.2,169.0h7.5v8h-7.5zM312.2,205.0h7.5v8h-7.5zM312.2,214.0h7.5v8h-7.5zM312.2,223.0h7.5v8h-7.5zM320.7,133.0h7.5v8h-7.5zM320.7,142.0h7.5v8h-7.5zM320.7,151.0h7.5v8h-7.5zM320.7,160.0h7.5v8h-7.5zM320.7,169.0h7.5v8h-7.5zM320.7,178.0h7.5v8h-7.5zM320.7,205.0h7.5v8h-7.5zM320.7,214.0h7.5v8h-7.5zM320.7,223.0h7.5v8h-7.5zM329.2,133.0h7.5v8h-7.5zM329.2,142.0h7.5v8h-7.5zM329.2,151.0h7.5v8h-7.5zM329.2,160.0h7.5v8h-7.5zM329.2,169.0h7.5v8h-7.5zM329.2,178.0h7.5v8h-7.5zM329.2,205.0h7.5v8h-7.5zM329.2,214.0h7.5v8h-7.5zM329.2,223.0h7.5v8h-7.5zM337.7,142.0h7.5v8h-7.5zM337.7,151.0h7.5v8h-7.5zM337.7,160.0h7.5v8h-7.5zM337.7,169.0h7.5v8h-7.5zM337.7,205.0h7.5v8h-7.5zM337.7,214.0h7.5v8h-7.5zM337.7,223.0h7.5v8h-7.5zM346.1,142.0h7.5v8h-7.5zM346.1,151.0h7.5v8h-7.5zM346.1,160.0h7.5v8h-7.5zM346.1,169.0h7.5v8h-7.5zM346.1,178.0h7.5v8h-7.5zM346.1,205.0h7.5v8h-7.5zM346.1,214.0h7.5v8h-7.5zM346.1,223.0h7.5v8h-7.5zM354.6,142.0h7.5v8h-7.5zM354.6,151.0h7.5v8h-7.5zM354.6,160.0h7.5v8h-7.5zM354.6,169.0h7.5v8h-7.5zM354.6,205.0h7.5v8h-7.5zM354.6,214.0h7.5v8h-7.5zM354.6,223.0h7.5v8h-7.5zM363.1,142.0h7.5v8h-7.5zM363.1,151.0h7.5v8h-7.5zM363.1,160.0h7.5v8h-7.5zM363.1,169.0h7.5v8h-7.5zM363.1,214.0h7.5v8h-7.5zM363.1,223.0h7.5v8h-7.5zM371.6,142.0h7.5v8h-7.5zM371.6,151.0h7.5v8h-7.5zM371.6,160.0h7.5v8h-7.5zM371.6,169.0h7.5v8h-7.5zM371.6,205.0h7.5v8h-7.5zM371.6,214.0h7.5v8h-7.5zM371.6,223.0h7.5v8h-7.5zM380.1,142.0h7.5v8h-7.5zM380.1,151.0h7.5v8h-7.5zM380.1,160.0h7.5v8h-7.5zM380.1,169.0h7.5v8h-7.5zM380.1,205.0h7.5v8h-7.5zM380.1,214.0h7.5v8h-7.5zM380.1,223.0h7.5v8h-7.5zM388.5,133.0h7.5v8h-7.5zM388.5,142.0h7.5v8h-7.5zM388.5,160.0h7.5v8h-7.5zM388.5,169.0h7.5v8h-7.5zM388.5,178.0h7.5v8h-7.5zM388.5,205.0h7.5v8h-7.5zM388.5,214.0h7.5v8h-7.5zM388.5,223.0h7.5v8h-7.5zM397.0,124.0h7.5v8h-7.5zM397.0,133.0h7.5v8h-7.5zM397.0,169.0h7.5v8h-7.5zM397.0,178.0h7.5v8h-7.5zM397.0,187.0h7.5v8h-7.5zM397.0,196.0h7.5v8h-7.5zM397.0,205.0h7.5v8h-7.5zM397.0,214.0h7.5v8h-7.5zM397.0,223.0h7.5v8h-7.5zM405.5,124.0h7.5v8h-7.5zM405.5,133.0h7.5v8h-7.5zM405.5,142.0h7.5v8h-7.5zM405.5,169.0h7.5v8h-7.5zM405.5,178.0h7.5v8h-7.5zM405.5,187.0h7.5v8h-7.5zM405.5,196.0h7.5v8h-7.5zM405.5,205.0h7.5v8h-7.5zM405.5,214.0h7.5v8h-7.5zM405.5,223.0h7.5v8h-7.5zM413.9,124.0h7.5v8h-7.5zM413.9,133.0h7.5v8h-7.5zM413.9,142.0h7.5v8h-7.5zM413.9,151.0h7.5v8h-7.5zM413.9,160.0h7.5v8h-7.5zM413.9,169.0h7.5v8h-7.5zM413.9,178.0h7.5v8h-7.5zM413.9,187.0h7.5v8h-7.5zM413.9,196.0h7.5v8h-7.5zM413.9,205.0h7.5v8h-7.5zM413.9,214.0h7.5v8h-7.5zM413.9,223.0h7.5v8h-7.5zM422.4,124.0h7.5v8h-7.5zM422.4,133.0h7.5v8h-7.5zM422.4,142.0h7.5v8h-7.5zM422.4,169.0h7.5v8h-7.5zM422.4,178.0h7.5v8h-7.5zM422.4,187.0h7.5v8h-7.5zM422.4,196.0h7.5v8h-7.5zM422.4,205.0h7.5v8h-7.5zM422.4,214.0h7.5v8h-7.5zM422.4,223.0h7.5v8h-7.5zM430.9,124.0h7.5v8h-7.5zM430.9,133.0h7.5v8h-7.5zM430.9,142.0h7.5v8h-7.5zM430.9,160.0h7.5v8h-7.5zM430.9,169.0h7.5v8h-7.5zM430.9,178.0h7.5v8h-7.5zM430.9,187.0h7.5v8h-7.5zM430.9,196.0h7.5v8h-7.5zM430.9,205.0h7.5v8h-7.5zM430.9,214.0h7.5v8h-7.5zM430.9,223.0h7.5v8h-7.5zM439.4,124.0h7.5v8h-7.5zM439.4,133.0h7.5v8h-7.5zM439.4,142.0h7.5v8h-7.5zM439.4,160.0h7.5v8h-7.5zM439.4,169.0h7.5v8h-7.5zM439.4,178.0h7.5v8h-7.5zM439.4,187.0h7.5v8h-7.5zM439.4,196.0h7.5v8h-7.5zM439.4,205.0h7.5v8h-7.5zM439.4,214.0h7.5v8h-7.5zM439.4,223.0h7.5v8h-7.5zM447.8,124.0h7.5v8h-7.5zM447.8,133.0h7.5v8h-7.5zM447.8,142.0h7.5v8h-7.5zM447.8,160.0h7.5v8h-7.5zM447.8,169.0h7.5v8h-7.5zM447.8,178.0h7.5v8h-7.5zM447.8,187.0h7.5v8h-7.5zM447.8,196.0h7.5v8h-7.5zM447.8,205.0h7.5v8h-7.5zM447.8,214.0h7.5v8h-7.5zM447.8,223.0h7.5v8h-7.5zM456.3,124.0h7.5v8h-7.5zM456.3,133.0h7.5v8h-7.5zM456.3,142.0h7.5v8h-7.5zM456.3,160.0h7.5v8h-7.5zM456.3,169.0h7.5v8h-7.5zM456.3,178.0h7.5v8h-7.5zM456.3,187.0h7.5v8h-7.5zM456.3,196.0h7.5v8h-7.5zM456.3,205.0h7.5v8h-7.5zM456.3,214.0h7.5v8h-7.5zM456.3,223.0h7.5v8h-7.5zM464.8,124.0h7.5v8h-7.5zM464.8,133.0h7.5v8h-7.5zM464.8,142.0h7.5v8h-7.5zM464.8,160.0h7.5v8h-7.5zM464.8,169.0h7.5v8h-7.5zM464.8,178.0h7.5v8h-7.5zM464.8,187.0h7.5v8h-7.5zM464.8,196.0h7.5v8h-7.5zM464.8,205.0h7.5v8h-7.5zM464.8,214.0h7.5v8h-7.5zM464.8,223.0h7.5v8h-7.5zM473.3,124.0h7.5v8h-7.5zM473.3,133.0h7.5v8h-7.5zM473.3,142.0h7.5v8h-7.5zM473.3,160.0h7.5v8h-7.5zM473.3,169.0h7.5v8h-7.5zM473.3,178.0h7.5v8h-7.5zM473.3,187.0h7.5v8h-7.5zM473.3,196.0h7.5v8h-7.5zM473.3,205.0h7.5v8h-7.5zM473.3,214.0h7.5v8h-7.5zM473.3,223.0h7.5v8h-7.5zM481.8,124.0h7.5v8h-7.5zM481.8,133.0h7.5v8h-7.5zM481.8,142.0h7.5v8h-7.5zM481.8,151.0h7.5v8h-7.5zM481.8,160.0h7.5v8h-7.5zM481.8,169.0h7.5v8h-7.5zM481.8,178.0h7.5v8h-7.5zM481.8,187.0h7.5v8h-7.5zM481.8,205.0h7.5v8h-7.5zM481.8,214.0h7.5v8h-7.5zM481.8,223.0h7.5v8h-7.5zM490.2,124.0h7.5v8h-7.5zM490.2,133.0h7.5v8h-7.5zM490.2,142.0h7.5v8h-7.5zM490.2,151.0h7.5v8h-7.5zM490.2,160.0h7.5v8h-7.5zM490.2,169.0h7.5v8h-7.5zM490.2,178.0h7.5v8h-7.5zM490.2,187.0h7.5v8h-7.5zM490.2,205.0h7.5v8h-7.5zM490.2,214.0h7.5v8h-7.5zM490.2,223.0h7.5v8h-7.5zM498.7,124.0h7.5v8h-7.5zM498.7,133.0h7.5v8h-7.5zM498.7,142.0h7.5v8h-7.5zM498.7,160.0h7.5v8h-7.5zM498.7,169.0h7.5v8h-7.5zM498.7,178.0h7.5v8h-7.5zM498.7,187.0h7.5v8h-7.5zM498.7,196.0h7.5v8h-7.5zM498.7,205.0h7.5v8h-7.5zM498.7,214.0h7.5v8h-7.5zM498.7,223.0h7.5v8h-7.5zM507.2,124.0h7.5v8h-7.5zM507.2,133.0h7.5v8h-7.5zM507.2,142.0h7.5v8h-7.5zM507.2,151.0h7.5v8h-7.5zM507.2,160.0h7.5v8h-7.5zM507.2,169.0h7.5v8h-7.5zM507.2,178.0h7.5v8h-7.5zM507.2,187.0h7.5v8h-7.5zM507.2,205.0h7.5v8h-7.5zM507.2,214.0h7.5v8h-7.5zM507.2,223.0h7.5v8h-7.5zM515.6,124.0h7.5v8h-7.5zM515.6,133.0h7.5v8h-7.5zM515.6,142.0h7.5v8h-7.5zM515.6,160.0h7.5v8h-7.5zM515.6,169.0h7.5v8h-7.5zM515.6,178.0h7.5v8h-7.5zM515.6,187.0h7.5v8h-7.5zM515.6,196.0h7.5v8h-7.5zM515.6,205.0h7.5v8h-7.5zM515.6,214.0h7.5v8h-7.5zM515.6,223.0h7.5v8h-7.5zM524.1,133.0h7.5v8h-7.5zM524.1,142.0h7.5v8h-7.5zM524.1,160.0h7.5v8h-7.5zM524.1,169.0h7.5v8h-7.5zM524.1,178.0h7.5v8h-7.5zM524.1,205.0h7.5v8h-7.5zM524.1,214.0h7.5v8h-7.5zM524.1,223.0h7.5v8h-7.5zM532.6,133.0h7.5v8h-7.5zM532.6,142.0h7.5v8h-7.5zM532.6,151.0h7.5v8h-7.5zM532.6,160.0h7.5v8h-7.5zM532.6,169.0h7.5v8h-7.5zM532.6,178.0h7.5v8h-7.5zM532.6,205.0h7.5v8h-7.5zM532.6,214.0h7.5v8h-7.5zM532.6,223.0h7.5v8h-7.5zM541.1,133.0h7.5v8h-7.5zM541.1,142.0h7.5v8h-7.5zM541.1,151.0h7.5v8h-7.5zM541.1,160.0h7.5v8h-7.5zM541.1,169.0h7.5v8h-7.5zM541.1,178.0h7.5v8h-7.5zM541.1,187.0h7.5v8h-7.5zM541.1,205.0h7.5v8h-7.5zM541.1,214.0h7.5v8h-7.5zM541.1,223.0h7.5v8h-7.5zM549.5,124.0h7.5v8h-7.5zM549.5,133.0h7.5v8h-7.5zM549.5,142.0h7.5v8h-7.5zM549.5,160.0h7.5v8h-7.5zM549.5,169.0h7.5v8h-7.5zM549.5,178.0h7.5v8h-7.5zM549.5,187.0h7.5v8h-7.5zM549.5,196.0h7.5v8h-7.5zM549.5,205.0h7.5v8h-7.5zM549.5,214.0h7.5v8h-7.5zM549.5,223.0h7.5v8h-7.5zM558.0,133.0h7.5v8h-7.5zM558.0,142.0h7.5v8h-7.5zM558.0,151.0h7.5v8h-7.5zM558.0,160.0h7.5v8h-7.5zM558.0,169.0h7.5v8h-7.5zM558.0,205.0h7.5v8h-7.5zM558.0,214.0h7.5v8h-7.5zM558.0,223.0h7.5v8h-7.5zM566.5,133.0h7.5v8h-7.5zM566.5,142.0h7.5v8h-7.5zM566.5,151.0h7.5v8h-7.5zM566.5,160.0h7.5v8h-7.5zM566.5,169.0h7.5v8h-7.5zM566.5,178.0h7.5v8h-7.5zM566.5,187.0h7.5v8h-7.5zM566.5,205.0h7.5v8h-7.5zM566.5,214.0h7.5v8h-7.5zM566.5,223.0h7.5v8h-7.5zM575.0,133.0h7.5v8h-7.5zM575.0,142.0h7.5v8h-7.5zM575.0,151.0h7.5v8h-7.5zM575.0,160.0h7.5v8h-7.5zM575.0,169.0h7.5v8h-7.5zM575.0,178.0h7.5v8h-7.5zM575.0,205.0h7.5v8h-7.5zM575.0,214.0h7.5v8h-7.5zM575.0,223.0h7.5v8h-7.5zM583.4,133.0h7.5v8h-7.5zM583.4,142.0h7.5v8h-7.5zM583.4,151.0h7.5v8h-7.5zM583.4,160.0h7.5v8h-7.5zM583.4,169.0h7.5v8h-7.5zM583.4,178.0h7.5v8h-7.5zM583.4,205.0h7.5v8h-7.5zM583.4,214.0h7.5v8h-7.5zM583.4,223.0h7.5v8h-7.5zM591.9,124.0h7.5v8h-7.5zM591.9,133.0h7.5v8h-7.5zM591.9,142.0h7.5v8h-7.5zM591.9,160.0h7.5v8h-7.5zM591.9,169.0h7.5v8h-7.5zM591.9,178.0h7.5v8h-7.5zM591.9,187.0h7.5v8h-7.5zM591.9,196.0h7.5v8h-7.5zM591.9,205.0h7.5v8h-7.5zM591.9,214.0h7.5v8h-7.5zM591.9,223.0h7.5v8h-7.5zM600.4,133.0h7.5v8h-7.5zM600.4,142.0h7.5v8h-7.5zM600.4,151.0h7.5v8h-7.5zM600.4,160.0h7.5v8h-7.5zM600.4,169.0h7.5v8h-7.5zM600.4,178.0h7.5v8h-7.5zM600.4,205.0h7.5v8h-7.5zM600.4,214.0h7.5v8h-7.5zM600.4,223.0h7.5v8h-7.5zM608.9,124.0h7.5v8h-7.5zM608.9,133.0h7.5v8h-7.5zM608.9,142.0h7.5v8h-7.5zM608.9,160.0h7.5v8h-7.5zM608.9,169.0h7.5v8h-7.5zM608.9,178.0h7.5v8h-7.5zM608.9,187.0h7.5v8h-7.5zM608.9,205.0h7.5v8h-7.5zM608.9,214.0h7.5v8h-7.5zM608.9,223.0h7.5v8h-7.5zM617.4,133.0h7.5v8h-7.5zM617.4,142.0h7.5v8h-7.5zM617.4,151.0h7.5v8h-7.5zM617.4,160.0h7.5v8h-7.5zM617.4,169.0h7.5v8h-7.5zM617.4,178.0h7.5v8h-7.5zM617.4,187.0h7.5v8h-7.5zM617.4,205.0h7.5v8h-7.5zM617.4,214.0h7.5v8h-7.5zM617.4,223.0h7.5v8h-7.5zM625.8,124.0h7.5v8h-7.5zM625.8,133.0h7.5v8h-7.5zM625.8,142.0h7.5v8h-7.5zM625.8,151.0h7.5v8h-7.5zM625.8,160.0h7.5v8h-7.5zM625.8,169.0h7.5v8h-7.5zM625.8,178.0h7.5v8h-7.5zM625.8,205.0h7.5v8h-7.5zM625.8,214.0h7.5v8h-7.5zM625.8,223.0h7.5v8h-7.5zM634.3,133.0h7.5v8h-7.5zM634.3,142.0h7.5v8h-7.5zM634.3,151.0h7.5v8h-7.5zM634.3,160.0h7.5v8h-7.5zM634.3,169.0h7.5v8h-7.5zM634.3,178.0h7.5v8h-7.5zM634.3,187.0h7.5v8h-7.5zM634.3,205.0h7.5v8h-7.5zM634.3,214.0h7.5v8h-7.5zM634.3,223.0h7.5v8h-7.5zM642.8,124.0h7.5v8h-7.5zM642.8,133.0h7.5v8h-7.5zM642.8,142.0h7.5v8h-7.5zM642.8,151.0h7.5v8h-7.5zM642.8,160.0h7.5v8h-7.5zM642.8,169.0h7.5v8h-7.5zM642.8,178.0h7.5v8h-7.5zM642.8,205.0h7.5v8h-7.5zM642.8,214.0h7.5v8h-7.5zM642.8,223.0h7.5v8h-7.5zM651.2,124.0h7.5v8h-7.5zM651.2,133.0h7.5v8h-7.5zM651.2,142.0h7.5v8h-7.5zM651.2,151.0h7.5v8h-7.5zM651.2,160.0h7.5v8h-7.5zM651.2,169.0h7.5v8h-7.5zM651.2,178.0h7.5v8h-7.5zM651.2,205.0h7.5v8h-7.5zM651.2,214.0h7.5v8h-7.5zM651.2,223.0h7.5v8h-7.5zM659.7,133.0h7.5v8h-7.5zM659.7,142.0h7.5v8h-7.5zM659.7,151.0h7.5v8h-7.5zM659.7,160.0h7.5v8h-7.5zM659.7,169.0h7.5v8h-7.5zM659.7,178.0h7.5v8h-7.5zM659.7,205.0h7.5v8h-7.5zM659.7,214.0h7.5v8h-7.5zM659.7,223.0h7.5v8h-7.5zM668.2,133.0h7.5v8h-7.5zM668.2,142.0h7.5v8h-7.5zM668.2,151.0h7.5v8h-7.5zM668.2,160.0h7.5v8h-7.5zM668.2,169.0h7.5v8h-7.5zM668.2,178.0h7.5v8h-7.5zM668.2,205.0h7.5v8h-7.5zM668.2,214.0h7.5v8h-7.5zM668.2,223.0h7.5v8h-7.5zM676.7,133.0h7.5v8h-7.5zM676.7,142.0h7.5v8h-7.5zM676.7,151.0h7.5v8h-7.5zM676.7,160.0h7.5v8h-7.5zM676.7,169.0h7.5v8h-7.5zM676.7,178.0h7.5v8h-7.5zM676.7,187.0h7.5v8h-7.5zM676.7,205.0h7.5v8h-7.5zM676.7,214.0h7.5v8h-7.5zM676.7,223.0h7.5v8h-7.5zM685.1,133.0h7.5v8h-7.5zM685.1,142.0h7.5v8h-7.5zM685.1,151.0h7.5v8h-7.5zM685.1,160.0h7.5v8h-7.5zM685.1,169.0h7.5v8h-7.5zM685.1,178.0h7.5v8h-7.5zM685.1,205.0h7.5v8h-7.5zM685.1,214.0h7.5v8h-7.5zM685.1,223.0h7.5v8h-7.5zM693.6,124.0h7.5v8h-7.5zM693.6,133.0h7.5v8h-7.5zM693.6,142.0h7.5v8h-7.5zM693.6,151.0h7.5v8h-7.5zM693.6,160.0h7.5v8h-7.5zM693.6,169.0h7.5v8h-7.5zM693.6,178.0h7.5v8h-7.5zM693.6,187.0h7.5v8h-7.5zM693.6,196.0h7.5v8h-7.5zM693.6,205.0h7.5v8h-7.5zM693.6,214.0h7.5v8h-7.5zM693.6,223.0h7.5v8h-7.5zM702.1,133.0h7.5v8h-7.5zM702.1,142.0h7.5v8h-7.5zM702.1,151.0h7.5v8h-7.5zM702.1,160.0h7.5v8h-7.5zM702.1,169.0h7.5v8h-7.5zM702.1,178.0h7.5v8h-7.5zM702.1,205.0h7.5v8h-7.5zM702.1,214.0h7.5v8h-7.5zM702.1,223.0h7.5v8h-7.5zM710.6,133.0h7.5v8h-7.5zM710.6,142.0h7.5v8h-7.5zM710.6,151.0h7.5v8h-7.5zM710.6,160.0h7.5v8h-7.5zM710.6,169.0h7.5v8h-7.5zM710.6,178.0h7.5v8h-7.5zM710.6,187.0h7.5v8h-7.5zM710.6,205.0h7.5v8h-7.5zM710.6,214.0h7.5v8h-7.5zM710.6,223.0h7.5v8h-7.5zM719.0,124.0h7.5v8h-7.5zM719.0,133.0h7.5v8h-7.5zM719.0,142.0h7.5v8h-7.5zM719.0,151.0h7.5v8h-7.5zM719.0,160.0h7.5v8h-7.5zM719.0,169.0h7.5v8h-7.5zM719.0,178.0h7.5v8h-7.5zM719.0,187.0h7.5v8h-7.5zM719.0,205.0h7.5v8h-7.5zM719.0,214.0h7.5v8h-7.5zM719.0,223.0h7.5v8h-7.5zM727.5,133.0h7.5v8h-7.5zM727.5,142.0h7.5v8h-7.5zM727.5,151.0h7.5v8h-7.5zM727.5,160.0h7.5v8h-7.5zM727.5,169.0h7.5v8h-7.5zM727.5,178.0h7.5v8h-7.5zM727.5,187.0h7.5v8h-7.5zM727.5,205.0h7.5v8h-7.5zM727.5,214.0h7.5v8h-7.5zM727.5,223.0h7.5v8h-7.5z" />
<path class="heat heat-3" d="M58.0,88.0h7.5v8h-7.5zM58.0,97.0h7.5v8h-7.5zM58.0,106.0h7.5v8h-7.5zM58.0,115.0h7.5v8h-7.5zM58.0,124.0h7.5v8h-7.5zM58.0,133.0h7.5v8h-7.5zM75.0,25.0h7.5v8h-7.5zM75.0,160.0h7.5v8h-7.5zM75.0,214.0h7.5v8h-7.5zM75.0,223.0h7.5v8h-7.5zM83.4,25.0h7.5v8h-7.5zM83.4,151.0h7.5v8h-7.5zM83.4,160.0h7.5v8h-7.5zM83.4,205.0h7.5v8h-7.5zM83.4,214.0h7.5v8h-7.5zM91.9,25.0h7.5v8h-7.5zM91.9,133.0h7.5v8h-7.5zM91.9,142.0h7.5v8h-7.5zM91.9,151.0h7.5v8h-7.5zM91.9,160.0h7.5v8h-7.5zM91.9,169.0h7.5v8h-7.5zM91.9,196.0h7.5v8h-7.5zM91.9,205.0h7.5v8h-7.5zM91.9,214.0h7.5v8h-7.5zM91.9,223.0h7.5v8h-7.5zM100.4,151.0h7.5v8h-7.5zM108.8,151.0h7.5v8h-7.5zM108.8,223.0h7.5v8h-7.5zM117.3,151.0h7.5v8h-7.5zM168.2,16.0h7.5v8h-7.5zM168.2,151.0h7.5v8h-7.5zM176.6,16.0h7.5v8h-7.5zM185.1,16.0h7.5v8h-7.5zM193.6,16.0h7.5v8h-7.5zM193.6,151.0h7.5v8h-7.5zM202.1,16.0h7.5v8h-7.5zM210.5,16.0h7.5v8h-7.5zM219.0,16.0h7.5v8h-7.5zM219.0,151.0h7.5v8h-7.5zM227.5,142.0h7.5v8h-7.5zM227.5,151.0h7.5v8h-7.5zM227.5,160.0h7.5v8h-7.5zM227.5,214.0h7.5v8h-7.5zM227.5,223.0h7.5v8h-7.5zM236.0,142.0h7.5v8h-7.5zM236.0,160.0h7.5v8h-7.5zM236.0,214.0h7.5v8h-7.5zM244.4,151.0h7.5v8h-7.5zM252.9,151.0h7.5v8h-7.5zM278.4,16.0h7.5v8h-7.5zM286.8,16.0h7.5v8h-7.5zM286.8,151.0h7.5v8h-7.5zM295.3,151.0h7.5v8h-7.5zM303.8,16.0h7.5v8h-7.5zM303.8,151.0h7.5v8h-7.5zM312.2,16.0h7.5v8h-7.5zM320.7,16.0h7.5v8h-7.5zM329.2,16.0h7.5v8h-7.5zM337.7,16.0h7.5v8h-7.5zM346.1,16.0h7.5v8h-7.5zM354.6,16.0h7.5v8h-7.5zM363.1,16.0h7.5v8h-7.5zM371.6,16.0h7.5v8h-7.5zM380.1,16.0h7.5v8h-7.5zM388.5,16.0h7.5v8h-7.5zM388.5,151.0h7.5v8h-7.5zM397.0,16.0h7.5v8h-7.5zM397.0,142.0h7.5v8h-7.5zM397.0,160.0h7.5v8h-7.5zM405.5,151.0h7.5v8h-7.5zM405.5,160.0h7.5v8h-7.5zM413.9,16.0h7.5v8h-7.5zM422.4,16.0h7.5v8h-7.5zM422.4,151.0h7.5v8h-7.5zM422.4,160.0h7.5v8h-7.5zM430.9,16.0h7.5v8h-7.5zM430.9,151.0h7.5v8h-7.5zM439.4,16.0h7.5v8h-7.5zM439.4,151.0h7.5v8h-7.5zM447.8,16.0h7.5v8h-7.5zM447.8,151.0h7.5v8h-7.5zM456.3,16.0h7.5v8h-7.5zM456.3,151.0h7.5v8h-7.5zM464.8,16.0h7.5v8h-7.5zM464.8,151.0h7.5v8h-7.5zM473.3,16.0h7.5v8h-7.5zM473.3,151.0h7.5v8h-7.5zM481.8,16.0h7.5v8h-7.5zM490.2,16.0h7.5v8h-7.5zM498.7,16.0h7.5v8h-7.5zM498.7,151.0h7.5v8h-7.5zM507.2,16.0h7.5v8h-7.5zM515.6,16.0h7.5v8h-7.5zM515.6,151.0h7.5v8h-7.5zM524.1,16.0h7.5v8h-7.5zM524.1,151.0h7.5v8h-7.5zM532.6,16.0h7.5v8h-7.5zM541.1,16.0h7.5v8h-7.5zM549.5,16.0h7.5v8h-7.5zM549.5,151.0h7.5v8h-7.5zM558.0,16.0h7.5v8h-7.5zM566.5,16.0h7.5v8h-7.5zM575.0,16.0h7.5v8h-7.5zM583.4,16.0h7.5v8h-7.5zM591.9,16.0h7.5v8h-7.5zM591.9,151.0h7.5v8h-7.5zM600.4,16.0h7.5v8h-7.5zM608.9,16.0h7.5v8h-7.5zM608.9,151.0h7.5v8h-7.5zM617.4,16.0h7.5v8h-7.5zM625.8,16.0h7.5v8h-7.5zM634.3,16.0h7.5v8h-7.5zM642.8,16.0h7.5v8h-7.5zM651.2,16.0h7.5v8h-7.5zM659.7,16.0h7.5v8h-7.5zM668.2,16.0h7.5v8h-7.5zM676.7,16.0h7.5v8h-7.5zM685.1,16.0h7.5v8h-7.5zM693.6,16.0h7.5v8h-7.5zM702.1,16.0h7.5v8h-7.5zM710.6,16.0h7.5v8h-7.5zM719.0,16.0h7.5v8h-7.5zM727.5,16.0h7.5v8h-7.5z" />
<path class="heat heat-4" d="M58.0,43.0h7.5v8h-7.5zM58.0,52.0h7.5v8h-7.5zM58.0,61.0h7.5v8h-7.5zM58.0,70.0h7.5v8h-7.5zM58.0,79.0h7.5v8h-7.5zM58.0,142.0h7.5v8h-7.5zM58.0,151.0h7.5v8h-7.5zM58.0,160.0h7.5v8h-7.5zM58.0,169.0h7.5v8h-7.5zM58.0,178.0h7.5v8h-7.5zM58.0,187.0h7.5v8h-7.5zM58.0,196.0h7.5v8h-7.5zM58.0,205.0h7.5v8h-7.5zM66.5,97.0h7.5v8h-7.5zM66.5,106.0h7.5v8h-7.5zM66.5,115.0h7.5v8h-7.5zM66.5,124.0h7.5v8h-7.5zM66.5,133.0h7.5v8h-7.5zM66.5,142.0h7.5v8h-7.5zM66.5,151.0h7.5v8h-7.5zM66.5,160.0h7.5v8h-7.5zM66.5,169.0h7.5v8h-7.5zM66.5,178.0h7.5v8h-7.5zM66.5,187.0h7.5v8h-7.5zM66.5,196.0h7.5v8h-7.5zM75.0,16.0h7.5v8h-7.5zM117.3,16.0h7.5v8h-7.5zM125.8,16.0h7.5v8h-7.5zM134.3,16.0h7.5v8h-7.5zM142.8,16.0h7.5v8h-7.5zM151.2,16.0h7.5v8h-7.5zM159.7,16.0h7.5v8h-7.5zM227.5,16.0h7.5v8h-7.5zM236.0,16.0h7.5v8h-7.5zM236.0,151.0h7.5v8h-7.5zM244.4,16.0h7.5v8h-7.5zM252.9,16.0h7.5v8h-7.5zM261.4,16.0h7.5v8h-7.5zM269.9,16.0h7.5v8h-7.5zM295.3,16.0h7.5v8h-7.5zM397.0,151.0h7.5v8h-7.5zM405.5,16.0h7.5v8h-7.5z" />
<path class="heat heat-5" d="M58.0,25.0h7.5v8h-7.5zM58.0,34.0h7.5v8h-7.5zM58.0,214.0h7.5v8h-7.5zM58.0,223.0h7.5v8h-7.5zM66.5,79.0h7.5v8h-7.5zM66.5,88.0h7.5v8h-7.5zM66.5,205.0h7.5v8h-7.5zM66.5,214.0h7.5v8h-7.5zM66.5,223.0h7.5v8h-7.5zM83.4,16.0h7.5v8h-7.5zM91.9,16.0h7.5v8h-7.5zM100.4,16.0h7.5v8h-7.5zM108.8,16.0h7.5v8h-7.5z" />
<path class="heat heat-6" d="M58.0,16.0h7.5v8h-7.5zM66.5,16.0h7.5v8h-7.5zM66.5,25.0h7.5v8h-7.5zM66.5,34.0h7.5v8h-7.5zM66.5,43.0h7.5v8h-7.5zM66.5,52.0h7.5v8h-7.5zM66.5,61.0h7.5v8h-7.5zM66.5,70.0h7.5v8h-7.5z" />
<text class="tick" x="50" y="23.5" text-anchor="end">layer 0</text>
<text class="tick" x="50" y="77.5" text-anchor="end">layer 6</text>
<text class="tick" x="50" y="131.5" text-anchor="end">layer 12</text>
<text class="tick" x="50" y="185.5" text-anchor="end">layer 18</text>
<text class="tick" x="50" y="230.5" text-anchor="end">layer 23</text>
<text class="tick" x="62.2" y="248" text-anchor="middle">100</text>
<text class="tick" x="223.3" y="248" text-anchor="middle">2000</text>
<text class="tick" x="392.8" y="248" text-anchor="middle">4000</text>
<text class="tick" x="562.3" y="248" text-anchor="middle">6000</text>
<text class="tick" x="731.8" y="248" text-anchor="middle">8000</text>
<text class="axis-label" x="736" y="264" text-anchor="end">training step</text>
<line class="boundary" x1="218.5" x2="218.5" y1="12" y2="236" />
<line class="boundary" x1="388.0" x2="388.0" y1="12" y2="236" />
<rect class="hit-col" x="58.0" y="16" width="8.5" height="216"><title>Step 100: layer 0 0.469, median layer 0.142, layer 23 0.201</title></rect>
<rect class="hit-col" x="66.5" y="16" width="8.5" height="216"><title>Step 200: layer 0 1.951, median layer 0.211, layer 23 0.261</title></rect>
<rect class="hit-col" x="75.0" y="16" width="8.5" height="216"><title>Step 300: layer 0 0.185, median layer 0.058, layer 23 0.082</title></rect>
<rect class="hit-col" x="83.4" y="16" width="8.5" height="216"><title>Step 400: layer 0 0.213, median layer 0.061, layer 23 0.077</title></rect>
<rect class="hit-col" x="91.9" y="16" width="8.5" height="216"><title>Step 500: layer 0 0.308, median layer 0.077, layer 23 0.107</title></rect>
<rect class="hit-col" x="100.4" y="16" width="8.5" height="216"><title>Step 600: layer 0 0.234, median layer 0.053, layer 23 0.073</title></rect>
<rect class="hit-col" x="108.8" y="16" width="8.5" height="216"><title>Step 700: layer 0 0.203, median layer 0.053, layer 23 0.082</title></rect>
<rect class="hit-col" x="117.3" y="16" width="8.5" height="216"><title>Step 800: layer 0 0.174, median layer 0.053, layer 23 0.072</title></rect>
<rect class="hit-col" x="125.8" y="16" width="8.5" height="216"><title>Step 900: layer 0 0.195, median layer 0.048, layer 23 0.060</title></rect>
<rect class="hit-col" x="134.3" y="16" width="8.5" height="216"><title>Step 1000: layer 0 0.179, median layer 0.047, layer 23 0.069</title></rect>
<rect class="hit-col" x="142.8" y="16" width="8.5" height="216"><title>Step 1100: layer 0 0.152, median layer 0.048, layer 23 0.058</title></rect>
<rect class="hit-col" x="151.2" y="16" width="8.5" height="216"><title>Step 1200: layer 0 0.148, median layer 0.049, layer 23 0.065</title></rect>
<rect class="hit-col" x="159.7" y="16" width="8.5" height="216"><title>Step 1300: layer 0 0.142, median layer 0.048, layer 23 0.061</title></rect>
<rect class="hit-col" x="168.2" y="16" width="8.5" height="216"><title>Step 1400: layer 0 0.123, median layer 0.049, layer 23 0.058</title></rect>
<rect class="hit-col" x="176.6" y="16" width="8.5" height="216"><title>Step 1500: layer 0 0.115, median layer 0.048, layer 23 0.058</title></rect>
<rect class="hit-col" x="185.1" y="16" width="8.5" height="216"><title>Step 1600: layer 0 0.109, median layer 0.048, layer 23 0.059</title></rect>
<rect class="hit-col" x="193.6" y="16" width="8.5" height="216"><title>Step 1700: layer 0 0.112, median layer 0.049, layer 23 0.058</title></rect>
<rect class="hit-col" x="202.1" y="16" width="8.5" height="216"><title>Step 1800: layer 0 0.104, median layer 0.049, layer 23 0.057</title></rect>
<rect class="hit-col" x="210.5" y="16" width="8.5" height="216"><title>Step 1900: layer 0 0.103, median layer 0.048, layer 23 0.056</title></rect>
<rect class="hit-col" x="219.0" y="16" width="8.5" height="216"><title>Step 2000: layer 0 0.107, median layer 0.050, layer 23 0.057</title></rect>
<rect class="hit-col" x="227.5" y="16" width="8.5" height="216"><title>Step 2100: layer 0 0.155, median layer 0.061, layer 23 0.084</title></rect>
<rect class="hit-col" x="236.0" y="16" width="8.5" height="216"><title>Step 2200: layer 0 0.180, median layer 0.060, layer 23 0.074</title></rect>
<rect class="hit-col" x="244.4" y="16" width="8.5" height="216"><title>Step 2300: layer 0 0.141, median layer 0.054, layer 23 0.075</title></rect>
<rect class="hit-col" x="252.9" y="16" width="8.5" height="216"><title>Step 2400: layer 0 0.134, median layer 0.054, layer 23 0.074</title></rect>
<rect class="hit-col" x="261.4" y="16" width="8.5" height="216"><title>Step 2500: layer 0 0.132, median layer 0.050, layer 23 0.066</title></rect>
<rect class="hit-col" x="269.9" y="16" width="8.5" height="216"><title>Step 2600: layer 0 0.134, median layer 0.050, layer 23 0.065</title></rect>
<rect class="hit-col" x="278.4" y="16" width="8.5" height="216"><title>Step 2700: layer 0 0.119, median layer 0.050, layer 23 0.066</title></rect>
<rect class="hit-col" x="286.8" y="16" width="8.5" height="216"><title>Step 2800: layer 0 0.121, median layer 0.053, layer 23 0.070</title></rect>
<rect class="hit-col" x="295.3" y="16" width="8.5" height="216"><title>Step 2900: layer 0 0.129, median layer 0.050, layer 23 0.062</title></rect>
<rect class="hit-col" x="303.8" y="16" width="8.5" height="216"><title>Step 3000: layer 0 0.123, median layer 0.050, layer 23 0.062</title></rect>
<rect class="hit-col" x="312.2" y="16" width="8.5" height="216"><title>Step 3100: layer 0 0.106, median layer 0.049, layer 23 0.062</title></rect>
<rect class="hit-col" x="320.7" y="16" width="8.5" height="216"><title>Step 3200: layer 0 0.096, median layer 0.049, layer 23 0.062</title></rect>
<rect class="hit-col" x="329.2" y="16" width="8.5" height="216"><title>Step 3300: layer 0 0.098, median layer 0.049, layer 23 0.062</title></rect>
<rect class="hit-col" x="337.7" y="16" width="8.5" height="216"><title>Step 3400: layer 0 0.092, median layer 0.049, layer 23 0.061</title></rect>
<rect class="hit-col" x="346.1" y="16" width="8.5" height="216"><title>Step 3500: layer 0 0.096, median layer 0.049, layer 23 0.061</title></rect>
<rect class="hit-col" x="354.6" y="16" width="8.5" height="216"><title>Step 3600: layer 0 0.089, median layer 0.047, layer 23 0.061</title></rect>
<rect class="hit-col" x="363.1" y="16" width="8.5" height="216"><title>Step 3700: layer 0 0.087, median layer 0.047, layer 23 0.058</title></rect>
<rect class="hit-col" x="371.6" y="16" width="8.5" height="216"><title>Step 3800: layer 0 0.088, median layer 0.047, layer 23 0.061</title></rect>
<rect class="hit-col" x="380.1" y="16" width="8.5" height="216"><title>Step 3900: layer 0 0.088, median layer 0.048, layer 23 0.060</title></rect>
<rect class="hit-col" x="388.5" y="16" width="8.5" height="216"><title>Step 4000: layer 0 0.091, median layer 0.049, layer 23 0.060</title></rect>
<rect class="hit-col" x="397.0" y="16" width="8.5" height="216"><title>Step 4100: layer 0 0.109, median layer 0.057, layer 23 0.073</title></rect>
<rect class="hit-col" x="405.5" y="16" width="8.5" height="216"><title>Step 4200: layer 0 0.134, median layer 0.059, layer 23 0.074</title></rect>
<rect class="hit-col" x="413.9" y="16" width="8.5" height="216"><title>Step 4300: layer 0 0.113, median layer 0.053, layer 23 0.076</title></rect>
<rect class="hit-col" x="422.4" y="16" width="8.5" height="216"><title>Step 4400: layer 0 0.120, median layer 0.057, layer 23 0.072</title></rect>
<rect class="hit-col" x="430.9" y="16" width="8.5" height="216"><title>Step 4500: layer 0 0.108, median layer 0.051, layer 23 0.066</title></rect>
<rect class="hit-col" x="439.4" y="16" width="8.5" height="216"><title>Step 4600: layer 0 0.111, median layer 0.052, layer 23 0.070</title></rect>
<rect class="hit-col" x="447.8" y="16" width="8.5" height="216"><title>Step 4700: layer 0 0.120, median layer 0.055, layer 23 0.066</title></rect>
<rect class="hit-col" x="456.3" y="16" width="8.5" height="216"><title>Step 4800: layer 0 0.111, median layer 0.053, layer 23 0.077</title></rect>
<rect class="hit-col" x="464.8" y="16" width="8.5" height="216"><title>Step 4900: layer 0 0.114, median layer 0.052, layer 23 0.066</title></rect>
<rect class="hit-col" x="473.3" y="16" width="8.5" height="216"><title>Step 5000: layer 0 0.111, median layer 0.053, layer 23 0.068</title></rect>
<rect class="hit-col" x="481.8" y="16" width="8.5" height="216"><title>Step 5100: layer 0 0.107, median layer 0.050, layer 23 0.064</title></rect>
<rect class="hit-col" x="490.2" y="16" width="8.5" height="216"><title>Step 5200: layer 0 0.115, median layer 0.051, layer 23 0.065</title></rect>
<rect class="hit-col" x="498.7" y="16" width="8.5" height="216"><title>Step 5300: layer 0 0.097, median layer 0.052, layer 23 0.066</title></rect>
<rect class="hit-col" x="507.2" y="16" width="8.5" height="216"><title>Step 5400: layer 0 0.104, median layer 0.051, layer 23 0.068</title></rect>
<rect class="hit-col" x="515.6" y="16" width="8.5" height="216"><title>Step 5500: layer 0 0.107, median layer 0.053, layer 23 0.070</title></rect>
<rect class="hit-col" x="524.1" y="16" width="8.5" height="216"><title>Step 5600: layer 0 0.098, median layer 0.050, layer 23 0.066</title></rect>
<rect class="hit-col" x="532.6" y="16" width="8.5" height="216"><title>Step 5700: layer 0 0.096, median layer 0.049, layer 23 0.067</title></rect>
<rect class="hit-col" x="541.1" y="16" width="8.5" height="216"><title>Step 5800: layer 0 0.096, median layer 0.050, layer 23 0.068</title></rect>
<rect class="hit-col" x="549.5" y="16" width="8.5" height="216"><title>Step 5900: layer 0 0.094, median layer 0.051, layer 23 0.063</title></rect>
<rect class="hit-col" x="558.0" y="16" width="8.5" height="216"><title>Step 6000: layer 0 0.091, median layer 0.048, layer 23 0.063</title></rect>
<rect class="hit-col" x="566.5" y="16" width="8.5" height="216"><title>Step 6100: layer 0 0.097, median layer 0.050, layer 23 0.065</title></rect>
<rect class="hit-col" x="575.0" y="16" width="8.5" height="216"><title>Step 6200: layer 0 0.089, median layer 0.049, layer 23 0.066</title></rect>
<rect class="hit-col" x="583.4" y="16" width="8.5" height="216"><title>Step 6300: layer 0 0.088, median layer 0.049, layer 23 0.063</title></rect>
<rect class="hit-col" x="591.9" y="16" width="8.5" height="216"><title>Step 6400: layer 0 0.089, median layer 0.051, layer 23 0.072</title></rect>
<rect class="hit-col" x="600.4" y="16" width="8.5" height="216"><title>Step 6500: layer 0 0.087, median layer 0.049, layer 23 0.064</title></rect>
<rect class="hit-col" x="608.9" y="16" width="8.5" height="216"><title>Step 6600: layer 0 0.091, median layer 0.051, layer 23 0.064</title></rect>
<rect class="hit-col" x="617.4" y="16" width="8.5" height="216"><title>Step 6700: layer 0 0.088, median layer 0.050, layer 23 0.066</title></rect>
<rect class="hit-col" x="625.8" y="16" width="8.5" height="216"><title>Step 6800: layer 0 0.089, median layer 0.050, layer 23 0.065</title></rect>
<rect class="hit-col" x="634.3" y="16" width="8.5" height="216"><title>Step 6900: layer 0 0.088, median layer 0.050, layer 23 0.065</title></rect>
<rect class="hit-col" x="642.8" y="16" width="8.5" height="216"><title>Step 7000: layer 0 0.089, median layer 0.050, layer 23 0.065</title></rect>
<rect class="hit-col" x="651.2" y="16" width="8.5" height="216"><title>Step 7100: layer 0 0.084, median layer 0.050, layer 23 0.063</title></rect>
<rect class="hit-col" x="659.7" y="16" width="8.5" height="216"><title>Step 7200: layer 0 0.084, median layer 0.049, layer 23 0.065</title></rect>
<rect class="hit-col" x="668.2" y="16" width="8.5" height="216"><title>Step 7300: layer 0 0.084, median layer 0.050, layer 23 0.064</title></rect>
<rect class="hit-col" x="676.7" y="16" width="8.5" height="216"><title>Step 7400: layer 0 0.089, median layer 0.050, layer 23 0.064</title></rect>
<rect class="hit-col" x="685.1" y="16" width="8.5" height="216"><title>Step 7500: layer 0 0.083, median layer 0.049, layer 23 0.063</title></rect>
<rect class="hit-col" x="693.6" y="16" width="8.5" height="216"><title>Step 7600: layer 0 0.085, median layer 0.051, layer 23 0.064</title></rect>
<rect class="hit-col" x="702.1" y="16" width="8.5" height="216"><title>Step 7700: layer 0 0.084, median layer 0.049, layer 23 0.063</title></rect>
<rect class="hit-col" x="710.6" y="16" width="8.5" height="216"><title>Step 7800: layer 0 0.089, median layer 0.050, layer 23 0.064</title></rect>
<rect class="hit-col" x="719.0" y="16" width="8.5" height="216"><title>Step 7900: layer 0 0.085, median layer 0.050, layer 23 0.064</title></rect>
<rect class="hit-col" x="727.5" y="16" width="8.5" height="216"><title>Step 8000: layer 0 0.083, median layer 0.049, layer 23 0.064</title></rect>
<text class="tick" x="58" y="285">smaller</text>
<rect class="heat heat-0" x="110" y="276" width="20" height="10" />
<rect class="heat heat-1" x="132" y="276" width="20" height="10" />
<rect class="heat heat-2" x="154" y="276" width="20" height="10" />
<rect class="heat heat-3" x="176" y="276" width="20" height="10" />
<rect class="heat heat-4" x="198" y="276" width="20" height="10" />
<rect class="heat heat-5" x="220" y="276" width="20" height="10" />
<rect class="heat heat-6" x="242" y="276" width="20" height="10" />
<text class="tick" x="270" y="285">larger gradient norm (0.02 to 0.5, log scale)</text>
</svg>

</div>
<figcaption>Gradient norm for each of the 24 layers, every 100 steps, before clipping. Stronger color means a larger gradient. Hover a column to see its values.</figcaption>
</figure>

<p>The first layer carries the largest gradients throughout, four to six times those of the early-middle layers, and the second half of the network runs higher than the first. All 24 layers shrink together, and each learning-rate restart shows up as a faint band at steps 2000 and 4000. No layer ever drifted away from the rest across the whole run. A layer whose gradients grew or collapsed on its own would be the first sign of an unstable run, and nothing here ever needed me to intervene.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 298" role="img" aria-labelledby="residual-stream-size-by--t residual-stream-size-by--d">
<title id="residual-stream-size-by--t">Residual stream size by layer</title>
<desc id="residual-stream-size-by--d">Heatmap of the root-mean-square size of the residual stream leaving each of the 24 layers, every 100 steps. The picture is banded by depth rather than by time: each layer adds to a running sum, so the stream grows steadily from layer 0 to layer 23 and the bottom of the chart stays light while the top stays dark. The gradient is smooth, with no single layer breaking away from its neighbours.</desc>
<path class="heat heat-0" d="M58.0,16.0h7.5v8h-7.5zM58.0,25.0h7.5v8h-7.5zM58.0,34.0h7.5v8h-7.5zM58.0,43.0h7.5v8h-7.5zM58.0,52.0h7.5v8h-7.5zM58.0,61.0h7.5v8h-7.5zM58.0,70.0h7.5v8h-7.5zM58.0,79.0h7.5v8h-7.5zM58.0,88.0h7.5v8h-7.5zM58.0,97.0h7.5v8h-7.5zM66.5,16.0h7.5v8h-7.5zM66.5,25.0h7.5v8h-7.5zM66.5,34.0h7.5v8h-7.5zM66.5,43.0h7.5v8h-7.5zM75.0,16.0h7.5v8h-7.5zM75.0,25.0h7.5v8h-7.5zM75.0,34.0h7.5v8h-7.5zM83.4,16.0h7.5v8h-7.5zM83.4,25.0h7.5v8h-7.5zM83.4,34.0h7.5v8h-7.5zM83.4,43.0h7.5v8h-7.5zM83.4,52.0h7.5v8h-7.5zM91.9,16.0h7.5v8h-7.5zM91.9,25.0h7.5v8h-7.5zM91.9,34.0h7.5v8h-7.5zM91.9,43.0h7.5v8h-7.5zM100.4,16.0h7.5v8h-7.5zM100.4,25.0h7.5v8h-7.5zM100.4,34.0h7.5v8h-7.5zM108.8,16.0h7.5v8h-7.5zM108.8,25.0h7.5v8h-7.5zM108.8,34.0h7.5v8h-7.5zM108.8,43.0h7.5v8h-7.5zM117.3,16.0h7.5v8h-7.5zM117.3,25.0h7.5v8h-7.5zM117.3,34.0h7.5v8h-7.5zM117.3,43.0h7.5v8h-7.5zM125.8,16.0h7.5v8h-7.5zM125.8,25.0h7.5v8h-7.5zM125.8,34.0h7.5v8h-7.5zM125.8,43.0h7.5v8h-7.5zM134.3,16.0h7.5v8h-7.5zM134.3,25.0h7.5v8h-7.5zM134.3,34.0h7.5v8h-7.5zM134.3,43.0h7.5v8h-7.5zM142.8,16.0h7.5v8h-7.5zM142.8,25.0h7.5v8h-7.5zM142.8,34.0h7.5v8h-7.5zM142.8,43.0h7.5v8h-7.5zM151.2,16.0h7.5v8h-7.5zM151.2,25.0h7.5v8h-7.5zM151.2,34.0h7.5v8h-7.5zM151.2,43.0h7.5v8h-7.5zM151.2,52.0h7.5v8h-7.5zM151.2,61.0h7.5v8h-7.5zM159.7,16.0h7.5v8h-7.5zM159.7,25.0h7.5v8h-7.5zM159.7,34.0h7.5v8h-7.5zM159.7,43.0h7.5v8h-7.5zM159.7,52.0h7.5v8h-7.5zM168.2,16.0h7.5v8h-7.5zM168.2,25.0h7.5v8h-7.5zM168.2,34.0h7.5v8h-7.5zM168.2,43.0h7.5v8h-7.5zM168.2,52.0h7.5v8h-7.5zM168.2,61.0h7.5v8h-7.5zM176.6,16.0h7.5v8h-7.5zM176.6,25.0h7.5v8h-7.5zM176.6,34.0h7.5v8h-7.5zM176.6,43.0h7.5v8h-7.5zM176.6,52.0h7.5v8h-7.5zM176.6,61.0h7.5v8h-7.5zM185.1,16.0h7.5v8h-7.5zM185.1,25.0h7.5v8h-7.5zM185.1,34.0h7.5v8h-7.5zM185.1,43.0h7.5v8h-7.5zM185.1,52.0h7.5v8h-7.5zM185.1,61.0h7.5v8h-7.5zM185.1,70.0h7.5v8h-7.5zM193.6,16.0h7.5v8h-7.5zM193.6,25.0h7.5v8h-7.5zM193.6,34.0h7.5v8h-7.5zM193.6,43.0h7.5v8h-7.5zM193.6,52.0h7.5v8h-7.5zM193.6,61.0h7.5v8h-7.5zM193.6,70.0h7.5v8h-7.5zM202.1,16.0h7.5v8h-7.5zM202.1,25.0h7.5v8h-7.5zM202.1,34.0h7.5v8h-7.5zM202.1,43.0h7.5v8h-7.5zM202.1,52.0h7.5v8h-7.5zM202.1,61.0h7.5v8h-7.5zM202.1,70.0h7.5v8h-7.5zM202.1,79.0h7.5v8h-7.5zM210.5,16.0h7.5v8h-7.5zM210.5,25.0h7.5v8h-7.5zM210.5,34.0h7.5v8h-7.5zM210.5,43.0h7.5v8h-7.5zM210.5,52.0h7.5v8h-7.5zM210.5,61.0h7.5v8h-7.5zM210.5,70.0h7.5v8h-7.5zM210.5,79.0h7.5v8h-7.5zM219.0,16.0h7.5v8h-7.5zM219.0,25.0h7.5v8h-7.5zM219.0,34.0h7.5v8h-7.5zM219.0,43.0h7.5v8h-7.5zM219.0,52.0h7.5v8h-7.5zM219.0,61.0h7.5v8h-7.5zM219.0,70.0h7.5v8h-7.5zM219.0,79.0h7.5v8h-7.5zM219.0,88.0h7.5v8h-7.5zM227.5,16.0h7.5v8h-7.5zM227.5,25.0h7.5v8h-7.5zM227.5,34.0h7.5v8h-7.5zM227.5,43.0h7.5v8h-7.5zM227.5,52.0h7.5v8h-7.5zM227.5,61.0h7.5v8h-7.5zM227.5,70.0h7.5v8h-7.5zM236.0,16.0h7.5v8h-7.5zM236.0,25.0h7.5v8h-7.5zM236.0,34.0h7.5v8h-7.5zM236.0,43.0h7.5v8h-7.5zM236.0,52.0h7.5v8h-7.5zM244.4,16.0h7.5v8h-7.5zM244.4,25.0h7.5v8h-7.5zM244.4,34.0h7.5v8h-7.5zM244.4,43.0h7.5v8h-7.5zM244.4,52.0h7.5v8h-7.5zM252.9,16.0h7.5v8h-7.5zM252.9,25.0h7.5v8h-7.5zM252.9,34.0h7.5v8h-7.5zM252.9,43.0h7.5v8h-7.5zM252.9,52.0h7.5v8h-7.5zM261.4,16.0h7.5v8h-7.5zM261.4,25.0h7.5v8h-7.5zM261.4,34.0h7.5v8h-7.5zM261.4,43.0h7.5v8h-7.5zM269.9,16.0h7.5v8h-7.5zM269.9,25.0h7.5v8h-7.5zM269.9,34.0h7.5v8h-7.5zM269.9,43.0h7.5v8h-7.5zM278.4,16.0h7.5v8h-7.5zM278.4,25.0h7.5v8h-7.5zM278.4,34.0h7.5v8h-7.5zM278.4,43.0h7.5v8h-7.5zM286.8,16.0h7.5v8h-7.5zM286.8,25.0h7.5v8h-7.5zM286.8,34.0h7.5v8h-7.5zM286.8,43.0h7.5v8h-7.5zM286.8,52.0h7.5v8h-7.5zM295.3,16.0h7.5v8h-7.5zM295.3,25.0h7.5v8h-7.5zM295.3,34.0h7.5v8h-7.5zM295.3,43.0h7.5v8h-7.5zM295.3,52.0h7.5v8h-7.5zM303.8,16.0h7.5v8h-7.5zM303.8,25.0h7.5v8h-7.5zM303.8,34.0h7.5v8h-7.5zM303.8,43.0h7.5v8h-7.5zM303.8,52.0h7.5v8h-7.5zM303.8,61.0h7.5v8h-7.5zM303.8,70.0h7.5v8h-7.5zM312.2,16.0h7.5v8h-7.5zM312.2,25.0h7.5v8h-7.5zM312.2,34.0h7.5v8h-7.5zM312.2,43.0h7.5v8h-7.5zM312.2,52.0h7.5v8h-7.5zM320.7,16.0h7.5v8h-7.5zM320.7,25.0h7.5v8h-7.5zM320.7,34.0h7.5v8h-7.5zM320.7,43.0h7.5v8h-7.5zM320.7,52.0h7.5v8h-7.5zM329.2,16.0h7.5v8h-7.5zM329.2,25.0h7.5v8h-7.5zM329.2,34.0h7.5v8h-7.5zM329.2,43.0h7.5v8h-7.5zM329.2,52.0h7.5v8h-7.5zM329.2,61.0h7.5v8h-7.5zM337.7,16.0h7.5v8h-7.5zM337.7,25.0h7.5v8h-7.5zM337.7,34.0h7.5v8h-7.5zM337.7,43.0h7.5v8h-7.5zM337.7,52.0h7.5v8h-7.5zM337.7,61.0h7.5v8h-7.5zM337.7,70.0h7.5v8h-7.5zM346.1,16.0h7.5v8h-7.5zM346.1,25.0h7.5v8h-7.5zM346.1,34.0h7.5v8h-7.5zM346.1,43.0h7.5v8h-7.5zM346.1,52.0h7.5v8h-7.5zM346.1,61.0h7.5v8h-7.5zM346.1,70.0h7.5v8h-7.5zM354.6,16.0h7.5v8h-7.5zM354.6,25.0h7.5v8h-7.5zM354.6,34.0h7.5v8h-7.5zM354.6,43.0h7.5v8h-7.5zM354.6,52.0h7.5v8h-7.5zM354.6,61.0h7.5v8h-7.5zM363.1,16.0h7.5v8h-7.5zM363.1,25.0h7.5v8h-7.5zM363.1,34.0h7.5v8h-7.5zM363.1,43.0h7.5v8h-7.5zM363.1,52.0h7.5v8h-7.5zM363.1,61.0h7.5v8h-7.5zM363.1,70.0h7.5v8h-7.5zM371.6,16.0h7.5v8h-7.5zM371.6,25.0h7.5v8h-7.5zM371.6,34.0h7.5v8h-7.5zM371.6,43.0h7.5v8h-7.5zM371.6,52.0h7.5v8h-7.5zM371.6,61.0h7.5v8h-7.5zM371.6,70.0h7.5v8h-7.5zM380.1,16.0h7.5v8h-7.5zM380.1,25.0h7.5v8h-7.5zM380.1,34.0h7.5v8h-7.5zM380.1,43.0h7.5v8h-7.5zM380.1,52.0h7.5v8h-7.5zM380.1,61.0h7.5v8h-7.5zM380.1,70.0h7.5v8h-7.5zM380.1,79.0h7.5v8h-7.5zM388.5,16.0h7.5v8h-7.5zM388.5,25.0h7.5v8h-7.5zM388.5,34.0h7.5v8h-7.5zM388.5,43.0h7.5v8h-7.5zM388.5,52.0h7.5v8h-7.5zM388.5,61.0h7.5v8h-7.5zM388.5,70.0h7.5v8h-7.5zM388.5,79.0h7.5v8h-7.5zM397.0,16.0h7.5v8h-7.5zM397.0,25.0h7.5v8h-7.5zM397.0,34.0h7.5v8h-7.5zM397.0,43.0h7.5v8h-7.5zM397.0,52.0h7.5v8h-7.5zM397.0,61.0h7.5v8h-7.5zM405.5,16.0h7.5v8h-7.5zM405.5,25.0h7.5v8h-7.5zM405.5,34.0h7.5v8h-7.5zM405.5,43.0h7.5v8h-7.5zM405.5,52.0h7.5v8h-7.5zM405.5,61.0h7.5v8h-7.5zM413.9,16.0h7.5v8h-7.5zM413.9,25.0h7.5v8h-7.5zM413.9,34.0h7.5v8h-7.5zM413.9,43.0h7.5v8h-7.5zM413.9,52.0h7.5v8h-7.5zM422.4,16.0h7.5v8h-7.5zM422.4,25.0h7.5v8h-7.5zM422.4,34.0h7.5v8h-7.5zM422.4,43.0h7.5v8h-7.5zM422.4,52.0h7.5v8h-7.5zM430.9,16.0h7.5v8h-7.5zM430.9,25.0h7.5v8h-7.5zM430.9,34.0h7.5v8h-7.5zM430.9,43.0h7.5v8h-7.5zM430.9,52.0h7.5v8h-7.5zM439.4,16.0h7.5v8h-7.5zM439.4,25.0h7.5v8h-7.5zM439.4,34.0h7.5v8h-7.5zM439.4,43.0h7.5v8h-7.5zM439.4,52.0h7.5v8h-7.5zM439.4,61.0h7.5v8h-7.5zM447.8,16.0h7.5v8h-7.5zM447.8,25.0h7.5v8h-7.5zM447.8,34.0h7.5v8h-7.5zM447.8,43.0h7.5v8h-7.5zM447.8,52.0h7.5v8h-7.5zM456.3,16.0h7.5v8h-7.5zM456.3,25.0h7.5v8h-7.5zM456.3,34.0h7.5v8h-7.5zM456.3,43.0h7.5v8h-7.5zM464.8,16.0h7.5v8h-7.5zM464.8,25.0h7.5v8h-7.5zM464.8,34.0h7.5v8h-7.5zM464.8,43.0h7.5v8h-7.5zM473.3,16.0h7.5v8h-7.5zM473.3,25.0h7.5v8h-7.5zM473.3,34.0h7.5v8h-7.5zM473.3,43.0h7.5v8h-7.5zM473.3,52.0h7.5v8h-7.5zM473.3,61.0h7.5v8h-7.5zM481.8,16.0h7.5v8h-7.5zM481.8,25.0h7.5v8h-7.5zM481.8,34.0h7.5v8h-7.5zM481.8,43.0h7.5v8h-7.5zM481.8,52.0h7.5v8h-7.5zM481.8,61.0h7.5v8h-7.5zM490.2,16.0h7.5v8h-7.5zM490.2,25.0h7.5v8h-7.5zM490.2,34.0h7.5v8h-7.5zM490.2,43.0h7.5v8h-7.5zM498.7,16.0h7.5v8h-7.5zM498.7,25.0h7.5v8h-7.5zM498.7,34.0h7.5v8h-7.5zM498.7,43.0h7.5v8h-7.5zM507.2,16.0h7.5v8h-7.5zM507.2,25.0h7.5v8h-7.5zM507.2,34.0h7.5v8h-7.5zM507.2,43.0h7.5v8h-7.5zM515.6,16.0h7.5v8h-7.5zM515.6,25.0h7.5v8h-7.5zM515.6,34.0h7.5v8h-7.5zM515.6,43.0h7.5v8h-7.5zM515.6,52.0h7.5v8h-7.5zM515.6,61.0h7.5v8h-7.5zM515.6,70.0h7.5v8h-7.5zM524.1,16.0h7.5v8h-7.5zM524.1,25.0h7.5v8h-7.5zM524.1,34.0h7.5v8h-7.5zM524.1,43.0h7.5v8h-7.5zM524.1,52.0h7.5v8h-7.5zM532.6,16.0h7.5v8h-7.5zM532.6,25.0h7.5v8h-7.5zM532.6,34.0h7.5v8h-7.5zM532.6,43.0h7.5v8h-7.5zM532.6,52.0h7.5v8h-7.5zM532.6,61.0h7.5v8h-7.5zM541.1,16.0h7.5v8h-7.5zM541.1,25.0h7.5v8h-7.5zM541.1,34.0h7.5v8h-7.5zM541.1,43.0h7.5v8h-7.5zM541.1,52.0h7.5v8h-7.5zM549.5,16.0h7.5v8h-7.5zM549.5,25.0h7.5v8h-7.5zM549.5,34.0h7.5v8h-7.5zM549.5,43.0h7.5v8h-7.5zM549.5,52.0h7.5v8h-7.5zM558.0,16.0h7.5v8h-7.5zM558.0,25.0h7.5v8h-7.5zM558.0,34.0h7.5v8h-7.5zM558.0,43.0h7.5v8h-7.5zM558.0,52.0h7.5v8h-7.5zM558.0,61.0h7.5v8h-7.5zM566.5,16.0h7.5v8h-7.5zM566.5,25.0h7.5v8h-7.5zM566.5,34.0h7.5v8h-7.5zM566.5,43.0h7.5v8h-7.5zM566.5,52.0h7.5v8h-7.5zM575.0,16.0h7.5v8h-7.5zM575.0,25.0h7.5v8h-7.5zM575.0,34.0h7.5v8h-7.5zM575.0,43.0h7.5v8h-7.5zM575.0,52.0h7.5v8h-7.5zM575.0,61.0h7.5v8h-7.5zM575.0,70.0h7.5v8h-7.5zM583.4,16.0h7.5v8h-7.5zM583.4,25.0h7.5v8h-7.5zM583.4,34.0h7.5v8h-7.5zM583.4,43.0h7.5v8h-7.5zM583.4,52.0h7.5v8h-7.5zM591.9,16.0h7.5v8h-7.5zM591.9,25.0h7.5v8h-7.5zM591.9,34.0h7.5v8h-7.5zM591.9,43.0h7.5v8h-7.5zM591.9,52.0h7.5v8h-7.5zM591.9,61.0h7.5v8h-7.5zM600.4,16.0h7.5v8h-7.5zM600.4,25.0h7.5v8h-7.5zM600.4,34.0h7.5v8h-7.5zM600.4,43.0h7.5v8h-7.5zM600.4,52.0h7.5v8h-7.5zM600.4,61.0h7.5v8h-7.5zM600.4,70.0h7.5v8h-7.5zM608.9,16.0h7.5v8h-7.5zM608.9,25.0h7.5v8h-7.5zM608.9,34.0h7.5v8h-7.5zM608.9,43.0h7.5v8h-7.5zM608.9,52.0h7.5v8h-7.5zM608.9,61.0h7.5v8h-7.5zM608.9,70.0h7.5v8h-7.5zM617.4,16.0h7.5v8h-7.5zM617.4,25.0h7.5v8h-7.5zM617.4,34.0h7.5v8h-7.5zM617.4,43.0h7.5v8h-7.5zM617.4,52.0h7.5v8h-7.5zM617.4,61.0h7.5v8h-7.5zM625.8,16.0h7.5v8h-7.5zM625.8,25.0h7.5v8h-7.5zM625.8,34.0h7.5v8h-7.5zM625.8,43.0h7.5v8h-7.5zM625.8,52.0h7.5v8h-7.5zM625.8,61.0h7.5v8h-7.5zM634.3,16.0h7.5v8h-7.5zM634.3,25.0h7.5v8h-7.5zM634.3,34.0h7.5v8h-7.5zM634.3,43.0h7.5v8h-7.5zM634.3,52.0h7.5v8h-7.5zM634.3,61.0h7.5v8h-7.5zM634.3,70.0h7.5v8h-7.5zM642.8,16.0h7.5v8h-7.5zM642.8,25.0h7.5v8h-7.5zM642.8,34.0h7.5v8h-7.5zM642.8,43.0h7.5v8h-7.5zM642.8,52.0h7.5v8h-7.5zM642.8,61.0h7.5v8h-7.5zM642.8,70.0h7.5v8h-7.5zM651.2,16.0h7.5v8h-7.5zM651.2,25.0h7.5v8h-7.5zM651.2,34.0h7.5v8h-7.5zM651.2,43.0h7.5v8h-7.5zM651.2,52.0h7.5v8h-7.5zM651.2,61.0h7.5v8h-7.5zM651.2,70.0h7.5v8h-7.5zM651.2,79.0h7.5v8h-7.5zM659.7,16.0h7.5v8h-7.5zM659.7,25.0h7.5v8h-7.5zM659.7,34.0h7.5v8h-7.5zM659.7,43.0h7.5v8h-7.5zM659.7,52.0h7.5v8h-7.5zM659.7,61.0h7.5v8h-7.5zM659.7,70.0h7.5v8h-7.5zM668.2,16.0h7.5v8h-7.5zM668.2,25.0h7.5v8h-7.5zM668.2,34.0h7.5v8h-7.5zM668.2,43.0h7.5v8h-7.5zM668.2,52.0h7.5v8h-7.5zM668.2,61.0h7.5v8h-7.5zM668.2,70.0h7.5v8h-7.5zM676.7,16.0h7.5v8h-7.5zM676.7,25.0h7.5v8h-7.5zM676.7,34.0h7.5v8h-7.5zM676.7,43.0h7.5v8h-7.5zM676.7,52.0h7.5v8h-7.5zM676.7,61.0h7.5v8h-7.5zM676.7,70.0h7.5v8h-7.5zM676.7,79.0h7.5v8h-7.5zM685.1,16.0h7.5v8h-7.5zM685.1,25.0h7.5v8h-7.5zM685.1,34.0h7.5v8h-7.5zM685.1,43.0h7.5v8h-7.5zM685.1,52.0h7.5v8h-7.5zM685.1,61.0h7.5v8h-7.5zM685.1,70.0h7.5v8h-7.5zM685.1,79.0h7.5v8h-7.5zM693.6,16.0h7.5v8h-7.5zM693.6,25.0h7.5v8h-7.5zM693.6,34.0h7.5v8h-7.5zM693.6,43.0h7.5v8h-7.5zM693.6,52.0h7.5v8h-7.5zM693.6,61.0h7.5v8h-7.5zM693.6,70.0h7.5v8h-7.5zM693.6,79.0h7.5v8h-7.5zM702.1,16.0h7.5v8h-7.5zM702.1,25.0h7.5v8h-7.5zM702.1,34.0h7.5v8h-7.5zM702.1,43.0h7.5v8h-7.5zM702.1,52.0h7.5v8h-7.5zM702.1,61.0h7.5v8h-7.5zM702.1,70.0h7.5v8h-7.5zM702.1,79.0h7.5v8h-7.5zM710.6,16.0h7.5v8h-7.5zM710.6,25.0h7.5v8h-7.5zM710.6,34.0h7.5v8h-7.5zM710.6,43.0h7.5v8h-7.5zM710.6,52.0h7.5v8h-7.5zM710.6,61.0h7.5v8h-7.5zM710.6,70.0h7.5v8h-7.5zM719.0,16.0h7.5v8h-7.5zM719.0,25.0h7.5v8h-7.5zM719.0,34.0h7.5v8h-7.5zM719.0,43.0h7.5v8h-7.5zM719.0,52.0h7.5v8h-7.5zM719.0,61.0h7.5v8h-7.5zM719.0,70.0h7.5v8h-7.5zM719.0,79.0h7.5v8h-7.5zM719.0,88.0h7.5v8h-7.5zM727.5,16.0h7.5v8h-7.5zM727.5,25.0h7.5v8h-7.5zM727.5,34.0h7.5v8h-7.5zM727.5,43.0h7.5v8h-7.5zM727.5,52.0h7.5v8h-7.5zM727.5,61.0h7.5v8h-7.5zM727.5,70.0h7.5v8h-7.5zM727.5,79.0h7.5v8h-7.5z" />
<path class="heat heat-1" d="M58.0,106.0h7.5v8h-7.5zM58.0,115.0h7.5v8h-7.5zM58.0,124.0h7.5v8h-7.5zM58.0,133.0h7.5v8h-7.5zM58.0,142.0h7.5v8h-7.5zM58.0,151.0h7.5v8h-7.5zM58.0,160.0h7.5v8h-7.5zM58.0,169.0h7.5v8h-7.5zM58.0,178.0h7.5v8h-7.5zM58.0,187.0h7.5v8h-7.5zM58.0,196.0h7.5v8h-7.5zM66.5,52.0h7.5v8h-7.5zM66.5,61.0h7.5v8h-7.5zM66.5,70.0h7.5v8h-7.5zM66.5,79.0h7.5v8h-7.5zM66.5,88.0h7.5v8h-7.5zM66.5,97.0h7.5v8h-7.5zM66.5,106.0h7.5v8h-7.5zM66.5,115.0h7.5v8h-7.5zM66.5,124.0h7.5v8h-7.5zM66.5,133.0h7.5v8h-7.5zM66.5,142.0h7.5v8h-7.5zM66.5,151.0h7.5v8h-7.5zM66.5,160.0h7.5v8h-7.5zM75.0,43.0h7.5v8h-7.5zM75.0,52.0h7.5v8h-7.5zM75.0,61.0h7.5v8h-7.5zM75.0,70.0h7.5v8h-7.5zM75.0,79.0h7.5v8h-7.5zM75.0,88.0h7.5v8h-7.5zM75.0,97.0h7.5v8h-7.5zM75.0,106.0h7.5v8h-7.5zM75.0,115.0h7.5v8h-7.5zM75.0,124.0h7.5v8h-7.5zM75.0,133.0h7.5v8h-7.5zM75.0,142.0h7.5v8h-7.5zM75.0,151.0h7.5v8h-7.5zM75.0,160.0h7.5v8h-7.5zM83.4,61.0h7.5v8h-7.5zM83.4,70.0h7.5v8h-7.5zM83.4,79.0h7.5v8h-7.5zM83.4,88.0h7.5v8h-7.5zM83.4,97.0h7.5v8h-7.5zM83.4,106.0h7.5v8h-7.5zM83.4,115.0h7.5v8h-7.5zM83.4,124.0h7.5v8h-7.5zM83.4,133.0h7.5v8h-7.5zM83.4,142.0h7.5v8h-7.5zM83.4,151.0h7.5v8h-7.5zM83.4,160.0h7.5v8h-7.5zM83.4,169.0h7.5v8h-7.5zM83.4,178.0h7.5v8h-7.5zM91.9,52.0h7.5v8h-7.5zM91.9,61.0h7.5v8h-7.5zM91.9,70.0h7.5v8h-7.5zM91.9,79.0h7.5v8h-7.5zM91.9,88.0h7.5v8h-7.5zM91.9,97.0h7.5v8h-7.5zM91.9,106.0h7.5v8h-7.5zM91.9,115.0h7.5v8h-7.5zM91.9,124.0h7.5v8h-7.5zM91.9,133.0h7.5v8h-7.5zM91.9,142.0h7.5v8h-7.5zM91.9,151.0h7.5v8h-7.5zM91.9,160.0h7.5v8h-7.5zM100.4,43.0h7.5v8h-7.5zM100.4,52.0h7.5v8h-7.5zM100.4,61.0h7.5v8h-7.5zM100.4,70.0h7.5v8h-7.5zM100.4,79.0h7.5v8h-7.5zM100.4,88.0h7.5v8h-7.5zM100.4,97.0h7.5v8h-7.5zM100.4,106.0h7.5v8h-7.5zM100.4,115.0h7.5v8h-7.5zM100.4,124.0h7.5v8h-7.5zM100.4,133.0h7.5v8h-7.5zM100.4,142.0h7.5v8h-7.5zM100.4,151.0h7.5v8h-7.5zM100.4,160.0h7.5v8h-7.5zM108.8,52.0h7.5v8h-7.5zM108.8,61.0h7.5v8h-7.5zM108.8,70.0h7.5v8h-7.5zM108.8,79.0h7.5v8h-7.5zM108.8,88.0h7.5v8h-7.5zM108.8,97.0h7.5v8h-7.5zM108.8,106.0h7.5v8h-7.5zM108.8,115.0h7.5v8h-7.5zM108.8,124.0h7.5v8h-7.5zM108.8,133.0h7.5v8h-7.5zM108.8,142.0h7.5v8h-7.5zM108.8,151.0h7.5v8h-7.5zM117.3,52.0h7.5v8h-7.5zM117.3,61.0h7.5v8h-7.5zM117.3,70.0h7.5v8h-7.5zM117.3,79.0h7.5v8h-7.5zM117.3,88.0h7.5v8h-7.5zM117.3,97.0h7.5v8h-7.5zM117.3,106.0h7.5v8h-7.5zM117.3,115.0h7.5v8h-7.5zM117.3,124.0h7.5v8h-7.5zM117.3,133.0h7.5v8h-7.5zM117.3,142.0h7.5v8h-7.5zM117.3,151.0h7.5v8h-7.5zM125.8,52.0h7.5v8h-7.5zM125.8,61.0h7.5v8h-7.5zM125.8,70.0h7.5v8h-7.5zM125.8,79.0h7.5v8h-7.5zM125.8,88.0h7.5v8h-7.5zM125.8,97.0h7.5v8h-7.5zM125.8,106.0h7.5v8h-7.5zM125.8,115.0h7.5v8h-7.5zM125.8,124.0h7.5v8h-7.5zM125.8,133.0h7.5v8h-7.5zM125.8,142.0h7.5v8h-7.5zM125.8,151.0h7.5v8h-7.5zM134.3,52.0h7.5v8h-7.5zM134.3,61.0h7.5v8h-7.5zM134.3,70.0h7.5v8h-7.5zM134.3,79.0h7.5v8h-7.5zM134.3,88.0h7.5v8h-7.5zM134.3,97.0h7.5v8h-7.5zM134.3,106.0h7.5v8h-7.5zM134.3,115.0h7.5v8h-7.5zM134.3,124.0h7.5v8h-7.5zM134.3,133.0h7.5v8h-7.5zM134.3,142.0h7.5v8h-7.5zM134.3,151.0h7.5v8h-7.5zM142.8,52.0h7.5v8h-7.5zM142.8,61.0h7.5v8h-7.5zM142.8,70.0h7.5v8h-7.5zM142.8,79.0h7.5v8h-7.5zM142.8,88.0h7.5v8h-7.5zM142.8,97.0h7.5v8h-7.5zM142.8,106.0h7.5v8h-7.5zM142.8,115.0h7.5v8h-7.5zM142.8,124.0h7.5v8h-7.5zM142.8,133.0h7.5v8h-7.5zM142.8,142.0h7.5v8h-7.5zM142.8,151.0h7.5v8h-7.5zM151.2,70.0h7.5v8h-7.5zM151.2,79.0h7.5v8h-7.5zM151.2,88.0h7.5v8h-7.5zM151.2,97.0h7.5v8h-7.5zM151.2,106.0h7.5v8h-7.5zM151.2,115.0h7.5v8h-7.5zM151.2,124.0h7.5v8h-7.5zM151.2,133.0h7.5v8h-7.5zM151.2,142.0h7.5v8h-7.5zM151.2,151.0h7.5v8h-7.5zM159.7,61.0h7.5v8h-7.5zM159.7,70.0h7.5v8h-7.5zM159.7,79.0h7.5v8h-7.5zM159.7,88.0h7.5v8h-7.5zM159.7,97.0h7.5v8h-7.5zM159.7,106.0h7.5v8h-7.5zM159.7,115.0h7.5v8h-7.5zM159.7,124.0h7.5v8h-7.5zM159.7,133.0h7.5v8h-7.5zM159.7,142.0h7.5v8h-7.5zM159.7,151.0h7.5v8h-7.5zM168.2,70.0h7.5v8h-7.5zM168.2,79.0h7.5v8h-7.5zM168.2,88.0h7.5v8h-7.5zM168.2,97.0h7.5v8h-7.5zM168.2,106.0h7.5v8h-7.5zM168.2,115.0h7.5v8h-7.5zM168.2,124.0h7.5v8h-7.5zM168.2,133.0h7.5v8h-7.5zM168.2,142.0h7.5v8h-7.5zM168.2,151.0h7.5v8h-7.5zM176.6,70.0h7.5v8h-7.5zM176.6,79.0h7.5v8h-7.5zM176.6,88.0h7.5v8h-7.5zM176.6,97.0h7.5v8h-7.5zM176.6,106.0h7.5v8h-7.5zM176.6,115.0h7.5v8h-7.5zM176.6,124.0h7.5v8h-7.5zM176.6,133.0h7.5v8h-7.5zM176.6,142.0h7.5v8h-7.5zM176.6,151.0h7.5v8h-7.5zM185.1,79.0h7.5v8h-7.5zM185.1,88.0h7.5v8h-7.5zM185.1,97.0h7.5v8h-7.5zM185.1,106.0h7.5v8h-7.5zM185.1,115.0h7.5v8h-7.5zM185.1,124.0h7.5v8h-7.5zM185.1,133.0h7.5v8h-7.5zM185.1,142.0h7.5v8h-7.5zM185.1,151.0h7.5v8h-7.5zM193.6,79.0h7.5v8h-7.5zM193.6,88.0h7.5v8h-7.5zM193.6,97.0h7.5v8h-7.5zM193.6,106.0h7.5v8h-7.5zM193.6,115.0h7.5v8h-7.5zM193.6,124.0h7.5v8h-7.5zM193.6,133.0h7.5v8h-7.5zM193.6,142.0h7.5v8h-7.5zM193.6,151.0h7.5v8h-7.5zM193.6,160.0h7.5v8h-7.5zM202.1,88.0h7.5v8h-7.5zM202.1,97.0h7.5v8h-7.5zM202.1,106.0h7.5v8h-7.5zM202.1,115.0h7.5v8h-7.5zM202.1,124.0h7.5v8h-7.5zM202.1,133.0h7.5v8h-7.5zM202.1,142.0h7.5v8h-7.5zM202.1,151.0h7.5v8h-7.5zM202.1,160.0h7.5v8h-7.5zM210.5,88.0h7.5v8h-7.5zM210.5,97.0h7.5v8h-7.5zM210.5,106.0h7.5v8h-7.5zM210.5,115.0h7.5v8h-7.5zM210.5,124.0h7.5v8h-7.5zM210.5,133.0h7.5v8h-7.5zM210.5,142.0h7.5v8h-7.5zM210.5,151.0h7.5v8h-7.5zM210.5,160.0h7.5v8h-7.5zM219.0,97.0h7.5v8h-7.5zM219.0,106.0h7.5v8h-7.5zM219.0,115.0h7.5v8h-7.5zM219.0,124.0h7.5v8h-7.5zM219.0,133.0h7.5v8h-7.5zM219.0,142.0h7.5v8h-7.5zM219.0,151.0h7.5v8h-7.5zM219.0,160.0h7.5v8h-7.5zM227.5,79.0h7.5v8h-7.5zM227.5,88.0h7.5v8h-7.5zM227.5,97.0h7.5v8h-7.5zM227.5,106.0h7.5v8h-7.5zM227.5,115.0h7.5v8h-7.5zM227.5,124.0h7.5v8h-7.5zM227.5,133.0h7.5v8h-7.5zM227.5,142.0h7.5v8h-7.5zM227.5,151.0h7.5v8h-7.5zM227.5,160.0h7.5v8h-7.5zM236.0,61.0h7.5v8h-7.5zM236.0,70.0h7.5v8h-7.5zM236.0,79.0h7.5v8h-7.5zM236.0,88.0h7.5v8h-7.5zM236.0,97.0h7.5v8h-7.5zM236.0,106.0h7.5v8h-7.5zM236.0,115.0h7.5v8h-7.5zM236.0,124.0h7.5v8h-7.5zM236.0,133.0h7.5v8h-7.5zM236.0,142.0h7.5v8h-7.5zM244.4,61.0h7.5v8h-7.5zM244.4,70.0h7.5v8h-7.5zM244.4,79.0h7.5v8h-7.5zM244.4,88.0h7.5v8h-7.5zM244.4,97.0h7.5v8h-7.5zM244.4,106.0h7.5v8h-7.5zM244.4,115.0h7.5v8h-7.5zM244.4,124.0h7.5v8h-7.5zM244.4,133.0h7.5v8h-7.5zM244.4,142.0h7.5v8h-7.5zM252.9,61.0h7.5v8h-7.5zM252.9,70.0h7.5v8h-7.5zM252.9,79.0h7.5v8h-7.5zM252.9,88.0h7.5v8h-7.5zM252.9,97.0h7.5v8h-7.5zM252.9,106.0h7.5v8h-7.5zM252.9,115.0h7.5v8h-7.5zM252.9,124.0h7.5v8h-7.5zM252.9,133.0h7.5v8h-7.5zM252.9,142.0h7.5v8h-7.5zM261.4,52.0h7.5v8h-7.5zM261.4,61.0h7.5v8h-7.5zM261.4,70.0h7.5v8h-7.5zM261.4,79.0h7.5v8h-7.5zM261.4,88.0h7.5v8h-7.5zM261.4,97.0h7.5v8h-7.5zM261.4,106.0h7.5v8h-7.5zM261.4,115.0h7.5v8h-7.5zM261.4,124.0h7.5v8h-7.5zM261.4,133.0h7.5v8h-7.5zM269.9,52.0h7.5v8h-7.5zM269.9,61.0h7.5v8h-7.5zM269.9,70.0h7.5v8h-7.5zM269.9,79.0h7.5v8h-7.5zM269.9,88.0h7.5v8h-7.5zM269.9,97.0h7.5v8h-7.5zM269.9,106.0h7.5v8h-7.5zM269.9,115.0h7.5v8h-7.5zM269.9,124.0h7.5v8h-7.5zM269.9,133.0h7.5v8h-7.5zM278.4,52.0h7.5v8h-7.5zM278.4,61.0h7.5v8h-7.5zM278.4,70.0h7.5v8h-7.5zM278.4,79.0h7.5v8h-7.5zM278.4,88.0h7.5v8h-7.5zM278.4,97.0h7.5v8h-7.5zM278.4,106.0h7.5v8h-7.5zM278.4,115.0h7.5v8h-7.5zM278.4,124.0h7.5v8h-7.5zM278.4,133.0h7.5v8h-7.5zM278.4,142.0h7.5v8h-7.5zM286.8,61.0h7.5v8h-7.5zM286.8,70.0h7.5v8h-7.5zM286.8,79.0h7.5v8h-7.5zM286.8,88.0h7.5v8h-7.5zM286.8,97.0h7.5v8h-7.5zM286.8,106.0h7.5v8h-7.5zM286.8,115.0h7.5v8h-7.5zM286.8,124.0h7.5v8h-7.5zM286.8,133.0h7.5v8h-7.5zM286.8,142.0h7.5v8h-7.5zM295.3,61.0h7.5v8h-7.5zM295.3,70.0h7.5v8h-7.5zM295.3,79.0h7.5v8h-7.5zM295.3,88.0h7.5v8h-7.5zM295.3,97.0h7.5v8h-7.5zM295.3,106.0h7.5v8h-7.5zM295.3,115.0h7.5v8h-7.5zM295.3,124.0h7.5v8h-7.5zM295.3,133.0h7.5v8h-7.5zM303.8,79.0h7.5v8h-7.5zM303.8,88.0h7.5v8h-7.5zM303.8,97.0h7.5v8h-7.5zM303.8,106.0h7.5v8h-7.5zM303.8,115.0h7.5v8h-7.5zM303.8,124.0h7.5v8h-7.5zM303.8,133.0h7.5v8h-7.5zM303.8,142.0h7.5v8h-7.5zM303.8,151.0h7.5v8h-7.5zM312.2,61.0h7.5v8h-7.5zM312.2,70.0h7.5v8h-7.5zM312.2,79.0h7.5v8h-7.5zM312.2,88.0h7.5v8h-7.5zM312.2,97.0h7.5v8h-7.5zM312.2,106.0h7.5v8h-7.5zM312.2,115.0h7.5v8h-7.5zM312.2,124.0h7.5v8h-7.5zM320.7,61.0h7.5v8h-7.5zM320.7,70.0h7.5v8h-7.5zM320.7,79.0h7.5v8h-7.5zM320.7,88.0h7.5v8h-7.5zM320.7,97.0h7.5v8h-7.5zM320.7,106.0h7.5v8h-7.5zM320.7,115.0h7.5v8h-7.5zM320.7,124.0h7.5v8h-7.5zM320.7,133.0h7.5v8h-7.5zM329.2,70.0h7.5v8h-7.5zM329.2,79.0h7.5v8h-7.5zM329.2,88.0h7.5v8h-7.5zM329.2,97.0h7.5v8h-7.5zM329.2,106.0h7.5v8h-7.5zM329.2,115.0h7.5v8h-7.5zM329.2,124.0h7.5v8h-7.5zM329.2,133.0h7.5v8h-7.5zM329.2,142.0h7.5v8h-7.5zM329.2,151.0h7.5v8h-7.5zM337.7,79.0h7.5v8h-7.5zM337.7,88.0h7.5v8h-7.5zM337.7,97.0h7.5v8h-7.5zM337.7,106.0h7.5v8h-7.5zM337.7,115.0h7.5v8h-7.5zM337.7,124.0h7.5v8h-7.5zM337.7,133.0h7.5v8h-7.5zM337.7,142.0h7.5v8h-7.5zM337.7,151.0h7.5v8h-7.5zM346.1,79.0h7.5v8h-7.5zM346.1,88.0h7.5v8h-7.5zM346.1,97.0h7.5v8h-7.5zM346.1,106.0h7.5v8h-7.5zM346.1,115.0h7.5v8h-7.5zM346.1,124.0h7.5v8h-7.5zM346.1,133.0h7.5v8h-7.5zM346.1,142.0h7.5v8h-7.5zM354.6,70.0h7.5v8h-7.5zM354.6,79.0h7.5v8h-7.5zM354.6,88.0h7.5v8h-7.5zM354.6,97.0h7.5v8h-7.5zM354.6,106.0h7.5v8h-7.5zM354.6,115.0h7.5v8h-7.5zM354.6,124.0h7.5v8h-7.5zM354.6,133.0h7.5v8h-7.5zM363.1,79.0h7.5v8h-7.5zM363.1,88.0h7.5v8h-7.5zM363.1,97.0h7.5v8h-7.5zM363.1,106.0h7.5v8h-7.5zM363.1,115.0h7.5v8h-7.5zM363.1,124.0h7.5v8h-7.5zM363.1,133.0h7.5v8h-7.5zM371.6,79.0h7.5v8h-7.5zM371.6,88.0h7.5v8h-7.5zM371.6,97.0h7.5v8h-7.5zM371.6,106.0h7.5v8h-7.5zM371.6,115.0h7.5v8h-7.5zM371.6,124.0h7.5v8h-7.5zM371.6,133.0h7.5v8h-7.5zM380.1,88.0h7.5v8h-7.5zM380.1,97.0h7.5v8h-7.5zM380.1,106.0h7.5v8h-7.5zM380.1,115.0h7.5v8h-7.5zM380.1,124.0h7.5v8h-7.5zM380.1,133.0h7.5v8h-7.5zM380.1,142.0h7.5v8h-7.5zM380.1,151.0h7.5v8h-7.5zM388.5,88.0h7.5v8h-7.5zM388.5,97.0h7.5v8h-7.5zM388.5,106.0h7.5v8h-7.5zM388.5,115.0h7.5v8h-7.5zM388.5,124.0h7.5v8h-7.5zM388.5,133.0h7.5v8h-7.5zM388.5,142.0h7.5v8h-7.5zM388.5,151.0h7.5v8h-7.5zM397.0,70.0h7.5v8h-7.5zM397.0,79.0h7.5v8h-7.5zM397.0,88.0h7.5v8h-7.5zM397.0,97.0h7.5v8h-7.5zM397.0,106.0h7.5v8h-7.5zM397.0,115.0h7.5v8h-7.5zM397.0,124.0h7.5v8h-7.5zM397.0,133.0h7.5v8h-7.5zM405.5,70.0h7.5v8h-7.5zM405.5,79.0h7.5v8h-7.5zM405.5,88.0h7.5v8h-7.5zM405.5,97.0h7.5v8h-7.5zM405.5,106.0h7.5v8h-7.5zM405.5,115.0h7.5v8h-7.5zM405.5,124.0h7.5v8h-7.5zM405.5,133.0h7.5v8h-7.5zM405.5,142.0h7.5v8h-7.5zM413.9,61.0h7.5v8h-7.5zM413.9,70.0h7.5v8h-7.5zM413.9,79.0h7.5v8h-7.5zM413.9,88.0h7.5v8h-7.5zM413.9,97.0h7.5v8h-7.5zM413.9,106.0h7.5v8h-7.5zM413.9,115.0h7.5v8h-7.5zM413.9,124.0h7.5v8h-7.5zM413.9,133.0h7.5v8h-7.5zM422.4,61.0h7.5v8h-7.5zM422.4,70.0h7.5v8h-7.5zM422.4,79.0h7.5v8h-7.5zM422.4,88.0h7.5v8h-7.5zM422.4,97.0h7.5v8h-7.5zM422.4,106.0h7.5v8h-7.5zM422.4,115.0h7.5v8h-7.5zM422.4,124.0h7.5v8h-7.5zM430.9,61.0h7.5v8h-7.5zM430.9,70.0h7.5v8h-7.5zM430.9,79.0h7.5v8h-7.5zM430.9,88.0h7.5v8h-7.5zM430.9,97.0h7.5v8h-7.5zM430.9,106.0h7.5v8h-7.5zM430.9,115.0h7.5v8h-7.5zM430.9,124.0h7.5v8h-7.5zM430.9,133.0h7.5v8h-7.5zM430.9,142.0h7.5v8h-7.5zM439.4,70.0h7.5v8h-7.5zM439.4,79.0h7.5v8h-7.5zM439.4,88.0h7.5v8h-7.5zM439.4,97.0h7.5v8h-7.5zM439.4,106.0h7.5v8h-7.5zM439.4,115.0h7.5v8h-7.5zM439.4,124.0h7.5v8h-7.5zM439.4,133.0h7.5v8h-7.5zM439.4,142.0h7.5v8h-7.5zM447.8,61.0h7.5v8h-7.5zM447.8,70.0h7.5v8h-7.5zM447.8,79.0h7.5v8h-7.5zM447.8,88.0h7.5v8h-7.5zM447.8,97.0h7.5v8h-7.5zM447.8,106.0h7.5v8h-7.5zM447.8,115.0h7.5v8h-7.5zM447.8,124.0h7.5v8h-7.5zM456.3,52.0h7.5v8h-7.5zM456.3,61.0h7.5v8h-7.5zM456.3,70.0h7.5v8h-7.5zM456.3,79.0h7.5v8h-7.5zM456.3,88.0h7.5v8h-7.5zM456.3,97.0h7.5v8h-7.5zM456.3,106.0h7.5v8h-7.5zM456.3,115.0h7.5v8h-7.5zM456.3,124.0h7.5v8h-7.5zM464.8,52.0h7.5v8h-7.5zM464.8,61.0h7.5v8h-7.5zM464.8,70.0h7.5v8h-7.5zM464.8,79.0h7.5v8h-7.5zM464.8,88.0h7.5v8h-7.5zM464.8,97.0h7.5v8h-7.5zM464.8,106.0h7.5v8h-7.5zM464.8,115.0h7.5v8h-7.5zM464.8,124.0h7.5v8h-7.5zM473.3,70.0h7.5v8h-7.5zM473.3,79.0h7.5v8h-7.5zM473.3,88.0h7.5v8h-7.5zM473.3,97.0h7.5v8h-7.5zM473.3,106.0h7.5v8h-7.5zM473.3,115.0h7.5v8h-7.5zM473.3,124.0h7.5v8h-7.5zM473.3,133.0h7.5v8h-7.5zM473.3,142.0h7.5v8h-7.5zM481.8,70.0h7.5v8h-7.5zM481.8,79.0h7.5v8h-7.5zM481.8,88.0h7.5v8h-7.5zM481.8,97.0h7.5v8h-7.5zM481.8,106.0h7.5v8h-7.5zM481.8,115.0h7.5v8h-7.5zM481.8,124.0h7.5v8h-7.5zM481.8,133.0h7.5v8h-7.5zM481.8,142.0h7.5v8h-7.5zM490.2,52.0h7.5v8h-7.5zM490.2,61.0h7.5v8h-7.5zM490.2,70.0h7.5v8h-7.5zM490.2,79.0h7.5v8h-7.5zM490.2,88.0h7.5v8h-7.5zM490.2,97.0h7.5v8h-7.5zM490.2,106.0h7.5v8h-7.5zM490.2,115.0h7.5v8h-7.5zM498.7,52.0h7.5v8h-7.5zM498.7,61.0h7.5v8h-7.5zM498.7,70.0h7.5v8h-7.5zM498.7,79.0h7.5v8h-7.5zM498.7,88.0h7.5v8h-7.5zM498.7,97.0h7.5v8h-7.5zM498.7,106.0h7.5v8h-7.5zM498.7,115.0h7.5v8h-7.5zM498.7,124.0h7.5v8h-7.5zM507.2,52.0h7.5v8h-7.5zM507.2,61.0h7.5v8h-7.5zM507.2,70.0h7.5v8h-7.5zM507.2,79.0h7.5v8h-7.5zM507.2,88.0h7.5v8h-7.5zM507.2,97.0h7.5v8h-7.5zM507.2,106.0h7.5v8h-7.5zM507.2,115.0h7.5v8h-7.5zM507.2,124.0h7.5v8h-7.5zM515.6,79.0h7.5v8h-7.5zM515.6,88.0h7.5v8h-7.5zM515.6,97.0h7.5v8h-7.5zM515.6,106.0h7.5v8h-7.5zM515.6,115.0h7.5v8h-7.5zM515.6,124.0h7.5v8h-7.5zM515.6,133.0h7.5v8h-7.5zM515.6,142.0h7.5v8h-7.5zM524.1,61.0h7.5v8h-7.5zM524.1,70.0h7.5v8h-7.5zM524.1,79.0h7.5v8h-7.5zM524.1,88.0h7.5v8h-7.5zM524.1,97.0h7.5v8h-7.5zM524.1,106.0h7.5v8h-7.5zM524.1,115.0h7.5v8h-7.5zM524.1,124.0h7.5v8h-7.5zM532.6,70.0h7.5v8h-7.5zM532.6,79.0h7.5v8h-7.5zM532.6,88.0h7.5v8h-7.5zM532.6,97.0h7.5v8h-7.5zM532.6,106.0h7.5v8h-7.5zM532.6,115.0h7.5v8h-7.5zM532.6,124.0h7.5v8h-7.5zM532.6,133.0h7.5v8h-7.5zM541.1,61.0h7.5v8h-7.5zM541.1,70.0h7.5v8h-7.5zM541.1,79.0h7.5v8h-7.5zM541.1,88.0h7.5v8h-7.5zM541.1,97.0h7.5v8h-7.5zM541.1,106.0h7.5v8h-7.5zM541.1,115.0h7.5v8h-7.5zM541.1,124.0h7.5v8h-7.5zM549.5,61.0h7.5v8h-7.5zM549.5,70.0h7.5v8h-7.5zM549.5,79.0h7.5v8h-7.5zM549.5,88.0h7.5v8h-7.5zM549.5,97.0h7.5v8h-7.5zM549.5,106.0h7.5v8h-7.5zM549.5,115.0h7.5v8h-7.5zM549.5,124.0h7.5v8h-7.5zM558.0,70.0h7.5v8h-7.5zM558.0,79.0h7.5v8h-7.5zM558.0,88.0h7.5v8h-7.5zM558.0,97.0h7.5v8h-7.5zM558.0,106.0h7.5v8h-7.5zM558.0,115.0h7.5v8h-7.5zM558.0,124.0h7.5v8h-7.5zM566.5,61.0h7.5v8h-7.5zM566.5,70.0h7.5v8h-7.5zM566.5,79.0h7.5v8h-7.5zM566.5,88.0h7.5v8h-7.5zM566.5,97.0h7.5v8h-7.5zM566.5,106.0h7.5v8h-7.5zM566.5,115.0h7.5v8h-7.5zM575.0,79.0h7.5v8h-7.5zM575.0,88.0h7.5v8h-7.5zM575.0,97.0h7.5v8h-7.5zM575.0,106.0h7.5v8h-7.5zM575.0,115.0h7.5v8h-7.5zM575.0,124.0h7.5v8h-7.5zM575.0,133.0h7.5v8h-7.5zM575.0,142.0h7.5v8h-7.5zM583.4,61.0h7.5v8h-7.5zM583.4,70.0h7.5v8h-7.5zM583.4,79.0h7.5v8h-7.5zM583.4,88.0h7.5v8h-7.5zM583.4,97.0h7.5v8h-7.5zM583.4,106.0h7.5v8h-7.5zM583.4,115.0h7.5v8h-7.5zM591.9,70.0h7.5v8h-7.5zM591.9,79.0h7.5v8h-7.5zM591.9,88.0h7.5v8h-7.5zM591.9,97.0h7.5v8h-7.5zM591.9,106.0h7.5v8h-7.5zM591.9,115.0h7.5v8h-7.5zM591.9,124.0h7.5v8h-7.5zM591.9,133.0h7.5v8h-7.5zM600.4,79.0h7.5v8h-7.5zM600.4,88.0h7.5v8h-7.5zM600.4,97.0h7.5v8h-7.5zM600.4,106.0h7.5v8h-7.5zM600.4,115.0h7.5v8h-7.5zM600.4,124.0h7.5v8h-7.5zM608.9,79.0h7.5v8h-7.5zM608.9,88.0h7.5v8h-7.5zM608.9,97.0h7.5v8h-7.5zM608.9,106.0h7.5v8h-7.5zM608.9,115.0h7.5v8h-7.5zM608.9,124.0h7.5v8h-7.5zM608.9,133.0h7.5v8h-7.5zM617.4,70.0h7.5v8h-7.5zM617.4,79.0h7.5v8h-7.5zM617.4,88.0h7.5v8h-7.5zM617.4,97.0h7.5v8h-7.5zM617.4,106.0h7.5v8h-7.5zM617.4,115.0h7.5v8h-7.5zM625.8,70.0h7.5v8h-7.5zM625.8,79.0h7.5v8h-7.5zM625.8,88.0h7.5v8h-7.5zM625.8,97.0h7.5v8h-7.5zM625.8,106.0h7.5v8h-7.5zM625.8,115.0h7.5v8h-7.5zM634.3,79.0h7.5v8h-7.5zM634.3,88.0h7.5v8h-7.5zM634.3,97.0h7.5v8h-7.5zM634.3,106.0h7.5v8h-7.5zM634.3,115.0h7.5v8h-7.5zM634.3,124.0h7.5v8h-7.5zM642.8,79.0h7.5v8h-7.5zM642.8,88.0h7.5v8h-7.5zM642.8,97.0h7.5v8h-7.5zM642.8,106.0h7.5v8h-7.5zM642.8,115.0h7.5v8h-7.5zM651.2,88.0h7.5v8h-7.5zM651.2,97.0h7.5v8h-7.5zM651.2,106.0h7.5v8h-7.5zM651.2,115.0h7.5v8h-7.5zM651.2,124.0h7.5v8h-7.5zM651.2,133.0h7.5v8h-7.5zM659.7,79.0h7.5v8h-7.5zM659.7,88.0h7.5v8h-7.5zM659.7,97.0h7.5v8h-7.5zM659.7,106.0h7.5v8h-7.5zM659.7,115.0h7.5v8h-7.5zM659.7,124.0h7.5v8h-7.5zM659.7,133.0h7.5v8h-7.5zM668.2,79.0h7.5v8h-7.5zM668.2,88.0h7.5v8h-7.5zM668.2,97.0h7.5v8h-7.5zM668.2,106.0h7.5v8h-7.5zM668.2,115.0h7.5v8h-7.5zM668.2,124.0h7.5v8h-7.5zM676.7,88.0h7.5v8h-7.5zM676.7,97.0h7.5v8h-7.5zM676.7,106.0h7.5v8h-7.5zM676.7,115.0h7.5v8h-7.5zM676.7,124.0h7.5v8h-7.5zM685.1,88.0h7.5v8h-7.5zM685.1,97.0h7.5v8h-7.5zM685.1,106.0h7.5v8h-7.5zM685.1,115.0h7.5v8h-7.5zM685.1,124.0h7.5v8h-7.5zM685.1,133.0h7.5v8h-7.5zM685.1,142.0h7.5v8h-7.5zM693.6,88.0h7.5v8h-7.5zM693.6,97.0h7.5v8h-7.5zM693.6,106.0h7.5v8h-7.5zM693.6,115.0h7.5v8h-7.5zM693.6,124.0h7.5v8h-7.5zM702.1,88.0h7.5v8h-7.5zM702.1,97.0h7.5v8h-7.5zM702.1,106.0h7.5v8h-7.5zM702.1,115.0h7.5v8h-7.5zM702.1,124.0h7.5v8h-7.5zM702.1,133.0h7.5v8h-7.5zM702.1,142.0h7.5v8h-7.5zM702.1,151.0h7.5v8h-7.5zM710.6,79.0h7.5v8h-7.5zM710.6,88.0h7.5v8h-7.5zM710.6,97.0h7.5v8h-7.5zM710.6,106.0h7.5v8h-7.5zM710.6,115.0h7.5v8h-7.5zM710.6,124.0h7.5v8h-7.5zM719.0,97.0h7.5v8h-7.5zM719.0,106.0h7.5v8h-7.5zM719.0,115.0h7.5v8h-7.5zM719.0,124.0h7.5v8h-7.5zM719.0,133.0h7.5v8h-7.5zM719.0,142.0h7.5v8h-7.5zM727.5,88.0h7.5v8h-7.5zM727.5,97.0h7.5v8h-7.5zM727.5,106.0h7.5v8h-7.5zM727.5,115.0h7.5v8h-7.5zM727.5,124.0h7.5v8h-7.5z" />
<path class="heat heat-2" d="M58.0,205.0h7.5v8h-7.5zM58.0,214.0h7.5v8h-7.5zM58.0,223.0h7.5v8h-7.5zM66.5,169.0h7.5v8h-7.5zM66.5,178.0h7.5v8h-7.5zM66.5,187.0h7.5v8h-7.5zM66.5,196.0h7.5v8h-7.5zM66.5,205.0h7.5v8h-7.5zM66.5,214.0h7.5v8h-7.5zM75.0,169.0h7.5v8h-7.5zM75.0,178.0h7.5v8h-7.5zM75.0,187.0h7.5v8h-7.5zM75.0,196.0h7.5v8h-7.5zM75.0,205.0h7.5v8h-7.5zM75.0,214.0h7.5v8h-7.5zM83.4,187.0h7.5v8h-7.5zM83.4,196.0h7.5v8h-7.5zM83.4,205.0h7.5v8h-7.5zM83.4,214.0h7.5v8h-7.5zM91.9,169.0h7.5v8h-7.5zM91.9,178.0h7.5v8h-7.5zM91.9,187.0h7.5v8h-7.5zM91.9,196.0h7.5v8h-7.5zM91.9,205.0h7.5v8h-7.5zM100.4,169.0h7.5v8h-7.5zM100.4,178.0h7.5v8h-7.5zM100.4,187.0h7.5v8h-7.5zM100.4,196.0h7.5v8h-7.5zM100.4,205.0h7.5v8h-7.5zM108.8,160.0h7.5v8h-7.5zM108.8,169.0h7.5v8h-7.5zM108.8,178.0h7.5v8h-7.5zM108.8,187.0h7.5v8h-7.5zM108.8,196.0h7.5v8h-7.5zM108.8,205.0h7.5v8h-7.5zM117.3,160.0h7.5v8h-7.5zM117.3,169.0h7.5v8h-7.5zM117.3,178.0h7.5v8h-7.5zM117.3,187.0h7.5v8h-7.5zM117.3,196.0h7.5v8h-7.5zM125.8,160.0h7.5v8h-7.5zM125.8,169.0h7.5v8h-7.5zM125.8,178.0h7.5v8h-7.5zM125.8,187.0h7.5v8h-7.5zM125.8,196.0h7.5v8h-7.5zM134.3,160.0h7.5v8h-7.5zM134.3,169.0h7.5v8h-7.5zM134.3,178.0h7.5v8h-7.5zM134.3,187.0h7.5v8h-7.5zM134.3,196.0h7.5v8h-7.5zM142.8,160.0h7.5v8h-7.5zM142.8,169.0h7.5v8h-7.5zM142.8,178.0h7.5v8h-7.5zM142.8,187.0h7.5v8h-7.5zM142.8,196.0h7.5v8h-7.5zM151.2,160.0h7.5v8h-7.5zM151.2,169.0h7.5v8h-7.5zM151.2,178.0h7.5v8h-7.5zM151.2,187.0h7.5v8h-7.5zM151.2,196.0h7.5v8h-7.5zM159.7,160.0h7.5v8h-7.5zM159.7,169.0h7.5v8h-7.5zM159.7,178.0h7.5v8h-7.5zM159.7,187.0h7.5v8h-7.5zM159.7,196.0h7.5v8h-7.5zM168.2,160.0h7.5v8h-7.5zM168.2,169.0h7.5v8h-7.5zM168.2,178.0h7.5v8h-7.5zM168.2,187.0h7.5v8h-7.5zM168.2,196.0h7.5v8h-7.5zM176.6,160.0h7.5v8h-7.5zM176.6,169.0h7.5v8h-7.5zM176.6,178.0h7.5v8h-7.5zM176.6,187.0h7.5v8h-7.5zM176.6,196.0h7.5v8h-7.5zM185.1,160.0h7.5v8h-7.5zM185.1,169.0h7.5v8h-7.5zM185.1,178.0h7.5v8h-7.5zM185.1,187.0h7.5v8h-7.5zM185.1,196.0h7.5v8h-7.5zM193.6,169.0h7.5v8h-7.5zM193.6,178.0h7.5v8h-7.5zM193.6,187.0h7.5v8h-7.5zM193.6,196.0h7.5v8h-7.5zM202.1,169.0h7.5v8h-7.5zM202.1,178.0h7.5v8h-7.5zM202.1,187.0h7.5v8h-7.5zM202.1,196.0h7.5v8h-7.5zM210.5,169.0h7.5v8h-7.5zM210.5,178.0h7.5v8h-7.5zM210.5,187.0h7.5v8h-7.5zM210.5,196.0h7.5v8h-7.5zM219.0,169.0h7.5v8h-7.5zM219.0,178.0h7.5v8h-7.5zM219.0,187.0h7.5v8h-7.5zM219.0,196.0h7.5v8h-7.5zM227.5,169.0h7.5v8h-7.5zM227.5,178.0h7.5v8h-7.5zM227.5,187.0h7.5v8h-7.5zM227.5,196.0h7.5v8h-7.5zM236.0,151.0h7.5v8h-7.5zM236.0,160.0h7.5v8h-7.5zM236.0,169.0h7.5v8h-7.5zM236.0,178.0h7.5v8h-7.5zM236.0,187.0h7.5v8h-7.5zM244.4,151.0h7.5v8h-7.5zM244.4,160.0h7.5v8h-7.5zM244.4,169.0h7.5v8h-7.5zM244.4,178.0h7.5v8h-7.5zM244.4,187.0h7.5v8h-7.5zM252.9,151.0h7.5v8h-7.5zM252.9,160.0h7.5v8h-7.5zM252.9,169.0h7.5v8h-7.5zM252.9,178.0h7.5v8h-7.5zM252.9,187.0h7.5v8h-7.5zM261.4,142.0h7.5v8h-7.5zM261.4,151.0h7.5v8h-7.5zM261.4,160.0h7.5v8h-7.5zM261.4,169.0h7.5v8h-7.5zM261.4,178.0h7.5v8h-7.5zM269.9,142.0h7.5v8h-7.5zM269.9,151.0h7.5v8h-7.5zM269.9,160.0h7.5v8h-7.5zM269.9,169.0h7.5v8h-7.5zM269.9,178.0h7.5v8h-7.5zM278.4,151.0h7.5v8h-7.5zM278.4,160.0h7.5v8h-7.5zM278.4,169.0h7.5v8h-7.5zM278.4,178.0h7.5v8h-7.5zM286.8,151.0h7.5v8h-7.5zM286.8,160.0h7.5v8h-7.5zM286.8,169.0h7.5v8h-7.5zM286.8,178.0h7.5v8h-7.5zM295.3,142.0h7.5v8h-7.5zM295.3,151.0h7.5v8h-7.5zM295.3,160.0h7.5v8h-7.5zM295.3,169.0h7.5v8h-7.5zM295.3,178.0h7.5v8h-7.5zM303.8,160.0h7.5v8h-7.5zM303.8,169.0h7.5v8h-7.5zM303.8,178.0h7.5v8h-7.5zM303.8,187.0h7.5v8h-7.5zM312.2,133.0h7.5v8h-7.5zM312.2,142.0h7.5v8h-7.5zM312.2,151.0h7.5v8h-7.5zM312.2,160.0h7.5v8h-7.5zM312.2,169.0h7.5v8h-7.5zM312.2,178.0h7.5v8h-7.5zM320.7,142.0h7.5v8h-7.5zM320.7,151.0h7.5v8h-7.5zM320.7,160.0h7.5v8h-7.5zM320.7,169.0h7.5v8h-7.5zM320.7,178.0h7.5v8h-7.5zM329.2,160.0h7.5v8h-7.5zM329.2,169.0h7.5v8h-7.5zM329.2,178.0h7.5v8h-7.5zM329.2,187.0h7.5v8h-7.5zM337.7,160.0h7.5v8h-7.5zM337.7,169.0h7.5v8h-7.5zM337.7,178.0h7.5v8h-7.5zM337.7,187.0h7.5v8h-7.5zM346.1,151.0h7.5v8h-7.5zM346.1,160.0h7.5v8h-7.5zM346.1,169.0h7.5v8h-7.5zM346.1,178.0h7.5v8h-7.5zM346.1,187.0h7.5v8h-7.5zM354.6,142.0h7.5v8h-7.5zM354.6,151.0h7.5v8h-7.5zM354.6,160.0h7.5v8h-7.5zM354.6,169.0h7.5v8h-7.5zM354.6,178.0h7.5v8h-7.5zM363.1,142.0h7.5v8h-7.5zM363.1,151.0h7.5v8h-7.5zM363.1,160.0h7.5v8h-7.5zM363.1,169.0h7.5v8h-7.5zM363.1,178.0h7.5v8h-7.5zM371.6,142.0h7.5v8h-7.5zM371.6,151.0h7.5v8h-7.5zM371.6,160.0h7.5v8h-7.5zM371.6,169.0h7.5v8h-7.5zM371.6,178.0h7.5v8h-7.5zM380.1,160.0h7.5v8h-7.5zM380.1,169.0h7.5v8h-7.5zM380.1,178.0h7.5v8h-7.5zM380.1,187.0h7.5v8h-7.5zM388.5,160.0h7.5v8h-7.5zM388.5,169.0h7.5v8h-7.5zM388.5,178.0h7.5v8h-7.5zM388.5,187.0h7.5v8h-7.5zM397.0,142.0h7.5v8h-7.5zM397.0,151.0h7.5v8h-7.5zM397.0,160.0h7.5v8h-7.5zM397.0,169.0h7.5v8h-7.5zM397.0,178.0h7.5v8h-7.5zM405.5,151.0h7.5v8h-7.5zM405.5,160.0h7.5v8h-7.5zM405.5,169.0h7.5v8h-7.5zM405.5,178.0h7.5v8h-7.5zM413.9,142.0h7.5v8h-7.5zM413.9,151.0h7.5v8h-7.5zM413.9,160.0h7.5v8h-7.5zM413.9,169.0h7.5v8h-7.5zM413.9,178.0h7.5v8h-7.5zM422.4,133.0h7.5v8h-7.5zM422.4,142.0h7.5v8h-7.5zM422.4,151.0h7.5v8h-7.5zM422.4,160.0h7.5v8h-7.5zM422.4,169.0h7.5v8h-7.5zM430.9,151.0h7.5v8h-7.5zM430.9,160.0h7.5v8h-7.5zM430.9,169.0h7.5v8h-7.5zM430.9,178.0h7.5v8h-7.5zM439.4,151.0h7.5v8h-7.5zM439.4,160.0h7.5v8h-7.5zM439.4,169.0h7.5v8h-7.5zM439.4,178.0h7.5v8h-7.5zM447.8,133.0h7.5v8h-7.5zM447.8,142.0h7.5v8h-7.5zM447.8,151.0h7.5v8h-7.5zM447.8,160.0h7.5v8h-7.5zM447.8,169.0h7.5v8h-7.5zM456.3,133.0h7.5v8h-7.5zM456.3,142.0h7.5v8h-7.5zM456.3,151.0h7.5v8h-7.5zM456.3,160.0h7.5v8h-7.5zM456.3,169.0h7.5v8h-7.5zM464.8,133.0h7.5v8h-7.5zM464.8,142.0h7.5v8h-7.5zM464.8,151.0h7.5v8h-7.5zM464.8,160.0h7.5v8h-7.5zM473.3,151.0h7.5v8h-7.5zM473.3,160.0h7.5v8h-7.5zM473.3,169.0h7.5v8h-7.5zM473.3,178.0h7.5v8h-7.5zM481.8,151.0h7.5v8h-7.5zM481.8,160.0h7.5v8h-7.5zM481.8,169.0h7.5v8h-7.5zM481.8,178.0h7.5v8h-7.5zM490.2,124.0h7.5v8h-7.5zM490.2,133.0h7.5v8h-7.5zM490.2,142.0h7.5v8h-7.5zM490.2,151.0h7.5v8h-7.5zM498.7,133.0h7.5v8h-7.5zM498.7,142.0h7.5v8h-7.5zM498.7,151.0h7.5v8h-7.5zM498.7,160.0h7.5v8h-7.5zM507.2,133.0h7.5v8h-7.5zM507.2,142.0h7.5v8h-7.5zM507.2,151.0h7.5v8h-7.5zM507.2,160.0h7.5v8h-7.5zM515.6,151.0h7.5v8h-7.5zM515.6,160.0h7.5v8h-7.5zM515.6,169.0h7.5v8h-7.5zM515.6,178.0h7.5v8h-7.5zM524.1,133.0h7.5v8h-7.5zM524.1,142.0h7.5v8h-7.5zM524.1,151.0h7.5v8h-7.5zM524.1,160.0h7.5v8h-7.5zM532.6,142.0h7.5v8h-7.5zM532.6,151.0h7.5v8h-7.5zM532.6,160.0h7.5v8h-7.5zM532.6,169.0h7.5v8h-7.5zM541.1,133.0h7.5v8h-7.5zM541.1,142.0h7.5v8h-7.5zM541.1,151.0h7.5v8h-7.5zM541.1,160.0h7.5v8h-7.5zM549.5,133.0h7.5v8h-7.5zM549.5,142.0h7.5v8h-7.5zM549.5,151.0h7.5v8h-7.5zM549.5,160.0h7.5v8h-7.5zM558.0,133.0h7.5v8h-7.5zM558.0,142.0h7.5v8h-7.5zM558.0,151.0h7.5v8h-7.5zM558.0,160.0h7.5v8h-7.5zM566.5,124.0h7.5v8h-7.5zM566.5,133.0h7.5v8h-7.5zM566.5,142.0h7.5v8h-7.5zM566.5,151.0h7.5v8h-7.5zM575.0,151.0h7.5v8h-7.5zM575.0,160.0h7.5v8h-7.5zM575.0,169.0h7.5v8h-7.5zM575.0,178.0h7.5v8h-7.5zM583.4,124.0h7.5v8h-7.5zM583.4,133.0h7.5v8h-7.5zM591.9,142.0h7.5v8h-7.5zM591.9,151.0h7.5v8h-7.5zM591.9,160.0h7.5v8h-7.5zM591.9,169.0h7.5v8h-7.5zM591.9,178.0h7.5v8h-7.5zM600.4,133.0h7.5v8h-7.5zM600.4,142.0h7.5v8h-7.5zM600.4,151.0h7.5v8h-7.5zM600.4,160.0h7.5v8h-7.5zM608.9,142.0h7.5v8h-7.5zM608.9,151.0h7.5v8h-7.5zM608.9,160.0h7.5v8h-7.5zM608.9,169.0h7.5v8h-7.5zM617.4,124.0h7.5v8h-7.5zM617.4,133.0h7.5v8h-7.5zM625.8,124.0h7.5v8h-7.5zM625.8,133.0h7.5v8h-7.5zM625.8,142.0h7.5v8h-7.5zM634.3,133.0h7.5v8h-7.5zM634.3,142.0h7.5v8h-7.5zM634.3,151.0h7.5v8h-7.5zM634.3,160.0h7.5v8h-7.5zM642.8,124.0h7.5v8h-7.5zM642.8,133.0h7.5v8h-7.5zM642.8,142.0h7.5v8h-7.5zM642.8,151.0h7.5v8h-7.5zM651.2,142.0h7.5v8h-7.5zM651.2,151.0h7.5v8h-7.5zM651.2,160.0h7.5v8h-7.5zM651.2,169.0h7.5v8h-7.5zM659.7,142.0h7.5v8h-7.5zM659.7,151.0h7.5v8h-7.5zM659.7,160.0h7.5v8h-7.5zM659.7,169.0h7.5v8h-7.5zM659.7,178.0h7.5v8h-7.5zM668.2,133.0h7.5v8h-7.5zM668.2,142.0h7.5v8h-7.5zM668.2,151.0h7.5v8h-7.5zM668.2,160.0h7.5v8h-7.5zM668.2,169.0h7.5v8h-7.5zM676.7,133.0h7.5v8h-7.5zM676.7,142.0h7.5v8h-7.5zM676.7,151.0h7.5v8h-7.5zM676.7,160.0h7.5v8h-7.5zM685.1,151.0h7.5v8h-7.5zM685.1,160.0h7.5v8h-7.5zM685.1,169.0h7.5v8h-7.5zM685.1,178.0h7.5v8h-7.5zM693.6,133.0h7.5v8h-7.5zM693.6,142.0h7.5v8h-7.5zM693.6,151.0h7.5v8h-7.5zM693.6,160.0h7.5v8h-7.5zM702.1,160.0h7.5v8h-7.5zM702.1,169.0h7.5v8h-7.5zM702.1,178.0h7.5v8h-7.5zM710.6,133.0h7.5v8h-7.5zM710.6,142.0h7.5v8h-7.5zM710.6,151.0h7.5v8h-7.5zM719.0,151.0h7.5v8h-7.5zM719.0,160.0h7.5v8h-7.5zM719.0,169.0h7.5v8h-7.5zM719.0,178.0h7.5v8h-7.5zM727.5,133.0h7.5v8h-7.5zM727.5,142.0h7.5v8h-7.5zM727.5,151.0h7.5v8h-7.5zM727.5,160.0h7.5v8h-7.5zM727.5,169.0h7.5v8h-7.5z" />
<path class="heat heat-3" d="M66.5,223.0h7.5v8h-7.5zM75.0,223.0h7.5v8h-7.5zM83.4,223.0h7.5v8h-7.5zM91.9,214.0h7.5v8h-7.5zM91.9,223.0h7.5v8h-7.5zM100.4,214.0h7.5v8h-7.5zM108.8,214.0h7.5v8h-7.5zM117.3,205.0h7.5v8h-7.5zM117.3,214.0h7.5v8h-7.5zM125.8,205.0h7.5v8h-7.5zM125.8,214.0h7.5v8h-7.5zM134.3,205.0h7.5v8h-7.5zM134.3,214.0h7.5v8h-7.5zM142.8,205.0h7.5v8h-7.5zM142.8,214.0h7.5v8h-7.5zM151.2,205.0h7.5v8h-7.5zM151.2,214.0h7.5v8h-7.5zM159.7,205.0h7.5v8h-7.5zM159.7,214.0h7.5v8h-7.5zM168.2,205.0h7.5v8h-7.5zM168.2,214.0h7.5v8h-7.5zM176.6,205.0h7.5v8h-7.5zM176.6,214.0h7.5v8h-7.5zM185.1,205.0h7.5v8h-7.5zM193.6,205.0h7.5v8h-7.5zM193.6,214.0h7.5v8h-7.5zM202.1,205.0h7.5v8h-7.5zM202.1,214.0h7.5v8h-7.5zM210.5,205.0h7.5v8h-7.5zM210.5,214.0h7.5v8h-7.5zM219.0,205.0h7.5v8h-7.5zM219.0,214.0h7.5v8h-7.5zM227.5,205.0h7.5v8h-7.5zM227.5,214.0h7.5v8h-7.5zM236.0,196.0h7.5v8h-7.5zM236.0,205.0h7.5v8h-7.5zM244.4,196.0h7.5v8h-7.5zM244.4,205.0h7.5v8h-7.5zM252.9,196.0h7.5v8h-7.5zM252.9,205.0h7.5v8h-7.5zM261.4,187.0h7.5v8h-7.5zM261.4,196.0h7.5v8h-7.5zM261.4,205.0h7.5v8h-7.5zM269.9,187.0h7.5v8h-7.5zM269.9,196.0h7.5v8h-7.5zM269.9,205.0h7.5v8h-7.5zM278.4,187.0h7.5v8h-7.5zM278.4,196.0h7.5v8h-7.5zM278.4,205.0h7.5v8h-7.5zM286.8,187.0h7.5v8h-7.5zM286.8,196.0h7.5v8h-7.5zM286.8,205.0h7.5v8h-7.5zM295.3,187.0h7.5v8h-7.5zM295.3,196.0h7.5v8h-7.5zM303.8,196.0h7.5v8h-7.5zM303.8,205.0h7.5v8h-7.5zM312.2,187.0h7.5v8h-7.5zM312.2,196.0h7.5v8h-7.5zM312.2,205.0h7.5v8h-7.5zM320.7,187.0h7.5v8h-7.5zM320.7,196.0h7.5v8h-7.5zM320.7,205.0h7.5v8h-7.5zM329.2,196.0h7.5v8h-7.5zM329.2,205.0h7.5v8h-7.5zM337.7,196.0h7.5v8h-7.5zM337.7,205.0h7.5v8h-7.5zM346.1,196.0h7.5v8h-7.5zM346.1,205.0h7.5v8h-7.5zM354.6,187.0h7.5v8h-7.5zM354.6,196.0h7.5v8h-7.5zM354.6,205.0h7.5v8h-7.5zM363.1,187.0h7.5v8h-7.5zM363.1,196.0h7.5v8h-7.5zM363.1,205.0h7.5v8h-7.5zM371.6,187.0h7.5v8h-7.5zM371.6,196.0h7.5v8h-7.5zM371.6,205.0h7.5v8h-7.5zM380.1,196.0h7.5v8h-7.5zM380.1,205.0h7.5v8h-7.5zM388.5,196.0h7.5v8h-7.5zM388.5,205.0h7.5v8h-7.5zM397.0,187.0h7.5v8h-7.5zM397.0,196.0h7.5v8h-7.5zM397.0,205.0h7.5v8h-7.5zM405.5,187.0h7.5v8h-7.5zM405.5,196.0h7.5v8h-7.5zM405.5,205.0h7.5v8h-7.5zM413.9,187.0h7.5v8h-7.5zM413.9,196.0h7.5v8h-7.5zM413.9,205.0h7.5v8h-7.5zM422.4,178.0h7.5v8h-7.5zM422.4,187.0h7.5v8h-7.5zM422.4,196.0h7.5v8h-7.5zM430.9,187.0h7.5v8h-7.5zM430.9,196.0h7.5v8h-7.5zM430.9,205.0h7.5v8h-7.5zM439.4,187.0h7.5v8h-7.5zM439.4,196.0h7.5v8h-7.5zM439.4,205.0h7.5v8h-7.5zM447.8,178.0h7.5v8h-7.5zM447.8,187.0h7.5v8h-7.5zM447.8,196.0h7.5v8h-7.5zM456.3,178.0h7.5v8h-7.5zM456.3,187.0h7.5v8h-7.5zM456.3,196.0h7.5v8h-7.5zM464.8,169.0h7.5v8h-7.5zM464.8,178.0h7.5v8h-7.5zM464.8,187.0h7.5v8h-7.5zM464.8,196.0h7.5v8h-7.5zM473.3,187.0h7.5v8h-7.5zM473.3,196.0h7.5v8h-7.5zM481.8,187.0h7.5v8h-7.5zM481.8,196.0h7.5v8h-7.5zM490.2,160.0h7.5v8h-7.5zM490.2,169.0h7.5v8h-7.5zM490.2,178.0h7.5v8h-7.5zM490.2,187.0h7.5v8h-7.5zM498.7,169.0h7.5v8h-7.5zM498.7,178.0h7.5v8h-7.5zM498.7,187.0h7.5v8h-7.5zM498.7,196.0h7.5v8h-7.5zM507.2,169.0h7.5v8h-7.5zM507.2,178.0h7.5v8h-7.5zM507.2,187.0h7.5v8h-7.5zM515.6,187.0h7.5v8h-7.5zM515.6,196.0h7.5v8h-7.5zM524.1,169.0h7.5v8h-7.5zM524.1,178.0h7.5v8h-7.5zM524.1,187.0h7.5v8h-7.5zM532.6,178.0h7.5v8h-7.5zM532.6,187.0h7.5v8h-7.5zM532.6,196.0h7.5v8h-7.5zM541.1,169.0h7.5v8h-7.5zM541.1,178.0h7.5v8h-7.5zM541.1,187.0h7.5v8h-7.5zM541.1,196.0h7.5v8h-7.5zM549.5,169.0h7.5v8h-7.5zM549.5,178.0h7.5v8h-7.5zM549.5,187.0h7.5v8h-7.5zM549.5,196.0h7.5v8h-7.5zM558.0,169.0h7.5v8h-7.5zM558.0,178.0h7.5v8h-7.5zM558.0,187.0h7.5v8h-7.5zM566.5,160.0h7.5v8h-7.5zM566.5,169.0h7.5v8h-7.5zM566.5,178.0h7.5v8h-7.5zM566.5,187.0h7.5v8h-7.5zM575.0,187.0h7.5v8h-7.5zM575.0,196.0h7.5v8h-7.5zM583.4,142.0h7.5v8h-7.5zM583.4,151.0h7.5v8h-7.5zM583.4,160.0h7.5v8h-7.5zM583.4,169.0h7.5v8h-7.5zM583.4,178.0h7.5v8h-7.5zM583.4,187.0h7.5v8h-7.5zM591.9,187.0h7.5v8h-7.5zM591.9,196.0h7.5v8h-7.5zM600.4,169.0h7.5v8h-7.5zM600.4,178.0h7.5v8h-7.5zM600.4,187.0h7.5v8h-7.5zM600.4,196.0h7.5v8h-7.5zM608.9,178.0h7.5v8h-7.5zM608.9,187.0h7.5v8h-7.5zM608.9,196.0h7.5v8h-7.5zM617.4,142.0h7.5v8h-7.5zM617.4,151.0h7.5v8h-7.5zM617.4,160.0h7.5v8h-7.5zM617.4,169.0h7.5v8h-7.5zM617.4,178.0h7.5v8h-7.5zM625.8,151.0h7.5v8h-7.5zM625.8,160.0h7.5v8h-7.5zM625.8,169.0h7.5v8h-7.5zM625.8,178.0h7.5v8h-7.5zM625.8,187.0h7.5v8h-7.5zM634.3,169.0h7.5v8h-7.5zM634.3,178.0h7.5v8h-7.5zM634.3,187.0h7.5v8h-7.5zM634.3,196.0h7.5v8h-7.5zM642.8,160.0h7.5v8h-7.5zM642.8,169.0h7.5v8h-7.5zM642.8,178.0h7.5v8h-7.5zM642.8,187.0h7.5v8h-7.5zM651.2,178.0h7.5v8h-7.5zM651.2,187.0h7.5v8h-7.5zM651.2,196.0h7.5v8h-7.5zM659.7,187.0h7.5v8h-7.5zM659.7,196.0h7.5v8h-7.5zM668.2,178.0h7.5v8h-7.5zM668.2,187.0h7.5v8h-7.5zM668.2,196.0h7.5v8h-7.5zM676.7,169.0h7.5v8h-7.5zM676.7,178.0h7.5v8h-7.5zM676.7,187.0h7.5v8h-7.5zM676.7,196.0h7.5v8h-7.5zM685.1,187.0h7.5v8h-7.5zM685.1,196.0h7.5v8h-7.5zM685.1,205.0h7.5v8h-7.5zM693.6,169.0h7.5v8h-7.5zM693.6,178.0h7.5v8h-7.5zM693.6,187.0h7.5v8h-7.5zM693.6,196.0h7.5v8h-7.5zM702.1,187.0h7.5v8h-7.5zM702.1,196.0h7.5v8h-7.5zM702.1,205.0h7.5v8h-7.5zM710.6,160.0h7.5v8h-7.5zM710.6,169.0h7.5v8h-7.5zM710.6,178.0h7.5v8h-7.5zM710.6,187.0h7.5v8h-7.5zM719.0,187.0h7.5v8h-7.5zM719.0,196.0h7.5v8h-7.5zM719.0,205.0h7.5v8h-7.5zM727.5,178.0h7.5v8h-7.5zM727.5,187.0h7.5v8h-7.5zM727.5,196.0h7.5v8h-7.5z" />
<path class="heat heat-4" d="M100.4,223.0h7.5v8h-7.5zM108.8,223.0h7.5v8h-7.5zM117.3,223.0h7.5v8h-7.5zM125.8,223.0h7.5v8h-7.5zM134.3,223.0h7.5v8h-7.5zM142.8,223.0h7.5v8h-7.5zM151.2,223.0h7.5v8h-7.5zM159.7,223.0h7.5v8h-7.5zM168.2,223.0h7.5v8h-7.5zM176.6,223.0h7.5v8h-7.5zM185.1,214.0h7.5v8h-7.5zM193.6,223.0h7.5v8h-7.5zM202.1,223.0h7.5v8h-7.5zM210.5,223.0h7.5v8h-7.5zM219.0,223.0h7.5v8h-7.5zM227.5,223.0h7.5v8h-7.5zM236.0,214.0h7.5v8h-7.5zM244.4,214.0h7.5v8h-7.5zM252.9,214.0h7.5v8h-7.5zM261.4,214.0h7.5v8h-7.5zM269.9,214.0h7.5v8h-7.5zM278.4,214.0h7.5v8h-7.5zM286.8,214.0h7.5v8h-7.5zM295.3,205.0h7.5v8h-7.5zM295.3,214.0h7.5v8h-7.5zM303.8,214.0h7.5v8h-7.5zM312.2,214.0h7.5v8h-7.5zM320.7,214.0h7.5v8h-7.5zM329.2,214.0h7.5v8h-7.5zM337.7,214.0h7.5v8h-7.5zM346.1,214.0h7.5v8h-7.5zM354.6,214.0h7.5v8h-7.5zM363.1,214.0h7.5v8h-7.5zM371.6,214.0h7.5v8h-7.5zM380.1,214.0h7.5v8h-7.5zM388.5,214.0h7.5v8h-7.5zM397.0,214.0h7.5v8h-7.5zM405.5,214.0h7.5v8h-7.5zM413.9,214.0h7.5v8h-7.5zM422.4,205.0h7.5v8h-7.5zM430.9,214.0h7.5v8h-7.5zM439.4,214.0h7.5v8h-7.5zM447.8,205.0h7.5v8h-7.5zM456.3,205.0h7.5v8h-7.5zM464.8,205.0h7.5v8h-7.5zM473.3,205.0h7.5v8h-7.5zM481.8,205.0h7.5v8h-7.5zM490.2,196.0h7.5v8h-7.5zM490.2,205.0h7.5v8h-7.5zM498.7,205.0h7.5v8h-7.5zM507.2,196.0h7.5v8h-7.5zM507.2,205.0h7.5v8h-7.5zM515.6,205.0h7.5v8h-7.5zM515.6,214.0h7.5v8h-7.5zM524.1,196.0h7.5v8h-7.5zM524.1,205.0h7.5v8h-7.5zM532.6,205.0h7.5v8h-7.5zM541.1,205.0h7.5v8h-7.5zM549.5,205.0h7.5v8h-7.5zM558.0,196.0h7.5v8h-7.5zM558.0,205.0h7.5v8h-7.5zM566.5,196.0h7.5v8h-7.5zM566.5,205.0h7.5v8h-7.5zM575.0,205.0h7.5v8h-7.5zM583.4,196.0h7.5v8h-7.5zM583.4,205.0h7.5v8h-7.5zM591.9,205.0h7.5v8h-7.5zM600.4,205.0h7.5v8h-7.5zM608.9,205.0h7.5v8h-7.5zM617.4,187.0h7.5v8h-7.5zM617.4,196.0h7.5v8h-7.5zM617.4,205.0h7.5v8h-7.5zM625.8,196.0h7.5v8h-7.5zM625.8,205.0h7.5v8h-7.5zM634.3,205.0h7.5v8h-7.5zM642.8,196.0h7.5v8h-7.5zM642.8,205.0h7.5v8h-7.5zM651.2,205.0h7.5v8h-7.5zM659.7,205.0h7.5v8h-7.5zM668.2,205.0h7.5v8h-7.5zM676.7,205.0h7.5v8h-7.5zM693.6,205.0h7.5v8h-7.5zM702.1,214.0h7.5v8h-7.5zM710.6,196.0h7.5v8h-7.5zM710.6,205.0h7.5v8h-7.5zM727.5,205.0h7.5v8h-7.5z" />
<path class="heat heat-5" d="M185.1,223.0h7.5v8h-7.5zM236.0,223.0h7.5v8h-7.5zM244.4,223.0h7.5v8h-7.5zM252.9,223.0h7.5v8h-7.5zM261.4,223.0h7.5v8h-7.5zM269.9,223.0h7.5v8h-7.5zM278.4,223.0h7.5v8h-7.5zM286.8,223.0h7.5v8h-7.5zM312.2,223.0h7.5v8h-7.5zM320.7,223.0h7.5v8h-7.5zM329.2,223.0h7.5v8h-7.5zM337.7,223.0h7.5v8h-7.5zM354.6,223.0h7.5v8h-7.5zM363.1,223.0h7.5v8h-7.5zM371.6,223.0h7.5v8h-7.5zM380.1,223.0h7.5v8h-7.5zM388.5,223.0h7.5v8h-7.5zM397.0,223.0h7.5v8h-7.5zM405.5,223.0h7.5v8h-7.5zM413.9,223.0h7.5v8h-7.5zM422.4,214.0h7.5v8h-7.5zM447.8,214.0h7.5v8h-7.5zM456.3,214.0h7.5v8h-7.5zM464.8,214.0h7.5v8h-7.5zM473.3,214.0h7.5v8h-7.5zM481.8,214.0h7.5v8h-7.5zM490.2,214.0h7.5v8h-7.5zM498.7,214.0h7.5v8h-7.5zM507.2,214.0h7.5v8h-7.5zM524.1,214.0h7.5v8h-7.5zM532.6,214.0h7.5v8h-7.5zM541.1,214.0h7.5v8h-7.5zM549.5,214.0h7.5v8h-7.5zM558.0,214.0h7.5v8h-7.5zM566.5,214.0h7.5v8h-7.5zM575.0,214.0h7.5v8h-7.5zM583.4,214.0h7.5v8h-7.5zM591.9,214.0h7.5v8h-7.5zM600.4,214.0h7.5v8h-7.5zM608.9,214.0h7.5v8h-7.5zM617.4,214.0h7.5v8h-7.5zM625.8,214.0h7.5v8h-7.5zM634.3,214.0h7.5v8h-7.5zM642.8,214.0h7.5v8h-7.5zM651.2,214.0h7.5v8h-7.5zM659.7,214.0h7.5v8h-7.5zM668.2,214.0h7.5v8h-7.5zM676.7,214.0h7.5v8h-7.5zM685.1,214.0h7.5v8h-7.5zM693.6,214.0h7.5v8h-7.5zM710.6,214.0h7.5v8h-7.5zM719.0,214.0h7.5v8h-7.5zM727.5,214.0h7.5v8h-7.5z" />
<path class="heat heat-6" d="M295.3,223.0h7.5v8h-7.5zM303.8,223.0h7.5v8h-7.5zM346.1,223.0h7.5v8h-7.5zM422.4,223.0h7.5v8h-7.5zM430.9,223.0h7.5v8h-7.5zM439.4,223.0h7.5v8h-7.5zM447.8,223.0h7.5v8h-7.5zM456.3,223.0h7.5v8h-7.5zM464.8,223.0h7.5v8h-7.5zM473.3,223.0h7.5v8h-7.5zM481.8,223.0h7.5v8h-7.5zM490.2,223.0h7.5v8h-7.5zM498.7,223.0h7.5v8h-7.5zM507.2,223.0h7.5v8h-7.5zM515.6,223.0h7.5v8h-7.5zM524.1,223.0h7.5v8h-7.5zM532.6,223.0h7.5v8h-7.5zM541.1,223.0h7.5v8h-7.5zM549.5,223.0h7.5v8h-7.5zM558.0,223.0h7.5v8h-7.5zM566.5,223.0h7.5v8h-7.5zM575.0,223.0h7.5v8h-7.5zM583.4,223.0h7.5v8h-7.5zM591.9,223.0h7.5v8h-7.5zM600.4,223.0h7.5v8h-7.5zM608.9,223.0h7.5v8h-7.5zM617.4,223.0h7.5v8h-7.5zM625.8,223.0h7.5v8h-7.5zM634.3,223.0h7.5v8h-7.5zM642.8,223.0h7.5v8h-7.5zM651.2,223.0h7.5v8h-7.5zM659.7,223.0h7.5v8h-7.5zM668.2,223.0h7.5v8h-7.5zM676.7,223.0h7.5v8h-7.5zM685.1,223.0h7.5v8h-7.5zM693.6,223.0h7.5v8h-7.5zM702.1,223.0h7.5v8h-7.5zM710.6,223.0h7.5v8h-7.5zM719.0,223.0h7.5v8h-7.5zM727.5,223.0h7.5v8h-7.5z" />
<text class="tick" x="50" y="23.5" text-anchor="end">layer 0</text>
<text class="tick" x="50" y="77.5" text-anchor="end">layer 6</text>
<text class="tick" x="50" y="131.5" text-anchor="end">layer 12</text>
<text class="tick" x="50" y="185.5" text-anchor="end">layer 18</text>
<text class="tick" x="50" y="230.5" text-anchor="end">layer 23</text>
<text class="tick" x="62.2" y="248" text-anchor="middle">100</text>
<text class="tick" x="223.3" y="248" text-anchor="middle">2000</text>
<text class="tick" x="392.8" y="248" text-anchor="middle">4000</text>
<text class="tick" x="562.3" y="248" text-anchor="middle">6000</text>
<text class="tick" x="731.8" y="248" text-anchor="middle">8000</text>
<text class="axis-label" x="736" y="264" text-anchor="end">training step</text>
<line class="boundary" x1="218.5" x2="218.5" y1="12" y2="236" />
<line class="boundary" x1="388.0" x2="388.0" y1="12" y2="236" />
<rect class="hit-col" x="58.0" y="16" width="8.5" height="216"><title>Step 100: layer 0 0.105, median layer 0.580, layer 23 1.071</title></rect>
<rect class="hit-col" x="66.5" y="16" width="8.5" height="216"><title>Step 200: layer 0 0.221, median layer 0.763, layer 23 1.373</title></rect>
<rect class="hit-col" x="75.0" y="16" width="8.5" height="216"><title>Step 300: layer 0 0.265, median layer 0.745, layer 23 1.497</title></rect>
<rect class="hit-col" x="83.4" y="16" width="8.5" height="216"><title>Step 400: layer 0 0.256, median layer 0.677, layer 23 1.500</title></rect>
<rect class="hit-col" x="91.9" y="16" width="8.5" height="216"><title>Step 500: layer 0 0.279, median layer 0.714, layer 23 1.594</title></rect>
<rect class="hit-col" x="100.4" y="16" width="8.5" height="216"><title>Step 600: layer 0 0.333, median layer 0.725, layer 23 1.710</title></rect>
<rect class="hit-col" x="108.8" y="16" width="8.5" height="216"><title>Step 700: layer 0 0.339, median layer 0.722, layer 23 1.840</title></rect>
<rect class="hit-col" x="117.3" y="16" width="8.5" height="216"><title>Step 800: layer 0 0.325, median layer 0.722, layer 23 1.964</title></rect>
<rect class="hit-col" x="125.8" y="16" width="8.5" height="216"><title>Step 900: layer 0 0.338, median layer 0.737, layer 23 1.932</title></rect>
<rect class="hit-col" x="134.3" y="16" width="8.5" height="216"><title>Step 1000: layer 0 0.343, median layer 0.749, layer 23 2.010</title></rect>
<rect class="hit-col" x="142.8" y="16" width="8.5" height="216"><title>Step 1100: layer 0 0.351, median layer 0.744, layer 23 2.050</title></rect>
<rect class="hit-col" x="151.2" y="16" width="8.5" height="216"><title>Step 1200: layer 0 0.333, median layer 0.698, layer 23 2.053</title></rect>
<rect class="hit-col" x="159.7" y="16" width="8.5" height="216"><title>Step 1300: layer 0 0.349, median layer 0.723, layer 23 2.059</title></rect>
<rect class="hit-col" x="168.2" y="16" width="8.5" height="216"><title>Step 1400: layer 0 0.338, median layer 0.702, layer 23 2.041</title></rect>
<rect class="hit-col" x="176.6" y="16" width="8.5" height="216"><title>Step 1500: layer 0 0.321, median layer 0.691, layer 23 2.016</title></rect>
<rect class="hit-col" x="185.1" y="16" width="8.5" height="216"><title>Step 1600: layer 0 0.322, median layer 0.670, layer 23 2.117</title></rect>
<rect class="hit-col" x="193.6" y="16" width="8.5" height="216"><title>Step 1700: layer 0 0.326, median layer 0.653, layer 23 2.053</title></rect>
<rect class="hit-col" x="202.1" y="16" width="8.5" height="216"><title>Step 1800: layer 0 0.318, median layer 0.640, layer 23 1.938</title></rect>
<rect class="hit-col" x="210.5" y="16" width="8.5" height="216"><title>Step 1900: layer 0 0.308, median layer 0.644, layer 23 1.967</title></rect>
<rect class="hit-col" x="219.0" y="16" width="8.5" height="216"><title>Step 2000: layer 0 0.304, median layer 0.619, layer 23 1.983</title></rect>
<rect class="hit-col" x="227.5" y="16" width="8.5" height="216"><title>Step 2100: layer 0 0.328, median layer 0.663, layer 23 2.038</title></rect>
<rect class="hit-col" x="236.0" y="16" width="8.5" height="216"><title>Step 2200: layer 0 0.348, median layer 0.730, layer 23 2.171</title></rect>
<rect class="hit-col" x="244.4" y="16" width="8.5" height="216"><title>Step 2300: layer 0 0.352, median layer 0.760, layer 23 2.216</title></rect>
<rect class="hit-col" x="252.9" y="16" width="8.5" height="216"><title>Step 2400: layer 0 0.359, median layer 0.725, layer 23 2.284</title></rect>
<rect class="hit-col" x="261.4" y="16" width="8.5" height="216"><title>Step 2500: layer 0 0.365, median layer 0.812, layer 23 2.287</title></rect>
<rect class="hit-col" x="269.9" y="16" width="8.5" height="216"><title>Step 2600: layer 0 0.377, median layer 0.786, layer 23 2.428</title></rect>
<rect class="hit-col" x="278.4" y="16" width="8.5" height="216"><title>Step 2700: layer 0 0.376, median layer 0.771, layer 23 2.393</title></rect>
<rect class="hit-col" x="286.8" y="16" width="8.5" height="216"><title>Step 2800: layer 0 0.371, median layer 0.731, layer 23 2.477</title></rect>
<rect class="hit-col" x="295.3" y="16" width="8.5" height="216"><title>Step 2900: layer 0 0.371, median layer 0.760, layer 23 2.555</title></rect>
<rect class="hit-col" x="303.8" y="16" width="8.5" height="216"><title>Step 3000: layer 0 0.356, median layer 0.673, layer 23 2.609</title></rect>
<rect class="hit-col" x="312.2" y="16" width="8.5" height="216"><title>Step 3100: layer 0 0.370, median layer 0.816, layer 23 2.491</title></rect>
<rect class="hit-col" x="320.7" y="16" width="8.5" height="216"><title>Step 3200: layer 0 0.363, median layer 0.766, layer 23 2.415</title></rect>
<rect class="hit-col" x="329.2" y="16" width="8.5" height="216"><title>Step 3300: layer 0 0.371, median layer 0.689, layer 23 2.417</title></rect>
<rect class="hit-col" x="337.7" y="16" width="8.5" height="216"><title>Step 3400: layer 0 0.343, median layer 0.655, layer 23 2.401</title></rect>
<rect class="hit-col" x="346.1" y="16" width="8.5" height="216"><title>Step 3500: layer 0 0.340, median layer 0.689, layer 23 2.593</title></rect>
<rect class="hit-col" x="354.6" y="16" width="8.5" height="216"><title>Step 3600: layer 0 0.353, median layer 0.768, layer 23 2.465</title></rect>
<rect class="hit-col" x="363.1" y="16" width="8.5" height="216"><title>Step 3700: layer 0 0.342, median layer 0.746, layer 23 2.445</title></rect>
<rect class="hit-col" x="371.6" y="16" width="8.5" height="216"><title>Step 3800: layer 0 0.348, median layer 0.746, layer 23 2.344</title></rect>
<rect class="hit-col" x="380.1" y="16" width="8.5" height="216"><title>Step 3900: layer 0 0.334, median layer 0.667, layer 23 2.364</title></rect>
<rect class="hit-col" x="388.5" y="16" width="8.5" height="216"><title>Step 4000: layer 0 0.324, median layer 0.686, layer 23 2.432</title></rect>
<rect class="hit-col" x="397.0" y="16" width="8.5" height="216"><title>Step 4100: layer 0 0.343, median layer 0.779, layer 23 2.494</title></rect>
<rect class="hit-col" x="405.5" y="16" width="8.5" height="216"><title>Step 4200: layer 0 0.359, median layer 0.716, layer 23 2.475</title></rect>
<rect class="hit-col" x="413.9" y="16" width="8.5" height="216"><title>Step 4300: layer 0 0.362, median layer 0.775, layer 23 2.499</title></rect>
<rect class="hit-col" x="422.4" y="16" width="8.5" height="216"><title>Step 4400: layer 0 0.363, median layer 0.823, layer 23 2.616</title></rect>
<rect class="hit-col" x="430.9" y="16" width="8.5" height="216"><title>Step 4500: layer 0 0.380, median layer 0.709, layer 23 2.624</title></rect>
<rect class="hit-col" x="439.4" y="16" width="8.5" height="216"><title>Step 4600: layer 0 0.375, median layer 0.691, layer 23 2.659</title></rect>
<rect class="hit-col" x="447.8" y="16" width="8.5" height="216"><title>Step 4700: layer 0 0.378, median layer 0.810, layer 23 2.680</title></rect>
<rect class="hit-col" x="456.3" y="16" width="8.5" height="216"><title>Step 4800: layer 0 0.382, median layer 0.819, layer 23 2.699</title></rect>
<rect class="hit-col" x="464.8" y="16" width="8.5" height="216"><title>Step 4900: layer 0 0.375, median layer 0.877, layer 23 2.630</title></rect>
<rect class="hit-col" x="473.3" y="16" width="8.5" height="216"><title>Step 5000: layer 0 0.370, median layer 0.707, layer 23 2.746</title></rect>
<rect class="hit-col" x="481.8" y="16" width="8.5" height="216"><title>Step 5100: layer 0 0.374, median layer 0.710, layer 23 2.724</title></rect>
<rect class="hit-col" x="490.2" y="16" width="8.5" height="216"><title>Step 5200: layer 0 0.377, median layer 0.920, layer 23 2.845</title></rect>
<rect class="hit-col" x="498.7" y="16" width="8.5" height="216"><title>Step 5300: layer 0 0.380, median layer 0.877, layer 23 2.525</title></rect>
<rect class="hit-col" x="507.2" y="16" width="8.5" height="216"><title>Step 5400: layer 0 0.379, median layer 0.881, layer 23 2.884</title></rect>
<rect class="hit-col" x="515.6" y="16" width="8.5" height="216"><title>Step 5500: layer 0 0.364, median layer 0.705, layer 23 2.781</title></rect>
<rect class="hit-col" x="524.1" y="16" width="8.5" height="216"><title>Step 5600: layer 0 0.373, median layer 0.878, layer 23 2.901</title></rect>
<rect class="hit-col" x="532.6" y="16" width="8.5" height="216"><title>Step 5700: layer 0 0.365, median layer 0.790, layer 23 2.890</title></rect>
<rect class="hit-col" x="541.1" y="16" width="8.5" height="216"><title>Step 5800: layer 0 0.372, median layer 0.835, layer 23 2.902</title></rect>
<rect class="hit-col" x="549.5" y="16" width="8.5" height="216"><title>Step 5900: layer 0 0.373, median layer 0.829, layer 23 2.749</title></rect>
<rect class="hit-col" x="558.0" y="16" width="8.5" height="216"><title>Step 6000: layer 0 0.352, median layer 0.877, layer 23 2.873</title></rect>
<rect class="hit-col" x="566.5" y="16" width="8.5" height="216"><title>Step 6100: layer 0 0.356, median layer 0.921, layer 23 2.827</title></rect>
<rect class="hit-col" x="575.0" y="16" width="8.5" height="216"><title>Step 6200: layer 0 0.356, median layer 0.696, layer 23 2.902</title></rect>
<rect class="hit-col" x="583.4" y="16" width="8.5" height="216"><title>Step 6300: layer 0 0.362, median layer 0.973, layer 23 2.873</title></rect>
<rect class="hit-col" x="591.9" y="16" width="8.5" height="216"><title>Step 6400: layer 0 0.347, median layer 0.735, layer 23 2.643</title></rect>
<rect class="hit-col" x="600.4" y="16" width="8.5" height="216"><title>Step 6500: layer 0 0.341, median layer 0.811, layer 23 2.792</title></rect>
<rect class="hit-col" x="608.9" y="16" width="8.5" height="216"><title>Step 6600: layer 0 0.347, median layer 0.766, layer 23 2.790</title></rect>
<rect class="hit-col" x="617.4" y="16" width="8.5" height="216"><title>Step 6700: layer 0 0.339, median layer 0.997, layer 23 2.902</title></rect>
<rect class="hit-col" x="625.8" y="16" width="8.5" height="216"><title>Step 6800: layer 0 0.345, median layer 0.951, layer 23 2.823</title></rect>
<rect class="hit-col" x="634.3" y="16" width="8.5" height="216"><title>Step 6900: layer 0 0.336, median layer 0.856, layer 23 2.798</title></rect>
<rect class="hit-col" x="642.8" y="16" width="8.5" height="216"><title>Step 7000: layer 0 0.327, median layer 0.905, layer 23 2.728</title></rect>
<rect class="hit-col" x="651.2" y="16" width="8.5" height="216"><title>Step 7100: layer 0 0.329, median layer 0.731, layer 23 2.897</title></rect>
<rect class="hit-col" x="659.7" y="16" width="8.5" height="216"><title>Step 7200: layer 0 0.343, median layer 0.747, layer 23 2.750</title></rect>
<rect class="hit-col" x="668.2" y="16" width="8.5" height="216"><title>Step 7300: layer 0 0.339, median layer 0.783, layer 23 2.725</title></rect>
<rect class="hit-col" x="676.7" y="16" width="8.5" height="216"><title>Step 7400: layer 0 0.321, median layer 0.842, layer 23 2.733</title></rect>
<rect class="hit-col" x="685.1" y="16" width="8.5" height="216"><title>Step 7500: layer 0 0.341, median layer 0.676, layer 23 2.710</title></rect>
<rect class="hit-col" x="693.6" y="16" width="8.5" height="216"><title>Step 7600: layer 0 0.324, median layer 0.844, layer 23 2.632</title></rect>
<rect class="hit-col" x="702.1" y="16" width="8.5" height="216"><title>Step 7700: layer 0 0.343, median layer 0.660, layer 23 2.721</title></rect>
<rect class="hit-col" x="710.6" y="16" width="8.5" height="216"><title>Step 7800: layer 0 0.331, median layer 0.888, layer 23 2.832</title></rect>
<rect class="hit-col" x="719.0" y="16" width="8.5" height="216"><title>Step 7900: layer 0 0.320, median layer 0.671, layer 23 2.805</title></rect>
<rect class="hit-col" x="727.5" y="16" width="8.5" height="216"><title>Step 8000: layer 0 0.334, median layer 0.781, layer 23 2.696</title></rect>
<text class="tick" x="58" y="285">smaller</text>
<rect class="heat heat-0" x="110" y="276" width="20" height="10" />
<rect class="heat heat-1" x="132" y="276" width="20" height="10" />
<rect class="heat heat-2" x="154" y="276" width="20" height="10" />
<rect class="heat heat-3" x="176" y="276" width="20" height="10" />
<rect class="heat heat-4" x="198" y="276" width="20" height="10" />
<rect class="heat heat-5" x="220" y="276" width="20" height="10" />
<rect class="heat heat-6" x="242" y="276" width="20" height="10" />
<text class="tick" x="270" y="285">larger activation size (0.10 to 2.9, linear scale)</text>
</svg>

</div>
<figcaption>Size of the residual stream leaving each layer, on the same sampling. This one is banded by depth rather than by time, so the pattern to look for is different.</figcaption>
</figure>

<p>The residual stream tells a different story: it’s banded by depth, not by time. Each layer adds its output to a running sum that only gets normalised on the way into the next block, so the stream grows steadily from layer 0 at the bottom to layer 23 at the top. That gradient is the signature of a healthy pre-norm network. What you don’t want is a single row suddenly brightening, which is what a layer heading for numerical trouble looks like well before the loss notices.</p>

<figure class="wide">
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 446" role="img" aria-labelledby="entropy-and-update-size-t entropy-and-update-size-d">
<title id="entropy-and-update-size-t">Entropy and update size</title>
<desc id="entropy-and-update-size-d">Two panels sharing the step axis. Top: mean prediction entropy falls from 7.44 nats to 3.03 as the model becomes more certain of its next token. Bottom: the size of each optimizer update relative to the weight it changes, on a log scale, for the embedding table and the attention output projections of layers 0, 12 and 23. All of them shrink as the learning rate decays, and step back up at each restart.</desc>
<text class="axis-label" x="52" y="16">prediction entropy, nats</text>
<line class="grid" x1="52" x2="644" y1="175.8" y2="175.8" />
<text class="tick" x="44" y="179.8" text-anchor="end">3</text>
<line class="grid" x1="52" x2="644" y1="147.5" y2="147.5" />
<text class="tick" x="44" y="151.5" text-anchor="end">4</text>
<line class="grid" x1="52" x2="644" y1="119.1" y2="119.1" />
<text class="tick" x="44" y="123.1" text-anchor="end">5</text>
<line class="grid" x1="52" x2="644" y1="90.7" y2="90.7" />
<text class="tick" x="44" y="94.7" text-anchor="end">6</text>
<line class="grid" x1="52" x2="644" y1="62.4" y2="62.4" />
<text class="tick" x="44" y="66.4" text-anchor="end">7</text>
<path class="line" d="M55.7,49.9 L59.4,75.0 L63.1,87.5 L66.8,100.0 L70.5,116.3 L74.2,118.1 L77.9,128.0 L81.6,125.3 L85.3,130.7 L89.0,146.2 L92.7,144.5 L96.4,140.5 L100.1,165.6 L103.8,150.1 L107.5,154.2 L111.2,145.8 L114.9,152.3 L118.6,150.1 L122.3,163.1 L126.0,150.5 L129.7,157.0 L133.4,150.1 L137.1,154.2 L140.8,152.4 L144.5,163.6 L148.2,158.0 L151.9,162.3 L155.6,155.1 L159.3,166.3 L163.0,153.9 L166.7,161.4 L170.4,166.5 L174.1,164.9 L177.8,157.5 L181.5,173.8 L185.2,171.1 L188.9,160.1 L192.6,160.9 L196.3,160.2 L200.0,161.1 L203.7,168.7 L207.4,159.3 L211.1,163.3 L214.8,164.2 L218.5,156.1 L222.2,168.0 L225.9,162.3 L229.6,166.8 L233.3,166.9 L237.0,168.2 L240.7,159.1 L244.4,172.0 L248.1,157.8 L251.8,170.9 L255.5,161.4 L259.2,155.9 L262.9,167.5 L266.6,173.5 L270.3,159.4 L274.0,158.7 L277.7,171.6 L281.4,162.5 L285.1,163.5 L288.8,162.7 L292.5,174.4 L296.2,167.3 L299.9,174.5 L303.6,163.2 L307.3,164.2 L311.0,164.4 L314.7,176.6 L318.4,177.8 L322.1,185.9 L325.8,175.3 L329.5,166.7 L333.2,166.1 L336.9,164.8 L340.6,167.4 L344.3,159.8 L348.0,178.1 L351.7,168.3 L355.4,176.2 L359.1,171.4 L362.8,170.3 L366.5,170.8 L370.2,172.3 L373.9,179.1 L377.6,173.1 L381.3,174.3 L385.0,163.1 L388.7,181.6 L392.4,179.6 L396.1,169.6 L399.8,175.3 L403.5,175.6 L407.2,172.7 L410.9,169.2 L414.6,173.3 L418.3,192.5 L422.0,168.6 L425.7,169.5 L429.4,163.0 L433.1,173.2 L436.8,172.4 L440.5,161.1 L444.2,198.6 L447.9,168.7 L451.6,176.0 L455.3,178.4 L459.0,172.6 L462.7,182.2 L466.4,174.5 L470.1,166.5 L473.8,173.4 L477.5,180.9 L481.2,165.8 L484.9,169.2 L488.6,181.0 L492.3,169.3 L496.0,170.9 L499.7,174.6 L503.4,173.6 L507.1,179.7 L510.8,162.1 L514.5,180.0 L518.2,175.1 L521.9,184.9 L525.6,185.5 L529.3,174.9 L533.0,177.5 L536.7,167.0 L540.4,181.6 L544.1,170.4 L547.8,179.6 L551.5,176.2 L555.2,167.6 L558.9,192.2 L562.6,168.0 L566.3,181.4 L570.0,174.0 L573.7,167.1 L577.4,166.1 L581.1,166.5 L584.8,172.5 L588.5,186.9 L592.2,167.9 L595.9,180.4 L599.6,170.9 L603.3,193.6 L607.0,169.5 L610.7,176.2 L614.4,185.4 L618.1,156.4 L621.8,160.9 L625.5,176.1 L629.2,168.7 L632.9,166.5 L636.6,159.4 L640.3,179.0 L644.0,174.9" />
<circle class="hit" cx="55.7" cy="49.9" r="6"><title>Step 50: entropy 7.44 nats</title></circle>
<circle class="hit" cx="70.5" cy="116.3" r="6"><title>Step 250: entropy 5.10 nats</title></circle>
<circle class="hit" cx="85.3" cy="130.7" r="6"><title>Step 450: entropy 4.59 nats</title></circle>
<circle class="hit" cx="100.1" cy="165.6" r="6"><title>Step 650: entropy 3.36 nats</title></circle>
<circle class="hit" cx="114.9" cy="152.3" r="6"><title>Step 850: entropy 3.83 nats</title></circle>
<circle class="hit" cx="129.7" cy="157.0" r="6"><title>Step 1050: entropy 3.66 nats</title></circle>
<circle class="hit" cx="144.5" cy="163.6" r="6"><title>Step 1250: entropy 3.43 nats</title></circle>
<circle class="hit" cx="159.3" cy="166.3" r="6"><title>Step 1450: entropy 3.33 nats</title></circle>
<circle class="hit" cx="174.1" cy="164.9" r="6"><title>Step 1650: entropy 3.38 nats</title></circle>
<circle class="hit" cx="188.9" cy="160.1" r="6"><title>Step 1850: entropy 3.55 nats</title></circle>
<circle class="hit" cx="203.7" cy="168.7" r="6"><title>Step 2050: entropy 3.25 nats</title></circle>
<circle class="hit" cx="218.5" cy="156.1" r="6"><title>Step 2250: entropy 3.69 nats</title></circle>
<circle class="hit" cx="233.3" cy="166.9" r="6"><title>Step 2450: entropy 3.31 nats</title></circle>
<circle class="hit" cx="248.1" cy="157.8" r="6"><title>Step 2650: entropy 3.63 nats</title></circle>
<circle class="hit" cx="262.9" cy="167.5" r="6"><title>Step 2850: entropy 3.29 nats</title></circle>
<circle class="hit" cx="277.7" cy="171.6" r="6"><title>Step 3050: entropy 3.15 nats</title></circle>
<circle class="hit" cx="292.5" cy="174.4" r="6"><title>Step 3250: entropy 3.05 nats</title></circle>
<circle class="hit" cx="307.3" cy="164.2" r="6"><title>Step 3450: entropy 3.41 nats</title></circle>
<circle class="hit" cx="322.1" cy="185.9" r="6"><title>Step 3650: entropy 2.64 nats</title></circle>
<circle class="hit" cx="336.9" cy="164.8" r="6"><title>Step 3850: entropy 3.39 nats</title></circle>
<circle class="hit" cx="351.7" cy="168.3" r="6"><title>Step 4050: entropy 3.27 nats</title></circle>
<circle class="hit" cx="366.5" cy="170.8" r="6"><title>Step 4250: entropy 3.18 nats</title></circle>
<circle class="hit" cx="381.3" cy="174.3" r="6"><title>Step 4450: entropy 3.05 nats</title></circle>
<circle class="hit" cx="396.1" cy="169.6" r="6"><title>Step 4650: entropy 3.22 nats</title></circle>
<circle class="hit" cx="410.9" cy="169.2" r="6"><title>Step 4850: entropy 3.23 nats</title></circle>
<circle class="hit" cx="425.7" cy="169.5" r="6"><title>Step 5050: entropy 3.22 nats</title></circle>
<circle class="hit" cx="440.5" cy="161.1" r="6"><title>Step 5250: entropy 3.52 nats</title></circle>
<circle class="hit" cx="455.3" cy="178.4" r="6"><title>Step 5450: entropy 2.91 nats</title></circle>
<circle class="hit" cx="470.1" cy="166.5" r="6"><title>Step 5650: entropy 3.33 nats</title></circle>
<circle class="hit" cx="484.9" cy="169.2" r="6"><title>Step 5850: entropy 3.23 nats</title></circle>
<circle class="hit" cx="499.7" cy="174.6" r="6"><title>Step 6050: entropy 3.04 nats</title></circle>
<circle class="hit" cx="514.5" cy="180.0" r="6"><title>Step 6250: entropy 2.85 nats</title></circle>
<circle class="hit" cx="529.3" cy="174.9" r="6"><title>Step 6450: entropy 3.03 nats</title></circle>
<circle class="hit" cx="544.1" cy="170.4" r="6"><title>Step 6650: entropy 3.19 nats</title></circle>
<circle class="hit" cx="558.9" cy="192.2" r="6"><title>Step 6850: entropy 2.42 nats</title></circle>
<circle class="hit" cx="573.7" cy="167.1" r="6"><title>Step 7050: entropy 3.31 nats</title></circle>
<circle class="hit" cx="588.5" cy="186.9" r="6"><title>Step 7250: entropy 2.61 nats</title></circle>
<circle class="hit" cx="603.3" cy="193.6" r="6"><title>Step 7450: entropy 2.37 nats</title></circle>
<circle class="hit" cx="618.1" cy="156.4" r="6"><title>Step 7650: entropy 3.69 nats</title></circle>
<circle class="hit" cx="632.9" cy="166.5" r="6"><title>Step 7850: entropy 3.33 nats</title></circle>
<text class="value" x="652.0" y="178.9">3.03</text>
<text class="axis-label" x="52" y="228">update size relative to weight size, log scale</text>
<line class="grid" x1="52" x2="644" y1="353.9" y2="353.9" />
<text class="tick" x="44" y="357.9" text-anchor="end">1e-2</text>
<line class="grid" x1="52" x2="644" y1="295.0" y2="295.0" />
<text class="tick" x="44" y="299.0" text-anchor="end">1e-1</text>
<path class="line line-thin" d="M55.7,306.4 L59.4,294.1 L63.1,295.7 L66.8,291.0 L70.5,292.5 L74.2,294.1 L77.9,297.5 L81.6,298.9 L85.3,300.7 L89.0,302.5 L92.7,304.4 L96.4,305.0 L100.1,306.6 L103.8,308.3 L107.5,309.6 L111.2,311.0 L114.9,312.4 L118.6,313.7 L122.3,315.3 L126.0,316.9 L129.7,318.6 L133.4,320.3 L137.1,322.1 L140.8,324.1 L144.5,326.2 L148.2,328.3 L151.9,330.6 L155.6,333.0 L159.3,335.5 L163.0,338.2 L166.7,341.1 L170.4,344.0 L174.1,347.0 L177.8,350.0 L181.5,353.0 L185.2,355.9 L188.9,358.5 L192.6,360.7 L196.3,362.3 L200.0,363.2 L203.7,348.2 L207.4,324.8 L211.1,318.5 L214.8,318.4 L218.5,318.5 L222.2,318.8 L225.9,319.2 L229.6,319.5 L233.3,320.1 L237.0,320.6 L240.7,321.3 L244.4,322.0 L248.1,322.8 L251.8,323.7 L255.5,324.7 L259.2,325.7 L262.9,326.8 L266.6,328.0 L270.3,329.4 L274.0,330.8 L277.7,332.3 L281.4,334.0 L285.1,335.7 L288.8,337.6 L292.5,339.5 L296.2,341.6 L299.9,343.8 L303.6,346.2 L307.3,348.7 L311.0,351.3 L314.7,354.0 L318.4,356.8 L322.1,359.7 L325.8,362.5 L329.5,365.3 L333.2,368.0 L336.9,370.4 L340.6,372.4 L344.3,373.9 L348.0,374.6 L351.7,356.6 L355.4,333.0 L359.1,326.6 L362.8,326.4 L366.5,326.4 L370.2,326.4 L373.9,326.5 L377.6,326.6 L381.3,326.7 L385.0,326.8 L388.7,327.0 L392.4,327.2 L396.1,327.4 L399.8,327.6 L403.5,327.9 L407.2,328.1 L410.9,328.3 L414.6,328.6 L418.3,329.0 L422.0,329.3 L425.7,329.6 L429.4,330.0 L433.1,330.4 L436.8,330.8 L440.5,331.3 L444.2,331.7 L447.9,332.2 L451.6,332.7 L455.3,333.2 L459.0,333.7 L462.7,334.3 L466.4,334.8 L470.1,335.5 L473.8,336.1 L477.5,336.8 L481.2,337.5 L484.9,338.2 L488.6,338.9 L492.3,339.6 L496.0,340.4 L499.7,341.3 L503.4,342.1 L507.1,343.0 L510.8,343.9 L514.5,344.9 L518.2,345.8 L521.9,346.9 L525.6,347.9 L529.3,349.0 L533.0,350.1 L536.7,351.3 L540.4,352.4 L544.1,353.7 L547.8,355.0 L551.5,356.3 L555.2,357.7 L558.9,359.1 L562.6,360.5 L566.3,362.0 L570.0,363.5 L573.7,365.1 L577.4,366.8 L581.1,368.4 L584.8,370.1 L588.5,371.9 L592.2,373.6 L595.9,375.5 L599.6,377.3 L603.3,379.1 L607.0,380.8 L610.7,382.7 L614.4,384.3 L618.1,385.9 L621.8,387.5 L625.5,388.9 L629.2,390.2 L632.9,391.2 L636.6,392.0 L640.3,392.6 L644.0,392.9" />
<path class="line line-2 line-thin" d="M55.7,300.6 L59.4,273.1 L63.1,265.4 L66.8,261.9 L70.5,259.7 L74.2,263.6 L77.9,255.4 L81.6,264.2 L85.3,260.5 L89.0,258.7 L92.7,254.6 L96.4,263.6 L100.1,263.6 L103.8,264.7 L107.5,263.9 L111.2,264.1 L114.9,260.4 L118.6,271.5 L122.3,267.8 L126.0,270.1 L129.7,269.9 L133.4,270.7 L137.1,271.9 L140.8,273.4 L144.5,274.3 L148.2,276.5 L151.9,277.9 L155.6,280.4 L159.3,282.4 L163.0,284.4 L166.7,286.9 L170.4,289.7 L174.1,291.4 L177.8,295.9 L181.5,297.2 L185.2,302.0 L188.9,302.9 L192.6,305.2 L196.3,306.6 L200.0,307.0 L203.7,292.0 L207.4,272.4 L211.1,268.3 L214.8,267.9 L218.5,267.5 L222.2,266.9 L225.9,269.5 L229.6,268.6 L233.3,268.2 L237.0,269.3 L240.7,269.9 L244.4,269.2 L248.1,271.8 L251.8,271.6 L255.5,271.7 L259.2,274.3 L262.9,274.6 L266.6,274.1 L270.3,276.8 L274.0,276.0 L277.7,280.8 L281.4,280.3 L285.1,281.6 L288.8,283.1 L292.5,284.8 L296.2,286.7 L299.9,288.3 L303.6,291.3 L307.3,293.2 L311.0,295.6 L314.7,298.1 L318.4,300.8 L322.1,303.4 L325.8,306.5 L329.5,309.0 L333.2,311.8 L336.9,314.1 L340.6,315.9 L344.3,317.6 L348.0,318.0 L351.7,299.7 L355.4,277.5 L359.1,273.2 L362.8,273.2 L366.5,272.9 L370.2,273.0 L373.9,273.6 L377.6,273.4 L381.3,273.5 L385.0,273.2 L388.7,274.0 L392.4,274.3 L396.1,274.4 L399.8,273.8 L403.5,275.2 L407.2,275.1 L410.9,275.4 L414.6,275.7 L418.3,275.8 L422.0,276.1 L425.7,276.7 L429.4,276.7 L433.1,277.1 L436.8,276.6 L440.5,278.6 L444.2,278.4 L447.9,278.4 L451.6,279.7 L455.3,280.0 L459.0,280.2 L462.7,280.6 L466.4,280.8 L470.1,282.0 L473.8,281.6 L477.5,282.8 L481.2,283.4 L484.9,284.0 L488.6,284.9 L492.3,285.5 L496.0,286.3 L499.7,286.5 L503.4,287.9 L507.1,288.1 L510.8,289.4 L514.5,290.1 L518.2,291.2 L521.9,292.0 L525.6,292.4 L529.3,294.4 L533.0,294.4 L536.7,296.4 L540.4,297.6 L544.1,297.8 L547.8,302.0 L551.5,301.7 L555.2,302.2 L558.9,304.0 L562.6,304.9 L566.3,306.6 L570.0,307.9 L573.7,309.5 L577.4,311.1 L581.1,312.6 L584.8,314.8 L588.5,315.9 L592.2,318.0 L595.9,319.8 L599.6,321.7 L603.3,323.4 L607.0,325.0 L610.7,326.9 L614.4,328.8 L618.1,329.9 L621.8,331.9 L625.5,333.3 L629.2,334.0 L632.9,335.6 L636.6,336.2 L640.3,336.4 L644.0,337.4" />
<path class="line line-2 line-gap line-thin" d="M55.7,310.0 L59.4,290.5 L63.1,265.5 L66.8,262.3 L70.5,258.7 L74.2,273.2 L77.9,265.5 L81.6,275.0 L85.3,271.6 L89.0,273.4 L92.7,273.0 L96.4,275.2 L100.1,278.2 L103.8,280.3 L107.5,281.2 L111.2,282.1 L114.9,283.2 L118.6,284.4 L122.3,286.0 L126.0,287.5 L129.7,288.9 L133.4,290.3 L137.1,291.9 L140.8,293.5 L144.5,295.3 L148.2,297.2 L151.9,299.3 L155.6,301.6 L159.3,303.9 L163.0,306.4 L166.7,308.9 L170.4,311.5 L174.1,314.4 L177.8,317.2 L181.5,319.8 L185.2,323.0 L188.9,325.2 L192.6,327.3 L196.3,328.9 L200.0,329.6 L203.7,315.5 L207.4,295.6 L211.1,290.6 L214.8,290.0 L218.5,289.7 L222.2,290.2 L225.9,290.4 L229.6,290.6 L233.3,291.1 L237.0,291.7 L240.7,292.2 L244.4,292.5 L248.1,293.8 L251.8,294.4 L255.5,295.0 L259.2,296.8 L262.9,297.8 L266.6,298.7 L270.3,299.9 L274.0,301.1 L277.7,302.9 L281.4,304.2 L285.1,305.8 L288.8,307.5 L292.5,309.5 L296.2,311.5 L299.9,313.5 L303.6,315.7 L307.3,318.2 L311.0,320.5 L314.7,323.2 L318.4,325.8 L322.1,328.5 L325.8,331.5 L329.5,334.1 L333.2,336.8 L336.9,339.0 L340.6,340.9 L344.3,342.4 L348.0,343.1 L351.7,325.5 L355.4,303.9 L359.1,298.8 L362.8,298.3 L366.5,298.1 L370.2,298.2 L373.9,298.2 L377.6,298.4 L381.3,298.5 L385.0,298.6 L388.7,298.8 L392.4,299.1 L396.1,299.4 L399.8,299.6 L403.5,299.9 L407.2,300.3 L410.9,300.4 L414.6,300.7 L418.3,301.0 L422.0,301.4 L425.7,301.7 L429.4,302.1 L433.1,302.6 L436.8,303.0 L440.5,303.5 L444.2,304.0 L447.9,304.4 L451.6,304.9 L455.3,305.6 L459.0,306.0 L462.7,306.6 L466.4,307.2 L470.1,307.8 L473.8,308.2 L477.5,309.1 L481.2,309.7 L484.9,310.5 L488.6,311.1 L492.3,311.8 L496.0,312.6 L499.7,313.3 L503.4,314.2 L507.1,315.1 L510.8,316.0 L514.5,316.9 L518.2,317.9 L521.9,318.7 L525.6,319.7 L529.3,321.0 L533.0,322.0 L536.7,323.0 L540.4,324.2 L544.1,325.5 L547.8,326.8 L551.5,328.0 L555.2,329.4 L558.9,330.6 L562.6,332.1 L566.3,333.5 L570.0,335.1 L573.7,336.6 L577.4,338.1 L581.1,339.7 L584.8,341.4 L588.5,343.1 L592.2,344.8 L595.9,346.6 L599.6,348.3 L603.3,350.1 L607.0,351.9 L610.7,353.6 L614.4,355.2 L618.1,356.8 L621.8,358.5 L625.5,359.8 L629.2,361.0 L632.9,361.9 L636.6,362.8 L640.3,363.5 L644.0,363.7" />
<path class="line line-2 line-gap line-thin" d="M55.7,305.2 L59.4,283.6 L63.1,268.4 L66.8,264.1 L70.5,264.3 L74.2,267.3 L77.9,269.5 L81.6,272.1 L85.3,273.8 L89.0,276.2 L92.7,277.8 L96.4,278.3 L100.1,280.8 L103.8,282.8 L107.5,284.7 L111.2,286.2 L114.9,288.0 L118.6,289.3 L122.3,290.9 L126.0,292.7 L129.7,294.6 L133.4,296.2 L137.1,298.0 L140.8,299.9 L144.5,302.1 L148.2,304.1 L151.9,306.5 L155.6,308.9 L159.3,311.3 L163.0,314.0 L166.7,316.6 L170.4,319.5 L174.1,322.4 L177.8,325.3 L181.5,328.1 L185.2,331.0 L188.9,333.4 L192.6,335.5 L196.3,337.1 L200.0,337.9 L203.7,323.6 L207.4,302.9 L211.1,298.0 L214.8,297.6 L218.5,297.8 L222.2,298.2 L225.9,298.6 L229.6,299.1 L233.3,299.8 L237.0,300.5 L240.7,301.1 L244.4,301.8 L248.1,303.0 L251.8,303.9 L255.5,304.7 L259.2,306.0 L262.9,307.2 L266.6,308.4 L270.3,309.9 L274.0,311.2 L277.7,312.8 L281.4,314.3 L285.1,316.1 L288.8,317.8 L292.5,319.9 L296.2,321.9 L299.9,324.1 L303.6,326.2 L307.3,328.6 L311.0,331.2 L314.7,333.8 L318.4,336.4 L322.1,339.2 L325.8,342.1 L329.5,344.7 L333.2,347.2 L336.9,349.5 L340.6,351.5 L344.3,353.0 L348.0,353.6 L351.7,336.3 L355.4,314.5 L359.1,309.0 L362.8,308.7 L366.5,308.8 L370.2,308.8 L373.9,309.1 L377.6,309.2 L381.3,309.4 L385.0,309.5 L388.7,309.8 L392.4,310.0 L396.1,310.4 L399.8,310.7 L403.5,311.1 L407.2,311.3 L410.9,311.7 L414.6,312.0 L418.3,312.3 L422.0,312.8 L425.7,313.1 L429.4,313.7 L433.1,314.0 L436.8,314.6 L440.5,315.0 L444.2,315.5 L447.9,316.0 L451.6,316.5 L455.3,317.1 L459.0,317.6 L462.7,318.3 L466.4,318.9 L470.1,319.5 L473.8,320.0 L477.5,320.9 L481.2,321.5 L484.9,322.3 L488.6,323.0 L492.3,323.8 L496.0,324.5 L499.7,325.3 L503.4,326.2 L507.1,327.2 L510.8,328.0 L514.5,328.9 L518.2,329.9 L521.9,330.9 L525.6,331.8 L529.3,332.9 L533.0,334.0 L536.7,335.1 L540.4,336.2 L544.1,337.6 L547.8,338.8 L551.5,340.1 L555.2,341.4 L558.9,342.7 L562.6,344.0 L566.3,345.5 L570.0,347.0 L573.7,348.5 L577.4,350.2 L581.1,351.8 L584.8,353.4 L588.5,355.1 L592.2,356.7 L595.9,358.4 L599.6,360.2 L603.3,361.9 L607.0,363.7 L610.7,365.5 L614.4,367.1 L618.1,368.6 L621.8,370.2 L625.5,371.5 L629.2,372.8 L632.9,373.7 L636.6,374.6 L640.3,375.1 L644.0,375.4" />
<text class="note" x="650" y="341.4">L0.attn.wo</text>
<text class="note" x="650" y="367.7">L12.attn.wo</text>
<text class="note" x="650" y="380.7">L23.attn.wo</text>
<text class="note" x="650" y="396.9">tok_emb</text>
<text class="tick" x="200.0" y="422" text-anchor="middle">2000</text>
<text class="tick" x="348.0" y="422" text-anchor="middle">4000</text>
<text class="tick" x="496.0" y="422" text-anchor="middle">6000</text>
<text class="tick" x="644.0" y="422" text-anchor="middle">8000</text>
<text class="axis-label" x="644" y="440" text-anchor="end">step</text>
<line class="boundary" x1="200.0" x2="200.0" y1="34" y2="402" />
<line class="boundary" x1="348.0" x2="348.0" y1="34" y2="402" />
</svg>

</div>
<figcaption>Two more signals over the run. Top: mean prediction entropy, how uncertain the model is about its next token. Bottom: how large each optimizer update is relative to the weight it changes, for the embedding table and three attention projections, on a log scale.</figcaption>
</figure>

<p>Prediction entropy drops steeply during warmup, from 7.44 nats to about 3.5 by the end of phase 1, and then stops falling. It spends phases 2 and 3 wandering around 3 nats, bouncing half a nat either way because I measure it on a single batch. That plateau is worth noticing: the model kept getting better at predicting the right token long after it stopped getting more <em>confident</em> on average. Loss and confidence are not the same thing, and only one of them was still improving.</p>

<p>The update sizes shrink as the learning rate decays and step back up at each restart, which is the loss curve’s story told from the optimizer’s side. None of this needed action. That’s rather the point of logging it: it’s cheap, and the run where one of these goes wrong is the run where you want it already there.</p>

<h2 id="cost">Cost</h2>

<table>
  <thead>
    <tr>
      <th>Stage</th>
      <th style="text-align: right">Hours</th>
      <th style="text-align: right">Cost</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tokenizer and corpus preparation</td>
      <td style="text-align: right">0.65</td>
      <td style="text-align: right">$0.32</td>
    </tr>
    <tr>
      <td>Phase 1</td>
      <td style="text-align: right">6.4</td>
      <td style="text-align: right">$3.08</td>
    </tr>
    <tr>
      <td>Phase 2</td>
      <td style="text-align: right">6.4</td>
      <td style="text-align: right">$3.08</td>
    </tr>
    <tr>
      <td>Phase 3</td>
      <td style="text-align: right">12.2</td>
      <td style="text-align: right">$5.83</td>
    </tr>
    <tr>
      <td>Benchmarks, including public baselines</td>
      <td style="text-align: right">2.9</td>
      <td style="text-align: right">$1.39</td>
    </tr>
    <tr>
      <td><strong>Total</strong></td>
      <td style="text-align: right"><strong>28.6</strong></td>
      <td style="text-align: right"><strong>$13.70</strong></td>
    </tr>
  </tbody>
</table>

<h2 id="what-id-do-next">What I’d do next</h2>

<p>The run is done, and it never hit a wall I could fix with engineering. Ranked by what would actually pay:</p>

<p><strong>Change the data mix, don’t just add more of it.</strong> The cheap token gains are largely spent, and the corpus is the binding constraint now. The benchmarks that stayed flat are flat because FineWeb-Edu contains none of what they test: no code, little reference text, nothing requiring multi-step reasoning. SmolLM2-360M beating Qwen2.5-0.5B on a quarter of the tokens is the evidence that mixture outweighs volume from here.</p>

<p><strong>If you do add tokens, use one warmup-stable-decay schedule.</strong> Another doubling would still pay, since the curve is straight to the end. Running it as a single schedule recovers the fifth of the budget my two restarts cost.</p>

<p><strong>Skip the weight averaging if you can decay properly</strong>, per the measurement above.</p>

<p><strong>Drop ARC-Challenge and WinoGrande from the tracking suite</strong> at this scale. Both sat at chance for the whole run.</p>

<p>What I wouldn’t bother with at this budget: architecture changes, a different optimizer, or a hyperparameter sweep. Nothing in the diagnostics ever suggested the model was the limiting factor. No instability, no dead layers, no gradient pathology, 85% of the card’s peak throughput from the first step to the last. It was the data all along.</p>

<h2 id="getting-the-model">Getting the model</h2>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">transformers</span> <span class="kn">import</span> <span class="n">AutoModelForCausalLM</span><span class="p">,</span> <span class="n">AutoTokenizer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">AutoModelForCausalLM</span><span class="p">.</span><span class="nf">from_pretrained</span><span class="p">(</span><span class="sh">"</span><span class="s">osjayaprakash/llm-0.5b-fineweb-edu</span><span class="sh">"</span><span class="p">)</span>
<span class="n">tok</span> <span class="o">=</span> <span class="n">AutoTokenizer</span><span class="p">.</span><span class="nf">from_pretrained</span><span class="p">(</span><span class="sh">"</span><span class="s">osjayaprakash/llm-0.5b-fineweb-edu</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>It’s a base model: no instruction tuning, no chat template, no alignment. It continues text and
nothing else, and at this size it produces fluent, plausible, frequently wrong prose. Ask it about
mitochondria and it will tell you they are the powerhouse of the cell, three times, before moving
on. Treat it as a reference point for what a small budget buys rather than as something to build
on. The <a href="https://huggingface.co/osjayaprakash/llm-0.5b-fineweb-edu">model card</a> carries the full numbers and limitations.</p>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[A 489M-parameter model trained from scratch on 4.2B tokens for $13.70, what it scores, and two things that did not work.]]></summary></entry><entry><title type="html">ARC-AGI-3 on Kaggle</title><link href="https://www.jayaprakash.net/blog/2026-08-23-arc-agi-3-on-kaggle/" rel="alternate" type="text/html" title="ARC-AGI-3 on Kaggle" /><published>2026-08-23T12:00:00+00:00</published><updated>2026-08-23T12:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/arc-agi-3-on-kaggle</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-08-23-arc-agi-3-on-kaggle/"><![CDATA[<p>Most benchmarks hand a model a question and grade the answer. <a href="https://arcprize.org/arc-agi/3">ARC-AGI-3</a> hands an agent a game it has never seen, with no instructions, and grades how quickly it learns to win. The <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3">Kaggle competition</a> built on it runs until November 2 with $850,000 in prizes, and with ten weeks to go the best public scores are still in the low single digits out of 100.</p>

<p>This post explains the competition from the ground up: what the environment looks like, how scoring works and why it’s so harsh, what the constraints of a Kaggle submission mean in practice, and how the strongest public agent, Tufa Labs’ Duck harness, plays. I finish with the weaknesses I found reading its code and what I plan to try. Every source is listed at the end.</p>

<h2 id="the-environment">The environment</h2>

<p>An ARC-AGI-3 game is a small interactive program. At every step the agent receives a <strong>frame</strong>: a grid of up to 64×64 cells, each holding one of 16 colors, plus some metadata (the current state, which actions are allowed, how many levels are complete). The agent replies with an <strong>action</strong>, the game updates, and a new frame comes back.</p>

<p>There are at most seven actions, and their meaning is never explained:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">RESET</code> starts or restarts the game.</li>
  <li><code class="language-plaintext highlighter-rouge">ACTION1</code> to <code class="language-plaintext highlighter-rouge">ACTION5</code> and <code class="language-plaintext highlighter-rouge">ACTION7</code> are simple actions. In many games they behave like up, down, left, right and “interact”, but the agent has to find that out.</li>
  <li><code class="language-plaintext highlighter-rouge">ACTION6</code> is a click: it takes an <code class="language-plaintext highlighter-rouge">(x, y)</code> coordinate on the grid.</li>
</ul>

<p>Each game has several <strong>levels</strong> of increasing difficulty, and a game is in one of three states: <code class="language-plaintext highlighter-rouge">NOT_FINISHED</code>, <code class="language-plaintext highlighter-rouge">WIN</code> or <code class="language-plaintext highlighter-rouge">GAME_OVER</code>. Some games have a visible timer or move budget that ends the level when it runs out. Nothing tells the agent what the goal is. It has to work out the rules and the objective from how the frames change, then solve the level, then carry what it learned into the next one.</p>

<p>The competition ships 25 public games for development, and they give a sense of the range:</p>

<ul>
  <li>They have between 6 and 10 levels each (median 7), 183 levels in total.</li>
  <li>13 are tagged as using both keyboard-style actions and clicks, 7 as click-only and 4 as keyboard-only.</li>
  <li>Many actions return an animation rather than a single frame. When I stepped through every public game with random actions, 14 of the 25 regularly returned multi-frame responses, with up to 42 frames for one action, and in most of those the intermediate frames showed things the final frame didn’t: a sliding block, a falling piece, a flash.</li>
</ul>

<p>The scored games are different. Evaluation uses 110 private games the agent has never seen: 55 decide the public leaderboard and the other 55 the private one that sets the final ranking. Nothing learned about a specific public game helps directly, which is the point.</p>

<p>The <a href="https://github.com/arcprize/arc-agi"><code class="language-plaintext highlighter-rouge">arc-agi</code></a> toolkit runs games locally and offline, and the <a href="https://github.com/arcprize/ARC-AGI-3-Agents">ARC-AGI-3-Agents</a> repository provides a template agent with two methods to implement: <code class="language-plaintext highlighter-rouge">choose_action</code>, which picks the next action from the latest frame, and <code class="language-plaintext highlighter-rouge">is_done</code>, which decides when to stop.</p>

<h2 id="how-scoring-works">How scoring works</h2>

<p>Scoring rewards two things: completing levels, and doing it with about as few actions as a person would. The <a href="https://docs.arcprize.org/methodology">scoring methodology</a> works in three steps.</p>

<ol>
  <li><strong>Per level.</strong> Each completed level is compared with a human baseline, the number of actions first-time human players needed. The level scores <code class="language-plaintext highlighter-rouge">(human actions / agent actions)²</code>, so matching the human count earns 1. Beating it earns little extra: the methodology caps a level at 1.15, and Kaggle caps overall scores at 100%. An uncompleted level scores 0.</li>
  <li><strong>Per game.</strong> Level scores are averaged with weights equal to the 1-indexed level number, so level 1 has weight 1, level 2 weight 2, and so on. The denominator is the sum of the weights of <em>all</em> levels in the game, finished or not.</li>
  <li><strong>Overall.</strong> The total is the average across games, reported as a percentage.</li>
</ol>

<p>Two features of this formula explain most of what follows.</p>

<p><strong>The square punishes exploration.</strong> An agent that needs three times as many actions as a person keeps only a ninth of that level’s score. An agent that needs ten times as many keeps one percent. The human baselines are small: across the public games, level 1 needs a median of 30 actions (as few as 7 in one game, at most 78), and a whole game needs a median of 638. An agent that probes each action a few times to see what it does has already spent a good part of the budget for the first level.</p>

<p><strong>The weights reward depth.</strong> In a 7-level game the weights sum to 28, so level 1 is worth 1/28 of the game, under 4%, and the last level is worth a quarter. Solving the first three levels at exactly human efficiency scores (1 + 2 + 3) / 28, about 21% of that game. Solving only level 1 at three times the human action count scores (1/9) / 28, about 0.4%.</p>

<p>So an agent that reliably solves a level or two of most games, slowly, lands where the leaderboard is now: around one percent. Moving the score means reaching deeper levels, and doing it efficiently.</p>

<h2 id="what-a-kaggle-submission-can-use">What a Kaggle submission can use</h2>

<p>The competition is notebook-only, and the constraints shape every design decision:</p>

<ul>
  <li><strong>Hardware.</strong> One NVIDIA RTX Pro 6000 with 96 GB of memory. The competition started on H100s and <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/695158">moved to the RTX Pro 6000 in May</a>; the machines are reserved for this competition’s notebooks.</li>
  <li><strong>Time.</strong> At most 9 hours for all 110 games, <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/697944">raised from 6 hours</a> with the hardware change. That’s under five minutes of wall-clock per game if they ran one after another, so agents run many games in parallel.</li>
  <li><strong>No internet.</strong> Models, wheels and code have to be attached as Kaggle datasets or models, and any model has to run locally. Frontier APIs are out.</li>
  <li><strong>Open weights.</strong> Prize winners must release their code and use open models, so the practical choice is an open-weight model small enough to serve on one GPU.</li>
  <li><strong>One submission a day.</strong> Each submission reruns the notebook against the private games, and the score comes back hours later.</li>
</ul>

<p>There are also two milestone prizes, on June 30 and September 30, for the leaderboard leaders on those dates who have published their notebooks.</p>

<p>The combination is unusual. Unlike most Kaggle competitions there’s no training set to fit and no labels, and unlike most agent benchmarks the agent can’t call a frontier model. It has to get as much reasoning as possible out of a mid-sized open model in a fixed amount of GPU time.</p>

<h2 id="what-has-worked-so-far">What has worked so far</h2>

<p>Four earlier systems set the direction.</p>

<p><strong>Stochastic Goose.</strong> Dries Smit’s agent <a href="https://medium.com/@dries.epos/1st-place-in-the-arc-agi-3-agent-preview-competition-49263f6287db">won the ARC-AGI-3 agent preview competition</a>, which ran on a handful of preview games before the official release.</p>

<p><strong>ARCgentica.</strong> <a href="https://www.symbolica.ai/blog/arc-agi-3">Symbolica’s agent</a> scored 36% the day after the official public games were released, using frontier models. It lets the model call itself recursively, in the style of <a href="https://arxiv.org/abs/2512.24601">Recursive Language Models</a>, so sub-agents can each work on part of a game with a limited number of actions. Its main lesson is that these models are good at solving problems by writing code, as in <a href="https://arxiv.org/abs/2402.01030">CodeAct</a>.</p>

<p><strong>RGB Agent.</strong> The <a href="https://blog.alexisfox.dev/arcagi3">RGB Agent</a> wraps a general-purpose coding harness, OpenCode, around the model instead of building an ARC-specific one. It keeps the full game history in a log file the model can search and read, which lets it analyze before acting and queue only a few actions at a time. It was the first to show near-human action efficiency on the three preview games.</p>

<p><strong>The Duck.</strong> Tufa Labs’ Duck harness, the successor to Stochastic Goose, <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/717133">won the first milestone</a> with a leaderboard score of 1.21% using Qwen 3.6 27B in FP8. Tufa published the notebook, the <a href="https://github.com/Tufalabs/duck-harness">code</a> and a <a href="https://tufalabs.ai/research/duck-harness">blog post</a>, and most public notebooks since then are forks of it. It’s worth understanding in detail.</p>

<h2 id="how-the-duck-plays">How the Duck plays</h2>

<p>The Duck gives the model one tool: a Python interpreter preloaded with the game’s state. There’s no fixed perception pipeline and no hand-written planner. The model writes code to inspect the board and to act, and the harness runs it.</p>

<p><strong>The game as Python variables.</strong> Each tool call starts a fresh interpreter with these variables already defined:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">current_frame</code> and <code class="language-plaintext highlighter-rouge">previous_frame</code>, which expose <code class="language-plaintext highlighter-rouge">.ascii</code> (the grid as letters, one per color), <code class="language-plaintext highlighter-rouge">.segmentation</code> (the board split into connected single-color objects), the step and the level.</li>
  <li><code class="language-plaintext highlighter-rouge">history</code> and <code class="language-plaintext highlighter-rouge">transitions</code>, the list of past actions and the frames before and after them.</li>
  <li><code class="language-plaintext highlighter-rouge">valid_actions</code>, the actions allowed right now.</li>
  <li><code class="language-plaintext highlighter-rouge">action(...)</code>, which executes one action or a whole list of them in the real game.</li>
</ul>

<p>Actions get readable names (<code class="language-plaintext highlighter-rouge">UP</code>, <code class="language-plaintext highlighter-rouge">DOWN</code>, <code class="language-plaintext highlighter-rouge">LEFT</code>, <code class="language-plaintext highlighter-rouge">RIGHT</code>, <code class="language-plaintext highlighter-rouge">SPACE</code>, <code class="language-plaintext highlighter-rouge">MOUSE</code>), and because <code class="language-plaintext highlighter-rouge">action</code> can be called in a loop, the model can write a search, such as a breadth-first search to a target, and execute its result in one call. Each call has a 30-second limit and output is capped at 4,096 characters.</p>

<p><strong>A world model in notes.</strong> The prompt asks the model to keep a running note with labeled sections: “World model:”, “Goal model:”, “Action model:”, “Plan:” and so on. The harness pulls those sections out of each reply and repeats them in the next prompt, so the model’s understanding survives even when older messages are dropped.</p>

<p><strong>A bounded context.</strong> The full system prompt is always included. Older turns are evicted to keep the input around 32K tokens, which lets a game run for hours at a steady speed.</p>

<p><strong>One image per turn.</strong> At the start of each turn the model also sees the current frame as an image, upscaled 4× to 256×256 pixels. Tufa found this works best with Qwen’s 16×16-pixel image patches. They tried showing several frames or whole animations and found the model couldn’t make use of them.</p>

<p><strong>Prompting did a lot of the work.</strong> Tufa’s write-up is candid that the prompt carries a lot of hard-won guidance. It tells the model not to treat an energy bar as the objective and not to invent goals like moving a block to a fixed position. It keeps the model from hallucinating robots or treating the game as an Atari title, and from printing whole boards into its own context. Custom tools didn’t help: in Tufa’s words, hand-crafting tools “seems to hinder the creative abilities of the model.” The largest gains came from better base models and from adding the image.</p>

<p>On the 25 public games, over 20 runs each, the Duck averaged <strong>1.60% ± 0.45</strong>. That spread is the other thing to know about this competition: the same notebook can score very differently from one run to the next, and Tufa reported their own best submission scoring as low as 0.77% on a rerun. With one submission a day, a single leaderboard score says little about whether a change helped.</p>

<h2 id="where-i-see-room">Where I see room</h2>

<p>I read through the public Duck notebooks and harness code to find what I’d change first. Three things stood out, and none of them needs a better model.</p>

<p><strong>Knowledge is thrown away too often.</strong> The harness clears the world, goal and action notes whenever a level is completed, and also whenever the game ends in <code class="language-plaintext highlighter-rouge">GAME_OVER</code>. In the public notebooks a game over restarts the current level rather than the whole game, so the agent is back on the same level it was just learning, having forgotten what it found. Clearing notes at a level change is more defensible, since layouts change, but what each action does usually carries over. Because later levels carry most of the weight, anything that speeds up level 3 onward is worth more than it looks.</p>

<p><strong>Time is split evenly regardless of progress.</strong> The public notebooks give every game the same fixed wall-clock budget. In the configurations I looked at, 28 games run at once with a little over two hours each, which in four waves just fits 110 games into 9 hours. A game stuck on level 1 after an hour holds its slot as long as a game that’s clearing a level every twenty minutes. Moving time from stalled games to progressing ones, or starting queued games sooner, is a scheduling change that doesn’t touch the agent at all.</p>

<p><strong>The model never sees animations.</strong> The harness keeps only the last frame of each action. In more than half the public games, the frames in between show how the action worked: which way something moved, whether a projectile hit anything, where a piece landed before snapping into place. Tufa found that passing whole animations as images didn’t help a model of this size. A compact text summary of what changed during the animation, added to the action’s result, might.</p>

<p>There are also two smaller points. The prompt never tells the model how many actions it has spent on the current level, even though efficiency is squared in the score. And every run is sampled without a fixed seed, which adds to the run-to-run noise that makes changes hard to evaluate.</p>

<h2 id="what-im-doing-next">What I’m doing next</h2>

<p>My plan is to test those changes one at a time against an unmodified baseline, on the public games, before spending any daily submissions on them:</p>

<ol>
  <li>Keep the world, goal and action notes through a game over, and carry the action and goal notes into each new level, marked as needing a quick recheck.</li>
  <li>Stop a game after it has gone about an hour without completing a level, and let games that are still progressing use the time freed up.</li>
  <li>Add a short summary of each action’s animation to its result.</li>
</ol>

<p>Because a single run is so noisy, I’ll compare games one by one between paired runs rather than looking only at the averages, and repeat runs where the result is close. I’ll write up what holds up.</p>

<h2 id="sources">Sources</h2>

<p><strong>Competition and environment</strong></p>

<ul>
  <li>ARC Prize, <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3">ARC Prize 2026 - ARC-AGI-3</a> on Kaggle: overview, rules, evaluation and data description.</li>
  <li>ARC Prize, <a href="https://arcprize.org/arc-agi/3">ARC-AGI-3</a> and <a href="https://docs.arcprize.org/">documentation</a>, including the <a href="https://docs.arcprize.org/methodology">scoring methodology</a>.</li>
  <li>ARC Prize, <a href="https://github.com/arcprize/arc-agi">arc-agi toolkit</a> and <a href="https://github.com/arcprize/ARC-AGI-3-Agents">ARC-AGI-3-Agents</a> on GitHub.</li>
  <li>Kaggle discussion: <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/695158">Upgraded accelerators</a> and <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/697944">Update on code requirements</a>.</li>
</ul>

<p><strong>Agents</strong></p>

<ul>
  <li>Tufa Labs (Bessis, Cottaar, Pressman, Smit, Tešnar, Viel), <a href="https://www.kaggle.com/competitions/arc-prize-2026-arc-agi-3/discussion/717133">Tufa Labs’ winning solution for ARC-AGI-3 Milestone 1</a>, the <a href="https://github.com/Tufalabs/duck-harness">duck-harness repository</a> and the <a href="https://tufalabs.ai/research/duck-harness">blog post</a>.</li>
  <li>Dries Smit, <a href="https://medium.com/@dries.epos/1st-place-in-the-arc-agi-3-agent-preview-competition-49263f6287db">1st place in the ARC-AGI-3 agent preview competition</a>.</li>
  <li>Symbolica, <a href="https://www.symbolica.ai/blog/arc-agi-3">ARC-AGI-3</a>.</li>
  <li><a href="https://blog.alexisfox.dev/arcagi3">RGB Agent</a> (blog.alexisfox.dev).</li>
</ul>

<p><strong>Background</strong></p>

<ul>
  <li>Wang et al., <a href="https://arxiv.org/abs/2402.01030">Executable Code Actions Elicit Better LLM Agents</a> (CodeAct).</li>
  <li>Zhang, Kraska and Khattab, <a href="https://arxiv.org/abs/2512.24601">Recursive Language Models</a>.</li>
</ul>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[What the ARC Prize 2026 ARC-AGI-3 competition asks for, why the scores are so low, how the best public agent works, and where I think there is room to improve.]]></summary></entry><entry><title type="html">MCP, MCP 2.0, SKILLS, and Sub-agents</title><link href="https://www.jayaprakash.net/blog/2026-08-01-mcp-skills-subagents/" rel="alternate" type="text/html" title="MCP, MCP 2.0, SKILLS, and Sub-agents" /><published>2026-08-01T00:00:00+00:00</published><updated>2026-08-01T00:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/mcp-skills-subagents</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-08-01-mcp-skills-subagents/"><![CDATA[<p>MCP, Skills, and Sub-agents solve three different problems. MCP connects Claude to things outside itself. A Skill tells Claude how you want a job done. A Sub-agent hands the job to a separate instance that works on its own.</p>

<h2 id="mcp-model-context-protocol">MCP (Model Context Protocol)</h2>

<p>MCP is a protocol for connecting a model to tools, databases, and data sources it never saw in training.</p>

<p>Without it, Claude works from training data with a cutoff date plus whatever you paste into the conversation. With it, Claude reaches:</p>

<ul>
  <li>Live data such as weather and stock prices</li>
  <li>Company systems such as a customer or product database</li>
  <li>Tools such as code interpreters, calculators, and mail systems</li>
  <li>Files on your own machine</li>
</ul>

<h3 id="how-a-request-flows">How a request flows</h3>

<ol>
  <li>You run an MCP server that fronts a tool or data source</li>
  <li>Claude sends it a request: fetch this, run that</li>
  <li>The server does the work and returns the result</li>
  <li>Claude uses the result in its answer</li>
</ol>

<h2 id="mcp-20">MCP 2.0</h2>

<p>MCP 2.0 revises the original design rather than replacing it. The headline change is a stateless architecture: each request carries everything the server needs, so the server keeps no session for you between calls.</p>

<p>Compare it to asking a librarian for a book. Under MCP 1.0 the librarian tracked your whole visit history to answer. Under 2.0 they answer the question in front of them.</p>

<p>Dropping per-client state buys three things:</p>

<ul>
  <li><strong>Speed.</strong> No session to look up or maintain.</li>
  <li><strong>Reliability.</strong> One failed request cannot corrupt the next.</li>
  <li><strong>Simpler servers.</strong> Less bookkeeping to write and get wrong.</li>
</ul>

<p>Build new servers on 2.0. Existing 1.0 servers keep working, so migrate them when you have a reason.</p>

<h2 id="skills">Skills</h2>

<p>A Skill is a set of written instructions for a task you repeat. It lives in a file and gives Claude the steps you want, in the order you want them.</p>

<p>A Skill holds:</p>

<ol>
  <li>Instructions in markdown</li>
  <li>A description that says when to use it</li>
  <li>The steps to follow</li>
</ol>

<p>A skill called <code class="language-plaintext highlighter-rouge">write-tech-news</code> might say: search for this week’s tech stories, confirm each one in a second source, draft the post, commit it, push to GitHub. Ask for the Skill and Claude runs those steps.</p>

<h3 id="skill-against-mcp">Skill against MCP</h3>

<p>MCP gives Claude reach: a database it can query, an API it can call. A Skill gives Claude a procedure: the steps you want followed. One is a new capability, the other is a job description.</p>

<h2 id="sub-agents">Sub-agents</h2>

<p>A Sub-agent is a separate Claude instance scoped to one kind of work. You start it with its own instructions, it works through the task on its own context, and it reports back.</p>

<p>Common ones:</p>

<ul>
  <li>A code reviewer that reads diffs and flags bugs</li>
  <li>A researcher that searches and summarizes</li>
  <li>A deploy agent that ships to servers</li>
  <li>An explorer that maps an unfamiliar codebase</li>
</ul>

<h3 id="sub-agent-against-skill">Sub-agent against Skill</h3>

<p>A Skill runs inside your conversation and spends your context. A Sub-agent runs beside it with a context of its own and hands back a result. A Skill says “here are the steps, follow them.” A Sub-agent says “go handle this and report when it’s done.”</p>

<h2 id="all-four-side-by-side">All four side by side</h2>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>MCP</th>
      <th>MCP 2.0</th>
      <th>Skill</th>
      <th>Sub-agent</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>What it is</strong></td>
      <td>Protocol for outside connections</td>
      <td>Stateless revision of MCP</td>
      <td>Written workflow</td>
      <td>Separate Claude instance</td>
    </tr>
    <tr>
      <td><strong>Gives you</strong></td>
      <td>Access to tools and data</td>
      <td>The same, with less overhead</td>
      <td>Repeatable steps</td>
      <td>Focused work off your context</td>
    </tr>
    <tr>
      <td><strong>Cost</strong></td>
      <td>Depends on the tool</td>
      <td>Lower than 1.0</td>
      <td>Cheap</td>
      <td>A second instance to run</td>
    </tr>
    <tr>
      <td><strong>Reach for it when</strong></td>
      <td>You need live data</td>
      <td>You are writing a new server</td>
      <td>You repeat a process</td>
      <td>A task deserves its own context</td>
    </tr>
  </tbody>
</table>

<h2 id="picking-one">Picking one</h2>

<p>Reach for MCP when Claude needs something it cannot see: a live feed, a database, a file on disk.</p>

<p>Reach for a Skill when you find yourself typing the same five instructions every week.</p>

<p>Reach for a Sub-agent when a task would flood your main conversation, or when two pieces of work can run at once.</p>

<h2 id="using-them-together">Using them together</h2>

<p>A weekly tech-news post uses all three. MCP 2.0 pulls the articles. The Skill holds the steps for turning them into a post. A Sub-agent runs the whole job while your main session does something else.</p>]]></content><author><name>Jayaprakash Sundararaj</name></author><summary type="html"><![CDATA[MCP, Skills, and Sub-agents solve three different problems. MCP connects Claude to things outside itself. A Skill tells Claude how you want a job done. A Sub-agent hands the job to a separate instance that works on its own.]]></summary></entry><entry><title type="html">Debugging LLM training</title><link href="https://www.jayaprakash.net/blog/2026-06-22-debugging-llm-training/" rel="alternate" type="text/html" title="Debugging LLM training" /><published>2026-06-22T18:00:00+00:00</published><updated>2026-06-22T18:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/debugging-llm-training</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-06-22-debugging-llm-training/"><![CDATA[<p>Most bugs in ordinary code announce themselves: an exception, a failing test, a wrong answer on the screen. Bugs in neural network training usually don’t. A wrong mask, a shifted label, or a learning rate ten times too high still produces a loss that goes down. You end up with a model that is somewhat worse than it should be, and nothing tells you so.</p>

<p>Andrej Karpathy made this point in <a href="https://karpathy.github.io/2019/04/25/recipe/">A Recipe for Training Neural Networks</a>, and it runs through every guide on the subject. This post collects what those guides, the published logbooks of large training runs, and a handful of papers say about finding these bugs in language models specifically. Where I can, I show what each check looked like in my own <a href="/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/">0.5B pretraining run</a>. Everything I cite is listed at the end.</p>

<p>Language models raise the stakes in two ways. Each attempt is expensive: one phase of my run took more than six hours, and the runs behind PaLM and OPT took weeks on hundreds to thousands of accelerators. And some failures only appear at scale or late in training, long after the cheap checks have passed. So almost everything below is about finding problems before the expensive part starts, or in its first few minutes, and then noticing the rest as early as possible.</p>

<h2 id="check-the-data-and-the-tokenizer">Check the data and the tokenizer</h2>

<p><strong>Read the data after it’s been processed.</strong> Karpathy’s first step is to spend real time with the raw data, and to look at it again at the last point before it enters the model. For an LLM that means decoding a batch of token IDs back into text. Tokenizer bugs, broken document boundaries and garbled encodings are obvious when you read them and invisible in a loss curve.</p>

<p><strong>Deduplicate.</strong> Web text repeats itself far more than you’d guess. <a href="https://arxiv.org/abs/2107.06499">Lee et al.</a> found a single 61-word sentence repeated more than 60,000 times in C4. Removing duplicates cut the rate at which models reproduced training text verbatim by a factor of ten, and reached the same accuracy in fewer steps. Duplicates also cause instability: the <a href="https://arxiv.org/abs/2501.00656">OLMo 2</a> team traced many of their loss spikes to documents containing the same short phrase repeated dozens of times, and filtering them out nearly eliminated the spikes.</p>

<p><strong>Check for overlap with your benchmarks.</strong> Lee et al. also found that over 4% of some standard validation sets appeared in the training data. The <a href="https://arxiv.org/abs/2005.14165">GPT-3 paper</a> flagged a benchmark example as contaminated if it shared any 13-token sequence with the training set, then compared scores on the clean subset. It also admits that a bug in their filtering left some overlap in place, and that retraining to fix it was too expensive. Run the check before training, while fixing it is still cheap.</p>

<p><strong>Look for tokens the model never learns.</strong> A tokenizer trained on different data from the model can contain tokens that almost never appear in training. Their embeddings stay close to their random starting point, and the model behaves erratically when it meets them. The best-known case is <a href="https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldmagikarp-plus-prompt-generation">SolidGoldMagikarp</a>, one of about 140 GPT-2 and GPT-3 tokens, many of them Reddit usernames, that made the models evade, insult or hallucinate. <a href="https://arxiv.org/abs/2405.05417">Land and Bartolo</a> show how to find such tokens automatically from the tokenizer and the model’s output weights, and found them across many open models. I trained my tokenizer on a million documents from the same corpus as the model, which keeps the mismatch small, but a quick scan for rarely used tokens is still worth doing.</p>

<p><strong>Know where documents start and end.</strong> Most pretraining pipelines pack documents end to end and cut fixed-length windows out of the stream, so a window can span the end of one document and the start of the next. Mine marks each document with start and end tokens, and attention can still reach across that boundary. That’s a common and reasonable choice, but it’s a choice. Make it deliberately, and make sure evaluation formats text the same way (more on that below).</p>

<h2 id="check-the-model-and-the-loss">Check the model and the loss</h2>

<p><strong>Know what the loss should be at step 0.</strong> A freshly initialized model should be close to guessing uniformly, so its loss should be about the natural log of the vocabulary size. Hugging Face’s <a href="https://huggingface.co/learn/llm-course/en/chapter8/4">LLM course</a> makes the same point for classifiers: work out the loss of random guessing and compare. With my 32,000-token vocabulary that’s ln(32,000) ≈ 10.37. A much higher starting loss usually means the output layer’s initialization is off; a much lower one can mean the model is seeing the answer. I only started logging at step 10, where the loss was already 8.82, so I can’t show my own step-0 value. Log it.</p>

<p><strong>Test that the model can’t see the future.</strong> An autoregressive model must predict each token from earlier tokens only. If the attention mask leaks, training loss looks wonderful and the model is useless at generation. Karpathy suggests checking this with gradients: the gradient of an output should only reach inputs it is allowed to depend on. My test does the same check more simply: change the last token and confirm no earlier prediction moves.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">test_causal_masking</span><span class="p">():</span>
    <span class="sh">"""</span><span class="s">Changing a future token must not affect earlier logits.</span><span class="sh">"""</span>
    <span class="n">model</span> <span class="o">=</span> <span class="nc">Transformer</span><span class="p">(</span><span class="nf">tiny_cfg</span><span class="p">()).</span><span class="nf">eval</span><span class="p">()</span>
    <span class="n">x</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
    <span class="n">y</span> <span class="o">=</span> <span class="n">x</span><span class="p">.</span><span class="nf">clone</span><span class="p">()</span>
    <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">100</span>
    <span class="k">with</span> <span class="n">torch</span><span class="p">.</span><span class="nf">no_grad</span><span class="p">():</span>
        <span class="n">a</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
        <span class="n">b</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
    <span class="k">assert</span> <span class="n">torch</span><span class="p">.</span><span class="nf">allclose</span><span class="p">(</span><span class="n">a</span><span class="p">[:,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">b</span><span class="p">[:,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-5</span><span class="p">)</span>
</code></pre></div></div>

<p>The related bug is an off-by-one in the targets. Each target should be the input shifted left by one token. If inputs and targets line up exactly, the model only has to copy its input, and the loss falls far below anything plausible almost immediately.</p>

<p><strong>Overfit a single batch.</strong> Every guide I read agrees on this one. A model that can’t drive its loss to near zero on one repeated batch has a bug in the model, the loss, or the optimizer step. Pierce Freeman’s <a href="https://pierce.dev/notes/debugging-tips-for-neural-network-training">debugging tips</a> suggest building up from one example to two, then five, so you see the capacity you expect before you scale up. The LLM course adds a practical warning: throw the model away afterwards and build a fresh one, or your real run starts from weights that have memorized one batch.</p>

<p><strong>Scale the initialization with depth.</strong> Each transformer block adds its output to a running sum, so with standard initialization the sum grows with the number of layers. GPT-2 and Karpathy’s <a href="https://github.com/karpathy/build-nanogpt">build-nanogpt</a> shrink the initial weights of each block’s output projection by 1/√(2 × layers) to compensate; I do the same, giving 0.02/√48 for my 24 layers. The BLOOM team found the usual 0.02 standard deviation too large at 100B+ parameters and used a much smaller value, as described in Stas Bekman’s <a href="https://github.com/stas00/ml-engineering">ML Engineering</a> book. <a href="https://arxiv.org/abs/2312.16903">Takase et al.</a> show the other side: if the embeddings start too small relative to the rest, normalization layers amplify their gradients and training spikes. Scaling the embeddings up, or normalizing them, fixed it.</p>

<p><strong>Be deliberate about weight decay.</strong> Weight decay on normalization gains and biases pulls them toward zero for no benefit. My optimizer decays only weight matrices. OLMo 2 goes further and also leaves the embeddings undecayed. Either way, print the parameter groups once and check each parameter landed where you meant.</p>

<p><strong>Write it twice and compare.</strong> Freeman’s tip is to write a slow, obvious version of any tricky tensor code next to the fast one and check they agree. I used the same idea when converting checkpoints to the Hugging Face Llama format for evaluation: the export script runs both models on the same random tokens and fails if their outputs differ. The largest difference was 0.0039, which is bf16 rounding noise. Without that check, a transposed weight would have quietly lowered every benchmark score.</p>

<p>A check like mine tells you <em>that</em> two implementations differ, not <em>where</em>. For that, Transformers has <a href="https://huggingface.co/docs/transformers/en/internal/model_debugging_utils"><code class="language-plaintext highlighter-rouge">model_addition_debugger_context</code></a>, written for people porting models into the library. Wrap one forward pass in it and it records the shape, dtype, mean, standard deviation, minimum and maximum of every module’s inputs and outputs in a JSON file, optionally with the full tensors saved alongside. Trace both implementations on the same input and compare the files: the first module whose numbers disagree is where to look. By default it keeps only the first and last layers; pass <code class="language-plaintext highlighter-rouge">do_prune_layers=False</code> to record all of them.</p>

<h2 id="check-the-training-loop">Check the training loop</h2>

<p><strong>Normalize the loss correctly across gradient accumulation.</strong> When a batch is too big for memory, you split it into micro-batches and add up their gradients. For this to match the full batch, each micro-batch’s loss has to be weighted by its share of the batch’s tokens. In October 2024, <a href="https://huggingface.co/blog/gradient_accumulation">Hugging Face</a> and <a href="https://unsloth.ai/blog/gradient">Unsloth</a> described a bug in the widely used Transformers trainer: it averaged each micro-batch’s mean loss, which gives short, padded sequences too much weight. Training with accumulation produced a noticeably higher loss than the same batch without it. My loop simply divides each micro-batch’s loss by the number of micro-batches, 64, as nanoGPT does. That’s correct here only because every window has exactly 2,048 tokens and nothing is padded. For fine-tuning on variable-length examples, the same line would be the bug.</p>

<p><strong>Give each GPU its own random stream.</strong> With several GPUs, each one must draw different data. I seed each rank’s data sampler with the base seed plus its rank. Hugging Face’s <a href="https://huggingfacetb-smol-training-playbook.hf.space/">Smol Training Playbook</a> describes the reverse mistake in the SmolLM3 run: every tensor-parallel rank shared one seed, so their slices of the weights started out correlated. The run fell behind a comparison run and had to be restarted after a trillion tokens.</p>

<p><strong>Make runs and evaluations repeatable.</strong> Fix the random seed so two runs of the same config match. Evaluate on the same data every time: my validation loss resets its sampler before each evaluation, so a change in validation loss reflects the model, not a different set of windows.</p>

<p><strong>Use bf16 rather than fp16.</strong> fp16 can’t represent large values, and a single overflow turns the loss into NaN. fp16 training needs a loss scaler, which my loop enables only when fp16 is selected. The BLOOM team credits much of their final run’s stability to switching to bf16 after their earlier fp16 attempts diverged, and the <a href="https://mit-mi.github.io/how2ai-course/spring2025/schedule/Debugging%20Tips.pdf">MIT course checklist</a> gives the same advice for anyone seeing NaNs.</p>

<p><strong>Log gradient norms before clipping.</strong> Clipping caps the gradient norm, so a norm logged after clipping can never show you a problem above the cap. Google’s <a href="https://github.com/google-research/tuning_playbook">Deep Learning Tuning Playbook</a> suggests logging the unclipped norm and setting the clip threshold around the 90th percentile of what you observe. If most steps are clipped, the clip is doing the job the learning rate should be doing.</p>

<p><strong>Run every code path once before the long run.</strong> A crash in the evaluation code or in checkpoint saving usually shows up only when that code first runs, which may be hours in. The LLM course recommends running evaluation on its own before training starts, and more generally walking through the pipeline in the order the trainer does: one item from the dataset, decoded; one batch from the loader; a forward pass; the loss; a backward pass; one optimizer step. Only then start the full run. The same logic applies to anything that happens on a schedule. Evaluate, sample, save a checkpoint and load it back in the first few minutes, not for the first time at step 2,000.</p>

<p><strong>Reproduce confusing GPU errors on the CPU.</strong> CUDA runs asynchronously, so an error is often reported by a later operation than the one that caused it, with an unhelpful message. The LLM course’s advice is to move the model and one batch to the CPU and run the same step there, where the error points at the real line. My unit tests all run a tiny model on the CPU for the same reason: they’re fast, and when they fail they fail clearly.</p>

<h2 id="log-more-than-the-loss">Log more than the loss</h2>

<p>Loss is one number summarizing millions of parameters. By the time it looks wrong, the cause usually started much earlier. Freeman recommends logging per-layer gradient and weight statistics so you can see a problem at its source. My training loop records these every 50 steps:</p>

<table>
  <thead>
    <tr>
      <th>Signal</th>
      <th>What going wrong looks like</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Non-finite gradient count</td>
      <td>Any value above zero: an overflow or a bad batch, usually right before the loss turns to NaN</td>
    </tr>
    <tr>
      <td>Gradient norm per layer, before clipping</td>
      <td>One layer’s norm growing or collapsing away from the rest</td>
    </tr>
    <tr>
      <td>Fraction of steps clipped</td>
      <td>Clipping on most steps late in training, which means the learning rate is too high</td>
    </tr>
    <tr>
      <td>Weight update size, ‖Δw‖ / ‖w‖</td>
      <td>Not tracking the learning-rate schedule, or far larger in one layer</td>
    </tr>
    <tr>
      <td>Activation size after each block</td>
      <td>Growing without bound with depth or over time</td>
    </tr>
    <tr>
      <td>Largest output logit</td>
      <td>Climbing steadily, the early sign of output-logit divergence</td>
    </tr>
    <tr>
      <td>Prediction entropy</td>
      <td>Falling toward zero, which shows up as the model repeating itself</td>
    </tr>
    <tr>
      <td>Loss spikes</td>
      <td>Loss above its moving average by more than four standard deviations</td>
    </tr>
  </tbody>
</table>

<p>In my run these stayed quiet. There were no non-finite gradients in 4,000 steps, and clipping triggered on 21 of the 412 logged steps: 14 during the 200-step warmup and none after step 540. The update size followed the schedule: its median fell from 0.18 around step 550 to 0.03 by step 2050, then more than doubled when the learning rate restarted for phase 2. The largest output logit stayed between 19 and 23 for the whole run. My post on the 0.5B run has a <a href="/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/#training-health">heatmap of the per-layer gradient norms</a>.</p>

<p>None of these needed action this time. That’s the point: they cost almost nothing to log, and if something had gone wrong they would have shown where.</p>

<p>Throughput is worth watching too. It isn’t a model metric, but a drop usually means something else is wrong. My run held 85% of the GPU’s peak throughput throughout. In the Smol Training Playbook, drops in throughput lined up with spikes in disk read latency.</p>

<h2 id="track-down-nans-and-overflows">Track down NaNs and overflows</h2>

<p>A non-finite value tells you that something broke, but not where. The Transformers <a href="https://huggingface.co/docs/transformers/en/debugging">debugging guide</a> describes a tool for that, <code class="language-plaintext highlighter-rouge">DebugUnderflowOverflow</code>. With the Trainer you turn it on with <code class="language-plaintext highlighter-rouge">debug="underflow_overflow"</code>; in your own loop you wrap the model in it. It hooks every module’s forward pass, checks inputs, outputs and weights, and when it finds an inf or NaN it stops and prints the last several modules it ran, each with the smallest and largest absolute values it saw. Reading back up that list shows where values started to grow.</p>

<p>The guide’s worked example is a T5 model training in fp16. The largest value coming out of one feed-forward block was about 62,700. fp16 can’t represent anything above 65,504, and the dropout that followed scales its surviving values up, which pushed them past the limit. Its fixes are to run that one block in fp32 by switching autocast off inside it, or to turn mixed precision off entirely. When the problem is inside a module rather than between modules, a companion function, <code class="language-plaintext highlighter-rouge">detect_overflow</code>, can be dropped in after any intermediate step.</p>

<p>Two options help when the failure comes later in training. <code class="language-plaintext highlighter-rouge">trace_batch_nums</code> records those same minimum and maximum values for chosen batches even when nothing has overflowed yet, so you can compare a batch just before the failure with one from much earlier and see which layer drifts first. <code class="language-plaintext highlighter-rouge">abort_after_batch_num</code> stops the run once you have what you need.</p>

<p>The same guide explains a NaN that catches many people out: a model pretrained in bf16, as many TPU-trained models were, often overflows when run or fine-tuned in fp16, because its activations were never kept inside fp16’s range. Use bf16 or fp32 for it instead. bf16 has the same range as fp32, which is why overflows like the T5 one largely disappear with it. What bf16 gives up is precision.</p>

<p>I never needed this tool, because my non-finite count stayed at zero, but it’s the next step if that count ever goes above zero.</p>

<h2 id="understand-loss-spikes">Understand loss spikes</h2>

<p>A loss spike is a sudden jump in training loss, sometimes recovering by itself and sometimes sending the run off the rails. They’re the most documented failure in large-scale pretraining, and the published accounts agree on more than you might expect.</p>

<p><strong>They aren’t just bad data.</strong> Training the 540B-parameter <a href="https://arxiv.org/abs/2204.02311">PaLM</a> model hit about 20 spikes despite gradient clipping. Each time, the team restarted from a checkpoint about 100 steps before the spike and skipped the next 200 to 500 batches. When they replayed the same batches from a different checkpoint, no spike appeared. The cause was the combination of that data with that state of the model.</p>

<p><strong>Gradient norms warn first.</strong> In OLMo 2, gradient-norm spikes came before loss spikes and became more frequent as models grew. That’s another reason to log the unclipped norm.</p>

<p><strong>Many of them are reproducible at small scale.</strong> <a href="https://arxiv.org/abs/2309.14322">Wortsman et al.</a> showed that small models trained at high learning rates show the same two failures as large ones. In the first, attention logits grow until attention collapses onto a single token; normalizing queries and keys (qk-layernorm) fixes it. In the second, output logits drift upward; a small extra loss term that penalizes their overall size, called z-loss, fixes it. PaLM and Wortsman et al. weight z-loss at 1e-4; OLMo 2 uses 1e-5. The same paper suggests longer warmup and a smaller AdamW epsilon, whose default can become as large as the gradients themselves at scale. The practical upshot: sweep the learning rate on a small model, and see where it breaks, before committing to the big one.</p>

<p><strong>They can come from the data loader.</strong> The SmolLM3 run in the Smol Training Playbook had spikes because its loader read sequences in order within each document, so one very long, unusual file could fill a whole batch. Shuffling at the sequence level fixed it.</p>

<p><strong>The fixes that recur.</strong> Meta’s <a href="https://github.com/facebookresearch/metaseq/tree/main/projects/OPT/chronicles">OPT-175B logbook</a> records weeks of restarts. Along the way, the team lowered gradient clipping from 2.5 to 1.0, raised weight decay to 0.1, lowered Adam’s β2 to 0.95, and cut the learning rate when gradient and activation norms began to drift. Those are the same values my run started with: clipping at 1.0, weight decay 0.1, β2 0.95, and bf16. They’re now common defaults for GPT-style pretraining. The Tuning Playbook adds two cheap checks: sweep warmup length over several orders of magnitude, and run a few hundred steps at twice your chosen learning rate to see how close to the edge you are.</p>

<p>My spike detector flags any logged loss more than four standard deviations above its moving average. It didn’t fire in 4,000 steps, which at my scale and learning rate is what the literature above would predict.</p>

<h2 id="read-what-the-model-writes">Read what the model writes</h2>

<p>Freeman suggests saving the model’s predictions at regular intervals, and Karpathy suggests watching how they change. For a language model the easiest version is to generate text from a few fixed prompts every few hundred steps, always with the same settings, and read it. Here’s what mine produced with greedy decoding:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: right">Step</th>
      <th>Prompt</th>
      <th>Continuation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: right">200</td>
      <td>The history of</td>
      <td>the United States of the United States of the United States…</td>
    </tr>
    <tr>
      <td style="text-align: right">1000</td>
      <td>The history of</td>
      <td>the United States is a fascinating one. It is a fascinating story of the American Revolution, the American Revolution…</td>
    </tr>
    <tr>
      <td style="text-align: right">4000</td>
      <td>The history of</td>
      <td>the United States is a fascinating one. The first American president was George Washington…</td>
    </tr>
    <tr>
      <td style="text-align: right">4000</td>
      <td>Water boils at</td>
      <td>a rate of about 1/2 inch per year…</td>
    </tr>
    <tr>
      <td style="text-align: right">4000</td>
      <td>def fibonacci(n):</td>
      <td>a small, usually white, glandular tissue that is located in the back of the neck…</td>
    </tr>
  </tbody>
</table>

<p>The first three rows show the usual progression: pure repetition, then fluent sentences that loop, then sentences that stay on topic. The last two are more useful. The model still can’t state a simple fact, which matches its chance-level MMLU score. And it has never produced code for the code prompt. That’s not a bug in training; my corpus is educational web text with almost no code. The samples show that more directly than any benchmark score, and code is first on my list of data to add.</p>

<h2 id="evaluate-the-way-you-trained">Evaluate the way you trained</h2>

<p><strong>Format evaluation text like training text.</strong> My training documents all start with a start-of-text token, so my evaluations add it too. Leave it out and every benchmark is measured on inputs the model never saw in training. Check the same for end-of-text tokens, chat templates after fine-tuning, and whitespace handling in the tokenizer.</p>

<p><strong>Verify every conversion.</strong> Benchmark harnesses usually load models in a standard format, so you’re often evaluating a converted copy rather than the model you trained. The export check described above is what makes my scores trustworthy.</p>

<p><strong>Pick benchmarks that move at your scale.</strong> Small models sit at chance on many popular benchmarks. HellaSwag and ARC-Challenge barely moved in my run, while LAMBADA rose from 0.02 to 0.21, so that’s the one to watch between checkpoints. A benchmark stuck at chance only adds noise to an average.</p>

<p><strong>Choose baselines carefully.</strong> Comparing against a public model at the same number of training tokens is a useful control, but check where that checkpoint was in its own training. Pythia’s 1-billion-token checkpoint is still inside its learning-rate warmup, which makes it a weak comparison; its 2-billion-token checkpoint is a fairer one.</p>

<h2 id="long-runs-resuming-repeating-data-and-hardware">Long runs: resuming, repeating data, and hardware</h2>

<p><strong>Resume the whole state, not just the weights.</strong> A resumed run needs the optimizer state, the step count for the learning-rate schedule, and the data position. Restarting AdamW without its state resets its running averages, and the first steps after the resume take much larger updates than they should. Restarting the data sampler with its original seed replays the exact windows the run began with. I reseed the sampler from the step number on resume to avoid that.</p>

<p><strong>Restarting a learning-rate schedule has a cost.</strong> Karpathy warns against trusting a schedule’s defaults. I learned a version of that when I extended my run: warming a cosine schedule back up to continue training undid part of the previous annealing and cost more than 500 steps of progress. A warmup-stable-decay schedule, which holds the learning rate constant and decays it only at the end, avoids this.</p>

<p><strong>An epoch isn’t always a pass over the data.</strong> My loader samples random windows rather than walking through the corpus in order. After 1.03 “epochs” of tokens, the arithmetic of random sampling says about 36% of the corpus has never been seen, while about 28% has been seen twice or more. That’s fine, but it means a train/validation gap can open before you reach the epoch count you expect. How much repetition hurts is well studied: <a href="https://arxiv.org/abs/2305.16264">Muennighoff et al.</a> found that up to about four epochs of repeated data are nearly as good as fresh data, with returns falling off quickly after that.</p>

<p><strong>Plan for hardware failure.</strong> Most of OPT’s early restarts came from hardware problems, not modeling ones. At my scale the equivalent is simpler but just as real. My rented machine’s disk disappears when the instance is destroyed, so I copied the phase 1 weights to another machine as soon as it finished. I ran training inside tmux so a dropped SSH connection wouldn’t kill it. And I checked that there was enough free disk space before starting a phase, since running out mid-save can corrupt the checkpoint you most need.</p>

<h2 id="debug-the-distributed-setup">Debug the distributed setup</h2>

<p>My run used a single GPU, so this section is what I’d check first rather than what I saw. Distributed training adds failure modes that have nothing to do with the model.</p>

<p><strong>Test communication on its own.</strong> Before debugging a multi-GPU training script, check that the GPUs can talk to each other at all. The Transformers debugging guide links a small script, <code class="language-plaintext highlighter-rouge">torch-distributed-gpu-test.py</code>, that you launch the same way as your training job; it prints OK for each process that can communicate and allocate memory. Setting <code class="language-plaintext highlighter-rouge">NCCL_DEBUG=INFO</code> makes the communication library log what it’s doing, which is usually enough to spot a wrong network interface or a failed connection.</p>

<p><strong>Catch shape mismatches before they hang.</strong> Collective operations like gather and reduce expect every process to contribute a tensor of the same shape. If one process sends something different, the job doesn’t fail; it waits, and the only symptom is a timeout, often many minutes later. Accelerate’s <a href="https://huggingface.co/docs/accelerate/main/en/usage_guides/debug">debug mode</a>, turned on with <code class="language-plaintext highlighter-rouge">accelerate launch --debug</code> or <code class="language-plaintext highlighter-rouge">ACCELERATE_DEBUG_MODE=1</code>, checks shapes across processes before each such operation and raises an error that lists every process’s shape instead. It costs very little, so it’s worth leaving on while a new setup is being brought up.</p>

<p><strong>Check that every rank does the same number of steps.</strong> A related hang in hand-written loops comes from one process skipping or adding a step, for example because its share of the data ran out first. The processes then wait at different synchronization points. Sampling random windows, as my loader does, sidesteps this because no process can run out.</p>

<p><strong>Rule out the framework.</strong> For DeepSpeed, the Transformers guide’s first advice is to rerun without it: if the error goes away, it’s in the DeepSpeed setup, not the model. Two of its specific notes are worth remembering. A process that dies at startup with no traceback has usually been killed by the operating system for using too much CPU memory, often because optimizer or parameter offloading to the CPU is switched on. And repeated <code class="language-plaintext highlighter-rouge">OVERFLOW!</code> messages in fp16 mean the loss scaler can’t find a workable scale; the guide suggests a higher starting scale.</p>

<h2 id="match-the-symptom-to-the-cause">Match the symptom to the cause</h2>

<p>The MIT checklist and Josh Tobin’s <a href="http://josh-tobin.com/troubleshooting-deep-neural-networks.html">Troubleshooting Deep Neural Networks</a> both map what you see in the curves to the likely cause. Adapted for pretraining, with what I added from the sources above:</p>

<table>
  <thead>
    <tr>
      <th>What you see</th>
      <th>Likely cause</th>
      <th>First thing to try</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Loss becomes NaN</td>
      <td>Overflow in fp16, bad input, or uninitialized weights</td>
      <td>Find the first module with an inf or NaN; switch to bf16; check the batch and the weights</td>
    </tr>
    <tr>
      <td>Loss rises from the start</td>
      <td>A sign error in the loss or the update</td>
      <td>Test the loss on inputs with a known answer</td>
    </tr>
    <tr>
      <td>Loss barely moves</td>
      <td>Learning rate too low, or the model isn’t getting the gradient</td>
      <td>Raise the learning rate; check gradient norms per layer</td>
    </tr>
    <tr>
      <td>Loss is noisy or climbing</td>
      <td>Learning rate too high</td>
      <td>Lower it; add gradient clipping; lengthen warmup</td>
    </tr>
    <tr>
      <td>Sudden loss spikes</td>
      <td>High learning rate with a particular batch, repeated text, or growing logits</td>
      <td>Restart from before the spike and skip ahead; filter repeats; add qk-layernorm or z-loss</td>
    </tr>
    <tr>
      <td>Gradient norm drifting upward</td>
      <td>The run is edging toward instability</td>
      <td>Lower the learning rate before the loss reacts</td>
    </tr>
    <tr>
      <td>Loss jumps after resuming</td>
      <td>Optimizer state or data position not restored</td>
      <td>Check what the checkpoint actually contains</td>
    </tr>
    <tr>
      <td>Throughput drops</td>
      <td>Data loading or disk, not the model</td>
      <td>Check disk and loader latency</td>
    </tr>
    <tr>
      <td>Unclear CUDA error</td>
      <td>The asynchronous GPU reported a later operation</td>
      <td>Rerun the same step on the CPU</td>
    </tr>
    <tr>
      <td>Multi-GPU job hangs until a timeout</td>
      <td>Tensor shapes differ across processes, ranks are out of step, or the network is misconfigured</td>
      <td>Turn on Accelerate’s debug mode; run the communication test with <code class="language-plaintext highlighter-rouge">NCCL_DEBUG=INFO</code></td>
    </tr>
    <tr>
      <td>Process killed at startup with no traceback</td>
      <td>Out of CPU memory, often from offloading</td>
      <td>Turn off CPU offloading or estimate memory first</td>
    </tr>
    <tr>
      <td>Training loss far below validation</td>
      <td>Overfitting, which in pretraining usually means too many passes over the data</td>
      <td>More data, or fewer epochs</td>
    </tr>
    <tr>
      <td>Validation loss suspiciously low</td>
      <td>The validation data leaked into training, or the targets aren’t shifted</td>
      <td>Deduplicate across the split; check the target offset</td>
    </tr>
  </tbody>
</table>

<p>One entry needs a pretraining caveat. In the first pass over the corpus, training and validation loss should sit close together because the model hasn’t seen either. A gap only means something once the data starts repeating, which with random sampling happens sooner than the epoch count suggests.</p>

<p>Not every jump is a bug, either. My validation loss rose when phase 2 started, because I deliberately raised the learning rate again. Knowing what each change should do to the curves is what lets you tell an expected bump from a real problem.</p>

<h2 id="change-one-thing-at-a-time">Change one thing at a time</h2>

<p>Karpathy’s advice for the model itself is to start from something known to work and resist being creative early. Copy a standard architecture, use Adam at a sensible learning rate, and add complexity one piece at a time, checking that each piece helps. I did exactly that: a standard Llama-style decoder and AdamW with a peak learning rate of 3e-4. It’s also why my results can be compared with Pythia’s at all. If I had changed the architecture and the data and the schedule at once, I couldn’t say which change mattered.</p>

<p>Small runs are how you afford that discipline. Wortsman et al. show that many large-scale failures can be reproduced in small models, and the Tuning Playbook is built around short, cheap experiments that each answer one question. Test a change small, then scale it.</p>

<h2 id="the-short-version">The short version</h2>

<p>Data and tokenizer:</p>

<ul>
  <li>A decoded batch reads as the text you expected.</li>
  <li>Exact and near duplicates are removed, including long runs of repeated text.</li>
  <li>No benchmark example shares a 13-token sequence with the training data.</li>
  <li>No tokens in the vocabulary are so rare the model never learns them.</li>
</ul>

<p>Model and loss:</p>

<ul>
  <li>Loss at step 0 is close to ln(vocabulary size).</li>
  <li>Changing a future token doesn’t change earlier predictions, and targets are shifted by one.</li>
  <li>The model drives its loss to near zero on one batch.</li>
  <li>Output projections are scaled down with depth, and the parameter groups for weight decay are what you intended.</li>
  <li>Anything written twice, such as a checkpoint conversion, gives matching outputs; if not, trace both to find the first layer that differs.</li>
  <li>After the overfitting test, the real run starts from a fresh model.</li>
</ul>

<p>Training loop:</p>

<ul>
  <li>Gradient accumulation weights each micro-batch by its share of tokens.</li>
  <li>Each GPU has its own random stream, and runs are repeatable from a seed.</li>
  <li>Training uses bf16, and gradient norms are logged before clipping.</li>
  <li>Evaluation, sampling, and saving and reloading a checkpoint have all run once in the first few minutes.</li>
  <li>For multi-GPU runs, the communication test passes and shape checks are on while the setup is new.</li>
</ul>

<p>During the run:</p>

<ul>
  <li>Log per-layer gradient norms, update sizes, output-logit size and non-finite counts, not just the loss.</li>
  <li>Generate from fixed prompts on a schedule and read the output.</li>
  <li>Know in advance how you’ll respond to a loss spike, and which tool you’ll reach for if a NaN appears.</li>
  <li>Before reacting to a change in the curves, ask whether you caused it.</li>
</ul>

<p>Evaluation and long runs:</p>

<ul>
  <li>Evaluation text is formatted like training text.</li>
  <li>Checkpoints save the optimizer, schedule and data position, and live somewhere that survives the machine.</li>
</ul>

<h2 id="sources">Sources</h2>

<p>Guides:</p>

<ul>
  <li>Andrej Karpathy, <a href="https://karpathy.github.io/2019/04/25/recipe/">A Recipe for Training Neural Networks</a>, 2019.</li>
  <li>Josh Tobin, <a href="http://josh-tobin.com/troubleshooting-deep-neural-networks.html">Troubleshooting Deep Neural Networks</a>, Full Stack Deep Learning, 2019.</li>
  <li>Pierce Freeman, <a href="https://pierce.dev/notes/debugging-tips-for-neural-network-training">Debugging Tips for Neural Network Training</a>, 2022.</li>
  <li>Varun Godbole, George E. Dahl, Justin Gilmer, Christopher J. Shallue and Zachary Nado, <a href="https://github.com/google-research/tuning_playbook">Deep Learning Tuning Playbook</a>, Google Research, 2023.</li>
  <li>Stas Bekman, <a href="https://github.com/stas00/ml-engineering">Machine Learning Engineering Open Book</a>, 2023 onward.</li>
  <li>MIT MAS.S60, How to AI (Almost) Anything, <a href="https://mit-mi.github.io/how2ai-course/spring2025/schedule/Debugging%20Tips.pdf">debugging checklist slides</a>, spring 2025.</li>
  <li>Loubna Ben Allal, Lewis Tunstall, Nouamane Tazi et al., <a href="https://huggingfacetb-smol-training-playbook.hf.space/">The Smol Training Playbook</a>, Hugging Face, 2025.</li>
</ul>

<p>Training logs and reports:</p>

<ul>
  <li>Susan Zhang, Stephen Roller, Naman Goyal et al., <a href="https://github.com/facebookresearch/metaseq/tree/main/projects/OPT/chronicles">OPT-175B chronicles and logbook</a>, Meta AI, 2022.</li>
  <li>BigScience, <a href="https://github.com/bigscience-workshop/bigscience/blob/master/train/tr11-176B-ml/chronicles.md">BLOOM-176B training chronicles</a>, 2022.</li>
  <li>Aakanksha Chowdhery et al., <a href="https://arxiv.org/abs/2204.02311">PaLM: Scaling Language Modeling with Pathways</a>, 2022.</li>
  <li>Team OLMo, <a href="https://arxiv.org/abs/2501.00656">2 OLMo 2 Furious</a>, Allen Institute for AI, 2024.</li>
  <li>Andrej Karpathy, <a href="https://github.com/karpathy/build-nanogpt">build-nanogpt</a>, 2024.</li>
</ul>

<p>Papers:</p>

<ul>
  <li>Tom Brown et al., <a href="https://arxiv.org/abs/2005.14165">Language Models are Few-Shot Learners</a>, 2020.</li>
  <li>Katherine Lee et al., <a href="https://arxiv.org/abs/2107.06499">Deduplicating Training Data Makes Language Models Better</a>, 2021.</li>
  <li>Jessica Rumbelow and mwatkins, <a href="https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldmagikarp-plus-prompt-generation">SolidGoldMagikarp (plus, prompt generation)</a>, 2023.</li>
  <li>Niklas Muennighoff et al., <a href="https://arxiv.org/abs/2305.16264">Scaling Data-Constrained Language Models</a>, 2023.</li>
  <li>Mitchell Wortsman et al., <a href="https://arxiv.org/abs/2309.14322">Small-scale proxies for large-scale Transformer training instabilities</a>, 2023.</li>
  <li>Sho Takase, Shun Kiyono, Sosuke Kobayashi and Jun Suzuki, <a href="https://arxiv.org/abs/2312.16903">Spike No More: Stabilizing the Pre-training of Large Language Models</a>, 2023.</li>
  <li>Sander Land and Max Bartolo, <a href="https://arxiv.org/abs/2405.05417">Fishing for Magikarp: Automatically Detecting Under-trained Tokens in Large Language Models</a>, 2024.</li>
</ul>

<p>Hugging Face documentation:</p>

<ul>
  <li><a href="https://huggingface.co/docs/transformers/en/debugging">Debugging</a>, Transformers documentation. Earlier versions, such as <a href="https://huggingface.co/docs/transformers/v4.13.0/en/debugging">v4.13</a> and <a href="https://huggingface.co/docs/transformers/v4.49.0/en/debugging">v4.49</a>, cover the same overflow tools.</li>
  <li><a href="https://huggingface.co/docs/transformers/en/internal/model_debugging_utils">Model debugging toolboxes</a>, Transformers documentation.</li>
  <li><a href="https://huggingface.co/learn/llm-course/en/chapter8/4">Debugging the training pipeline</a>, Hugging Face LLM course, chapter 8.</li>
  <li><a href="https://huggingface.co/docs/accelerate/main/en/usage_guides/debug">Debugging distributed operations</a>, Accelerate documentation.</li>
</ul>

<p>Bug reports:</p>

<ul>
  <li>Hugging Face, <a href="https://huggingface.co/blog/gradient_accumulation">Fixing Gradient Accumulation</a>, 2024.</li>
  <li>Unsloth, <a href="https://unsloth.ai/blog/gradient">blog post on the gradient accumulation bug</a>, 2024.</li>
</ul>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[A training run with a bug rarely crashes. It just ends up a little worse. A checklist for finding those bugs, drawn from published training logs, papers and my own run.]]></summary></entry><entry><title type="html">Scaling LLM serving</title><link href="https://www.jayaprakash.net/blog/2026-06-12-scaling-llm-serving/" rel="alternate" type="text/html" title="Scaling LLM serving" /><published>2026-06-12T12:00:00+00:00</published><updated>2026-06-12T12:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/scaling-llm-serving</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-06-12-scaling-llm-serving/"><![CDATA[<p>Training and serving a language model stress a GPU in opposite ways. Training processes millions of tokens at once and is limited by arithmetic, which is what my <a href="/blog/2026-06-05-scaling-llm-training/">post on scaling training</a> was about. Serving produces one token at a time for each request, and on most hardware it’s limited by how fast the GPU can read its own memory. Almost every technique for serving models efficiently follows from that one fact.</p>

<p>This post works through those techniques in the order they build on each other. Where I can, it uses my own <a href="/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/">0.5B model</a> on an RTX 5090 as the worked example. Every source is listed at the end.</p>

<h2 id="two-phases-prefill-and-decode">Two phases: prefill and decode</h2>

<p>A request to a language model runs in two phases. <strong>Prefill</strong> processes the whole prompt in one pass, all its tokens in parallel, like a training forward pass. <strong>Decode</strong> then generates the response one token at a time, and each new token needs a full pass through the model.</p>

<p>The two phases have different bottlenecks, and serving systems report them separately:</p>

<ul>
  <li><strong>Time to first token</strong> is mostly prefill. It’s what a user feels as the pause before the answer starts.</li>
  <li><strong>Time per output token</strong> is decode. It sets how fast the answer streams.</li>
  <li><strong>Throughput</strong> is total tokens per second across all requests, which sets the cost.</li>
  <li><strong>Goodput</strong>, a term from the DistServe paper, is the rate of requests that meet their latency targets. High throughput with most requests missing their targets isn’t useful.</li>
</ul>

<h2 id="why-decoding-is-limited-by-memory">Why decoding is limited by memory</h2>

<p>To generate one token, the GPU has to read every weight in the model from memory. For one request at a time, each weight is used for only about two arithmetic operations: a multiply and an add. That’s far too little work per byte to keep the GPU’s arithmetic units busy.</p>

<p>kipply’s <a href="https://kipp.ly/transformer-inference-arithmetic/">Transformer Inference Arithmetic</a> puts numbers on this. An A100 can do about 312 trillion bf16 operations a second but read only about 1.5 TB of memory a second, a ratio of roughly 208 operations per byte. Until each weight is used for about that many operations, the GPU spends its time waiting on memory, and processing one token takes about as long as processing a couple of hundred. Horace He’s <a href="https://horace.io/brrr_intro.html">Making Deep Learning Go Brrrr</a> gives the general framing: every operation is limited by compute, by memory bandwidth, or by overhead, and knowing which tells you what to optimize.</p>

<p><strong>My model.</strong> In bf16 my 489.3M weights take 0.98 GB. The RTX 5090 reads memory at about 1.8 TB/s, so one request at a time can never exceed about 1,800 tokens a second, however fast the arithmetic is. Its rated bf16 throughput of about 210 trillion operations a second is about 117 times its memory bandwidth in bytes, so it takes a batch of roughly 100 requests decoding together before arithmetic becomes the limit.</p>

<p>That’s the central lesson of serving: <strong>batch many requests together</strong>, so each weight read from memory does work for all of them. The rest of this post is about how to fit a large batch in memory, keep it full, and waste as little of it as possible.</p>

<h2 id="the-kv-cache">The KV cache</h2>

<p>Attention needs the keys and values of every earlier token. Recomputing them for the whole sequence at each step would make generating <em>n</em> tokens cost work proportional to <em>n</em>², so every serving system stores them instead. That’s the <strong>KV cache</strong>.</p>

<p>My own <code class="language-plaintext highlighter-rouge">generate</code> function, which I only use to print sample text during training, doesn’t have one: it runs the whole sequence through the model for every new token. For a few 64-token samples every few hundred steps that’s fine. For serving, the KV cache is the first thing to add.</p>

<p>The cache has a cost. Per token it takes 2 (keys and values) × layers × key/value heads × head size × bytes per value. kipply gives this for standard multi-head attention; with fewer key/value heads, the count of key/value heads replaces the count of attention heads. For my model in bf16 that’s 2 × 24 × 4 × 64 × 2 = 24 KB per token, or about 50 MB for a full 2,048-token context.</p>

<figure class="wide">
<ul class="legend">
<li><span class="legend-key k-other-line"></span>Multi-head, 20 KV heads</li>
<li><span class="legend-key"></span>Grouped-query, 4 KV heads (my model)</li>
<li><span class="legend-key k-2"></span>Multi-query, 1 KV head</li>
</ul>
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 330" role="img" aria-labelledby="kv-cache-against-context-t kv-cache-against-context-d">
<title id="kv-cache-against-context-t">KV cache against context length</title>
<desc id="kv-cache-against-context-d">KV cache for one sequence of my model in bf16. Per token it is 120 KB with 20 KV heads, 24 KB with the 4 my model uses, and 6 KB with one. At 32K tokens that is 4.03, 0.81 and 0.20 GB, against 0.98 GB for the weights.</desc>
<text class="axis-label" x="56" y="16">KV cache for one sequence, bf16</text>
<line class="grid" x1="56" x2="570" y1="286.0" y2="286.0" />
<text class="tick" x="48" y="290.0" text-anchor="end">0 GB</text>
<line class="grid" x1="56" x2="570" y1="230.0" y2="230.0" />
<text class="tick" x="48" y="234.0" text-anchor="end">1 GB</text>
<line class="grid" x1="56" x2="570" y1="174.0" y2="174.0" />
<text class="tick" x="48" y="178.0" text-anchor="end">2 GB</text>
<line class="grid" x1="56" x2="570" y1="118.0" y2="118.0" />
<text class="tick" x="48" y="122.0" text-anchor="end">3 GB</text>
<line class="grid" x1="56" x2="570" y1="62.0" y2="62.0" />
<text class="tick" x="48" y="66.0" text-anchor="end">4 GB</text>
<text class="tick" x="56.0" y="306" text-anchor="middle">0K</text>
<text class="tick" x="184.5" y="306" text-anchor="middle">8K</text>
<text class="tick" x="313.0" y="306" text-anchor="middle">16K</text>
<text class="tick" x="441.5" y="306" text-anchor="middle">24K</text>
<text class="tick" x="570.0" y="306" text-anchor="middle">32K</text>
<text class="axis-label" x="570" y="324" text-anchor="end">context length, tokens</text>
<line class="ref" x1="56" x2="570" y1="231.2" y2="231.2" />
<text class="note" x="564.0" y="225.2" text-anchor="end">the model's own weights: 0.98 GB</text>
<path class="line line-other" d="M56.0,286.0 L88.1,271.9 L120.2,257.8 L184.5,229.6 L313.0,173.3 L441.5,116.9 L570.0,60.5" />
<circle class="dot dot-other" cx="88.1" cy="271.9" r="4"><title>Multi-head, 20 KV heads, 2,048 tokens: 0.25 GB</title></circle>
<circle class="dot dot-other" cx="120.2" cy="257.8" r="4"><title>Multi-head, 20 KV heads, 4,096 tokens: 0.50 GB</title></circle>
<circle class="dot dot-other" cx="184.5" cy="229.6" r="4"><title>Multi-head, 20 KV heads, 8,192 tokens: 1.01 GB</title></circle>
<circle class="dot dot-other" cx="313.0" cy="173.3" r="4"><title>Multi-head, 20 KV heads, 16,384 tokens: 2.01 GB</title></circle>
<circle class="dot dot-other" cx="441.5" cy="116.9" r="4"><title>Multi-head, 20 KV heads, 24,576 tokens: 3.02 GB</title></circle>
<circle class="dot dot-other" cx="570.0" cy="60.5" r="4"><title>Multi-head, 20 KV heads, 32,768 tokens: 4.03 GB</title></circle>
<text class="value" x="580.0" y="64.5">Multi-head: 4.03 GB</text>
<path class="line " d="M56.0,286.0 L88.1,283.2 L120.2,280.4 L184.5,274.7 L313.0,263.5 L441.5,252.2 L570.0,240.9" />
<circle class="dot " cx="88.1" cy="283.2" r="4"><title>Grouped-query, 4 KV heads (mine), 2,048 tokens: 0.05 GB</title></circle>
<circle class="dot " cx="120.2" cy="280.4" r="4"><title>Grouped-query, 4 KV heads (mine), 4,096 tokens: 0.10 GB</title></circle>
<circle class="dot " cx="184.5" cy="274.7" r="4"><title>Grouped-query, 4 KV heads (mine), 8,192 tokens: 0.20 GB</title></circle>
<circle class="dot " cx="313.0" cy="263.5" r="4"><title>Grouped-query, 4 KV heads (mine), 16,384 tokens: 0.40 GB</title></circle>
<circle class="dot " cx="441.5" cy="252.2" r="4"><title>Grouped-query, 4 KV heads (mine), 24,576 tokens: 0.60 GB</title></circle>
<circle class="dot " cx="570.0" cy="240.9" r="4"><title>Grouped-query, 4 KV heads (mine), 32,768 tokens: 0.81 GB</title></circle>
<text class="value" x="580.0" y="244.9">Grouped-query: 0.81 GB</text>
<path class="line line-2" d="M56.0,286.0 L88.1,285.3 L120.2,284.6 L184.5,283.2 L313.0,280.4 L441.5,277.5 L570.0,274.7" />
<circle class="dot dot-2" cx="88.1" cy="285.3" r="4"><title>Multi-query, 1 KV head, 2,048 tokens: 0.01 GB</title></circle>
<circle class="dot dot-2" cx="120.2" cy="284.6" r="4"><title>Multi-query, 1 KV head, 4,096 tokens: 0.03 GB</title></circle>
<circle class="dot dot-2" cx="184.5" cy="283.2" r="4"><title>Multi-query, 1 KV head, 8,192 tokens: 0.05 GB</title></circle>
<circle class="dot dot-2" cx="313.0" cy="280.4" r="4"><title>Multi-query, 1 KV head, 16,384 tokens: 0.10 GB</title></circle>
<circle class="dot dot-2" cx="441.5" cy="277.5" r="4"><title>Multi-query, 1 KV head, 24,576 tokens: 0.15 GB</title></circle>
<circle class="dot dot-2" cx="570.0" cy="274.7" r="4"><title>Multi-query, 1 KV head, 32,768 tokens: 0.20 GB</title></circle>
<text class="value" x="580.0" y="278.7">Multi-query: 0.20 GB</text>
</svg>

</div>
<figcaption>KV cache for one sequence of my model in bf16, computed from its shape. It grows in a straight line with context length. The dotted line is the size of the model's own weights. Hover a point to see its value.</figcaption>
</figure>

<p>With standard multi-head attention, every one of my model’s 20 attention heads would keep its own keys and values, five times as much. At 32K tokens, one sequence’s cache would be about 4 GB, four times the size of the model itself. For a batch of requests, the KV cache, not the weights, is what fills the GPU.</p>

<p><strong>Share key/value heads.</strong> Noam Shazeer’s <a href="https://arxiv.org/abs/1911.02150">multi-query attention</a> (MQA) observed that decoding is limited by reloading these cached keys and values, and let all attention heads share a single key/value head, shrinking the cache by the number of heads with little loss in quality. <a href="https://arxiv.org/abs/2305.13245">Grouped-query attention</a> (GQA) is the middle ground: a few key/value heads, each shared by a group of query heads. Its authors found it reaches quality close to multi-head attention at speed close to multi-query attention, and that an existing multi-head model can be converted with about 5% of its original training compute. My model uses GQA with 4 key/value heads, which is why its cache is 24 KB per token rather than 120 KB.</p>

<h2 id="managing-the-cache-pagedattention">Managing the cache: PagedAttention</h2>

<p>Early serving systems reserved one contiguous block of memory per request, sized for the longest response it might produce. Most of that went unused. The <a href="https://arxiv.org/abs/2309.06180">vLLM paper</a> (Kwon et al., 2023) measured that in existing systems only 20 to 38% of the memory reserved for the KV cache held actual keys and values; the rest was lost to over-reservation and fragmentation.</p>

<p><strong>PagedAttention</strong> borrows the operating system’s answer to the same problem: virtual memory. It stores each request’s cache in small fixed-size blocks that don’t need to be contiguous, allocated as the sequence grows. Waste falls to nearly nothing, and requests can share blocks, for example when sampling several responses to the same prompt. The paper reports 2 to 4 times the throughput of the best earlier systems at the same latency. The launch <a href="https://vllm.ai/blog/2023-06-20-vllm">blog post</a> put it at up to 24 times Hugging Face Transformers, with existing systems wasting 60 to 80% of their cache memory against under 4% for vLLM.</p>

<h2 id="batching-static-to-continuous">Batching: static to continuous</h2>

<p>With static batching, a batch starts together and finishes together: short responses wait for the longest one, and new requests wait for the whole batch. The <a href="https://www.usenix.org/conference/osdi22/presentation/yu">Orca</a> paper (Yu et al., 2022) replaced that with <strong>iteration-level scheduling</strong>: the batch is re-formed at every decoding step, finished requests leave immediately, and new ones join. This is now called <strong>continuous batching</strong>. Orca also batches only the operations that can be batched, such as the matrix multiplications, and runs attention per request, so sequences of different lengths can share a batch. On GPT-3 175B it reported 36.9 times the throughput of NVIDIA’s FasterTransformer at the same latency.</p>

<p>Anyscale’s <a href="https://www.anyscale.com/blog/continuous-batching-llm-inference">benchmark</a> separates the two ideas. Serving OPT-13B on one A100 with widely varying response lengths, naive static batching produced about 81 tokens a second. Systems with continuous batching alone reached about 300 to 350, roughly 4 times more. vLLM, with continuous batching and paged memory, reached about 1,865, 23 times the naive baseline. Both ideas matter, and the memory management is worth more than the scheduling.</p>

<h2 id="prefill-and-decode-get-in-each-others-way">Prefill and decode get in each other’s way</h2>

<p>Continuous batching mixes new requests’ prefills with ongoing requests’ decodes. A long prompt’s prefill takes much longer than a decode step, so every request in the batch stalls while it runs, and output streaming stutters.</p>

<p><strong>Split long prefills into chunks.</strong> <a href="https://arxiv.org/abs/2403.02310">Sarathi-Serve</a> (Agrawal et al., 2024) breaks each prompt into roughly equal chunks and adds one chunk per step alongside the ongoing decodes, so no step is ever much longer than the rest. Compared with vLLM, it reports 2.6 times the serving capacity for Mistral-7B on one A100, 3.7 times for Yi-34B on two, and 5.6 times for Falcon-180B.</p>

<p><strong>Or run them on different GPUs.</strong> Prefill is limited by compute and decode by memory bandwidth, so the best hardware and parallelism differ. <a href="https://arxiv.org/abs/2401.09670">DistServe</a> (Zhong et al., 2024) runs the two phases on separate GPUs, tunes each separately, and moves the KV cache between them. It reports serving 7.4 times more requests, or meeting latency targets 12.6 times tighter, than existing systems. <a href="https://arxiv.org/abs/2311.18677">Splitwise</a> (Patel et al., 2024) makes the same split across machines, reporting 1.4 times the throughput at 20% lower cost, or 2.35 times at the same cost and power.</p>

<h2 id="reuse-shared-prefixes">Reuse shared prefixes</h2>

<p>Many requests start the same way: a system prompt, few-shot examples, the earlier turns of a chat, the fixed preamble of an agent loop. Their KV cache for that shared start is identical. <a href="https://arxiv.org/abs/2312.07104">SGLang</a> (Zheng et al., 2024) keeps cached prefixes in a tree, called RadixAttention, so any new request that shares a prefix picks up its cache instead of recomputing it. It reports up to 6.4 times the throughput of earlier systems on workloads such as agents, retrieval-augmented generation and multi-turn chat.</p>

<h2 id="make-attention-itself-cheaper">Make attention itself cheaper</h2>

<p><a href="https://arxiv.org/abs/2205.14135">FlashAttention</a> (Dao et al., 2022) computes attention in tiles held in the GPU’s small, fast on-chip memory, never writing the full attention matrix to main memory. That makes attention’s extra memory grow linearly with sequence length instead of quadratically, and cuts the traffic to main memory, which is the resource decoding is short of. <a href="https://arxiv.org/abs/2307.08691">FlashAttention-2</a> roughly doubled its speed by splitting the work better across the GPU. It’s the same kernel that makes long-sequence training fit, as the training post shows.</p>

<h2 id="make-the-weights-smaller">Make the weights smaller</h2>

<p>If decoding is limited by reading the weights, fewer bytes per weight means faster decoding, as well as more room for the KV cache.</p>

<ul>
  <li><strong><a href="https://arxiv.org/abs/2208.07339">LLM.int8()</a></strong> (Dettmers et al., 2022) runs models of up to 175B parameters in 8-bit with no loss in quality, halving memory. The difficulty was a few feature dimensions with very large values that appear in large models; it keeps those in 16-bit and runs about 99.9% of the multiplication in 8-bit.</li>
  <li><strong><a href="https://arxiv.org/abs/2210.17323">GPTQ</a></strong> (Frantar et al., 2022) quantizes weights to 3 or 4 bits after training, using approximate second-order information to correct for the error, with negligible accuracy loss. It quantizes a 175B model in about 4 GPU-hours and lets it run on a single GPU, about 3.25 times faster than fp16 on an A100.</li>
  <li><strong><a href="https://arxiv.org/abs/2306.00978">AWQ</a></strong> (Lin et al., 2023) observes that about 1% of weights matter most, and that they’re best identified by the size of the activations they multiply rather than by their own size. Scaling those channels up before quantizing to 4 bits protects them, with no retraining.</li>
</ul>

<p>For my model, 4-bit weights would take about 0.25 GB instead of 0.98 GB, which would raise the ceiling on single-request decoding speed about fourfold.</p>

<h2 id="speculative-decoding">Speculative decoding</h2>

<p>Decoding one token barely uses the GPU’s arithmetic, and checking several candidate tokens in one pass costs about the same as generating one. Speculative decoding exploits that. A small, fast draft model proposes the next few tokens, and the large model checks them all in a single pass, keeping the longest run it agrees with. A carefully designed acceptance rule makes the output follow exactly the same distribution as the large model alone, so quality is unchanged.</p>

<p>It was developed independently by two groups. <a href="https://arxiv.org/abs/2211.17192">Leviathan et al.</a> at Google reported 2 to 3 times faster decoding for T5-XXL with identical outputs, and <a href="https://arxiv.org/abs/2302.01318">Chen et al.</a> at DeepMind 2 to 2.5 times for the 70B-parameter Chinchilla, with no retraining in either case. It helps most at small batch sizes, where the GPU has arithmetic to spare.</p>

<h2 id="spreading-a-model-across-chips">Spreading a model across chips</h2>

<p>When a model is too big for one accelerator, it has to be split, and the best split depends on the batch size. <a href="https://arxiv.org/abs/2211.05102">Pope et al.</a> (2022) built a model of the trade-offs for serving PaLM on TPUs. Layouts that keep weights in place and move activations win at small batches and low latency; layouts that move the weights instead win at large batches. With these choices they served the 540B-parameter PaLM at 29 ms per generated token using 8-bit weights, reached 76% utilization of the hardware during prefill of large batches, and used multi-query attention to support contexts up to 32 times longer.</p>

<h2 id="rules-of-thumb">Rules of thumb</h2>

<ul>
  <li>Decoding is limited by memory bandwidth. One request at a time can’t go faster than bandwidth divided by the size of the weights.</li>
  <li>Batching is the main lever: each weight read should serve as many requests as possible.</li>
  <li>At long contexts and large batches, the KV cache, not the weights, fills the GPU. Estimate it before choosing a batch size.</li>
  <li>Fewer key/value heads, through grouped-query or multi-query attention, shrinks the cache almost for free.</li>
  <li>Allocate the cache in pages and schedule at every step, not once per batch.</li>
  <li>Keep long prefills from stalling decodes, by chunking them or by running them on separate GPUs.</li>
  <li>Quantized weights and speculative decoding both help most when batches are small.</li>
  <li>Report time to first token and time per output token separately, and measure goodput, not just throughput.</li>
</ul>

<h2 id="sources">Sources</h2>

<p>Background:</p>

<ul>
  <li>kipply, <a href="https://kipp.ly/transformer-inference-arithmetic/">Transformer Inference Arithmetic</a>, 2022.</li>
  <li>Horace He, <a href="https://horace.io/brrr_intro.html">Making Deep Learning Go Brrrr From First Principles</a>, 2022.</li>
  <li>Reiner Pope, Sholto Douglas, Aakanksha Chowdhery, Jacob Devlin, James Bradbury, Anselm Levskaya, Jonathan Heek, Kefan Xiao, Shivani Agrawal and Jeff Dean, <a href="https://arxiv.org/abs/2211.05102">Efficiently Scaling Transformer Inference</a>, 2022.</li>
</ul>

<p>Attention and the KV cache:</p>

<ul>
  <li>Noam Shazeer, <a href="https://arxiv.org/abs/1911.02150">Fast Transformer Decoding: One Write-Head is All You Need</a>, 2019.</li>
  <li>Tri Dao, Daniel Y. Fu, Stefano Ermon, Atri Rudra and Christopher Ré, <a href="https://arxiv.org/abs/2205.14135">FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness</a>, 2022.</li>
  <li>Tri Dao, <a href="https://arxiv.org/abs/2307.08691">FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning</a>, 2023.</li>
  <li>Joshua Ainslie, James Lee-Thorp, Michiel de Jong, Yury Zemlyanskiy, Federico Lebrón and Sumit Sanghai, <a href="https://arxiv.org/abs/2305.13245">GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints</a>, 2023.</li>
</ul>

<p>Serving systems:</p>

<ul>
  <li>Gyeong-In Yu, Joo Seong Jeong, Geon-Woo Kim, Soojeong Kim and Byung-Gon Chun, <a href="https://www.usenix.org/conference/osdi22/presentation/yu">Orca: A Distributed Serving System for Transformer-Based Generative Models</a>, 2022.</li>
  <li>Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Hao Yu, Joseph E. Gonzalez, Hao Zhang and Ion Stoica, <a href="https://arxiv.org/abs/2309.06180">Efficient Memory Management for Large Language Model Serving with PagedAttention</a>, 2023, and the <a href="https://vllm.ai/blog/2023-06-20-vllm">vLLM launch post</a>, 2023.</li>
  <li>Cade Daniel, Chen Shen, Eric Liang and Richard Liaw, <a href="https://www.anyscale.com/blog/continuous-batching-llm-inference">How continuous batching enables 23x throughput in LLM inference while reducing p50 latency</a>, Anyscale, 2023.</li>
  <li>Lianmin Zheng et al., <a href="https://arxiv.org/abs/2312.07104">SGLang: Efficient Execution of Structured Language Model Programs</a>, 2023.</li>
  <li>Pratyush Patel, Esha Choukse, Chaojie Zhang, Aashaka Shah, Íñigo Goiri, Saeed Maleki and Ricardo Bianchini, <a href="https://arxiv.org/abs/2311.18677">Splitwise: Efficient Generative LLM Inference Using Phase Splitting</a>, 2023.</li>
  <li>Yinmin Zhong, Shengyu Liu, Junda Chen, Jianbo Hu, Yibo Zhu, Xuanzhe Liu, Xin Jin and Hao Zhang, <a href="https://arxiv.org/abs/2401.09670">DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving</a>, 2024.</li>
  <li>Amey Agrawal et al., <a href="https://arxiv.org/abs/2403.02310">Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve</a>, 2024.</li>
</ul>

<p>Faster decoding:</p>

<ul>
  <li>Tim Dettmers, Mike Lewis, Younes Belkada and Luke Zettlemoyer, <a href="https://arxiv.org/abs/2208.07339">LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale</a>, 2022.</li>
  <li>Elias Frantar, Saleh Ashkboos, Torsten Hoefler and Dan Alistarh, <a href="https://arxiv.org/abs/2210.17323">GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers</a>, 2022.</li>
  <li>Yaniv Leviathan, Matan Kalman and Yossi Matias, <a href="https://arxiv.org/abs/2211.17192">Fast Inference from Transformers via Speculative Decoding</a>, 2022.</li>
  <li>Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre and John Jumper, <a href="https://arxiv.org/abs/2302.01318">Accelerating Large Language Model Decoding with Speculative Sampling</a>, 2023.</li>
  <li>Ji Lin et al., <a href="https://arxiv.org/abs/2306.00978">AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration</a>, 2023.</li>
</ul>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[Why generating text is limited by memory rather than compute, and the techniques that serving systems use to get around it, from the KV cache to speculative decoding.]]></summary></entry><entry><title type="html">Scaling LLM training</title><link href="https://www.jayaprakash.net/blog/2026-06-05-scaling-llm-training/" rel="alternate" type="text/html" title="Scaling LLM training" /><published>2026-06-05T12:00:00+00:00</published><updated>2026-06-05T12:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/scaling-llm-training</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-06-05-scaling-llm-training/"><![CDATA[<p>Training a language model on one GPU is mostly a question of whether it fits. Training on hundreds of GPUs adds a second question: how to keep them all busy while they wait on each other. Hugging Face’s <a href="https://huggingface.co/spaces/nanotron/ultrascale-playbook">Ultra-Scale Playbook</a> (Tazi et al., 2025) is the most thorough public guide to that second question. It’s built on more than 4,100 distributed training experiments on up to 512 GPUs, and it walks through every technique used to spread training across a cluster.</p>

<p>This post follows the playbook’s structure and keeps its numbers, and uses my own <a href="/blog/2026-09-22-pretraining-a-0.5b-model-on-one-gpu/">0.5B model</a>, trained on a single RTX 5090, as the worked example. That run never needed more than one GPU, which makes it a useful baseline: it shows exactly where memory goes before any of the techniques below are needed.</p>

<p>The playbook frames everything around three constraints that trade against each other. <strong>Memory</strong> is a hard limit: if a step doesn’t fit, it doesn’t run. <strong>Compute efficiency</strong> is how much of the GPU’s arithmetic you actually use. <strong>Communication</strong> is the time GPUs spend exchanging data instead of computing. Almost every technique buys one of these with another.</p>

<h2 id="start-with-the-memory-budget">Start with the memory budget</h2>

<p>Four things take GPU memory during training: the model’s weights, their gradients, the optimizer’s state, and the activations saved during the forward pass for use in the backward pass. On top of those, CUDA itself takes 1 to 2 GB, and some memory is always lost to buffers and fragmentation.</p>

<p>For the first three, the playbook counts bytes per parameter. In the common mixed-precision setup, the model computes in bf16 but keeps an fp32 “master” copy of the weights for the optimizer to update:</p>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: right">Bytes per parameter</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>bf16 weights</td>
      <td style="text-align: right">2</td>
    </tr>
    <tr>
      <td>bf16 gradients</td>
      <td style="text-align: right">2</td>
    </tr>
    <tr>
      <td>fp32 master weights</td>
      <td style="text-align: right">4</td>
    </tr>
    <tr>
      <td>Adam first moment, fp32</td>
      <td style="text-align: right">4</td>
    </tr>
    <tr>
      <td>Adam second moment, fp32</td>
      <td style="text-align: right">4</td>
    </tr>
    <tr>
      <td><strong>Total</strong></td>
      <td style="text-align: right"><strong>16</strong></td>
    </tr>
  </tbody>
</table>

<p>Some frameworks also accumulate gradients in fp32, because bf16 loses small values; that adds 4 bytes, for 20. Mixed precision doesn’t save memory on these items at all. What it saves is compute time and activation memory.</p>

<p>At 16 to 20 bytes per parameter, the numbers grow quickly:</p>

<table>
  <thead>
    <tr>
      <th>Model</th>
      <th style="text-align: right">Weights, gradients and optimizer</th>
      <th style="text-align: right">With fp32 gradient accumulation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1B</td>
      <td style="text-align: right">16 GB</td>
      <td style="text-align: right">20 GB</td>
    </tr>
    <tr>
      <td>7B</td>
      <td style="text-align: right">112 GB</td>
      <td style="text-align: right">140 GB</td>
    </tr>
    <tr>
      <td>70B</td>
      <td style="text-align: right">1,120 GB</td>
      <td style="text-align: right">1,400 GB</td>
    </tr>
    <tr>
      <td>405B</td>
      <td style="text-align: right">6,480 GB</td>
      <td style="text-align: right">8,100 GB</td>
    </tr>
  </tbody>
</table>

<p>From 7B parameters up, these alone don’t fit on an 80 GB H100, before a single activation is stored.</p>

<p><strong>My run.</strong> My model keeps its weights in fp32 and lets PyTorch’s autocast run the matrix multiplications in bf16, so there’s no separate bf16 copy: 4 bytes of weights, 4 of gradients and 8 of Adam state, which is also 16 bytes per parameter. For 489.3M parameters that’s 7.8 GB. The full checkpoint I save for resuming is 5.9 GB, which is 12 bytes per parameter: weights plus Adam’s two moments, since gradients aren’t saved. Checking the checkpoint size against this arithmetic is a quick way to confirm you’re saving what you think you’re saving.</p>

<p><strong>Profile it.</strong> The playbook uses PyTorch’s profiler with memory tracking to watch a training step. Activations climb through the forward pass. During the backward pass, gradients accumulate while activations are freed. Then the optimizer step runs. One detail catches people out: the optimizer’s state is only allocated during the first optimizer step, so a run can finish step 1 and then run out of memory on step 2.</p>

<h2 id="activations-grow-with-sequence-length">Activations grow with sequence length</h2>

<p>Activation memory depends on the batch, not just the model. The playbook’s estimate for a standard transformer in mixed precision is</p>

<p><em>L · s · b · h · (34 + 5 · a · s / h)</em> bytes,</p>

<p>where <em>L</em> is the number of layers, <em>s</em> the sequence length, <em>b</em> the micro-batch size, <em>h</em> the hidden size and <em>a</em> the number of attention heads. It grows linearly with batch size. The second term, which is the attention matrix stored for the backward pass, grows with the square of the sequence length. For short sequences activations are minor; from about 2,000 to 4,000 tokens they become the largest item in memory.</p>

<figure class="wide">
<ul class="legend">
<li><span class="legend-key"></span>With FlashAttention</li>
<li><span class="legend-key k-other-line"></span>With the attention matrix stored</li>
</ul>
<div class="chart-scroll">
<svg class="chart" viewBox="0 0 760 330" role="img" aria-labelledby="activation-memory-agains-t activation-memory-agains-d">
<title id="activation-memory-agains-t">Activation memory against sequence length</title>
<desc id="activation-memory-agains-d">Estimated activation memory for my 24-layer model with 4 sequences per micro-batch. With FlashAttention it grows linearly, from 2.1 GB at 512 tokens to 34 GB at 8,192. Storing the attention matrix adds a term that grows with the square of sequence length: 49 GB at 2,048 tokens and 678 GB at 8,192. After 7.8 GB of weights, gradients and optimizer state, a 32 GB GPU has about 24 GB left.</desc>
<text class="axis-label" x="70" y="16">activation memory for a micro-batch of 4 sequences, log scale</text>
<line class="grid" x1="70" x2="610" y1="286.0" y2="286.0" />
<text class="tick" x="62" y="290.0" text-anchor="end">1 GB</text>
<line class="grid" x1="70" x2="610" y1="202.0" y2="202.0" />
<text class="tick" x="62" y="206.0" text-anchor="end">10 GB</text>
<line class="grid" x1="70" x2="610" y1="118.0" y2="118.0" />
<text class="tick" x="62" y="122.0" text-anchor="end">100 GB</text>
<line class="grid" x1="70" x2="610" y1="34.0" y2="34.0" />
<text class="tick" x="62" y="38.0" text-anchor="end">1,000 GB</text>
<text class="tick" x="70.0" y="306" text-anchor="middle">512</text>
<text class="tick" x="205.0" y="306" text-anchor="middle">1,024</text>
<text class="tick" x="340.0" y="306" text-anchor="middle">2,048</text>
<text class="tick" x="475.0" y="306" text-anchor="middle">4,096</text>
<text class="tick" x="610.0" y="306" text-anchor="middle">8,192</text>
<text class="axis-label" x="610" y="324" text-anchor="end">sequence length, tokens</text>
<line class="ref" x1="70" x2="610" y1="169.8" y2="169.8" />
<text class="note" x="76" y="163.8">24 GB free</text>
<path class="line line-other" d="M70.0,229.9 L205.0,188.8 L340.0,144.2 L475.0,96.9 L610.0,48.2" />
<path class="line" d="M70.0,258.3 L205.0,233.0 L340.0,207.7 L475.0,182.4 L610.0,157.1" />
<circle class="dot dot-other" cx="70.0" cy="229.9" r="4"><title>512 tokens, attention matrix stored: 4.7 GB</title></circle>
<circle class="dot dot-other" cx="205.0" cy="188.8" r="4"><title>1,024 tokens, attention matrix stored: 14.3 GB</title></circle>
<circle class="dot dot-other" cx="340.0" cy="144.2" r="4"><title>2,048 tokens, attention matrix stored: 48.8 GB</title></circle>
<circle class="dot dot-other" cx="475.0" cy="96.9" r="4"><title>4,096 tokens, attention matrix stored: 178 GB</title></circle>
<circle class="dot dot-other" cx="610.0" cy="48.2" r="4"><title>8,192 tokens, attention matrix stored: 678 GB</title></circle>
<circle class="dot" cx="70.0" cy="258.3" r="4"><title>512 tokens, FlashAttention: 2.1 GB</title></circle>
<circle class="dot" cx="205.0" cy="233.0" r="4"><title>1,024 tokens, FlashAttention: 4.3 GB</title></circle>
<circle class="dot" cx="340.0" cy="207.7" r="4"><title>2,048 tokens, FlashAttention: 8.6 GB</title></circle>
<circle class="dot" cx="475.0" cy="182.4" r="4"><title>4,096 tokens, FlashAttention: 17.1 GB</title></circle>
<circle class="dot" cx="610.0" cy="157.1" r="4"><title>8,192 tokens, FlashAttention: 34.2 GB</title></circle>
<text class="value" x="618.0" y="52.2">attention matrix stored</text>
<text class="value" x="618.0" y="161.1">FlashAttention</text>
<text class="note-strong" x="340.0" y="227.7" text-anchor="middle">my run: 8.6 GB</text>
<text class="note" x="332.0" y="134.2" text-anchor="end">49 GB</text>
</svg>

</div>
<figcaption>Estimated activation memory for my 24-layer model with 4 sequences per micro-batch, from the playbook's formula. The dotted line is the 24 GB left on a 32 GB GPU after 7.8 GB of weights, gradients and optimizer state. Hover a point to see its value.</figcaption>
</figure>

<p>The chart shows why my run fit at all. My micro-batch is 4 sequences of 2,048 tokens. Storing the attention matrix would take about 49 GB, far more than the GPU has. The attention kernel I use, PyTorch’s <code class="language-plaintext highlighter-rouge">scaled_dot_product_attention</code>, never writes that matrix out, in the style of FlashAttention, which leaves about 8.6 GB. Add 7.8 GB of weights, gradients and optimizer state and the estimate is 16.4 GB, against the 19.6 GB peak I measured. The remaining 3.2 GB is most likely the output logits, 4 × 2,048 × 32,000 values, plus working memory. The formula also assumes a standard feed-forward block and full multi-head attention, which mine doesn’t quite match, so treat it as an estimate.</p>

<p><strong>Activation recomputation</strong> trades compute for memory: throw some activations away in the forward pass and recompute them in the backward pass. Recomputing everything, keeping only each layer’s input, amounts to an extra forward pass and typically costs 30 to 40% more compute. Selective recomputation drops only the attention activations, which are large but cheap to recompute. For GPT-3 175B, the playbook cites a 70% cut in activation memory for 2.7% more compute. FlashAttention already recomputes attention scores in the backward pass, so anyone using it is doing selective recomputation already.</p>

<p>Recomputation changes how efficiency should be counted. Hardware FLOPs utilization counts the recomputed work; model FLOPs utilization (MFU) counts only the work the model needs. The playbook prefers MFU, because what matters is how long training takes.</p>

<h2 id="batch-size-and-gradient-accumulation">Batch size and gradient accumulation</h2>

<p>The playbook measures batch size in tokens. Large pretraining runs typically use between 4 million and 60 million tokens per batch: Llama 1 used about 4 million, and DeepSeek about 60 million. Sequence lengths of 2,000 to 8,000 tokens are typical, with longer contexts added near the end of training.</p>

<p>When the batch doesn’t fit in memory, gradient accumulation runs several micro-batches in sequence and adds up their gradients before the optimizer step. Memory stays constant, but the micro-batches run one after another, so it’s slower. Across GPUs, the global batch size is</p>

<p><em>global batch = micro-batch × accumulation steps × data-parallel GPUs</em>.</p>

<p>The playbook’s advice is to use more GPUs before more accumulation, since GPUs run in parallel and accumulation doesn’t.</p>

<p>My run used a micro-batch of 4 sequences, 64 accumulation steps and one GPU: 4 × 64 × 2,048 = 524,288 tokens per step. On 8 GPUs, the same batch would need only 8 accumulation steps per GPU.</p>

<h2 id="data-parallelism">Data parallelism</h2>

<p>Data parallelism is the simplest way to use more GPUs: every GPU holds a full copy of the model, processes a different slice of the batch, and the GPUs average their gradients with an all-reduce before the optimizer step. The playbook describes three optimizations that make it efficient:</p>

<ul>
  <li><strong>Overlap communication with the backward pass.</strong> Start averaging a layer’s gradients as soon as they’re computed, instead of waiting for the whole backward pass to finish.</li>
  <li><strong>Bucket the gradients.</strong> Send them in a few large messages rather than many small ones.</li>
  <li><strong>Skip the averaging during accumulation.</strong> Only average after the last micro-batch. My training loop does this with PyTorch’s <code class="language-plaintext highlighter-rouge">require_backward_grad_sync</code> flag.</li>
</ul>

<p>Data parallelism alone doesn’t reduce memory per GPU, since every GPU still holds everything. And it stops scaling well at around 512 GPUs, where the time for the all-reduce to go around the ring of GPUs can no longer be hidden behind computation.</p>

<p><strong>ZeRO</strong> removes the duplication. Each stage shards one more item across the <em>N</em> data-parallel GPUs, with <em>Ψ</em> the parameter count and <em>k</em> = 12 bytes of optimizer state per parameter (fp32 master weights plus two Adam moments):</p>

<table>
  <thead>
    <tr>
      <th>Stage</th>
      <th>Shards</th>
      <th>Memory per GPU</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Plain data parallelism</td>
      <td>nothing</td>
      <td>2Ψ + 2Ψ + kΨ</td>
    </tr>
    <tr>
      <td>ZeRO-1</td>
      <td>optimizer state</td>
      <td>2Ψ + 2Ψ + kΨ/N</td>
    </tr>
    <tr>
      <td>ZeRO-2</td>
      <td>+ gradients</td>
      <td>2Ψ + (2Ψ + kΨ)/N</td>
    </tr>
    <tr>
      <td>ZeRO-3 (FSDP)</td>
      <td>+ weights</td>
      <td>(2Ψ + 2Ψ + kΨ)/N</td>
    </tr>
  </tbody>
</table>

<p>For a 7B model on 8 GPUs, that’s 112 GB per GPU with plain data parallelism, about 39 GB with ZeRO-1, 26 GB with ZeRO-2 and 14 GB with ZeRO-3, before activations. ZeRO-2 communicates no more than plain data parallelism, since an all-reduce is itself a reduce-scatter followed by an all-gather, and the playbook calls it usually the better choice over ZeRO-1. ZeRO-3 has to gather each layer’s weights before using them, in both the forward and backward passes, which raises communication by about half. Fetching the next layer’s weights while the current one computes hides most of that.</p>

<p>ZeRO can’t shard activations, since each GPU’s are different, and every layer still has to fit on one GPU while it runs. Those limits are what the next techniques address.</p>

<h2 id="tensor-and-sequence-parallelism">Tensor and sequence parallelism</h2>

<p>Tensor parallelism splits individual weight matrices across GPUs. A linear layer can be split by columns, where each GPU computes part of the output, or by rows, where each GPU computes a partial sum. The transformer’s feed-forward block pairs a column split with a row split, so it needs only one all-reduce in the forward pass. Attention splits naturally by heads.</p>

<p>That communication sits in the middle of every layer’s computation, so it can’t be fully hidden, and it needs the fastest links available. The playbook’s benchmarks show it clearly: going from 8 to 16 GPUs, which crosses from one node to two, cost tensor parallelism about 43% of its throughput, against 14% for pipeline parallelism. The rule is to keep tensor parallelism within a node, typically 8 GPUs. It also can’t usefully exceed the number of attention heads. My model has 20 query heads but only 4 key/value heads, so splitting it more than 4 ways would mean duplicating key/value heads.</p>

<p>Tensor parallelism leaves some activations whole: those of the normalization and dropout layers. Sequence parallelism splits those along the sequence dimension instead. It replaces each all-reduce with a reduce-scatter and an all-gather, which cost the same in total, and cuts the remaining activation memory by the tensor-parallel degree. With both, the playbook fits 16,000-token sequences for a 70B model across 16 GPUs.</p>

<h2 id="context-parallelism">Context parallelism</h2>

<p>At very long sequence lengths, 128,000 tokens and up, even full recomputation leaves too much activation memory. Context parallelism splits the sequence itself across GPUs, for every layer. Most of the model doesn’t care: each token’s feed-forward and normalization computations are independent. Only attention needs every token’s keys and values.</p>

<p><strong>Ring Attention</strong> handles that by passing key and value chunks around a ring of GPUs. Each GPU computes attention for its own queries against the chunk it holds, sends that chunk on, receives the next one, and repeats until it has seen them all, overlapping the transfer with the computation. A causal mask makes the naive split unbalanced, because early tokens attend to far less than late ones. Zig-zag attention fixes that by giving each GPU a mix of early and late tokens.</p>

<h2 id="pipeline-parallelism">Pipeline parallelism</h2>

<p>Pipeline parallelism splits the model by layers: GPU 1 holds the first few layers, GPU 2 the next, and so on. It reduces weight memory per GPU, and it only sends activations between neighbouring stages, which makes it well suited to slower links between nodes. Its cost is the <strong>bubble</strong>: while the first micro-batch travels forward through the pipeline and back, most GPUs sit idle.</p>

<p>With <em>p</em> pipeline stages and <em>m</em> micro-batches per step, the idle fraction in the simplest schedule, all forward passes then all backward passes, is (<em>p</em> − 1) / <em>m</em>. More micro-batches shrink the bubble, but this schedule has to keep activations for all of them. The <strong>1F1B</strong> schedule alternates one forward and one backward pass once the pipeline is full, which gives the same bubble while keeping activations for only <em>p</em> micro-batches. <strong>Interleaved</strong> schedules give each GPU several non-adjacent chunks of layers; with <em>v</em> chunks per GPU the bubble shrinks to (<em>p</em> − 1) / (<em>v</em> · <em>m</em>), at the cost of <em>v</em> times more communication. Llama 3.1 used an interleaved 1F1B schedule.</p>

<p>The newest schedules go further. <strong>Zero Bubble</strong> splits the backward pass into the part that computes gradients for the layer’s input, which the previous stage is waiting for, and the part that computes gradients for the weights, which can be scheduled later to fill gaps. <strong>DualPipe</strong>, used for DeepSeek-V3, feeds micro-batches into both ends of the pipeline at once and overlaps nearly all communication with computation.</p>

<h2 id="expert-parallelism">Expert parallelism</h2>

<p>Mixture-of-experts models replace the single feed-forward block with many smaller “experts” and send each token to a few of them. Expert parallelism places different experts on different GPUs and routes tokens to them with an all-to-all exchange. No matrix is split, so it’s lighter than tensor parallelism. DeepSeek-V3, for example, has 256 experts and limits each token to experts on at most 4 nodes, which bounds how far any token has to travel. Expert parallelism only splits the experts, so the rest of the model is usually combined with data parallelism.</p>

<h2 id="choosing-a-configuration">Choosing a configuration</h2>

<p>The playbook calls the combination <strong>5D parallelism</strong>: data, tensor, sequence or context, pipeline and expert, with ZeRO on top of data parallelism.</p>

<table>
  <thead>
    <tr>
      <th>Method</th>
      <th>Saves memory on</th>
      <th>Splits along</th>
      <th>Main cost</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data parallelism</td>
      <td>nothing by itself</td>
      <td>batch</td>
      <td>limited by batch size</td>
    </tr>
    <tr>
      <td>ZeRO-1, 2, 3</td>
      <td>optimizer state, then gradients, then weights</td>
      <td>data-parallel copies</td>
      <td>weight communication</td>
    </tr>
    <tr>
      <td>Tensor and sequence</td>
      <td>weights and activations</td>
      <td>hidden dimension and sequence</td>
      <td>needs very fast links</td>
    </tr>
    <tr>
      <td>Context</td>
      <td>activations</td>
      <td>sequence</td>
      <td>communication in attention</td>
    </tr>
    <tr>
      <td>Pipeline</td>
      <td>weights</td>
      <td>layers</td>
      <td>the bubble</td>
    </tr>
    <tr>
      <td>Expert</td>
      <td>expert weights</td>
      <td>experts</td>
      <td>routing</td>
    </tr>
  </tbody>
</table>

<p>Its procedure for choosing:</p>

<ol>
  <li><strong>Fit the model in memory.</strong> Under about 10B parameters, one technique is often enough: tensor parallelism, or ZeRO-3 with full recomputation, across 8 GPUs. From 10B to 100B, combine tensor parallelism of 8 with pipeline parallelism or ZeRO-3. On more than about 512 GPUs, pure data parallelism or ZeRO-3 becomes inefficient, so add tensor or pipeline parallelism. Add context parallelism for long sequences and expert parallelism for mixture-of-experts models. With few GPUs, use full recomputation and more accumulation.</li>
  <li><strong>Reach the target batch size</strong> by adjusting data parallelism and accumulation.</li>
  <li><strong>Maximize throughput.</strong> Scale tensor parallelism up to the node size, then data parallelism with ZeRO-3, and switch to pipeline parallelism when data-parallel communication becomes the bottleneck. Change one dimension at a time.</li>
</ol>

<p>Pipeline parallelism and ZeRO-3 both split weights across GPUs, but differently. Pipeline parallelism keeps whole layers and sends activations, and prefers many accumulation steps. ZeRO-3 keeps slices of every layer and sends weights, and prefers large micro-batches and long sequences. They’re rarely used together, while ZeRO-1 or 2 combine easily with pipelines; DeepSeek-V3 used pipeline parallelism with ZeRO-1.</p>

<p>Across several thousand benchmarked configurations on 1 to 64 nodes of 8 H100s, efficiency fell as the number of nodes grew, especially for small models, because the fixed global batch of 1 million tokens left less work per GPU. The best MFU in the data behind the playbook’s summary chart was about 44 to 47% for models from 1B to 9B parameters and about 34% for 80B. The playbook’s most striking finding is that implementation quality mattered as much as the choice of technique: tensor parallelism beat pipeline parallelism until the pipeline code was optimized, after which pipeline parallelism won.</p>

<p>My single-GPU run reached about 85% MFU, measured against the RTX 5090’s rated bf16 throughput, at 48,000 tokens a second and about 3.7 billion floating-point operations per token. The two figures come from different hardware, so they aren’t directly comparable. The gap does show what the playbook is about, though: most of the lost efficiency at scale is time spent communicating, and on one GPU there’s nothing to communicate.</p>

<h2 id="inside-the-gpu">Inside the GPU</h2>

<p>Past the choice of parallelism, the playbook’s last section is about making each GPU faster.</p>

<p><strong>Fuse operations.</strong> A sequence of small element-wise operations, such as a normalization, reads and writes GPU memory at every step. A fused kernel does them all in one pass. <code class="language-plaintext highlighter-rouge">torch.compile</code> does much of this automatically, and my run used it. Custom kernels in Triton or CUDA go further at more effort.</p>

<p><strong>Use FlashAttention.</strong> It computes attention in tiles held in the GPU’s fast on-chip memory, never writing the full attention matrix out, which is the saving in the chart above. FlashAttention-2 roughly doubled its speed with better partitioning of work, and FlashAttention-3 adds support for newer hardware and fp8.</p>

<p><strong>Choose number formats deliberately.</strong> The formats differ in how their bits are split between exponent, which sets the range, and mantissa, which sets the precision:</p>

<table>
  <thead>
    <tr>
      <th>Format</th>
      <th>Sign / exponent / mantissa bits</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>fp32</td>
      <td>1 / 8 / 23</td>
    </tr>
    <tr>
      <td>fp16</td>
      <td>1 / 5 / 10</td>
    </tr>
    <tr>
      <td>bf16</td>
      <td>1 / 8 / 7</td>
    </tr>
    <tr>
      <td>fp8, E4M3</td>
      <td>1 / 4 / 3</td>
    </tr>
    <tr>
      <td>fp8, E5M2</td>
      <td>1 / 5 / 2</td>
    </tr>
  </tbody>
</table>

<p>bf16 keeps fp32’s range with less precision, which is why it has largely replaced fp16 for training. fp8 doubles the throughput of bf16 on H100s but is harder to keep stable; DeepSeek-V3 was the first large public model trained with it, using separate scaling factors for small tiles of each matrix. The playbook still called fp8 training experimental in early 2025.</p>

<h2 id="rules-of-thumb">Rules of thumb</h2>

<ul>
  <li>Weights, gradients and Adam state cost 16 bytes per parameter in standard mixed precision, 20 with fp32 gradient accumulation.</li>
  <li>Activations grow linearly with batch size and, without FlashAttention, with the square of sequence length.</li>
  <li>A run that survives step 1 and then runs out of memory has just allocated its optimizer state.</li>
  <li>Training costs about 6 floating-point operations per parameter per token: 2 in the forward pass and 4 in the backward pass.</li>
  <li>Use more GPUs before more gradient accumulation.</li>
  <li>Keep tensor parallelism inside a node, and no wider than the number of attention heads.</li>
  <li>Prefer ZeRO-2 to ZeRO-1; use ZeRO-3 when the weights themselves don’t fit.</li>
  <li>Measure MFU, and change one parallelism dimension at a time.</li>
</ul>

<h2 id="sources">Sources</h2>

<ul>
  <li>Nouamane Tazi, Ferdinand Mom, Haojun Zhao, Phuc Nguyen, Mohamed Mekkouri, Leandro von Werra and Thomas Wolf, <a href="https://huggingface.co/spaces/nanotron/ultrascale-playbook">The Ultra-Scale Playbook: Training LLMs on GPU Clusters</a>, Hugging Face, 2025.</li>
  <li>Tri Dao, Daniel Y. Fu, Stefano Ermon, Atri Rudra and Christopher Ré, <a href="https://arxiv.org/abs/2205.14135">FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness</a>, 2022.</li>
  <li>Tri Dao, <a href="https://arxiv.org/abs/2307.08691">FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning</a>, 2023.</li>
</ul>]]></content><author><name>Jayaprakash</name></author><summary type="html"><![CDATA[What it takes to train a language model on more than one GPU, from memory accounting to 5D parallelism, following Hugging Face's Ultra-Scale Playbook and checked against my own single-GPU run.]]></summary></entry><entry><title type="html">The Ralph Loop</title><link href="https://www.jayaprakash.net/blog/2026-06-01-ralph-loop/" rel="alternate" type="text/html" title="The Ralph Loop" /><published>2026-06-01T00:00:00+00:00</published><updated>2026-06-01T00:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/ralph-loop</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-06-01-ralph-loop/"><![CDATA[<p>The Ralph Loop runs an AI coding agent in a cycle instead of a single conversation. It reads a task list, picks the next item, builds it, commits the change, ticks the item off, and goes back to the top. It keeps going until the list is empty. Every step lands in its own commit, so you can read what changed and when.</p>

<p>The loop runs in an isolated workspace, which keeps a bad step off your working tree. Tasks come from wherever you keep them: a file, an issue tracker, email. It suits the work that has a clear finish line and no interesting decisions in it, such as writing tests, fixing lint, updating docs, and migrating an API across a codebase. You still decide what gets built and whether the result is right.</p>]]></content><author><name>Jayaprakash Sundararaj</name></author><summary type="html"><![CDATA[The Ralph Loop runs an AI coding agent in a cycle instead of a single conversation. It reads a task list, picks the next item, builds it, commits the change, ticks the item off, and goes back to the top. It keeps going until the list is empty. Every step lands in its own commit, so you can read what changed and when.]]></summary></entry><entry><title type="html">Manus AI’s cool demo</title><link href="https://www.jayaprakash.net/blog/2026-05-19-manus-ai-cool-demo/" rel="alternate" type="text/html" title="Manus AI’s cool demo" /><published>2026-05-19T00:00:00+00:00</published><updated>2026-05-19T00:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/manus-ai-cool-demo</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-05-19-manus-ai-cool-demo/"><![CDATA[<ul>
  <li>More than 1 million people watched it in 20 hours. They showed a handful of things and did each one well.</li>
  <li>They showed it could pick good resumes and look at stocks. These were real jobs, not made-up examples.</li>
  <li>They only showed 2 or 3 real things it could do. Most AI says it can do anything, but this one didn’t.</li>
  <li>You could see it doing the work by itself. You didn’t need someone to explain everything.</li>
  <li>It wasn’t perfect, which made it feel real. Fake demos look too perfect.</li>
  <li>They told you what it can do. They showed you exactly what it’s good at.</li>
</ul>

<table>
  <tbody>
    <tr>
      <td><a href="https://www.youtube.com/watch?v=K27diMbCsuw">YouTube Demo</a></td>
      <td><a href="https://en.wikipedia.org/wiki/Manus_(AI_agent)">Wikipedia</a></td>
    </tr>
  </tbody>
</table>]]></content><author><name>Jayaprakash Sundararaj</name></author><summary type="html"><![CDATA[More than 1 million people watched it in 20 hours. They showed a handful of things and did each one well. They showed it could pick good resumes and look at stocks. These were real jobs, not made-up examples. They only showed 2 or 3 real things it could do. Most AI says it can do anything, but this one didn’t. You could see it doing the work by itself. You didn’t need someone to explain everything. It wasn’t perfect, which made it feel real. Fake demos look too perfect. They told you what it can do. They showed you exactly what it’s good at.]]></summary></entry><entry><title type="html">Writing Claude Skills</title><link href="https://www.jayaprakash.net/blog/2026-03-22-writing-claude-skills/" rel="alternate" type="text/html" title="Writing Claude Skills" /><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://www.jayaprakash.net/blog/writing-claude-skills</id><content type="html" xml:base="https://www.jayaprakash.net/blog/2026-03-22-writing-claude-skills/"><![CDATA[<p>A Claude Skill hands Claude your workflow in a file, so you stop re-explaining it every session.</p>

<p>What I learned writing a few:</p>

<ul>
  <li>One skill = one job. Don’t try to do everything in one skill
    <ul>
      <li>Bad: “My coding helper” (does linting, formatting, testing, docs, reviews)</li>
      <li>Good: “Markdown linter for my blog posts” (only fixes markdown)</li>
    </ul>
  </li>
  <li>If you have 3 different workflows, make 3 separate skills</li>
  <li>A skill that does five jobs fires at the wrong time and steps on your other skills</li>
  <li>Spend your effort on the description. Claude reads it first, and it decides whether your skill loads at all
    <ul>
      <li>Bad: “helps with formatting”</li>
      <li>Good: “Fixes markdown syntax and formatting for blog posts when user asks to review a draft”</li>
    </ul>
  </li>
  <li>A vague description means the skill sits there unused</li>
  <li>Say when the skill applies and what problem it solves</li>
  <li>Make it condition-based (when X happens, use this skill)
    <ul>
      <li>Example: “Use this when user provides git diffs to fix merge conflicts”</li>
    </ul>
  </li>
</ul>

<p>Start with one problem you already have:</p>

<ul>
  <li>Pick one actual thing you need to do, not something you imagine might be useful
    <ul>
      <li>Example: “I always struggle formatting my blog post frontmatter” is better than “I want to help with writing someday”</li>
    </ul>
  </li>
  <li>Test whether Claude reaches for the skill on its own
    <ul>
      <li>Example: Does it load when you paste a blog post draft, without you naming it?</li>
    </ul>
  </li>
  <li>Fix the hardest part first
    <ul>
      <li>Example: If detecting the frontmatter format is tricky, solve that before worrying about date formatting</li>
    </ul>
  </li>
  <li>Change the instructions based on what Claude does, not what you assumed it would do
    <ul>
      <li>Example: If Claude keeps adding extra blank lines, adjust the instructions instead of guessing why</li>
    </ul>
  </li>
</ul>

<p>Get the structure right:</p>

<ul>
  <li>Skills are just folders with a SKILL.md file</li>
  <li>The file needs YAML frontmatter at the top</li>
  <li>Two required fields: <code class="language-plaintext highlighter-rouge">name</code> and <code class="language-plaintext highlighter-rouge">description</code></li>
  <li>Everything else is markdown instructions</li>
</ul>

<p>File organization matters:</p>

<ul>
  <li>Put templates (files Claude copies) in <code class="language-plaintext highlighter-rouge">templates/</code> folder
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">templates/blog-post-template.md</code> is a blank post structure Claude fills in</li>
    </ul>
  </li>
  <li>Put reference docs (files Claude reads) in <code class="language-plaintext highlighter-rouge">references/</code> folder
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">references/markdown-style-guide.md</code> tells Claude your formatting rules (but isn’t copied)</li>
    </ul>
  </li>
  <li>Folder names tell Claude what each file does</li>
  <li>Don’t mix templates and references in the same folder
    <ul>
      <li>Bad: Everything in one folder with confusing names</li>
      <li>Good: Clear folders so Claude knows what to do with each file</li>
    </ul>
  </li>
</ul>

<p>Keep your skills in version control:</p>

<ul>
  <li>Keep your skills in a Git repo (like on GitHub)
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">~/.claude/skills/</code> as a git repo synced with GitHub</li>
    </ul>
  </li>
  <li>If they’re just on one computer, they drift and become inconsistent
    <ul>
      <li>Problem: You edit a skill on laptop but forget the changes on desktop</li>
    </ul>
  </li>
  <li>Committing to a personal repo keeps all your machines synced
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">git push</code> after tweaking your skill, then <code class="language-plaintext highlighter-rouge">git pull</code> on your work computer</li>
    </ul>
  </li>
  <li>You start trusting a skill once you can see its history
    <ul>
      <li>Example: When something breaks, you can see exactly what changed and when</li>
    </ul>
  </li>
</ul>

<p>Write your tests first:</p>

<ul>
  <li>Know what success looks like before you code
    <ul>
      <li>Example: “Input: messy blog post → Output: clean frontmatter with correct date format”</li>
    </ul>
  </li>
  <li>This catches skills nobody needs before you write them
    <ul>
      <li>Example: If you never paste markdown to Claude, don’t build a markdown skill</li>
    </ul>
  </li>
  <li>It also gives you something to check against when the skill misbehaves
    <ul>
      <li>Example: When Claude adds wrong formatting, you have specific test cases to check against</li>
    </ul>
  </li>
</ul>

<p>Quick start process with a real example:</p>

<ol>
  <li>Pick one workflow you do regularly
    <ul>
      <li>Example: “I format blog post dates from random formats into YYYY-MM-DD”</li>
    </ul>
  </li>
  <li>Write down the exact steps
    <ul>
      <li>Example: Check for multiple date formats → Convert to ISO format → Update frontmatter</li>
    </ul>
  </li>
  <li>Create a skill folder with SKILL.md
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">~/.claude/skills/blog-date-formatter/</code></li>
    </ul>
  </li>
  <li>Add clear name and description
    <ul>
      <li>Example: name: “blog-date-formatter”, description: “Converts messy blog post dates to ISO format YYYY-MM-DD when user pastes content”</li>
    </ul>
  </li>
  <li>Write instructions in markdown
    <ul>
      <li>Example: “Look for dates in these formats: ‘July 11, 2026’ or ‘7/11/26’ → Always convert to 2026-07-11”</li>
    </ul>
  </li>
  <li>Test it with real examples
    <ul>
      <li>Example: Paste an actual blog post you wrote and see if Claude fixes the dates right</li>
    </ul>
  </li>
  <li>Commit to GitHub
    <ul>
      <li>Example: <code class="language-plaintext highlighter-rouge">git commit -m "Add blog date formatter skill"</code></li>
    </ul>
  </li>
</ol>

<p>A skill is a file of instructions you stopped having to retype. Build one for the workflow you run most, and see whether Claude picks it up on its own.</p>

<hr />

<p>Sources:</p>
<ul>
  <li><a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices">Skill authoring best practices - Claude Platform Docs</a></li>
  <li><a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">The Complete Guide to Building Skills for Claude</a></li>
  <li><a href="https://codemeetai.substack.com/p/how-to-create-a-claude-code-skill">How to create a Claude Code skill</a></li>
  <li><a href="https://uxplanet.org/7-rules-for-creating-an-effective-claude-code-skill-2d81f61fc7cd">7 Rules for Creating an Effective Claude Code Skill</a></li>
  <li><a href="https://claude.com/resources/tutorials/teach-claude-your-way-of-working-using-skills">Teach Claude your way of working using skills</a></li>
</ul>]]></content><author><name>Jayaprakash Sundararaj</name></author><summary type="html"><![CDATA[A Claude Skill hands Claude your workflow in a file, so you stop re-explaining it every session.]]></summary></entry></feed>