From 6d1acbc26a6feefe6e9a1b0e590ef6e39851e5e5 Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Mon, 9 Nov 2026 14:14:59 +0800 Subject: [PATCH] Validate repeated learned RMSNorm functions with CPU evidence --- .gitattributes | 1 + .gitignore | 5 + README.md | 17 +- docs/CPU_FIRST_VALIDATION.md | 6 + docs/CPU_FUNCTIONAL_FINDINGS.md | 86 +++ docs/LEARNED_FUNCTION_REPETITION.md | 58 ++ docs/QK_GAIN_FACTORIZATION.md | 46 ++ docs/SOP.md | 10 + functional/README.md | 25 +- functional/audit.py | 86 +++ functional/benchmark_factorization.py | 83 +++ functional/gain_factorization.py | 135 ++++ functional/model.py | 9 +- functional/neuron_reuse.py | 134 ++++ functional/norm_repetition.py | 108 ++++ functional/package_delivery.py | 46 ++ functional/preflight.py | 28 +- functional/reference_check.py | 6 +- functional/report.py | 73 ++- functional/storage.py | 62 ++ functional/supervise.py | 30 +- results/cpu-qwen35-2b/DELIVERY.md | 7 + results/cpu-qwen35-2b/FUNCTIONAL_REPORT.md | 36 ++ results/cpu-qwen35-2b/archive-files.json | 88 +++ .../cpu-qwen35-2b/attention-head-metrics.csv | 193 ++++++ results/cpu-qwen35-2b/audit-validation.json | 12 + .../baseline-heldout-token-nll.npy | Bin 0 -> 1120 bytes results/cpu-qwen35-2b/calibration-metrics.csv | 89 +++ results/cpu-qwen35-2b/candidate-summary.json | 101 +++ .../cpu-qwen35-2b/checksums-full-server.json | 85 +++ .../cpu-qwen35-2b/checksums-functional.json | 85 +++ .../cpu-qwen35-2b/compute-budget-ledger.json | 54 ++ results/cpu-qwen35-2b/download.log | 73 +++ results/cpu-qwen35-2b/experiment.json | 49 ++ .../external-activation-cache.json | 31 + .../figures/algebraic_gain_identity.pdf | Bin 0 -> 19231 bytes .../figures/algebraic_gain_identity.png | Bin 0 -> 137962 bytes .../figures/algebraic_gain_identity.svg | 581 ++++++++++++++++++ .../figures/candidate_function_errors.pdf | Bin 0 -> 17979 bytes .../figures/candidate_function_errors.png | Bin 0 -> 81002 bytes .../figures/candidate_function_errors.svg | 467 ++++++++++++++ .../figures/learned_norm_function_errors.pdf | Bin 0 -> 17316 bytes .../figures/learned_norm_function_errors.png | Bin 0 -> 106753 bytes .../figures/learned_norm_function_errors.svg | 388 ++++++++++++ .../learned_norm_network_substitution.pdf | Bin 0 -> 18715 bytes .../learned_norm_network_substitution.png | Bin 0 -> 102502 bytes .../learned_norm_network_substitution.svg | 286 +++++++++ results/cpu-qwen35-2b/final-report.log | 0 .../cpu-qwen35-2b/final-source-hashes.json | 18 + results/cpu-qwen35-2b/final-tests.txt | 23 + .../cpu-qwen35-2b/functional-code-hashes.json | 12 + .../cpu-qwen35-2b/functional-environment.json | 34 + results/cpu-qwen35-2b/functional-report.log | 0 results/cpu-qwen35-2b/functional-run.log | 24 + results/cpu-qwen35-2b/functional-status.json | 11 + .../gain-factorization-k_to_q-token-nll.npy | Bin 0 -> 1120 bytes .../gain-factorization-kernel-timing.csv | 21 + .../gain-factorization-optimized-summary.json | 102 +++ .../gain-factorization-optimized-timing.csv | 91 +++ .../gain-factorization-optimized.log | 0 .../gain-factorization-protocol.json | 23 + .../gain-factorization-q_to_k-token-nll.npy | Bin 0 -> 1120 bytes .../gain-factorization-score-metrics.csv | 97 +++ .../gain-factorization-summary.json | 46 ++ results/cpu-qwen35-2b/gain-factorization.log | 0 .../cpu-qwen35-2b/install-torch-disk-tmp.log | 39 ++ results/cpu-qwen35-2b/install-torch.log | 25 + results/cpu-qwen35-2b/manifest.json | 34 + results/cpu-qwen35-2b/model_config.json | 96 +++ .../cpu-qwen35-2b/neuron-reuse-protocol.json | 29 + .../neuron-reuse-search-summary.json | 54 ++ .../cpu-qwen35-2b/neuron-reuse-selection.json | 4 + .../cpu-qwen35-2b/neuron-reuse-summary.json | 10 + results/cpu-qwen35-2b/neuron-reuse.log | 4 + .../norm-repetition-12-uses-13-token-nll.npy | Bin 0 -> 1120 bytes .../norm-repetition-13-uses-12-token-nll.npy | Bin 0 -> 1120 bytes .../norm-repetition-function-metrics.csv | 17 + .../norm-repetition-protocol.json | 44 ++ .../norm-repetition-selection.json | 23 + .../norm-repetition-summary.json | 59 ++ .../norm-repetition-uniform-bounds.csv | 553 +++++++++++++++++ results/cpu-qwen35-2b/norm-repetition.log | 0 .../cpu-qwen35-2b/preflight-first-attempt.log | 29 + .../preflight-second-attempt.json | 61 ++ .../preflight-second-attempt.log | 22 + results/cpu-qwen35-2b/preflight.json | 190 ++++++ results/cpu-qwen35-2b/preflight.log | 24 + .../reference-check-first-attempt.log | 15 + .../reference-check-second-attempt.log | 15 + results/cpu-qwen35-2b/reference-check.json | 288 +++++++++ results/cpu-qwen35-2b/reference-check.log | 1 + results/cpu-qwen35-2b/retention-policy.json | 5 + results/cpu-qwen35-2b/samples-tokenized.json | 342 +++++++++++ results/cpu-qwen35-2b/selection.json | 4 + results/cpu-qwen35-2b/source_metadata.json | 261 ++++++++ results/cpu-qwen35-2b/storage-accounting.log | 0 results/cpu-qwen35-2b/storage-evidence.json | 4 + results/cpu-qwen35-2b/supervisor-error.txt | 8 + .../supervisor-first-attempt-error.txt | 8 + .../supervisor-first-attempt.json | 8 + .../supervisor-second-attempt.json | 9 + results/cpu-qwen35-2b/supervisor-status.json | 9 + .../supervisor-third-attempt.json | 9 + results/cpu-qwen35-2b/supervisor.log | 0 results/cpu-qwen35-2b/tokenizer-download.log | 1 + results/cpu-qwen35-2b/tokenizers-wheel.log | 6 + results/cpu-qwen35-2b/unit-tests.txt | 11 + tests/test_functional.py | 57 ++ 108 files changed, 6526 insertions(+), 33 deletions(-) create mode 100644 docs/CPU_FUNCTIONAL_FINDINGS.md create mode 100644 docs/LEARNED_FUNCTION_REPETITION.md create mode 100644 docs/QK_GAIN_FACTORIZATION.md create mode 100644 functional/audit.py create mode 100644 functional/benchmark_factorization.py create mode 100644 functional/gain_factorization.py create mode 100644 functional/neuron_reuse.py create mode 100644 functional/norm_repetition.py create mode 100644 functional/package_delivery.py create mode 100644 functional/storage.py create mode 100644 results/cpu-qwen35-2b/DELIVERY.md create mode 100644 results/cpu-qwen35-2b/FUNCTIONAL_REPORT.md create mode 100644 results/cpu-qwen35-2b/archive-files.json create mode 100644 results/cpu-qwen35-2b/attention-head-metrics.csv create mode 100644 results/cpu-qwen35-2b/audit-validation.json create mode 100644 results/cpu-qwen35-2b/baseline-heldout-token-nll.npy create mode 100644 results/cpu-qwen35-2b/calibration-metrics.csv create mode 100644 results/cpu-qwen35-2b/candidate-summary.json create mode 100644 results/cpu-qwen35-2b/checksums-full-server.json create mode 100644 results/cpu-qwen35-2b/checksums-functional.json create mode 100644 results/cpu-qwen35-2b/compute-budget-ledger.json create mode 100644 results/cpu-qwen35-2b/download.log create mode 100644 results/cpu-qwen35-2b/experiment.json create mode 100644 results/cpu-qwen35-2b/external-activation-cache.json create mode 100644 results/cpu-qwen35-2b/figures/algebraic_gain_identity.pdf create mode 100644 results/cpu-qwen35-2b/figures/algebraic_gain_identity.png create mode 100644 results/cpu-qwen35-2b/figures/algebraic_gain_identity.svg create mode 100644 results/cpu-qwen35-2b/figures/candidate_function_errors.pdf create mode 100644 results/cpu-qwen35-2b/figures/candidate_function_errors.png create mode 100644 results/cpu-qwen35-2b/figures/candidate_function_errors.svg create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_function_errors.pdf create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_function_errors.png create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_function_errors.svg create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_network_substitution.pdf create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_network_substitution.png create mode 100644 results/cpu-qwen35-2b/figures/learned_norm_network_substitution.svg create mode 100644 results/cpu-qwen35-2b/final-report.log create mode 100644 results/cpu-qwen35-2b/final-source-hashes.json create mode 100644 results/cpu-qwen35-2b/final-tests.txt create mode 100644 results/cpu-qwen35-2b/functional-code-hashes.json create mode 100644 results/cpu-qwen35-2b/functional-environment.json create mode 100644 results/cpu-qwen35-2b/functional-report.log create mode 100644 results/cpu-qwen35-2b/functional-run.log create mode 100644 results/cpu-qwen35-2b/functional-status.json create mode 100644 results/cpu-qwen35-2b/gain-factorization-k_to_q-token-nll.npy create mode 100644 results/cpu-qwen35-2b/gain-factorization-kernel-timing.csv create mode 100644 results/cpu-qwen35-2b/gain-factorization-optimized-summary.json create mode 100644 results/cpu-qwen35-2b/gain-factorization-optimized-timing.csv create mode 100644 results/cpu-qwen35-2b/gain-factorization-optimized.log create mode 100644 results/cpu-qwen35-2b/gain-factorization-protocol.json create mode 100644 results/cpu-qwen35-2b/gain-factorization-q_to_k-token-nll.npy create mode 100644 results/cpu-qwen35-2b/gain-factorization-score-metrics.csv create mode 100644 results/cpu-qwen35-2b/gain-factorization-summary.json create mode 100644 results/cpu-qwen35-2b/gain-factorization.log create mode 100644 results/cpu-qwen35-2b/install-torch-disk-tmp.log create mode 100644 results/cpu-qwen35-2b/install-torch.log create mode 100644 results/cpu-qwen35-2b/manifest.json create mode 100644 results/cpu-qwen35-2b/model_config.json create mode 100644 results/cpu-qwen35-2b/neuron-reuse-protocol.json create mode 100644 results/cpu-qwen35-2b/neuron-reuse-search-summary.json create mode 100644 results/cpu-qwen35-2b/neuron-reuse-selection.json create mode 100644 results/cpu-qwen35-2b/neuron-reuse-summary.json create mode 100644 results/cpu-qwen35-2b/neuron-reuse.log create mode 100644 results/cpu-qwen35-2b/norm-repetition-12-uses-13-token-nll.npy create mode 100644 results/cpu-qwen35-2b/norm-repetition-13-uses-12-token-nll.npy create mode 100644 results/cpu-qwen35-2b/norm-repetition-function-metrics.csv create mode 100644 results/cpu-qwen35-2b/norm-repetition-protocol.json create mode 100644 results/cpu-qwen35-2b/norm-repetition-selection.json create mode 100644 results/cpu-qwen35-2b/norm-repetition-summary.json create mode 100644 results/cpu-qwen35-2b/norm-repetition-uniform-bounds.csv create mode 100644 results/cpu-qwen35-2b/norm-repetition.log create mode 100644 results/cpu-qwen35-2b/preflight-first-attempt.log create mode 100644 results/cpu-qwen35-2b/preflight-second-attempt.json create mode 100644 results/cpu-qwen35-2b/preflight-second-attempt.log create mode 100644 results/cpu-qwen35-2b/preflight.json create mode 100644 results/cpu-qwen35-2b/preflight.log create mode 100644 results/cpu-qwen35-2b/reference-check-first-attempt.log create mode 100644 results/cpu-qwen35-2b/reference-check-second-attempt.log create mode 100644 results/cpu-qwen35-2b/reference-check.json create mode 100644 results/cpu-qwen35-2b/reference-check.log create mode 100644 results/cpu-qwen35-2b/retention-policy.json create mode 100644 results/cpu-qwen35-2b/samples-tokenized.json create mode 100644 results/cpu-qwen35-2b/selection.json create mode 100644 results/cpu-qwen35-2b/source_metadata.json create mode 100644 results/cpu-qwen35-2b/storage-accounting.log create mode 100644 results/cpu-qwen35-2b/storage-evidence.json create mode 100644 results/cpu-qwen35-2b/supervisor-error.txt create mode 100644 results/cpu-qwen35-2b/supervisor-first-attempt-error.txt create mode 100644 results/cpu-qwen35-2b/supervisor-first-attempt.json create mode 100644 results/cpu-qwen35-2b/supervisor-second-attempt.json create mode 100644 results/cpu-qwen35-2b/supervisor-status.json create mode 100644 results/cpu-qwen35-2b/supervisor-third-attempt.json create mode 100644 results/cpu-qwen35-2b/supervisor.log create mode 100644 results/cpu-qwen35-2b/tokenizer-download.log create mode 100644 results/cpu-qwen35-2b/tokenizers-wheel.log create mode 100644 results/cpu-qwen35-2b/unit-tests.txt diff --git a/.gitattributes b/.gitattributes index e8690fc..7cfdd5b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,4 @@ results/** -text # Generated CSV uses RFC 4180 line endings; Matplotlib SVG paths contain spaces. results/**/*.csv -whitespace results/**/*.svg -whitespace +results/**/*.log -whitespace diff --git a/.gitignore b/.gitignore index 88f76cf..25b9d85 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,8 @@ __pycache__/ weights/ *.partial *.log + +# Large reproducible functional activations remain on the experiment server. +results/cpu-qwen35-2b/baseline-activations.npz +results/cpu-qwen35-2b/neuron-reuse-activations.npz +results/cpu-qwen35-2b/norm-repetition-input-profiles.npz diff --git a/README.md b/README.md index 0cc43f4..f155e90 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,15 @@ # Model parameter similarity experiments -Bounded, inference-free analysis of official unquantized model weights. The first experiment -is **Qwen3.5-2B**. Model weights are downloaded and analyzed on the authorized remote host, -then deleted after archived results pass validation for the completed static pilot. +Research on repeated learned functions in **Qwen3.5-2B**: a completed static weight baseline +and a training-free CPU functional pilot. The CPU study found similar existing RMSNorm +functions at layer indices 12/13, with a uniform analytic error bound and heldout substitution checks. +Cost is not a success condition. The completed static pilot was inference-free and its +weights were deleted after archival; the functional pilot executes streaming FP32 text forwards. The current CPU functional checkpoint is retained until the user explicitly requests deletion. No model weights are committed here. +- [CPU learned-function repetition findings](docs/CPU_FUNCTIONAL_FINDINGS.md) +- [Current learned-function repetition criterion](docs/LEARNED_FUNCTION_REPETITION.md) - [CPU-first feasibility and validation](docs/CPU_FIRST_VALIDATION.md) - [Training-free functional reuse plan (proposed; not executed)](docs/TRAINING_FREE_FUNCTIONAL_PLAN.md) - [Primary-source literature and applicability](docs/FUNCTIONAL_REUSE_LITERATURE.md) @@ -21,9 +25,10 @@ No model weights are committed here. - `pilot/run.py`: one-model supervisor with bounded download wait and analysis timeouts. - `tests/test_pilot.py`: synthetic numerical and 3D correctness tests. -The primary result is **verified net byte savings versus direct relative weight error**. -This does not demonstrate preserved task capability or faster inference. Different block -scales are alternative partitions and their savings must not be summed. +The static baseline reports **verified net byte savings versus direct relative weight error**. +The functional study separately reports same-input error, an all-input RMSNorm function bound +and tiny heldout NLL changes; these are not broad task-accuracy guarantees. Different static +block scales are alternative partitions and their savings must not be summed. Dependencies are pinned in `requirements.txt`; install only prebuilt wheels on the remote host. Full resolved versions and run provenance accompany each result. See the SOP for commands. diff --git a/docs/CPU_FIRST_VALIDATION.md b/docs/CPU_FIRST_VALIDATION.md index 0bbfe2d..e342dd9 100644 --- a/docs/CPU_FIRST_VALIDATION.md +++ b/docs/CPU_FIRST_VALIDATION.md @@ -67,3 +67,9 @@ CPU 上“找到输出接近的候选”能支持继续投入 GPU; 最多选择一个候选,必须分别验证两个替换方向;完整模块失败不会被小模块通过所掩盖。 归一化共享最多节省少量字节,不预设能显著减少计算。 采集真实隐藏输入必须正确执行前置线性注意力;它不进入首轮复用候选,但其递推计算纳入官方参考对照。 + +## 用户最新目标修订 + +不再以成本/加速作为成功条件;主问题是现有学习部分的功能重复。 +新增一次固定四层的 MLP 神经元函数搜索、独立留出和双向替换, +见 [功能重复判据](LEARNED_FUNCTION_REPETITION.md)。解析增益合并单独归类,不冒充学习部分重复。 diff --git a/docs/CPU_FUNCTIONAL_FINDINGS.md b/docs/CPU_FUNCTIONAL_FINDINGS.md new file mode 100644 index 0000000..a96c82a --- /dev/null +++ b/docs/CPU_FUNCTIONAL_FINDINGS.md @@ -0,0 +1,86 @@ +# CPU 先导结论:存在已训练归一化模块的相似功能重复 + +本轮主目标按用户最新要求为功能重复的存在性,不以成本/加速为成功条件。 +全部计算在 2 核、约 1.7 GiB RAM 的 CPU 服务器完成,无训练、缩放拟合或旋转搜索。 +层编号均为从 0 开始的索引。 + +## 一个具体正例 + +固定官方 Qwen3.5-2B checkpoint 的两个独立已训练模块: + +- `model.language_model.layers.12.input_layernorm` +- `model.language_model.layers.13.input_layernorm` + +二者均为 2048→2048 的 RMSNorm,eps=1e-6,使用训练后的有效增益 gamma=1+weight。 +增益标准差分别约 0.1901、0.1685,最小值约 0.5547、0.5703;不是零函数或恒定增益。 + +| 证据 | 结果 | +|---|---| +| 全输入域数学界(相对于层12输出) | 输出相对 L2 误差≤10.1852% | +| 反方向全输入域数学界(相对于层13输出) | 输出相对 L2 误差≤11.3402% | +| 4 条留出文本、两个来源层输入的最坏双向误差 | 4.5285% | +| 相同留出比较中的最低余弦 | 0.999487 | +| 层12使用层13,留出平均 token NLL 增量 | +0.0000325651 nat/token | +| 层13使用层12,留出平均 token NLL 增量 | −0.0003639730 nat/token | + +两方向逐文本 NLL 增量 P95 分别约 0.00098464、0.00070972,均通过原定小样本质量门槛。 +所有数值来自保存的逐文本、逐 token 原始数据。留出为 4 条不同的实验原创短文本, +每条截取 32 tokens;校准另有 4 条。它们不是广泛任务能力评测。 + +## 为什么不只是“权重看起来接近” + +对相同 eps 和维数,f_a(x)=diag(a)x/sqrt(mean(x²)+eps)。任意非零实数输入满足: + +||f_a(x)-f_b(x)|| / ||f_a(x)|| ≤ max_j |a_j-b_j|/|a_j|。 + +共同归一化分母消去;坐标基向量可达到最大值,因而该界是精确的最坏情况。 +反向分母换成 |b_j|。本轮先穷举 24 层同角色 input/post-attention norm 的 552 对, +仅按最小双向最坏界选定一对,未使用任何输入样本作选择。≤20% 界有 18 对,≤10% 无配对; +本轮只验证最优的一对,不根据留出结果换选。 + +这个确定性界直接给出两个已训练函数整体接近的证据。真实输入上的误差更小, +与只关心目标输入分布的目标一致。浮点实测与实数数学界分别报告。 +重新采集输入时,未修改的完整前向逐 bit 复现了最初保存的基线输出。 +输入探测分别使用两个来源层,对相同输入同时应用两套增益,避免比较不同输入的输出。 +从已加增益的激活还原共同归一化输入时有额外 FP32 舍入,未将其称为 bitwise 等价。 + +结论限定为两个已有 RMSNorm 模块实现相似映射;不把共同包含 RMS 操作本身当作证据。 +二者学习增益不同且非恒定,输出非零。完整 attention/MLP 主体的重复仍未得到正例。 + +## 已完成的阴性搜索 + +1. 原定 3 对完整 attention、2 对完整 MLP、6 对层内 Q/K norm 均未通过预设门槛。 + attention 检索分布 JS 范围约 0.145~0.318,也未通过 0.01 的门槛; + 未进行头排列、连续坐标变换或训练对齐,不能外推为不存在其他可复用表示。 +2. 在层 5、6、20、21 各 6144 个 MLP scalar 子函数中,排除低活跃和近常量单元后, + 共精确筛查 7,450,139 个唯一同层配对。要求双向相对误差≤20%、余弦≥0.98、 + Pearson≥0.95,无通过者。没有针对留出集不断更换候选或放宽门槛。 +3. 这些结果只覆盖声明的模块、输入和阈值,不否定其他粒度/角色的功能重复。 + +## 单独归类的解析恒等式 + +Q/K 未参与 RoPE 的 192 个维度,其增益只以乘积影响点积,可合并到任一侧。 +96 组真实输入检查最大分数差 3.8147e-6、最大概率差 8.0466e-7;固定第3层两个方向 +留出 NLL 变化接近 FP32 舍入。详见 [推导](QK_GAIN_FACTORIZATION.md)。 +这是重参数化等价,不作为“两个已有学习部分功能重复”的正例。先前性能测试原始数据 +保留用于溯源,成本不属于当前结论的成功条件。 + +## 正确性、资源与保留规则 + +- 固定模型 revision:15852e8c16360a2fea060d615a32b45270f8a8fc,原始权重 SHA256 校验通过。 +- 流式读取原始 BF16,逐块转为 FP32,不同时载入全模型。 +- 与固定 Transformers 官方定义比较的 22 项检查通过,最大差约 5.4e-7。 +- 保留早期参考适配器错误、临时分区空间不足及两次过于保守的换页停止记录。 + 只归还自身临时堆页,未改变系统 swap 设置;后续有界前向完成。 +- 计算预算跨重启累计,初始保守计入 180 秒先前检查预留;具体时长及峰值见归档日志。 +- 当前权重按用户最新指令持续保留,只在用户明确要求删除时清理。 + +原始表、样本/token IDs、激活、NLL、证明界与图表见 `results/cpu-qwen35-2b/`。 +后续 GPU 阶段可增加长度、语言和任务来验证正例的稳健性;本轮不自动启动新模型或扩展搜索。 + +## Git 交付与保留缓存 + +全部图表源 CSV/JSON、逐 token NLL、证明界和日志已交付。三份较大的中间激活缓存 +保留在原服务器及本地完整归档,路径、大小、SHA256 见结果目录的 external-activation-cache.json。 +其完整原实验校验表为 checksums-full-server.json;Git交付包校验表为 checksums-functional.json。 +没有删除模型或缓存;这些缓存可由固定代码和样本重新生成,也可从服务器按哈希取回。 diff --git a/docs/LEARNED_FUNCTION_REPETITION.md b/docs/LEARNED_FUNCTION_REPETITION.md new file mode 100644 index 0000000..490d492 --- /dev/null +++ b/docs/LEARNED_FUNCTION_REPETITION.md @@ -0,0 +1,58 @@ +# 当前目标:已有学习部分是否重复实现相似函数 + +用户于 2026-11-09 明确:不以成本或加速作为成功条件,只关心相似功能重复是否存在。 +权重继续保留,只有用户明确要求删除才清理;不训练、不拟合旋转或缩放。 + +## 什么可以作为正例 + +两个不同的已训练部分,在同一真实输入上产生接近、且并非恒定/接近零的输出; +独立留出输入仍满足预先固定的门槛。实际双向替换只作补充验证。 +不能仅因替换一小部分后整模型 NLL 几乎不变,就认定它们实现相同函数。 + +Q/K 增益的解析合并证明同一计算的重参数化自由度,不等于两个现成学习部分功能重复。 +前一轮 11 对完整/归一化模块未通过门槛,也不能否定更小粒度的重复。 +不将两个模块都包含 SiLU、矩阵乘法等共同运算本身作为重复功能证据。 + +## 新增一次有界搜索:MLP 学习神经元 + +在已保存的第 5、6、20、21 层真实 MLP 入口输入上,研究 + +f_(l,j)(h) = SiLU(w_gate_(l,j)^T h) × (w_up_(l,j)^T h)。 + +每层 6,144 个神经元具有不同学习参数。比较同一层内两个 scalar 子函数, +不是比较来自不同输入的两个观测值,也不是把整层或整 tensor 称作重复。 +下游 down-projection 的列保持各自原样;替换发生在两个投影和 SiLU 之后的激活值处。 + +1. 4 条校准文本、4 条留出文本,每条 32 tokens,中文/英文各半,沿用先前冻结样本。 +2. 校准阶段只保留 RMS 至少为该层神经元中位数、std/RMS≥0.25、能量有效 token 数≥16 + 的非平凡单元。能量有效样本数定义为 (sum f²)² / sum f⁴,不是独立统计样本量。 +3. 对这些单元做分块穷举;实际配对数必须记录。不用随机 hidden 向量作主要证据。 +4. 预先固定门槛:双向直接相对 L2≤20%、余弦≥0.98、Pearson≥0.95;同时输出 5/10/20% + 三档校准配对数量。没有拟合线性缩放、偏置或 R。 +5. 全部层中仅按校准的最小最坏方向误差选择 1 对,冻结选择;无通过者停止。 +6. 留出集要求同样的汇总函数门槛及活跃度条件,逐文本双向误差≤35%。不根据留出失败换候选。 +7. 只有函数验证通过,才做两个方向的独立网络替换;留出平均 NLL 增量≤0.01 nat/token, + 逐文本增量 P95≤0.05。它不是主要的功能重复判据,防止因单元贡献很小而得到假正例。 + +本阶段使用先前两小时累计预算的剩余额度,复用现有隐藏输入;不增加模型、样本规模或成本测试。 +神经元层面的经验正例不证明完整层可以互换、不证明全输入空间等价,也不能推断独立任务能力。 +留出只有 4 条文本,结论必须限定到此短文本先导分布;后续扩展文本才能检验稳健性。 + +## 同角色学习 RMSNorm:确定性函数误差界 + +静态试验已经发现部分语言层 post-attention norm 的参数接近。新增一次独立检验: +比较 24 层各自的 input/post-attention RMSNorm(同角色内共 552 对), +仅按训练后增益的全输入最坏误差界选 1 对,完全不依赖校准或留出输入。 +增益需非零且不是常量向量(std≥0.001),不把没有学习参数的共同归一化运算当作正例。 + +相同 eps、相同形状下,f_a(x)=diag(a)x/sqrt(mean(x²)+eps)。对任意非零 x, + +||f_a(x)-f_b(x)|| / ||f_a(x)|| ≤ max_j |a_j-b_j|/|a_j|。 + +反方向分母换为 |b_j|。该上界由相应坐标基向量达到,是实数算术下的精确最坏界。 +因此可先证明两个现成学习模块的函数整体接近,而不只比较原始参数 w;实际增益为 1+w。 +选择门槛:最坏双向界≤20%;同时记录≤5%、≤10%、≤20% 配对数量。只选最优界的一对。 +随后重新采集其实际输入,要求留出逐文本直接双向输出误差≤5%,再测两个方向网络替换。 +函数接近与替换后网络 NLL 分开报告;后者沿用已有 0.01/0.05 门槛,不决定函数存在性本身。 +选定后不根据留出结果换配对;不搜索视觉模块、不增加模型、不以成本为条件。 +归一化层正例不能推广为 attention 或 MLP 主体存在同样重复。 diff --git a/docs/QK_GAIN_FACTORIZATION.md b/docs/QK_GAIN_FACTORIZATION.md new file mode 100644 index 0000000..91fff58 --- /dev/null +++ b/docs/QK_GAIN_FACTORIZATION.md @@ -0,0 +1,46 @@ +# Q/K 未旋转维度的确定性增益合并(已数值验证,归为重参数化) + +这是从已核对架构直接推导的恒等式,不是看留出指标后扩大近邻搜索。 +原定 11 对候选保留原协议;本项是独立的解析对照,不训练、不求 R,也不选择层。 +预先固定完整网络干预层为第 3 层,分别验证两个移动方向;不根据数据换层。 + +## 恒等式与前提 + +以完成 RMS 单位化、尚未乘可学习增益的 q/k 为 u/v,Q/K 增益向量为 a/b。 +固定 checkpoint 的 norm 参数实际使用 a=1+w_Q,b=1+w_K。 +模型 head_dim=256,partial_rotary_factor=0.25:前 64 维旋转,后 192 维不旋转。 +逐头共享的增益向量与 GQA 结构已由官方代码确认。 + +对于后 192 维,任意 query/key 位置 p/s: + +sum_j (a_j u_pj)(b_j v_sj) = sum_j u_pj ((a_j b_j) v_sj) + = sum_j ((a_j b_j) u_pj) v_sj。 + +前 64 维保留原增益和位置旋转。因而完整 QK 点积在实数算术中相等,softmax、V、 +输出门控和 O 不变时,完整 attention 分支也是同一个函数。这个结论不依赖某一输入分布。 +浮点乘法次序改变,不能承诺逐 bit 相等;需报告实际误差并验证留出 NLL。 +不能把这一规则用于旋转维度,或未经核对的逐头独立增益架构。 + +## 验证与成本边界 + +1. 在已有真实 q/k 输入上,检查 6 个 full-attention 层的原始/两个合并方向分数、概率及输出。 +2. 固定第 3 层进行两个方向的独立网络替换,不叠加,使用原留出文本和质量阈值。 +3. 记录预先缓存增益后、相同 CPU 环境下原版与合并版局部归一化耗时;不外推 GPU 性能。 +4. 双精度数学推导和 FP32 实测分开。没有消除 Q/K 投影或 RMS 方差计算。 + +将 Q 的未旋转增益移入 K 时,每 token、每层少做 8×192=1,536 次逐元素增益乘法; +反方向少做 2×192=384 次。它们只是归一化里的小部分操作,不是整个模型的百分比加速。 +NumPy 切片/拼接可能抵消这点收益,必须报告测得的局部时延。 + +参数量从两个 256 维增益变为两个 64 维旋转增益及一个 192 维联合增益,即 512→320 个数。 +但原增益以 BF16 存储、联合乘积以 FP32 保留时,载荷仍是 1,024 字节,没有 checkpoint +净压缩;元数据还可能增加。FP32 运行时缓存增益的理论载荷 2,048→1,280 字节, +不等于已测得整个模型 RSS 降低。另行 BF16 量化乘积会增加误差,不属于本次恒等式验证。 + +这是同一注意力计算内部的重参数化与冗余消除,不是两个现成 attention 层能互换的证明。 +若得到正例,应将它作为小粒度确定性优化机会;较大模块互换仍由原候选试验单独回答。 + +## 完成状态 + +96 组真实输入分数/概率检查及固定第3层双向网络检查均通过。 +该结果独立归类;主目标的已训练函数重复正例见 [CPU 功能结论](CPU_FUNCTIONAL_FINDINGS.md)。 diff --git a/docs/SOP.md b/docs/SOP.md index 025ef29..8fb3b6e 100644 --- a/docs/SOP.md +++ b/docs/SOP.md @@ -128,3 +128,13 @@ On 2026-11-09 the user explicitly changed retention: keep the CPU functional pil checkpoint until the user explicitly requests deletion. Completion, timeout, failure and archive validation do not authorize cleanup. The earlier pilot cleanup remains a historical action; do not apply its automatic cleanup step to the current run. + +## CPU functional follow-up outcome + +The executed CPU study found a learned RMSNorm function-repetition example at text +layer indices 12/13. Use same-input function error and a uniform analytic bound as +primary evidence, with separate heldout network substitution checks. Costs are not +a success condition under the latest user instruction. See the +[executed findings](CPU_FUNCTIONAL_FINDINGS.md) and +[function-repetition criterion](LEARNED_FUNCTION_REPETITION.md). +Keep whole-module, neuron, normalization and algebraic-reparameterization results distinct. diff --git a/functional/README.md b/functional/README.md index 31271df..6aa8367 100644 --- a/functional/README.md +++ b/functional/README.md @@ -56,7 +56,8 @@ search extra candidates, mutate Git or delete weights. After reference checks, i 8-token real text capacity check, then the bounded functional pilot. Reference, preflight and functional compute together are capped at two hours with a reporting reserve; download wait is recorded separately. Projection memory is checked, RSS soft stop is -512 MiB, available-system-memory floor 256 MiB; sustained host swap IO also stops the run. +512 MiB, available-system-memory floor 256 MiB; sustained host swap IO combined with low available memory or >128 MiB process swap also stops the run. +A persistent ledger counts computation across restarts; early checks/preflight receive a conservative 180-second reserve. `preflight.py` is a capacity smoke check, not a semantic oracle. `run.py` records exact sample/token IDs, fixed configuration, source hashes, activations, per-text/per-head metrics, @@ -66,3 +67,25 @@ saved data to produce PNG/PDF/SVG figures without reopening weights. No generation throughput is measured in this short-text pilot. Any parameter-tying storage benefit must be accounted for separately, including metadata. Neither same-input similarity nor favorable tiny heldout NLL demonstrates broad mutual interchangeability or GPU speedup. + +## Current primary result and completed extensions + +The latest user goal is learned-function repetition, independent of costs. Existing +input RMSNorm modules at layer indices 12/13 have a proven worst two-direction real-arithmetic +error bound of 11.3402%, worst observed heldout relative error 4.5285%, minimum cosine 0.999487, +and small bidirectional heldout NLL changes. See [findings](../docs/CPU_FUNCTIONAL_FINDINGS.md). + +- `neuron_reuse.py`: fixed four-layer scalar MLP function search, nontrivial activity + gates, calibration-only selection and independent heldout/substitution logic; no pair passed. +- `norm_repetition.py`: same-role learned RMSNorm bound across 552 pairs, one deterministic + selection independent of any input samples, real probes and two full-network substitutions. +- `gain_factorization.py`: architecture-derived identity on non-RoPE coordinates; a separate + reparameterization result, not a learned-function repetition example. +- `benchmark_factorization.py`: historical one-attempt CPU allocation optimization and + bitwise equivalence check. Performance is no longer a success condition. +- `storage.py`: explicit component layout accounting; the original candidate run selected + no pair. This does not affect the primary function-repetition conclusion. + +Do not expand the final positive claim to full attention or MLP bodies. Retain the +fixed checkpoint until the user explicitly requests deletion. Full tests and audit are +run remotely; no local build or model execution is required to inspect the archived results. diff --git a/functional/audit.py b/functional/audit.py new file mode 100644 index 0000000..79c9fdf --- /dev/null +++ b/functional/audit.py @@ -0,0 +1,86 @@ +"""Audit saved functional evidence and archive only outputs, never checkpoint weights.""" +import argparse +import csv +import hashlib +import json +from pathlib import Path +import platform +import subprocess +import time +import numpy as np +from .model import StreamingLM +from .norm_repetition import uniform_bounds +from .run import write_json + +EXCLUDE={'tokenizer.json','reference.py','checksums-functional.json','audit-validation.json','archive-files.json'} + + +def archive_files(root): + files=[p for p in root.iterdir() if p.is_file() and p.name not in EXCLUDE and not p.name.endswith(('.partial','.safetensors'))] + files += [p for p in (root/'figures').glob('*') if p.is_file()] + return sorted(files) + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',type=Path,required=True);a=p.parse_args();root=a.root + manifest=json.loads((root/'manifest.json').read_text()) + assert manifest['revision']=='15852e8c16360a2fea060d615a32b45270f8a8fc' + for f in manifest['files']: + if f['name'].endswith('.safetensors'): + path=root/'weights'/f['name'] + assert path.is_file() and path.stat().st_size==f['bytes'] + assert f['sha256']==f['upstream_sha256'] + retention=json.loads((root/'retention-policy.json').read_text());assert retention['automatic_cleanup'] is False + reference=json.loads((root/'reference-check.json').read_text()) + assert reference['passed'] and len(reference['tests'])==22 + assert reference['implementation_sha256']==hashlib.sha256(Path('functional/model.py').read_bytes()).hexdigest() + tests=(root/'final-tests.txt').read_text();assert 'Ran 12 tests' in tests and '\nOK\n' in tests + result=json.loads((root/'norm-repetition-summary.json').read_text());assert result['state']=='completed' + assert result['learned_function_repetition_positive'] and result['bidirectional_network_quality_pass'] + cfg=json.loads((root/'model_config.json').read_text());lm=StreamingLM(root/'weights',cfg,seconds=60) + c=result['selected'];ga=1+lm.small(f'layers.{c["a"]}.{c["role"]}.weight');gb=1+lm.small(f'layers.{c["b"]}.{c["role"]}.weight') + bounds=uniform_bounds(ga,gb) + np.testing.assert_allclose(bounds,[c['a_to_b_uniform_bound'],c['b_to_a_uniform_bound']],atol=1e-14,rtol=1e-14) + with (root/'norm-repetition-uniform-bounds.csv').open() as f:assert len(list(csv.DictReader(f)))==552 + baseline=np.load(root/'baseline-heldout-token-nll.npy');assert baseline.shape==(4,31) + for rec in result['interventions']: + nll=np.load(root/f'norm-repetition-{rec["target"]}-uses-{rec["donor"]}-token-nll.npy') + delta=nll.mean(1)-baseline.mean(1) + np.testing.assert_allclose(delta,rec['sequence_nll_deltas'],atol=1e-13,rtol=1e-13) + assert abs(delta.mean()-rec['mean_nll_delta'])<1e-13 + with (root/'norm-repetition-function-metrics.csv').open() as f:rows=list(csv.DictReader(f)) + held=[r for r in rows if r['split']=='heldout'];assert len(held)==8 + worst=max(max(float(r['relative_l2']),float(r['reverse_relative_l2'])) for r in held) + assert abs(worst-result['worst_heldout_relative_l2'])<1e-14 + neuron=json.loads((root/'neuron-reuse-search-summary.json').read_text());assert sum(x['eligible_unique_pairs_checked'] for x in neuron)==7450139 + ledger=json.loads((root/'compute-budget-ledger.json').read_text());assert ledger['spent_seconds']+600<7200 + environment={'python':platform.python_version(),'platform':platform.platform(),'numpy':np.__version__, + 'packages':subprocess.run([str(Path(__import__('sys').executable)),'-m','pip','freeze'],capture_output=True,text=True,check=True).stdout.splitlines(), + 'weights_retained':True,'no_automatic_cleanup':True,'ledger_seconds_including_initial_reserve':ledger['spent_seconds'], + 'final_tests_report_audit_additional_budget_upper_reserve_seconds':600, + 'historical_error_logs':'Early reference adapter errors and preflight pressure stops; latest summaries/tests are authoritative.'} + write_json(root/'functional-environment.json',environment) + source_paths=[*Path('functional').glob('*.py'),Path('functional/reference.json'),Path('pilot/tensors.py'),Path('tests/test_functional.py')] + write_json(root/'final-source-hashes.json',{str(p):hashlib.sha256(p.read_bytes()).hexdigest() for p in sorted(source_paths)}) + files=archive_files(root) + # Every numeric CSV value must be finite. Empty diagnostic fields stay unknown. + for path in files: + if path.suffix=='.csv': + with path.open() as f: + for row in csv.DictReader(f): + for value in row.values(): + if value in (None,''):continue + try:number=float(value) + except ValueError:continue + assert np.isfinite(number),(path,value) + checksums={str(p.relative_to(root)):hashlib.sha256(p.read_bytes()).hexdigest() for p in files} + write_json(root/'checksums-functional.json',checksums) + selected=[*checksums,'checksums-functional.json','audit-validation.json','archive-files.json'] + write_json(root/'archive-files.json',selected) + write_json(root/'audit-validation.json',{'passed':True,'validated_unix':time.time(),'checksummed_files':len(checksums), + 'proof_recomputed_from_retained_weights':True,'heldout_nll_recomputed_from_saved_arrays':True, + 'weights_present_and_retained':True,'archive_excludes_weights_and_tokenizer':True}) + print(json.dumps({'passed':True,'checksummed_files':len(checksums),'weights_retained':True})) + + +if __name__=='__main__':main() diff --git a/functional/benchmark_factorization.py b/functional/benchmark_factorization.py new file mode 100644 index 0000000..41dc357 --- /dev/null +++ b/functional/benchmark_factorization.py @@ -0,0 +1,83 @@ +"""One allocation-reduction attempt, with a similarly optimized baseline. + +Does not change weights or run the network again. Checks bitwise equality to the +network-tested factorization on every captured real Q/K input before timing. +""" +import argparse +import json +from pathlib import Path +import resource +import time +import numpy as np +from .model import StreamingLM +from .gain_factorization import consolidate,normalized,LAYERS +from .run import save_csv,write_json + + +def baseline_inplace(q,k,a,b): + q=normalized(q);q*=a + k=normalized(k);k*=b + return q,k + + +def factored_inplace(q,k,a,b,r,combined,move='q_to_k'): + q,k=normalized(q),normalized(k) + if move=='q_to_k': + q[...,:r]*=a[:r];k*=combined + else: + q*=combined;k[...,:r]*=b[:r] + return q,k + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',required=True,type=Path);a=p.parse_args();root=a.root + ledger_path=root/'compute-budget-ledger.json';ledger=json.loads(ledger_path.read_text());remaining=int(7200-ledger['spent_seconds']-20) + if remaining<60:raise TimeoutError('Cumulative budget insufficient') + start=time.monotonic();result={'state':'running'} + try: + cfg=json.loads((root/'model_config.json').read_text());lm=StreamingLM(root/'weights',cfg,seconds=min(remaining,300)) + r=64;data=np.load(root/'baseline-activations.npz');checks=[] + for layer in LAYERS: + lm.guard();pfx=f'layers.{layer}.self_attn.' + ag,bg=1+lm.small(pfx+'q_norm.weight'),1+lm.small(pfx+'k_norm.weight') + q,k=data[f'qraw_{layer}'],data[f'kraw_{layer}'] + for move in ('q_to_k','k_to_q'): + combined=np.concatenate([(bg if move=='q_to_k' else ag)[:r],ag[r:]*bg[r:]]) + expected=consolidate(q,k,ag,bg,r,move) + actual=factored_inplace(q,k,ag,bg,r,combined,move) + for x,y in zip(expected,actual):np.testing.assert_array_equal(x,y) + checks.append({'layer':layer,'direction':move,'query_elements':int(q.size),'key_elements':int(k.size),'bitwise_equal':True}) + q,k=data['qraw_3'][:1],data['kraw_3'][:1];pfx='layers.3.self_attn.' + ag,bg=1+lm.small(pfx+'q_norm.weight'),1+lm.small(pfx+'k_norm.weight') + combined=np.concatenate([bg[:r],ag[r:]*bg[r:]]) + funcs={'baseline_legacy':lambda:(normalized(q)*ag,normalized(k)*bg), + 'baseline_inplace':lambda:baseline_inplace(q,k,ag,bg), + 'factored_inplace':lambda:factored_inplace(q,k,ag,bg,r,combined)} + for _ in range(3): + for fn in funcs.values():fn() + timing=[];names=list(funcs) + for repeat in range(30): + order=names[repeat%3:]+names[:repeat%3] + for name in order: + lm.guard();t=time.perf_counter() + for _ in range(50):funcs[name]() + timing.append({'repeat':repeat,'implementation':name,'seconds_per_call':(time.perf_counter()-t)/50,'calls_per_block':50}) + save_csv(root/'gain-factorization-optimized-timing.csv',timing) + values={name:np.array([row['seconds_per_call'] for row in timing if row['implementation']==name]) for name in names} + ratio=values['baseline_inplace']/values['factored_inplace'] + medians={name:float(np.median(v)) for name,v in values.items()} + result.update(state='completed',bitwise_checks=checks,medians_seconds=medians, + paired_baseline_over_factored_median=float(np.median(ratio)), + paired_ratio_p10=float(np.quantile(ratio,.1)),paired_ratio_p90=float(np.quantile(ratio,.9)), + fraction_blocks_factored_faster=float(np.mean(ratio>1)), + descriptive_local_gain=bool(np.median(ratio)>1.05 and np.mean(ratio>1)>=.8 and np.quantile(ratio,.1)>1), + claim_limit='Hot-array CPU normalization microbenchmark against equally allocation-optimized baseline; no full-model speedup or independent statistical significance claim.') + except Exception as exc: + result.update(state='stopped',error_type=type(exc).__name__,error=str(exc));raise + finally: + elapsed=time.monotonic()-start;result.update(elapsed_seconds=elapsed,peak_rss_kib=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) + ledger=json.loads(ledger_path.read_text());ledger['spent_seconds']+=elapsed;ledger['calls'].append({'module':'functional.benchmark_factorization','seconds':elapsed});write_json(ledger_path,ledger) + write_json(root/'gain-factorization-optimized-summary.json',result) + + +if __name__=='__main__':main() diff --git a/functional/gain_factorization.py b/functional/gain_factorization.py new file mode 100644 index 0000000..6bcd33a --- /dev/null +++ b/functional/gain_factorization.py @@ -0,0 +1,135 @@ +"""Architecture-derived Q/K gain consolidation on non-RoPE dimensions only. + +Fixed layer3 interventions; no fitting, layer selection or learned alignment. +Run only after baseline/candidate pilot finishes, within the same cumulative budget. +""" +import argparse +import csv +import json +from pathlib import Path +import resource +import time +import numpy as np +from .model import StreamingLM,norm,rope +from .run import probability_metrics,write_json,save_csv + +LAYERS=[3,7,11,15,19,23] + + +def normalized(x): + return x/np.sqrt(np.mean(x*x,axis=-1,keepdims=True)+np.float32(1e-6)) + + +def consolidate(q,k,a,b,r,move,joint=None): + q,k=normalized(q),normalized(k) + c=a[r:]*b[r:] if joint is None else joint + if move=='q_to_k': + q=np.concatenate([q[...,:r]*a[:r],q[...,r:]],axis=-1) + k=np.concatenate([k[...,:r]*b[:r],k[...,r:]*c],axis=-1) + else: + q=np.concatenate([q[...,:r]*a[:r],q[...,r:]*c],axis=-1) + k=np.concatenate([k[...,:r]*b[:r],k[...,r:]],axis=-1) + return q,k + + +class FactoredLM(StreamingLM): + def configure(self,layer,move): + self.factor_layer=layer;self.move=move + p=f'layers.{layer}.self_attn.' + self.a=1+self.small(p+'q_norm.weight');self.b=1+self.small(p+'k_norm.weight') + self.r=int(self.config['head_dim']*self.config['rope_parameters']['partial_rotary_factor']) + self.joint=self.a[self.r:]*self.b[self.r:] + + def normalization(self,x,name): + p=f'layers.{self.factor_layer}.self_attn.' + if name not in (p+'q_norm',p+'k_norm'):return super().normalization(x,name) + # This path does not multiply the unit-gain tail, unlike a full-vector mask. + unit=x/np.sqrt(np.mean(x*x,axis=-1,keepdims=True)+self.eps) + isq=name==p+'q_norm';head=self.a if isq else self.b + skip=(isq and self.move=='q_to_k') or (not isq and self.move=='k_to_q') + tail=unit[...,self.r:] if skip else unit[...,self.r:]*self.joint + return np.concatenate([unit[...,:self.r]*head[:self.r],tail],axis=-1) + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',required=True,type=Path);a=p.parse_args();root=a.root + # Protocol is fixed before inspecting functional measurements. + protocol={'fixed_intervention_layer':3,'directions':['q_to_k','k_to_q'],'diagnostic_layers':LAYERS,'no_selection':True,'no_training':True,'precision':'FP32 product; no BF16 requantization','quality_gate':{'mean_nll_delta':.01,'sequence_p95_nll_delta':.05}} + protocol_path=root/'gain-factorization-protocol.json' + if protocol_path.exists(): + old=json.loads(protocol_path.read_text());assert all(old[k]==v for k,v in protocol.items()), 'Protocol differs from preregistration' + else:write_json(protocol_path,{**protocol,'registered_unix':time.time()}) + ledger_path=root/'compute-budget-ledger.json';ledger=json.loads(ledger_path.read_text()) + remaining=int(7200-ledger['spent_seconds']-30) + if remaining<60:raise TimeoutError('No remaining cumulative budget for deterministic identity verification') + start=time.monotonic() + report={'state':'running','records':[],'interventions':[]} + try: + cfg=json.loads((root/'model_config.json').read_text());c=cfg['text_config'];r=int(c['head_dim']*c['rope_parameters']['partial_rotary_factor']) + assert c['rms_norm_eps']==1e-6 + assert c['head_dim']==256 and r==64 and c['num_attention_heads']==8 and c['num_key_value_heads']==2 + lm=FactoredLM(root/'weights',cfg,seconds=remaining) + data=np.load(root/'baseline-activations.npz');samples=json.loads((root/'samples-tokenized.json').read_text())['samples'] + rp=c['rope_parameters'];repeats=c['num_attention_heads']//c['num_key_value_heads'] + records=[] + for layer in LAYERS: + lm.guard() + pfx=f'layers.{layer}.self_attn.' + aw=lm.small(pfx+'q_norm.weight');bw=lm.small(pfx+'k_norm.weight');ag,bg=1+aw,1+bw + q,k=data[f'qraw_{layer}'],data[f'kraw_{layer}'] + qr,kr=rope(norm(q,aw),rp['rope_theta'],rp['partial_rotary_factor']),rope(norm(k,bw),rp['rope_theta'],rp['partial_rotary_factor']) + ref=np.einsum('bthd,bshd->bhts',qr,np.repeat(kr,repeats,axis=2))/np.float32(np.sqrt(c['head_dim'])) + mask=np.triu(np.ones(ref.shape[-2:],dtype=bool),1) + def probs(s): + s=np.where(mask,-np.inf,s);e=np.exp(s-s.max(-1,keepdims=True));return e/e.sum(-1,keepdims=True) + pref=probs(ref) + for move in ('q_to_k','k_to_q'): + qq,kk=consolidate(q,k,ag,bg,r,move) + qq,kk=rope(qq,rp['rope_theta'],rp['partial_rotary_factor']),rope(kk,rp['rope_theta'],rp['partial_rotary_factor']) + changed=np.einsum('bthd,bshd->bhts',qq,np.repeat(kk,repeats,axis=2))/np.float32(np.sqrt(c['head_dim'])) + pp=probs(changed) + for bi,s in enumerate(samples): + diff=changed[bi].astype(np.float64)-ref[bi] + records.append({'layer':layer,'direction':move,'sample_id':s['id'],'split':s['split'], + 'score_max_abs_error':float(np.abs(diff).max()),'score_relative_l2':float(np.linalg.norm(diff)/max(np.linalg.norm(ref[bi].astype(np.float64)),1e-12)), + 'probability_max_abs_error':float(np.abs(pp[bi]-pref[bi]).max()),**probability_metrics(pref[bi:bi+1],pp[bi:bi+1])}) + save_csv(root/'gain-factorization-score-metrics.csv',records) + held=np.array([i for i,s in enumerate(samples) if s['split']=='heldout']);ids=np.array([s['token_ids'] for s in samples],dtype=np.int64) + base=np.load(root/'baseline-heldout-token-nll.npy').mean(1) + for move in ('q_to_k','k_to_q'): + lm.configure(3,move) + h,_=lm.forward(ids[held]) + nll=lm.nll(h,ids[held]);np.save(root/f'gain-factorization-{move}-token-nll.npy',nll) + delta=nll.mean(1)-base + report['interventions'].append({'layer':3,'direction':move,'sequence_nll_deltas':delta.tolist(),'mean_nll_delta':float(delta.mean()),'sequence_p95_delta':float(np.quantile(delta,.95)),'passed':bool(delta.mean()<=.01 and np.quantile(delta,.95)<=.05)}) + write_json(root/'gain-factorization-summary.json',report) + # Local normalization timing uses precomputed gains for both implementations. + q,k=data['qraw_3'][:1],data['kraw_3'][:1];pfx='layers.3.self_attn.' + ag,bg=1+lm.small(pfx+'q_norm.weight'),1+lm.small(pfx+'k_norm.weight') + def baseline():return normalized(q)*ag,normalized(k)*bg + joint=ag[r:]*bg[r:] + def factored():return consolidate(q,k,ag,bg,r,'q_to_k',joint=joint) + for _ in range(3):baseline();factored() + timing=[] + for repeat in range(10): + for label,fn in (('baseline',baseline),('factored',factored)) if repeat%2==0 else (('factored',factored),('baseline',baseline)): + lm.guard();t=time.perf_counter() + for _ in range(20):fn() + timing.append({'repeat':repeat,'implementation':label,'seconds_per_call':(time.perf_counter()-t)/20}) + save_csv(root/'gain-factorization-kernel-timing.csv',timing) + report.update(state='completed',maximum_score_abs_error=max(x['score_max_abs_error'] for x in records),maximum_probability_abs_error=max(x['probability_max_abs_error'] for x in records), + bidirectional_heldout_pass=all(x['passed'] for x in report['interventions']), + elementwise_gain_multiplies_saved_per_token_layer={'q_to_k':1536,'k_to_q':384}, + original_bf16_payload_bytes=1024,factored_lossless_mixed_payload_bytes=1024, + fp32_cached_gain_payload_before=2048,fp32_cached_gain_payload_after=1280, + claim_limit='Exact real-arithmetic identity only on non-RoPE coordinates; empirical FP32/NLL checks on tiny text pilot. Not evidence that two existing full layers interchange, not model-wide speedup.') + except Exception as exc: + report.update(state='stopped',error_type=type(exc).__name__,error=str(exc));raise + finally: + elapsed=time.monotonic()-start + report.update(elapsed_seconds=elapsed,peak_rss_kib=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) + ledger=json.loads(ledger_path.read_text());ledger['spent_seconds']+=elapsed;ledger['calls'].append({'module':'functional.gain_factorization','seconds':elapsed});write_json(ledger_path,ledger) + write_json(root/'gain-factorization-summary.json',report) + + +if __name__=='__main__':main() diff --git a/functional/model.py b/functional/model.py index dd64f49..5942217 100644 --- a/functional/model.py +++ b/functional/model.py @@ -6,6 +6,7 @@ No cached decode, padding, images, generation, fused kernels or autograd. Full-sequence gated delta recurrence replaces the algebraically equivalent chunk algorithm; both are independently compared in remote tests. """ +import ctypes import json import time from pathlib import Path @@ -87,6 +88,7 @@ class StreamingLM: self.qk_inputs = {} self.swap_observation = None self.swap_pressure_windows = 0 + self.malloc_trim = getattr(ctypes.CDLL(None), 'malloc_trim', None) def guard(self): if time.monotonic() > self.deadline: @@ -104,8 +106,9 @@ class StreamingLM: elapsed = now-self.swap_observation[0] rate = (count-self.swap_observation[1])*4096/elapsed self.swap_pressure_windows = self.swap_pressure_windows+1 if rate > 4*1024**2 else 0 - if self.swap_pressure_windows >= 3: - raise MemoryError('Sustained host swap IO above 4 MiB/s in three observation windows') + own_swap_kib = int(status.get('VmSwap', '0 kB').split()[0]) + if self.swap_pressure_windows >= 3 and (available < 384*1024 or own_swap_kib > 128*1024): + raise MemoryError(f'Sustained host swap pressure plus constrained memory: available={available} KiB, process_swap={own_swap_kib} KiB') self.swap_observation = (now,count) if rss_kib > 512*1024 or available < 256*1024: raise MemoryError(f'Soft memory stop: RSS {rss_kib} KiB, available {available} KiB') @@ -130,6 +133,8 @@ class StreamingLM: result[:, start:end] = flat @ w.T del w t.evict() + if self.malloc_trim is not None: + self.malloc_trim(0) # Release only this process's freed temporary heap pages. return result.reshape(*x.shape[:-1], outdim) def embedding(self, ids): diff --git a/functional/neuron_reuse.py b/functional/neuron_reuse.py new file mode 100644 index 0000000..fd3e383 --- /dev/null +++ b/functional/neuron_reuse.py @@ -0,0 +1,134 @@ +"""Find repeated learned scalar MLP functions on real hidden inputs, no training. + +Four fixed layers; calibration-only selection; one frozen pair; independent heldout +functional test and two actual network substitutions. No scale fitting or R. +""" +import argparse +import hashlib +import json +from pathlib import Path +import resource +import time +import numpy as np +from .model import StreamingLM,silu +from .run import write_json,save_csv + +LAYERS=[5,6,20,21] + + +def pair_metrics(x,y): + x,y=x.astype(np.float64),y.astype(np.float64) + xx,yy=float(x@x),float(y@y);delta=float((x-y)@(x-y)) + xc,yc=x-x.mean(),y-y.mean() + return {'relative_l2_a_to_b':float(np.sqrt(delta/max(xx,1e-30))), + 'relative_l2_b_to_a':float(np.sqrt(delta/max(yy,1e-30))), + 'cosine':float(x@y/max(np.sqrt(xx*yy),1e-30)), + 'pearson':float(xc@yc/max(np.linalg.norm(xc)*np.linalg.norm(yc),1e-30)), + 'rms_a':float(np.sqrt(xx/x.size)),'rms_b':float(np.sqrt(yy/y.size)), + 'std_over_rms_a':float(np.std(x)/max(np.sqrt(xx/x.size),1e-30)), + 'std_over_rms_b':float(np.std(y)/max(np.sqrt(yy/y.size),1e-30)), + 'effective_energy_tokens_a':float(xx*xx/max(float((x**4).sum()),1e-30)), + 'effective_energy_tokens_b':float(yy*yy/max(float((y**4).sum()),1e-30))} + + +class NeuronReuseLM(StreamingLM): + def configure(self,layer,target,donor):self.reused_layer,self.target,self.donor=layer,target,donor + def mlp(self,h,layer): + p=f'layers.{layer}.mlp.' + z=silu(self.linear(h,p+'gate_proj'))*self.linear(h,p+'up_proj') + if layer==self.reused_layer:z[...,self.target]=z[...,self.donor] + return self.linear(z,p+'down_proj') + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',type=Path,required=True);a=p.parse_args();root=a.root + protocol={'layers':LAYERS,'unit':'post_silu_gate_times_up_scalar_function; keep each output column', + 'thresholds':[.05,.10,.20],'maximum_directional_relative_l2':.20,'cosine_min':.98,'pearson_min':.95, + 'rms_floor':'at least within-layer median calibration neuron RMS','std_over_rms_min':.25, + 'effective_energy_tokens_min':16,'max_selected_pairs':1,'selection':'smallest worst directional calibration error; then layer/id', + 'heldout_per_text_error_max':.35,'heldout_quality_mean_nll_delta_max':.01,'heldout_quality_sequence_p95_delta_max':.05, + 'training':False,'scale_fitting':False,'cost_required':False} + protocol_path=root/'neuron-reuse-protocol.json' + if protocol_path.exists(): + old=json.loads(protocol_path.read_text());assert all(old[k]==v for k,v in protocol.items()) + else:write_json(protocol_path,{**protocol,'registered_unix':time.time()}) + ledger_path=root/'compute-budget-ledger.json';ledger=json.loads(ledger_path.read_text());remaining=int(7200-ledger['spent_seconds']-30) + if remaining<120:raise TimeoutError('Remaining cumulative budget insufficient') + started=time.monotonic();result={'state':'running','selected':None,'function_pass':False,'interventions':[]} + try: + cfg=json.loads((root/'model_config.json').read_text());lm=NeuronReuseLM(root/'weights',cfg,seconds=remaining) + data=np.load(root/'baseline-activations.npz');samples=json.loads((root/'samples-tokenized.json').read_text())['samples'] + cal=np.array([i for i,s in enumerate(samples) if s['split']=='calibration']);held=np.array([i for i,s in enumerate(samples) if s['split']=='heldout']) + activations={};summaries=[];best=None + for layer in LAYERS: + h=data[f'mlp_{layer}'];pfx=f'layers.{layer}.mlp.' + z=silu(lm.linear(h,pfx+'gate_proj'))*lm.linear(h,pfx+'up_proj');activations[layer]=z + # Profiles use all calibration tokens; never use heldout in selection. + x=np.ascontiguousarray(z[cal].reshape(-1,z.shape[-1]).T,dtype=np.float64) + n=x.shape[1];normsq=(x*x).sum(1);means=x.mean(1);variance=np.maximum(normsq-n*means**2,0) + rms=np.sqrt(normsq/n);floor=float(np.median(rms));effective=normsq**2/np.maximum((x**4).sum(1),1e-30) + active=(rms>=floor)&(np.sqrt(variance/np.maximum(normsq,1e-30))>=.25)&(effective>=16) + counts={str(t):0 for t in protocol['thresholds']};tested=0;layerbest=None + for start in range(0,x.shape[0],256): + lm.guard();end=min(start+256,x.shape[0]);dot=x[start:end]@x.T + delta=np.maximum(normsq[start:end,None]+normsq[None,:]-2*dot,0) + error=np.sqrt(delta/np.maximum(np.minimum(normsq[start:end,None],normsq[None,:]),1e-30)) + cosine=dot/np.maximum(np.sqrt(normsq[start:end,None]*normsq[None,:]),1e-30) + pearson=(dot-n*means[start:end,None]*means[None,:])/np.maximum(np.sqrt(variance[start:end,None]*variance[None,:]),1e-30) + unique=np.arange(start,end)[:,None]=.98)&(pearson>=.95) + tested+=int((unique&active[start:end,None]&active[None,:]).sum()) + for threshold in protocol['thresholds']:counts[str(threshold)]+=int((allowed&(error<=threshold)).sum()) + mask=allowed&(error<=.20) + if mask.any(): + score=np.where(mask,error,np.inf);row,col=np.unravel_index(np.argmin(score),score.shape) + candidate={'layer':layer,'a':int(start+row),'b':int(col),'calibration_worst_relative_l2':float(score[row,col])} + key=lambda c:(c['calibration_worst_relative_l2'],c['layer'],c['a'],c['b']) + if layerbest is None or key(candidate)=.98 and pooled['pearson']>=.95 and + min(pooled['std_over_rms_a'],pooled['std_over_rms_b'])>=.25 and min(pooled['effective_energy_tokens_a'],pooled['effective_energy_tokens_b'])>=16 and + min(pooled['rms_a'],pooled['rms_b'])>=floor and + all(max(r['relative_l2_a_to_b'],r['relative_l2_b_to_a'])<=.35 for r in metrics if r['split']=='heldout' and r['scope']!='pooled')) + result.update(function_pass=bool(function_pass),heldout_function_metrics=pooled) + # Show parameter similarity separately from actual functional similarity. + wd=[] + for role in ('gate_proj','up_proj'): + t=lm.tensors[f'model.language_model.layers.{layer}.mlp.{role}.weight'];d=t.shape[1] + wa,wb=t.read(slice(i*d,(i+1)*d)),t.read(slice(j*d,(j+1)*d)) + wd.append({'role':role,'weight_cosine':float(wa.astype(np.float64)@wb/max(np.linalg.norm(wa.astype(np.float64))*np.linalg.norm(wb.astype(np.float64)),1e-30))});t.evict() + result['weight_diagnostics']=wd + if function_pass: + ids=np.array([s['token_ids'] for s in samples],dtype=np.int64);base=np.load(root/'baseline-heldout-token-nll.npy').mean(1) + for target,donor in ((i,j),(j,i)): + lm.configure(layer,target,donor);h,_=lm.forward(ids[held]);nll=lm.nll(h,ids[held]) + np.save(root/f'neuron-reuse-{target}-uses-{donor}-token-nll.npy',nll) + delta=nll.mean(1)-base + result['interventions'].append({'target':target,'donor':donor,'sequence_nll_deltas':delta.tolist(),'mean_nll_delta':float(delta.mean()),'sequence_p95_delta':float(np.quantile(delta,.95)),'passed':bool(delta.mean()<=.01 and np.quantile(delta,.95)<=.05)}) + write_json(root/'neuron-reuse-summary.json',result) + # No fallback after looking at heldout. + result.update(state='completed',empirical_repeated_function_positive=bool(result['function_pass'] and len(result['interventions'])==2 and all(r['passed'] for r in result['interventions'])), + claim_limit='Distinct learned scalar MLP subfunctions on the specified short-text distribution; not whole-layer duplication, global equivalence or broad task-capability proof. No performance requirement.') + except Exception as exc:result.update(state='stopped',error_type=type(exc).__name__,error=str(exc));raise + finally: + elapsed=time.monotonic()-started;result.update(elapsed_seconds=elapsed,peak_rss_kib=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) + ledger=json.loads(ledger_path.read_text());ledger['spent_seconds']+=elapsed;ledger['calls'].append({'module':'functional.neuron_reuse','seconds':elapsed});write_json(ledger_path,ledger) + write_json(root/'neuron-reuse-summary.json',result) + + +if __name__=='__main__':main() diff --git a/functional/norm_repetition.py b/functional/norm_repetition.py new file mode 100644 index 0000000..3ba58ac --- /dev/null +++ b/functional/norm_repetition.py @@ -0,0 +1,108 @@ +"""Existing learned RMSNorm modules: uniform function bound + independent probes. + +Deterministic exhaustive selection by a mathematical all-input error bound, not +calibration/heldout fitting. Same role, shape and eps; one pair only. +""" +import argparse +import json +from pathlib import Path +import resource +import time +import numpy as np +from .model import StreamingLM,norm +from .run import write_json,save_csv,error_rows + +ROLES=['input_layernorm','post_attention_layernorm'] + + +def uniform_bounds(a,b): + if np.any(a==0) or np.any(b==0):return None + diff=np.abs(a.astype(np.float64)-b.astype(np.float64)) + return float(np.max(diff/np.abs(a))),float(np.max(diff/np.abs(b))) + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',type=Path,required=True);args=p.parse_args();root=args.root + protocol={'roles':ROLES,'layers':list(range(24)),'same_role_only':True,'same_eps':1e-6, + 'uniform_worst_error_limit':.20,'empirical_function_worst_relative_error_limit':.05, + 'selection':'smallest maximum two-direction uniform bound, then role/layer; no input data used', + 'minimum_gain_standard_deviation':.001,'max_selected_pairs':1,'heldout_nll_mean_delta_limit':.01, + 'heldout_nll_sequence_p95_delta_limit':.05,'training':False,'cost_required':False} + path=root/'norm-repetition-protocol.json' + if path.exists(): + existing=json.loads(path.read_text());assert all(existing[k]==v for k,v in protocol.items()) + else:write_json(path,{**protocol,'registered_unix':time.time()}) + ledger_path=root/'compute-budget-ledger.json';ledger=json.loads(ledger_path.read_text());remaining=int(7200-ledger['spent_seconds']-30) + if remaining<120:raise TimeoutError('Insufficient cumulative computation budget') + started=time.monotonic();result={'state':'running','selected':None,'interventions':[]} + try: + cfg=json.loads((root/'model_config.json').read_text());lm=StreamingLM(root/'weights',cfg,seconds=remaining) + assert lm.eps==1e-6 + candidates=[];gains={} + for role in ROLES: + for layer in range(24):gains[(role,layer)]=1+lm.small(f'layers.{layer}.{role}.weight') + for i in range(24): + for j in range(i+1,24): + a,b=gains[(role,i)],gains[(role,j)] + bounds=uniform_bounds(a,b) + if bounds is None:continue + eligible=min(float(np.std(a)),float(np.std(b)))>=.001 + candidates.append({'role':role,'a':i,'b':j,'a_to_b_uniform_bound':bounds[0],'b_to_a_uniform_bound':bounds[1], + 'worst_uniform_bound':max(bounds),'eligible_nonconstant_gains':eligible, + 'gain_std_a':float(np.std(a)),'gain_std_b':float(np.std(b)), + 'gain_min_a':float(np.min(a)),'gain_min_b':float(np.min(b))}) + save_csv(root/'norm-repetition-uniform-bounds.csv',candidates) + feasible=[c for c in candidates if c['eligible_nonconstant_gains'] and c['worst_uniform_bound']<=.20] + counts={str(t):sum(c['eligible_nonconstant_gains'] and c['worst_uniform_bound']<=t for c in candidates) for t in (.05,.10,.20)} + selected=sorted(feasible,key=lambda c:(c['worst_uniform_bound'],c['role'],c['a'],c['b']))[:1] + write_json(root/'norm-repetition-selection.json',{'selected':selected,'uniform_bound_counts':counts,'selection_reads_no_input_data':True}) + result['uniform_bound_counts']=counts + if selected: + c=selected[0];result['selected']=c + # Selection is frozen before reading tokenized inputs or their activations. + samples=json.loads((root/'samples-tokenized.json').read_text())['samples'];ids=np.array([s['token_ids'] for s in samples],dtype=np.int64) + held=np.array([i for i,s in enumerate(samples) if s['split']=='heldout']) + kind='attn' if c['role']=='input_layernorm' else 'mlp' + captures=[(kind,c['a']),(kind,c['b'])] + h,saved=lm.forward(ids,capture=captures) + # The untouched recomputation must reproduce the saved real baseline. + original=np.load(root/'baseline-activations.npz')['final'] + np.testing.assert_array_equal(h,original) + np.savez(root/'norm-repetition-input-profiles.npz',**saved) + ga,gb=gains[(c['role'],c['a'])],gains[(c['role'],c['b'])] + rows=[] + for source in (c['a'],c['b']): + n=saved[f'{kind}_{source}'];g=gains[(c['role'],source)] + # n = u * gamma_source. Reconstruct common normalized input u; + # source gains are nonzero. Additional rounding is ~FP32 only. + unit=n/g + fa,fb=unit*ga,unit*gb + rec=error_rows(fa,fb,samples,{'source_layer':source,'role':c['role'],'a':c['a'],'b':c['b']}) + rows.extend(rec) + save_csv(root/'norm-repetition-function-metrics.csv',rows) + heldrows=[r for r in rows if r['split']=='heldout'] + function_pass=all(max(r['relative_l2'],r['reverse_relative_l2'])<=.05 for r in heldrows) + result.update(uniform_function_similarity_proven=True,heldout_function_pass=bool(function_pass), + worst_heldout_relative_l2=max(max(r['relative_l2'],r['reverse_relative_l2']) for r in heldrows), + worst_heldout_cosine=min(r['cosine'] for r in heldrows),untouched_full_forward_bitwise_matches_baseline=True) + if function_pass: + baseline=np.load(root/'baseline-heldout-token-nll.npy').mean(1) + for target,donor in ((c['a'],c['b']),(c['b'],c['a'])): + lm.norm_replacement=(f'layers.{target}.{c["role"]}',f'layers.{donor}.{c["role"]}') + changed,_=lm.forward(ids[held]);nll=lm.nll(changed,ids[held]);np.save(root/f'norm-repetition-{target}-uses-{donor}-token-nll.npy',nll) + delta=nll.mean(1)-baseline + result['interventions'].append({'target':target,'donor':donor,'sequence_nll_deltas':delta.tolist(), + 'mean_nll_delta':float(delta.mean()),'sequence_p95_nll_delta':float(np.quantile(delta,.95)), + 'passed_quality':bool(delta.mean()<=.01 and np.quantile(delta,.95)<=.05)}) + write_json(root/'norm-repetition-summary.json',result) + result['learned_function_repetition_positive']=bool(function_pass) + result['bidirectional_network_quality_pass']=bool(len(result['interventions'])==2 and all(x['passed_quality'] for x in result['interventions'])) + result.update(state='completed',claim_limit='Existing learned RMSNorm module functions with identical eps and shape; uniform real-arithmetic relative bound and tiny real-text probes. Does not establish attention/MLP-body duplication or broad task capability.') + except Exception as exc:result.update(state='stopped',error_type=type(exc).__name__,error=str(exc));raise + finally: + elapsed=time.monotonic()-started;result.update(elapsed_seconds=elapsed,peak_rss_kib=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) + ledger=json.loads(ledger_path.read_text());ledger['spent_seconds']+=elapsed;ledger['calls'].append({'module':'functional.norm_repetition','seconds':elapsed});write_json(ledger_path,ledger) + write_json(root/'norm-repetition-summary.json',result) + + +if __name__=='__main__':main() diff --git a/functional/package_delivery.py b/functional/package_delivery.py new file mode 100644 index 0000000..024b03b --- /dev/null +++ b/functional/package_delivery.py @@ -0,0 +1,46 @@ +"""Package code-independent scientific outputs, retain large activation caches externally. + +The experiment directory remains immutable and complete. The delivery directory +contains all figure source tables/NLL arrays plus hashes/locations for three large +reproducible activation caches. Never deletes model weights or cache files. +""" +import argparse +import hashlib +import json +from pathlib import Path +import shutil +from .run import write_json + +CACHES={'baseline-activations.npz','neuron-reuse-activations.npz','norm-repetition-input-profiles.npz'} + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',required=True,type=Path);p.add_argument('--output',required=True,type=Path);a=p.parse_args() + root,out=a.root.resolve(),a.output.resolve();assert root!=out + out.mkdir(parents=True,exist_ok=True) + full=json.loads((root/'checksums-functional.json').read_text()) + files=json.loads((root/'archive-files.json').read_text()) + for name in files: + src=root/name + if name in CACHES:continue + dest=out/name;dest.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(src,dest) + external=[] + for name in sorted(CACHES): + src=root/name;digest=hashlib.sha256(src.read_bytes()).hexdigest();assert digest==full[name] + external.append({'name':name,'server_path':str(src),'bytes':src.stat().st_size,'sha256':digest,'retained':True,'reproducible_by':'functional.run / functional.neuron_reuse / functional.norm_repetition'}) + write_json(out/'external-activation-cache.json',{'host':'8.211.154.134','files':external,'not_model_weights':True, + 'reason':'Large intermediate caches retained on the authorized server; all figure source tables and token NLL arrays are delivered in Git.'}) + shutil.copy2(root/'checksums-functional.json',out/'checksums-full-server.json') + (out/'DELIVERY.md').write_text('# Scientific delivery and retained caches\n\nAll figure CSV/JSON source data, per-token NLL, protocols, reports, metadata and historical logs are included.\nThree large reproducible intermediate activation caches remain on 8.211.154.134 and in the original full local archive;\n`external-activation-cache.json` records exact locations, sizes and SHA256. No weight or cache was deleted.\nThe original full experiment manifest is `checksums-full-server.json`; the delivery-only manifest is\n`checksums-functional.json`. No model checkpoint or tokenizer payload is in this Git delivery.\n') + validation=json.loads((out/'audit-validation.json').read_text());validation.update(delivery_excludes_external_activation_caches=True,full_experiment_checksums='checksums-full-server.json',figure_source_tables_and_token_nll_complete=True) + write_json(out/'audit-validation.json',validation) + checks={} + for file in sorted(out.rglob('*')): + if file.is_file() and file.name not in ('checksums-functional.json','audit-validation.json','archive-files.json'): + checks[str(file.relative_to(out))]=hashlib.sha256(file.read_bytes()).hexdigest() + write_json(out/'checksums-functional.json',checks) + write_json(out/'archive-files.json',[*checks,'checksums-functional.json','audit-validation.json','archive-files.json']) + print(json.dumps({'delivery_files':len(checks)+3,'checksummed_files':len(checks),'external_caches':len(external),'weights_and_caches_retained':True})) + + +if __name__=='__main__':main() diff --git a/functional/preflight.py b/functional/preflight.py index 8936b75..b981647 100644 --- a/functional/preflight.py +++ b/functional/preflight.py @@ -14,14 +14,26 @@ def main(): samples,ids=tokenize(a.root) start=time.time() lm=StreamingLM(a.root/'weights',json.loads((a.root/'model_config.json').read_text()),seconds=1200) - def progress(layer):print(json.dumps({'preflight_layer':layer,'seconds':time.time()-start}),flush=True) - h,_=lm.forward(ids[:1,:8],progress=progress) - nll=lm.nll(h,ids[:1,:8]) - if not np.isfinite(nll).all():raise FloatingPointError('Nonfinite NLL') - write_json(a.root/'preflight.json',{'passed':True,'sample_id':samples[0]['id'],'tokens':8, - 'elapsed_seconds':time.time()-start,'peak_rss_kib':resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, - 'mean_nll':float(nll.mean()),'token_nll':nll.tolist(), - 'limitation':'Real-weight capacity check, not an independent correctness oracle or quality benchmark'}) + snapshots=[] + result={'passed':False,'sample_id':samples[0]['id'],'tokens':8} + def progress(layer): + status=dict(line.split(':',1) for line in Path('/proc/self/status').read_text().splitlines() if ':' in line) + snapshots.append({'layer':layer,'seconds':time.time()-start,'rss_kib':int(status['VmRSS'].split()[0]), + 'process_swap_kib':int(status.get('VmSwap','0 kB').split()[0]), + 'available_kib':int(next(line.split()[1] for line in Path('/proc/meminfo').read_text().splitlines() if line.startswith('MemAvailable:')))}) + print(json.dumps(snapshots[-1]),flush=True) + try: + h,_=lm.forward(ids[:1,:8],progress=progress) + nll=lm.nll(h,ids[:1,:8]) + if not np.isfinite(nll).all():raise FloatingPointError('Nonfinite NLL') + result.update(passed=True,mean_nll=float(nll.mean()),token_nll=nll.tolist()) + except Exception as exc: + result.update(error_type=type(exc).__name__,error=str(exc)) + raise + finally: + result.update(elapsed_seconds=time.time()-start,peak_rss_kib=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, + resource_snapshots=snapshots,limitation='Real-weight capacity check, not an independent correctness oracle or quality benchmark') + write_json(a.root/'preflight.json',result) if __name__=='__main__':main() diff --git a/functional/reference_check.py b/functional/reference_check.py index 506170d..5866ad2 100644 --- a/functional/reference_check.py +++ b/functional/reference_check.py @@ -14,7 +14,7 @@ import numpy as np from .model import StreamingLM, delta_rule, rope, norm EXPECTED_COMMIT = 'fd3cf0140de03f7619ac95b5cfed05b711ff9e22' -NAMES = {'l2norm', 'torch_chunk_gated_delta_rule', 'torch_recurrent_gated_delta_rule', +NAMES = {'apply_mask_to_padding_states', 'l2norm', 'torch_chunk_gated_delta_rule', 'torch_recurrent_gated_delta_rule', 'causal_conv1d_fn', 'Qwen3_5RMSNormGated', 'Qwen3_5GatedDeltaNet', 'rotate_half', 'apply_rotary_pos_emb', 'repeat_kv', 'eager_attention_forward', 'Qwen3_5Attention', 'Qwen3_5MLP', 'Qwen3_5RMSNorm', 'Qwen3_5DecoderLayer', @@ -30,7 +30,7 @@ def official_namespace(source): if isinstance(node, (ast.FunctionDef, ast.ClassDef)) and node.name in NAMES: for child in ast.walk(node): if isinstance(child, (ast.FunctionDef, ast.ClassDef)): - child.decorator_list = [] + child.decorator_list = [d for d in child.decorator_list if isinstance(d, ast.Name) and d.id in ('staticmethod','classmethod')] nodes.append(node) assert {x.name for x in nodes} == NAMES tree = ast.Module(body=[ast.ImportFrom(module='__future__',names=[ast.alias(name='annotations')],level=0),*nodes],type_ignores=[]) @@ -134,7 +134,7 @@ def main(): actual,_=lm.forward(ids) check('complete_two_layer_text_forward',actual,expected) result={'passed':True,'reference_commit':EXPECTED_COMMIT,'source_sha256':hashlib.sha256(a.source.read_bytes()).hexdigest(), - 'torch':torch.__version__,'numpy':np.__version__,'tests':evidence,'limitations':'FP32 CPU semantics on tiny synthetic configurations; not full-checkpoint BF16 kernel equivalence'} + 'torch':torch.__version__,'numpy':np.__version__,'implementation_sha256':hashlib.sha256(Path(__file__).with_name('model.py').read_bytes()).hexdigest(),'tests':evidence,'limitations':'FP32 CPU semantics on tiny synthetic configurations; not full-checkpoint BF16 kernel equivalence'} a.output.write_text(json.dumps(result,indent=2)) print(json.dumps({'passed':True,'checks':len(evidence),'maximum_absolute_discrepancy':max(x['max_abs_error'] for x in evidence)})) diff --git a/functional/report.py b/functional/report.py index 8117853..2c0f23c 100644 --- a/functional/report.py +++ b/functional/report.py @@ -23,9 +23,9 @@ def main(): ax.bar(np.arange(len(c)),[max(v['maximum_symmetric_relative_error'],1e-8) for v in c],color=['#238b45' if v['passed'] else '#9e9e9e' for v in c]) ax.axhline(.05,color='#b2182b',linestyle='--',label='Relative L2 screen = 0.05; other gates also apply') ax.set_yscale('log');ax.set_xticks(np.arange(len(c)),[v['id'] for v in c],rotation=45,ha='right') - ax.set_ylabel('Worst calibration symmetric relative L2') + ax.set_ylabel('Worst calibration directional relative L2') ax.set_title('Fixed candidates; same-input function comparison\n4 calibration texts, 32 tokens; no training') - ax.legend(loc='upper left',bbox_to_anchor=(0,1.01),fontsize=8);fig.tight_layout();save(fig,'candidate_function_errors') + ax.legend(loc='upper left',bbox_to_anchor=(0,-.38),fontsize=8);fig.tight_layout();save(fig,'candidate_function_errors') if (root/'interventions.json').exists(): interventions=json.loads((root/'interventions.json').read_text()) fig,ax=plt.subplots(figsize=(8,4.5)) @@ -36,13 +36,68 @@ def main(): ax.set_xticks(np.arange(4),['heldout zh1','heldout zh2','heldout en1','heldout en2']) ax.set_ylabel('Token NLL change (nat/token)');ax.set_title('Single-site interventions; frozen candidate\n4 heldout texts, 32 tokens; limited pilot evidence') ax.legend(loc='upper left',bbox_to_anchor=(0,-.18),fontsize=8);fig.tight_layout();save(fig,'heldout_intervention_nll') - text=['# CPU functional reuse pilot','',f'- State: {status["state"]}',f'- Positive bidirectional pilot: {status.get("positive_bidirectional_quality",False)}', - f'- Elapsed analysis seconds: {status.get("elapsed_seconds")}',f'- Peak RSS KiB: {status.get("peak_rss_kib")}', - '- Original BF16 weights decoded into FP32 CPU operators, no training.', - '- Calibration and heldout samples are distinct but very small, short and experiment-authored.', - '- A positive result is limited to these empirical tests, not global equivalence or GPU speedup.', - '- Weight retention: keep until explicit user deletion request; no automatic cleanup.',''] - if status['state']!='completed':text+=['## Stop evidence','',f'{status.get("error_type")}: {status.get("error")}',''] + norm_path=root/'norm-repetition-summary.json' + repetition=json.loads(norm_path.read_text()) if norm_path.exists() else {} + if (root/'norm-repetition-function-metrics.csv').exists(): + with (root/'norm-repetition-function-metrics.csv').open() as f:rows=list(csv.DictReader(f)) + sample_ids=list(dict.fromkeys(row['sample_id'] for row in rows)) + fig,ax=plt.subplots(figsize=(9,4.8)) + for source in sorted({row['source_layer'] for row in rows},key=int): + rr=[r for r in rows if r['source_layer']==source] + ax.plot(range(len(rr)),[max(float(r['relative_l2']),float(r['reverse_relative_l2'])) for r in rr],'o-',label=f'Input captured at layer {source}') + ax.axhline(.05,color='#b2182b',ls='--',label='Heldout empirical screen = 0.05') + chosen=repetition.get('selected') + if chosen:ax.axhline(chosen['worst_uniform_bound'],color='#6a51a3',ls=':',label='Proven uniform all-input bound') + ax.axvline(3.5,color='gray',linewidth=.8) + ax.set_xticks(range(len(sample_ids)),sample_ids,rotation=30,ha='right');ax.set_ylabel('Worst of two directional relative L2 errors') + ax.set_title('Learned input RMSNorm at layer indices 12/13: same-input comparison\nCalibration (left) / independent heldout texts (right), 32 tokens each') + ax.legend(loc='upper left',bbox_to_anchor=(0,-.25),fontsize=8);fig.tight_layout();save(fig,'learned_norm_function_errors') + if repetition.get('interventions'): + fig,ax=plt.subplots(figsize=(8,4.5)) + for v in repetition['interventions']: + ax.plot(range(4),v['sequence_nll_deltas'],'o-',label=f'Layer {v["target"]} uses {v["donor"]}; mean={v["mean_nll_delta"]:.5g}') + ax.axhline(0,color='gray',linewidth=.8);ax.set_xticks(range(4),['zh1','zh2','en1','en2']) + ax.set_xlabel('Independent heldout text (32 tokens)');ax.set_ylabel('Mean token NLL change (nat/token)') + ax.set_title('Bidirectional single-site substitution of existing learned RMSNorm modules') + ax.legend(loc='upper left',bbox_to_anchor=(0,-.18),fontsize=8);fig.tight_layout();save(fig,'learned_norm_network_substitution') + if (root/'gain-factorization-score-metrics.csv').exists(): + with (root/'gain-factorization-score-metrics.csv').open() as f:rr=list(csv.DictReader(f)) + layers=sorted({int(v['layer']) for v in rr});fig,axes=plt.subplots(1,2,figsize=(10,4)) + for ax,key,label in zip(axes,['score_max_abs_error','probability_max_abs_error'],['Maximum absolute score error','Maximum absolute probability error']): + for direction in ('q_to_k','k_to_q'): + ax.plot(layers,[max(float(v[key]) for v in rr if int(v['layer'])==layer and v['direction']==direction) for layer in layers],'o-',label=direction) + ax.set_xlabel('Full-attention layer index');ax.set_xticks(layers);ax.set_ylabel(label);ax.ticklabel_format(axis='y',style='sci',scilimits=(0,0));ax.legend(loc='upper left',fontsize=8) + fig.suptitle('Supplement: algebraic reparameterization, separate from learned-function repetition');fig.tight_layout();save(fig,'algebraic_gain_identity') + neuron_path=root/'neuron-reuse-summary.json' + neuron=json.loads(neuron_path.read_text()) if neuron_path.exists() else {} + text=['# CPU learned-function repetition pilot','', + 'Primary question: do two distinct trained parts implement similar functions? Cost is not a success condition.', + f'- Existing learned RMSNorm function positive: {repetition.get("learned_function_repetition_positive",False)}', + f'- Bidirectional network quality screen passed: {repetition.get("bidirectional_network_quality_pass",False)}', + f'- Learned scalar MLP neuron search positive: {neuron.get("empirical_repeated_function_positive",False)}', + f'- Original 11 candidate run state: {status["state"]}; selected: {status.get("selected_candidate",[])}', + '- All model weights are retained on the server until the user explicitly requests deletion.',''] + if repetition.get('selected'): + c=repetition['selected'];text += ['## Existing learned module evidence','', + f'Role: {c["role"]}; layers {c["a"]} and {c["b"]}; each maps 2048-dimensional input to output.', + f'Uniform real-arithmetic relative-error bound, first-to-second: {c["a_to_b_uniform_bound"]:.12g}; reverse: {c["b_to_a_uniform_bound"]:.12g}.', + f'Maximum heldout directional output relative L2: {repetition.get("worst_heldout_relative_l2")}; minimum cosine: {repetition.get("worst_heldout_cosine")}.', + 'Same epsilon and nonzero gains: the common RMS denominator cancels. For any nonzero input x,', + '`||f_a(x)-f_b(x)|| / ||f_a(x)|| <= max_j |a_j-b_j|/|a_j|`; swap a/b for the reverse direction.', + 'Selection used only the tight all-input bound across 552 same-role pairs, before inspecting inputs.', + 'Real probes use four calibration and four heldout experiment-authored texts, 32 tokens each, and both source layers.', + 'These are learned, nonconstant gain vectors. The claim concerns RMSNorm modules; it does not establish attention/MLP-body duplication.',''] + for v in repetition.get('interventions',[]):text += [f'- Layer {v["target"]} uses {v["donor"]}: mean heldout NLL delta {v["mean_nll_delta"]:.12g}; sequence P95 delta {v["sequence_p95_nll_delta"]:.12g}; screen pass={v["passed_quality"]}.'] + text += ['', '## Negative results and separate algebraic result','', + 'The original whole-attention, whole-MLP and within-layer Q/K norm candidates did not pass their gates.', + 'The scalar neuron search excludes low-RMS/near-constant profiles and selects at most one pair without heldout feedback; consult its search summary for coverage.', + 'Q/K non-RoPE gain consolidation is a separately verified real-arithmetic identity, not evidence that two existing learned modules duplicate functions.', + 'Earlier local CPU timing records are preserved for provenance; performance is outside the current success criterion.','', + '## Limits and provenance','', + 'Original BF16 weights were decoded into streaming FP32 CPU operators; no training, scale fitting, R fitting or GPU.', + 'The numerical reference includes 22 independent official Torch comparisons. Early adapter errors and two resource-guard stops are preserved as historical logs.', + 'The persistent computation ledger includes a conservative 180-second reserve for early checks; no budget reset after that reserve.', + 'The text sample is tiny and short. Network NLL checks are not broad task-accuracy validation.',''] (root/'FUNCTIONAL_REPORT.md').write_text('\n'.join(text)) diff --git a/functional/storage.py b/functional/storage.py new file mode 100644 index 0000000..770de6d --- /dev/null +++ b/functional/storage.py @@ -0,0 +1,62 @@ +"""Measure an explicit two-component alias storage layout, not inference speed. + +Payloads remain on the server under weights/ and must not be committed or cleaned +without the user's explicit deletion request. Manifest/byte/hash evidence may be archived. +""" +import argparse +import hashlib +import json +from pathlib import Path +import numpy as np +from pilot.tensors import load_tensors,decode +from .run import write_json + + +def payload(t,path): + digest=hashlib.sha256() + with path.open('wb') as f: + for start in range(0,t.raw.size,262144): + b=t.raw[start:start+262144].tobytes();f.write(b);digest.update(b) + t.evict() + return {'file':path.name,'dtype':t.dtype,'shape':list(t.shape),'bytes':path.stat().st_size,'sha256':digest.hexdigest()} + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--root',type=Path,required=True);a=p.parse_args();root=a.root + selected=json.loads((root/'selection.json').read_text())['selected'] + if not selected: + write_json(root/'storage-evidence.json',{'measured':False,'reason':'No calibration candidate selected'});return + c=selected[0] + if c['kind']!='qk_norm': + write_json(root/'storage-evidence.json',{'measured':False,'reason':'Only two-gain alias layout implemented in this bounded pilot; larger-module savings remain theoretical'});return + tensors=load_tensors(root/'weights') + prefix=f'model.language_model.layers.{c["i"]}.self_attn.' + names=[prefix+'q_norm.weight',prefix+'k_norm.weight'] + # Original pair plus two alternative layouts; each is counted independently. + path=root/'component-layout'/'weights';path.mkdir(parents=True,exist_ok=True) + original={'format':'two_component_raw_v1','tensors':{}} + for short,name in zip(('q','k'),names):original['tensors'][name]=payload(tensors[name],path/f'{short}.bin') + original_bytes=json.dumps(original,separators=(',',':'),sort_keys=True).encode() + (path/'original-layout.json').write_bytes(original_bytes) + evidence=[] + for target,donor in ((names[0],names[1]),(names[1],names[0])): + entry=original['tensors'][donor] + layout={'format':'two_component_raw_v1','tensors':{donor:entry},'aliases':{target:donor}} + encoded=json.dumps(layout,separators=(',',':'),sort_keys=True).encode() + file=path/('share-'+('k' if donor==names[1] else 'q')+'.json');file.write_bytes(encoded) + t=tensors[donor] + raw=np.fromfile(path/entry['file'],dtype=t.raw.dtype) + reconstructed=decode(raw,t.dtype).reshape(t.shape) + np.testing.assert_array_equal(reconstructed,t.read().reshape(t.shape));t.evict() + before=sum(e['bytes'] for e in original['tensors'].values())+len(original_bytes) + after=entry['bytes']+len(encoded) + evidence.append({'target':target,'donor':donor,'original_payload_bytes':sum(e['bytes'] for e in original['tensors'].values()), + 'shared_payload_bytes':entry['bytes'],'original_descriptor_bytes':len(original_bytes), + 'shared_descriptor_bytes':len(encoded),'original_total_bytes':before,'shared_total_bytes':after, + 'net_saved_bytes':before-after,'shared_descriptor_sha256':hashlib.sha256(encoded).hexdigest(), + 'decoded_donor_exactly_matches_intervention_gain':True}) + write_json(root/'storage-evidence.json',{'measured':True,'candidate':c['id'],'layouts':evidence, + 'claim_limit':'Measured standalone component layout including descriptors, not an integrated compressed checkpoint, latency gain or full-model RSS reduction. Two sharing directions are alternatives and must not be added.'}) + + +if __name__=='__main__':main() diff --git a/functional/supervise.py b/functional/supervise.py index 45d1cab..dc20f8e 100644 --- a/functional/supervise.py +++ b/functional/supervise.py @@ -22,13 +22,32 @@ def main(): state.update(kwargs,supervisor_elapsed_seconds=time.monotonic()-start) write_json(root/'supervisor-status.json',state) def execute(module,args,timeout,log): - with (root/log).open('w') as out: - r=subprocess.run([sys.executable,'-B','-m',module,*args],stdout=out,stderr=subprocess.STDOUT,timeout=timeout) + ledger_path=root/'compute-budget-ledger.json' + ledger=json.loads(ledger_path.read_text()) if ledger_path.exists() else {'spent_seconds':0.,'calls':[]} + timeout=min(timeout,int(7200-ledger['spent_seconds'])) + if timeout<1:raise TimeoutError('Cumulative two-hour compute budget exhausted') + t=time.monotonic() + try: + with (root/log).open('w') as out: + r=subprocess.run([sys.executable,'-B','-m',module,*args],stdout=out,stderr=subprocess.STDOUT,timeout=timeout) + finally: + elapsed=time.monotonic()-t + ledger['spent_seconds']+=elapsed + ledger['calls'].append({'module':module,'seconds':elapsed}) + write_json(ledger_path,ledger) if r.returncode:raise RuntimeError(f'{module} failed: exit {r.returncode}, see {log}') status() try: - while not all(importlib.util.find_spec(name) for name in ('torch','tokenizers')): + while True: + ready=False + if all(importlib.util.find_spec(name) for name in ('torch','tokenizers')): + try: + r=subprocess.run([sys.executable,'-B','-c','import torch, tokenizers; torch.empty(1)'],capture_output=True,timeout=30) + ready=r.returncode==0 + except subprocess.TimeoutExpired:pass + if ready:break if time.monotonic()-start>3600:raise TimeoutError('Binary reference dependencies not ready within one hour') + status() time.sleep(15) compute_start=time.monotonic() status(state='running',phase='reference_check') @@ -47,15 +66,18 @@ def main(): except (OSError,ValueError,KeyError):ready=False if ready:break if time.monotonic()-start>a.download_wait_seconds:raise TimeoutError('Verified weight download not ready before wait deadline') + status() time.sleep(15) status(state='running',phase='real_weight_preflight') compute_start=time.monotonic() execute('functional.preflight',['--root',str(root)],1200,'preflight.log') preflight_seconds=time.monotonic()-compute_start - remaining=int(7200-reference_seconds-preflight_seconds-60) + remaining=int(7200-json.loads((root/'compute-budget-ledger.json').read_text())['spent_seconds']-60) if remaining<60:raise TimeoutError('No remaining bounded functional computation budget') status(phase='functional_analysis',preflight_seconds=preflight_seconds,remaining_seconds=remaining) execute('functional.run',['--root',str(root),'--seconds',str(remaining)],remaining+15,'functional-run.log') + status(phase='storage_accounting') + execute('functional.storage',['--root',str(root)],120,'storage-accounting.log') status(phase='report') execute('functional.report',['--root',str(root)],120,'functional-report.log') status(state='completed',phase='done') diff --git a/results/cpu-qwen35-2b/DELIVERY.md b/results/cpu-qwen35-2b/DELIVERY.md new file mode 100644 index 0000000..fdef8c3 --- /dev/null +++ b/results/cpu-qwen35-2b/DELIVERY.md @@ -0,0 +1,7 @@ +# Scientific delivery and retained caches + +All figure CSV/JSON source data, per-token NLL, protocols, reports, metadata and historical logs are included. +Three large reproducible intermediate activation caches remain on 8.211.154.134 and in the original full local archive; +`external-activation-cache.json` records exact locations, sizes and SHA256. No weight or cache was deleted. +The original full experiment manifest is `checksums-full-server.json`; the delivery-only manifest is +`checksums-functional.json`. No model checkpoint or tokenizer payload is in this Git delivery. diff --git a/results/cpu-qwen35-2b/FUNCTIONAL_REPORT.md b/results/cpu-qwen35-2b/FUNCTIONAL_REPORT.md new file mode 100644 index 0000000..5f5f327 --- /dev/null +++ b/results/cpu-qwen35-2b/FUNCTIONAL_REPORT.md @@ -0,0 +1,36 @@ +# CPU learned-function repetition pilot + +Primary question: do two distinct trained parts implement similar functions? Cost is not a success condition. +- Existing learned RMSNorm function positive: True +- Bidirectional network quality screen passed: True +- Learned scalar MLP neuron search positive: False +- Original 11 candidate run state: completed; selected: [] +- All model weights are retained on the server until the user explicitly requests deletion. + +## Existing learned module evidence + +Role: input_layernorm; layers 12 and 13; each maps 2048-dimensional input to output. +Uniform real-arithmetic relative-error bound, first-to-second: 0.101851851852; reverse: 0.113402061856. +Maximum heldout directional output relative L2: 0.04528510757179746; minimum cosine: 0.9994870299724158. +Same epsilon and nonzero gains: the common RMS denominator cancels. For any nonzero input x, +`||f_a(x)-f_b(x)|| / ||f_a(x)|| <= max_j |a_j-b_j|/|a_j|`; swap a/b for the reverse direction. +Selection used only the tight all-input bound across 552 same-role pairs, before inspecting inputs. +Real probes use four calibration and four heldout experiment-authored texts, 32 tokens each, and both source layers. +These are learned, nonconstant gain vectors. The claim concerns RMSNorm modules; it does not establish attention/MLP-body duplication. + +- Layer 12 uses 13: mean heldout NLL delta 3.25651368766e-05; sequence P95 delta 0.000984639618287; screen pass=True. +- Layer 13 uses 12: mean heldout NLL delta -0.000363972997404; sequence P95 delta 0.000709721155035; screen pass=True. + +## Negative results and separate algebraic result + +The original whole-attention, whole-MLP and within-layer Q/K norm candidates did not pass their gates. +The scalar neuron search excludes low-RMS/near-constant profiles and selects at most one pair without heldout feedback; consult its search summary for coverage. +Q/K non-RoPE gain consolidation is a separately verified real-arithmetic identity, not evidence that two existing learned modules duplicate functions. +Earlier local CPU timing records are preserved for provenance; performance is outside the current success criterion. + +## Limits and provenance + +Original BF16 weights were decoded into streaming FP32 CPU operators; no training, scale fitting, R fitting or GPU. +The numerical reference includes 22 independent official Torch comparisons. Early adapter errors and two resource-guard stops are preserved as historical logs. +The persistent computation ledger includes a conservative 180-second reserve for early checks; no budget reset after that reserve. +The text sample is tiny and short. Network NLL checks are not broad task-accuracy validation. diff --git a/results/cpu-qwen35-2b/archive-files.json b/results/cpu-qwen35-2b/archive-files.json new file mode 100644 index 0000000..eabd577 --- /dev/null +++ b/results/cpu-qwen35-2b/archive-files.json @@ -0,0 +1,88 @@ +[ + "DELIVERY.md", + "FUNCTIONAL_REPORT.md", + "attention-head-metrics.csv", + "baseline-heldout-token-nll.npy", + "calibration-metrics.csv", + "candidate-summary.json", + "checksums-full-server.json", + "compute-budget-ledger.json", + "download.log", + "experiment.json", + "external-activation-cache.json", + "figures/algebraic_gain_identity.pdf", + "figures/algebraic_gain_identity.png", + "figures/algebraic_gain_identity.svg", + "figures/candidate_function_errors.pdf", + "figures/candidate_function_errors.png", + "figures/candidate_function_errors.svg", + "figures/learned_norm_function_errors.pdf", + "figures/learned_norm_function_errors.png", + "figures/learned_norm_function_errors.svg", + "figures/learned_norm_network_substitution.pdf", + "figures/learned_norm_network_substitution.png", + "figures/learned_norm_network_substitution.svg", + "final-report.log", + "final-source-hashes.json", + "final-tests.txt", + "functional-code-hashes.json", + "functional-environment.json", + "functional-report.log", + "functional-run.log", + "functional-status.json", + "gain-factorization-k_to_q-token-nll.npy", + "gain-factorization-kernel-timing.csv", + "gain-factorization-optimized-summary.json", + "gain-factorization-optimized-timing.csv", + "gain-factorization-optimized.log", + "gain-factorization-protocol.json", + "gain-factorization-q_to_k-token-nll.npy", + "gain-factorization-score-metrics.csv", + "gain-factorization-summary.json", + "gain-factorization.log", + "install-torch-disk-tmp.log", + "install-torch.log", + "manifest.json", + "model_config.json", + "neuron-reuse-protocol.json", + "neuron-reuse-search-summary.json", + "neuron-reuse-selection.json", + "neuron-reuse-summary.json", + "neuron-reuse.log", + "norm-repetition-12-uses-13-token-nll.npy", + "norm-repetition-13-uses-12-token-nll.npy", + "norm-repetition-function-metrics.csv", + "norm-repetition-protocol.json", + "norm-repetition-selection.json", + "norm-repetition-summary.json", + "norm-repetition-uniform-bounds.csv", + "norm-repetition.log", + "preflight-first-attempt.log", + "preflight-second-attempt.json", + "preflight-second-attempt.log", + "preflight.json", + "preflight.log", + "reference-check-first-attempt.log", + "reference-check-second-attempt.log", + "reference-check.json", + "reference-check.log", + "retention-policy.json", + "samples-tokenized.json", + "selection.json", + "source_metadata.json", + "storage-accounting.log", + "storage-evidence.json", + "supervisor-error.txt", + "supervisor-first-attempt-error.txt", + "supervisor-first-attempt.json", + "supervisor-second-attempt.json", + "supervisor-status.json", + "supervisor-third-attempt.json", + "supervisor.log", + "tokenizer-download.log", + "tokenizers-wheel.log", + "unit-tests.txt", + "checksums-functional.json", + "audit-validation.json", + "archive-files.json" +] diff --git a/results/cpu-qwen35-2b/attention-head-metrics.csv b/results/cpu-qwen35-2b/attention-head-metrics.csv new file mode 100644 index 0000000..f342531 --- /dev/null +++ b/results/cpu-qwen35-2b/attention-head-metrics.csv @@ -0,0 +1,193 @@ +candidate,source,sample_id,head,first_key_mass_a,first_key_mass_b,js_without_first_key,without_first_key_valid_rows,js_mean,js_p95,js_without_first_query,top5_overlap +attn_3_7,3,cal-zh-1,0,0.178242027759552,0.44051653146743774,0.2887135446071625,31,0.2728434205055237,0.42193013429641724,0.2816448211669922,0.5875 +attn_3_7,3,cal-zh-1,1,0.14070242643356323,0.6567835807800293,0.154605433344841,31,0.273810476064682,0.45863786339759827,0.2826431095600128,0.5375 +attn_3_7,3,cal-zh-1,2,0.11500269174575806,0.4787790775299072,0.3218191862106323,31,0.35086748003959656,0.46183231472969055,0.3621857762336731,0.53125 +attn_3_7,3,cal-zh-1,3,0.17224811017513275,0.6523524522781372,0.22310931980609894,31,0.28077495098114014,0.43149834871292114,0.289832204580307,0.5 +attn_3_7,3,cal-zh-1,4,0.11534158885478973,0.6260660886764526,0.19559672474861145,31,0.2952086329460144,0.470927894115448,0.30473145842552185,0.53125 +attn_3_7,3,cal-zh-1,5,0.0896417498588562,0.34022626280784607,0.22164911031723022,31,0.2483729124069214,0.3841992914676666,0.256384938955307,0.54375 +attn_3_7,3,cal-zh-1,6,0.1247040405869484,0.7327346801757812,0.26632776856422424,31,0.37061089277267456,0.5524277091026306,0.38256609439849854,0.525 +attn_3_7,3,cal-zh-1,7,0.05083201080560684,0.44692301750183105,0.04695317894220352,31,0.20246444642543793,0.4956357181072235,0.20899559557437897,0.65625 +attn_3_7,3,cal-zh-2,0,0.14007353782653809,0.6036521196365356,0.2504415214061737,31,0.30694448947906494,0.4879894554615021,0.31684595346450806,0.59375 +attn_3_7,3,cal-zh-2,1,0.14963164925575256,0.7174584865570068,0.16050270199775696,31,0.2995006740093231,0.44737952947616577,0.3091619610786438,0.58125 +attn_3_7,3,cal-zh-2,2,0.1916198432445526,0.6128076314926147,0.24314163625240326,31,0.28848910331726074,0.42006126046180725,0.29779520630836487,0.63125 +attn_3_7,3,cal-zh-2,3,0.11550820618867874,0.6839271783828735,0.22851790487766266,31,0.3617430627346039,0.4926488697528839,0.373412162065506,0.43125 +attn_3_7,3,cal-zh-2,4,0.1432671993970871,0.714910089969635,0.16698074340820312,31,0.29421237111091614,0.44453173875808716,0.30370306968688965,0.55 +attn_3_7,3,cal-zh-2,5,0.15627557039260864,0.4676961600780487,0.22456194460391998,31,0.24842627346515656,0.35863032937049866,0.25644001364707947,0.53125 +attn_3_7,3,cal-zh-2,6,0.10968590527772903,0.8703562021255493,0.2677042484283447,31,0.44428783655166626,0.6032188534736633,0.45861977338790894,0.4625 +attn_3_7,3,cal-zh-2,7,0.07148394733667374,0.5658342838287354,0.050552818924188614,31,0.24003271758556366,0.5258023738861084,0.24777570366859436,0.6875 +attn_3_7,3,cal-en-1,0,0.11021165549755096,0.7443452477455139,0.2832939028739929,31,0.4321710467338562,0.5805379152297974,0.4461120665073395,0.5 +attn_3_7,3,cal-en-1,1,0.14157001674175262,0.6908999681472778,0.15555045008659363,31,0.3069734573364258,0.46220970153808594,0.3168758153915405,0.5562499999999999 +attn_3_7,3,cal-en-1,2,0.22632445394992828,0.6502443552017212,0.3039384186267853,31,0.33335912227630615,0.4760979115962982,0.34411266446113586,0.575 +attn_3_7,3,cal-en-1,3,0.1636783331632614,0.749056875705719,0.18588410317897797,31,0.31960076093673706,0.4827522933483124,0.3299104571342468,0.5062500000000001 +attn_3_7,3,cal-en-1,4,0.18975511193275452,0.5745540857315063,0.20487342774868011,31,0.2522231340408325,0.39599278569221497,0.26035937666893005,0.60625 +attn_3_7,3,cal-en-1,5,0.1436786651611328,0.45787984132766724,0.1883384883403778,31,0.2209610939025879,0.3852173388004303,0.2280888706445694,0.6187499999999999 +attn_3_7,3,cal-en-1,6,0.08422182500362396,0.8810427784919739,0.24220214784145355,31,0.4833376407623291,0.6262145638465881,0.49892911314964294,0.45625 +attn_3_7,3,cal-en-1,7,0.09002429246902466,0.49231916666030884,0.053437694907188416,31,0.19592277705669403,0.4695172905921936,0.20224282145500183,0.6624999999999999 +attn_3_7,3,cal-en-2,0,0.09620732069015503,0.7015095949172974,0.2738996148109436,31,0.3950675129890442,0.5772150158882141,0.40781161189079285,0.5874999999999999 +attn_3_7,3,cal-en-2,1,0.1168593019247055,0.7301980257034302,0.160212442278862,31,0.3232686221599579,0.4884706735610962,0.3336966037750244,0.55625 +attn_3_7,3,cal-en-2,2,0.21824826300144196,0.655203104019165,0.3244048058986664,31,0.3314599394798279,0.489634245634079,0.3421522378921509,0.49375 +attn_3_7,3,cal-en-2,3,0.15237370133399963,0.7099946737289429,0.253733366727829,31,0.34891438484191895,0.4875939190387726,0.3601696491241455,0.4 +attn_3_7,3,cal-en-2,4,0.20830751955509186,0.6707655191421509,0.16886863112449646,31,0.23844638466835022,0.41475459933280945,0.24613820016384125,0.58125 +attn_3_7,3,cal-en-2,5,0.20089492201805115,0.4360402226448059,0.20298565924167633,31,0.19701015949249268,0.3117577135562897,0.20336531102657318,0.5875 +attn_3_7,3,cal-en-2,6,0.08693217486143112,0.8322523832321167,0.28768372535705566,31,0.45854610204696655,0.604308545589447,0.47333794832229614,0.4625 +attn_3_7,3,cal-en-2,7,0.12079077959060669,0.5237122178077698,0.08786331117153168,31,0.1976630836725235,0.4211302399635315,0.2040393203496933,0.71875 +attn_3_7,7,cal-zh-1,0,0.08316324651241302,0.1214274913072586,0.22053609788417816,31,0.2072795033454895,0.32793501019477844,0.21396592259407043,0.5625 +attn_3_7,7,cal-zh-1,1,0.11647684127092361,0.187703475356102,0.09203154593706131,31,0.09238047897815704,0.16611215472221375,0.09536049515008926,0.66875 +attn_3_7,7,cal-zh-1,2,0.06550130248069763,0.07431766390800476,0.28803399205207825,31,0.2721514105796814,0.46315261721611023,0.28093045949935913,0.47500000000000003 +attn_3_7,7,cal-zh-1,3,0.10703553259372711,0.24631237983703613,0.1426287740468979,31,0.150299072265625,0.26700741052627563,0.1551474630832672,0.56875 +attn_3_7,7,cal-zh-1,4,0.04052526503801346,0.28515881299972534,0.11374201625585556,31,0.1819339096546173,0.2913167476654053,0.1878027319908142,0.5875 +attn_3_7,7,cal-zh-1,5,0.03951618820428848,0.12756675481796265,0.12323599308729172,31,0.13915526866912842,0.22263947129249573,0.14364413917064667,0.6062500000000001 +attn_3_7,7,cal-zh-1,6,0.09479819983243942,0.28205406665802,0.14449526369571686,31,0.16065017879009247,0.30267569422721863,0.16583245992660522,0.6375000000000001 +attn_3_7,7,cal-zh-1,7,0.031424712389707565,0.10597768425941467,0.029422910884022713,31,0.05383709818124771,0.10532202571630478,0.055573780089616776,0.60625 +attn_3_7,7,cal-zh-2,0,0.0902467742562294,0.11627861112356186,0.21221575140953064,31,0.19495421648025513,0.317206472158432,0.201243057847023,0.6187499999999999 +attn_3_7,7,cal-zh-2,1,0.11616441607475281,0.1248721182346344,0.0952492356300354,31,0.08693543076515198,0.16702036559581757,0.08973980695009232,0.5874999999999999 +attn_3_7,7,cal-zh-2,2,0.11578349769115448,0.08946777880191803,0.2738611102104187,31,0.2561575174331665,0.45070335268974304,0.26442068815231323,0.5 +attn_3_7,7,cal-zh-2,3,0.11586448550224304,0.16896863281726837,0.10842260718345642,31,0.10158580541610718,0.21354182064533234,0.1048627570271492,0.60625 +attn_3_7,7,cal-zh-2,4,0.044329218566417694,0.22534678876399994,0.15060655772686005,31,0.19093912839889526,0.3356643319129944,0.19709844887256622,0.61875 +attn_3_7,7,cal-zh-2,5,0.05062376335263252,0.12924723327159882,0.1047384962439537,31,0.11341066658496857,0.2176104635000229,0.1170690730214119,0.6312500000000001 +attn_3_7,7,cal-zh-2,6,0.08418147265911102,0.28032630681991577,0.1446688026189804,31,0.16730237007141113,0.24755442142486572,0.1726992279291153,0.5125 +attn_3_7,7,cal-zh-2,7,0.0315190926194191,0.11244469881057739,0.02086171880364418,31,0.04779163748025894,0.10416773706674576,0.04933330416679382,0.65 +attn_3_7,7,cal-en-1,0,0.08185911923646927,0.10868857800960541,0.24351894855499268,31,0.22597578167915344,0.35052549839019775,0.23326534032821655,0.66875 +attn_3_7,7,cal-en-1,1,0.12180840969085693,0.12996530532836914,0.1148008182644844,31,0.10937604308128357,0.1990041583776474,0.11290428787469864,0.6625 +attn_3_7,7,cal-en-1,2,0.12156520038843155,0.07304315268993378,0.32663044333457947,31,0.31218329071998596,0.4966602325439453,0.3222537338733673,0.4375 +attn_3_7,7,cal-en-1,3,0.09531049430370331,0.21274563670158386,0.13099102675914764,31,0.14007462561130524,0.2635233998298645,0.14459317922592163,0.5874999999999999 +attn_3_7,7,cal-en-1,4,0.051348961889743805,0.27256035804748535,0.17027397453784943,31,0.22669382393360138,0.33905521035194397,0.23400652408599854,0.59375 +attn_3_7,7,cal-en-1,5,0.05210518091917038,0.14343655109405518,0.11446496844291687,31,0.12723194062709808,0.23429512977600098,0.13133619725704193,0.64375 +attn_3_7,7,cal-en-1,6,0.09278014302253723,0.3040335178375244,0.20964911580085754,31,0.21833369135856628,0.34637004137039185,0.22537672519683838,0.53125 +attn_3_7,7,cal-en-1,7,0.031563661992549896,0.11319160461425781,0.02739104814827442,31,0.053969405591487885,0.1002146303653717,0.055710360407829285,0.5625000000000001 +attn_3_7,7,cal-en-2,0,0.07943743467330933,0.1426258534193039,0.21740850806236267,31,0.21001917123794556,0.35335251688957214,0.2167939990758896,0.58125 +attn_3_7,7,cal-en-2,1,0.13507506251335144,0.15443003177642822,0.10350806266069412,31,0.09826720505952835,0.18229186534881592,0.10143710672855377,0.575 +attn_3_7,7,cal-en-2,2,0.07290980964899063,0.08657881617546082,0.26718389987945557,31,0.259122759103775,0.4706645905971527,0.26748156547546387,0.45625 +attn_3_7,7,cal-en-2,3,0.06336543709039688,0.2253912389278412,0.11350395530462265,31,0.1445191204547882,0.30314192175865173,0.1491810381412506,0.5875 +attn_3_7,7,cal-en-2,4,0.04387465864419937,0.2312193661928177,0.14195290207862854,31,0.1880926638841629,0.3466520309448242,0.19416013360023499,0.5125 +attn_3_7,7,cal-en-2,5,0.05407806113362312,0.1308087259531021,0.15231285989284515,31,0.16046105325222015,0.3131849467754364,0.16563721001148224,0.5874999999999999 +attn_3_7,7,cal-en-2,6,0.10013270378112793,0.30412447452545166,0.17993809282779694,31,0.19388216733932495,0.34072187542915344,0.2001364380121231,0.5437500000000001 +attn_3_7,7,cal-en-2,7,0.03161787986755371,0.14472994208335876,0.04679951071739197,31,0.0830649882555008,0.13866016268730164,0.08574451506137848,0.65625 +attn_11_15,11,cal-zh-1,0,0.2780076861381531,0.40727436542510986,0.08935041725635529,31,0.08769044280052185,0.1605687141418457,0.09051916748285294,0.6937500000000001 +attn_11_15,11,cal-zh-1,1,0.599311351776123,0.1917644888162613,0.1712544858455658,31,0.22863143682479858,0.39283493161201477,0.23600666224956512,0.5750000000000001 +attn_11_15,11,cal-zh-1,2,0.15545204281806946,0.5101379156112671,0.08800674974918365,31,0.15655069053173065,0.3642641007900238,0.16160069406032562,0.73125 +attn_11_15,11,cal-zh-1,3,0.11032958328723907,0.4199199676513672,0.08535198122262955,31,0.14290741086006165,0.27922654151916504,0.14751732349395752,0.7 +attn_11_15,11,cal-zh-1,4,0.18725907802581787,0.3965998888015747,0.12378748506307602,31,0.1280820369720459,0.24588972330093384,0.13221368193626404,0.6937500000000001 +attn_11_15,11,cal-zh-1,5,0.3307006359100342,0.43053850531578064,0.12539583444595337,31,0.1220257431268692,0.27262142300605774,0.1259620636701584,0.6187499999999999 +attn_11_15,11,cal-zh-1,6,0.17290356755256653,0.4159870147705078,0.10268668830394745,31,0.12616759538650513,0.27286267280578613,0.13023751974105835,0.625 +attn_11_15,11,cal-zh-1,7,0.12546084821224213,0.4914926290512085,0.11725502461194992,31,0.17813995480537415,0.28658801317214966,0.18388642370700836,0.6625000000000001 +attn_11_15,11,cal-zh-2,0,0.2187591940164566,0.42793723940849304,0.09548557549715042,31,0.12088388949632645,0.2345586121082306,0.12478335946798325,0.6875 +attn_11_15,11,cal-zh-2,1,0.5546900033950806,0.1175224781036377,0.16409580409526825,31,0.25557559728622437,0.37492382526397705,0.26381993293762207,0.6125 +attn_11_15,11,cal-zh-2,2,0.11856245994567871,0.44309669733047485,0.08432265371084213,31,0.1634930670261383,0.37660637497901917,0.16876700520515442,0.65 +attn_11_15,11,cal-zh-2,3,0.09019850194454193,0.3149072527885437,0.09793759882450104,31,0.1334252804517746,0.24160735309123993,0.13772933185100555,0.71875 +attn_11_15,11,cal-zh-2,4,0.09969134628772736,0.20464956760406494,0.10986322164535522,31,0.11441972851753235,0.2605915665626526,0.11811067909002304,0.7 +attn_11_15,11,cal-zh-2,5,0.16705867648124695,0.412482887506485,0.20107370615005493,31,0.21316100656986237,0.44814038276672363,0.22003716230392456,0.6000000000000001 +attn_11_15,11,cal-zh-2,6,0.126181960105896,0.38109123706817627,0.10754827409982681,31,0.14080098271369934,0.2554462254047394,0.14534294605255127,0.6687500000000001 +attn_11_15,11,cal-zh-2,7,0.11085975170135498,0.5181387662887573,0.10885247588157654,31,0.2060571014881134,0.35480910539627075,0.2127041071653366,0.66875 +attn_11_15,11,cal-en-1,0,0.2882137894630432,0.45660895109176636,0.07201986759901047,31,0.08352888375520706,0.1487027406692505,0.08622336387634277,0.73125 +attn_11_15,11,cal-en-1,1,0.597124457359314,0.13483837246894836,0.22424918413162231,31,0.29736971855163574,0.529407799243927,0.3069622814655304,0.51875 +attn_11_15,11,cal-en-1,2,0.17265087366104126,0.4521681070327759,0.08010748028755188,31,0.13888895511627197,0.29661378264427185,0.14336924254894257,0.7375 +attn_11_15,11,cal-en-1,3,0.10834433138370514,0.319663405418396,0.08455760031938553,31,0.11557236313819885,0.24554768204689026,0.11930052191019058,0.84375 +attn_11_15,11,cal-en-1,4,0.157099187374115,0.3456929326057434,0.10397545993328094,31,0.11958309262990952,0.20836150646209717,0.12344060838222504,0.73125 +attn_11_15,11,cal-en-1,5,0.30003029108047485,0.3683816194534302,0.11273742467164993,31,0.11081759631633759,0.26781079173088074,0.11439235508441925,0.6875 +attn_11_15,11,cal-en-1,6,0.16862526535987854,0.5013703107833862,0.12122618407011032,31,0.1663668006658554,0.29310786724090576,0.17173348367214203,0.65 +attn_11_15,11,cal-en-1,7,0.14973583817481995,0.5537562966346741,0.1512605994939804,31,0.22106251120567322,0.3912945091724396,0.22819358110427856,0.64375 +attn_11_15,11,cal-en-2,0,0.3351830840110779,0.4993361234664917,0.08562158793210983,31,0.08981436491012573,0.19977226853370667,0.09271162003278732,0.675 +attn_11_15,11,cal-en-2,1,0.5792163610458374,0.1499037742614746,0.1789509803056717,31,0.2536986768245697,0.41500288248062134,0.2618825435638428,0.55 +attn_11_15,11,cal-en-2,2,0.20357520878314972,0.4823607802391052,0.11572320759296417,31,0.16091257333755493,0.35024091601371765,0.1661033034324646,0.6000000000000001 +attn_11_15,11,cal-en-2,3,0.11477383971214294,0.4060356318950653,0.08803554624319077,31,0.14013110101222992,0.2660136818885803,0.14465147256851196,0.75 +attn_11_15,11,cal-en-2,4,0.1895177811384201,0.2564787268638611,0.1033802479505539,31,0.10677468031644821,0.19931447505950928,0.11021901667118073,0.7125 +attn_11_15,11,cal-en-2,5,0.2725520133972168,0.3527078926563263,0.1301337331533432,31,0.12496069073677063,0.22729209065437317,0.12899169325828552,0.6312500000000001 +attn_11_15,11,cal-en-2,6,0.17815515398979187,0.4918685555458069,0.08680415898561478,31,0.1395310014486313,0.22975514829158783,0.14403200149536133,0.68125 +attn_11_15,11,cal-en-2,7,0.1471988707780838,0.4305167496204376,0.15007153153419495,31,0.1933930218219757,0.31820762157440186,0.1996314972639084,0.60625 +attn_11_15,15,cal-zh-1,0,0.20194272696971893,0.35520243644714355,0.1205381229519844,31,0.13211002945899963,0.2777846157550812,0.1363716572523117,0.63125 +attn_11_15,15,cal-zh-1,1,0.23890593647956848,0.12377866357564926,0.21396537125110626,31,0.21463359892368317,0.41781342029571533,0.22155724465847015,0.6062500000000001 +attn_11_15,15,cal-zh-1,2,0.13280686736106873,0.27719253301620483,0.1377590000629425,31,0.14551271498203278,0.2994697093963623,0.15020668506622314,0.65 +attn_11_15,15,cal-zh-1,3,0.04135940596461296,0.23285867273807526,0.21063239872455597,31,0.24926505982875824,0.45159438252449036,0.2573058605194092,0.6937500000000001 +attn_11_15,15,cal-zh-1,4,0.07648462802171707,0.4026046395301819,0.1620333045721054,31,0.23594452440738678,0.4158128798007965,0.24355560541152954,0.6500000000000001 +attn_11_15,15,cal-zh-1,5,0.14696139097213745,0.41105949878692627,0.1549629122018814,31,0.18883343040943146,0.3439426124095917,0.19492481648921967,0.6187499999999999 +attn_11_15,15,cal-zh-1,6,0.0764666199684143,0.34140151739120483,0.11151057481765747,31,0.16509875655174255,0.31560462713241577,0.17042450606822968,0.6625 +attn_11_15,15,cal-zh-1,7,0.10250869393348694,0.5306729078292847,0.16751603782176971,31,0.25549793243408203,0.3858420252799988,0.26373982429504395,0.6062500000000001 +attn_11_15,15,cal-zh-2,0,0.22696512937545776,0.35936564207077026,0.14069660007953644,31,0.13378489017486572,0.28451812267303467,0.1381005346775055,0.65 +attn_11_15,15,cal-zh-2,1,0.25547248125076294,0.10696703940629959,0.23399728536605835,31,0.24166268110275269,0.39466142654418945,0.24945826828479767,0.5875 +attn_11_15,15,cal-zh-2,2,0.17822568118572235,0.2864110469818115,0.08877820521593094,31,0.10718775540590286,0.2511947453022003,0.11064542829990387,0.6937500000000001 +attn_11_15,15,cal-zh-2,3,0.04604611545801163,0.23604938387870789,0.22704336047172546,31,0.2641073167324066,0.4154779016971588,0.2726269066333771,0.70625 +attn_11_15,15,cal-zh-2,4,0.08757959306240082,0.2918083965778351,0.22551555931568146,31,0.24939756095409393,0.48551467061042786,0.2574426531791687,0.6000000000000001 +attn_11_15,15,cal-zh-2,5,0.11609973013401031,0.3603805601596832,0.21242640912532806,31,0.23965227603912354,0.4984361231327057,0.2473829984664917,0.51875 +attn_11_15,15,cal-zh-2,6,0.0702231377363205,0.29952526092529297,0.12570251524448395,31,0.17031171917915344,0.32249733805656433,0.17580564320087433,0.6125 +attn_11_15,15,cal-zh-2,7,0.0856853500008583,0.4777143895626068,0.1792273223400116,31,0.27432966232299805,0.47331610321998596,0.28317901492118835,0.65625 +attn_11_15,15,cal-en-1,0,0.2137582153081894,0.36318275332450867,0.121327243745327,31,0.12573851644992828,0.2549639940261841,0.12979458272457123,0.64375 +attn_11_15,15,cal-en-1,1,0.31107524037361145,0.1114300861954689,0.24769999086856842,31,0.28352850675582886,0.4685184955596924,0.29267460107803345,0.53125 +attn_11_15,15,cal-en-1,2,0.17990511655807495,0.29312068223953247,0.12414757162332535,31,0.12930452823638916,0.3116541802883148,0.1334756314754486,0.74375 +attn_11_15,15,cal-en-1,3,0.048217516392469406,0.23240914940834045,0.20335303246974945,31,0.2404388189315796,0.3818458914756775,0.2481948882341385,0.70625 +attn_11_15,15,cal-en-1,4,0.10281141847372055,0.38790467381477356,0.18024703860282898,31,0.22299107909202576,0.4459393620491028,0.23018434643745422,0.70625 +attn_11_15,15,cal-en-1,5,0.15091386437416077,0.3693487346172333,0.1916365921497345,31,0.21596358716487885,0.39266589283943176,0.2229301631450653,0.53125 +attn_11_15,15,cal-en-1,6,0.0790158361196518,0.32175618410110474,0.11456245183944702,31,0.16404178738594055,0.30913954973220825,0.16933345794677734,0.6875 +attn_11_15,15,cal-en-1,7,0.10605430603027344,0.5771000385284424,0.18373095989227295,31,0.28234609961509705,0.4291541278362274,0.2914540469646454,0.625 +attn_11_15,15,cal-en-2,0,0.251964807510376,0.31455427408218384,0.10559824854135513,31,0.11457027494907379,0.24910703301429749,0.11826609075069427,0.675 +attn_11_15,15,cal-en-2,1,0.31838059425354004,0.11868949234485626,0.257511168718338,31,0.2719646394252777,0.44276586174964905,0.2807376980781555,0.5687500000000001 +attn_11_15,15,cal-en-2,2,0.26772984862327576,0.33754318952560425,0.0924711525440216,31,0.09108234941959381,0.191604882478714,0.09402050077915192,0.7375 +attn_11_15,15,cal-en-2,3,0.06395735591650009,0.2933264374732971,0.20108558237552643,31,0.2424471080303192,0.4563605785369873,0.25026798248291016,0.66875 +attn_11_15,15,cal-en-2,4,0.08209535479545593,0.3278740644454956,0.1982748657464981,31,0.24514394998550415,0.3975651264190674,0.2530518174171448,0.56875 +attn_11_15,15,cal-en-2,5,0.09166160225868225,0.44504809379577637,0.17847460508346558,31,0.2476060837507248,0.3910382390022278,0.2555933892726898,0.4875 +attn_11_15,15,cal-en-2,6,0.07513932138681412,0.45416805148124695,0.12279381603002548,31,0.22479453682899475,0.34578394889831543,0.2320459932088852,0.59375 +attn_11_15,15,cal-en-2,7,0.1007680892944336,0.5731154084205627,0.18980540335178375,31,0.3043324649333954,0.41584962606430054,0.3141496479511261,0.5375000000000001 +attn_19_23,19,cal-zh-1,0,0.0955502837896347,0.03435931354761124,0.08661527186632156,31,0.10083474218845367,0.1792067289352417,0.10408748686313629,0.73125 +attn_19_23,19,cal-zh-1,1,0.10103033483028412,0.04235740005970001,0.16347354650497437,31,0.16801373660564423,0.37647515535354614,0.17343351244926453,0.6125 +attn_19_23,19,cal-zh-1,2,0.047133591026067734,0.03135885298252106,0.47210854291915894,31,0.46042412519454956,0.6502387523651123,0.47527655959129333,0.5375000000000001 +attn_19_23,19,cal-zh-1,3,0.07069262862205505,0.06008598208427429,0.12148955464363098,31,0.11885681003332138,0.26471832394599915,0.12269090116024017,0.6625000000000001 +attn_19_23,19,cal-zh-1,4,0.10007724165916443,0.044495031237602234,0.16073106229305267,31,0.16553831100463867,0.3016175925731659,0.17087827622890472,0.68125 +attn_19_23,19,cal-zh-1,5,0.06431633979082108,0.040679484605789185,0.0816011056303978,31,0.08355634659528732,0.1771341860294342,0.08625171333551407,0.8 +attn_19_23,19,cal-zh-1,6,0.08145896345376968,0.03135719522833824,0.4502938687801361,31,0.44716787338256836,0.6495819091796875,0.4615926444530487,0.5 +attn_19_23,19,cal-zh-1,7,0.08670078217983246,0.03888973593711853,0.09126521646976471,31,0.09830940514802933,0.18466481566429138,0.10148067027330399,0.70625 +attn_19_23,19,cal-zh-2,0,0.06336566060781479,0.03736908361315727,0.07764910906553268,31,0.08064413070678711,0.16660116612911224,0.08324555307626724,0.8187500000000001 +attn_19_23,19,cal-zh-2,1,0.0888693630695343,0.06530671566724777,0.1942276507616043,31,0.18916305899620056,0.33451300859451294,0.19526511430740356,0.6125 +attn_19_23,19,cal-zh-2,2,0.07010967284440994,0.031316906213760376,0.3875632584095001,31,0.3861002027988434,0.6248269081115723,0.3985550105571747,0.65 +attn_19_23,19,cal-zh-2,3,0.08096092939376831,0.08616353571414948,0.08690906316041946,31,0.08501926809549332,0.19463855028152466,0.08776183426380157,0.7937500000000001 +attn_19_23,19,cal-zh-2,4,0.0936945378780365,0.04400797560811043,0.11036926507949829,31,0.11584575474262238,0.2122059315443039,0.11958272755146027,0.8187500000000001 +attn_19_23,19,cal-zh-2,5,0.056567154824733734,0.03972743824124336,0.06345413625240326,31,0.06394530087709427,0.16273385286331177,0.066008061170578,0.7937500000000001 +attn_19_23,19,cal-zh-2,6,0.08575102686882019,0.031342219561338425,0.4025454819202423,31,0.4032740592956543,0.5980108976364136,0.4162829518318176,0.60625 +attn_19_23,19,cal-zh-2,7,0.10350999981164932,0.0646558329463005,0.10814103484153748,31,0.10938012599945068,0.23185187578201294,0.11290851980447769,0.7375 +attn_19_23,19,cal-en-1,0,0.22517549991607666,0.09088313579559326,0.11986515671014786,31,0.1366778463125229,0.2391858845949173,0.14108680188655853,0.74375 +attn_19_23,19,cal-en-1,1,0.23973168432712555,0.11891130357980728,0.17766058444976807,31,0.16800963878631592,0.2676515281200409,0.17342931032180786,0.66875 +attn_19_23,19,cal-en-1,2,0.21452879905700684,0.03307320922613144,0.3807314932346344,31,0.4102427363395691,0.5871645212173462,0.42347636818885803,0.66875 +attn_19_23,19,cal-en-1,3,0.21709948778152466,0.14377164840698242,0.0770971029996872,31,0.08144749701023102,0.15173088014125824,0.08407483249902725,0.8125 +attn_19_23,19,cal-en-1,4,0.23791193962097168,0.19146007299423218,0.12041598558425903,31,0.11442764848470688,0.22197961807250977,0.11811887472867966,0.66875 +attn_19_23,19,cal-en-1,5,0.2485853135585785,0.10372771322727203,0.08068431913852692,31,0.11313603073358536,0.23292472958564758,0.11678558588027954,0.7562500000000001 +attn_19_23,19,cal-en-1,6,0.31094634532928467,0.031405214220285416,0.39337676763534546,31,0.45084744691848755,0.6603637933731079,0.4653908908367157,0.55 +attn_19_23,19,cal-en-1,7,0.2927525043487549,0.15012584626674652,0.12347250431776047,31,0.12942291796207428,0.2467067539691925,0.13359786570072174,0.68125 +attn_19_23,19,cal-en-2,0,0.19307208061218262,0.055295493453741074,0.1307787448167801,31,0.15591834485530853,0.3169764280319214,0.1609479784965515,0.5875 +attn_19_23,19,cal-en-2,1,0.1491451859474182,0.10034040361642838,0.14188656210899353,31,0.1398725062608719,0.2532970607280731,0.14438451826572418,0.59375 +attn_19_23,19,cal-en-2,2,0.11011949181556702,0.033411312848329544,0.4344772696495056,31,0.4410479664802551,0.6305621266365051,0.4552752673625946,0.5375 +attn_19_23,19,cal-en-2,3,0.11554233729839325,0.08585710823535919,0.1385604739189148,31,0.13558831810951233,0.3369371294975281,0.13996215164661407,0.5874999999999999 +attn_19_23,19,cal-en-2,4,0.1721733808517456,0.10996092110872269,0.1335446536540985,31,0.13328826427459717,0.24826908111572266,0.13758789002895355,0.625 +attn_19_23,19,cal-en-2,5,0.18817278742790222,0.06915841996669769,0.11790769547224045,31,0.13643309473991394,0.2266169786453247,0.14083418250083923,0.65625 +attn_19_23,19,cal-en-2,6,0.2252667248249054,0.03137722611427307,0.45010486245155334,31,0.4878306984901428,0.6629999876022339,0.503567099571228,0.49375 +attn_19_23,19,cal-en-2,7,0.19858212769031525,0.07953452318906784,0.1386381983757019,31,0.15347915887832642,0.2583900988101959,0.15843011438846588,0.5687500000000001 +attn_19_23,23,cal-zh-1,0,0.18854272365570068,0.06906979531049728,0.08094117045402527,31,0.10190774500370026,0.19865523278713226,0.10519509017467499,0.61875 +attn_19_23,23,cal-zh-1,1,0.12637057900428772,0.094294473528862,0.11472687125205994,31,0.11000899970531464,0.20533926784992218,0.11355767399072647,0.60625 +attn_19_23,23,cal-zh-1,2,0.06566040217876434,0.0320066399872303,0.3936012387275696,31,0.3894338607788086,0.6095475554466248,0.40199628472328186,0.53125 +attn_19_23,23,cal-zh-1,3,0.10236738622188568,0.07628713548183441,0.0909285917878151,31,0.09045256674289703,0.16597077250480652,0.09337039291858673,0.65625 +attn_19_23,23,cal-zh-1,4,0.11772166937589645,0.09994609653949738,0.11158378422260284,31,0.1082884818315506,0.2333190143108368,0.11178164929151535,0.6000000000000001 +attn_19_23,23,cal-zh-1,5,0.1445631980895996,0.05731264501810074,0.06436286121606827,31,0.07913714647293091,0.15170255303382874,0.08168993890285492,0.6625000000000001 +attn_19_23,23,cal-zh-1,6,0.13692563772201538,0.03156186267733574,0.42265841364860535,31,0.43705910444259644,0.6045969128608704,0.45115774869918823,0.5249999999999999 +attn_19_23,23,cal-zh-1,7,0.17913174629211426,0.0774894654750824,0.055066999047994614,31,0.07003086805343628,0.11456935852766037,0.07228992879390717,0.6875 +attn_19_23,23,cal-zh-2,0,0.08711955696344376,0.08616629242897034,0.09776511043310165,31,0.09617017209529877,0.2418135702610016,0.09927243739366531,0.7125 +attn_19_23,23,cal-zh-2,1,0.1001269742846489,0.1142689436674118,0.11429562419652939,31,0.11118914932012558,0.19028690457344055,0.1147758960723877,0.6625000000000001 +attn_19_23,23,cal-zh-2,2,0.13165870308876038,0.03296923264861107,0.32159483432769775,31,0.34172311425209045,0.5507174134254456,0.35274645686149597,0.675 +attn_19_23,23,cal-zh-2,3,0.10557965934276581,0.08546337485313416,0.10869138687849045,31,0.10796000063419342,0.267814040184021,0.11144257336854935,0.71875 +attn_19_23,23,cal-zh-2,4,0.0753588005900383,0.0625741258263588,0.09596671164035797,31,0.09504459798336029,0.18062597513198853,0.09811054915189743,0.6937500000000001 +attn_19_23,23,cal-zh-2,5,0.0798945426940918,0.0568334236741066,0.07381810247898102,31,0.0762210339307785,0.13966575264930725,0.07867977768182755,0.74375 +attn_19_23,23,cal-zh-2,6,0.0759878009557724,0.031536251306533813,0.39428046345710754,31,0.3959207534790039,0.5929224491119385,0.408692330121994,0.6375 +attn_19_23,23,cal-zh-2,7,0.11138643324375153,0.07136214524507523,0.07186198234558105,31,0.07652410864830017,0.15722090005874634,0.07899262756109238,0.7312500000000001 +attn_19_23,23,cal-en-1,0,0.12444712221622467,0.0752042829990387,0.10921256989240646,31,0.10872898995876312,0.22416618466377258,0.11223636567592621,0.6875 +attn_19_23,23,cal-en-1,1,0.10719993710517883,0.08359251916408539,0.12698784470558167,31,0.12113931775093079,0.22020384669303894,0.12504702806472778,0.7000000000000001 +attn_19_23,23,cal-en-1,2,0.13445816934108734,0.03345245122909546,0.3665089011192322,31,0.3763067126274109,0.5767470002174377,0.3884456157684326,0.65625 +attn_19_23,23,cal-en-1,3,0.10536500066518784,0.07050738483667374,0.07684175670146942,31,0.07960161566734314,0.14911630749702454,0.08216940611600876,0.78125 +attn_19_23,23,cal-en-1,4,0.0911213681101799,0.17202866077423096,0.10298387706279755,31,0.10929879546165466,0.20484577119350433,0.11282456666231155,0.61875 +attn_19_23,23,cal-en-1,5,0.18703660368919373,0.12409132719039917,0.09463418275117874,31,0.09024524688720703,0.15500988066196442,0.09315639734268188,0.70625 +attn_19_23,23,cal-en-1,6,0.13999314606189728,0.03152035176753998,0.4262007474899292,31,0.43630746006965637,0.6232555508613586,0.450381875038147,0.5187499999999999 +attn_19_23,23,cal-en-1,7,0.11322036385536194,0.10936357825994492,0.07323051989078522,31,0.07213389873504639,0.1506829559803009,0.07446079701185226,0.6125 +attn_19_23,23,cal-en-2,0,0.11863207072019577,0.13078393042087555,0.09141960740089417,31,0.08733218908309937,0.1577986180782318,0.09014936536550522,0.59375 +attn_19_23,23,cal-en-2,1,0.07288858294487,0.1372600495815277,0.1089932844042778,31,0.11363835632801056,0.1698836386203766,0.11730410903692245,0.50625 +attn_19_23,23,cal-en-2,2,0.07288709282875061,0.04088134318590164,0.376287043094635,31,0.3685654401779175,0.5480253100395203,0.3804546594619751,0.5375 +attn_19_23,23,cal-en-2,3,0.06728185713291168,0.07526300847530365,0.09231049567461014,31,0.08894366025924683,0.15198129415512085,0.09181280434131622,0.6187499999999999 +attn_19_23,23,cal-en-2,4,0.09862713515758514,0.12817975878715515,0.09404788166284561,31,0.08950259536504745,0.16771778464317322,0.09238976985216141,0.5562499999999999 +attn_19_23,23,cal-en-2,5,0.07161959260702133,0.0855005532503128,0.10532733052968979,31,0.10144606977701187,0.1908321976661682,0.10471852868795395,0.5625 +attn_19_23,23,cal-en-2,6,0.08469876646995544,0.03168217092752457,0.4412229359149933,31,0.43726012110710144,0.6215424537658691,0.45136526226997375,0.5437500000000001 +attn_19_23,23,cal-en-2,7,0.10539951920509338,0.08276306837797165,0.07327506691217422,31,0.0738329142332077,0.13249149918556213,0.07621461898088455,0.63125 diff --git a/results/cpu-qwen35-2b/audit-validation.json b/results/cpu-qwen35-2b/audit-validation.json new file mode 100644 index 0000000..752b745 --- /dev/null +++ b/results/cpu-qwen35-2b/audit-validation.json @@ -0,0 +1,12 @@ +{ + "passed": true, + "validated_unix": 1794204667.0190518, + "checksummed_files": 83, + "proof_recomputed_from_retained_weights": true, + "heldout_nll_recomputed_from_saved_arrays": true, + "weights_present_and_retained": true, + "archive_excludes_weights_and_tokenizer": true, + "delivery_excludes_external_activation_caches": true, + "full_experiment_checksums": "checksums-full-server.json", + "figure_source_tables_and_token_nll_complete": true +} diff --git a/results/cpu-qwen35-2b/baseline-heldout-token-nll.npy b/results/cpu-qwen35-2b/baseline-heldout-token-nll.npy new file mode 100644 index 0000000000000000000000000000000000000000..f4f1c38436cf800682fcfdc51384fa7f2b9673b1 GIT binary patch literal 1120 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 z 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

q!%01mcDBH+0vi06v&$^-UzB1U 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 literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/figures/algebraic_gain_identity.svg b/results/cpu-qwen35-2b/figures/algebraic_gain_identity.svg new file mode 100644 index 0000000..c39d01e --- /dev/null +++ b/results/cpu-qwen35-2b/figures/algebraic_gain_identity.svg @@ -0,0 +1,581 @@ + + + + + + + + 2026-11-09T14:11:02.311213 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + 7 + + + + + + + + + + 11 + + + + + + + + + + 15 + + + + + + + + + + 19 + + + + + + + + + + 23 + + + + Full-attention layer index + + + + + + + + + + + + + + 2.00 + + + + + + + + + + 2.25 + + + + + + + + + + 2.50 + + + + + + + + + + 2.75 + + + + + + + + + + 3.00 + + + + + + + + + + 3.25 + + + + + + + + + + 3.50 + + + + + + + + + + 3.75 + + + + Maximum absolute score error + + + 1e−6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + q_to_k + + + + + + + + + k_to_q + + + + + + + + + + + + + + + + 3 + + + + + + + + + + 7 + + + + + + + + + + 11 + + + + + + + + + + 15 + + + + + + + + + + 19 + + + + + + + + + + 23 + + + + Full-attention layer index + + + + + + + + + + + 5.0 + + + + + + + + + + 5.5 + + + + + + + + + + 6.0 + + + + + + + + + + 6.5 + + + + + + + + + + 7.0 + + + + + + + + + + 7.5 + + + + + + + + + + 8.0 + + + + Maximum absolute probability error + + + 1e−7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + q_to_k + + + + + + + + + k_to_q + + + + + Supplement: algebraic reparameterization, separate from learned-function repetition + + + + + + + + + + + diff --git a/results/cpu-qwen35-2b/figures/candidate_function_errors.pdf b/results/cpu-qwen35-2b/figures/candidate_function_errors.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88ae276a9732cb501381a9eb4dce971d040ce461 GIT binary patch literal 17979 zcmd74WmH_-(k`3?3mV*=;Mz2?ect=t zU*Gte(PPb3YsynKXRk4|x$ zJ*x`{uNH$cV}D0~iIYonF2xe!@NtvWt;Br78|s4ZKGA#wv&G$u)+?r6yetv<5HXE5 zy)N=ydbi&IUpmz6DkVXTAy`Qkz5q6jy}*)dKO(hZj%2>B>}*HRBf*vlF5wWBE`ky^ zR}i)Uiy$_)Nx_qWpm>EO}xq(fpekW^C=SCQG_(?@RjeJ6W2cLze zMGB1=i9f3^AI&qbp|UW;r3L;F<`Ry+E^vlQcozab(qI^Fjz7xF4Sx8}S5V`N;18^x zaWj6n;H?=ct~OMRHDVGIm;2&riv)UqXR>w7qqk+^@?|oU)~US zR2lSM0-KS-BX*5+NW9P!)`DNYgb)Z42}MOVXfL=e#mIJwkoZ!3g*O~(5YPT}Wj%=? zD)C@%%TlQ4%aJw))g5X6lV*cXL~(w$o7tVK?j4n5s32;!kE}kps1Wl zT<6LZZ_guIIjHq`q3Ag?$%{M@Ysj@`|eZxAyMZQG7~;b4P~KjRE6G< z1O!1i*0Sv&4g<=>uUv_6SUScgO}JH|k>=jZwScodu${;Y4V!yUlBgq^<*e-N-Cy@= zEo|M+SE%yFg+)I%Wn*c6IXJ!-o;)AQHr!6OMe6Hn>|U0W?-a@D&Eg&RBZE?mA-Zy) z^0)n3v+0$b{2ZYM%@DbaVMlBauLx4VSWZsO4Yh00V?nS?V~6MGnF{~P9I_(FgfRZ! z#3+Bnuk-(^DiR}6YXH2d_ zVRQ(g&;2eoH%#&%m-wkc7&|I0M{HNXg{!swc}w^6HcsbYRpmOFI4a{s4_7#wU_L?* zPC>sE%=kBn%drpz&rM&>$%U?~7QsSg%+#UNEnKtgg+>Tf2f8iQ=vzj}2UV9oovJ6c z)secxMMs|b^l|UTr~<-q2Qbtj@~j|Dr-)%1Ca_Q$OAG&T;$7dzP$lGbr40}iQnc%57|O#KhvVy=^Z^0JG`OF zT34vTrXH4ql?xVP!k#XLY73!WloA*oeSpl~Z%^o3CEhRY(8n(%iKpw2}G z&SP$7r(2YOMsdRaLT+YM2~iYFAoc7L;axS`Hn;JJjep;j)Z84C!NS;XkhOLEEmSE6 zP1gvk{n&OUFx=RUYXMpV%|Fzq&1@MR0`08H>Vv1rg@uuHj#TMYs&7+g7mwD^vZcZ% zeabbI2SY!m|De9rgacCIR?psx5f%kDmNxI8{ zoh~ub8T~h~dr^}mG^IGt$WlFV%G?S54=R+-Jxo?ty;fu6$LK}wgW z(<;bkz#M8fM-^sycwr*>^;!k9+KaC zV6)m_@#6Z4VLsi_?uEx4v!>KJGGc}Utqg%8;9kB++dpR_5{k3{O_ExPTOVvSGC6<& z8)ddtrQy=cU}QrcabbutU5#%{%xTfeeay=}zp$>s4qZB@p#2YC(hf#z!S zF=;-J9_57HNMx1C%Leh1XKQ44zOq@IJCMH#O2KN7@Tc4Q;b>iF3NObC?-jP^F_Xrr zT_;}K@^U@9(1?ZAV5ZUdWQI4N(CNq%)!N2d-H_Oel`HW%E43Wd_UmTw&z;Mk+rr=5 zoY$=nBO@d5AA7~$`=eK(I-%x2Wv?5=f8Qek2mwH576wB4KetTm02Ux;X}+1 z$p;`5)+g)?D#SwaPC9?vcFsCFCM(ltBxr~qLGm%psrVEgJk7;wRjYmM)Umj^xT)zN z^_1NqUJ4BC&4)Do_hHxoMgrjlb5TLu8W=O)B0=DfAOFAR>oJaBh==J$=9 zcp9o-<1n%BF6%mhScfthrgf4S9!|gP`jG)fk+A>#E$K28BWvcF_A5vF$r`8K{p6eB zU;^;WfDyVzWqCdcBnKX?h7eOdH`U%Qr3Z*6GPl@2!b<`>}L z(|~!$!SnM5BlxvV&wZ#WqC44FAb^<+dOVNq0F*oLzY8MM*q>W~wk{(Ru4=4~r+Fhe zJxn|Ww^8i1HFB8kg>D?q$bK z1lR=F3o}iXo*sg`Lur8{msr(C%Jr4aOqy;?TBUSOwW zaW>Z539cjApvy2$pyxQ(ex0Xz?I+xn%iyIyWSPyU??0*#BIfVtO|-Gx2<|PbKDOtA z^I!VU9<-f=lZ1Jp83-@-c7h?TLlAU(6TFLpql`jm&5A7A#Xr!?pB-9B-^}zgD|VUf z(EW04T^{EcmX^L5rNi?S>1B*x#ZHj)Az6GlXNqq&&~V%YA+Rw3MPt29nB4Dn#c>|$ zi`^QxN=vRY%8wc3#Nc zmIWPFQx|$zkL4}!WTx0O~ib*>qcbJi?-j{#u&$S~~MIY$SNHXfY z%vc|jc_Uzv`7BFA$}KU3f%J8kUp&1tO1dIB)yqk}VM(oBI3Q!OBiU zmX})nP0XQ#31PmVEDQq0NSIYSwTlx+Dsx6||e` z0*NPu9N^5bsyn#dQa4A;T^Kqia2A+|vybV2ya#{eF{#}gLVyl#2XY^Tj$%6Luj z$&K!i{5DjFuJq{Whzs=29rZeWthm(JT^N;5>*HKI;S#%flG!ci_^|r#UFc|X*4^A_2?_&pO` z)X?^nZM4Rytu=YZ53Nkb_g<2&Ha?CzC=cL+Ki_-$v(FPpM&X@7r}skMr79sMrukvV zxIj#77{Ka;D-f*+arfPu%!~E$H+dyn7#RgMk(hI*`WDE>3wJp>M%-~gd--0oiK+=? z_eYBbKW{S4nYemVe;cYPPeKToPWct&s%94864BT8nChb8!(4OmaXycU@(Xj45>ilW z$EuFSV64msqq8p>VP4ueTly}MT-c`k@3oPp$CuT6fMS&DLM@>={KIr*QK2ee?xYw+ zK;siF*a+hh-$~7GS;`t2)vSh~0wQxTC6v4kORiLCTkyn4!pv zpfrJ7WoJJ7q9eD)!)pquVVa2qgMD1`PBJYGLVla=%Y6S+cw#a0V9`Lvb9G9_%`x!1 zwrOUi-d50ADM_fX%vyJm0vhc>{&O_Ru$%6LaJrb6UI;cAaOhoR1HLH!W02YGdK=M@ zKs4^Le&s{Glj}UEc2sLH^rAIqsj`eA0I{rLacMNY33@MvnXoT#04ZVgNX;psa*VCl z=Slc(9P{`*C(zwqycp2h{PS6jRP#nhv%*IDLD)hno z2FbT%{Y<-3&s|Bt06qmphx7!q&+?@;Q!&0sVy#dI7Ljf&Lh6sB;8zbD+51I9SE+|T zwpr$SXl4a$o4ME*@ax6J#vtoqW88wOulDM8({tK))0+ordT*7>vDbjG^bArs1%;`G z?DosUwg=(1Ig^EqgA01*Xl_y5WX4b5hKHCg_SjYt`1m{-}vVmb6+sq;|w z)!=C|xr(!cXL`FI!4=PT({-cmDq)T*{IH?{$+~Nsewc7laCE)eXHZ47K1rJYkfTx9 z-MrYx{EIByEG*T2tU>rR*DVP7h>NA7;@W(vQqOWMlYu!w(o_NCMRiO6-hX?rYW|`j?>R7wap&iJ;3odfsW-RH$vy*j zTw?$62QW*WM%Dt-Tbb!)brq?)qf4sdclxudrUcRqJE&{Vy4z1iN<7Yv2N_9DTik%& z?SOy)w4?LR%la@?*#xJhqLiwa$D7t>j2;{Q`V73&-}8)fe|U=2Imx$BS9O`Ll!61HD>3alMNi`PwMZfiYF zt1{`^X?uKrpkKQm5`EP0J@=b3(Rhq($6SMWM{YI9QDd=`^^J+YIiRo{cq|Gd0iQ2O zp@F5(UaC8ykCtxaD{3E*o6o$U;5 zhy1Kn%sa>PdNzHJeH&|1#*zv+T(s%sT%Yd{7??XzeiG^v-5T~o>nxIlI}|~6zU<#w zY`&lAgxYx;Xc*MU0O(t8DsEn$FU`~HY@tBQ8yclk-ZJjaX;pllx;te!5sj*||4HY} z_>`3@(Kh(5sPp}W^?{=ccS~jowh@3)@bJ6iqF=sQ%Q#(&jNiPN&IcFayU*+kdv_FD zXAee*p+~rn%8U6Y#M&q)J@W zeG(qeF^|t1sgUwa%9k;j8W2Q~ouUeB+ei7pRu(47S|3X>KyIzpM_iPdbM8?oE6i#S z_w_9G!+2_{b4?NoBQFA^sQMwuf2wGKB?5d5YGCzd=O?pNVO5=Q@rtxbjkZ179&p-mnUYD z_&vACL@k*#YCPjQ;X<`dp*LY*=q@BEd{Fq>WZQ(9-LrInbAqb zKxdz2S;O{~h*gA#{dV7J^(|&i`Dr0b`h3ehbP;LQjgc^xx;$%6PIAV>*=;0V^vPa> zO0DM;r1#h@s;o^K`VT~z;f$*4cVfg^v zp{Yhcm><+iBZf1yY81IO#oA73+-L?qQ}JndGw>L+8h6)bg<>k+0@~NgLUIisR~7c~ zTgjy-z<$wA(mon;ixbeVj9y-4excwd9NDhECT{h4*EHh}uT?T9n&Q#|gDxsC2~GDU zhe2`nlRT|9D*GBPDnHq8J(04hDJ;+rGmxALfb;l-f4_E4Bnc27X~aP-p%eMHTMJ{lWTt! z>v4$AGqpU;)MBvN7K^8xbhQzmEf8ynmv)npkefOgg0)S6H;lPf`8})Vt}M+8_p;Qb zMyoyG>dMi32I+@s!UpMwqd@OYO!GQ++L4Ji$BJlmnEgy`!oNK`NjobJu*LgMtUOVQaX%FSz5trim!TOFN z<>gj_R(dY+ilUr(4W?H?PF{ol2iY!dn_ZX37=28zE?*m&0hYlCu?OMS1zJ{-=rdi# zNIYRTk=~|7dVMDs>dgzGIVX&2A0?wyYD)_Z3k?rk@(qauf_%%bV^?xS8If92&fnK- zoz^_c)*GSgPt#X*-1~nq8eB-RJ87M+?n-CytTj6ch`|81wDDQklE#UPw@d^xsQr}8 zfov@!8cSQoy6XKM-elpnZlxrfBQzA857=sDteM-R(6F&FB!q9PzVG?`9|6S1#kyZwP%Tw0f zbT9H!l1zrZT{^?5FLEkq<~9_xO{jc2(f($R1r9CB`q)kHwabXV;?3UHEs8xi z&*)k1!7dP^XU?Z0hYRp&d6%z>bcRL-g&E}&kR@#ejgUUI+Uy+DOx&a@}APqMv9O-s3v=E@ym6qXH8(X#^m*TH%!k?mIgwkh8w+AaF0?g@;@NTD@k!zgK=Y3i@8CY69W$T=;%jyviC!Yr)UqW%Qpf` zL6-G_Elb|S1So2$M+ngpakxNW&^Pg9rSjF5@<#U4S_7+A>f?h3<;6C=hY3wQ#gKZv zhte1;{~ni6bSRF!KME!Xs|)6Go&vwf=nZlNxVqQ=_q06%K_VJsq@lq#U)+>=Z)w9p4Ugu^3AzT2J>ie*16Rg z@MF4*Rfv`#`i+DJ!7RWe3$LaFnS|IW_O@Dlvx(3z41uiGS<6fH{>Qxc1{ z`=gXGCxro_2ct0+4@t9N-}if7IkR<-dS$KSd9_fX?(Ns2ytC?SFPZf<6*5av{+fm- zzbF>3k;JN@k}V`RMiTm5$X(q@ysmbr6S=tZ-%)*IKESpJHwbU*Rnt+|)7n(o)Yw$p z{C+mwrx9YamYA}7=2QAuPo;Ji=YTR$A0;qJ20o#5qpdZ)Y;b{odB ziNjdn+i&W+@agBk0NpV$jK5VADdyaEN-}QBJkC6_w5Q3p{j8>YTd|AgW%+UB3u!O0 zOnu^OY$hEMPhVepE6cW%zC3TuRS)StPa&(loq>fpO@sr;5)-*OG$ST<)}B_RDP${Q ztQ?Bfy&cZxLbqFyX$Pl-(i9xhr9CObBu#vIs`e8RC{||8P!^6GC%bG?c-}|aTt&9{ zLOTJa@e&!q(>mR_oPo*g0~m;zdwiWAlFfoVmq(O8KYlLK1h% zXerchG8!J~>Ct(7lgFiI^G%W5zQm|Wtv~7#Zo$mt&!KghW=UHWaxyYwbkP~mg=}ko z)=zLSnM$?xsO(BnBs7scPB%Rrx``Pe<=?!)6jHuCaR|{P$RTJ1`|BI=Xx9VovQ}co)}*#C z(cCDmWQO33F>;gC*J5UQWs`KzoLwJ9C(x)D$0HEzvtjiZ&^O2F`_w0azyPD=j7l;+ z3t6sMV#e_s|-(hR~h`acB3)TSRcI@+}8A>RYwZ;dt*z>pJ|&ga%q$)1gmXh?hpL? z)mO@GX*A$M#t7fp&q=MT(aXf@k$Y>vH1Go}5Dl%PEP5d=h*E@~?>eZ7*2sw8S#2RA z5#(-%^mmLXRlw+VHC(W+vej1?hgh+$e%~)FPp@$3YZnz_K0?phd>9axV77?G2mpVY zE1M!qt94E>*H3Agh1Soz@ZcYS@@G2WzhOqH9e0vQEPQ`aK!n$hPMKf%^h2<9dD?!d zWN6hj@+lrK`pX{0YUSo0UD1Z=Q`=-xf{Z&V$#aTuv^EljHFF~VjkmaW|@!nXrpN9N3STLc6RFnHz`_?hpGa{9I7Eu#_z*Nf6jf-V{ z8|h@fF#nQ|YBHovS<(UHg5@Q%@CHYPSt*vjOyM9i!XmnEW9nkcJ+vyYy^zVYuSU8? z>Nx)UV+`pBx4@OY6SuyG+YpUu9_U-mGIGBFME;WZMAXf+iDN4v#r>Aw6m5Po#$q;+ ziXE&l$vLUplhG+@=5;TYnV6=39}K%VVx=_tFcYMz{{GWB_I0{VIGv4c${D4mbBOC6 z@0+rd?-&p-N8Fv#=N@Va2HZ+F`zF5_?#Vo=-0L|M>1PtEp|-aVXmta1xtE@n2@Yro~v`c33G1-DDUL_};tc z8k8~{)1%r(!JJ$22vI5&7|YZ6&%S%$e-NwdeWq~}TN!dJ3cp!fOl3EegOb_70ujZS^ z^uSBK1%93S>F6_cQn$dTf$O+ZytJ%Tl5SM5rlGy9co)#MxM4eQ(Imt-o?10^aDe>P z@Q39wWHa+sBovARhDB|iHOtG`mx(j0>?(+z1l09pT|T#5d;_P2*yF|1P9{3Eb`_kjzURbqfTTx>?+TrCVoKM+5aEfKa|zQGkb+!uREiT*br_sv z5~gS)a0jzG9+!tzoK$#hm70{^>)Al0cR0A1zQ0gyZb;!ag!(cj-(AlOuvQ+&OZXtG zmODjlhAn(BcsGA|g)KnI597*YOYogaCOwG7h(nzzB;U;Pm-@SFd zzrqH@0?rUF5;#*1&?+uW*4<6#q8pj>2jvY3cnwOwq!M(#{KG(PL>knKo#f9!-c@cvwRHO=Z@4?9$KqJpqR;Yi`x&GG6T07|V(Hs62^B?ounZ=W%Xb#v z0<>3@{(&?>?qwOlP29V#VtO0kp9lxGx9Zsl5g?02{N0^~n~*&ZVp1gWD^4X6Z%2u3%Omj%yO;2Q0@XJs#mFW#59!04IFnlRkr>0Gs+JtL z>!e?ApQsO~X6@=Imhd0IA~{;Sx3aR{=(|{tG_qQFb5Lxf^TM=MNl@DPZluvnubGq!2HMb*+OlIV#VG{<24PF#6e_ ztPb;z5bbR~FFNbWzUN~ucX{4g`kT8LWEW$HXYb%!7?8%i;s?gGI>#8#<-uO`*U1;| zyjt)2I3DLac%9E)xcmrOBidQd1hAif3OJt}QFxvZadEaDl;{Dgvh9_?7e zzQX~Np8Hu83;p=bn;hlr$(&1Py%}fuQIq$X16dv3y|1Gl-hHS;53u?6d;YJj^sG*9zPPeyoW8J)XuUjh8GoYAg2Txs>Dp{ubS z9?x~IFYgRWhW$E<^4a;~-2Eox?5xCYZMojDTH_8zQHvqREcmuo?uH(urE3krn*Msu z(;1TPWwd&wYfhZ9n@tW{NnuVgI5l+9pu+NcZw5}ovkt44)q0nuhS9nj*c>M2(c^-^ zhw}`qyK#YrCU9!9duJgk9^-W?Fl7#FfB1yMhT)Dp<%&lbx<;SS@^xY`4D5!E4i{0j zxelmhmq+hlw!V(4Kx-CeG5Ayi?O<;pe5#K2xi(Fc&+USBllLtq+epWcA`bc%A9;rs zPR4+>v~YR2R0(S7(JoP*)P4Oy`v8gf&Nq%P)QEeLCYEKOt8chr6uKH!8BE zc!qri0_X3?wF^)J=WQyyec^D~I)?_!m7p1P~cEl)Q9$}PX(BE4SMl`20^%_SK{ zzARB!yULq8HBr!=%!NV5Cs>)mTjeuFr!(g-XufuD8)XKT4|;`2dfN8T!bozmkiwG! z(SSYRxS6(}H$L_{fa1gP(2C2R>-#j)J%(}1&@D$W3#LW%U?ngI3^llE<3z*E1ED-{ zgC@#Y$h#=liA?adp1ihxjrWjMWJ*;(0kaP;fdr53Wb5ruJuevOLh^9`C7I|oEBxPc zgb3N${`ZuiyiidDpEro$)Ut1dSQhvk5mg^wZWB?65T&H#lEj>_pIe4RJ+}jhwS+cD z!P3Yf^FPLG!;b1)E;cmVSTTFmzxRs@O7#22ipB1)Pm0D2Pm4$3+6EUUF**E*UW*70 z{a=v&myB;98{mJ3swqEY>C1rFa*4*19~kt>XXW$zA~Aa0UounaG6-MikmLaUQD9zL zOM1vfpBWaG1;#CCZq(npq_2)*3F4pSG`zY#q zb`6q?=xedFxs1*exKjzGw(ap(C_FeH?WUaWL*$)NT3%B4(E1ZSGg@^*8-*+-U_fNPg(;*}>U^H9^~> z7zbI)yyf=zBn^dz$n=e~@N4>L<|rQoIPE7W5mm%Q%5kc37^XmZeEV`DH9O2*hEbhV zfscKd&n>e#pnp5A6Z+vovT4}8`xMndfPqQFprT#Tp&eZ&`2^=3P5jx@52K#$@Jqvp zjhUy`(2Zf(%4aW(N2(^$Bc_$|A-1sZgRNc_J*&q5WfosK3jbJdf3P5aQyb{z9dzyg zAVr7@zDi!7F%r`A>)09mQ9(pWSXoVuTF}5$N6A56$I=dlUO-e(-o?(|z(Um0(2DSt zS0QI$WCF^Tb0MVQ15qdpC<*DMZS@UoU+E7NqWU0Sfr-5fNGR`MZEbE~@yc3Yc%=r= zzYZa2V5etmVr_3_3rdm$$>j*?l?egANem!bf~cT^m58XIq>eQq;14Fnzla)uSEj}P zRjF5PKv{SHS8aqWK}>~Lr1bwlO8c3R{uLD{@lVIn{uQGgh(rPSgXRI^N+?(juJm61ui=>XTvWY&3-NDYr{#X6}L5@)efdm-^2%0EO zLMEm^i$E5@KSXRG5eo>*|Lvs zDy%H8MdsHEY_DU3*ekC^R#5R3q$UjL9#nyW0VHLAm9l`=6AO?T)P~{rl?Ak5fXs}4 zlz~iyjI6IC02p2|Ftf7%zGr7;0zC(PLFt~aZC}4kAPNpMXa<1nuQDbOQpVSIjK86Q z%75JdGyjwEufMfF5IzoFati^vp;8ud2c%Gik{eJo}sZyR18{CWN?g-5#XR1D|fj#N-i^^Gc z42%{tJPpcbB6UM%?)O;%@mTWrt0Wv6YMM%w8yigqf?^EE)R!{~v5I7>wh(;@aphFB zSkG6&oyyQs@R07$iKLM!caWW%K0hkf^x&aA70w_!Ll(_aX%|sDjli3SO2pg^@qKuK z$BK8~i&*&M(FB#ch6^T@kuZOqY<2n2M>$6*E6+?jT2AgD_9R{u&18ML{&*P3-#gd_ z6Qf$nTIt)cNiPl!SSX)`JsN?Vk_cA>k#%nq^J|4xG*sIK5Pujg zizsZWgp|}`MlA?tKP9CQeG3zVq*A`AXIA0^yt$Gq^ldpqE>$g-q+bq`a6&Ps!E{8i zC)}etwDXemxmI||0!OnR&A7BDG0bb+_VhSfoAf9C0$LNlNCh)kVbT_II3%jV4hK|} zy0R=tNZAbwkKf5RtvY*)IV7l5sD8y1mDsLd+Kc^fX~hh zr4$|7DBY$*MY{&u3LB4UwGhA&Mw}x&)X{1hy+}Oz%+rg(Nn6x$vla#MqAlXOQlv)K8x{wmvV-WQ(tMoGq6salWYQSa&`*32_=9h z*3pFgW4R-T_+fN;dE5nvWq|x5uUjH;P1ag>X|k44J7CT1Gr4Axx2*PvE2ymo)^}hQ!lWq50b2kg z0Z#qJOMN)(I?QhQa0By*GUjT!Fl z5TUSgf}uUOr8Q+m|Kxh^7TV%^9!+fX{RJPB9#-+p zFF%Jh30r?lk287k#FLaUeh--NJzK`^OR_tami7e9$zndlbR?F4hbXdx7-H?~%t#L# zc0#@32-g(A!kf6{Z)%vZ`c~fgmSe_@7f_rPB~3y}u`5GPZo$fp`E=EN(!5N?8oH&| z9nuAu09sCBlfoQilbTt$vW9QjWzEx`^4Ui4C z{~9=H5;hE%6(aOQV1ZbkT2q#K^6iBzL>`P2x?;#9MOMCCqr?Z=y-GzCp|>tjf(24a z?Vo#}puY57JC9&UJ8TRct&2soY@P*=dhG&43JtRBKc7%VI>W$NsKE*{yHA8|d4c_O z`B)XV(X1g8OxS)`h6rtUn&Nnotz`N!n<{C@-^{fPX`#3<&;C4(Pp>`SK}zKG*E#2$ zU^~tWmqJaw{eA7K)y$lMgXd^a!?_bZk9c2!PO8H?N^f6SyUTer7(u|fH^!+|dhx1J z3r26VP76w>7Rep#=5eqyHI5bIb7}l4Xql>d&W;rv5NG&Yb1z6>bUqt&d zmYvzd5-{nT&iY(aO}hv%$%P*ExutM3vZSUr@8EFVJTp0ZojnQD^&ZpDIeV?J@N~GA z(zDYIY6{j__niaIw*tVg^^qgUHlTZvdN;%RFe4c~NAA!z6T-T}SbDR-xvC~g@O5hN z&E?C&d}+m}J6UiwjB2=!6luk)I3{8YxQ=?>_R{~DAG>4ENjeAi3V1$Fdqds2%=mg9 znb{V3d|_%l`wIT_3H%o5`D1?Qt`gP_^LFJ><~DEh3zX+ppC!@)UN3i;rc+;uW?1uP z<>mLcrUe8}$JWKoklKMLOPki@n-LY7E1mC`Y?>)n@Ov%lIi@YTtV_V^1+6dZSR8YK>5W$;V0SmCTLikrwxhFGjFm2s8Zy|SjTo4vC0G$xkmA(E`~(`2lc6+c~dG*0`3 zi>8I?Sw3cZS3Wm^*QVQOzVqx?=~Ef%KhTiZDxYOII6MdARocCkFKKOvuMDvX2UG6L zp+lg?szsU>L=4du0-p(^5+==YM~nx?lj@fkxTp-ipUsi@L`l+d1{A~Wfm;(q6*_Bm zrqOXvs7#bqK`ekFp$O`V3kI8x+gIsUp-9ItBxxtOU@90qjD)Zp&R9_%G1^+RhR|Ex zmST>yX+*KZveP$0(7T~2NM6CHjyX1sM*$uub|&KY)-c#&CJc~zsDdw8ByvEhhEaxz zlQ&Q2SxSr^<&ZT;u@8J_tmb&oj=@90LcvT3b1D%h#^fC>>TL#CmP&@(>6XG{6cBbr zT!orbrP)No>j^JSV{!^FF;LMeh1(L-q8IIBvi~R%{squ&5D!1oZGi0xaGj|r!aV5l z|B}*F@u7u9qXY8?<}#G;$1y%S=SMbPA5>AIo=APpm|P#xFmEJxavU&lIPI(3O|GJ8 zmoPzDG2E}7aI87>U8L{mgnhP>qu`CWf8G7mp5H`?OGBccJP)n_Y@`MmbO))xbsYrs zd=OxP-~Z}~NT<@)EtOZmXXk^dRO>x~~_QN@Qb zS;s{t1;t=*QHYqo;xcX>!*01MnnBZSzEpb-(?97ExI=p88AA@QyI1&$YYY&EvE6rY zyq!&PFIluOOv9u=mv1be>$qG?|RJ2ia+)>vktELsF{QMY-gHgI=hXQ`#PdBGOaAZ9ri!4VsObMU&L(L4{-?7EV!;0{{ngq0y@38od}n-Rx&Pg>dv$96^q~Ll zZ2n!F|5s-dz;Av2SjT|!47 z9RNVbNJD6BZ*OhKK~Hb-&u4U2wnmgN^fIcmleSF7dzYA>VU#mw!aT~kvDNQ0IeZVRMN`o mb@~5(xBm`R{$BpSUkrBkI=1$|mm7c;2xNyLB^8nuhWS7CNKxbf literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/figures/candidate_function_errors.png b/results/cpu-qwen35-2b/figures/candidate_function_errors.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfc8e0fa1d4aadecfb22ff5509680c8d01d2b7b GIT binary patch literal 81002 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

Ha4`S=(cMT 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®CS@Ipf6mXu!)c^u-F@ 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 Gbk3i9PmU!3 literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/figures/candidate_function_errors.svg b/results/cpu-qwen35-2b/figures/candidate_function_errors.svg new file mode 100644 index 0000000..67d89da --- /dev/null +++ b/results/cpu-qwen35-2b/figures/candidate_function_errors.svg @@ -0,0 +1,467 @@ + + + + + + + + 2026-11-09T14:10:51.395327 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + attn_3_7 + + + + + + + + + + attn_11_15 + + + + + + + + + + attn_19_23 + + + + + + + + + + mlp_5_6 + + + + + + + + + + mlp_20_21 + + + + + + + + + + qk_norm_3 + + + + + + + + + + qk_norm_7 + + + + + + + + + + qk_norm_11 + + + + + + + + + + qk_norm_15 + + + + + + + + + + qk_norm_19 + + + + + + + + + + qk_norm_23 + + + + + + + + + + + + + + + + + + 1 + 0 + − + 1 + + + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Worst calibration directional relative L2 + + + + + + + + + + + + + + + + + + + Fixed candidates; same-input function comparison + 4 calibration texts, 32 tokens; no training + + + + + + + + + + Relative L2 screen = 0.05; other gates also apply + + + + + + + + + + diff --git a/results/cpu-qwen35-2b/figures/learned_norm_function_errors.pdf b/results/cpu-qwen35-2b/figures/learned_norm_function_errors.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d1119ba56117f8c00350abeb58b2d19359c2711 GIT binary patch literal 17316 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

tVxrz`(HR@%tI4Xh53$5v9h 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 C0X9GY literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/figures/learned_norm_function_errors.svg b/results/cpu-qwen35-2b/figures/learned_norm_function_errors.svg new file mode 100644 index 0000000..a8279dc --- /dev/null +++ b/results/cpu-qwen35-2b/figures/learned_norm_function_errors.svg @@ -0,0 +1,388 @@ + + + + + + + + 2026-11-09T14:10:55.472730 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cal-zh-1 + + + + + + + + + + cal-zh-2 + + + + + + + + + + cal-en-1 + + + + + + + + + + cal-en-2 + + + + + + + + + + test-zh-1 + + + + + + + + + + test-zh-2 + + + + + + + + + + test-en-1 + + + + + + + + + + test-en-2 + + + + + + + + + + + + + + + 0.04 + + + + + + + + + + 0.05 + + + + + + + + + + 0.06 + + + + + + + + + + 0.07 + + + + + + + + + + 0.08 + + + + + + + + + + 0.09 + + + + + + + + + + 0.10 + + + + + + + + + + 0.11 + + + + Worst of two directional relative L2 errors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Learned input RMSNorm at layer indices 12/13: same-input comparison + Calibration (left) / independent heldout texts (right), 32 tokens each + + + + + + + + + + + + + Input captured at layer 12 + + + + + + + + + Input captured at layer 13 + + + + + + Heldout empirical screen = 0.05 + + + + + + Proven uniform all-input bound + + + + + + + + + + diff --git a/results/cpu-qwen35-2b/figures/learned_norm_network_substitution.pdf b/results/cpu-qwen35-2b/figures/learned_norm_network_substitution.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f14df5f54d91a660a35ef64646ba7d32003fb004 GIT binary patch literal 18715 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 wHUp0}aD3ar;dz?;T5W#?y?;%UUw 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 z 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 literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/figures/learned_norm_network_substitution.svg b/results/cpu-qwen35-2b/figures/learned_norm_network_substitution.svg new file mode 100644 index 0000000..cf444fe --- /dev/null +++ b/results/cpu-qwen35-2b/figures/learned_norm_network_substitution.svg @@ -0,0 +1,286 @@ + + + + + + + + 2026-11-09T14:10:58.596152 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + zh1 + + + + + + + + + + zh2 + + + + + + + + + + en1 + + + + + + + + + + en2 + + + + Independent heldout text (32 tokens) + + + + + + + + + + + + + + −0.0015 + + + + + + + + + + −0.0010 + + + + + + + + + + −0.0005 + + + + + + + + + + 0.0000 + + + + + + + + + + 0.0005 + + + + + + + + + + 0.0010 + + + + Mean token NLL change (nat/token) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bidirectional single-site substitution of existing learned RMSNorm modules + + + + + + + + + + + + + Layer 12 uses 13; mean=3.2565e-05 + + + + + + + + + Layer 13 uses 12; mean=-0.00036397 + + + + + + + + + + diff --git a/results/cpu-qwen35-2b/final-report.log b/results/cpu-qwen35-2b/final-report.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/final-source-hashes.json b/results/cpu-qwen35-2b/final-source-hashes.json new file mode 100644 index 0000000..913967e --- /dev/null +++ b/results/cpu-qwen35-2b/final-source-hashes.json @@ -0,0 +1,18 @@ +{ + "functional/__init__.py": "e572d3a9040dfb440b92e969df495d2a9e0edbb1bfe1318e5e66841cc6144067", + "functional/audit.py": "5e10c858fe574f4c9a51cdb9c61a94932d9e4bb6dac82082a94c2ef7d57a693b", + "functional/benchmark_factorization.py": "135759dbe1af48b86e327cf23a1ef656d000dfef83dea2dbf48d2514356ea729", + "functional/gain_factorization.py": "33f3620027c50bce913ad07ed12f42fad83d69a811652174c803467c295e77c9", + "functional/model.py": "48a2a97d0445dc6e08ac7f27a935637a7553417d0982eb94122d6cb02bbb499c", + "functional/neuron_reuse.py": "d408bc14242c7950b846b6d91870d88374cdb8ece7fc111a2ccdc25e725ca19c", + "functional/norm_repetition.py": "aac0c44904c2b059510a754f2f0b1247ffb4b2a1715ecee6281b5ed2b43612b3", + "functional/preflight.py": "87c13d21512e8cbb82bc8a8aeb614a3be06bddbb8489c52eb2bf316480b0f20c", + "functional/reference.json": "af6bf3040369580de3dff4a6733576a75c61bcbd7e94201d309cf28e9b75e3d6", + "functional/reference_check.py": "422cd70c4f1276590402b10261aff0fc744a656387eb260b54bac303353c277c", + "functional/report.py": "ca74122de373e80429fab0f8c2e2d0dba3f8f7c6ce046510e5bf28fa7b8d827d", + "functional/run.py": "89d3abe098c240ec29c3f6684a94e24b951c372e1393c8db5a48f79ef141aa48", + "functional/storage.py": "8387fac8c192fe050e6d275dff6fe55a405332ee18c09f3e3b5d4d537a3db59e", + "functional/supervise.py": "44c01fd9ba989ed68ef58313e490602a49f5da26aeb918ee0b6545aff766144e", + "pilot/tensors.py": "2e620849501b6bc98a59cbf9c39495326b0c85530e18e6166aa9edb68ac2423e", + "tests/test_functional.py": "82c8585f6a9f4e6323cd978621639163298a369bdf298dfa5103c020c3e71f38" +} diff --git a/results/cpu-qwen35-2b/final-tests.txt b/results/cpu-qwen35-2b/final-tests.txt new file mode 100644 index 0000000..05c4233 --- /dev/null +++ b/results/cpu-qwen35-2b/final-tests.txt @@ -0,0 +1,23 @@ +test_causal_convolution_and_norm_boundary (test_functional.FunctionalTests.test_causal_convolution_and_norm_boundary) ... ok +test_causality_and_identical_function_metrics (test_functional.FunctionalTests.test_causality_and_identical_function_metrics) ... ok +test_neuron_function_metrics_and_targeted_replacement (test_functional.FunctionalTests.test_neuron_function_metrics_and_targeted_replacement) ... ok +test_nonrotary_gain_identity_and_rotary_negative_control (test_functional.FunctionalTests.test_nonrotary_gain_identity_and_rotary_negative_control) ... ok +test_streamed_projection_embedding_and_output_head (test_functional.FunctionalTests.test_streamed_projection_embedding_and_output_head) ... ok +test_uniform_rmsnorm_function_bound_is_tight (test_functional.FunctionalTests.test_uniform_rmsnorm_function_bound_is_tight) ... ok +test_3d_reader_and_exact_block (test_pilot.PilotTests.test_3d_reader_and_exact_block) ... ok +test_bfloat16 (test_pilot.PilotTests.test_bfloat16) ... ok +test_directional_replacement_error_and_scaling (test_pilot.PilotTests.test_directional_replacement_error_and_scaling) ... ok +test_end_to_end_synthetic_groups_and_savings (test_pilot.PilotTests.test_end_to_end_synthetic_groups_and_savings) ... Inventory: 4 tensors, 33792 bytes +tensor: sampling 4 objects +block: sampling 22 objects +block: verified 100/109 +{"model": "synthetic", "revision": "test", "tensor_count": 4, "parameter_count": 8448, "model_weight_bytes": 33792, "ndim_counts": {"2": 2, "3": 2}, "elapsed_seconds": 0.1379160056822002, "analysis_budget_seconds": 60, "peak_rss_kib": 53592, "python": "3.14.4", "numpy": "2.5.4", "seed": 20261109, "limitations": ["No inference or functional equivalence measured", "No exhaustive pair search", "Block search uses per-role/shape/scale reservoirs of 256", "Different block scales overlap; savings must not be added", "Block savings count only verified disjoint sampled blocks, no extrapolation", "Spectral probes use aligned bounded subvolumes, not whole tensors", "Shared encoding is theoretical, not a runnable compressed checkpoint", "No cross-role grouping, neuron permutation alignment, or training"], "completed": true} +ok +test_no_transitive_chaining (test_pilot.PilotTests.test_no_transitive_chaining) ... ok +test_ranged_download_preserves_prefix (test_pilot.PilotTests.test_ranged_download_preserves_prefix) ... Weight download 36/36 bytes (100.0%) +ok + +---------------------------------------------------------------------- +Ran 12 tests in 40.946s + +OK diff --git a/results/cpu-qwen35-2b/functional-code-hashes.json b/results/cpu-qwen35-2b/functional-code-hashes.json new file mode 100644 index 0000000..f4c0454 --- /dev/null +++ b/results/cpu-qwen35-2b/functional-code-hashes.json @@ -0,0 +1,12 @@ +{ + "functional/__init__.py": "e572d3a9040dfb440b92e969df495d2a9e0edbb1bfe1318e5e66841cc6144067", + "functional/model.py": "48a2a97d0445dc6e08ac7f27a935637a7553417d0982eb94122d6cb02bbb499c", + "functional/preflight.py": "87c13d21512e8cbb82bc8a8aeb614a3be06bddbb8489c52eb2bf316480b0f20c", + "functional/reference.json": "af6bf3040369580de3dff4a6733576a75c61bcbd7e94201d309cf28e9b75e3d6", + "functional/reference_check.py": "422cd70c4f1276590402b10261aff0fc744a656387eb260b54bac303353c277c", + "functional/report.py": "e52201fa910a062b8521b4b1b2ea7ac80d276dca06fa8a322b9d3cb926ce100d", + "functional/run.py": "89d3abe098c240ec29c3f6684a94e24b951c372e1393c8db5a48f79ef141aa48", + "functional/samples.json": "bccb6ed515a8703c6ab2fc29b5227e1d11823b2ac94c95495ecf24a0340ba103", + "functional/storage.py": "8387fac8c192fe050e6d275dff6fe55a405332ee18c09f3e3b5d4d537a3db59e", + "functional/supervise.py": "44c01fd9ba989ed68ef58313e490602a49f5da26aeb918ee0b6545aff766144e" +} diff --git a/results/cpu-qwen35-2b/functional-environment.json b/results/cpu-qwen35-2b/functional-environment.json new file mode 100644 index 0000000..e1b734a --- /dev/null +++ b/results/cpu-qwen35-2b/functional-environment.json @@ -0,0 +1,34 @@ +{ + "python": "3.14.4", + "platform": "Linux-7.0.0-31-generic-x86_64-with-glibc2.43", + "numpy": "2.5.4", + "packages": [ + "contourpy==1.4.0", + "cycler==0.12.1", + "filelock==4.2.4", + "fonttools==4.68.0", + "fsspec==2026.9.0", + "Jinja2==3.1.6", + "kiwisolver==1.5.1", + "MarkupSafe==3.0.3", + "matplotlib==3.11.2", + "mpmath==1.3.0", + "networkx==3.7", + "numpy==2.5.4", + "packaging==26.3", + "pillow==13.0.0", + "pyparsing==3.3.3", + "python-dateutil==4.0.0", + "setuptools==78.1.0", + "sympy==1.14.0", + "tokenizers==0.23.3", + "torch==2.15.0+cpu", + "typing_extensions==4.16.0", + "tzdata==2026.6" + ], + "weights_retained": true, + "no_automatic_cleanup": true, + "ledger_seconds_including_initial_reserve": 1167.355532555841, + "final_tests_report_audit_additional_budget_upper_reserve_seconds": 600, + "historical_error_logs": "Early reference adapter errors and preflight pressure stops; latest summaries/tests are authoritative." +} diff --git a/results/cpu-qwen35-2b/functional-report.log b/results/cpu-qwen35-2b/functional-report.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/functional-run.log b/results/cpu-qwen35-2b/functional-run.log new file mode 100644 index 0000000..0aebc25 --- /dev/null +++ b/results/cpu-qwen35-2b/functional-run.log @@ -0,0 +1,24 @@ +{"phase": "baseline", "layer": 0, "elapsed": 6.704378366470337} +{"phase": "baseline", "layer": 1, "elapsed": 12.428538799285889} +{"phase": "baseline", "layer": 2, "elapsed": 18.311316967010498} +{"phase": "baseline", "layer": 3, "elapsed": 22.585159063339233} +{"phase": "baseline", "layer": 4, "elapsed": 27.968208074569702} +{"phase": "baseline", "layer": 5, "elapsed": 34.463871240615845} +{"phase": "baseline", "layer": 6, "elapsed": 41.34764099121094} +{"phase": "baseline", "layer": 7, "elapsed": 44.77713179588318} +{"phase": "baseline", "layer": 8, "elapsed": 50.20741152763367} +{"phase": "baseline", "layer": 9, "elapsed": 55.92143273353577} +{"phase": "baseline", "layer": 10, "elapsed": 62.15613389015198} +{"phase": "baseline", "layer": 11, "elapsed": 65.01726865768433} +{"phase": "baseline", "layer": 12, "elapsed": 70.20210671424866} +{"phase": "baseline", "layer": 13, "elapsed": 76.30333161354065} +{"phase": "baseline", "layer": 14, "elapsed": 81.29059743881226} +{"phase": "baseline", "layer": 15, "elapsed": 85.60254788398743} +{"phase": "baseline", "layer": 16, "elapsed": 91.78613877296448} +{"phase": "baseline", "layer": 17, "elapsed": 98.67645645141602} +{"phase": "baseline", "layer": 18, "elapsed": 106.65264892578125} +{"phase": "baseline", "layer": 19, "elapsed": 109.9351601600647} +{"phase": "baseline", "layer": 20, "elapsed": 116.18031859397888} +{"phase": "baseline", "layer": 21, "elapsed": 122.5530002117157} +{"phase": "baseline", "layer": 22, "elapsed": 128.36239457130432} +{"phase": "baseline", "layer": 23, "elapsed": 131.58471012115479} diff --git a/results/cpu-qwen35-2b/functional-status.json b/results/cpu-qwen35-2b/functional-status.json new file mode 100644 index 0000000..807426b --- /dev/null +++ b/results/cpu-qwen35-2b/functional-status.json @@ -0,0 +1,11 @@ +{ + "state": "completed", + "started_unix": 1794202338.6853228, + "phase": "done", + "last_completed_layer": 23, + "elapsed_seconds": 196.65513348579407, + "selected_candidate": [], + "positive_bidirectional_quality": false, + "peak_rss_kib": 162372, + "claim_limit": "Small text-only heldout pilot; no global interchangeability proof, no measured GPU speedup; component storage savings require explicit layout accounting." +} diff --git a/results/cpu-qwen35-2b/gain-factorization-k_to_q-token-nll.npy b/results/cpu-qwen35-2b/gain-factorization-k_to_q-token-nll.npy new file mode 100644 index 0000000000000000000000000000000000000000..3f169075cab2a0577f72284317311dfddb8a8488 GIT binary patch literal 1120 zcmbV~`#0Nn9L5u2Lbd%yEUuMr1YzPdE*(XE-o&9OqVB3gSB_Ig5IR+sc5d6)Tx#gf zj#P10m&l6JX)R}*(z<2H$|;W0txBtLr)X#Y!k*ur*LnT${P2|d2Kn&9h=g=PChKBM z>gOpe2b|>;YtLfitk|R!K}vLDWKzn-nE$wYbV6#(0Z)yK=Eod#Gg~%pV`a|9v+(~L zb-sa?oIzSa%UW0Aq!SYg%D#&~Yea{e#OjTkR!kssKJ3)*ABEGsdgSyfU9eB^FHy!x zAnjredtKIo1#{uH_t3{Mm}D#}961KHn~I0$B@~dz&X7aOwvq5weplwT4Ftr$vL_!e zqVf9Q2LlW(p=qz?v4TYbfq6l3C7%M=R%S=osa+(bja;c_kDwb98RzR(HKFr%Y@0@= z9>{3)X}7~|o$c&{!{}$_ow13=K;YaCtIKUf1=Iasg_Ufftw7h-MkWIsHQf5+t&E|xj_9`S zfx))zxuxt141}VXOVaYEh@hDk+q67}WcM6~O($27S%>6aNLy zw{)2MC0g6^3y1>1D+;FizEK4N<{q9`P>!S=jm#cb3UpowJTA#& z0wE{$p^o(`BJ{Y(heUe_S7CO`sdH#y$>W5zhBC+|OtMUn5h(2XK0VZeftjz$6ME87 z0JRWXJLT8NsZefY^&1U}n>z*~{!xOakmXlpRrtZ~l$rst9N{#d?b_u%#Nl!^=l>P5p?;zZ9^nHHh9O|^ER=KvQgRD~gjrZIZ zs`NJs+jk{_qWb|Q{F)LFe)_&o&3PZil{McrJ+2LcL4zE~16RmF=OPddYLBNT~mjf6)NH=2}P;mg$1WRe!4pKxtQWBT$ zq6KF)Meqy;SjKyC;|Bs1D&K1Bv7rJ_dz6whWB{{AvL)WMStMemPt947fL62VZ90Gh zA^B&mHKsP4{?SwY!YUC2C*6l5pK5|AMw1<@ON3C58=k$>s?fc*ewC|ba`0dJyc}CZ pyxw6;3oa3&zTiCrzdZyNi!wp}KI;5>!EbR!8;Uh3oc?)L_!ko5$PNGi literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/gain-factorization-kernel-timing.csv b/results/cpu-qwen35-2b/gain-factorization-kernel-timing.csv new file mode 100644 index 0000000..db61b17 --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-kernel-timing.csv @@ -0,0 +1,21 @@ +repeat,implementation,seconds_per_call +0,baseline,0.0036114158341661096 +0,factored,0.003925090050324797 +1,factored,0.0032154972897842525 +1,baseline,0.0025859603192657232 +2,baseline,0.0023861153982579707 +2,factored,0.0025824901415035127 +3,factored,0.001997539587318897 +3,baseline,0.0016429506475105881 +4,baseline,0.0017620180500671268 +4,factored,0.0027307189535349607 +5,factored,0.002951206616126001 +5,baseline,0.0020800257567316293 +6,baseline,0.0018509919987991451 +6,factored,0.0024777360958978534 +7,factored,0.0025671867886558177 +7,baseline,0.002200991357676685 +8,baseline,0.0020182608393952252 +8,factored,0.002254301542416215 +9,factored,0.0025048630544915796 +9,baseline,0.002296067262068391 diff --git a/results/cpu-qwen35-2b/gain-factorization-optimized-summary.json b/results/cpu-qwen35-2b/gain-factorization-optimized-summary.json new file mode 100644 index 0000000..a52c55d --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-optimized-summary.json @@ -0,0 +1,102 @@ +{ + "state": "completed", + "bitwise_checks": [ + { + "layer": 3, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 3, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 7, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 7, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 11, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 11, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 15, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 15, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 19, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 19, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 23, + "direction": "q_to_k", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + }, + { + "layer": 23, + "direction": "k_to_q", + "query_elements": 524288, + "key_elements": 131072, + "bitwise_equal": true + } + ], + "medians_seconds": { + "baseline_legacy": 0.0005341526120901108, + "baseline_inplace": 0.00034534828271716835, + "factored_inplace": 0.00048380128573626284 + }, + "paired_baseline_over_factored_median": 0.6901853298227001, + "paired_ratio_p10": 0.38049978760565983, + "paired_ratio_p90": 1.0876508522302268, + "fraction_blocks_factored_faster": 0.13333333333333333, + "descriptive_local_gain": false, + "claim_limit": "Hot-array CPU normalization microbenchmark against equally allocation-optimized baseline; no full-model speedup or independent statistical significance claim.", + "elapsed_seconds": 4.185962562914938, + "peak_rss_kib": 62168 +} diff --git a/results/cpu-qwen35-2b/gain-factorization-optimized-timing.csv b/results/cpu-qwen35-2b/gain-factorization-optimized-timing.csv new file mode 100644 index 0000000..d132144 --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-optimized-timing.csv @@ -0,0 +1,91 @@ +repeat,implementation,seconds_per_call,calls_per_block +0,baseline_legacy,0.0005406431574374438,50 +0,baseline_inplace,0.00030974450521171093,50 +0,factored_inplace,0.0004578591044992208,50 +1,baseline_inplace,0.0003033110871911049,50 +1,factored_inplace,0.0005383838433772326,50 +1,baseline_legacy,0.0005124531593173742,50 +2,factored_inplace,0.0004439983796328306,50 +2,baseline_legacy,0.0005330004263669252,50 +2,baseline_inplace,0.00034275135956704614,50 +3,baseline_legacy,0.00048629873432219027,50 +3,baseline_inplace,0.00030624629929661753,50 +3,factored_inplace,0.0004589695204049349,50 +4,baseline_inplace,0.0003086038026958704,50 +4,factored_inplace,0.0005195329245179891,50 +4,baseline_legacy,0.000474175363779068,50 +5,factored_inplace,0.00045118503272533416,50 +5,baseline_legacy,0.00048273258842527865,50 +5,baseline_inplace,0.0003844233974814415,50 +6,baseline_legacy,0.0006650591176003218,50 +6,baseline_inplace,0.0007703853026032448,50 +6,factored_inplace,0.0004403704963624477,50 +7,baseline_inplace,0.00038892081938683986,50 +7,factored_inplace,0.0004549186024814844,50 +7,baseline_legacy,0.0005137955769896508,50 +8,factored_inplace,0.0004692125599831343,50 +8,baseline_legacy,0.0005263624526560307,50 +8,baseline_inplace,0.000349312499165535,50 +9,baseline_legacy,0.0004857080150395632,50 +9,baseline_inplace,0.0012390289548784494,50 +9,factored_inplace,0.0018109613563865423,50 +10,baseline_inplace,0.0013814480416476727,50 +10,factored_inplace,0.0013840428367257118,50 +10,baseline_legacy,0.001071744617074728,50 +11,factored_inplace,0.0016566905751824379,50 +11,baseline_legacy,0.001358420280739665,50 +11,baseline_inplace,0.0003716108575463295,50 +12,baseline_legacy,0.0008325341437011957,50 +12,baseline_inplace,0.0003479452058672905,50 +12,factored_inplace,0.0004391701612621546,50 +13,baseline_inplace,0.0005428373627364636,50 +13,factored_inplace,0.0015458692144602537,50 +13,baseline_legacy,0.0013308324199169874,50 +14,factored_inplace,0.0014238305203616618,50 +14,baseline_legacy,0.0006564708799123764,50 +14,baseline_inplace,0.0003204820398241281,50 +15,baseline_legacy,0.0005279563181102276,50 +15,baseline_inplace,0.00030857514590024946,50 +15,factored_inplace,0.0005265675205737352,50 +16,baseline_inplace,0.000458676153793931,50 +16,factored_inplace,0.00045228853821754455,50 +16,baseline_legacy,0.0004912188835442066,50 +17,factored_inplace,0.0004910450987517834,50 +17,baseline_legacy,0.0005007587838917971,50 +17,baseline_inplace,0.0003247600421309471,50 +18,baseline_legacy,0.0004860841576009989,50 +18,baseline_inplace,0.00032584095373749733,50 +18,factored_inplace,0.0004711645469069481,50 +19,baseline_inplace,0.0003332006186246872,50 +19,factored_inplace,0.0004859814327210188,50 +19,baseline_legacy,0.0006259976234287023,50 +20,factored_inplace,0.0005134599283337593,50 +20,baseline_legacy,0.0006658115796744823,50 +20,baseline_inplace,0.0003131803590804338,50 +21,baseline_legacy,0.00048669124022126197,50 +21,baseline_inplace,0.0003487722761929035,50 +21,factored_inplace,0.00048093565739691256,50 +22,baseline_inplace,0.000310970526188612,50 +22,factored_inplace,0.0004317485820502043,50 +22,baseline_legacy,0.0005281844362616539,50 +23,factored_inplace,0.0004816211387515068,50 +23,baseline_legacy,0.0005441690050065518,50 +23,baseline_inplace,0.0012436784617602826,50 +24,baseline_legacy,0.0013620165828615426,50 +24,baseline_inplace,0.000990196019411087,50 +24,factored_inplace,0.0010849225427955389,50 +25,baseline_inplace,0.0019172614254057408,50 +25,factored_inplace,0.0009820526745170355,50 +25,baseline_legacy,0.0009186737984418869,50 +26,factored_inplace,0.0013663648813962937,50 +26,baseline_legacy,0.0009482460748404264,50 +26,baseline_inplace,0.0005478111188858747,50 +27,baseline_legacy,0.000548997139558196,50 +27,baseline_inplace,0.0003215675055980682,50 +27,factored_inplace,0.0004668480064719915,50 +28,baseline_inplace,0.0003313558641821146,50 +28,factored_inplace,0.00047064563259482386,50 +28,baseline_legacy,0.0005353047978132963,50 +29,factored_inplace,0.0006785523053258657,50 +29,baseline_legacy,0.000497497720643878,50 +29,baseline_inplace,0.000260401563718915,50 diff --git a/results/cpu-qwen35-2b/gain-factorization-optimized.log b/results/cpu-qwen35-2b/gain-factorization-optimized.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/gain-factorization-protocol.json b/results/cpu-qwen35-2b/gain-factorization-protocol.json new file mode 100644 index 0000000..32b18b7 --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-protocol.json @@ -0,0 +1,23 @@ +{ + "fixed_intervention_layer": 3, + "directions": [ + "q_to_k", + "k_to_q" + ], + "diagnostic_layers": [ + 3, + 7, + 11, + 15, + 19, + 23 + ], + "no_selection": true, + "no_training": true, + "precision": "FP32 product; no BF16 requantization", + "quality_gate": { + "mean_nll_delta": 0.01, + "sequence_p95_nll_delta": 0.05 + }, + "registered_unix": 1794202505.9768724 +} \ No newline at end of file diff --git a/results/cpu-qwen35-2b/gain-factorization-q_to_k-token-nll.npy b/results/cpu-qwen35-2b/gain-factorization-q_to_k-token-nll.npy new file mode 100644 index 0000000000000000000000000000000000000000..e856e746438de51b732bb31fdf65fdb0e27bfa8a GIT binary patch literal 1120 zcmbV~`!}0+9DrY9bt#pgR7AXyR5*>gwL8<{`w2R!YwF&0o3KWA%y`GtHN>`}n^wqi zscsY6<2YzU)#=(zhZ;6D>T*c8sxp_ABI;Ul%>IQvzdg^-k2EkWfPYQ{yM$%3F9?%A zPGX17#usJw8HZkdor09gG#H0(t|N48;@yWvdp8QEPA>4P{6CB*d$&Q1I@c)Y* zK{FX;kW?rp`zPe;#su2@x6)v1E2!mCrz)M8FuvkdQ>!+F_z`ba%5`%fpu6lXoCIqF zPb&OUO(4|n_c`DG!!RhyM^^_dVR7b{HyV(sS35I5$$P{Ou)* zKk{o?2;CmWKNFo;VN-zL96DJ}P{6Uk@@Ay_4#H-pW2!j=$X2vBa%L`bI0Nz26%pWCEKKm0oYfgIhG+L5Jzt`mANPp-`HB@6-Ni^ z=^P7>032-Uzvf&_U;##J;oiL5fC`@V=A0|uL_fC54oiU@~^0 zx$`O-Tw>J?$##(#t3N(wJcT3&3+-I=wV=*}5q}g}L#W=YzJ3!K3WRahc%mVQUDvJL zwH8s@0o@IU2c}SI3|>6~>WQE+E| zY~4WMZKv9h?;yObvFI%QH5wFZJiqU}jli{xnin;Nh#Eql+oT68!e;+7Q=3Sk@~zzQ zBmucC3C`zg0(RqCkFJLr-EAr{XFHfdD2IBV??nLtnOYStUPeUcN(B9$1?Y@59&SH& z2(a#it(B*y_$Rcx%cboI+g$Xm*62$KGOl!lxX#CA8 literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/gain-factorization-score-metrics.csv b/results/cpu-qwen35-2b/gain-factorization-score-metrics.csv new file mode 100644 index 0000000..4dfd8ff --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-score-metrics.csv @@ -0,0 +1,97 @@ +layer,direction,sample_id,split,score_max_abs_error,score_relative_l2,probability_max_abs_error,first_key_mass_a,first_key_mass_b,js_without_first_key,without_first_key_valid_rows,js_mean,js_p95,js_without_first_query,top5_overlap +3,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,5.101167139945906e-08,3.5762786865234375e-07,0.12333933264017105,0.12333933264017105,6.144742492608657e-09,248,6.2515415066854985e-09,3.3901077500786414e-08,6.453204193235251e-09,1.0 +3,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,5.091678723372976e-08,5.066394805908203e-07,0.1346932351589203,0.1346932053565979,6.3971117292283e-09,248,5.0883031121884414e-09,3.329163433818394e-08,5.252442036862703e-09,1.0 +3,q_to_k,cal-en-1,calibration,1.9073486328125e-06,5.108396212348145e-08,3.725290298461914e-07,0.1436830461025238,0.1436830461025238,6.142506059347852e-09,248,5.038649941724316e-09,2.9201892459695955e-08,5.2011870366186486e-09,1.0 +3,q_to_k,cal-en-2,calibration,1.9073486328125e-06,5.1701194575127235e-08,3.8743019104003906e-07,0.1500767469406128,0.1500767469406128,6.898510651609513e-09,248,5.6701336959008586e-09,3.627561184771366e-08,5.853041162851014e-09,1.0 +3,q_to_k,test-zh-1,heldout,1.9073486328125e-06,5.220060152896206e-08,4.172325134277344e-07,0.09449940919876099,0.09449941664934158,4.331650149680399e-09,248,5.2700910302405646e-09,3.2252330584015e-08,5.440094152930897e-09,1.0 +3,q_to_k,test-zh-2,heldout,1.9073486328125e-06,5.0557365349437256e-08,3.5762786865234375e-07,0.12233515083789825,0.12233515828847885,4.755000837519674e-09,248,5.405037306616123e-09,2.982928037909005e-08,5.579393391741405e-09,1.0 +3,q_to_k,test-en-1,heldout,1.9073486328125e-06,5.036456447011736e-08,4.76837158203125e-07,0.16284234821796417,0.16284234821796417,3.5884786253603806e-09,248,6.1204539214543274e-09,3.24787201577692e-08,6.317887990547888e-09,1.0 +3,q_to_k,test-en-2,heldout,1.9073486328125e-06,5.110061520200993e-08,4.76837158203125e-07,0.1765710860490799,0.1765711009502411,4.401169650947168e-09,248,4.359010929988472e-09,3.009398241715644e-08,4.4996242287709265e-09,1.0 +3,k_to_q,cal-zh-1,calibration,1.9073486328125e-06,5.1102714936484615e-08,3.2782554626464844e-07,0.12333933264017105,0.12333932518959045,5.54685852804937e-09,248,6.077549130623083e-09,3.364394274285587e-08,6.273598973649541e-09,1.0 +3,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,5.047857377998922e-08,5.066394805908203e-07,0.1346932351589203,0.1346932202577591,5.5039839352843956e-09,248,5.080743381569164e-09,3.255715697036976e-08,5.244638501267218e-09,1.0 +3,k_to_q,cal-en-1,calibration,1.9073486328125e-06,5.134420550367216e-08,4.172325134277344e-07,0.1436830461025238,0.1436830461025238,5.426067595237782e-09,248,6.617717041024207e-09,3.062589826186013e-08,6.831191612377552e-09,1.0 +3,k_to_q,cal-en-2,calibration,1.9073486328125e-06,5.226853937237364e-08,5.364418029785156e-07,0.1500767469406128,0.1500767469406128,7.92923859904704e-09,248,3.863607211940234e-09,2.7573278771342302e-08,3.988239516417025e-09,1.0 +3,k_to_q,test-zh-1,heldout,1.9073486328125e-06,5.123835134005697e-08,4.76837158203125e-07,0.09449940919876099,0.09449940919876099,3.631874356813114e-09,248,5.632322164217385e-09,2.992773318055697e-08,5.814010162197292e-09,1.0 +3,k_to_q,test-zh-2,heldout,1.9073486328125e-06,5.0224548540677525e-08,4.172325134277344e-07,0.12233515083789825,0.12233515083789825,5.022106286389771e-09,248,4.692121358118584e-09,3.066226383907633e-08,4.843480283511781e-09,1.0 +3,k_to_q,test-en-1,heldout,1.9073486328125e-06,4.9758794253491996e-08,4.76837158203125e-07,0.16284234821796417,0.16284234821796417,3.619864186177324e-09,248,6.1619935820544924e-09,3.4145102745242184e-08,6.360767468294171e-09,1.0 +3,k_to_q,test-en-2,heldout,1.9073486328125e-06,5.142298277550361e-08,2.980232238769531e-07,0.1765710860490799,0.1765710860490799,4.500570138787907e-09,248,5.100083466658134e-09,3.277366289466954e-08,5.264602087606818e-09,1.0 +7,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,5.222536694121921e-08,4.172325134277344e-07,0.17881479859352112,0.17881479859352112,5.7563616095990255e-09,248,5.532780456007913e-09,3.966695061308201e-08,5.711257244911394e-09,1.0 +7,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,5.170127993939104e-08,4.470348358154297e-07,0.1558690071105957,0.1558690071105957,4.651088403306858e-09,248,5.351785681284582e-09,4.158310318302938e-08,5.524424029346164e-09,1.0 +7,q_to_k,cal-en-1,calibration,1.9073486328125e-06,5.378773497110193e-08,8.046627044677734e-07,0.16970808804035187,0.16970807313919067,7.066096152641421e-09,248,4.739160619493532e-09,3.499418710362079e-08,4.892036553627577e-09,1.0 +7,q_to_k,cal-en-2,calibration,1.9073486328125e-06,5.317526550862134e-08,4.76837158203125e-07,0.1774885654449463,0.1774885654449463,2.2907555852214045e-09,248,4.155392474558539e-09,3.55765088499993e-08,4.289437249838102e-09,1.0 +7,q_to_k,test-zh-1,heldout,1.9073486328125e-06,5.211860231803155e-08,5.364418029785156e-07,0.13551732897758484,0.13551732897758484,3.869626841179752e-09,248,4.760383198743057e-09,3.7595043522742344e-08,4.91394391843869e-09,1.0 +7,q_to_k,test-zh-2,heldout,1.9073486328125e-06,5.3270193367964134e-08,3.8743019104003906e-07,0.16214892268180847,0.16214892268180847,5.834590144360163e-09,248,3.3417555389547715e-09,3.232060308278051e-08,3.4495541978429856e-09,1.0 +7,q_to_k,test-en-1,heldout,1.9073486328125e-06,5.1701003812639285e-08,5.364418029785156e-07,0.16952991485595703,0.16952991485595703,4.620759330720148e-09,248,3.3314184744170916e-09,3.060024056367183e-08,3.4388836223087083e-09,1.0 +7,q_to_k,test-en-2,heldout,1.9073486328125e-06,5.3793891417825e-08,5.364418029785156e-07,0.20624876022338867,0.20624877512454987,5.72924729880242e-09,248,5.260036406440349e-09,3.098259782063906e-08,5.429714899918281e-09,1.0 +7,k_to_q,cal-zh-1,calibration,1.9073486328125e-06,5.2622550638818123e-08,5.066394805908203e-07,0.17881479859352112,0.17881478369235992,5.618802756401919e-09,248,3.0388158656080577e-09,3.318642782801362e-08,3.1368421193889162e-09,1.0 +7,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,5.2178797749660394e-08,4.76837158203125e-07,0.1558690071105957,0.1558690220117569,5.6034279438677e-09,248,6.106143590756119e-09,3.9555089870191296e-08,6.3031158070714355e-09,1.0 +7,k_to_q,cal-en-1,calibration,1.9073486328125e-06,5.331118520036339e-08,5.364418029785156e-07,0.16970808804035187,0.16970807313919067,4.860980507004342e-09,248,3.6745022580220166e-09,3.220852917706907e-08,3.7930347751569116e-09,1.0 +7,k_to_q,cal-en-2,calibration,1.9073486328125e-06,5.3509503240043504e-08,4.172325134277344e-07,0.1774885654449463,0.1774885505437851,2.684577671274724e-09,248,3.914189861120576e-09,3.4250152936010636e-08,4.040454193443566e-09,1.0 +7,k_to_q,test-zh-1,heldout,1.9073486328125e-06,5.186216628978779e-08,5.364418029785156e-07,0.13551732897758484,0.13551732897758484,7.021717873811895e-09,248,3.1829396895943773e-09,3.381542512670421e-08,3.285615113313156e-09,1.0 +7,k_to_q,test-zh-2,heldout,1.9073486328125e-06,5.435688576791881e-08,5.960464477539062e-07,0.16214892268180847,0.16214892268180847,4.47947234860635e-09,248,5.434995564712608e-09,3.8530473034370516e-08,5.610317987958524e-09,1.0 +7,k_to_q,test-en-1,heldout,1.9073486328125e-06,5.182678341307826e-08,4.76837158203125e-07,0.16952991485595703,0.16952991485595703,5.902526023504606e-09,248,3.811826410071717e-09,3.153426675339688e-08,3.934788495030261e-09,1.0 +7,k_to_q,test-en-2,heldout,1.9073486328125e-06,5.389036154327309e-08,5.364418029785156e-07,0.20624876022338867,0.20624877512454987,4.393694741366971e-09,248,6.306869693162298e-09,3.442805152076289e-08,6.510317174246438e-09,1.0 +11,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,5.3373433612649885e-08,4.76837158203125e-07,0.24492809176445007,0.24492809176445007,5.236138189701478e-09,248,4.897512173585028e-09,3.2079633172088506e-08,5.055496465899978e-09,1.0 +11,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,5.3680472349671996e-08,4.76837158203125e-07,0.18575024604797363,0.18575023114681244,4.706864675796396e-09,248,6.692440379651998e-09,3.841551432515189e-08,6.908325467236409e-09,1.0 +11,q_to_k,cal-en-1,calibration,1.9073486328125e-06,5.413658613357613e-08,6.556510925292969e-07,0.24272800981998444,0.24272799491882324,5.221439280944651e-09,248,5.445071948884106e-09,3.742365706216333e-08,5.620719445431632e-09,1.0 +11,q_to_k,cal-en-2,calibration,1.9073486328125e-06,5.431145274674744e-08,6.258487701416016e-07,0.2525215446949005,0.2525215148925781,4.965174049686993e-09,248,3.2684353001855015e-09,3.038027784896258e-08,3.373868739942054e-09,1.0 +11,q_to_k,test-zh-1,heldout,1.9073486328125e-06,4.975615695445315e-08,4.76837158203125e-07,0.20683012902736664,0.20683012902736664,4.743543779994752e-09,248,5.727621932294369e-09,3.784743896062537e-08,5.912383915784858e-09,1.0 +11,q_to_k,test-zh-2,heldout,1.9073486328125e-06,5.341885392276808e-08,5.066394805908203e-07,0.2263796031475067,0.2263796031475067,5.8260534174792156e-09,248,4.675535514309104e-09,3.7589622081668495e-08,4.826359312204431e-09,1.0 +11,q_to_k,test-en-1,heldout,1.9073486328125e-06,5.3474540038830716e-08,4.76837158203125e-07,0.242807075381279,0.242807075381279,5.4214881473058085e-09,248,3.967941974991618e-09,2.985759550711009e-08,4.095940031589862e-09,1.0 +11,q_to_k,test-en-2,heldout,1.9073486328125e-06,5.447992218148785e-08,5.960464477539062e-07,0.2930097281932831,0.2930097281932831,6.2322125238267745e-09,248,3.5252292196474855e-09,3.577358498318972e-08,3.6389462554353713e-09,1.0 +11,k_to_q,cal-zh-1,calibration,1.9073486328125e-06,5.28470006223089e-08,4.470348358154297e-07,0.24492809176445007,0.24492809176445007,5.811663150723234e-09,248,5.133418579106319e-09,3.507095414079231e-08,5.29901278412126e-09,1.0 +11,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,5.340567432956712e-08,5.066394805908203e-07,0.18575024604797363,0.18575024604797363,2.0245674026142524e-09,248,5.099674460495862e-09,3.472874965382289e-08,5.26418020285746e-09,1.0 +11,k_to_q,cal-en-1,calibration,1.9073486328125e-06,5.450061260733951e-08,5.066394805908203e-07,0.24272800981998444,0.24272799491882324,6.1068083923032646e-09,248,6.209086134134623e-09,3.4522884106991114e-08,6.409379249561198e-09,1.0 +11,k_to_q,cal-en-2,calibration,1.9073486328125e-06,5.419026691337401e-08,5.960464477539062e-07,0.2525215446949005,0.2525215446949005,6.355903803267893e-09,248,4.629203242956237e-09,3.0078894042162574e-08,4.778532236571209e-09,1.0 +11,k_to_q,test-zh-1,heldout,2.86102294921875e-06,5.101806004082587e-08,4.76837158203125e-07,0.20683012902736664,0.20683011412620544,4.4362411522058665e-09,248,5.5794813214049555e-09,3.09307068846465e-08,5.759464460908248e-09,1.0 +11,k_to_q,test-zh-2,heldout,1.9073486328125e-06,5.354370300835508e-08,5.364418029785156e-07,0.2263796031475067,0.22637958824634552,5.91522208992501e-09,248,5.174931594353893e-09,3.6706762074345534e-08,5.341864728336532e-09,1.0 +11,k_to_q,test-en-1,heldout,1.9073486328125e-06,5.454591675148741e-08,5.066394805908203e-07,0.242807075381279,0.24280709028244019,4.439097978092832e-09,248,5.318464335601902e-09,3.0657005822831707e-08,5.490027543686438e-09,1.0 +11,k_to_q,test-en-2,heldout,2.86102294921875e-06,5.424732981759204e-08,6.854534149169922e-07,0.2930097281932831,0.2930097281932831,6.705069388601714e-09,248,4.751804283387173e-09,3.399427228600871e-08,4.90508833550507e-09,1.0 +15,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,5.3514833863035024e-08,4.470348358154297e-07,0.33434635400772095,0.33434635400772095,4.285159338479616e-09,248,4.447109791527737e-09,3.414147897728981e-08,4.590564817164022e-09,1.0 +15,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,5.218853708885142e-08,4.76837158203125e-07,0.30227771401405334,0.30227774381637573,5.229982669163746e-09,248,7.101956356336814e-09,4.079232240883357e-08,7.3310517656466345e-09,1.0 +15,q_to_k,cal-en-1,calibration,1.9073486328125e-06,5.4103478102894914e-08,4.76837158203125e-07,0.3320315480232239,0.3320315480232239,5.162816396619974e-09,248,4.775797535216952e-09,3.1169314240742096e-08,4.929855634827618e-09,1.0 +15,q_to_k,cal-en-2,calibration,1.9073486328125e-06,5.31591652511587e-08,3.5762786865234375e-07,0.35803988575935364,0.35803985595703125,5.665685698375e-09,248,3.281495741802587e-09,3.316486996141066e-08,3.3873504001746824e-09,1.0 +15,q_to_k,test-zh-1,heldout,1.9073486328125e-06,5.2584229204196615e-08,5.960464477539062e-07,0.3134230375289917,0.3134230375289917,4.611414805566483e-09,248,3.2052387410885785e-09,3.137078863346687e-08,3.3086335893273144e-09,1.0 +15,q_to_k,test-zh-2,heldout,2.86102294921875e-06,5.334021097494736e-08,7.152557373046875e-07,0.31523996591567993,0.31523996591567993,6.134295738036144e-09,248,3.099508649739846e-09,3.3302633539733506e-08,3.1994928928469335e-09,1.0 +15,q_to_k,test-en-1,heldout,1.9073486328125e-06,5.277330399580438e-08,5.662441253662109e-07,0.35721129179000854,0.35721129179000854,3.875603393765914e-09,248,6.00105520831562e-09,3.1643388354041235e-08,6.194637691692151e-09,1.0 +15,q_to_k,test-en-2,heldout,1.9073486328125e-06,5.4245038413836726e-08,5.364418029785156e-07,0.3785627782344818,0.3785627782344818,5.588637108644434e-09,248,5.273080638801275e-09,3.732484543661485e-08,5.443180128850145e-09,1.0 +15,k_to_q,cal-zh-1,calibration,1.9073486328125e-06,5.370409043564381e-08,4.76837158203125e-07,0.33434635400772095,0.33434635400772095,5.413625991934623e-09,248,7.632287690739759e-09,3.8797516310751234e-08,7.878490748680633e-09,1.0 +15,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,5.2645265789812776e-08,5.066394805908203e-07,0.30227771401405334,0.30227774381637573,6.007307984390309e-09,248,4.376814466411361e-09,3.4955100147726625e-08,4.518001972542152e-09,1.0 +15,k_to_q,cal-en-1,calibration,1.9073486328125e-06,5.3713584045477537e-08,5.364418029785156e-07,0.3320315480232239,0.3320315480232239,3.789843550094929e-09,248,4.10175182707917e-09,3.3631373241860274e-08,4.2340664307971565e-09,1.0 +15,k_to_q,cal-en-2,calibration,1.9073486328125e-06,5.329913616712736e-08,4.470348358154297e-07,0.35803988575935364,0.35803985595703125,5.377542411366676e-09,248,3.882600019267102e-09,3.18341726313065e-08,4.007845166853485e-09,1.0 +15,k_to_q,test-zh-1,heldout,1.9073486328125e-06,5.1740198395570186e-08,5.960464477539062e-07,0.3134230375289917,0.3134230077266693,5.392958968286621e-09,248,3.644287094317633e-09,2.9920162347707446e-08,3.761844613592302e-09,1.0 +15,k_to_q,test-zh-2,heldout,1.9073486328125e-06,5.17587827155604e-08,7.152557373046875e-07,0.31523996591567993,0.31523996591567993,6.041951827739922e-09,248,4.992775970436014e-09,3.2279736217333266e-08,5.1538333600831265e-09,1.0 +15,k_to_q,test-en-1,heldout,1.9073486328125e-06,5.262549006299803e-08,6.258487701416016e-07,0.35721129179000854,0.35721129179000854,4.4030894486013494e-09,248,4.485939619769397e-09,3.2921569470545364e-08,4.630647421066669e-09,1.0 +15,k_to_q,test-en-2,heldout,1.9073486328125e-06,5.460989035027149e-08,5.662441253662109e-07,0.3785627782344818,0.3785627782344818,6.211682723744616e-09,248,3.997459696591932e-09,3.3428371182253613e-08,4.1264098804560945e-09,1.0 +19,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,4.990160271767093e-08,5.364418029785156e-07,0.08087001740932465,0.08087002485990524,4.9786765821124845e-09,248,4.393741370734006e-09,3.151729544015325e-08,4.535475106592912e-09,1.0 +19,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,4.9742994871294574e-08,4.76837158203125e-07,0.08035354316234589,0.08035353571176529,5.756638277176762e-09,248,4.049901303204706e-09,3.086056210577226e-08,4.180543466958397e-09,1.0 +19,q_to_k,cal-en-1,calibration,3.814697265625e-06,5.087667850358471e-08,5.066394805908203e-07,0.24834147095680237,0.24834147095680237,4.231536010479431e-09,248,4.469023373587788e-09,2.7867795182601185e-08,4.613185389246155e-09,1.0 +19,q_to_k,cal-en-2,calibration,2.86102294921875e-06,5.025801246712497e-08,4.470348358154297e-07,0.169009268283844,0.169009268283844,5.525796265004601e-09,248,4.058557934172313e-09,2.8106194704946574e-08,4.1894789859497905e-09,1.0 +19,q_to_k,test-zh-1,heldout,1.9073486328125e-06,5.0221761295632774e-08,4.172325134277344e-07,0.06396828591823578,0.06396827846765518,3.353163524622005e-09,248,4.251817564693283e-09,2.829117207170384e-08,4.3889731848878455e-09,1.0 +19,q_to_k,test-zh-2,heldout,1.9073486328125e-06,5.0605528455235685e-08,5.960464477539062e-07,0.07303687185049057,0.07303687930107117,5.027091631859548e-09,248,3.928162239930089e-09,3.122080727280263e-08,4.054877322801076e-09,1.0 +19,q_to_k,test-en-1,heldout,1.9073486328125e-06,5.211114332289351e-08,5.364418029785156e-07,0.2881055176258087,0.2881055176258087,3.5609850623785633e-09,248,4.370760198213475e-09,3.161588324473996e-08,4.511752305091932e-09,1.0 +19,q_to_k,test-en-2,heldout,3.814697265625e-06,5.1614248682850084e-08,4.172325134277344e-07,0.08680859953165054,0.08680859953165054,4.462207936484219e-09,248,4.6642192330637045e-09,3.021447270157296e-08,4.814677989628535e-09,1.0 +19,k_to_q,cal-zh-1,calibration,1.9073486328125e-06,5.113471077024349e-08,3.8743019104003906e-07,0.08087001740932465,0.08087001740932465,4.6697485878155476e-09,248,5.351755927307522e-09,3.250153568501446e-08,5.524393387190685e-09,1.0 +19,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,5.029181744672548e-08,5.662441253662109e-07,0.08035354316234589,0.08035354316234589,4.907285688915408e-09,248,5.877964781575429e-09,3.508033685761802e-08,6.06757666332669e-09,1.0 +19,k_to_q,cal-en-1,calibration,1.9073486328125e-06,5.1180455196819575e-08,5.960464477539062e-07,0.24834147095680237,0.24834147095680237,5.958978199771536e-09,248,3.994703678955602e-09,2.9186557171101413e-08,4.123565044977795e-09,1.0 +19,k_to_q,cal-en-2,calibration,1.9073486328125e-06,5.087171697055175e-08,5.662441253662109e-07,0.169009268283844,0.1690092831850052,6.885077397100758e-09,248,4.357643579311343e-09,2.7700329141566726e-08,4.498212913262023e-09,1.0 +19,k_to_q,test-zh-1,heldout,1.9073486328125e-06,4.9891522075043136e-08,4.172325134277344e-07,0.06396828591823578,0.06396828591823578,3.918689817083987e-09,248,6.348101155850827e-09,3.146694638189729e-08,6.552878684118468e-09,1.0 +19,k_to_q,test-zh-2,heldout,1.9073486328125e-06,5.0542783963068e-08,5.066394805908203e-07,0.07303687185049057,0.07303687185049057,6.0575562343956335e-09,248,3.8445029382216944e-09,2.87921402275515e-08,3.968519290964423e-09,1.0 +19,k_to_q,test-en-1,heldout,1.9073486328125e-06,5.202611404804706e-08,5.364418029785156e-07,0.2881055176258087,0.28810548782348633,4.291980548742913e-09,248,5.839524419570807e-09,2.908876339802191e-08,6.027895960158958e-09,1.0 +19,k_to_q,test-en-2,heldout,1.9073486328125e-06,5.31186969928777e-08,4.172325134277344e-07,0.08680859953165054,0.08680859208106995,5.296885152716868e-09,248,6.1070810630781125e-09,2.844184265882177e-08,6.304083477459699e-09,1.0 +23,q_to_k,cal-zh-1,calibration,1.9073486328125e-06,4.932807759644251e-08,4.470348358154297e-07,0.06724601984024048,0.06724601984024048,4.144036225284253e-09,248,4.558249777630863e-09,2.929247777672117e-08,4.705289935458268e-09,1.0 +23,q_to_k,cal-zh-2,calibration,1.9073486328125e-06,4.9029117626786305e-08,4.76837158203125e-07,0.06764671951532364,0.06764672696590424,3.972651985151288e-09,248,4.91240381705893e-09,3.200177900453127e-08,5.070868613898938e-09,1.0 +23,q_to_k,cal-en-1,calibration,3.814697265625e-06,4.95385074720159e-08,3.8743019104003906e-07,0.08747006952762604,0.08747006952762604,3.265131720553427e-09,248,3.707365081595526e-09,3.0631660763447144e-08,3.826957417629728e-09,1.0 +23,q_to_k,cal-en-2,calibration,1.9073486328125e-06,4.922304127933099e-08,4.76837158203125e-07,0.08903923630714417,0.08903922885656357,5.270068825780072e-09,248,3.997369546482332e-09,2.7743276120872906e-08,4.126317065811236e-09,1.0 +23,q_to_k,test-zh-1,heldout,1.9073486328125e-06,4.8364042774388367e-08,3.5762786865234375e-07,0.05931711941957474,0.05931711569428444,3.816367222242434e-09,248,3.653502167466627e-09,2.7387025980374347e-08,3.771357004467291e-09,1.0 +23,q_to_k,test-zh-2,heldout,3.814697265625e-06,4.96448251794115e-08,5.364418029785156e-07,0.08312603086233139,0.08312603831291199,5.321914020584018e-09,248,3.6995391194949434e-09,2.9038851323548442e-08,3.818878990813346e-09,1.0 +23,q_to_k,test-en-1,heldout,3.814697265625e-06,5.034978202226261e-08,4.023313522338867e-07,0.1146349161863327,0.1146349087357521,4.471692793828197e-09,248,3.4011016225576896e-09,2.928134534840865e-08,3.5108145279849623e-09,1.0 +23,q_to_k,test-en-2,heldout,3.814697265625e-06,4.994535705946019e-08,4.470348358154297e-07,0.08886055648326874,0.08886055648326874,4.2449421755463845e-09,248,3.4883309574240684e-09,2.892927319919636e-08,3.600857834129556e-09,1.0 +23,k_to_q,cal-zh-1,calibration,2.86102294921875e-06,4.8831644467980875e-08,4.76837158203125e-07,0.06724601984024048,0.06724601984024048,3.977453033598977e-09,248,4.496496952555162e-09,2.8416268449404924e-08,4.64154537027639e-09,1.0 +23,k_to_q,cal-zh-2,calibration,1.9073486328125e-06,4.9029117626786305e-08,4.470348358154297e-07,0.06764671951532364,0.06764672696590424,4.682830567759311e-09,248,2.651090902361375e-09,2.4917778063127116e-08,2.736610049680621e-09,1.0 +23,k_to_q,cal-en-1,calibration,3.814697265625e-06,5.024324385126141e-08,3.8743019104003906e-07,0.08747006952762604,0.08747006952762604,3.7081571147012937e-09,248,4.977271039763309e-09,3.31379155227296e-08,5.13782838496013e-09,1.0 +23,k_to_q,cal-en-2,calibration,1.9073486328125e-06,4.8518648048109764e-08,2.980232238769531e-07,0.08903923630714417,0.08903922885656357,3.85932619195728e-09,248,4.874880499272649e-09,2.9354460195918364e-08,5.0321347089266055e-09,1.0 +23,k_to_q,test-zh-1,heldout,3.814697265625e-06,4.978168384729527e-08,4.172325134277344e-07,0.05931711941957474,0.05931711941957474,4.285771737499999e-09,248,4.133625886026948e-09,2.540235399806079e-08,4.266968556265738e-09,1.0 +23,k_to_q,test-zh-2,heldout,1.9073486328125e-06,4.943963198590656e-08,6.556510925292969e-07,0.08312603086233139,0.08312603086233139,3.7222060988995054e-09,248,4.004627740528122e-09,2.6530234009669584e-08,4.133809294870616e-09,1.0 +23,k_to_q,test-en-1,heldout,3.814697265625e-06,4.9439166765060464e-08,4.023313522338867e-07,0.1146349161863327,0.1146349161863327,6.534782048817078e-09,248,4.612270565473864e-09,2.6872147174117345e-08,4.7610533293607205e-09,1.0 +23,k_to_q,test-en-2,heldout,1.9073486328125e-06,4.8735765106561524e-08,4.172325134277344e-07,0.08886055648326874,0.08886055648326874,4.1334708988927105e-09,248,4.0138719015203606e-09,2.8323970724386527e-08,4.1433514397226645e-09,1.0 diff --git a/results/cpu-qwen35-2b/gain-factorization-summary.json b/results/cpu-qwen35-2b/gain-factorization-summary.json new file mode 100644 index 0000000..016c911 --- /dev/null +++ b/results/cpu-qwen35-2b/gain-factorization-summary.json @@ -0,0 +1,46 @@ +{ + "state": "completed", + "records": [], + "interventions": [ + { + "layer": 3, + "direction": "q_to_k", + "sequence_nll_deltas": [ + 3.114725206643243e-07, + -5.23134924712565e-07, + 1.7465536439331686e-07, + 1.733758607791458e-07 + ], + "mean_nll_delta": 3.40922052810555e-08, + "sequence_p95_delta": 2.9094994722367315e-07, + "passed": true + }, + { + "layer": 3, + "direction": "k_to_q", + "sequence_nll_deltas": [ + 4.0256782884995346e-07, + -8.45824208006718e-07, + 2.1304516684139685e-07, + -3.860568877911419e-07 + ], + "mean_nll_delta": -1.540670250266274e-07, + "sequence_p95_delta": 3.741394295486699e-07, + "passed": true + } + ], + "maximum_score_abs_error": 3.814697265625e-06, + "maximum_probability_abs_error": 8.046627044677734e-07, + "bidirectional_heldout_pass": true, + "elementwise_gain_multiplies_saved_per_token_layer": { + "q_to_k": 1536, + "k_to_q": 384 + }, + "original_bf16_payload_bytes": 1024, + "factored_lossless_mixed_payload_bytes": 1024, + "fp32_cached_gain_payload_before": 2048, + "fp32_cached_gain_payload_after": 1280, + "claim_limit": "Exact real-arithmetic identity only on non-RoPE coordinates; empirical FP32/NLL checks on tiny text pilot. Not evidence that two existing full layers interchange, not model-wide speedup.", + "elapsed_seconds": 232.08875080291182, + "peak_rss_kib": 83704 +} diff --git a/results/cpu-qwen35-2b/gain-factorization.log b/results/cpu-qwen35-2b/gain-factorization.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/install-torch-disk-tmp.log b/results/cpu-qwen35-2b/install-torch-disk-tmp.log new file mode 100644 index 0000000..a6a9a02 --- /dev/null +++ b/results/cpu-qwen35-2b/install-torch-disk-tmp.log @@ -0,0 +1,39 @@ +Looking in indexes: https://download.pytorch.org/whl/cpu +Collecting torch + Downloading https://download-r2.pytorch.org/whl/cpu/torch-2.15.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl.metadata (35 kB) +Collecting filelock (from torch) + Downloading filelock-4.2.4-py3-none-any.whl.metadata (2.0 kB) +Collecting typing-extensions>=4.13.0 (from torch) + Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +Collecting setuptools>=77.0.3 (from torch) + Downloading https://download.pytorch.org/whl/setuptools-78.1.0-py3-none-any.whl.metadata (6.6 kB) +Collecting sympy>=1.13.3 (from torch) + Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +Collecting networkx>=2.5.1 (from torch) + Downloading networkx-3.7-py3-none-any.whl.metadata (6.7 kB) +Collecting jinja2 (from torch) + Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) +Collecting fsspec>=0.8.5 (from torch) + Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +Collecting mpmath<1.4,>=1.1.0 (from sympy>=1.13.3->torch) + Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +Collecting MarkupSafe>=2.0 (from jinja2->torch) + Downloading https://download.pytorch.org/whl/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +Downloading https://download-r2.pytorch.org/whl/cpu/torch-2.15.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl (209.5 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.5/209.5 MB 235.8 kB/s eta 0:00:00 +Downloading fsspec-2026.9.0-py3-none-any.whl (221 kB) +Downloading networkx-3.7-py3-none-any.whl (2.1 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 143.1 kB/s eta 0:00:00 +Downloading https://download.pytorch.org/whl/setuptools-78.1.0-py3-none-any.whl (1.3 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 368.1 kB/s eta 0:00:00 +Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 27.0 kB/s eta 0:00:00 +Downloading mpmath-1.3.0-py3-none-any.whl (536 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 19.7 kB/s eta 0:00:00 +Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) +Downloading filelock-4.2.4-py3-none-any.whl (162 kB) +Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl (134 kB) +Downloading https://download.pytorch.org/whl/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (23 kB) +Installing collected packages: mpmath, typing-extensions, sympy, setuptools, networkx, MarkupSafe, fsspec, filelock, jinja2, torch + +Successfully installed MarkupSafe-3.0.3 filelock-4.2.4 fsspec-2026.9.0 jinja2-3.1.6 mpmath-1.3.0 networkx-3.7 setuptools-78.1.0 sympy-1.14.0 torch-2.15.0+cpu typing-extensions-4.16.0 diff --git a/results/cpu-qwen35-2b/install-torch.log b/results/cpu-qwen35-2b/install-torch.log new file mode 100644 index 0000000..77c5ad6 --- /dev/null +++ b/results/cpu-qwen35-2b/install-torch.log @@ -0,0 +1,25 @@ +Looking in indexes: https://download.pytorch.org/whl/cpu +Collecting torch + Downloading https://download-r2.pytorch.org/whl/cpu/torch-2.15.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl.metadata (35 kB) +Collecting filelock (from torch) + Downloading filelock-4.2.4-py3-none-any.whl.metadata (2.0 kB) +Collecting typing-extensions>=4.13.0 (from torch) + Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +Collecting setuptools>=77.0.3 (from torch) + Downloading https://download.pytorch.org/whl/setuptools-78.1.0-py3-none-any.whl.metadata (6.6 kB) +Collecting sympy>=1.13.3 (from torch) + Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +Collecting networkx>=2.5.1 (from torch) + Downloading networkx-3.7-py3-none-any.whl.metadata (6.7 kB) +Collecting jinja2 (from torch) + Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) +Collecting fsspec>=0.8.5 (from torch) + Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +Collecting mpmath<1.4,>=1.1.0 (from sympy>=1.13.3->torch) + Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +Collecting MarkupSafe>=2.0 (from jinja2->torch) + Downloading https://download.pytorch.org/whl/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +Downloading https://download-r2.pytorch.org/whl/cpu/torch-2.15.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl (209.5 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 145.8/209.5 MB 447.0 kB/s eta 0:02:23 +ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device + diff --git a/results/cpu-qwen35-2b/manifest.json b/results/cpu-qwen35-2b/manifest.json new file mode 100644 index 0000000..35e4677 --- /dev/null +++ b/results/cpu-qwen35-2b/manifest.json @@ -0,0 +1,34 @@ +{ + "repo": "Qwen/Qwen3.5-2B", + "revision": "15852e8c16360a2fea060d615a32b45270f8a8fc", + "expected_bytes": 4548351670, + "started_unix": 1794169446.8545816, + "files": [ + { + "name": "README.md", + "bytes": 62814, + "sha256": "c0e83a849c776e6fa843d011f023132d942a0f0140d903205bf1c363adad2275", + "upstream_sha256": null + }, + { + "name": "config.json", + "bytes": 2908, + "sha256": "ed1c1723241f23f7f4e23430759cbd7dcfb4103cbdfe052bfe7626b57c2615b4", + "upstream_sha256": null + }, + { + "name": "model.safetensors-00001-of-00001.safetensors", + "bytes": 4548221488, + "sha256": "aa33250c4fc64891ddfaba3a314fd9542ea371843c387178b425fbcc5ed680b1", + "upstream_sha256": "aa33250c4fc64891ddfaba3a314fd9542ea371843c387178b425fbcc5ed680b1" + }, + { + "name": "model.safetensors.index.json", + "bytes": 64460, + "sha256": "aca8afed9da75b0f050b408d270766fd77627f1af401e240f61c3b47d0db02f9", + "upstream_sha256": null + } + ], + "license": "apache-2.0", + "completed_unix": 1794173525.0766253 +} \ No newline at end of file diff --git a/results/cpu-qwen35-2b/model_config.json b/results/cpu-qwen35-2b/model_config.json new file mode 100644 index 0000000..d30a15b --- /dev/null +++ b/results/cpu-qwen35-2b/model_config.json @@ -0,0 +1,96 @@ +{ + "architectures": [ + "Qwen3_5ForConditionalGeneration" + ], + "image_token_id": 248056, + "model_type": "qwen3_5", + "text_config": { + "attention_bias": false, + "attention_dropout": 0.0, + "attn_output_gate": true, + "dtype": "bfloat16", + "eos_token_id": 248044, + "full_attention_interval": 4, + "head_dim": 256, + "hidden_act": "silu", + "hidden_size": 2048, + "initializer_range": 0.02, + "intermediate_size": 6144, + "layer_types": [ + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention", + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention", + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention", + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention", + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention", + "linear_attention", + "linear_attention", + "linear_attention", + "full_attention" + ], + "linear_conv_kernel_dim": 4, + "linear_key_head_dim": 128, + "linear_num_key_heads": 16, + "linear_num_value_heads": 16, + "linear_value_head_dim": 128, + "max_position_embeddings": 262144, + "mlp_only_layers": [], + "model_type": "qwen3_5_text", + "mtp_num_hidden_layers": 1, + "mtp_use_dedicated_embeddings": false, + "num_attention_heads": 8, + "num_hidden_layers": 24, + "num_key_value_heads": 2, + "rms_norm_eps": 1e-06, + "tie_word_embeddings": true, + "use_cache": true, + "vocab_size": 248320, + "mamba_ssm_dtype": "float32", + "rope_parameters": { + "mrope_interleaved": true, + "mrope_section": [ + 11, + 11, + 10 + ], + "rope_type": "default", + "rope_theta": 10000000, + "partial_rotary_factor": 0.25 + } + }, + "tie_word_embeddings": true, + "transformers_version": "4.57.0.dev0", + "video_token_id": 248057, + "vision_config": { + "deepstack_visual_indexes": [], + "depth": 24, + "hidden_act": "gelu_pytorch_tanh", + "hidden_size": 1024, + "in_channels": 3, + "initializer_range": 0.02, + "intermediate_size": 4096, + "model_type": "qwen3_5", + "num_heads": 16, + "num_position_embeddings": 2304, + "out_hidden_size": 2048, + "patch_size": 16, + "spatial_merge_size": 2, + "temporal_patch_size": 2 + }, + "vision_end_token_id": 248054, + "vision_start_token_id": 248053 +} \ No newline at end of file diff --git a/results/cpu-qwen35-2b/neuron-reuse-protocol.json b/results/cpu-qwen35-2b/neuron-reuse-protocol.json new file mode 100644 index 0000000..8919674 --- /dev/null +++ b/results/cpu-qwen35-2b/neuron-reuse-protocol.json @@ -0,0 +1,29 @@ +{ + "layers": [ + 5, + 6, + 20, + 21 + ], + "unit": "post_silu_gate_times_up_scalar_function; keep each output column", + "thresholds": [ + 0.05, + 0.1, + 0.2 + ], + "maximum_directional_relative_l2": 0.2, + "cosine_min": 0.98, + "pearson_min": 0.95, + "rms_floor": "at least within-layer median calibration neuron RMS", + "std_over_rms_min": 0.25, + "effective_energy_tokens_min": 16, + "max_selected_pairs": 1, + "selection": "smallest worst directional calibration error; then layer/id", + "heldout_per_text_error_max": 0.35, + "heldout_quality_mean_nll_delta_max": 0.01, + "heldout_quality_sequence_p95_delta_max": 0.05, + "training": false, + "scale_fitting": false, + "cost_required": false, + "registered_unix": 1794203413.872667 +} diff --git a/results/cpu-qwen35-2b/neuron-reuse-search-summary.json b/results/cpu-qwen35-2b/neuron-reuse-search-summary.json new file mode 100644 index 0000000..3c55252 --- /dev/null +++ b/results/cpu-qwen35-2b/neuron-reuse-search-summary.json @@ -0,0 +1,54 @@ +[ + { + "layer": 5, + "neurons": 6144, + "eligible_neurons": 2111, + "eligible_unique_pairs_checked": 2227105, + "rms_floor": 0.05843841928142779, + "calibration_pair_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 0 + }, + "best": null + }, + { + "layer": 6, + "neurons": 6144, + "eligible_neurons": 2090, + "eligible_unique_pairs_checked": 2183005, + "rms_floor": 0.05875614556680463, + "calibration_pair_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 0 + }, + "best": null + }, + { + "layer": 20, + "neurons": 6144, + "eligible_neurons": 1699, + "eligible_unique_pairs_checked": 1442451, + "rms_floor": 0.1179593664401982, + "calibration_pair_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 0 + }, + "best": null + }, + { + "layer": 21, + "neurons": 6144, + "eligible_neurons": 1788, + "eligible_unique_pairs_checked": 1597578, + "rms_floor": 0.12231686838397056, + "calibration_pair_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 0 + }, + "best": null + } +] diff --git a/results/cpu-qwen35-2b/neuron-reuse-selection.json b/results/cpu-qwen35-2b/neuron-reuse-selection.json new file mode 100644 index 0000000..ae285cb --- /dev/null +++ b/results/cpu-qwen35-2b/neuron-reuse-selection.json @@ -0,0 +1,4 @@ +{ + "selected": null, + "selection_uses_heldout": false +} diff --git a/results/cpu-qwen35-2b/neuron-reuse-summary.json b/results/cpu-qwen35-2b/neuron-reuse-summary.json new file mode 100644 index 0000000..51c6e9c --- /dev/null +++ b/results/cpu-qwen35-2b/neuron-reuse-summary.json @@ -0,0 +1,10 @@ +{ + "state": "completed", + "selected": null, + "function_pass": false, + "interventions": [], + "empirical_repeated_function_positive": false, + "claim_limit": "Distinct learned scalar MLP subfunctions on the specified short-text distribution; not whole-layer duplication, global equivalence or broad task-capability proof. No performance requirement.", + "elapsed_seconds": 55.004304428584874, + "peak_rss_kib": 185036 +} diff --git a/results/cpu-qwen35-2b/neuron-reuse.log b/results/cpu-qwen35-2b/neuron-reuse.log new file mode 100644 index 0000000..822a75d --- /dev/null +++ b/results/cpu-qwen35-2b/neuron-reuse.log @@ -0,0 +1,4 @@ +{"layer": 5, "neurons": 6144, "eligible_neurons": 2111, "eligible_unique_pairs_checked": 2227105, "rms_floor": 0.05843841928142779, "calibration_pair_counts": {"0.05": 0, "0.1": 0, "0.2": 0}, "best": null} +{"layer": 6, "neurons": 6144, "eligible_neurons": 2090, "eligible_unique_pairs_checked": 2183005, "rms_floor": 0.05875614556680463, "calibration_pair_counts": {"0.05": 0, "0.1": 0, "0.2": 0}, "best": null} +{"layer": 20, "neurons": 6144, "eligible_neurons": 1699, "eligible_unique_pairs_checked": 1442451, "rms_floor": 0.1179593664401982, "calibration_pair_counts": {"0.05": 0, "0.1": 0, "0.2": 0}, "best": null} +{"layer": 21, "neurons": 6144, "eligible_neurons": 1788, "eligible_unique_pairs_checked": 1597578, "rms_floor": 0.12231686838397056, "calibration_pair_counts": {"0.05": 0, "0.1": 0, "0.2": 0}, "best": null} diff --git a/results/cpu-qwen35-2b/norm-repetition-12-uses-13-token-nll.npy b/results/cpu-qwen35-2b/norm-repetition-12-uses-13-token-nll.npy new file mode 100644 index 0000000000000000000000000000000000000000..1c1a0fee2cf66c374d0b5e18d698b9cf8c01ac4e GIT binary patch literal 1120 zcmbV~`#02i9EV4vB|4fhn#pCG@3@V22cr~*eBQI2WgW_FyVi0nGmYzU`$k8k>=ZGZ zCF^#^j_jl)Ift>#x-W?$q_fGT66@9+Z5gH-m$3F<*w=5b=hx>cIN^7k7obH*BBU}y z!xDuFOb*6$3wLI+FlKms!kGj?Tu6LEXxM+;LlBb~w#^eG1$fx@w{c`)ha3*DunXA# zogOdbkHm&oDkN)Heuq0*z)ktZ!Y^2Kz(lvqD-KzJ%yS&ec)kY+0%^ronlbcZPDW=A z5TVIMuHgJ^1U|P)y+`iu1-5amNAJ|9urfrgw=XBd6gP%e`FsV5u)JN3`R@^CdTv}g zxPU|>ZscMMTiAVkvpMZcGDK?HrN5sg1N?aPB>U@iB$|)HA3YpG1S0O!vt|fEYXL$< zxd{;bt-`q`x**B+T)EBGg<_i7QNlO_IGULZhY|*e#SMKGI1ymCpI&3uIBIM9YQY=d z55upmjd!_Xz*+wMZbqyn5OUcrtr68I5|{O#jnW{TH*g-eX23v%`=G+Y5_oRi4~CAB zph;V^S)5G*s4Hvf8y!WROFUBPuTK#6VUCfbT0(?Yjvu}L6W}=p7Ul++!;1hO)nSqj z-J@IWzd12rY{PX*9c>6Q8@u4fqSq+yjltH-wok| zh}bd{1(yiyx+~W#-z}p%$w@P6HVI@Lc_XP~4YhSO2i;iR4?!$$>xvx}@ECy+7a0Ra zmR_kYnMTU=jjq|ZdeE7gUVIt;M(3ZU9-gMrV8^<>xRJtym>(E3W6Ar#&ei{vuO$-* zZr5x(4$F|_se)WnLWZ%d`^1O&6u{@&7tbx|0Kta-Sy^Qf^0^*3`=|T1&&RYQ9hnw@ zWjC{5nJy!KTu#CL=#OZsT;=7>o<{OxRDz144VL=Xhvz)ZL3{0L&$kK^Oqr=!9w~c( zj|qI$M*pCOCNn**oC;8*o(R+>f`Ry;eS`!9(aU`Ix$dWkAZok*{sT@d+!j? zgqpa~4~U=h=t=j*btLBpMptL55r6Qp=MZNV5&U*0hlWg}JWqP9SG^waOlxz4do-xC zPfQgGiGbB94N~%U0DqW#8n@d(W48;vQaLnO$@RBt;gUggP@AuJVG$|g7tI_iO+jLv zKDgv*08@2co=H_oBq5Vn{SWjZuS~PIqLT!w?q6ayEimAl@K|c$DuTw<6c_0_68mNz zrO$77<8kAs?{%~w2G2>XMBU2OX>Xt?JV z73)ZYNax&B=@VMed1U&{H&xr+P@c6iNLqkJ6d0aZ+x8)>c;TyW1t6uh#bOHxlUF!T lAT40)*H8@oKO(H-l39Pz1`=(}icf0q1AIvn&Jgks+}+=k@bmHTBt9kn zFI1@@DI(W=1v%i&qN~USOsk@3O|Fiha=`=Aj<^6>60$jOii6-HJ-Mrf399|C!;GmU zC_0tFn=H13iV%w^^Ixq%A()t|94J3|TsU(yd z#7i5@TcsZc@i4N_a-e~~tupGTLK=AcdXhV%wFuku8Xs>OLA6?~_}ZE|U>-d~G0ir> zpo}c)`5OXeI?Ox6H-vtVfmTzk6J&E_lC%;hAUF%w@1>AH5$PV3nxaIUveWXgdA)j;5*h-KIZ^|#T@5F!Wx7=tBfaz3DQy& zT34q=EYoWzO72oYwb!`+o7*HJp7W$b6V?zq9wv^bumQWwSZ(=LEro96u?-|GL+OiXsmToeJq>?3_+ZhQt1Nt^c`pN zyQ@e%|FU=>c^65uG!q4uYE+Sa+^=nm1YrRiq;ifk)OS{EpLgMamBZ<*D`p@LWAf@W z^C&h|&S-sT4PS`DZzU;*O9QL=5OlpNa|H0pE6lPxYbhKOwkU)<__~x6V#|9O_rkVqk=S7li;_xg|wDb)&nN(fYA#Wq9bH9QPxN2z6g=Pr<0`|PkCjbBd literal 0 HcmV?d00001 diff --git a/results/cpu-qwen35-2b/norm-repetition-function-metrics.csv b/results/cpu-qwen35-2b/norm-repetition-function-metrics.csv new file mode 100644 index 0000000..4f66cb5 --- /dev/null +++ b/results/cpu-qwen35-2b/norm-repetition-function-metrics.csv @@ -0,0 +1,17 @@ +source_layer,role,a,b,sample_id,split,relative_l2,reverse_relative_l2,token_relative_p95,reverse_token_relative_p95,cosine,low_norm_tokens +12,input_layernorm,12,13,cal-zh-1,calibration,0.04185799286154599,0.04309664461005982,0.044446126787094885,0.04595947974911848,0.9995232826957284,0 +12,input_layernorm,12,13,cal-zh-2,calibration,0.04383456526622353,0.04521540878040512,0.046012856287805166,0.047545525578214155,0.9994900129478096,0 +12,input_layernorm,12,13,cal-en-1,calibration,0.04347907732513803,0.04487576882582582,0.04643377233703883,0.048238404047826186,0.9995243164548383,0 +12,input_layernorm,12,13,cal-en-2,calibration,0.041111186492761374,0.04233333726141896,0.04398539072853077,0.04542340159464054,0.9995589314599114,0 +12,input_layernorm,12,13,test-zh-1,heldout,0.04230986484298778,0.04359453156137845,0.04521637327744173,0.046674126177753086,0.9995251413848774,0 +12,input_layernorm,12,13,test-zh-2,heldout,0.043902033219287144,0.04528510757179746,0.047435978938916296,0.04912927000592789,0.9994870299724158,0 +12,input_layernorm,12,13,test-en-1,heldout,0.042965663401383455,0.04430863234604914,0.04650584597139243,0.04815192582322126,0.9995218127753321,0 +12,input_layernorm,12,13,test-en-2,heldout,0.04135010433212149,0.042584214188789195,0.046368214514353176,0.047927790990014825,0.9995520355780412,0 +13,input_layernorm,12,13,cal-zh-1,calibration,0.041182645479044225,0.04240971565525536,0.04352880565374195,0.045001128308403464,0.9995577794005558,0 +13,input_layernorm,12,13,cal-zh-2,calibration,0.04327063750976668,0.04463822187523808,0.045272158865488125,0.04679408388648026,0.999518385770098,0 +13,input_layernorm,12,13,cal-en-1,calibration,0.04262779877016355,0.04398654464567335,0.045497400019515064,0.04723836815505396,0.9995547796247127,0 +13,input_layernorm,12,13,cal-en-2,calibration,0.040518961963038086,0.04171178072648754,0.043328686448901595,0.04470198445787224,0.9995758632252388,0 +13,input_layernorm,12,13,test-zh-1,heldout,0.04162196134899919,0.04289161132734105,0.04428805531751076,0.045755187013951454,0.9995588682914622,0 +13,input_layernorm,12,13,test-zh-2,heldout,0.043144621015003826,0.04450396583648517,0.045958426245692637,0.04754094135863426,0.9995211225735321,0 +13,input_layernorm,12,13,test-en-1,heldout,0.042127619483222106,0.04343304280377689,0.045197718466321105,0.04683576056261672,0.999550812480402,0 +13,input_layernorm,12,13,test-en-2,heldout,0.04076045660321344,0.04197546447097981,0.045561271843477975,0.04710887060271581,0.9995759438544739,0 diff --git a/results/cpu-qwen35-2b/norm-repetition-protocol.json b/results/cpu-qwen35-2b/norm-repetition-protocol.json new file mode 100644 index 0000000..b24e41d --- /dev/null +++ b/results/cpu-qwen35-2b/norm-repetition-protocol.json @@ -0,0 +1,44 @@ +{ + "roles": [ + "input_layernorm", + "post_attention_layernorm" + ], + "layers": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + "same_role_only": true, + "same_eps": 1e-06, + "uniform_worst_error_limit": 0.2, + "empirical_function_worst_relative_error_limit": 0.05, + "selection": "smallest maximum two-direction uniform bound, then role/layer; no input data used", + "minimum_gain_standard_deviation": 0.001, + "max_selected_pairs": 1, + "heldout_nll_mean_delta_limit": 0.01, + "heldout_nll_sequence_p95_delta_limit": 0.05, + "training": false, + "cost_required": false, + "registered_unix": 1794203690.521922 +} diff --git a/results/cpu-qwen35-2b/norm-repetition-selection.json b/results/cpu-qwen35-2b/norm-repetition-selection.json new file mode 100644 index 0000000..77dfdfd --- /dev/null +++ b/results/cpu-qwen35-2b/norm-repetition-selection.json @@ -0,0 +1,23 @@ +{ + "selected": [ + { + "role": "input_layernorm", + "a": 12, + "b": 13, + "a_to_b_uniform_bound": 0.10185185185185185, + "b_to_a_uniform_bound": 0.1134020618556701, + "worst_uniform_bound": 0.1134020618556701, + "eligible_nonconstant_gains": true, + "gain_std_a": 0.1900545060634613, + "gain_std_b": 0.16846242547035217, + "gain_min_a": 0.5546875, + "gain_min_b": 0.5703125 + } + ], + "uniform_bound_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 18 + }, + "selection_reads_no_input_data": true +} diff --git a/results/cpu-qwen35-2b/norm-repetition-summary.json b/results/cpu-qwen35-2b/norm-repetition-summary.json new file mode 100644 index 0000000..0c1ff32 --- /dev/null +++ b/results/cpu-qwen35-2b/norm-repetition-summary.json @@ -0,0 +1,59 @@ +{ + "state": "completed", + "selected": { + "role": "input_layernorm", + "a": 12, + "b": 13, + "a_to_b_uniform_bound": 0.10185185185185185, + "b_to_a_uniform_bound": 0.1134020618556701, + "worst_uniform_bound": 0.1134020618556701, + "eligible_nonconstant_gains": true, + "gain_std_a": 0.1900545060634613, + "gain_std_b": 0.16846242547035217, + "gain_min_a": 0.5546875, + "gain_min_b": 0.5703125 + }, + "interventions": [ + { + "target": 12, + "donor": 13, + "sequence_nll_deltas": [ + 0.0010516456964495546, + -0.0013996762182379996, + -0.00012664743940504763, + 0.0006049385086996928 + ], + "mean_nll_delta": 3.256513687655005e-05, + "sequence_p95_nll_delta": 0.0009846396182870752, + "passed_quality": true + }, + { + "target": 13, + "donor": 12, + "sequence_nll_deltas": [ + 0.0008813779918703801, + -0.0012936356267054805, + -0.0002630009203641315, + -0.0007806334344149235 + ], + "mean_nll_delta": -0.00036397299740353883, + "sequence_p95_nll_delta": 0.000709721155035203, + "passed_quality": true + } + ], + "uniform_bound_counts": { + "0.05": 0, + "0.1": 0, + "0.2": 18 + }, + "uniform_function_similarity_proven": true, + "heldout_function_pass": true, + "worst_heldout_relative_l2": 0.04528510757179746, + "worst_heldout_cosine": 0.9994870299724158, + "untouched_full_forward_bitwise_matches_baseline": true, + "learned_function_repetition_positive": true, + "bidirectional_network_quality_pass": true, + "claim_limit": "Existing learned RMSNorm module functions with identical eps and shape; uniform real-arithmetic relative bound and tiny real-text probes. Does not establish attention/MLP-body duplication or broad task capability.", + "elapsed_seconds": 369.7967556482181, + "peak_rss_kib": 71596 +} diff --git a/results/cpu-qwen35-2b/norm-repetition-uniform-bounds.csv b/results/cpu-qwen35-2b/norm-repetition-uniform-bounds.csv new file mode 100644 index 0000000..9894c62 --- /dev/null +++ b/results/cpu-qwen35-2b/norm-repetition-uniform-bounds.csv @@ -0,0 +1,553 @@ +role,a,b,a_to_b_uniform_bound,b_to_a_uniform_bound,worst_uniform_bound,eligible_nonconstant_gains,gain_std_a,gain_std_b,gain_min_a,gain_min_b +input_layernorm,0,1,0.6032863849765259,1.5207100591715976,1.5207100591715976,True,0.11805251985788345,0.0930413156747818,0.794921875,0.607421875 +input_layernorm,0,2,0.5692488262910798,1.3215258855585832,1.3215258855585832,True,0.11805251985788345,0.10473614931106567,0.794921875,0.6484375 +input_layernorm,0,3,0.5469483568075117,1.2072538860103628,1.2072538860103628,True,0.11805251985788345,0.07621725648641586,0.794921875,0.7265625 +input_layernorm,0,4,0.5751173708920188,1.3535911602209945,1.3535911602209945,True,0.11805251985788345,0.10847259312868118,0.794921875,0.662109375 +input_layernorm,0,5,0.6396713615023474,1.775244299674267,1.775244299674267,True,0.11805251985788345,0.13199757039546967,0.794921875,0.5234375 +input_layernorm,0,6,0.6643192488262911,1.979020979020979,1.979020979020979,True,0.11805251985788345,0.1498883068561554,0.794921875,0.47265625 +input_layernorm,0,7,0.6830985915492958,2.1555555555555554,2.1555555555555554,True,0.11805251985788345,0.095920130610466,0.794921875,0.46484375 +input_layernorm,0,8,0.6913145539906104,2.2395437262357416,2.2395437262357416,True,0.11805251985788345,0.20054922997951508,0.794921875,0.41796875 +input_layernorm,0,9,0.7136150234741784,2.4918032786885247,2.4918032786885247,True,0.11805251985788345,0.22649425268173218,0.794921875,0.42578125 +input_layernorm,0,10,0.7230046948356808,2.610169491525424,2.610169491525424,True,0.11805251985788345,0.2204512506723404,0.794921875,0.3828125 +input_layernorm,0,11,0.7347417840375586,2.769911504424779,2.769911504424779,True,0.11805251985788345,0.16603894531726837,0.794921875,0.34375 +input_layernorm,0,12,0.6338028169014085,1.7307692307692308,1.7307692307692308,True,0.11805251985788345,0.1900545060634613,0.794921875,0.5546875 +input_layernorm,0,13,0.6349765258215962,1.7395498392282958,1.7395498392282958,True,0.11805251985788345,0.16846242547035217,0.794921875,0.5703125 +input_layernorm,0,14,0.5516431924882629,1.2303664921465969,1.2303664921465969,True,0.11805251985788345,0.11825777590274811,0.794921875,0.6875 +input_layernorm,0,15,0.49018199233716475,0.9614842649131048,0.9614842649131048,True,0.11805251985788345,0.06029079854488373,0.794921875,0.779296875 +input_layernorm,0,16,0.5117370892018779,1.0480769230769231,1.0480769230769231,True,0.11805251985788345,0.09195870161056519,0.794921875,0.7763671875 +input_layernorm,0,17,0.6232876712328768,0.7185185185185186,0.7185185185185186,True,0.11805251985788345,0.06483674794435501,0.794921875,1.0012359619140625 +input_layernorm,0,18,0.8402948402948403,0.6637450199203188,0.8402948402948403,True,0.11805251985788345,0.06785038113594055,0.794921875,1.1640625 +input_layernorm,0,19,1.0393120393120394,1.1248445660283513,1.1248445660283513,True,0.11805251985788345,0.19409698247909546,0.794921875,0.884765625 +input_layernorm,0,20,1.113022113022113,0.9869156655168312,1.113022113022113,True,0.11805251985788345,0.08625888079404831,0.794921875,1.0262451171875 +input_layernorm,0,21,1.1867321867321867,0.9545986426398315,1.1867321867321867,True,0.11805251985788345,0.07095508277416229,0.794921875,1.043212890625 +input_layernorm,0,22,0.9656019656019657,0.9514018691588785,0.9656019656019657,True,0.11805251985788345,0.07214703410863876,0.794921875,1.044921875 +input_layernorm,0,23,0.941031941031941,0.9568884723523898,0.9568884723523898,True,0.11805251985788345,0.15369786322116852,0.794921875,0.98577880859375 +input_layernorm,1,2,0.16765578635014836,0.17593150850114556,0.17593150850114556,True,0.0930413156747818,0.10473614931106567,0.607421875,0.6484375 +input_layernorm,1,3,0.28125,0.34967320261437906,0.34967320261437906,True,0.0930413156747818,0.07621725648641586,0.607421875,0.7265625 +input_layernorm,1,4,0.1678622668579627,0.15668366741786266,0.1678622668579627,True,0.0930413156747818,0.10847259312868118,0.607421875,0.662109375 +input_layernorm,1,5,0.23018147086914995,0.2990074441687345,0.2990074441687345,True,0.0930413156747818,0.13199757039546967,0.607421875,0.5234375 +input_layernorm,1,6,0.34367141659681477,0.5236270753512133,0.5236270753512133,True,0.0930413156747818,0.1498883068561554,0.607421875,0.47265625 +input_layernorm,1,7,0.3996670702179177,0.6657423745903706,0.6657423745903706,True,0.0930413156747818,0.095920130610466,0.607421875,0.46484375 +input_layernorm,1,8,0.4585726004922067,0.8469696969696969,0.8469696969696969,True,0.0930413156747818,0.20054922997951508,0.607421875,0.41796875 +input_layernorm,1,9,0.5138306789606035,1.056896551724138,1.056896551724138,True,0.0930413156747818,0.22649425268173218,0.607421875,0.42578125 +input_layernorm,1,10,0.4786253143336127,0.9180064308681672,0.9180064308681672,True,0.0930413156747818,0.2204512506723404,0.607421875,0.3828125 +input_layernorm,1,11,0.49209302325581394,0.9688644688644689,0.9688644688644689,True,0.0930413156747818,0.16603894531726837,0.607421875,0.34375 +input_layernorm,1,12,0.3838141025641026,0.6228868660598179,0.6228868660598179,True,0.0930413156747818,0.1900545060634613,0.607421875,0.5546875 +input_layernorm,1,13,0.39622641509433965,0.65625,0.65625,True,0.0930413156747818,0.16846242547035217,0.607421875,0.5703125 +input_layernorm,1,14,0.27009646302250806,0.28465608465608466,0.28465608465608466,True,0.0930413156747818,0.11825777590274811,0.607421875,0.6875 +input_layernorm,1,15,0.9292604501607717,0.5223386651958081,0.9292604501607717,True,0.0930413156747818,0.06029079854488373,0.607421875,0.779296875 +input_layernorm,1,16,0.36012861736334406,0.2647754137115839,0.36012861736334406,True,0.0930413156747818,0.09195870161056519,0.607421875,0.7763671875 +input_layernorm,1,17,0.7958860759493671,0.4431718061674009,0.7958860759493671,True,0.0930413156747818,0.06483674794435501,0.607421875,1.0012359619140625 +input_layernorm,1,18,1.1044303797468353,0.524812030075188,1.1044303797468353,True,0.0930413156747818,0.06785038113594055,0.607421875,1.1640625 +input_layernorm,1,19,1.3858520900321543,0.5808625336927223,1.3858520900321543,True,0.0930413156747818,0.19409698247909546,0.607421875,0.884765625 +input_layernorm,1,20,1.206896551724138,0.546875,1.206896551724138,True,0.0930413156747818,0.08625888079404831,0.607421875,1.0262451171875 +input_layernorm,1,21,1.630225080385852,0.6198044009779952,1.630225080385852,True,0.0930413156747818,0.07095508277416229,0.607421875,1.043212890625 +input_layernorm,1,22,1.4043887147335423,0.5840938722294654,1.4043887147335423,True,0.0930413156747818,0.07214703410863876,0.607421875,1.044921875 +input_layernorm,1,23,1.9453376205787782,0.6604803493449781,1.9453376205787782,True,0.0930413156747818,0.15369786322116852,0.607421875,0.98577880859375 +input_layernorm,2,3,0.2867132867132867,0.4019607843137255,0.4019607843137255,True,0.10473614931106567,0.07621725648641586,0.6484375,0.7265625 +input_layernorm,2,4,0.10583941605839416,0.11836734693877551,0.11836734693877551,True,0.10473614931106567,0.10847259312868118,0.6484375,0.662109375 +input_layernorm,2,5,0.23737099402498643,0.31125356125356124,0.31125356125356124,True,0.10473614931106567,0.13199757039546967,0.6484375,0.5234375 +input_layernorm,2,6,0.31070496083550914,0.45075757575757575,0.45075757575757575,True,0.10473614931106567,0.1498883068561554,0.6484375,0.47265625 +input_layernorm,2,7,0.42205710955710957,0.7302747668263171,0.7302747668263171,True,0.10473614931106567,0.095920130610466,0.6484375,0.46484375 +input_layernorm,2,8,0.4018264840182648,0.6717557251908397,0.6717557251908397,True,0.10473614931106567,0.20054922997951508,0.6484375,0.41796875 +input_layernorm,2,9,0.4722187382415653,0.8947243346007605,0.8947243346007605,True,0.10473614931106567,0.22649425268173218,0.6484375,0.42578125 +input_layernorm,2,10,0.46013404206147446,0.8523116438356164,0.8523116438356164,True,0.10473614931106567,0.2204512506723404,0.6484375,0.3828125 +input_layernorm,2,11,0.5159817351598174,1.0660377358490567,1.0660377358490567,True,0.10473614931106567,0.16603894531726837,0.6484375,0.34375 +input_layernorm,2,12,0.30617848970251715,0.4412928759894459,0.4412928759894459,True,0.10473614931106567,0.1900545060634613,0.6484375,0.5546875 +input_layernorm,2,13,0.2900036175087423,0.4084578804347826,0.4084578804347826,True,0.10473614931106567,0.16846242547035217,0.6484375,0.5703125 +input_layernorm,2,14,0.19501226492232215,0.24225495175215844,0.24225495175215844,True,0.10473614931106567,0.11825777590274811,0.6484375,0.6875 +input_layernorm,2,15,0.7957142857142857,0.5678391959798995,0.7957142857142857,True,0.10473614931106567,0.06029079854488373,0.6484375,0.779296875 +input_layernorm,2,16,0.2740963855421687,0.21513002364066194,0.2740963855421687,True,0.10473614931106567,0.09195870161056519,0.6484375,0.7763671875 +input_layernorm,2,17,0.7093373493975904,0.4149779735682819,0.7093373493975904,True,0.10473614931106567,0.06483674794435501,0.6484375,1.0012359619140625 +input_layernorm,2,18,1.0030120481927711,0.5007518796992482,1.0030120481927711,True,0.10473614931106567,0.06785038113594055,0.6484375,1.1640625 +input_layernorm,2,19,1.2680722891566265,0.5590969455511288,1.2680722891566265,True,0.10473614931106567,0.19409698247909546,0.6484375,0.884765625 +input_layernorm,2,20,1.0873493975903614,0.5209235209235209,1.0873493975903614,True,0.10473614931106567,0.08625888079404831,0.6484375,1.0262451171875 +input_layernorm,2,21,1.463855421686747,0.5941320293398533,1.463855421686747,True,0.10473614931106567,0.07095508277416229,0.6484375,1.043212890625 +input_layernorm,2,22,1.249266862170088,0.5554106910039114,1.249266862170088,True,0.10473614931106567,0.07214703410863876,0.6484375,1.044921875 +input_layernorm,2,23,1.7448680351906158,0.6356837606837606,1.7448680351906158,True,0.10473614931106567,0.15369786322116852,0.6484375,0.98577880859375 +input_layernorm,3,4,0.40522875816993464,0.28837209302325584,0.40522875816993464,True,0.07621725648641586,0.10847259312868118,0.7265625,0.662109375 +input_layernorm,3,5,0.3660130718954248,0.39925373134328357,0.39925373134328357,True,0.07621725648641586,0.13199757039546967,0.7265625,0.5234375 +input_layernorm,3,6,0.35609756097560974,0.553030303030303,0.553030303030303,True,0.07621725648641586,0.1498883068561554,0.7265625,0.47265625 +input_layernorm,3,7,0.39575530586766544,0.6549586776859504,0.6549586776859504,True,0.07621725648641586,0.095920130610466,0.7265625,0.46484375 +input_layernorm,3,8,0.42473118279569894,0.7383177570093458,0.7383177570093458,True,0.07621725648641586,0.20054922997951508,0.7265625,0.41796875 +input_layernorm,3,9,0.49180741114192084,0.9677579365079365,0.9677579365079365,True,0.07621725648641586,0.22649425268173218,0.7265625,0.42578125 +input_layernorm,3,10,0.47804878048780486,0.9158878504672897,0.9158878504672897,True,0.07621725648641586,0.2204512506723404,0.7265625,0.3828125 +input_layernorm,3,11,0.545338441890166,1.199438202247191,1.199438202247191,True,0.07621725648641586,0.16603894531726837,0.7265625,0.34375 +input_layernorm,3,12,0.40460669274228594,0.5290237467018469,0.5290237467018469,True,0.07621725648641586,0.1900545060634613,0.7265625,0.5546875 +input_layernorm,3,13,0.3559322033898305,0.5441576086956522,0.5441576086956522,True,0.07621725648641586,0.16846242547035217,0.7265625,0.5703125 +input_layernorm,3,14,0.28804587560652845,0.22363013698630138,0.28804587560652845,True,0.07621725648641586,0.11825777590274811,0.7265625,0.6875 +input_layernorm,3,15,0.5853333333333334,0.36921783010933557,0.5853333333333334,True,0.07621725648641586,0.06029079854488373,0.7265625,0.779296875 +input_layernorm,3,16,0.43790849673202614,0.30454545454545456,0.43790849673202614,True,0.07621725648641586,0.09195870161056519,0.7265625,0.7763671875 +input_layernorm,3,17,0.5490196078431373,0.35443037974683544,0.5490196078431373,True,0.07621725648641586,0.06483674794435501,0.7265625,1.0012359619140625 +input_layernorm,3,18,0.7876344086021505,0.4406015037593985,0.7876344086021505,True,0.07621725648641586,0.06785038113594055,0.7265625,1.1640625 +input_layernorm,3,19,1.0241935483870968,0.5059760956175299,1.0241935483870968,True,0.07621725648641586,0.19409698247909546,0.7265625,0.884765625 +input_layernorm,3,20,0.9153567110036276,0.4779040404040404,0.9153567110036276,True,0.07621725648641586,0.08625888079404831,0.7265625,1.0262451171875 +input_layernorm,3,21,1.1706666666666667,0.5393120393120393,1.1706666666666667,True,0.07621725648641586,0.07095508277416229,0.7265625,1.043212890625 +input_layernorm,3,22,1.0453333333333332,0.5110821382007823,1.0453333333333332,True,0.07621725648641586,0.07214703410863876,0.7265625,1.044921875 +input_layernorm,3,23,1.496,0.5993589743589743,1.496,True,0.07621725648641586,0.15369786322116852,0.7265625,0.98577880859375 +input_layernorm,4,5,0.21176470588235294,0.26865671641791045,0.26865671641791045,True,0.10847259312868118,0.13199757039546967,0.662109375,0.5234375 +input_layernorm,4,6,0.2985507246376812,0.4256198347107438,0.4256198347107438,True,0.10847259312868118,0.1498883068561554,0.662109375,0.47265625 +input_layernorm,4,7,0.42340116279069767,0.7343080413410638,0.7343080413410638,True,0.10847259312868118,0.095920130610466,0.662109375,0.46484375 +input_layernorm,4,8,0.37971014492753624,0.6121495327102804,0.6121495327102804,True,0.10847259312868118,0.20054922997951508,0.662109375,0.41796875 +input_layernorm,4,9,0.4610917537746806,0.8556034482758621,0.8556034482758621,True,0.10847259312868118,0.22649425268173218,0.662109375,0.42578125 +input_layernorm,4,10,0.4318840579710145,0.7602040816326531,0.7602040816326531,True,0.10847259312868118,0.2204512506723404,0.662109375,0.3828125 +input_layernorm,4,11,0.5041140976412507,1.0165929203539823,1.0165929203539823,True,0.10847259312868118,0.16603894531726837,0.662109375,0.34375 +input_layernorm,4,12,0.31369924141008476,0.45708712613784136,0.45708712613784136,True,0.10847259312868118,0.1900545060634613,0.662109375,0.5546875 +input_layernorm,4,13,0.3016249555212905,0.4318953804347826,0.4318953804347826,True,0.10847259312868118,0.16846242547035217,0.662109375,0.5703125 +input_layernorm,4,14,0.177762982689747,0.21619433198380567,0.21619433198380567,True,0.10847259312868118,0.11825777590274811,0.662109375,0.6875 +input_layernorm,4,15,0.799410029498525,0.5714938328003655,0.799410029498525,True,0.10847259312868118,0.06029079854488373,0.662109375,0.779296875 +input_layernorm,4,16,0.2727919383521043,0.21432563338301044,0.2727919383521043,True,0.10847259312868118,0.09195870161056519,0.662109375,0.7763671875 +input_layernorm,4,17,0.644927536231884,0.3920704845814978,0.644927536231884,True,0.10847259312868118,0.06483674794435501,0.662109375,1.0012359619140625 +input_layernorm,4,18,0.927536231884058,0.48120300751879697,0.927536231884058,True,0.10847259312868118,0.06785038113594055,0.662109375,1.1640625 +input_layernorm,4,19,1.191740412979351,0.5437415881561238,1.191740412979351,True,0.10847259312868118,0.19409698247909546,0.662109375,0.884765625 +input_layernorm,4,20,1.0705882352941176,0.5170454545454546,1.0705882352941176,True,0.10847259312868118,0.08625888079404831,0.662109375,1.0262451171875 +input_layernorm,4,21,1.4129793510324484,0.5855745721271394,1.4129793510324484,True,0.10847259312868118,0.07095508277416229,0.662109375,1.043212890625 +input_layernorm,4,22,1.2558823529411764,0.5567144719687093,1.2558823529411764,True,0.10847259312868118,0.07214703410863876,0.662109375,1.044921875 +input_layernorm,4,23,1.7529411764705882,0.6367521367521367,1.7529411764705882,True,0.10847259312868118,0.15369786322116852,0.662109375,0.98577880859375 +input_layernorm,5,6,0.21281039684381528,0.27034198113207547,0.27034198113207547,True,0.13199757039546967,0.1498883068561554,0.5234375,0.47265625 +input_layernorm,5,7,0.40684808612440193,0.6859087471641039,0.6859087471641039,True,0.13199757039546967,0.095920130610466,0.5234375,0.46484375 +input_layernorm,5,8,0.3513911921872121,0.5417613636363636,0.5417613636363636,True,0.13199757039546967,0.20054922997951508,0.5234375,0.41796875 +input_layernorm,5,9,0.41179234202490017,0.7000798722044729,0.7000798722044729,True,0.13199757039546967,0.22649425268173218,0.5234375,0.42578125 +input_layernorm,5,10,0.35843218153687467,0.5586816720257235,0.5586816720257235,True,0.13199757039546967,0.2204512506723404,0.5234375,0.3828125 +input_layernorm,5,11,0.4428827751196172,0.7949543746645196,0.7949543746645196,True,0.13199757039546967,0.16603894531726837,0.5234375,0.34375 +input_layernorm,5,12,0.2774254169603007,0.3839401820546164,0.3839401820546164,True,0.13199757039546967,0.1900545060634613,0.5234375,0.5546875 +input_layernorm,5,13,0.2767029052269517,0.3825577445652174,0.3825577445652174,True,0.13199757039546967,0.16846242547035217,0.5234375,0.5703125 +input_layernorm,5,14,0.4141791044776119,0.2928759894459103,0.4141791044776119,True,0.13199757039546967,0.11825777590274811,0.5234375,0.6875 +input_layernorm,5,15,1.2182835820895523,0.5492010092514719,1.2182835820895523,True,0.13199757039546967,0.06029079854488373,0.5234375,0.779296875 +input_layernorm,5,16,0.5316051136363636,0.34709019244145606,0.5316051136363636,True,0.13199757039546967,0.09195870161056519,0.5234375,0.7763671875 +input_layernorm,5,17,1.0124113475177305,0.5030837004405286,1.0124113475177305,True,0.13199757039546967,0.06483674794435501,0.5234375,1.0012359619140625 +input_layernorm,5,18,1.3581560283687943,0.5759398496240602,1.3581560283687943,True,0.13199757039546967,0.06785038113594055,0.5234375,1.1640625 +input_layernorm,5,19,1.7798507462686568,0.640268456375839,1.7798507462686568,True,0.13199757039546967,0.19409698247909546,0.5234375,0.884765625 +input_layernorm,5,20,1.626865671641791,0.6193181818181818,1.626865671641791,True,0.13199757039546967,0.08625888079404831,0.5234375,1.0262451171875 +input_layernorm,5,21,2.037313432835821,0.6707616707616708,2.037313432835821,True,0.13199757039546967,0.07095508277416229,0.5234375,1.043212890625 +input_layernorm,5,22,1.8619402985074627,0.6505867014341591,1.8619402985074627,True,0.13199757039546967,0.07214703410863876,0.5234375,1.044921875 +input_layernorm,5,23,2.4925373134328357,0.7136752136752137,2.4925373134328357,True,0.13199757039546967,0.15369786322116852,0.5234375,0.98577880859375 +input_layernorm,6,7,0.37231012658227847,0.5931434333249307,0.5931434333249307,True,0.1498883068561554,0.095920130610466,0.47265625,0.46484375 +input_layernorm,6,8,0.1901840490797546,0.23484848484848486,0.23484848484848486,True,0.1498883068561554,0.20054922997951508,0.47265625,0.41796875 +input_layernorm,6,9,0.26697892271662765,0.36421725239616615,0.36421725239616615,True,0.1498883068561554,0.22649425268173218,0.47265625,0.42578125 +input_layernorm,6,10,0.2579185520361991,0.3475609756097561,0.3475609756097561,True,0.1498883068561554,0.2204512506723404,0.47265625,0.3828125 +input_layernorm,6,11,0.41044303797468357,0.6961889425657541,0.6961889425657541,True,0.1498883068561554,0.16603894531726837,0.47265625,0.34375 +input_layernorm,6,12,0.2694422623723488,0.21225247524752475,0.2694422623723488,True,0.1498883068561554,0.1900545060634613,0.47265625,0.5546875 +input_layernorm,6,13,0.2518703241895262,0.22759714512291832,0.2518703241895262,True,0.1498883068561554,0.16846242547035217,0.47265625,0.5703125 +input_layernorm,6,14,0.5578512396694215,0.35809018567639256,0.5578512396694215,True,0.1498883068561554,0.11825777590274811,0.47265625,0.6875 +input_layernorm,6,15,1.3971774193548387,0.5828427249789739,1.3971774193548387,True,0.1498883068561554,0.06029079854488373,0.47265625,0.779296875 +input_layernorm,6,16,0.7217261904761905,0.4191875540190147,0.7217261904761905,True,0.1498883068561554,0.09195870161056519,0.47265625,0.7763671875 +input_layernorm,6,17,1.3450413223140496,0.573568281938326,1.3450413223140496,True,0.1498883068561554,0.06483674794435501,0.47265625,1.0012359619140625 +input_layernorm,6,18,1.7479338842975207,0.6360902255639098,1.7479338842975207,True,0.1498883068561554,0.06785038113594055,0.47265625,1.1640625 +input_layernorm,6,19,2.1115702479338845,0.6786188579017264,2.1115702479338845,True,0.1498883068561554,0.19409698247909546,0.47265625,0.884765625 +input_layernorm,6,20,1.8636363636363635,0.6507936507936508,1.8636363636363635,True,0.1498883068561554,0.08625888079404831,0.47265625,1.0262451171875 +input_layernorm,6,21,2.282258064516129,0.6953316953316954,2.282258064516129,True,0.1498883068561554,0.07095508277416229,0.47265625,1.043212890625 +input_layernorm,6,22,2.092741935483871,0.6766623207301173,2.092741935483871,True,0.1498883068561554,0.07214703410863876,0.47265625,1.044921875 +input_layernorm,6,23,2.774193548387097,0.7350427350427351,2.774193548387097,True,0.1498883068561554,0.15369786322116852,0.47265625,0.98577880859375 +input_layernorm,7,8,0.564910511721704,0.6390151515151515,0.6390151515151515,True,0.095920130610466,0.20054922997951508,0.46484375,0.41796875 +input_layernorm,7,9,0.4822283841693975,0.8075657894736842,0.8075657894736842,True,0.095920130610466,0.22649425268173218,0.46484375,0.42578125 +input_layernorm,7,10,0.4459289135366776,0.6383139067524116,0.6383139067524116,True,0.095920130610466,0.2204512506723404,0.46484375,0.3828125 +input_layernorm,7,11,0.3941018766756032,0.6504424778761062,0.6504424778761062,True,0.095920130610466,0.16603894531726837,0.46484375,0.34375 +input_layernorm,7,12,0.5676959619952494,0.449868073878628,0.5676959619952494,True,0.095920130610466,0.1900545060634613,0.46484375,0.5546875 +input_layernorm,7,13,0.5866983372921615,0.46976902173913043,0.5866983372921615,True,0.095920130610466,0.16846242547035217,0.46484375,0.5703125 +input_layernorm,7,14,0.630188679245283,0.38657407407407407,0.630188679245283,True,0.095920130610466,0.11825777590274811,0.46484375,0.6875 +input_layernorm,7,15,1.4814049586776858,0.5970024979184013,1.4814049586776858,True,0.095920130610466,0.06029079854488373,0.46484375,0.779296875 +input_layernorm,7,16,0.9477434679334917,0.4865853658536585,0.9477434679334917,True,0.095920130610466,0.09195870161056519,0.46484375,0.7763671875 +input_layernorm,7,17,1.2394957983193278,0.5534709193245778,1.2394957983193278,True,0.095920130610466,0.06483674794435501,0.46484375,1.0012359619140625 +input_layernorm,7,18,1.5630081300813008,0.6098334655035687,1.5630081300813008,True,0.095920130610466,0.06785038113594055,0.46484375,1.1640625 +input_layernorm,7,19,2.19327731092437,0.6868421052631579,2.19327731092437,True,0.095920130610466,0.19409698247909546,0.46484375,0.884765625 +input_layernorm,7,20,1.9201680672268908,0.6575539568345323,1.9201680672268908,True,0.095920130610466,0.08625888079404831,0.46484375,1.0262451171875 +input_layernorm,7,21,2.3445378151260505,0.7010050251256281,2.3445378151260505,True,0.095920130610466,0.07095508277416229,0.46484375,1.043212890625 +input_layernorm,7,22,2.1178861788617884,0.6792698826597132,2.1178861788617884,True,0.095920130610466,0.07214703410863876,0.46484375,1.044921875 +input_layernorm,7,23,2.8048780487804876,0.7371794871794872,2.8048780487804876,True,0.095920130610466,0.15369786322116852,0.46484375,0.98577880859375 +input_layernorm,8,9,0.2168141592920354,0.1781818181818182,0.2168141592920354,True,0.20054922997951508,0.22649425268173218,0.41796875,0.42578125 +input_layernorm,8,10,0.19393939393939394,0.1813186813186813,0.19393939393939394,True,0.20054922997951508,0.2204512506723404,0.41796875,0.3828125 +input_layernorm,8,11,0.39980670103092786,0.666129898013956,0.666129898013956,True,0.20054922997951508,0.16603894531726837,0.41796875,0.34375 +input_layernorm,8,12,0.3672566371681416,0.2686084142394822,0.3672566371681416,True,0.20054922997951508,0.1900545060634613,0.41796875,0.5546875 +input_layernorm,8,13,0.3644859813084112,0.2671232876712329,0.3644859813084112,True,0.20054922997951508,0.16846242547035217,0.41796875,0.5703125 +input_layernorm,8,14,0.7616822429906542,0.4323607427055703,0.7616822429906542,True,0.20054922997951508,0.11825777590274811,0.41796875,0.6875 +input_layernorm,8,15,1.677927927927928,0.6265769554247267,1.677927927927928,True,0.20054922997951508,0.06029079854488373,0.41796875,0.779296875 +input_layernorm,8,16,0.9478114478114478,0.48660328435609335,0.9478114478114478,True,0.20054922997951508,0.09195870161056519,0.41796875,0.7763671875 +input_layernorm,8,17,1.6518691588785046,0.6229074889867842,1.6518691588785046,True,0.20054922997951508,0.06483674794435501,0.41796875,1.0012359619140625 +input_layernorm,8,18,2.107476635514019,0.6781954887218045,2.107476635514019,True,0.20054922997951508,0.06785038113594055,0.41796875,1.1640625 +input_layernorm,8,19,2.5186915887850465,0.7158034528552457,2.5186915887850465,True,0.20054922997951508,0.19409698247909546,0.41796875,0.884765625 +input_layernorm,8,20,2.282442748091603,0.6953488372093023,2.282442748091603,True,0.20054922997951508,0.08625888079404831,0.41796875,1.0262451171875 +input_layernorm,8,21,2.6666666666666665,0.7272727272727273,2.6666666666666665,True,0.20054922997951508,0.07095508277416229,0.41796875,1.043212890625 +input_layernorm,8,22,2.467289719626168,0.7115902964959568,2.467289719626168,True,0.20054922997951508,0.07214703410863876,0.41796875,1.044921875 +input_layernorm,8,23,3.2162162162162162,0.7628205128205128,3.2162162162162162,True,0.20054922997951508,0.15369786322116852,0.41796875,0.98577880859375 +input_layernorm,9,10,0.31333333333333335,0.3008849557522124,0.31333333333333335,True,0.22649425268173218,0.2204512506723404,0.42578125,0.3828125 +input_layernorm,9,11,0.5083333333333333,0.5780998389694042,0.5780998389694042,True,0.22649425268173218,0.16603894531726837,0.42578125,0.34375 +input_layernorm,9,12,0.452991452991453,0.31176470588235294,0.452991452991453,True,0.22649425268173218,0.1900545060634613,0.42578125,0.5546875 +input_layernorm,9,13,0.4921259842519685,0.32981530343007914,0.4921259842519685,True,0.22649425268173218,0.16846242547035217,0.42578125,0.5703125 +input_layernorm,9,14,0.8134920634920635,0.4485776805251641,0.8134920634920635,True,0.22649425268173218,0.11825777590274811,0.42578125,0.6875 +input_layernorm,9,15,1.7727272727272727,0.639344262295082,1.7727272727272727,True,0.22649425268173218,0.06029079854488373,0.42578125,0.779296875 +input_layernorm,9,16,1.2080152671755726,0.547104580812446,1.2080152671755726,True,0.22649425268173218,0.09195870161056519,0.42578125,0.7763671875 +input_layernorm,9,17,1.7058823529411764,0.6304347826086957,1.7058823529411764,True,0.22649425268173218,0.06483674794435501,0.42578125,1.0012359619140625 +input_layernorm,9,18,2.1470588235294117,0.6822429906542056,2.1470588235294117,True,0.22649425268173218,0.06785038113594055,0.42578125,1.1640625 +input_layernorm,9,19,2.4873949579831933,0.7132530120481928,2.4873949579831933,True,0.22649425268173218,0.19409698247909546,0.42578125,0.884765625 +input_layernorm,9,20,2.6134453781512605,0.7232558139534884,2.6134453781512605,True,0.22649425268173218,0.08625888079404831,0.42578125,1.0262451171875 +input_layernorm,9,21,2.7394957983193278,0.7325842696629213,2.7394957983193278,True,0.22649425268173218,0.07095508277416229,0.42578125,1.043212890625 +input_layernorm,9,22,2.403669724770642,0.706199460916442,2.403669724770642,True,0.22649425268173218,0.07214703410863876,0.42578125,1.044921875 +input_layernorm,9,23,2.990990990990991,0.7494356659142212,2.990990990990991,True,0.22649425268173218,0.15369786322116852,0.42578125,0.98577880859375 +input_layernorm,10,11,0.350418410041841,0.5394524959742351,0.5394524959742351,True,0.2204512506723404,0.16603894531726837,0.3828125,0.34375 +input_layernorm,10,12,0.4489795918367347,0.30985915492957744,0.4489795918367347,True,0.2204512506723404,0.1900545060634613,0.3828125,0.5546875 +input_layernorm,10,13,0.4897959183673469,0.3287671232876712,0.4897959183673469,True,0.2204512506723404,0.16846242547035217,0.3828125,0.5703125 +input_layernorm,10,14,0.923469387755102,0.48010610079575594,0.923469387755102,True,0.2204512506723404,0.11825777590274811,0.3828125,0.6875 +input_layernorm,10,15,1.8762755102040816,0.6523281596452328,1.8762755102040816,True,0.2204512506723404,0.06029079854488373,0.3828125,0.779296875 +input_layernorm,10,16,1.1346863468634687,0.5315471045808124,1.1346863468634687,True,0.2204512506723404,0.09195870161056519,0.3828125,0.7763671875 +input_layernorm,10,17,1.8954081632653061,0.654625550660793,1.8954081632653061,True,0.2204512506723404,0.06483674794435501,0.3828125,1.0012359619140625 +input_layernorm,10,18,2.392857142857143,0.7052631578947368,2.392857142857143,True,0.2204512506723404,0.06785038113594055,0.3828125,1.1640625 +input_layernorm,10,19,2.8418367346938775,0.7397078353253652,2.8418367346938775,True,0.2204512506723404,0.19409698247909546,0.3828125,0.884765625 +input_layernorm,10,20,2.5357142857142856,0.7171717171717171,2.5357142857142856,True,0.2204512506723404,0.08625888079404831,0.3828125,1.0262451171875 +input_layernorm,10,21,2.9285714285714284,0.7454545454545455,2.9285714285714284,True,0.2204512506723404,0.07095508277416229,0.3828125,1.043212890625 +input_layernorm,10,22,2.7857142857142856,0.7358490566037735,2.7857142857142856,True,0.2204512506723404,0.07214703410863876,0.3828125,1.044921875 +input_layernorm,10,23,3.3333333333333335,0.7692307692307693,3.3333333333333335,True,0.2204512506723404,0.15369786322116852,0.3828125,0.98577880859375 +input_layernorm,11,12,0.7078651685393258,0.4144736842105263,0.7078651685393258,True,0.16603894531726837,0.1900545060634613,0.34375,0.5546875 +input_layernorm,11,13,0.7368421052631579,0.42424242424242425,0.7368421052631579,True,0.16603894531726837,0.16846242547035217,0.34375,0.5703125 +input_layernorm,11,14,1.1420454545454546,0.53315649867374,1.1420454545454546,True,0.16603894531726837,0.11825777590274811,0.34375,0.6875 +input_layernorm,11,15,2.3516483516483517,0.7016393442622951,2.3516483516483517,True,0.16603894531726837,0.06029079854488373,0.34375,0.779296875 +input_layernorm,11,16,1.414745145631068,0.5858776228169368,1.414745145631068,True,0.16603894531726837,0.09195870161056519,0.34375,0.7763671875 +input_layernorm,11,17,2.2244318181818183,0.6898678414096916,2.2244318181818183,True,0.16603894531726837,0.06483674794435501,0.34375,1.0012359619140625 +input_layernorm,11,18,2.778409090909091,0.7353383458646616,2.778409090909091,True,0.16603894531726837,0.06785038113594055,0.34375,1.1640625 +input_layernorm,11,19,3.278409090909091,0.7662682602921647,3.278409090909091,True,0.16603894531726837,0.19409698247909546,0.34375,0.884765625 +input_layernorm,11,20,3.056603773584906,0.7534883720930232,3.056603773584906,True,0.16603894531726837,0.08625888079404831,0.34375,1.0262451171875 +input_layernorm,11,21,3.4831460674157304,0.7769423558897243,3.4831460674157304,True,0.16603894531726837,0.07095508277416229,0.34375,1.043212890625 +input_layernorm,11,22,3.215909090909091,0.7628032345013477,3.215909090909091,True,0.16603894531726837,0.07214703410863876,0.34375,1.044921875 +input_layernorm,11,23,4.142857142857143,0.8055555555555556,4.142857142857143,True,0.16603894531726837,0.15369786322116852,0.34375,0.98577880859375 +input_layernorm,12,13,0.10185185185185185,0.1134020618556701,0.1134020618556701,True,0.1900545060634613,0.16846242547035217,0.5546875,0.5703125 +input_layernorm,12,14,0.3644343302990897,0.26709554443650224,0.3644343302990897,True,0.1900545060634613,0.11825777590274811,0.5546875,0.6875 +input_layernorm,12,15,1.0359589041095891,0.5088309503784693,1.0359589041095891,True,0.1900545060634613,0.06029079854488373,0.5546875,0.779296875 +input_layernorm,12,16,0.6295774647887324,0.3863439930855661,0.6295774647887324,True,0.1900545060634613,0.09195870161056519,0.5546875,0.7763671875 +input_layernorm,12,17,0.9982394366197183,0.4995594713656388,0.9982394366197183,True,0.1900545060634613,0.06483674794435501,0.5546875,1.0012359619140625 +input_layernorm,12,18,1.341549295774648,0.5729323308270676,1.341549295774648,True,0.1900545060634613,0.06785038113594055,0.5546875,1.1640625 +input_layernorm,12,19,1.6514084507042253,0.6228419654714475,1.6514084507042253,True,0.1900545060634613,0.19409698247909546,0.5546875,0.884765625 +input_layernorm,12,20,1.5294117647058822,0.6046511627906976,1.5294117647058822,True,0.1900545060634613,0.08625888079404831,0.5546875,1.0262451171875 +input_layernorm,12,21,1.7876712328767124,0.6412776412776413,1.7876712328767124,True,0.1900545060634613,0.07095508277416229,0.5546875,1.043212890625 +input_layernorm,12,22,1.6267123287671232,0.6192959582790091,1.6267123287671232,True,0.1900545060634613,0.07214703410863876,0.5546875,1.044921875 +input_layernorm,12,23,2.2054794520547945,0.688034188034188,2.2054794520547945,True,0.1900545060634613,0.15369786322116852,0.5546875,0.98577880859375 +input_layernorm,13,14,0.3580163043478261,0.263631815907954,0.3580163043478261,True,0.16846242547035217,0.11825777590274811,0.5703125,0.6875 +input_layernorm,13,15,1.0890410958904109,0.521311475409836,1.0890410958904109,True,0.16846242547035217,0.06029079854488373,0.5703125,0.779296875 +input_layernorm,13,16,0.6413043478260869,0.39072847682119205,0.6413043478260869,True,0.16846242547035217,0.09195870161056519,0.5703125,0.7763671875 +input_layernorm,13,17,0.9434931506849316,0.48546255506607927,0.9434931506849316,True,0.16846242547035217,0.06483674794435501,0.5703125,1.0012359619140625 +input_layernorm,13,18,1.2773972602739727,0.5609022556390978,1.2773972602739727,True,0.16846242547035217,0.06785038113594055,0.5703125,1.1640625 +input_layernorm,13,19,1.5787671232876712,0.6122177954847278,1.5787671232876712,True,0.16846242547035217,0.19409698247909546,0.5703125,0.884765625 +input_layernorm,13,20,1.457142857142857,0.5930232558139535,1.457142857142857,True,0.16846242547035217,0.08625888079404831,0.5703125,1.0262451171875 +input_layernorm,13,21,1.759322033898305,0.6375921375921376,1.759322033898305,True,0.16846242547035217,0.07095508277416229,0.5703125,1.043212890625 +input_layernorm,13,22,1.6,0.6153846153846154,1.6,True,0.16846242547035217,0.07214703410863876,0.5703125,1.044921875 +input_layernorm,13,23,2.1728813559322036,0.6848290598290598,2.1728813559322036,True,0.16846242547035217,0.15369786322116852,0.5703125,0.98577880859375 +input_layernorm,14,15,0.6661931818181818,0.667953667953668,0.667953667953668,True,0.11825777590274811,0.06029079854488373,0.6875,0.779296875 +input_layernorm,14,16,0.4027630180658874,0.2871212121212121,0.4027630180658874,True,0.11825777590274811,0.09195870161056519,0.6875,0.7763671875 +input_layernorm,14,17,0.640807651434644,0.3905440414507772,0.640807651434644,True,0.11825777590274811,0.06483674794435501,0.6875,1.0012359619140625 +input_layernorm,14,18,0.8575982996811902,0.46167048054919907,0.8575982996811902,True,0.11825777590274811,0.06785038113594055,0.6875,1.1640625 +input_layernorm,14,19,1.1590909090909092,0.5774647887323944,1.1590909090909092,True,0.11825777590274811,0.19409698247909546,0.6875,0.884765625 +input_layernorm,14,20,1.107843137254902,0.5255813953488372,1.107843137254902,True,0.11825777590274811,0.08625888079404831,0.6875,1.0262451171875 +input_layernorm,14,21,1.2613636363636365,0.5577889447236181,1.2613636363636365,True,0.11825777590274811,0.07095508277416229,0.6875,1.043212890625 +input_layernorm,14,22,1.0710227272727273,0.5171467764060357,1.0710227272727273,True,0.11825777590274811,0.07214703410863876,0.6875,1.044921875 +input_layernorm,14,23,1.5056818181818181,0.6009070294784581,1.5056818181818181,True,0.11825777590274811,0.15369786322116852,0.6875,0.98577880859375 +input_layernorm,15,16,0.8797573083287369,0.4993757802746567,0.8797573083287369,True,0.06029079854488373,0.09195870161056519,0.779296875,0.7763671875 +input_layernorm,15,17,0.732297852900868,0.42273206751054854,0.732297852900868,True,0.06029079854488373,0.06483674794435501,0.779296875,1.0012359619140625 +input_layernorm,15,18,0.8297872340425532,0.45348837209302323,0.8297872340425532,True,0.06029079854488373,0.06785038113594055,0.779296875,1.1640625 +input_layernorm,15,19,1.0300751879699248,0.5074074074074074,1.0300751879699248,True,0.06029079854488373,0.19409698247909546,0.779296875,0.884765625 +input_layernorm,15,20,1.0451127819548873,0.5110294117647058,1.0451127819548873,True,0.06029079854488373,0.08625888079404831,0.779296875,1.0262451171875 +input_layernorm,15,21,1.150375939849624,0.534965034965035,1.150375939849624,True,0.06029079854488373,0.07095508277416229,0.779296875,1.043212890625 +input_layernorm,15,22,1.005012531328321,0.50125,1.005012531328321,True,0.06029079854488373,0.07214703410863876,0.779296875,1.044921875 +input_layernorm,15,23,1.100250626566416,0.5238663484486874,1.100250626566416,True,0.06029079854488373,0.15369786322116852,0.779296875,0.98577880859375 +input_layernorm,16,17,0.3909313725490196,0.28105726872246695,0.3909313725490196,True,0.09195870161056519,0.06483674794435501,0.7763671875,1.0012359619140625 +input_layernorm,16,18,0.6299019607843137,0.38646616541353385,0.6299019607843137,True,0.09195870161056519,0.06785038113594055,0.7763671875,1.1640625 +input_layernorm,16,19,0.8952618453865336,0.7777777777777778,0.8952618453865336,True,0.09195870161056519,0.19409698247909546,0.7763671875,0.884765625 +input_layernorm,16,20,0.7578027465667915,0.43110795454545453,0.7578027465667915,True,0.09195870161056519,0.08625888079404831,0.7763671875,1.0262451171875 +input_layernorm,16,21,1.0324594257178528,0.507985257985258,1.0324594257178528,True,0.09195870161056519,0.07095508277416229,0.7763671875,1.043212890625 +input_layernorm,16,22,0.9151061173533084,0.47783572359843546,0.9151061173533084,True,0.09195870161056519,0.07214703410863876,0.7763671875,1.044921875 +input_layernorm,16,23,1.3370786516853932,0.5721153846153846,1.3370786516853932,True,0.09195870161056519,0.15369786322116852,0.7763671875,0.98577880859375 +input_layernorm,17,18,0.20625,0.17098445595854922,0.20625,True,0.06483674794435501,0.06785038113594055,1.0012359619140625,1.1640625 +input_layernorm,17,19,0.4493804959080726,0.6191966614501826,0.6191966614501826,True,0.06483674794435501,0.19409698247909546,1.0012359619140625,0.884765625 +input_layernorm,17,20,0.35731807031888796,0.2632530120481928,0.35731807031888796,True,0.06483674794435501,0.08625888079404831,1.0012359619140625,1.0262451171875 +input_layernorm,17,21,0.5803900259614804,0.367244804400978,0.5803900259614804,True,0.06483674794435501,0.07095508277416229,1.0012359619140625,1.043212890625 +input_layernorm,17,22,0.4475112054729889,0.30915906127770537,0.4475112054729889,True,0.06483674794435501,0.07214703410863876,1.0012359619140625,1.044921875 +input_layernorm,17,23,0.7790511605224256,0.45824255628177196,0.7790511605224256,True,0.06483674794435501,0.15369786322116852,1.0012359619140625,0.98577880859375 +input_layernorm,18,19,0.40243142144638405,0.6734480959833072,0.6734480959833072,True,0.06785038113594055,0.19409698247909546,1.1640625,0.884765625 +input_layernorm,18,20,0.17917304747320062,0.19578313253012047,0.19578313253012047,True,0.06785038113594055,0.08625888079404831,1.1640625,1.0262451171875 +input_layernorm,18,21,0.3624161073825503,0.2660098522167488,0.3624161073825503,True,0.06785038113594055,0.07095508277416229,1.1640625,1.043212890625 +input_layernorm,18,22,0.22378199834847234,0.27217125382262997,0.27217125382262997,True,0.06785038113594055,0.07214703410863876,1.1640625,1.044921875 +input_layernorm,18,23,0.4929343308395677,0.5599088838268793,0.5599088838268793,True,0.06785038113594055,0.15369786322116852,1.1640625,0.98577880859375 +input_layernorm,19,20,0.702803274621682,0.4127331002331002,0.702803274621682,True,0.19409698247909546,0.08625888079404831,0.884765625,1.0262451171875 +input_layernorm,19,21,0.8282009724473258,0.4530141843971631,0.8282009724473258,True,0.19409698247909546,0.07095508277416229,0.884765625,1.043212890625 +input_layernorm,19,22,0.6790923824959482,0.40444015444015446,0.6790923824959482,True,0.19409698247909546,0.07214703410863876,0.884765625,1.044921875 +input_layernorm,19,23,0.34451054624121147,0.5234624145785877,0.5234624145785877,True,0.19409698247909546,0.15369786322116852,0.884765625,0.98577880859375 +input_layernorm,20,21,0.2359208523592085,0.19088669950738915,0.2359208523592085,True,0.08625888079404831,0.07095508277416229,1.0262451171875,1.043212890625 +input_layernorm,20,22,0.18092909535452323,0.2208955223880597,0.2208955223880597,True,0.08625888079404831,0.07214703410863876,1.0262451171875,1.044921875 +input_layernorm,20,23,0.3733133433283358,0.5809627347949508,0.5809627347949508,True,0.08625888079404831,0.15369786322116852,1.0262451171875,0.98577880859375 +input_layernorm,21,22,0.14822546972860126,0.17401960784313725,0.17401960784313725,True,0.07095508277416229,0.07214703410863876,1.043212890625,1.044921875 +input_layernorm,21,23,0.3882978723404255,0.6347826086956522,0.6347826086956522,True,0.07095508277416229,0.15369786322116852,1.043212890625,0.98577880859375 +input_layernorm,22,23,0.333976833976834,0.5014492753623189,0.5014492753623189,True,0.07214703410863876,0.15369786322116852,1.044921875,0.98577880859375 +post_attention_layernorm,0,1,129.5,0.9923371647509579,129.5,True,0.108433797955513,0.09410307556390762,0.00390625,0.45703125 +post_attention_layernorm,0,2,154.0,0.9935483870967742,154.0,True,0.108433797955513,0.10385182499885559,0.00390625,0.533203125 +post_attention_layernorm,0,3,165.5,0.993993993993994,165.5,True,0.108433797955513,0.11546041816473007,0.00390625,0.48828125 +post_attention_layernorm,0,4,181.5,0.9945205479452055,181.5,True,0.108433797955513,0.11874310672283173,0.00390625,0.4765625 +post_attention_layernorm,0,5,194.25,0.9948783610755442,194.25,True,0.108433797955513,0.14567376673221588,0.00390625,0.421875 +post_attention_layernorm,0,6,221.0,0.9954954954954955,221.0,True,0.108433797955513,0.13559450209140778,0.00390625,0.43359375 +post_attention_layernorm,0,7,188.5,0.9947229551451188,188.5,True,0.108433797955513,0.17147497832775116,0.00390625,0.375 +post_attention_layernorm,0,8,187.0,0.9946808510638298,187.0,True,0.108433797955513,0.18255221843719482,0.00390625,0.33984375 +post_attention_layernorm,0,9,185.0,0.9946236559139785,185.0,True,0.108433797955513,0.17869991064071655,0.00390625,0.3515625 +post_attention_layernorm,0,10,215.75,0.9953863898500577,215.75,True,0.108433797955513,0.16611140966415405,0.00390625,0.36328125 +post_attention_layernorm,0,11,195.75,0.9949174078780177,195.75,True,0.108433797955513,0.1528426557779312,0.00390625,0.41796875 +post_attention_layernorm,0,12,188.0,0.9947089947089947,188.0,True,0.108433797955513,0.12497646361589432,0.00390625,0.5234375 +post_attention_layernorm,0,13,199.25,0.9950062421972534,199.25,True,0.108433797955513,0.09632012248039246,0.00390625,0.619140625 +post_attention_layernorm,0,14,228.875,0.9956498096791735,228.875,True,0.108433797955513,0.053455036133527756,0.00390625,0.87646484375 +post_attention_layernorm,0,15,197.25,0.9949558638083228,197.25,True,0.108433797955513,0.06801187992095947,0.00390625,0.736328125 +post_attention_layernorm,0,16,189.5,0.994750656167979,189.5,True,0.108433797955513,0.08680811524391174,0.00390625,0.72265625 +post_attention_layernorm,0,17,181.5,0.9945205479452055,181.5,True,0.108433797955513,0.09242258220911026,0.00390625,0.712890625 +post_attention_layernorm,0,18,224.875,0.9955727725511898,224.875,True,0.108433797955513,0.09676424413919449,0.00390625,0.8095703125 +post_attention_layernorm,0,19,233.5,0.9957356076759062,233.5,True,0.108433797955513,0.07613449543714523,0.00390625,0.81640625 +post_attention_layernorm,0,20,209.5,0.995249406175772,209.5,True,0.108433797955513,0.07808392494916916,0.00390625,0.822265625 +post_attention_layernorm,0,21,220.0,0.995475113122172,220.0,True,0.108433797955513,0.06570179015398026,0.00390625,0.86328125 +post_attention_layernorm,0,22,248.5625,0.995992987728525,248.5625,True,0.108433797955513,0.05012959614396095,0.00390625,0.9713134765625 +post_attention_layernorm,0,23,258.484375,0.9961462034082014,258.484375,True,0.108433797955513,0.06521295011043549,0.00390625,1.01361083984375 +post_attention_layernorm,1,2,0.42512908777969016,0.29830917874396135,0.42512908777969016,True,0.09410307556390762,0.10385182499885559,0.45703125,0.533203125 +post_attention_layernorm,1,3,0.27586206896551724,0.26858457997698504,0.27586206896551724,True,0.09410307556390762,0.11546041816473007,0.45703125,0.48828125 +post_attention_layernorm,1,4,0.39846743295019155,0.28493150684931506,0.39846743295019155,True,0.09410307556390762,0.11874310672283173,0.45703125,0.4765625 +post_attention_layernorm,1,5,0.49616858237547895,0.33162612035851474,0.49616858237547895,True,0.09410307556390762,0.14567376673221588,0.45703125,0.421875 +post_attention_layernorm,1,6,0.7011494252873564,0.41216216216216217,0.7011494252873564,True,0.09410307556390762,0.13559450209140778,0.45703125,0.43359375 +post_attention_layernorm,1,7,0.4521072796934866,0.45161290322580644,0.4521072796934866,True,0.09410307556390762,0.17147497832775116,0.45703125,0.375 +post_attention_layernorm,1,8,0.5296052631578947,0.594488188976378,0.594488188976378,True,0.09410307556390762,0.18255221843719482,0.45703125,0.33984375 +post_attention_layernorm,1,9,0.42528735632183906,0.5133079847908745,0.5133079847908745,True,0.09410307556390762,0.17869991064071655,0.45703125,0.3515625 +post_attention_layernorm,1,10,0.6609195402298851,0.5073260073260073,0.6609195402298851,True,0.09410307556390762,0.16611140966415405,0.45703125,0.36328125 +post_attention_layernorm,1,11,0.5076628352490421,0.3785807291666667,0.5076628352490421,True,0.09410307556390762,0.1528426557779312,0.45703125,0.41796875 +post_attention_layernorm,1,12,0.7397203947368421,0.4274732620320856,0.7397203947368421,True,0.09410307556390762,0.12497646361589432,0.45703125,0.5234375 +post_attention_layernorm,1,13,0.8725328947368421,0.46596398770311814,0.8725328947368421,True,0.09410307556390762,0.09632012248039246,0.45703125,0.619140625 +post_attention_layernorm,1,14,1.08739406779661,0.5209337731540218,1.08739406779661,True,0.09410307556390762,0.053455036133527756,0.45703125,0.87646484375 +post_attention_layernorm,1,15,1.7415254237288136,0.6352395672333848,1.7415254237288136,True,0.09410307556390762,0.06801187992095947,0.45703125,0.736328125 +post_attention_layernorm,1,16,0.9901315789473685,0.4975206611570248,0.9901315789473685,True,0.09410307556390762,0.08680811524391174,0.45703125,0.72265625 +post_attention_layernorm,1,17,1.009733606557377,0.5024216161101198,1.009733606557377,True,0.09410307556390762,0.09242258220911026,0.45703125,0.712890625 +post_attention_layernorm,1,18,1.194078947368421,0.5442278860569715,1.194078947368421,True,0.09410307556390762,0.09676424413919449,0.45703125,0.8095703125 +post_attention_layernorm,1,19,1.5277777777777777,0.6043956043956044,1.5277777777777777,True,0.09410307556390762,0.07613449543714523,0.45703125,0.81640625 +post_attention_layernorm,1,20,1.3644067796610169,0.5770609318996416,1.3644067796610169,True,0.09410307556390762,0.07808392494916916,0.45703125,0.822265625 +post_attention_layernorm,1,21,1.7166666666666666,0.6319018404907976,1.7166666666666666,True,0.09410307556390762,0.06570179015398026,0.45703125,0.86328125 +post_attention_layernorm,1,22,2.377049180327869,0.7038834951456311,2.377049180327869,True,0.09410307556390762,0.05012959614396095,0.45703125,0.9713134765625 +post_attention_layernorm,1,23,2.6324786324786325,0.7247058823529412,2.6324786324786325,True,0.09410307556390762,0.06521295011043549,0.45703125,1.01361083984375 +post_attention_layernorm,2,3,0.3058252427184466,0.4405594405594406,0.4405594405594406,True,0.10385182499885559,0.11546041816473007,0.533203125,0.48828125 +post_attention_layernorm,2,4,0.3094660194174757,0.44815465729349735,0.44815465729349735,True,0.10385182499885559,0.11874310672283173,0.533203125,0.4765625 +post_attention_layernorm,2,5,0.3109903381642512,0.45135845749342685,0.45135845749342685,True,0.10385182499885559,0.14567376673221588,0.533203125,0.421875 +post_attention_layernorm,2,6,0.432258064516129,0.5354659248956884,0.5354659248956884,True,0.10385182499885559,0.13559450209140778,0.533203125,0.43359375 +post_attention_layernorm,2,7,0.3689613526570048,0.584688995215311,0.584688995215311,True,0.10385182499885559,0.17147497832775116,0.533203125,0.375 +post_attention_layernorm,2,8,0.42462600690448793,0.738,0.738,True,0.10385182499885559,0.18255221843719482,0.533203125,0.33984375 +post_attention_layernorm,2,9,0.42002301495972383,0.7242063492063492,0.7242063492063492,True,0.10385182499885559,0.17869991064071655,0.533203125,0.3515625 +post_attention_layernorm,2,10,0.414368739953011,0.7075591216216216,0.7075591216216216,True,0.10385182499885559,0.16611140966415405,0.533203125,0.36328125 +post_attention_layernorm,2,11,0.37333937198067635,0.5957600578173934,0.5957600578173934,True,0.10385182499885559,0.1528426557779312,0.533203125,0.41796875 +post_attention_layernorm,2,12,0.46098066298342544,0.5644780349551252,0.5644780349551252,True,0.10385182499885559,0.12497646361589432,0.533203125,0.5234375 +post_attention_layernorm,2,13,0.5725138121546961,0.52416014726185,0.5725138121546961,True,0.10385182499885559,0.09632012248039246,0.533203125,0.619140625 +post_attention_layernorm,2,14,0.8044871794871795,0.4500659920809503,0.8044871794871795,True,0.10385182499885559,0.053455036133527756,0.533203125,0.87646484375 +post_attention_layernorm,2,15,1.36996336996337,0.5780525502318392,1.36996336996337,True,0.10385182499885559,0.06801187992095947,0.533203125,0.736328125 +post_attention_layernorm,2,16,0.6712707182320442,0.47909888895709285,0.6712707182320442,True,0.10385182499885559,0.08680811524391174,0.533203125,0.72265625 +post_attention_layernorm,2,17,0.7513489208633094,0.4290115532734275,0.7513489208633094,True,0.10385182499885559,0.09242258220911026,0.533203125,0.712890625 +post_attention_layernorm,2,18,0.8425414364640884,0.4572713643178411,0.8425414364640884,True,0.10385182499885559,0.09676424413919449,0.533203125,0.8095703125 +post_attention_layernorm,2,19,1.1666666666666667,0.5384615384615384,1.1666666666666667,True,0.10385182499885559,0.07613449543714523,0.533203125,0.81640625 +post_attention_layernorm,2,20,1.043956043956044,0.510752688172043,1.043956043956044,True,0.10385182499885559,0.07808392494916916,0.533203125,0.822265625 +post_attention_layernorm,2,21,1.381294964028777,0.5800604229607251,1.381294964028777,True,0.10385182499885559,0.06570179015398026,0.533203125,0.86328125 +post_attention_layernorm,2,22,1.9640287769784173,0.662621359223301,1.9640287769784173,True,0.10385182499885559,0.05012959614396095,0.533203125,0.9713134765625 +post_attention_layernorm,2,23,2.1135531135531136,0.6788235294117647,2.1135531135531136,True,0.10385182499885559,0.06521295011043549,0.533203125,1.01361083984375 +post_attention_layernorm,3,4,0.1832089552238806,0.22430333485609869,0.22430333485609869,True,0.11546041816473007,0.11874310672283173,0.48828125,0.4765625 +post_attention_layernorm,3,5,0.1939149560117302,0.2405638926784902,0.2405638926784902,True,0.11546041816473007,0.14567376673221588,0.48828125,0.421875 +post_attention_layernorm,3,6,0.3333333333333333,0.25,0.3333333333333333,True,0.11546041816473007,0.13559450209140778,0.48828125,0.43359375 +post_attention_layernorm,3,7,0.2893772893772894,0.4072164948453608,0.4072164948453608,True,0.11546041816473007,0.17147497832775116,0.48828125,0.375 +post_attention_layernorm,3,8,0.34798534798534797,0.5337078651685393,0.5337078651685393,True,0.11546041816473007,0.18255221843719482,0.48828125,0.33984375 +post_attention_layernorm,3,9,0.34065934065934067,0.5166666666666667,0.5166666666666667,True,0.11546041816473007,0.17869991064071655,0.48828125,0.3515625 +post_attention_layernorm,3,10,0.3333333333333333,0.5,0.5,True,0.11546041816473007,0.16611140966415405,0.48828125,0.36328125 +post_attention_layernorm,3,11,0.2514124293785311,0.28756009615384615,0.28756009615384615,True,0.11546041816473007,0.1528426557779312,0.48828125,0.41796875 +post_attention_layernorm,3,12,0.43326558265582654,0.3787001287001287,0.43326558265582654,True,0.11546041816473007,0.12497646361589432,0.48828125,0.5234375 +post_attention_layernorm,3,13,0.5426829268292683,0.35177865612648224,0.5426829268292683,True,0.11546041816473007,0.09632012248039246,0.48828125,0.619140625 +post_attention_layernorm,3,14,0.902027027027027,0.47424511545293074,0.902027027027027,True,0.11546041816473007,0.053455036133527756,0.48828125,0.87646484375 +post_attention_layernorm,3,15,1.56,0.609375,1.56,True,0.11546041816473007,0.06801187992095947,0.48828125,0.736328125 +post_attention_layernorm,3,16,0.8092643051771117,0.44728915662650603,0.8092643051771117,True,0.11546041816473007,0.08680811524391174,0.48828125,0.72265625 +post_attention_layernorm,3,17,0.8933397683397684,0.47183278103492227,0.8933397683397684,True,0.11546041816473007,0.09242258220911026,0.48828125,0.712890625 +post_attention_layernorm,3,18,0.9215,0.47957325006505336,0.9215,True,0.11546041816473007,0.09676424413919449,0.48828125,0.8095703125 +post_attention_layernorm,3,19,1.366,0.577345731191885,1.366,True,0.11546041816473007,0.07613449543714523,0.48828125,0.81640625 +post_attention_layernorm,3,20,1.169,0.5389580451821115,1.169,True,0.11546041816473007,0.07808392494916916,0.48828125,0.822265625 +post_attention_layernorm,3,21,1.5396825396825398,0.60625,1.5396825396825398,True,0.11546041816473007,0.06570179015398026,0.48828125,0.86328125 +post_attention_layernorm,3,22,2.2698412698412698,0.6941747572815534,2.2698412698412698,True,0.11546041816473007,0.05012959614396095,0.48828125,0.9713134765625 +post_attention_layernorm,3,23,2.4,0.7058823529411765,2.4,True,0.11546041816473007,0.06521295011043549,0.48828125,1.01361083984375 +post_attention_layernorm,4,5,0.16475095785440613,0.19724770642201836,0.19724770642201836,True,0.11874310672283173,0.14567376673221588,0.4765625,0.421875 +post_attention_layernorm,4,6,0.2548342541436464,0.2030820033021464,0.2548342541436464,True,0.11874310672283173,0.13559450209140778,0.4765625,0.43359375 +post_attention_layernorm,4,7,0.2785923753665689,0.3861788617886179,0.3861788617886179,True,0.11874310672283173,0.17147497832775116,0.4765625,0.375 +post_attention_layernorm,4,8,0.3253731343283582,0.4823008849557522,0.4823008849557522,True,0.11874310672283173,0.18255221843719482,0.4765625,0.33984375 +post_attention_layernorm,4,9,0.3128491620111732,0.45528455284552843,0.45528455284552843,True,0.11874310672283173,0.17869991064071655,0.4765625,0.3515625 +post_attention_layernorm,4,10,0.30434782608695654,0.4375,0.4375,True,0.11874310672283173,0.16611140966415405,0.4765625,0.36328125 +post_attention_layernorm,4,11,0.2160188457008245,0.27554086538461536,0.27554086538461536,True,0.11874310672283173,0.1528426557779312,0.4765625,0.41796875 +post_attention_layernorm,4,12,0.3737012987012987,0.3658301158301158,0.3737012987012987,True,0.11874310672283173,0.12497646361589432,0.4765625,0.5234375 +post_attention_layernorm,4,13,0.4785714285714286,0.32367149758454106,0.4785714285714286,True,0.11874310672283173,0.09632012248039246,0.4765625,0.619140625 +post_attention_layernorm,4,14,0.9615384615384616,0.49019607843137253,0.9615384615384616,True,0.11874310672283173,0.053455036133527756,0.4765625,0.87646484375 +post_attention_layernorm,4,15,1.6598360655737705,0.6240369799691834,1.6598360655737705,True,0.11874310672283173,0.06801187992095947,0.4765625,0.736328125 +post_attention_layernorm,4,16,0.7994579945799458,0.4442771084337349,0.7994579945799458,True,0.11874310672283173,0.08680811524391174,0.4765625,0.72265625 +post_attention_layernorm,4,17,0.9569672131147541,0.48900523560209425,0.9569672131147541,True,0.11874310672283173,0.09242258220911026,0.4765625,0.712890625 +post_attention_layernorm,4,18,1.0363729508196722,0.5089308176100629,1.0363729508196722,True,0.11874310672283173,0.09676424413919449,0.4765625,0.8095703125 +post_attention_layernorm,4,19,1.4246031746031746,0.5875613747954174,1.4246031746031746,True,0.11874310672283173,0.07613449543714523,0.4765625,0.81640625 +post_attention_layernorm,4,20,1.2930327868852458,0.5638963360142984,1.2930327868852458,True,0.11874310672283173,0.07808392494916916,0.4765625,0.822265625 +post_attention_layernorm,4,21,1.5806451612903225,0.6125,1.5806451612903225,True,0.11874310672283173,0.06570179015398026,0.4765625,0.86328125 +post_attention_layernorm,4,22,2.3225806451612905,0.6990291262135923,2.3225806451612905,True,0.11874310672283173,0.05012959614396095,0.4765625,0.9713134765625 +post_attention_layernorm,4,23,2.373015873015873,0.7035294117647058,2.373015873015873,True,0.11874310672283173,0.06521295011043549,0.4765625,1.01361083984375 +post_attention_layernorm,5,6,0.32515337423312884,0.24537037037037038,0.32515337423312884,True,0.14567376673221588,0.13559450209140778,0.421875,0.43359375 +post_attention_layernorm,5,7,0.1608832807570978,0.19172932330827067,0.19172932330827067,True,0.14567376673221588,0.17147497832775116,0.421875,0.375 +post_attention_layernorm,5,8,0.2413793103448276,0.3181818181818182,0.3181818181818182,True,0.14567376673221588,0.18255221843719482,0.421875,0.33984375 +post_attention_layernorm,5,9,0.24968314321926488,0.3327702702702703,0.3327702702702703,True,0.14567376673221588,0.17869991064071655,0.421875,0.3515625 +post_attention_layernorm,5,10,0.2541436464088398,0.30067567567567566,0.30067567567567566,True,0.14567376673221588,0.16611140966415405,0.421875,0.36328125 +post_attention_layernorm,5,11,0.214,0.23786808894230768,0.23786808894230768,True,0.14567376673221588,0.1528426557779312,0.421875,0.41796875 +post_attention_layernorm,5,12,0.4103333333333333,0.3254906692406692,0.4103333333333333,True,0.14567376673221588,0.12497646361589432,0.421875,0.5234375 +post_attention_layernorm,5,13,0.555045871559633,0.35693215339233036,0.555045871559633,True,0.14567376673221588,0.09632012248039246,0.421875,0.619140625 +post_attention_layernorm,5,14,1.275092936802974,0.5604575163398693,1.275092936802974,True,0.14567376673221588,0.053455036133527756,0.421875,0.87646484375 +post_attention_layernorm,5,15,1.962962962962963,0.6625,1.962962962962963,True,0.14567376673221588,0.06801187992095947,0.421875,0.736328125 +post_attention_layernorm,5,16,1.063197026022305,0.5153153153153153,1.063197026022305,True,0.14567376673221588,0.08680811524391174,0.421875,0.72265625 +post_attention_layernorm,5,17,1.2333715596330275,0.5522464698331194,1.2333715596330275,True,0.14567376673221588,0.09242258220911026,0.421875,0.712890625 +post_attention_layernorm,5,18,1.2573327850877194,0.5569993017395792,1.2573327850877194,True,0.14567376673221588,0.09676424413919449,0.421875,0.8095703125 +post_attention_layernorm,5,19,1.738532110091743,0.6348408710217756,1.738532110091743,True,0.14567376673221588,0.07613449543714523,0.421875,0.81640625 +post_attention_layernorm,5,20,1.5136363636363637,0.6021699819168174,1.5136363636363637,True,0.14567376673221588,0.07808392494916916,0.421875,0.822265625 +post_attention_layernorm,5,21,2.036697247706422,0.6706948640483383,2.036697247706422,True,0.14567376673221588,0.06570179015398026,0.421875,0.86328125 +post_attention_layernorm,5,22,2.779816513761468,0.7354368932038835,2.779816513761468,True,0.14567376673221588,0.05012959614396095,0.421875,0.9713134765625 +post_attention_layernorm,5,23,2.935185185185185,0.7458823529411764,2.935185185185185,True,0.14567376673221588,0.06521295011043549,0.421875,1.01361083984375 +post_attention_layernorm,6,7,0.3519163763066202,0.543010752688172,0.543010752688172,True,0.13559450209140778,0.17147497832775116,0.43359375,0.375 +post_attention_layernorm,6,8,0.4122905027932961,0.7015209125475285,0.7015209125475285,True,0.13559450209140778,0.18255221843719482,0.43359375,0.33984375 +post_attention_layernorm,6,9,0.35195530726256985,0.5431034482758621,0.5431034482758621,True,0.13559450209140778,0.17869991064071655,0.43359375,0.3515625 +post_attention_layernorm,6,10,0.3743016759776536,0.5982142857142857,0.5982142857142857,True,0.13559450209140778,0.16611140966415405,0.43359375,0.36328125 +post_attention_layernorm,6,11,0.2961672473867596,0.4207920792079208,0.4207920792079208,True,0.13559450209140778,0.1528426557779312,0.43359375,0.41796875 +post_attention_layernorm,6,12,0.3181818181818182,0.29812834224598933,0.3181818181818182,True,0.13559450209140778,0.12497646361589432,0.43359375,0.5234375 +post_attention_layernorm,6,13,0.5526315789473685,0.3559322033898305,0.5526315789473685,True,0.13559450209140778,0.09632012248039246,0.43359375,0.619140625 +post_attention_layernorm,6,14,1.1714801444043321,0.5394846217788861,1.1714801444043321,True,0.13559450209140778,0.053455036133527756,0.43359375,0.87646484375 +post_attention_layernorm,6,15,1.927927927927928,0.6584615384615384,1.927927927927928,True,0.13559450209140778,0.06801187992095947,0.43359375,0.736328125 +post_attention_layernorm,6,16,0.9859913793103449,0.4964731416169289,0.9859913793103449,True,0.13559450209140778,0.08680811524391174,0.43359375,0.72265625 +post_attention_layernorm,6,17,1.2088963963963963,0.5472852408870762,1.2088963963963963,True,0.13559450209140778,0.09242258220911026,0.43359375,0.712890625 +post_attention_layernorm,6,18,1.2401463963963963,0.5536006032424281,1.2401463963963963,True,0.13559450209140778,0.09676424413919449,0.43359375,0.8095703125 +post_attention_layernorm,6,19,1.6644144144144144,0.6246830092983939,1.6644144144144144,True,0.13559450209140778,0.07613449543714523,0.43359375,0.81640625 +post_attention_layernorm,6,20,1.5202702702702702,0.6032171581769437,1.5202702702702702,True,0.13559450209140778,0.07808392494916916,0.43359375,0.822265625 +post_attention_layernorm,6,21,1.8782608695652174,0.6525679758308157,1.8782608695652174,True,0.13559450209140778,0.06570179015398026,0.43359375,0.86328125 +post_attention_layernorm,6,22,2.6140350877192984,0.7233009708737864,2.6140350877192984,True,0.13559450209140778,0.05012959614396095,0.43359375,0.9713134765625 +post_attention_layernorm,6,23,2.828828828828829,0.7388235294117647,2.828828828828829,True,0.13559450209140778,0.06521295011043549,0.43359375,1.01361083984375 +post_attention_layernorm,7,8,0.19383825417201542,0.16236559139784945,0.19383825417201542,True,0.17147497832775116,0.18255221843719482,0.375,0.33984375 +post_attention_layernorm,7,9,0.12010443864229765,0.13649851632047477,0.13649851632047477,True,0.17147497832775116,0.17869991064071655,0.375,0.3515625 +post_attention_layernorm,7,10,0.15468549422336328,0.1339633129516398,0.15468549422336328,True,0.17147497832775116,0.16611140966415405,0.375,0.36328125 +post_attention_layernorm,7,11,0.23232323232323232,0.1885245901639344,0.23232323232323232,True,0.17147497832775116,0.1528426557779312,0.375,0.41796875 +post_attention_layernorm,7,12,0.5047169811320755,0.335423197492163,0.5047169811320755,True,0.17147497832775116,0.12497646361589432,0.375,0.5234375 +post_attention_layernorm,7,13,0.7424242424242424,0.4260869565217391,0.7424242424242424,True,0.17147497832775116,0.09632012248039246,0.375,0.619140625 +post_attention_layernorm,7,14,1.5932203389830508,0.6143790849673203,1.5932203389830508,True,0.17147497832775116,0.053455036133527756,0.375,0.87646484375 +post_attention_layernorm,7,15,2.3645833333333335,0.7027863777089783,2.3645833333333335,True,0.17147497832775116,0.06801187992095947,0.375,0.736328125 +post_attention_layernorm,7,16,1.3799283154121864,0.5798192771084337,1.3799283154121864,True,0.17147497832775116,0.08680811524391174,0.375,0.72265625 +post_attention_layernorm,7,17,1.5019132653061225,0.6003058883507519,1.5019132653061225,True,0.17147497832775116,0.09242258220911026,0.375,0.712890625 +post_attention_layernorm,7,18,1.579954954954955,0.6123963334788302,1.579954954954955,True,0.17147497832775116,0.09676424413919449,0.375,0.8095703125 +post_attention_layernorm,7,19,2.085858585858586,0.6759410801963993,2.085858585858586,True,0.17147497832775116,0.07613449543714523,0.375,0.81640625 +post_attention_layernorm,7,20,1.884020618556701,0.6532618409294012,1.884020618556701,True,0.17147497832775116,0.07808392494916916,0.375,0.822265625 +post_attention_layernorm,7,21,2.377551020408163,0.7039274924471299,2.377551020408163,True,0.17147497832775116,0.06570179015398026,0.375,0.86328125 +post_attention_layernorm,7,22,3.2916666666666665,0.7669902912621359,3.2916666666666665,True,0.17147497832775116,0.05012959614396095,0.375,0.9713134765625 +post_attention_layernorm,7,23,3.381443298969072,0.7717647058823529,3.381443298969072,True,0.17147497832775116,0.06521295011043549,0.375,1.01361083984375 +post_attention_layernorm,8,9,0.1510791366906475,0.13125,0.1510791366906475,True,0.18255221843719482,0.17869991064071655,0.33984375,0.3515625 +post_attention_layernorm,8,10,0.17464424320827943,0.1486784140969163,0.17464424320827943,True,0.18255221843719482,0.16611140966415405,0.33984375,0.36328125 +post_attention_layernorm,8,11,0.28421052631578947,0.22131147540983606,0.28421052631578947,True,0.18255221843719482,0.1528426557779312,0.33984375,0.41796875 +post_attention_layernorm,8,12,0.6377551020408163,0.3894080996884735,0.6377551020408163,True,0.18255221843719482,0.12497646361589432,0.33984375,0.5234375 +post_attention_layernorm,8,13,0.8956043956043956,0.47246376811594204,0.8956043956043956,True,0.18255221843719482,0.09632012248039246,0.33984375,0.619140625 +post_attention_layernorm,8,14,1.7567567567567568,0.6372549019607843,1.7567567567567568,True,0.18255221843719482,0.053455036133527756,0.33984375,0.87646484375 +post_attention_layernorm,8,15,2.7011494252873565,0.7298136645962733,2.7011494252873565,True,0.18255221843719482,0.06801187992095947,0.33984375,0.736328125 +post_attention_layernorm,8,16,1.6141732283464567,0.6174698795180723,1.6141732283464567,True,0.18255221843719482,0.08680811524391174,0.33984375,0.72265625 +post_attention_layernorm,8,17,1.7862215909090908,0.6410910017843487,1.7862215909090908,True,0.18255221843719482,0.09242258220911026,0.33984375,0.712890625 +post_attention_layernorm,8,18,1.8256392045454546,0.6460977755435465,1.8256392045454546,True,0.18255221843719482,0.09676424413919449,0.33984375,0.8095703125 +post_attention_layernorm,8,19,2.357142857142857,0.7021276595744681,2.357142857142857,True,0.18255221843719482,0.07613449543714523,0.33984375,0.81640625 +post_attention_layernorm,8,20,2.143258426966292,0.6818588025022342,2.143258426966292,True,0.18255221843719482,0.07808392494916916,0.33984375,0.822265625 +post_attention_layernorm,8,21,2.67816091954023,0.728125,2.67816091954023,True,0.18255221843719482,0.06570179015398026,0.33984375,0.86328125 +post_attention_layernorm,8,22,3.735632183908046,0.7888349514563107,3.735632183908046,True,0.18255221843719482,0.05012959614396095,0.33984375,0.9713134765625 +post_attention_layernorm,8,23,3.7222222222222223,0.788235294117647,3.7222222222222223,True,0.18255221843719482,0.06521295011043549,0.33984375,1.01361083984375 +post_attention_layernorm,9,10,0.16532258064516128,0.14186851211072665,0.16532258064516128,True,0.17869991064071655,0.16611140966415405,0.3515625,0.36328125 +post_attention_layernorm,9,11,0.2708333333333333,0.21311475409836064,0.2708333333333333,True,0.17869991064071655,0.1528426557779312,0.3515625,0.41796875 +post_attention_layernorm,9,12,0.5735294117647058,0.3644859813084112,0.5735294117647058,True,0.17869991064071655,0.12497646361589432,0.3515625,0.5234375 +post_attention_layernorm,9,13,0.8166666666666667,0.44954128440366975,0.8166666666666667,True,0.17869991064071655,0.09632012248039246,0.3515625,0.619140625 +post_attention_layernorm,9,14,1.6645299145299146,0.6246992782678428,1.6645299145299146,True,0.17869991064071655,0.053455036133527756,0.3515625,0.87646484375 +post_attention_layernorm,9,15,2.6055555555555556,0.7226502311248074,2.6055555555555556,True,0.17869991064071655,0.06801187992095947,0.3515625,0.736328125 +post_attention_layernorm,9,16,1.4316239316239316,0.5887521968365553,1.4316239316239316,True,0.17869991064071655,0.08680811524391174,0.3515625,0.72265625 +post_attention_layernorm,9,17,1.6527777777777777,0.6230366492146597,1.6527777777777777,True,0.17869991064071655,0.09242258220911026,0.3515625,0.712890625 +post_attention_layernorm,9,18,1.7604166666666667,0.6377358490566037,1.7604166666666667,True,0.17869991064071655,0.09676424413919449,0.3515625,0.8095703125 +post_attention_layernorm,9,19,2.1822916666666665,0.6857610474631751,2.1822916666666665,True,0.17869991064071655,0.07613449543714523,0.3515625,0.81640625 +post_attention_layernorm,9,20,2.1083333333333334,0.67828418230563,2.1083333333333334,True,0.17869991064071655,0.07808392494916916,0.3515625,0.822265625 +post_attention_layernorm,9,21,2.4916666666666667,0.7136038186157518,2.4916666666666667,True,0.17869991064071655,0.06570179015398026,0.3515625,0.86328125 +post_attention_layernorm,9,22,3.382978723404255,0.7718446601941747,3.382978723404255,True,0.17869991064071655,0.05012959614396095,0.3515625,0.9713134765625 +post_attention_layernorm,9,23,3.473684210526316,0.7764705882352941,3.473684210526316,True,0.17869991064071655,0.06521295011043549,0.3515625,1.01361083984375 +post_attention_layernorm,10,11,0.23232323232323232,0.1885245901639344,0.23232323232323232,True,0.16611140966415405,0.1528426557779312,0.36328125,0.41796875 +post_attention_layernorm,10,12,0.510752688172043,0.33807829181494664,0.510752688172043,True,0.16611140966415405,0.12497646361589432,0.36328125,0.5234375 +post_attention_layernorm,10,13,0.796875,0.4434782608695652,0.796875,True,0.16611140966415405,0.09632012248039246,0.36328125,0.619140625 +post_attention_layernorm,10,14,1.7079646017699115,0.630718954248366,1.7079646017699115,True,0.16611140966415405,0.053455036133527756,0.36328125,0.87646484375 +post_attention_layernorm,10,15,2.4946236559139785,0.7138461538461538,2.4946236559139785,True,0.16611140966415405,0.06801187992095947,0.36328125,0.736328125 +post_attention_layernorm,10,16,1.4557522123893805,0.5927927927927928,1.4557522123893805,True,0.16611140966415405,0.08680811524391174,0.36328125,0.72265625 +post_attention_layernorm,10,17,1.6364247311827957,0.6206984450675503,1.6364247311827957,True,0.16611140966415405,0.09242258220911026,0.36328125,0.712890625 +post_attention_layernorm,10,18,1.67372311827957,0.6259896946085208,1.67372311827957,True,0.16611140966415405,0.09676424413919449,0.36328125,0.8095703125 +post_attention_layernorm,10,19,2.146276595744681,0.6821639898562976,2.146276595744681,True,0.16611140966415405,0.07613449543714523,0.36328125,0.81640625 +post_attention_layernorm,10,20,1.976063829787234,0.6639857015192135,1.976063829787234,True,0.16611140966415405,0.07808392494916916,0.36328125,0.822265625 +post_attention_layernorm,10,21,2.4123711340206184,0.7069486404833837,2.4123711340206184,True,0.16611140966415405,0.06570179015398026,0.36328125,0.86328125 +post_attention_layernorm,10,22,3.247422680412371,0.7645631067961165,3.247422680412371,True,0.16611140966415405,0.05012959614396095,0.36328125,0.9713134765625 +post_attention_layernorm,10,23,3.521276595744681,0.7788235294117647,3.521276595744681,True,0.16611140966415405,0.06521295011043549,0.36328125,1.01361083984375 +post_attention_layernorm,11,12,0.3375,0.2523364485981308,0.3375,True,0.1528426557779312,0.12497646361589432,0.41796875,0.5234375 +post_attention_layernorm,11,13,0.5131578947368421,0.3391304347826087,0.5131578947368421,True,0.1528426557779312,0.09632012248039246,0.41796875,0.619140625 +post_attention_layernorm,11,14,1.2612781954887218,0.5577722360764755,1.2612781954887218,True,0.1528426557779312,0.053455036133527756,0.41796875,0.87646484375 +post_attention_layernorm,11,15,1.9906542056074767,0.665625,1.9906542056074767,True,0.1528426557779312,0.06801187992095947,0.41796875,0.736328125 +post_attention_layernorm,11,16,1.1914191419141915,0.5436746987951807,1.1914191419141915,True,0.1528426557779312,0.08680811524391174,0.41796875,0.72265625 +post_attention_layernorm,11,17,1.249426605504587,0.5554422635737956,1.249426605504587,True,0.1528426557779312,0.09242258220911026,0.41796875,0.712890625 +post_attention_layernorm,11,18,1.28125,0.5616438356164384,1.28125,True,0.1528426557779312,0.09676424413919449,0.41796875,0.8095703125 +post_attention_layernorm,11,19,1.764018691588785,0.6382079459002535,1.764018691588785,True,0.1528426557779312,0.07613449543714523,0.41796875,0.81640625 +post_attention_layernorm,11,20,1.5344036697247707,0.6054298642533936,1.5344036697247707,True,0.1528426557779312,0.07808392494916916,0.41796875,0.822265625 +post_attention_layernorm,11,21,1.9369158878504673,0.6595067621320605,1.9369158878504673,True,0.1528426557779312,0.06570179015398026,0.41796875,0.86328125 +post_attention_layernorm,11,22,2.7454545454545456,0.7330097087378641,2.7454545454545456,True,0.1528426557779312,0.05012959614396095,0.41796875,0.9713134765625 +post_attention_layernorm,11,23,2.97196261682243,0.7482352941176471,2.97196261682243,True,0.1528426557779312,0.06521295011043549,0.41796875,1.01361083984375 +post_attention_layernorm,12,13,0.26492537313432835,0.20943952802359883,0.26492537313432835,True,0.12497646361589432,0.09632012248039246,0.5234375,0.619140625 +post_attention_layernorm,12,14,0.9213836477987422,0.4795417348608838,0.9213836477987422,True,0.12497646361589432,0.053455036133527756,0.5234375,0.87646484375 +post_attention_layernorm,12,15,1.3861940298507462,0.5809225957779516,1.3861940298507462,True,0.12497646361589432,0.06801187992095947,0.5234375,0.736328125 +post_attention_layernorm,12,16,0.9358600583090378,0.48343373493975905,0.9358600583090378,True,0.12497646361589432,0.08680811524391174,0.5234375,0.72265625 +post_attention_layernorm,12,17,0.9096209912536443,0.4763358778625954,0.9096209912536443,True,0.12497646361589432,0.09242258220911026,0.5234375,0.712890625 +post_attention_layernorm,12,18,0.9358600583090378,0.48343373493975905,0.9358600583090378,True,0.12497646361589432,0.09676424413919449,0.5234375,0.8095703125 +post_attention_layernorm,12,19,1.2276119402985075,0.5510887772194305,1.2276119402985075,True,0.12497646361589432,0.07613449543714523,0.5234375,0.81640625 +post_attention_layernorm,12,20,1.056985294117647,0.5138516532618409,1.056985294117647,True,0.12497646361589432,0.07808392494916916,0.5234375,0.822265625 +post_attention_layernorm,12,21,1.4701492537313432,0.595166163141994,1.4701492537313432,True,0.12497646361589432,0.06570179015398026,0.5234375,0.86328125 +post_attention_layernorm,12,22,2.0294117647058822,0.6699029126213593,2.0294117647058822,True,0.12497646361589432,0.05012959614396095,0.5234375,0.9713134765625 +post_attention_layernorm,12,23,2.1481481481481484,0.6823529411764706,2.1481481481481484,True,0.12497646361589432,0.06521295011043549,0.5234375,1.01361083984375 +post_attention_layernorm,13,14,0.6276595744680851,0.38562091503267976,0.6276595744680851,True,0.09632012248039246,0.053455036133527756,0.619140625,0.87646484375 +post_attention_layernorm,13,15,1.0504731861198737,0.5123076923076924,1.0504731861198737,True,0.09632012248039246,0.06801187992095947,0.619140625,0.736328125 +post_attention_layernorm,13,16,0.5697399527186762,0.3629518072289157,0.5697399527186762,True,0.09632012248039246,0.08680811524391174,0.619140625,0.72265625 +post_attention_layernorm,13,17,0.5619930475086906,0.35979228486646886,0.5619930475086906,True,0.09632012248039246,0.09242258220911026,0.619140625,0.712890625 +post_attention_layernorm,13,18,0.657010428736964,0.3965034965034965,0.657010428736964,True,0.09632012248039246,0.09676424413919449,0.619140625,0.8095703125 +post_attention_layernorm,13,19,0.8659305993690851,0.4640743871513102,0.8659305993690851,True,0.09632012248039246,0.07613449543714523,0.619140625,0.81640625 +post_attention_layernorm,13,20,0.7811594202898551,0.4385679414157852,0.7811594202898551,True,0.09632012248039246,0.07808392494916916,0.619140625,0.822265625 +post_attention_layernorm,13,21,0.9826498422712934,0.49562450278440734,0.9826498422712934,True,0.09632012248039246,0.06570179015398026,0.619140625,0.86328125 +post_attention_layernorm,13,22,1.5432098765432098,0.6067961165048543,1.5432098765432098,True,0.09632012248039246,0.05012959614396095,0.619140625,0.9713134765625 +post_attention_layernorm,13,23,1.6813880126182965,0.6270588235294118,1.6813880126182965,True,0.09632012248039246,0.06521295011043549,0.619140625,1.01361083984375 +post_attention_layernorm,14,15,0.4135667396061269,0.29256965944272445,0.4135667396061269,True,0.053455036133527756,0.06801187992095947,0.87646484375,0.736328125 +post_attention_layernorm,14,16,0.2551505546751189,0.2418918918918919,0.2551505546751189,True,0.053455036133527756,0.08680811524391174,0.87646484375,0.72265625 +post_attention_layernorm,14,17,0.28498372849837283,0.2595890410958904,0.28498372849837283,True,0.053455036133527756,0.09242258220911026,0.87646484375,0.712890625 +post_attention_layernorm,14,18,0.39717282261741904,0.28426892950391647,0.39717282261741904,True,0.053455036133527756,0.09676424413919449,0.87646484375,0.8095703125 +post_attention_layernorm,14,19,0.3989968080255358,0.28520208604954367,0.3989968080255358,True,0.053455036133527756,0.07613449543714523,0.87646484375,0.81640625 +post_attention_layernorm,14,20,0.4737802097583219,0.3214727722772277,0.4737802097583219,True,0.053455036133527756,0.07808392494916916,0.87646484375,0.822265625 +post_attention_layernorm,14,21,0.47515257192676547,0.32210401891252954,0.47515257192676547,True,0.053455036133527756,0.06570179015398026,0.87646484375,0.86328125 +post_attention_layernorm,14,22,0.7402323125659979,0.4253640776699029,0.7402323125659979,True,0.053455036133527756,0.05012959614396095,0.87646484375,0.9713134765625 +post_attention_layernorm,14,23,0.8220793140407289,0.4511764705882353,0.8220793140407289,True,0.053455036133527756,0.06521295011043549,0.87646484375,1.01361083984375 +post_attention_layernorm,15,16,0.3656832298136646,0.576499388004896,0.576499388004896,True,0.06801187992095947,0.08680811524391174,0.736328125,0.72265625 +post_attention_layernorm,15,17,0.29876160990712075,0.4260485651214128,0.4260485651214128,True,0.06801187992095947,0.09242258220911026,0.736328125,0.712890625 +post_attention_layernorm,15,18,0.30124223602484473,0.4311111111111111,0.4311111111111111,True,0.06801187992095947,0.09676424413919449,0.736328125,0.8095703125 +post_attention_layernorm,15,19,0.2840549102428722,0.22121710526315788,0.2840549102428722,True,0.06801187992095947,0.07613449543714523,0.736328125,0.81640625 +post_attention_layernorm,15,20,0.33996683250414594,0.2537128712871287,0.33996683250414594,True,0.06801187992095947,0.07808392494916916,0.736328125,0.822265625 +post_attention_layernorm,15,21,0.4206008583690987,0.29607250755287007,0.4206008583690987,True,0.06801187992095947,0.06570179015398026,0.736328125,0.86328125 +post_attention_layernorm,15,22,0.45278969957081544,0.31166912850812406,0.45278969957081544,True,0.06801187992095947,0.05012959614396095,0.736328125,0.9713134765625 +post_attention_layernorm,15,23,0.815378923352038,0.4491508152173913,0.815378923352038,True,0.06801187992095947,0.06521295011043549,0.736328125,1.01361083984375 +post_attention_layernorm,16,17,0.17602657004830918,0.1496790757381258,0.17602657004830918,True,0.08680811524391174,0.09242258220911026,0.72265625,0.712890625 +post_attention_layernorm,16,18,0.2154215976331361,0.17724022516354784,0.2154215976331361,True,0.08680811524391174,0.09676424413919449,0.72265625,0.8095703125 +post_attention_layernorm,16,19,0.4420289855072464,0.3065326633165829,0.4420289855072464,True,0.08680811524391174,0.07613449543714523,0.72265625,0.81640625 +post_attention_layernorm,16,20,0.33108935128518974,0.24873563218390804,0.33108935128518974,True,0.08680811524391174,0.07808392494916916,0.72265625,0.822265625 +post_attention_layernorm,16,21,0.5990338164251208,0.37462235649546827,0.5990338164251208,True,0.08680811524391174,0.06570179015398026,0.72265625,0.86328125 +post_attention_layernorm,16,22,1.0171358629130967,0.504247572815534,1.0171358629130967,True,0.08680811524391174,0.05012959614396095,0.72265625,0.9713134765625 +post_attention_layernorm,16,23,1.0506634499396863,0.5123529411764706,1.0506634499396863,True,0.08680811524391174,0.06521295011043549,0.72265625,1.01361083984375 +post_attention_layernorm,17,18,0.23767123287671232,0.19203099059214168,0.23767123287671232,True,0.09242258220911026,0.09676424413919449,0.712890625,0.8095703125 +post_attention_layernorm,17,19,0.29360306178239476,0.22696534234995774,0.29360306178239476,True,0.09242258220911026,0.07613449543714523,0.712890625,0.81640625 +post_attention_layernorm,17,20,0.20969441517386722,0.17334494773519163,0.20969441517386722,True,0.09242258220911026,0.07808392494916916,0.712890625,0.822265625 +post_attention_layernorm,17,21,0.40350877192982454,0.2875,0.40350877192982454,True,0.09242258220911026,0.06570179015398026,0.712890625,0.86328125 +post_attention_layernorm,17,22,0.8070175438596491,0.44660194174757284,0.8070175438596491,True,0.09242258220911026,0.05012959614396095,0.712890625,0.9713134765625 +post_attention_layernorm,17,23,0.8589393110989612,0.46205882352941174,0.8589393110989612,True,0.09242258220911026,0.06521295011043549,0.712890625,1.01361083984375 +post_attention_layernorm,18,19,0.27958115183246074,0.21849427168576105,0.27958115183246074,True,0.09676424413919449,0.07613449543714523,0.8095703125,0.81640625 +post_attention_layernorm,18,20,0.20833333333333334,0.1724137931034483,0.20833333333333334,True,0.09676424413919449,0.07808392494916916,0.8095703125,0.822265625 +post_attention_layernorm,18,21,0.4222222222222222,0.296875,0.4222222222222222,True,0.09676424413919449,0.06570179015398026,0.8095703125,0.86328125 +post_attention_layernorm,18,22,0.8311111111111111,0.4538834951456311,0.8311111111111111,True,0.09676424413919449,0.05012959614396095,0.8095703125,0.9713134765625 +post_attention_layernorm,18,23,0.8,0.4444444444444444,0.8,True,0.09676424413919449,0.06521295011043549,0.8095703125,1.01361083984375 +post_attention_layernorm,19,20,0.151033386327504,0.1441947565543071,0.151033386327504,True,0.07613449543714523,0.07808392494916916,0.81640625,0.822265625 +post_attention_layernorm,19,21,0.1678832116788321,0.14375,0.1678832116788321,True,0.07613449543714523,0.06570179015398026,0.81640625,0.86328125 +post_attention_layernorm,19,22,0.5036496350364964,0.33495145631067963,0.5036496350364964,True,0.07613449543714523,0.05012959614396095,0.81640625,0.9713134765625 +post_attention_layernorm,19,23,0.48267526188557613,0.34782608695652173,0.48267526188557613,True,0.07613449543714523,0.06521295011043549,0.81640625,1.01361083984375 +post_attention_layernorm,20,21,0.2091324200913242,0.1729607250755287,0.2091324200913242,True,0.07808392494916916,0.06570179015398026,0.822265625,0.86328125 +post_attention_layernorm,20,22,0.5154022988505748,0.3401092233009709,0.5154022988505748,True,0.07808392494916916,0.05012959614396095,0.822265625,0.9713134765625 +post_attention_layernorm,20,23,0.5675426463808206,0.4219858156028369,0.5675426463808206,True,0.07808392494916916,0.06521295011043549,0.822265625,1.01361083984375 +post_attention_layernorm,21,22,0.2875,0.22330097087378642,0.2875,True,0.06570179015398026,0.05012959614396095,0.86328125,0.9713134765625 +post_attention_layernorm,21,23,0.3960546282245827,0.4148936170212766,0.4148936170212766,True,0.06570179015398026,0.06521295011043549,0.86328125,1.01361083984375 +post_attention_layernorm,22,23,0.3124108416547789,0.34263295553618134,0.34263295553618134,True,0.05012959614396095,0.06521295011043549,0.9713134765625,1.01361083984375 diff --git a/results/cpu-qwen35-2b/norm-repetition.log b/results/cpu-qwen35-2b/norm-repetition.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/preflight-first-attempt.log b/results/cpu-qwen35-2b/preflight-first-attempt.log new file mode 100644 index 0000000..37e0506 --- /dev/null +++ b/results/cpu-qwen35-2b/preflight-first-attempt.log @@ -0,0 +1,29 @@ +{"preflight_layer": 0, "seconds": 2.0485799312591553} +{"preflight_layer": 1, "seconds": 4.110389947891235} +{"preflight_layer": 2, "seconds": 5.677527189254761} +{"preflight_layer": 3, "seconds": 6.754502058029175} +{"preflight_layer": 4, "seconds": 8.340956926345825} +{"preflight_layer": 5, "seconds": 10.697716236114502} +{"preflight_layer": 6, "seconds": 12.576658964157104} +{"preflight_layer": 7, "seconds": 14.14732575416565} +Traceback (most recent call last): + File "", line 198, in _run_module_as_main + File "", line 88, in _run_code + File "/opt/exp-model-parameter-similarity/functional/preflight.py", line 27, in + if __name__=='__main__':main() + ~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/preflight.py", line 18, in main + h,_=lm.forward(ids[:1,:8],progress=progress) + ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 215, in forward + h = h + self.mlp(n,donor) + ~~~~~~~~^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 149, in mlp + gate = silu(self.linear(h, p+'gate_proj')) + ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 127, in linear + self.guard() + ~~~~~~~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 108, in guard + raise MemoryError('Sustained host swap IO above 4 MiB/s in three observation windows') +MemoryError: Sustained host swap IO above 4 MiB/s in three observation windows diff --git a/results/cpu-qwen35-2b/preflight-second-attempt.json b/results/cpu-qwen35-2b/preflight-second-attempt.json new file mode 100644 index 0000000..d99d8ea --- /dev/null +++ b/results/cpu-qwen35-2b/preflight-second-attempt.json @@ -0,0 +1,61 @@ +{ + "passed": false, + "sample_id": "cal-zh-1", + "tokens": 8, + "error_type": "MemoryError", + "error": "Sustained host swap pressure plus constrained memory: available=1071348 KiB, process_swap=23640 KiB", + "elapsed_seconds": 15.565188646316528, + "peak_rss_kib": 162324, + "resource_snapshots": [ + { + "layer": 0, + "seconds": 3.669800043106079, + "rss_kib": 117576, + "process_swap_kib": 0, + "available_kib": 975920 + }, + { + "layer": 1, + "seconds": 6.548107862472534, + "rss_kib": 117440, + "process_swap_kib": 0, + "available_kib": 984012 + }, + { + "layer": 2, + "seconds": 9.072005033493042, + "rss_kib": 115956, + "process_swap_kib": 0, + "available_kib": 925720 + }, + { + "layer": 3, + "seconds": 10.377433776855469, + "rss_kib": 114984, + "process_swap_kib": 0, + "available_kib": 958016 + }, + { + "layer": 4, + "seconds": 11.7694993019104, + "rss_kib": 108236, + "process_swap_kib": 0, + "available_kib": 1055012 + }, + { + "layer": 5, + "seconds": 13.289605379104614, + "rss_kib": 108244, + "process_swap_kib": 0, + "available_kib": 1056400 + }, + { + "layer": 6, + "seconds": 15.41482949256897, + "rss_kib": 84512, + "process_swap_kib": 23736, + "available_kib": 1072308 + } + ], + "limitation": "Real-weight capacity check, not an independent correctness oracle or quality benchmark" +} diff --git a/results/cpu-qwen35-2b/preflight-second-attempt.log b/results/cpu-qwen35-2b/preflight-second-attempt.log new file mode 100644 index 0000000..767fdbb --- /dev/null +++ b/results/cpu-qwen35-2b/preflight-second-attempt.log @@ -0,0 +1,22 @@ +{"layer": 0, "seconds": 3.669800043106079, "rss_kib": 117576, "process_swap_kib": 0, "available_kib": 975920} +{"layer": 1, "seconds": 6.548107862472534, "rss_kib": 117440, "process_swap_kib": 0, "available_kib": 984012} +{"layer": 2, "seconds": 9.072005033493042, "rss_kib": 115956, "process_swap_kib": 0, "available_kib": 925720} +{"layer": 3, "seconds": 10.377433776855469, "rss_kib": 114984, "process_swap_kib": 0, "available_kib": 958016} +{"layer": 4, "seconds": 11.7694993019104, "rss_kib": 108236, "process_swap_kib": 0, "available_kib": 1055012} +{"layer": 5, "seconds": 13.289605379104614, "rss_kib": 108244, "process_swap_kib": 0, "available_kib": 1056400} +{"layer": 6, "seconds": 15.41482949256897, "rss_kib": 84512, "process_swap_kib": 23736, "available_kib": 1072308} +Traceback (most recent call last): + File "", line 198, in _run_module_as_main + File "", line 88, in _run_code + File "/opt/exp-model-parameter-similarity/functional/preflight.py", line 39, in + if __name__=='__main__':main() + ~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/preflight.py", line 26, in main + h,_=lm.forward(ids[:1,:8],progress=progress) + ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 201, in forward + self.guard() + ~~~~~~~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/model.py", line 109, in guard + raise MemoryError(f'Sustained host swap pressure plus constrained memory: available={available} KiB, process_swap={own_swap_kib} KiB') +MemoryError: Sustained host swap pressure plus constrained memory: available=1071348 KiB, process_swap=23640 KiB diff --git a/results/cpu-qwen35-2b/preflight.json b/results/cpu-qwen35-2b/preflight.json new file mode 100644 index 0000000..4583d43 --- /dev/null +++ b/results/cpu-qwen35-2b/preflight.json @@ -0,0 +1,190 @@ +{ + "passed": true, + "sample_id": "cal-zh-1", + "tokens": 8, + "mean_nll": 4.089094978395148, + "token_nll": [ + [ + 0.7776033786968188, + 12.836286295347621, + 6.470462449543003, + 4.530625316962006, + 3.1924382665907807, + 0.703601432631153, + 0.11264770899465404 + ] + ], + "elapsed_seconds": 47.741777658462524, + "peak_rss_kib": 162276, + "resource_snapshots": [ + { + "layer": 0, + "seconds": 1.4413530826568604, + "rss_kib": 48904, + "process_swap_kib": 0, + "available_kib": 930888 + }, + { + "layer": 1, + "seconds": 3.073808431625366, + "rss_kib": 48180, + "process_swap_kib": 0, + "available_kib": 983076 + }, + { + "layer": 2, + "seconds": 4.584789514541626, + "rss_kib": 48192, + "process_swap_kib": 0, + "available_kib": 963772 + }, + { + "layer": 3, + "seconds": 5.736491918563843, + "rss_kib": 46648, + "process_swap_kib": 0, + "available_kib": 966496 + }, + { + "layer": 4, + "seconds": 7.517967462539673, + "rss_kib": 45724, + "process_swap_kib": 0, + "available_kib": 986008 + }, + { + "layer": 5, + "seconds": 11.781850576400757, + "rss_kib": 45332, + "process_swap_kib": 0, + "available_kib": 935860 + }, + { + "layer": 6, + "seconds": 14.041518926620483, + "rss_kib": 45340, + "process_swap_kib": 0, + "available_kib": 1002640 + }, + { + "layer": 7, + "seconds": 15.087216138839722, + "rss_kib": 35548, + "process_swap_kib": 9892, + "available_kib": 1026692 + }, + { + "layer": 8, + "seconds": 16.508682250976562, + "rss_kib": 32500, + "process_swap_kib": 11864, + "available_kib": 1039852 + }, + { + "layer": 9, + "seconds": 17.623984813690186, + "rss_kib": 26508, + "process_swap_kib": 11848, + "available_kib": 997296 + }, + { + "layer": 10, + "seconds": 19.696174144744873, + "rss_kib": 26372, + "process_swap_kib": 11824, + "available_kib": 1018064 + }, + { + "layer": 11, + "seconds": 20.69566321372986, + "rss_kib": 26528, + "process_swap_kib": 11796, + "available_kib": 1054760 + }, + { + "layer": 12, + "seconds": 22.038830041885376, + "rss_kib": 24104, + "process_swap_kib": 13480, + "available_kib": 1062360 + }, + { + "layer": 13, + "seconds": 23.356847524642944, + "rss_kib": 24124, + "process_swap_kib": 13468, + "available_kib": 1062328 + }, + { + "layer": 14, + "seconds": 24.617902040481567, + "rss_kib": 24144, + "process_swap_kib": 13456, + "available_kib": 1039196 + }, + { + "layer": 15, + "seconds": 25.96587586402893, + "rss_kib": 24068, + "process_swap_kib": 13448, + "available_kib": 1032608 + }, + { + "layer": 16, + "seconds": 27.733217239379883, + "rss_kib": 24056, + "process_swap_kib": 13432, + "available_kib": 1015000 + }, + { + "layer": 17, + "seconds": 29.303704977035522, + "rss_kib": 20852, + "process_swap_kib": 16632, + "available_kib": 1041560 + }, + { + "layer": 18, + "seconds": 30.38013005256653, + "rss_kib": 20876, + "process_swap_kib": 16616, + "available_kib": 1061004 + }, + { + "layer": 19, + "seconds": 31.271567583084106, + "rss_kib": 20896, + "process_swap_kib": 16596, + "available_kib": 1059348 + }, + { + "layer": 20, + "seconds": 32.31741189956665, + "rss_kib": 20936, + "process_swap_kib": 16564, + "available_kib": 1078812 + }, + { + "layer": 21, + "seconds": 33.8273024559021, + "rss_kib": 20396, + "process_swap_kib": 17044, + "available_kib": 1088472 + }, + { + "layer": 22, + "seconds": 35.43067383766174, + "rss_kib": 20436, + "process_swap_kib": 17012, + "available_kib": 1109268 + }, + { + "layer": 23, + "seconds": 36.55965542793274, + "rss_kib": 20448, + "process_swap_kib": 17000, + "available_kib": 1109588 + } + ], + "limitation": "Real-weight capacity check, not an independent correctness oracle or quality benchmark" +} diff --git a/results/cpu-qwen35-2b/preflight.log b/results/cpu-qwen35-2b/preflight.log new file mode 100644 index 0000000..cbc1c0d --- /dev/null +++ b/results/cpu-qwen35-2b/preflight.log @@ -0,0 +1,24 @@ +{"layer": 0, "seconds": 1.4413530826568604, "rss_kib": 48904, "process_swap_kib": 0, "available_kib": 930888} +{"layer": 1, "seconds": 3.073808431625366, "rss_kib": 48180, "process_swap_kib": 0, "available_kib": 983076} +{"layer": 2, "seconds": 4.584789514541626, "rss_kib": 48192, "process_swap_kib": 0, "available_kib": 963772} +{"layer": 3, "seconds": 5.736491918563843, "rss_kib": 46648, "process_swap_kib": 0, "available_kib": 966496} +{"layer": 4, "seconds": 7.517967462539673, "rss_kib": 45724, "process_swap_kib": 0, "available_kib": 986008} +{"layer": 5, "seconds": 11.781850576400757, "rss_kib": 45332, "process_swap_kib": 0, "available_kib": 935860} +{"layer": 6, "seconds": 14.041518926620483, "rss_kib": 45340, "process_swap_kib": 0, "available_kib": 1002640} +{"layer": 7, "seconds": 15.087216138839722, "rss_kib": 35548, "process_swap_kib": 9892, "available_kib": 1026692} +{"layer": 8, "seconds": 16.508682250976562, "rss_kib": 32500, "process_swap_kib": 11864, "available_kib": 1039852} +{"layer": 9, "seconds": 17.623984813690186, "rss_kib": 26508, "process_swap_kib": 11848, "available_kib": 997296} +{"layer": 10, "seconds": 19.696174144744873, "rss_kib": 26372, "process_swap_kib": 11824, "available_kib": 1018064} +{"layer": 11, "seconds": 20.69566321372986, "rss_kib": 26528, "process_swap_kib": 11796, "available_kib": 1054760} +{"layer": 12, "seconds": 22.038830041885376, "rss_kib": 24104, "process_swap_kib": 13480, "available_kib": 1062360} +{"layer": 13, "seconds": 23.356847524642944, "rss_kib": 24124, "process_swap_kib": 13468, "available_kib": 1062328} +{"layer": 14, "seconds": 24.617902040481567, "rss_kib": 24144, "process_swap_kib": 13456, "available_kib": 1039196} +{"layer": 15, "seconds": 25.96587586402893, "rss_kib": 24068, "process_swap_kib": 13448, "available_kib": 1032608} +{"layer": 16, "seconds": 27.733217239379883, "rss_kib": 24056, "process_swap_kib": 13432, "available_kib": 1015000} +{"layer": 17, "seconds": 29.303704977035522, "rss_kib": 20852, "process_swap_kib": 16632, "available_kib": 1041560} +{"layer": 18, "seconds": 30.38013005256653, "rss_kib": 20876, "process_swap_kib": 16616, "available_kib": 1061004} +{"layer": 19, "seconds": 31.271567583084106, "rss_kib": 20896, "process_swap_kib": 16596, "available_kib": 1059348} +{"layer": 20, "seconds": 32.31741189956665, "rss_kib": 20936, "process_swap_kib": 16564, "available_kib": 1078812} +{"layer": 21, "seconds": 33.8273024559021, "rss_kib": 20396, "process_swap_kib": 17044, "available_kib": 1088472} +{"layer": 22, "seconds": 35.43067383766174, "rss_kib": 20436, "process_swap_kib": 17012, "available_kib": 1109268} +{"layer": 23, "seconds": 36.55965542793274, "rss_kib": 20448, "process_swap_kib": 17000, "available_kib": 1109588} diff --git a/results/cpu-qwen35-2b/reference-check-first-attempt.log b/results/cpu-qwen35-2b/reference-check-first-attempt.log new file mode 100644 index 0000000..af9c3ec --- /dev/null +++ b/results/cpu-qwen35-2b/reference-check-first-attempt.log @@ -0,0 +1,15 @@ +Traceback (most recent call last): + File "", line 198, in _run_module_as_main + File "", line 88, in _run_code + File "/opt/exp-model-parameter-similarity/functional/reference_check.py", line 142, in + if __name__=='__main__':main() + ~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/reference_check.py", line 87, in main + rotary=ns['Qwen3_5TextRotaryEmbedding'](config) + File "pinned_transformers_reference", line 146, in __init__ + File "pinned_transformers_reference", line 165, in compute_default_rope_parameters + File "/opt/exp-model-parameter-similarity/venv/lib/python3.14/site-packages/torch/nn/modules/module.py", line 1976, in __getattr__ + raise AttributeError( + f"'{type(self).__name__}' object has no attribute '{name}'" + ) +AttributeError: 'Qwen3_5TextRotaryEmbedding' object has no attribute 'rope_parameters'. Did you mean: '_parameters'? diff --git a/results/cpu-qwen35-2b/reference-check-second-attempt.log b/results/cpu-qwen35-2b/reference-check-second-attempt.log new file mode 100644 index 0000000..872dd2a --- /dev/null +++ b/results/cpu-qwen35-2b/reference-check-second-attempt.log @@ -0,0 +1,15 @@ +Traceback (most recent call last): + File "", line 198, in _run_module_as_main + File "", line 88, in _run_code + File "/opt/exp-model-parameter-similarity/functional/reference_check.py", line 142, in + if __name__=='__main__':main() + ~~~~^^ + File "/opt/exp-model-parameter-similarity/functional/reference_check.py", line 102, in main + tout=layer.linear_attn(tn) + File "/opt/exp-model-parameter-similarity/venv/lib/python3.14/site-packages/torch/nn/modules/module.py", line 1787, in _wrapped_call_impl + return self._call_impl(*args, **kwargs) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/venv/lib/python3.14/site-packages/torch/nn/modules/module.py", line 1798, in _call_impl + return forward_call(*args, **kwargs) + File "pinned_transformers_reference", line 542, in forward +NameError: name 'apply_mask_to_padding_states' is not defined diff --git a/results/cpu-qwen35-2b/reference-check.json b/results/cpu-qwen35-2b/reference-check.json new file mode 100644 index 0000000..29ed680 --- /dev/null +++ b/results/cpu-qwen35-2b/reference-check.json @@ -0,0 +1,288 @@ +{ + "passed": true, + "reference_commit": "fd3cf0140de03f7619ac95b5cfed05b711ff9e22", + "source_sha256": "4463b8a108f678c166755101d95f188179f54143305953d78147de0389b80ebc", + "torch": "2.15.0+cpu", + "numpy": "2.5.4", + "implementation_sha256": "48a2a97d0445dc6e08ac7f27a935637a7553417d0982eb94122d6cb02bbb499c", + "tests": [ + { + "test": "layer0_rmsnorm", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 2.384185791015625e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer0_mixer", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 1.862645149230957e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer0_mlp", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 2.9802322387695312e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer0_complete", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 2.384185791015625e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer1_rmsnorm", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 2.384185791015625e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "attention_probabilities", + "shape": [ + 2, + 2, + 7, + 7 + ], + "max_abs_error": 1.1920928955078125e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer1_mixer", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 5.21540641784668e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer1_mlp", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 4.470348358154297e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "layer1_complete", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 2.384185791015625e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length1_output", + "shape": [ + 2, + 1, + 2, + 5 + ], + "max_abs_error": 4.470348358154297e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length1_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 5.960464477539063e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length1_output", + "shape": [ + 2, + 1, + 2, + 5 + ], + "max_abs_error": 2.9802322387695312e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length1_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 5.960464477539063e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length7_output", + "shape": [ + 2, + 7, + 2, + 5 + ], + "max_abs_error": 5.960464477539063e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length7_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 5.960464477539063e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length7_output", + "shape": [ + 2, + 7, + 2, + 5 + ], + "max_abs_error": 7.450580596923828e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length7_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 1.7881393432617188e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length33_output", + "shape": [ + 2, + 33, + 2, + 5 + ], + "max_abs_error": 1.1920928955078125e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_recurrent_gated_delta_rule_length33_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 2.9802322387695312e-08, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length33_output", + "shape": [ + 2, + 33, + 2, + 5 + ], + "max_abs_error": 5.364418029785156e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "torch_chunk_gated_delta_rule_length33_state", + "shape": [ + 2, + 2, + 4, + 5 + ], + "max_abs_error": 3.5762786865234375e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + }, + { + "test": "complete_two_layer_text_forward", + "shape": [ + 2, + 7, + 16 + ], + "max_abs_error": 3.5762786865234375e-07, + "atol": 2e-05, + "rtol": 2e-05, + "passed": true + } + ], + "limitations": "FP32 CPU semantics on tiny synthetic configurations; not full-checkpoint BF16 kernel equivalence" +} \ No newline at end of file diff --git a/results/cpu-qwen35-2b/reference-check.log b/results/cpu-qwen35-2b/reference-check.log new file mode 100644 index 0000000..7eb6191 --- /dev/null +++ b/results/cpu-qwen35-2b/reference-check.log @@ -0,0 +1 @@ +{"passed": true, "checks": 22, "maximum_absolute_discrepancy": 5.364418029785156e-07} diff --git a/results/cpu-qwen35-2b/retention-policy.json b/results/cpu-qwen35-2b/retention-policy.json new file mode 100644 index 0000000..6c8354b --- /dev/null +++ b/results/cpu-qwen35-2b/retention-policy.json @@ -0,0 +1,5 @@ +{ + "weights": "retain_until_explicit_user_delete_request", + "automatic_cleanup": false, + "instruction_date": "2026-11-09" +} diff --git a/results/cpu-qwen35-2b/samples-tokenized.json b/results/cpu-qwen35-2b/samples-tokenized.json new file mode 100644 index 0000000..655526a --- /dev/null +++ b/results/cpu-qwen35-2b/samples-tokenized.json @@ -0,0 +1,342 @@ +{ + "revision": "15852e8c16360a2fea060d615a32b45270f8a8fc", + "tokenizer_sha256": "5f9e4d4901a92b997e463c1f46055088b6cca5ca61a6522d1b9f64c4bb81cb42", + "samples": [ + { + "id": "cal-zh-1", + "split": "calibration", + "language": "zh", + "text": "\u6e05\u6668\uff0c\u7814\u7a76\u5458\u6253\u5f00\u5b9e\u9a8c\u8bb0\u5f55\u672c\uff0c\u68c0\u67e5\u6628\u5929\u4fdd\u5b58\u7684\u6570\u636e\u3002\u4ed6\u5148\u786e\u8ba4\u6587\u4ef6\u5b8c\u6574\uff0c\u518d\u6bd4\u8f83\u4e24\u7ec4\u89c2\u6d4b\u7ed3\u679c\u3002\u4e3a\u4e86\u907f\u514d\u5076\u7136\u8bef\u5dee\uff0c\u4ed6\u4e3a\u6bcf\u4e00\u6b65\u7559\u4e0b\u65f6\u95f4\u548c\u6761\u4ef6\uff0c\u5e76\u5c06\u5c1a\u672a\u9a8c\u8bc1\u7684\u63a8\u6d4b\u5355\u72ec\u8bb0\u5f55\u3002", + "text_sha256": "ac4ed82b8c201d572f5085c76c15cff31d700106aa46b18146da8ca14db299a1", + "full_token_count": 43, + "token_ids": [ + 111164, + 3709, + 112124, + 103704, + 98631, + 98151, + 95879, + 3709, + 97552, + 103892, + 101754, + 104027, + 1710, + 95948, + 96218, + 101632, + 97380, + 99492, + 3709, + 96390, + 97016, + 120408, + 112769, + 97989, + 1710, + 120190, + 112614, + 111162, + 3709, + 125067, + 121735, + 108648 + ] + }, + { + "id": "cal-zh-2", + "split": "calibration", + "language": "zh", + "text": "\u4e00\u8f86\u5217\u8f66\u4ece\u5c71\u95f4\u9a76\u5411\u6d77\u8fb9\uff0c\u7ecf\u8fc7\u6751\u5e84\u3001\u6865\u6881\u548c\u5f00\u9614\u7684\u7530\u91ce\u3002\u65c5\u5ba2\u671b\u7740\u7a97\u5916\u53d8\u5316\u7684\u666f\u8272\uff0c\u8ba1\u5212\u62b5\u8fbe\u540e\u5148\u6b65\u884c\u5230\u65c5\u9986\uff0c\u518d\u53bb\u5e02\u573a\u8d2d\u4e70\u665a\u9910\u9700\u8981\u7684\u98df\u6750\u3002\u5929\u6c14\u9884\u62a5\u8bf4\u508d\u665a\u53ef\u80fd\u4e0b\u96e8\u3002", + "text_sha256": "442a5d62ba8c4a3ffda0e97b81c1f2fbdc31da045baa8ce44564e4ce5526f429", + "full_token_count": 45, + "token_ids": [ + 110708, + 110768, + 96200, + 96144, + 96037, + 97523, + 96127, + 120243, + 3709, + 99442, + 111028, + 5205, + 104619, + 95793, + 112965, + 95726, + 116239, + 1710, + 109080, + 104553, + 113733, + 114462, + 110868, + 3709, + 97787, + 110677, + 95946, + 96218, + 104608, + 95839, + 118309, + 3709 + ] + }, + { + "id": "cal-en-1", + "split": "calibration", + "language": "en", + "text": "A small library opens every morning beside the river. The librarian checks returned books, repairs damaged covers, and places new arrivals on a wooden table. Visitors often stop to read before continuing their journey across the old bridge.", + "text_sha256": "c917f3d62e6ecaff19a324e6c0aa1436e33d7d89b436c758458349a4e0e2fe38", + "full_token_count": 43, + "token_ids": [ + 32, + 2526, + 6522, + 15417, + 1396, + 6353, + 28428, + 279, + 14367, + 13, + 561, + 90956, + 11988, + 5743, + 6265, + 11, + 29201, + 19510, + 14103, + 11, + 321, + 7247, + 491, + 66710, + 383, + 264, + 21664, + 1898, + 13, + 66511, + 3428, + 2842 + ] + }, + { + "id": "cal-en-2", + "split": "calibration", + "language": "en", + "text": "To compare two measurements, first record their units and the conditions under which they were collected. Compute the difference, inspect unusual observations, and repeat the procedure with independent examples. A short report should separate observations from explanations and unresolved questions.", + "text_sha256": "ccb9be13ae9a881a9364211b20f31b6e11c75df482a02359625e7021b3869837", + "full_token_count": 46, + "token_ids": [ + 1206, + 9150, + 1330, + 20934, + 11, + 1118, + 3150, + 836, + 7896, + 321, + 279, + 4530, + 1172, + 864, + 781, + 998, + 14129, + 13, + 21902, + 279, + 6463, + 11, + 23331, + 17957, + 22980, + 11, + 321, + 12771, + 279, + 10018, + 440, + 9209 + ] + }, + { + "id": "test-zh-1", + "split": "heldout", + "language": "zh", + "text": "\u5348\u540e\uff0c\u5de5\u7a0b\u5e08\u68c0\u67e5\u6e29\u5ba4\u4e2d\u7684\u4f20\u611f\u5668\u3002\u6e29\u5ea6\u8bb0\u5f55\u51fa\u73b0\u4e00\u4e2a\u5f02\u5e38\u503c\uff0c\u5979\u6ca1\u6709\u7acb\u523b\u5220\u9664\uff0c\u800c\u662f\u67e5\u770b\u8bbe\u5907\u72b6\u6001\u5e76\u8865\u505a\u4e00\u6b21\u6d4b\u91cf\u3002\u786e\u8ba4\u539f\u56e0\u4ee5\u540e\uff0c\u5979\u8c03\u6574\u4e86\u91c7\u6837\u8ba1\u5212\uff0c\u5728\u62a5\u544a\u4e2d\u8bf4\u660e\u8fd9\u6b21\u53d8\u5316\u3002", + "text_sha256": "5f30e958b262b83dd050d5d695b24cd160c966dc4151225c4e4bcb4be1ed7c96", + "full_token_count": 44, + "token_ids": [ + 118360, + 3709, + 98941, + 97552, + 106098, + 96875, + 108862, + 1710, + 99472, + 98151, + 97150, + 96125, + 100016, + 96326, + 3709, + 133014, + 103924, + 99553, + 3709, + 101594, + 97239, + 96958, + 98822, + 96172, + 96770, + 134943, + 108562, + 1710, + 101632, + 97494, + 99925, + 3709 + ] + }, + { + "id": "test-zh-2", + "split": "heldout", + "language": "zh", + "text": "\u5468\u672b\uff0c\u5bb6\u4eba\u6cbf\u7740\u6e56\u8fb9\u7684\u5c0f\u8def\u6563\u6b65\u3002\u4ed6\u4eec\u5e26\u4e86\u6c34\u548c\u7b80\u5355\u7684\u5348\u9910\uff0c\u6253\u7b97\u5728\u6811\u6797\u65c1\u4f11\u606f\u3002\u9014\u4e2d\u9047\u5230\u4e00\u5904\u6b63\u5728\u7ef4\u4fee\u7684\u6865\uff0c\u4e8e\u662f\u53c2\u8003\u8def\u6807\u9009\u62e9\u53e6\u4e00\u6761\u9053\u8def\uff0c\u7ec8\u4e8e\u5728\u65e5\u843d\u524d\u56de\u5230\u8f66\u7ad9\u3002", + "text_sha256": "309dc66b4bb36ee28a0efe3f2ac91bced12fb3727f83fe4f556be583888d2f69", + "full_token_count": 44, + "token_ids": [ + 104195, + 3709, + 99993, + 110530, + 131667, + 97626, + 96112, + 112869, + 1710, + 96697, + 125485, + 114701, + 101829, + 110637, + 3709, + 108758, + 95772, + 113762, + 97760, + 100020, + 1710, + 104992, + 99475, + 112430, + 99443, + 99523, + 95726, + 97461, + 3709, + 100556, + 97910, + 96112 + ] + }, + { + "id": "test-en-1", + "split": "heldout", + "language": "en", + "text": "The gardener planted several rows of beans behind the house. Each evening she checked the soil and wrote down how much water the plants received. After a week of warm weather, the first green shoots appeared near the fence beside the apple tree.", + "text_sha256": "9f25e796901243c848d93ec8c3dd74a13b50e8207388ff41d24cdfba3869db62", + "full_token_count": 48, + "token_ids": [ + 760, + 21208, + 772, + 37070, + 3679, + 6761, + 314, + 26034, + 4661, + 279, + 3626, + 13, + 8618, + 11129, + 1292, + 9770, + 279, + 16665, + 321, + 5947, + 1441, + 1204, + 1691, + 2919, + 279, + 10462, + 3816, + 13, + 4486, + 264, + 1936, + 314 + ] + }, + { + "id": "test-en-2", + "split": "heldout", + "language": "en", + "text": "When a program reads a table, it should check column names and handle missing entries explicitly. The developer tested a small example, compared the output with a hand calculation, and saved the input alongside the result so another person could reproduce the check.", + "text_sha256": "6c47a00b9b81ae364d9cedb79f7ba46fbb104fe90ce35b6e742e45c6b106ae9a", + "full_token_count": 48, + "token_ids": [ + 4350, + 264, + 1957, + 15339, + 264, + 1898, + 11, + 424, + 1220, + 1716, + 3145, + 4874, + 321, + 3579, + 7167, + 10379, + 20335, + 13, + 561, + 15291, + 12152, + 264, + 2526, + 3010, + 11, + 7463, + 279, + 2468, + 440, + 264, + 1375, + 21261 + ] + } + ] +} diff --git a/results/cpu-qwen35-2b/selection.json b/results/cpu-qwen35-2b/selection.json new file mode 100644 index 0000000..ac3266e --- /dev/null +++ b/results/cpu-qwen35-2b/selection.json @@ -0,0 +1,4 @@ +{ + "selected": [], + "rule": "calibration pass; descending component bytes, ascending maximum symmetric error; maximum one candidate" +} diff --git a/results/cpu-qwen35-2b/source_metadata.json b/results/cpu-qwen35-2b/source_metadata.json new file mode 100644 index 0000000..e4b114d --- /dev/null +++ b/results/cpu-qwen35-2b/source_metadata.json @@ -0,0 +1,261 @@ +{ + "_id": "69a380a0ae63980df575326b", + "id": "Qwen/Qwen3.5-2B", + "private": false, + "pipeline_tag": "image-text-to-text", + "library_name": "transformers", + "tags": [ + "transformers", + "safetensors", + "qwen3_5", + "image-text-to-text", + "conversational", + "base_model:Qwen/Qwen3.5-2B-Base", + "base_model:finetune:Qwen/Qwen3.5-2B-Base", + "license:apache-2.0", + "eval-results", + "endpoints_compatible", + "deploy:sagemaker", + "deploy:azure", + "region:us" + ], + "downloads": 3648202, + "likes": 473, + "modelId": "Qwen/Qwen3.5-2B", + "author": "Qwen", + "sha": "15852e8c16360a2fea060d615a32b45270f8a8fc", + "lastModified": "2026-03-02T11:26:29.000Z", + "gated": false, + "disabled": false, + "widgetData": [ + { + "text": "Hi, what can you help me with?" + }, + { + "text": "What is 84 * 3 / 2?" + }, + { + "text": "Tell me an interesting fact about the universe!" + }, + { + "text": "Explain quantum computing in simple terms." + } + ], + "model-index": null, + "config": { + "architectures": [ + "Qwen3_5ForConditionalGeneration" + ], + "model_type": "qwen3_5", + "tokenizer_config": { + "bos_token": null, + "eos_token": "<|im_end|>", + "unk_token": null, + "pad_token": "<|endoftext|>", + "chat_template": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\n {%- if content is string %}\n {{- content }}\n {%- elif content is iterable and content is not mapping %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain images.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Picture ' ~ image_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain videos.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Video ' ~ video_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- else %}\n {{- raise_exception('Unexpected item type in content.') }}\n {%- endif %}\n {%- endfor %}\n {%- elif content is none or content is undefined %}\n {{- '' }}\n {%- else %}\n {{- raise_exception('Unexpected content type.') }}\n {%- endif %}\n{%- endmacro %}\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- '<|im_start|>system\\n' }}\n {{- \"# Tools\\n\\nYou have access to the following functions:\\n\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\" }}\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n\\n\\n\\nvalue_1\\n\\n\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n\\n\\n\\n\\n\\nReminder:\\n- Function calls MUST follow the specified format: an inner block must be nested within XML tags\\n- Required parameters MUST be specified\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '\\n\\n' + content }}\n {%- endif %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {{- '<|im_start|>system\\n' + content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" %}\n {%- set content = render_content(message.content, false)|trim %}\n {%- if not(content.startswith('') and content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if ns.multi_step_tool %}\n {{- raise_exception('No user query found in messages.') }}\n{%- endif %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, true)|trim %}\n {%- if message.role == \"system\" %}\n {%- if not loop.first %}\n {{- raise_exception('System message must be at the beginning.') }}\n {%- endif %}\n {%- elif message.role == \"user\" %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- set reasoning_content = reasoning_content|trim %}\n {%- if loop.index0 > ns.last_query_index %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content + '\\n\\n\\n' + content }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if loop.first %}\n {%- if content|trim %}\n {{- '\\n\\n\\n\\n' }}\n {%- else %}\n {{- '\\n\\n' }}\n {%- endif %}\n {%- else %}\n {{- '\\n\\n\\n' }}\n {%- endif %}\n {%- if tool_call.arguments is defined %}\n {%- for args_name, args_value in tool_call.arguments|items %}\n {{- '\\n' }}\n {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}\n {{- args_value }}\n {{- '\\n\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if not loop.last and loop.nextitem.role != \"tool\" %}\n {{- '<|im_end|>\\n' }}\n {%- elif loop.last %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- else %}\n {{- raise_exception('Unexpected message role.') }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is true %}\n {{- '\\n' }}\n {%- else %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}" + }, + "chat_template_jinja": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\n {%- if content is string %}\n {{- content }}\n {%- elif content is iterable and content is not mapping %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain images.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Picture ' ~ image_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain videos.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Video ' ~ video_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- else %}\n {{- raise_exception('Unexpected item type in content.') }}\n {%- endif %}\n {%- endfor %}\n {%- elif content is none or content is undefined %}\n {{- '' }}\n {%- else %}\n {{- raise_exception('Unexpected content type.') }}\n {%- endif %}\n{%- endmacro %}\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- '<|im_start|>system\\n' }}\n {{- \"# Tools\\n\\nYou have access to the following functions:\\n\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\" }}\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n\\n\\n\\nvalue_1\\n\\n\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n\\n\\n\\n\\n\\nReminder:\\n- Function calls MUST follow the specified format: an inner block must be nested within XML tags\\n- Required parameters MUST be specified\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '\\n\\n' + content }}\n {%- endif %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {{- '<|im_start|>system\\n' + content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" %}\n {%- set content = render_content(message.content, false)|trim %}\n {%- if not(content.startswith('') and content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if ns.multi_step_tool %}\n {{- raise_exception('No user query found in messages.') }}\n{%- endif %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, true)|trim %}\n {%- if message.role == \"system\" %}\n {%- if not loop.first %}\n {{- raise_exception('System message must be at the beginning.') }}\n {%- endif %}\n {%- elif message.role == \"user\" %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- set reasoning_content = reasoning_content|trim %}\n {%- if loop.index0 > ns.last_query_index %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content + '\\n\\n\\n' + content }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if loop.first %}\n {%- if content|trim %}\n {{- '\\n\\n\\n\\n' }}\n {%- else %}\n {{- '\\n\\n' }}\n {%- endif %}\n {%- else %}\n {{- '\\n\\n\\n' }}\n {%- endif %}\n {%- if tool_call.arguments is defined %}\n {%- for args_name, args_value in tool_call.arguments|items %}\n {{- '\\n' }}\n {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}\n {{- args_value }}\n {{- '\\n\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if not loop.last and loop.nextitem.role != \"tool\" %}\n {{- '<|im_end|>\\n' }}\n {%- elif loop.last %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- else %}\n {{- raise_exception('Unexpected message role.') }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is true %}\n {{- '\\n' }}\n {%- else %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}" + }, + "cardData": { + "library_name": "transformers", + "license": "apache-2.0", + "license_link": "https://huggingface.co/Qwen/Qwen3.5-2B/blob/main/LICENSE", + "pipeline_tag": "image-text-to-text", + "base_model": [ + "Qwen/Qwen3.5-2B-Base" + ] + }, + "transformersInfo": { + "auto_model": "AutoModelForMultimodalLM", + "pipeline_tag": "image-text-to-text", + "processor": "AutoProcessor" + }, + "siblings": [ + { + "rfilename": ".gitattributes", + "blobId": "52373fe24473b1aa44333d318f578ae6bf04b49b", + "size": 1570 + }, + { + "rfilename": "LICENSE", + "blobId": "f938136e3adacfd92be087f6e113b5d6d97f678f", + "size": 11544 + }, + { + "rfilename": "README.md", + "blobId": "2efa49d346c547ea81cd3d1310f414df25934f45", + "size": 62814 + }, + { + "rfilename": "chat_template.jinja", + "blobId": "0ef09f214eaa6d9bca297988afc1454b5827b2c7", + "size": 7755 + }, + { + "rfilename": "config.json", + "blobId": "d30a15be1bbfd610f58ad80f1fbeb6778f58a80f", + "size": 2908 + }, + { + "rfilename": "merges.txt", + "blobId": "a494e019ca1502219fd0128658b979e5f05ae8e8", + "size": 3353259 + }, + { + "rfilename": "model.safetensors-00001-of-00001.safetensors", + "blobId": "3868ead7f1658210f24643fa927afa7d9717083c", + "size": 4548221488, + "lfs": { + "sha256": "aa33250c4fc64891ddfaba3a314fd9542ea371843c387178b425fbcc5ed680b1", + "size": 4548221488, + "pointerSize": 135 + } + }, + { + "rfilename": "model.safetensors.index.json", + "blobId": "69a41758e1138259916d08b99b56fada441fd502", + "size": 64460 + }, + { + "rfilename": "preprocessor_config.json", + "blobId": "2ea84a437d448ff71b08df68fdd949d5cc4ebb64", + "size": 390 + }, + { + "rfilename": "tokenizer.json", + "blobId": "a73a846725794819aa6e1c9e97d8dc9671c2006d", + "size": 12807982, + "lfs": { + "sha256": "5f9e4d4901a92b997e463c1f46055088b6cca5ca61a6522d1b9f64c4bb81cb42", + "size": 12807982, + "pointerSize": 133 + } + }, + { + "rfilename": "tokenizer_config.json", + "blobId": "fae3ce993e07c092ad024dde45e592379fde91bb", + "size": 16709 + }, + { + "rfilename": "video_preprocessor_config.json", + "blobId": "3ba673a5ad7d4d13f54155ecd38b2a94a6dac8fe", + "size": 385 + }, + { + "rfilename": "vocab.json", + "blobId": "0aa0ce0658d60ac4a5d609f4eadb0e8e43514176", + "size": 6722759 + } + ], + "spaces": [ + "pliny-the-prompter/obliteratus", + "webml-community/Qwen3.5-WebGPU", + "prithivMLmods/SAM3-Plus-Qwen3.5", + "artificialguybr/Video-Transcription-Smart-Summary", + "embedl/hfviewer", + "artificialguybr/qwen-chat-demo", + "Qwen/QwenScope", + "build-small-hackathon/LocalDuo", + "dqy08/InfoLens1", + "openenv/coding_env", + "remyxai/Feature-Finder", + "amaljoe88/vision-coder-openenv", + "openenv/echo_env", + "prithivMLmods/Multimodal-Edge-Node", + "yuhangzang/Valen-Preview-0923", + "emanforhelp/model-pulse", + "openenv/atari_env", + "openenv/openspiel_env", + "dumbordumber/obliteratus", + "Kodacoda/obliteratus", + "isahsn/MultyModelsChatbot", + "openenv/sudoku", + "rbinrs/obliteratus", + "kicfk/obliteratus", + "Chama29929/flan-t5-small-chat", + "Ev3Dev/Bio-EnvRL", + "aaahmet/obliteratus", + "Deadmon/obliteratus", + "Ngixdev/obliteratus", + "Silavon/Qwen3.5-WebGPU", + "z4iXsECHS6ND-heighTSAI-INSEGCSyX6T-SYS-ROD/Qwen3.5-WebGPU", + "Dexifried/dex-swarm-engine", + "Carnot-EBM/hallucination-detector", + "tacomilezdeeepdale/QwenScope", + "jokernifty/IND-blogger", + "Wstanislawek/RxAI-Micro-2B-Chat-Demo", + "build-small-hackathon/blind-quill", + "Girlz/TokenTrace", + "hugging-apps/internvla-a1-5-vla-explorer", + "RavichandranJ/obliteratus", + "S-Dreamer/obliteratus", + "AlanaSky/asgaard", + "marchkamal51/obliteratus", + "AdithyaSK/NayanaOCRBench", + "nolancassidy/s1v-decision-explorer", + "Steveeeeeeen/smallest-s2s", + "hugging-apps/locus-2b-grounding", + "openenv/chat_env", + "openenv/sumo_rl_env", + "openenv/tbench2", + "openenv/browsergym_env", + "openenv/wordle", + "Nt-animes/1.7b", + "cw4444/obliteratus", + "kalmuahlaunda/obliteratus", + "ankushthehacker5/Qwen3.5-WebGPU", + "sub314xxl/obliteratus", + "mastodonitis/obliteratus", + "GrozniMilitq/obliteratus", + "liminal4423/obliteratus", + "aiqtech/Qwen3.5-WebGPU", + "Marcop4/Qwen3.5-WebGPU", + "duarffodog/obliteratus", + "Joaco2802/ProductDescription", + "Joaco2802/Product_Clasification", + "cypher109/obliteratus", + "Xero1/Qwen-3.5-HF-Demo", + "Ev3Dev/hackathon", + "nagose/qw2b", + "milkygingers/obliteratus", + "TOpNeT7/obliteratus", + "flwa/ohmy2", + "kirikir13/obliteratus", + "jellewas/pii-nl-bench", + "RaccoonStampede/obliteratus", + "ntcuong2103/Qwen-3.5-Multimodal-Demo", + "bofbofai/Qwen3.5-WebGPU", + "highkay/ohmycaptcha", + "jellewas/gdpr-lora-v2train", + "zbq111/flow", + "dragg2/mycaptcha", + "Hk4crprasad/email-triage-env", + "impresionist/OBLITERATUS", + "dragggl25/ohmycaptchaa", + "zzdccww/zzdccww-ohmycaptcha", + "bresseporix22/obliteratus", + "Sendpns/obliteratus", + "oceanicdayi/Qwen3.5-WebGPU", + "digifreely/chatmessenger", + "huezcy/ohmycaptcha", + "mehraz203/zzdccww-ohmycaptcha", + "Valtry/Qwen", + "jessy38472/obliteratus", + "error5920/ohmycaptcha", + "eyalnof123/football-fan-space", + "epixdonkey/obliteratus", + "ymonoce/obliteratus", + "sidmaz666/qwen3.5api", + "Mattral/Qwen3.5-WebGPU", + "ehsaaniqbal/circuit-detective" + ], + "createdAt": "2026-02-28T23:56:16.000Z", + "safetensors": { + "parameters": { + "F32": 2592, + "BF16": 2274067232 + }, + "total": 2274069824 + }, + "usedStorage": 4561029470 +} \ No newline at end of file diff --git a/results/cpu-qwen35-2b/storage-accounting.log b/results/cpu-qwen35-2b/storage-accounting.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/storage-evidence.json b/results/cpu-qwen35-2b/storage-evidence.json new file mode 100644 index 0000000..484eb8f --- /dev/null +++ b/results/cpu-qwen35-2b/storage-evidence.json @@ -0,0 +1,4 @@ +{ + "measured": false, + "reason": "No calibration candidate selected" +} diff --git a/results/cpu-qwen35-2b/supervisor-error.txt b/results/cpu-qwen35-2b/supervisor-error.txt new file mode 100644 index 0000000..9daf462 --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-error.txt @@ -0,0 +1,8 @@ +Traceback (most recent call last): + File "/opt/exp-model-parameter-similarity/functional/supervise.py", line 73, in main + execute('functional.preflight',['--root',str(root)],1200,'preflight.log') + ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/supervise.py", line 38, in execute + if r.returncode:raise RuntimeError(f'{module} failed: exit {r.returncode}, see {log}') + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +RuntimeError: functional.preflight failed: exit 1, see preflight.log diff --git a/results/cpu-qwen35-2b/supervisor-first-attempt-error.txt b/results/cpu-qwen35-2b/supervisor-first-attempt-error.txt new file mode 100644 index 0000000..42f85e2 --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-first-attempt-error.txt @@ -0,0 +1,8 @@ +Traceback (most recent call last): + File "/opt/exp-model-parameter-similarity/functional/supervise.py", line 45, in main + execute('functional.reference_check',['--source',str(root/'reference.py'),'--output',str(root/'reference-check.json')],300,'reference-check.log') + ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/exp-model-parameter-similarity/functional/supervise.py", line 27, in execute + if r.returncode:raise RuntimeError(f'{module} failed: exit {r.returncode}, see {log}') + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +RuntimeError: functional.reference_check failed: exit 1, see reference-check.log diff --git a/results/cpu-qwen35-2b/supervisor-first-attempt.json b/results/cpu-qwen35-2b/supervisor-first-attempt.json new file mode 100644 index 0000000..1f06895 --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-first-attempt.json @@ -0,0 +1,8 @@ +{ + "state": "stopped", + "phase": "reference_check", + "weight_retention": "until_explicit_user_delete_request", + "supervisor_elapsed_seconds": 309.1346261948347, + "error_type": "RuntimeError", + "error": "functional.reference_check failed: exit 1, see reference-check.log" +} diff --git a/results/cpu-qwen35-2b/supervisor-second-attempt.json b/results/cpu-qwen35-2b/supervisor-second-attempt.json new file mode 100644 index 0000000..6f97478 --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-second-attempt.json @@ -0,0 +1,9 @@ +{ + "state": "stopped", + "phase": "real_weight_preflight", + "weight_retention": "until_explicit_user_delete_request", + "supervisor_elapsed_seconds": 45.43917406583205, + "reference_seconds": 9.936048831325024, + "error_type": "RuntimeError", + "error": "functional.preflight failed: exit 1, see preflight.log" +} diff --git a/results/cpu-qwen35-2b/supervisor-status.json b/results/cpu-qwen35-2b/supervisor-status.json new file mode 100644 index 0000000..ad8e843 --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-status.json @@ -0,0 +1,9 @@ +{ + "state": "completed", + "phase": "done", + "weight_retention": "until_explicit_user_delete_request", + "supervisor_elapsed_seconds": 297.24344864301383, + "reference_seconds": 16.28253764193505, + "preflight_seconds": 58.421911120880395, + "remaining_seconds": 6849 +} diff --git a/results/cpu-qwen35-2b/supervisor-third-attempt.json b/results/cpu-qwen35-2b/supervisor-third-attempt.json new file mode 100644 index 0000000..c9e579d --- /dev/null +++ b/results/cpu-qwen35-2b/supervisor-third-attempt.json @@ -0,0 +1,9 @@ +{ + "state": "stopped", + "phase": "real_weight_preflight", + "weight_retention": "until_explicit_user_delete_request", + "supervisor_elapsed_seconds": 40.97820527572185, + "reference_seconds": 7.201708540320396, + "error_type": "RuntimeError", + "error": "functional.preflight failed: exit 1, see preflight.log" +} diff --git a/results/cpu-qwen35-2b/supervisor.log b/results/cpu-qwen35-2b/supervisor.log new file mode 100644 index 0000000..e69de29 diff --git a/results/cpu-qwen35-2b/tokenizer-download.log b/results/cpu-qwen35-2b/tokenizer-download.log new file mode 100644 index 0000000..9cdcd47 --- /dev/null +++ b/results/cpu-qwen35-2b/tokenizer-download.log @@ -0,0 +1 @@ +12807982 diff --git a/results/cpu-qwen35-2b/tokenizers-wheel.log b/results/cpu-qwen35-2b/tokenizers-wheel.log new file mode 100644 index 0000000..36debcf --- /dev/null +++ b/results/cpu-qwen35-2b/tokenizers-wheel.log @@ -0,0 +1,6 @@ +Collecting tokenizers + Downloading tokenizers-0.23.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.8 kB) +Downloading tokenizers-0.23.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 125.0 kB/s eta 0:00:00 +Saved ./runs/cpu-qwen35-2b/wheels/tokenizers-0.23.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +Successfully downloaded tokenizers diff --git a/results/cpu-qwen35-2b/unit-tests.txt b/results/cpu-qwen35-2b/unit-tests.txt new file mode 100644 index 0000000..21690d6 --- /dev/null +++ b/results/cpu-qwen35-2b/unit-tests.txt @@ -0,0 +1,11 @@ +test_causal_convolution_and_norm_boundary (tests.test_functional.FunctionalTests.test_causal_convolution_and_norm_boundary) ... ok +test_causality_and_identical_function_metrics (tests.test_functional.FunctionalTests.test_causality_and_identical_function_metrics) ... ok +test_neuron_function_metrics_and_targeted_replacement (tests.test_functional.FunctionalTests.test_neuron_function_metrics_and_targeted_replacement) ... ok +test_nonrotary_gain_identity_and_rotary_negative_control (tests.test_functional.FunctionalTests.test_nonrotary_gain_identity_and_rotary_negative_control) ... ok +test_streamed_projection_embedding_and_output_head (tests.test_functional.FunctionalTests.test_streamed_projection_embedding_and_output_head) ... ok +test_uniform_rmsnorm_function_bound_is_tight (tests.test_functional.FunctionalTests.test_uniform_rmsnorm_function_bound_is_tight) ... ok + +---------------------------------------------------------------------- +Ran 6 tests in 2.302s + +OK diff --git a/tests/test_functional.py b/tests/test_functional.py index 08f14d2..f91f856 100644 --- a/tests/test_functional.py +++ b/tests/test_functional.py @@ -59,4 +59,61 @@ class FunctionalTests(unittest.TestCase): np.testing.assert_array_equal(norm(x,weight,centered=False),np.zeros_like(x)) + def test_nonrotary_gain_identity_and_rotary_negative_control(self): + from functional.model import rope + from functional.gain_factorization import consolidate + rng=np.random.default_rng(19) + q=rng.standard_normal((2,7,8,256),dtype=np.float32) + k=rng.standard_normal((2,7,2,256),dtype=np.float32) + a=rng.uniform(.5,1.5,256).astype(np.float32) + b=rng.uniform(.5,1.5,256).astype(np.float32) + def scores(q,k):return np.einsum('bthd,bshd->bhts',rope(q),np.repeat(rope(k),4,axis=2))/16 + reference=scores(norm(q,a,centered=False),norm(k,b,centered=False)) + for direction in ('q_to_k','k_to_q'): + q1,k1=consolidate(q,k,a,b,64,direction) + np.testing.assert_allclose(scores(q1,k1),reference,atol=3e-6,rtol=3e-5) + # Moving gains through rotated coordinates is not a valid general identity. + q1,k1=consolidate(q,k,a,b,0,'q_to_k') + self.assertGreater(float(np.max(np.abs(scores(q1,k1)-reference))),1e-3) + + + def test_neuron_function_metrics_and_targeted_replacement(self): + from functional.neuron_reuse import pair_metrics,NeuronReuseLM + x=np.linspace(-2,2,128,dtype=np.float64) + m=pair_metrics(x,x*1.05) + self.assertAlmostEqual(m['relative_l2_a_to_b'],.05) + self.assertAlmostEqual(m['pearson'],1.) + self.assertGreater(m['effective_energy_tokens_a'],16) + dead=pair_metrics(np.zeros(128),np.zeros(128)) + self.assertEqual(dead['rms_a'],0.) + class Tiny(NeuronReuseLM): + def __init__(self): + self.arrays={'gate_proj':np.array([[1,0],[0,2],[1,1]],dtype=np.float32), + 'up_proj':np.array([[2,0],[0,1],[1,-1]],dtype=np.float32), + 'down_proj':np.array([[1,2,3],[-1,1,0]],dtype=np.float32)} + def linear(self,h,name,rows=256):return h@self.arrays[name.rsplit('.',1)[-1]].T + lm=Tiny();lm.configure(5,0,1) + h=np.array([[[1,2],[-1,3]]],dtype=np.float32) + z=silu(h@lm.arrays['gate_proj'].T)*(h@lm.arrays['up_proj'].T) + z[...,0]=z[...,1] + np.testing.assert_allclose(lm.mlp(h,5),z@lm.arrays['down_proj'].T) + original=silu(h@lm.arrays['gate_proj'].T)*(h@lm.arrays['up_proj'].T) + np.testing.assert_allclose(lm.mlp(h,6),original@lm.arrays['down_proj'].T) + + + def test_uniform_rmsnorm_function_bound_is_tight(self): + from functional.norm_repetition import uniform_bounds + a=np.array([1.2,.8,1.5,1.1],dtype=np.float64) + b=np.array([1.22,.78,1.45,1.13],dtype=np.float64) + ab,ba=uniform_bounds(a,b) + basis=np.eye(4) + # Common RMS denominator cancels; basis inputs attain the exact maximum. + ya,yb=basis*a,basis*b + ea=np.linalg.norm(ya-yb,axis=-1)/np.linalg.norm(ya,axis=-1) + eb=np.linalg.norm(ya-yb,axis=-1)/np.linalg.norm(yb,axis=-1) + self.assertAlmostEqual(float(ea.max()),ab) + self.assertAlmostEqual(float(eb.max()),ba) + self.assertIsNone(uniform_bounds(np.array([0.,1.]),np.ones(2))) + + if __name__=='__main__':unittest.main()