Notes on CPU–GPU dual language modelsCPU–GPU 이중 언어 모델 노트关于 CPU–GPU 双语言模型的笔记

The Mystery of the Unlearned Parameters

학습되지 않은 파라미터의 미스터리

未被学习的参数之谜

From the peculiar mechanics of Engram tables and the Infinite-Sparse Regime to the rise of CPU–GPU Dual LLMs, with our own experiments.

Engram 테이블의 이상한 동작과 무한 희소 영역에서 CPU–GPU 이중 LLM까지, 우리 실험과 함께.

从 Engram 表的奇特机制、无限稀疏区间,到 CPU–GPU 双 LLM 的兴起,附上我们自己的实验。

A strange shift is quietly unfolding at the frontier of LLM architecture research. For years the scaling playbook was simple: pack more knowledge into dense Transformer weights, or route computation through sparse Mixture-of-Experts layers. Recently a different design has started to gain traction: bolting massive N-gram memory ("Engram") tables outside the neural backbone and offloading them to system RAM.

LLM 아키텍처 연구의 최전선에서 이상한 변화가 조용히 일어나고 있다. 지난 몇 년간 언어 모델을 키우는 방법은 단순했다. dense Transformer 가중치에 지식을 더 채우거나, 희소 Mixture-of-Experts 층으로 계산을 나누는 것이다. 그런데 최근 전혀 다른 설계가 주목받고 있다. 거대한 N-gram 메모리(Engram) 테이블을 신경망 바깥에 붙이고 시스템 RAM에 통째로 올려 두는 방식이다.

在 LLM 架构研究的前沿,一个奇怪的转变正在悄然发生。多年来,扩展语言模型的套路很简单:要么把更多知识塞进稠密 Transformer 权重,要么用稀疏的混合专家层分摊计算。最近,一种截然不同的设计开始受到关注:在神经网络主干之外挂上巨大的 N-gram 记忆(Engram)表,并把它整个放进系统内存。

The intuition sounds simple. Let a giant lookup table handle local patterns and frequent collocations, and free the Transformer to focus on contextual reasoning. Yet the moment we look at how these architectures actually train, we run into a mystery that defies standard deep learning intuition.

직관은 단순해 보인다. 거대한 조회 테이블이 지역 패턴과 자주 쓰이는 연어를 맡고, Transformer는 문맥 추론에 집중하게 하자는 것이다. 그런데 이 아키텍처가 실제로 어떻게 학습되는지 들여다보는 순간, 기존 딥러닝 직관으로는 설명되지 않는 미스터리에 부딪힌다.

直觉看起来很简单:让巨大的查找表负责局部模式和高频搭配,让 Transformer 专注于上下文推理。可一旦仔细看这些架构实际如何训练,就会撞上一个违背深度学习常识的谜题。

CPU · statistical LM GPU · neural LM longest suffix it has seen 99.8B tokens · 500 GB · no gradients hints mix⌕ zoom layer 1 layer ⋯ layer L reads the whole context logits ⊕ prior → choose memory: written once, read forever gradients: GPU side only mixing, up close query = hidden state h of the current token h′ = h + g · Σ αᵢ vᵢ z = z_net + β · log cᵢ
Figure 1. A CPU–GPU dual language model. A statistical LM built once from the corpus sits in system RAM and offers candidates with counts. A small neural LM on the GPU weighs them against the whole context and makes the choice. Only the GPU side is trained. Counts are real queries to our index; the network weights shown are illustrative.
그림 1. CPU–GPU 이중 언어 모델. 코퍼스로 한 번 만든 통계 LM이 시스템 RAM에 있고 후보를 개수와 함께 내놓는다. GPU의 작은 신경 LM이 전체 문맥에 비추어 후보를 저울질하고 선택한다. 학습되는 것은 GPU 쪽뿐이다. 개수는 우리 인덱스에 실제로 던진 쿼리 결과이고, 네트워크 가중치는 설명용 예시다.
图 1. CPU–GPU 双语言模型。由语料一次性构建的统计 LM 位于系统内存,给出带计数的候选;GPU 上的小型神经 LM 结合整个上下文权衡这些候选并做出选择。只有 GPU 端被训练。计数来自对我们索引的真实查询,图中的网络权重仅为示意。

1How do unupdated parameters make a model smarter?

1갱신되지 않는 파라미터가 어떻게 모델을 똑똑하게 만드는가

