Identify what changes when a block computes attention and FFN in parallel, PaLM style
Parallel blocks (PaLM, GPT-J, Falcon) run `attn(norm(x))` and `ffn(norm(x))` from the same input and sum both into the residual, fusing projections for faster step time at large scale.
Imagine a kitchen with two cooks. In the normal recipe, the second cook waits for the first to plate the appetizer, then builds the main course on top of it. In the parallel recipe, both cooks read the same order ticket at the same time and prepare their dishes side by side, and the waiter combines them at the pass. You finish faster because nobody waits. The trade is that the main-course cook never tastes the appetizer first, so the dishes are designed slightly more independently. At a big restaurant with hundreds of orders, the speed win outweighs the loss of that coordination.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Parallel blocks are a small-looking equation change with outsized training-throughput consequences. They are also a great litmus test for whether a candidate knows the 2022-2024 open-weights lineage by name. The interview-worthy version of this answer covers the equation, the source of the hardware speedup, the small-scale quality cost, and which architectures actually shipped it.
The block layout question recurs in interviews because it sits at the intersection of three things teams actually argue about: training-step efficiency, kernel fusion, and architectural conservatism. Getting it right means understanding both the math and the engineering choice.
Sequential vs parallel: the equations side by side
The standard pre-norm decoder block is sequential. It first updates the residual stream with attention, then updates the result with the FFN.
h = x + attn(norm1(x))
y = h + ffn(norm2(h))
The parallel formulation collapses both sublayer updates into a single residual write. Both sublayers read the same normalized input.
Notice three differences. First, the FFN's input is norm(x), not norm(h), so it does not see this layer's attention contribution. Second, many implementations share a single LayerNorm across both branches, saving one norm. Third, the residual stream gets a single combined update rather than two sequential updates.
Mathematically, the parallel block is strictly less expressive than the sequential one at the same layer because the FFN cannot condition on the current attention output. Across multiple layers, the gap shrinks because layer L+1's attention can read what layer L's FFN wrote, recovering most of the lost coupling. Empirically the gap is small and disappears at frontier scale.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- PaLM 540B (Google, 2022) used parallel blocks and reported a ~15 percent training step speedup with negligible quality loss at scale.
- GPT-J 6B (EleutherAI, 2021) used parallel blocks and helped popularize the recipe outside Google.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhy does PaLM share a single LayerNorm across the two sublayers in its parallel block?
If both sublayers read the same input, normalizing it twice is wasted work. One shared norm saves a kernel and a small amount of memory, and there is no statistical reason to renormalize an unchanged tensor.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Thinking parallel blocks remove the residual. They keep it; what changes is that attention and FFN both read the same norm(x) instead of FFN reading attention's output.
60 second bullets to scan on the way to the call.
Write the sequential pre-norm block equation from memory
Write the parallel block equation and identify the shared input
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.