1没有更新的参数如何让模型更聪明?

The most extreme testing ground for this shift is the NanoGPT Speedrun: a race to reach GPT-2-level validation loss (3.28 on FineWeb) in the shortest wall-clock time on 8×H100. Early records came from better optimizers like Muon and kernel work. The recent leaps came from outside the dense weights: a 65-billion-parameter hashed N-gram embedding table.

이 변화가 가장 극단적으로 증명된 곳은 NanoGPT Speedrun이다. 8×H100에서 GPT-2 수준의 검증 손실(FineWeb 3.28)에 가장 빨리 도달하는 경쟁이다. 초기 기록은 Muon 같은 옵티마이저와 커널 최적화에서 나왔다. 최근의 큰 도약은 dense 가중치 바깥, 650억 파라미터짜리 해시 N-gram 임베딩 테이블에서 나왔다.

这一转变最极端的试验场是 NanoGPT Speedrun:在 8×H100 上以最短时间达到 GPT-2 水平的验证损失(FineWeb 上 3.28)。早期纪录来自 Muon 等更好的优化器和内核优化。最近的飞跃则来自稠密权重之外:一张 650 亿参数的哈希 N-gram 嵌入表。

optimizer, kernels, architecture옵티마이저·커널·구조优化器、内核、架构 lookup memory: value / bigram / n-gram embeddings조회형 메모리: value·bigram·n-gram 임베딩查表记忆:value / bigram / n-gram 嵌入
Figure 2. Two years of NanoGPT speedrun records (8×H100, reach 3.28 val loss on FineWeb; log scale). Hover or tap a point for the change behind it. Amber points add lookup memory to the model. The latest drop, from 1.13 to 0.67 minutes, includes an 84.6M-row hashed n-gram table. Data: modded-nanogpt README.
그림 2. 2년간의 NanoGPT 스피드런 기록 (8×H100, FineWeb 검증 손실 3.28 도달, 로그 축). 점에 커서를 대거나 누르면 그 기록의 변경 내용이 나온다. 주황색 점은 모델에 조회형 메모리를 더한 기록이다. 가장 최근의 하락(1.13분 → 0.67분)에는 8,460만 행짜리 해시 n-gram 테이블이 들어 있다. 출처: modded-nanogpt README.
图 2. 两年的 NanoGPT speedrun 纪录(8×H100,在 FineWeb 上达到 3.28 验证损失;对数坐标)。悬停或点击数据点可查看该纪录的改动。橙色点表示给模型加入了查表记忆。最新的一次下降(1.13 分钟 → 0.67 分钟)包含一张 8460 万行的哈希 n-gram 表。数据:modded-nanogpt README。

The core Transformer stays tiny while the table sits in CPU memory and gets sparse updates only on the rows it touches. Here is the paradox. The table has 65 billion parameters, yet the run sees only a few hundred million tokens. Most rows are updated once or twice, or never. Everything we know about deep learning says representations emerge from thousands of gradient steps. How does a ghost table of barely-touched parameters accelerate convergence so much?

Transformer 본체는 작게 두고, 거대한 테이블은 CPU 메모리에 둔 채 건드린 행만 희소하게 갱신한다. 여기서 역설이 생긴다. 테이블에는 파라미터가 650억 개 있는데, 학습 전체에서 보는 토큰은 수억 개뿐이다. 대부분의 행은 한두 번 갱신되거나 아예 갱신되지 않는다. 우리가 아는 딥러닝에서 표현은 수천 번의 gradient step이 쌓이며 생긴다. 거의 건드려지지 않은 유령 같은 테이블이 어떻게 수렴을 이렇게 앞당기는가?

Transformer 主干保持很小,巨大的表放在 CPU 内存中,只对被访问的行做稀疏更新。悖论就在这里。这张表有 650 亿个参数,而整个训练只看了几亿个 token。大多数行只被更新一两次,甚至从未被更新。按我们对深度学习的理解,表示来自成千上万次梯度累积。一张几乎没被碰过的幽灵表,怎么能如此加速收敛?

It gets stranger with the 6.7-second speedrun result by Herman Brunborg, which drops gradient updates on the table entirely. It uses idle CPU cores to build an N-gram search index over up to 37 billion tokens and feeds the continuations to a tiny GPU Transformer as hints. Holding the Transformer's budget fixed at 70.8M tokens, scaling only the hint corpus took validation loss from 3.72 down to 3.27.

Herman Brunborg의 6.7초 스피드런 결과를 보면 더 이상해진다. 이 방식은 테이블의 gradient 갱신을 아예 버린다. 남는 CPU 코어로 최대 370억 토큰에 대한 N-gram 검색 인덱스를 만들고, 뒤에 이어진 문장을 작은 GPU Transformer에 힌트로 넣는다. Transformer 학습량을 7,080만 토큰으로 고정한 채 힌트 코퍼스만 키웠더니 검증 손실이 3.72에서 3.27로 떨어졌다.

Herman Brunborg 的 6.7 秒 speedrun 结果让事情更奇怪。它完全放弃了对表的梯度更新,而是用空闲的 CPU 核心在最多 370 亿 token 上构建 N-gram 检索索引,把后续文本作为提示喂给一个很小的 GPU Transformer。在 Transformer 训练量固定为 7080 万 token 的情况下,仅扩大提示语料,验证损失就从 3.72 降到了 3.27。

One approach runs sparse gradient descent on a 65B table. The other skips gradient learning and injects non-parametric retrieval hints. Why do both produce the same kind of efficiency jump? What is the model actually learning?

하나는 650억 테이블에 희소 gradient descent를 돌리고, 다른 하나는 gradient 학습 없이 비모수 검색 힌트를 넣는다. 서로 다른 두 메커니즘이 왜 같은 종류의 효율 도약을 만드는가? 모델은 실제로 무엇을 배우고 있는가?

一种方法在 650 亿的表上做稀疏梯度下降,另一种完全绕过梯度学习,注入非参数的检索提示。两种不同的机制为什么带来同一种效率飞跃?模型到底在学什么?

2The Infinite-Sparse Regime

2무한 희소 영역

2无限稀疏区间

Stop asking what the model learns and ask how each parameter is updated. Push the table to its limit. In a dense network, or a modest hash table, many contexts share weights or collide in a bucket, so early and late gradients interfere and we need iterative optimization to resolve them. Now let the table grow past 65B, past 1T, toward M → ∞. Every N-gram g gets its own slot eg, and by Zipf's law almost every long-tail N-gram appears once or twice in the whole corpus.

모델이 무엇을 배우는지가 아니라 각 파라미터가 어떻게 갱신되는지를 묻자. 테이블을 극한까지 키워 본다. dense 네트워크나 적당한 크기의 해시 테이블에서는 여러 문맥이 같은 가중치를 공유하거나 같은 버킷에 충돌한다. 그래서 초반과 후반의 gradient가 서로 간섭하고, 이를 풀려면 반복 최적화가 필요하다. 이제 테이블을 650억, 1조를 넘어 M → ∞까지 키운다. 모든 N-gram g가 자기만의 칸 eg를 갖고, Zipf 법칙에 따라 롱테일 N-gram 거의 전부는 코퍼스 전체에서 한두 번만 나온다.

不要再问模型学到了什么,而要问每个参数是如何被更新的。把表推到极限。在稠密网络或中等大小的哈希表里,许多上下文共享权重或落入同一个桶,早期和后期的梯度相互干扰,需要迭代优化来化解。现在让表超过 650 亿、超过 1 万亿,直到 M → ∞。每个 N-gram g 都有自己的槽位 eg,而根据齐普夫定律,几乎所有长尾 N-gram 在整个语料中只出现一两次。

Consider a rare N-gram seen for the first time at minute 1 versus hour 10. Once the backbone has picked up basic syntax, the update written into that untouched slot does the same job either way:

드문 N-gram을 학습 1분째에 처음 보는 경우와 10시간째에 처음 보는 경우를 비교해 보자. 본체가 기본 문법을 익힌 뒤라면, 비어 있던 칸에 쓰이는 갱신은 어느 쪽이든 같은 일을 한다.

比较一个罕见 N-gram 在训练第 1 分钟和第 10 小时首次出现的情形。只要主干已经学会基本语法,写进那个空槽位的更新在两种情况下作用相同:

\[\Delta e_g(t_1) \approx \Delta e_g(t_2)\]

We call this training-time invariance. When most entries are visited once, the variable that governs learning is the slot's own visit count, not the global step. If a value is fixed by one or two visits, keeping momentum and variance and backpropagating into it is no longer iterative optimization. In the infinite limit, sparse gradient descent collapses into one-shot associative memory writing. That is why a 65B table of mostly untouched rows works, and why a non-parametric N-gram index can replace it.

이를 학습 시점 불변성이라 부르자. 대부분의 칸이 한 번만 방문되면, 학습을 지배하는 변수는 전체 step 수가 아니라 그 칸의 방문 횟수가 된다. 값이 한두 번의 방문으로 정해진다면 momentum과 variance를 유지하며 역전파하는 것은 더 이상 반복 최적화가 아니다. 무한 극한에서 희소 gradient descent는 한 번 쓰고 끝나는 연상 기억 저장으로 붕괴한다. 거의 건드려지지 않은 650억 테이블이 통하는 이유도, 비모수 N-gram 인덱스가 그것을 대체할 수 있는 이유도 여기에 있다.

我们称之为训练时间不变性。当大多数槽位只被访问一次时,支配学习的变量不再是全局步数,而是该槽位自己的访问次数。如果一个值由一两次访问决定,那么维持动量和方差并反向传播就不再是迭代优化。在无限极限下,稀疏梯度下降坍缩为一次性的联想记忆写入。这就是为什么一张几乎没被更新的 650 亿表能起作用,也是为什么非参数 N-gram 索引能替代它。

Try it: when does learning turn into writing?

직접 해 보기: 학습은 언제 쓰기가 되는가?

试一试:学习何时变成写入?

A toy model of a hashed n-gram table. Move the table size and the training budget and watch how often each row is actually updated. Unique 2–4-grams are modelled as U ≈ T0.95 and rows are filled at random.

해시 n-gram 테이블의 장난감 모델이다. 테이블 크기와 학습량을 움직이며 각 행이 실제로 몇 번 갱신되는지 보자. 고유한 2~4-gram 수는 U ≈ T0.95로 두고, 행은 무작위로 채워진다고 가정했다.

一个哈希 n-gram 表的玩具模型。移动表大小和训练量,看看每一行实际被更新多少次。独特 2–4-gram 的数量设为 U ≈ T0.95,行被随机填充。

updates per used row사용된 행당 갱신每个已用行的更新次数
rows never touched한 번도 안 쓰인 행从未被触碰的行
n-grams sharing a row행을 공유하는 n-gram共享一行的 n-gram
Regime:영역:区间:

3What we measured

3우리가 측정한 것

3我们的测量

If the thought experiment holds, a large share of dense pretraining is spent forcing weight matrices to memorize local statistics that never needed iterative learning. So pre-computed N-gram statistics, injected as hints during training, should buy efficiency in an ordinary model too. We tested this directly.

이 사고실험이 맞다면 dense pretraining의 상당 부분은 반복 학습이 필요 없었던 지역 통계를 가중치에 외우게 하는 데 쓰이고 있다. 그렇다면 미리 계산한 N-gram 통계를 학습 중에 힌트로 넣어 주면 평범한 모델에서도 효율이 올라가야 한다. 이것을 직접 실험했다.

如果这个思想实验成立,稠密预训练中相当一部分算力被花在迫使权重矩阵记忆本不需要迭代学习的局部统计上。那么在训练中注入预先计算好的 N-gram 统计作为提示,普通模型也应当获得效率提升。我们直接做了实验。

The setup: a 124M modded-nanoGPT model trained on a math-heavy web mix. A CPU-side table stores 1- to 6-gram continuations over about 45B tokens. At every position the model receives the top-k next tokens and their counts and adds them as a gated logit bonus. To rule out leakage, every lookup removes all occurrences from the current document (leave-one-document-out, or LODO).

설정은 이렇다. 수학 비중이 높은 웹 데이터로 124M modded-nanoGPT 모델을 학습한다. CPU 쪽 테이블은 약 450억 토큰에서 1~6-gram 이어짐을 저장한다. 모델은 위치마다 다음 토큰 후보 top-k와 개수를 받아 gated logit bonus로 더한다. 누출을 막기 위해 모든 조회에서 현재 문서의 출현을 전부 뺀다(leave-one-document-out, LODO).

设置如下:在偏重数学的网页数据上训练一个 124M 的 modded-nanoGPT 模型。CPU 端的表保存约 450 亿 token 上的 1 到 6-gram 后续统计。模型在每个位置得到 top-k 候选下一个 token 及其计数,以门控 logit 加成的形式加入。为了排除泄漏,每次查询都去掉当前文档的所有出现(留一文档,LODO)。

2.52.42.32.22.1 0.3B0.5B1B training tokens (log scale) held-out loss (nats/token, LODO) no hints 2.4752.225 N-gram hints 2.2782.070 ≈2.6× fewer tokens for the same loss
Figure 3. Token efficiency. At 300M tokens the hinted model (2.278) is already close to the baseline at 1B tokens (2.225). Interpolating the baseline in log-tokens, it would need about 0.78B tokens to match, roughly 2.6× more. The gap remains at 1B (2.070 vs 2.225). All losses use leave-one-document-out lookups.
그림 3. 토큰 효율. 300M 토큰에서 힌트 모델(2.278)은 이미 1B 토큰 기준선(2.225)에 가깝다. 기준선을 로그 토큰으로 보간하면 같은 손실에 약 0.78B 토큰, 즉 약 2.6배가 필요하다. 1B에서도 차이가 남는다(2.070 대 2.225). 모든 손실은 자기 문서를 뺀 조회로 쟀다.
图 3. token 效率。在 3 亿 token 时,带提示的模型(2.278)已接近基线 10 亿 token 时的水平(2.225)。按对数 token 插值,基线需要约 7.8 亿 token 才能追平,约 2.6 倍。到 10 亿 token 差距仍在(2.070 对 2.225)。所有损失都使用留一文档查询。

The first result matches the thought experiment: at 300M training tokens the hinted model reaches a held-out loss the baseline needs about 2.6× more tokens to reach, and the gap does not close at 1B. That is a little better than the 2× we expected.

첫 결과는 사고실험과 맞는다. 300M 토큰에서 힌트 모델이 도달한 held-out 손실에, 기준선은 약 2.6배의 토큰이 필요하다. 그 차이는 1B에서도 닫히지 않는다. 예상한 2배보다 조금 더 크다.

第一个结果符合思想实验:在 3 亿训练 token 时,带提示模型达到的留出损失,基线需要约 2.6 倍的 token 才能达到,而且到 10 亿 token 差距也没有缩小。这比我们预期的 2 倍还要多一些。

The more telling result comes from removing the table. If the network had learned the statistics anyway, taking the hints away should cost nothing. It costs more than nothing:

더 의미 있는 결과는 테이블을 뗐을 때 나온다. 네트워크가 통계를 어차피 배웠다면 힌트를 빼도 손해가 없어야 한다. 그런데 손해가 있다.

更能说明问题的是把表拿掉。如果网络本来就学会了这些统计,去掉提示应该没有损失。可事实上有损失:

2.02.22.42.6 trained with hints, table on 2.278 baseline, never had a table 2.475 trained with hints, table removed 2.535
Figure 4. The network stops memorizing. Same 124M model at 300M tokens, held-out loss in nats/token (lower is better). It did not learn the statistics the table already held. It learned to rely on them.
그림 4. 네트워크가 외우기를 멈춘다. 같은 124M 모델, 300M 토큰, held-out 손실(nats/token, 낮을수록 좋음). 테이블이 이미 가진 통계를 배우지 않고 그것에 기대는 법을 배웠다.
图 4. 网络停止了记忆。同一个 124M 模型,3 亿 token,留出损失(nats/token,越低越好)。它没有学习表里已有的统计,而是学会了依赖它们。

Without its table, the hinted model is worse than a baseline that never had one (+0.06). This is the behaviour the Infinite-Sparse argument predicts. The network does not duplicate what the external memory stores. It spends its capacity elsewhere and reads the rest from the table.

테이블을 뗀 힌트 모델은 처음부터 테이블이 없던 기준선보다도 나쁘다(+0.06). 무한 희소 논증이 예측하는 행동이다. 네트워크는 외부 메모리에 있는 것을 중복해서 저장하지 않는다. 용량을 다른 데 쓰고 나머지는 테이블에서 읽는다.

去掉表后,带提示的模型比从未有过表的基线还要差(+0.06)。这正是无限稀疏论证所预测的行为。网络不会重复存储外部记忆已有的内容,而是把容量用在别处,其余从表中读取。

A fair objection is leakage. With occurrence-level leave-one-out, a document can still see its own earlier text through the table. Re-evaluating with full document exclusion barely moves the numbers:

누출을 의심할 수 있다. 출현 단위 leave-one-out에서는 문서가 테이블을 통해 자기 앞부분을 볼 수 있다. 문서 전체를 빼고 다시 재도 숫자는 거의 그대로다.

一个合理的质疑是泄漏。在按出现留一的设置下,文档仍可能通过表看到自己前面的文本。用完整的文档排除重新评估,数字几乎不变:

RunGain, occurrence LOOGain, document LOO
124M, 300M tokens−0.206−0.197
124M, 1B tokens−0.164−0.155
실행이득 (출현 LOO)이득 (문서 LOO)
124M, 300M 토큰−0.206−0.197
124M, 1B 토큰−0.164−0.155
运行收益(按出现留一)收益(按文档留一)
124M,3 亿 token−0.206−0.197
124M,10 亿 token−0.164−0.155

About 0.01 nats came from same-document copying. The rest is real.

같은 문서 베끼기에서 온 몫은 약 0.01 nats뿐이다. 나머지는 진짜다.

来自同文档复制的部分只有约 0.01 nats。其余都是真实的。

No pretraining at all

pretraining 없이

完全没有预训练

The stronger claim is that the external memory can stand in for pretraining. To push on it we started a looped student from random weights, with no pretraining corpus at all, and trained it only by on-policy distillation from a 4B teacher on grade-school math prompts. One arm (S) reads the N-gram table. The other (S−table) is identical without it.

더 강한 주장은 외부 메모리가 pretraining을 대신할 수 있다는 것이다. 이를 밀어붙이려고 pretraining 코퍼스 없이 무작위 가중치에서 루프 학생을 시작했고, 4B teacher로부터 초등 수학 프롬프트에 대한 on-policy distillation만으로 학습했다. 한쪽(S)은 N-gram 테이블을 읽고, 다른 쪽(S−table)은 테이블만 없는 동일한 모델이다.

更强的主张是外部记忆可以替代预训练。为此,我们从随机权重启动一个循环学生模型,完全不用预训练语料,只通过一个 4B 教师在小学数学题上的同策略蒸馏来训练。一组(S)读取 N-gram 表,另一组(S−table)除了没有表之外完全相同。

2.52.42.32.22.1 10001500200025003000 distillation steps (from random init) NLL on GSM8K reference solutions S−table 2.184 S, hints off 2.102 S, hints on 2.064
Figure 5. A from-scratch student with external memory. 148M looped model, random init, trained only by on-policy distillation. Lower is better. The arm with the table stays 0.12–0.24 nats below the identical arm without it across all 3000 steps. Turning the hints off at evaluation keeps part of the gain, so some of it moved into the weights.
그림 5. 외부 메모리를 단 무작위 초기화 학생. 148M 루프 모델을 무작위 초기화에서 on-policy distillation만으로 학습했다. 낮을수록 좋다. 테이블이 있는 쪽이 3,000 step 내내 0.12~0.24 nats 낮다. 평가 때 힌트를 꺼도 이득의 일부가 남아, 그만큼은 가중치로 옮겨 갔다.
图 5. 带外部记忆、从零开始的学生。148M 循环模型,随机初始化,仅用同策略蒸馏训练。越低越好。有表的一组在全部 3000 步中始终低 0.12–0.24 nats。评估时关闭提示仍保留部分收益,说明其中一部分转移进了权重。

4Building the infinite limit

4무한 극한을 직접 만들기

4构建无限极限

So we built it. We took a public, heavily filtered pretraining mix chosen for quality per token (DCLM and FineWeb-Edu via Zyda-2, Ultra-FineWeb-L3, Nemotron-CC-Math, FineMath, UltraData-Code). We removed every document that shares a 13-gram with the GSM8K, MMLU, ARC, HellaSwag or PIQA test sets, and indexed what was left as a suffix array: 99.8B tokens, a 500GB table, about 8 ms per query. There is no maximum N. For any context it returns the longest suffix that ever occurred and what followed it.

그래서 직접 만들었다. 토큰당 품질을 기준으로 고른 공개 정제 pretraining 혼합(Zyda-2를 통한 DCLM과 FineWeb-Edu, Ultra-FineWeb-L3, Nemotron-CC-Math, FineMath, UltraData-Code)을 받았다. GSM8K, MMLU, ARC, HellaSwag, PIQA test 셋과 13-gram이 겹치는 문서를 모두 빼고, 남은 것을 suffix array로 인덱싱했다. 998억 토큰, 500GB 테이블, 쿼리당 약 8ms. N에 상한이 없다. 어떤 문맥이든 지금까지 나온 가장 긴 접미사와 그 뒤에 온 것을 돌려준다.

于是我们把它建了出来。我们选取一个按每 token 质量挑选的公开精炼预训练混合(经 Zyda-2 的 DCLM 和 FineWeb-Edu、Ultra-FineWeb-L3、Nemotron-CC-Math、FineMath、UltraData-Code),删除所有与 GSM8K、MMLU、ARC、HellaSwag、PIQA 测试集共享 13-gram 的文档,再把剩下的内容建成后缀数组:998 亿 token,500GB 的表,每次查询约 8 毫秒。N 没有上限。对任何上下文,它返回出现过的最长后缀以及其后的内容。

Play: beat the memory

게임: 메모리를 이겨라

游戏:战胜记忆

Each prompt is a real query against our 100B-token index. Pick the next word, then see what the CPU memory alone would have said and how long a context it matched.

각 문제는 우리 1,000억 토큰 인덱스에 실제로 던진 쿼리다. 다음 단어를 고른 뒤, CPU 메모리 혼자라면 뭐라고 답했을지와 얼마나 긴 문맥을 맞췄는지 확인해 보자.

每道题都是对我们 1000 亿 token 索引的真实查询。选出下一个词,然后看看只靠 CPU 记忆会怎么回答,以及它匹配了多长的上下文。

round라운드回合 you나你 0memory메모리记忆 0

5Beyond offloading

5오프로딩을 넘어서

5超越卸载

Seen through learning dynamics, putting a huge table on the CPU is not a hardware compromise. It splits language modeling into two regimes, iterative optimization and write-once memory, and gives each the hardware it suits.

학습 동역학의 관점에서 보면 거대한 테이블을 CPU에 두는 것은 하드웨어 타협이 아니다. 언어 모델링을 반복 최적화와 한 번 쓰는 기억이라는 두 영역으로 나누고, 각각에 맞는 하드웨어를 주는 것이다.

从学习动力学看,把巨大的表放到 CPU 上不是硬件上的妥协。它把语言建模拆成迭代优化和一次写入记忆两个区间,并让每一部分运行在适合它的硬件上。

Proposed CPU–GPU dual LLM tokens x₁ … xₜ CPU · statistical LM 1 suffix-array lookup per position 2 drop own document (training) 3 hint packet: longest match L*, count C top-8 next tokens + counts continuation spans GPU · neural LM prelude core blocks × N passes hint cross-attn each pass coda small, shared weights: learns to compose and reason; reads memory, does not store it logits + gated count bonus counts xₜ₊₁
Figure 6. A dual model we can build today. The CPU side is the 100B-token suffix array from section 4. It costs no gradients and grows by appending text. The GPU side is a small looped core that sees the hints at every pass and adds a gated bonus from the counts to its own logits. During training each lookup excludes the current document, so the core learns to use the memory instead of copying from it.
그림 6. 지금 만들 수 있는 이중 모델. CPU 쪽은 4절의 1,000억 토큰 suffix array다. gradient가 들지 않고 텍스트를 덧붙이기만 하면 커진다. GPU 쪽은 매 pass마다 힌트를 보는 작은 루프 코어이고, 개수에서 나온 gated bonus를 자기 logit에 더한다. 학습 중에는 모든 조회에서 현재 문서를 빼서, 코어가 메모리를 베끼지 않고 쓰는 법을 배우게 한다.
图 6. 今天就能搭建的双模型。CPU 端是第 4 节的 1000 亿 token 后缀数组,不需要梯度,追加文本即可扩容。GPU 端是一个小型循环核心,每一轮都读取提示,并把由计数得到的门控加成加到自己的 logits 上。训练时每次查询都排除当前文档,让核心学会使用记忆而不是照抄。
Parameter offloadingCPU–GPU dual LLM
GoalWork around GPU memory limitsSeparate optimization from memory
CPUCold storage for weightsStatistical LM: counts, retrieval, exact long-tail evidence
GPUHolds all knowledge and computeCompact neural LM: composition and reasoning
LearningGradient descent on every parameterOne-shot writing on CPU, iterative learning on GPU
파라미터 오프로딩CPU–GPU 이중 LLM
목표GPU 메모리 한계 우회최적화와 기억의 분리
CPU가중치 냉장 창고통계 LM: 개수, 검색, 정확한 롱테일 증거
GPU모든 지식과 계산을 떠안음작은 신경 LM: 조합과 추론
학습모든 파라미터에 gradient descentCPU는 한 번 쓰기, GPU는 반복 학습
参数卸载CPU–GPU 双 LLM
目标绕开 GPU 显存限制把优化与记忆分开
CPU权重的冷存储统计 LM:计数、检索、精确的长尾证据
GPU承载全部知识与计算紧凑神经 LM:组合与推理
学习对所有参数做梯度下降CPU 一次写入,GPU 迭代学习

Scaling laws then take two arguments instead of one:

그러면 scaling law는 인자를 하나가 아니라 두 개 받는다.

于是缩放定律的输入从一个变成两个:

\[P(y \mid x) = F_{\text{GPU}}\big(x,\; M_{\text{CPU}}(x)\big)\]

Two questions follow. Is it cheaper to double NGPU or to grow MCPU 10×? And as the CPU memory approaches the infinite limit, how small can the GPU network get?

두 가지 질문이 따라온다. NGPU를 두 배로 하는 것과 MCPU를 10배로 하는 것 중 무엇이 더 싼가? 그리고 CPU 메모리가 무한 극한에 다가갈 때 GPU 네트워크는 얼마나 작아질 수 있는가?

随之而来两个问题。把 NGPU 翻倍和把 MCPU 扩大 10 倍,哪个更划算?当 CPU 记忆逼近无限极限时,GPU 网络能有多小?

Epilogue: learn less, remember more

에필로그: 덜 배우고 더 기억하기

尾声:少学一点,多记一点

The unlearned 65B parameters point at a blind spot in modern pretraining. A large part of what we push into dense matrices through thousands of optimizer steps is time-invariant statistical memory, information that only needs to be written once and looked up when needed. Our measurements so far agree: hints buy about 2.6× in tokens, the network stops memorizing what the table holds, and a model with no pretraining learns faster with the table beside it. The next generation may come less from training larger networks faster and more from reducing what the network has to learn at all.

학습되지 않은 650억 파라미터는 현대 pretraining의 사각지대를 가리킨다. 수천 번의 optimizer step으로 dense 행렬에 밀어 넣는 것의 상당 부분은 시점과 무관한 통계적 기억, 즉 한 번 쓰고 필요할 때 찾아보면 되는 정보다. 지금까지의 측정도 같은 방향이다. 힌트는 토큰 기준 약 2.6배의 효율을 주고, 네트워크는 테이블이 가진 것을 외우기를 멈추며, pretraining 없는 모델도 테이블 옆에서 더 빨리 배운다. 다음 세대는 더 큰 네트워크를 더 빨리 학습하는 데서보다 네트워크가 배워야 할 것 자체를 줄이는 데서 나올지도 모른다.

那 650 亿个未被学习的参数指向了现代预训练的一个盲区。我们通过成千上万次优化步骤塞进稠密矩阵的东西,很大一部分是与时间无关的统计记忆,只需写入一次、需要时查阅。我们目前的测量也指向同一方向:提示带来约 2.6 倍的 token 效率,网络不再记忆表中已有的内容,没有预训练的模型在表的帮助下也学得更快。下一代模型或许不在于更快地训练更大的网络,而在于减少网络本身需要学习的东西。


  1. NanoGPT speedrun: github.com/KellerJordan/modded-nanogpt
  2. Infini-gram: github.com/liujch1998/infini-gram
  3. Engram-style hashed N-gram memory and the 6.7-second hint-index run are cited as reported by their authors. All charts come from our own runs.
  4. Engram식 해시 N-gram 메모리와 6.7초 힌트 인덱스 결과는 저자들의 보고를 인용했다. 모든 그래프는 우리 실험에서 나왔다.
  5. Engram 式哈希 N-gram 记忆和 6.7 秒提示索引的结果引自作者的报告。所有图表均来自我们自己的实验。

Citation

인용

引用

@misc{lee2026unlearned,
  author       = {Lee, Junhoo},
  title        = {The Mystery of the Unlearned Parameters: From Engram Tables to {CPU--GPU} Dual {LLMs}},
  year         = {2026},
  month        = nov,
  howpublished = {\url{https://junhoo.me/mysteryofunlearnedparameters}},
  note         = {Blog post}
}
mysteries revealed풀린 미스터리已揭开的谜团 0 / 9