From 1e2f34e384bde16a470ef47f27a3115e95d251a0 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 00:22:51 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2015=20(1/3)=20?= =?UTF-8?q?=E2=80=94=20HybridGraphLinear=20edge=20prune=20=EB=8F=84?= =?UTF-8?q?=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/graphlm/neuron/graph_hybrid.py 확장 - edge_mask: register_buffer (학습 X, state_dict 포함), 초기값 모두 1 (no prune) - forward 에 edge_mask 곱셈 추가 → pruned edge 의 기여도 0 + gradient chain 차단 - effective_edge_magnitude(): 현재 forward 적용 magnitude (mask 곱한 상태) - prune_by_magnitude(threshold): |adj·W| < threshold 영구 0 - prune_bottom_fraction(fraction): 살아있는 edge 중 하위 fraction 영구 0 - effective_sparsity(): 영구 prune 비율 - n_alive_edges(): 살아있는 edge 수 - 10 신규 unit tests - edge_mask 초기 / forward 기능 보존 / prune 정확성 - **gradient resurrection 방지 검증** (pruned 위치의 weight/adj_inner grad == 0) - state_dict 보존 (save/load 후 sparsity 유지) - 입력 검증 (negative threshold, invalid fraction) - 182 → 192 tests, all green --- src/graphlm/neuron/graph_hybrid.py | 94 +++++++++++++++++++++++- tests/neuron/test_graph_hybrid.py | 113 +++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+), 4 deletions(-) diff --git a/src/graphlm/neuron/graph_hybrid.py b/src/graphlm/neuron/graph_hybrid.py index cafcacc..05367c2 100644 --- a/src/graphlm/neuron/graph_hybrid.py +++ b/src/graphlm/neuron/graph_hybrid.py @@ -160,6 +160,14 @@ def __init__( else: self.register_parameter("bias", None) + # Phase 15: edge_mask — buffer (학습 X, state_dict 에 포함). 초기값 모두 1 (no prune). + # prune_by_magnitude() 호출 시 일부 위치가 영구 0 으로 전환 → 해당 edge 의 forward + # 기여도 0 + gradient chain 도 mask=0 위치에서 끊김 → resurrection 방지. + self.register_buffer( + "edge_mask", + torch.ones(self.n_groups_out, self.n_groups_in, group_size, group_size), + ) + def forward(self, x: Tensor) -> Tensor: # x: (..., in_features) → (..., n_groups_in, group_size) *batch, in_f = x.shape @@ -169,10 +177,13 @@ def forward(self, x: Tensor) -> Tensor: # 메모리 효율 최적화 (gemini #3302293739): adj_outer 와 adj_inner 를 weight 수준에서 # 미리 결합 → (*batch, G_out, G_in, k) 의 큰 intermediate tensor 회피. - # 수학적 등치: contrib[..., go, gi, ko] = Σ_ki adj_inner[go,gi,ki,ko] · W[go,gi,ki,ko] · x_g[..., gi, ki] - # y[..., go, ko] = Σ_gi adj_outer[go, gi] · contrib[..., go, gi, ko] - # = Σ_gi Σ_ki (adj_outer · adj_inner · W)[...] · x_g[..., gi, ki] - eff_w = self.adj_outer.unsqueeze(-1).unsqueeze(-1) * self.adj_inner * self.weight + # Phase 15: edge_mask 도 같은 위치에 곱함 → pruned edge 의 forward 0 + gradient 차단. + eff_w = ( + self.adj_outer.unsqueeze(-1).unsqueeze(-1) + * self.adj_inner + * self.weight + * self.edge_mask + ) # single einsum — output (*batch, G_out, k), 중간 (*batch, G_out, G_in, k) 텐서 없음 y_g = torch.einsum("...gi,Ggik->...Gk", x_g, eff_w) # flatten back to (..., out_features) @@ -201,6 +212,81 @@ def freeze_adj_outer(self) -> None: def freeze_adj_inner(self) -> None: self.adj_inner.requires_grad_(False) + # ── Phase 15: edge prune ──────────────────────────────────── + + def effective_edge_magnitude(self) -> Tensor: + """현재 forward 에 적용되는 edge magnitude (shape: (G_out, G_in, k, k)). + + = ``|adj_outer · adj_inner · W| · edge_mask`` — 이미 pruned 된 edge 는 0. + prune 결정 / sparsity 측정에 사용. + """ + with torch.no_grad(): + return ( + (self.adj_outer.unsqueeze(-1).unsqueeze(-1) * self.adj_inner * self.weight).abs() + * self.edge_mask + ) + + def prune_by_magnitude(self, threshold: float) -> int: + """edge magnitude < threshold 인 위치를 영구 prune (mask=0). + + gradient resurrection 방지: forward 의 ``eff_w *= edge_mask`` 곱셈으로 + 해당 위치의 gradient 가 ``adj_outer``, ``adj_inner``, ``weight`` 모두에서 0 으로 차단됨. + + Args: + threshold: |adj_outer · adj_inner · W| 의 절대값 임계값. + + Returns: + 이번 호출에서 신규로 prune 된 edge 수. + """ + if threshold < 0: + raise ValueError(f"threshold must be >= 0, got {threshold}") + with torch.no_grad(): + mag = self.effective_edge_magnitude() + new_dead = (mag < threshold) & (self.edge_mask > 0) + n_pruned = int(new_dead.sum().item()) + self.edge_mask[new_dead] = 0.0 + return n_pruned + + def prune_bottom_fraction(self, fraction: float) -> int: + """살아있는 edge 중 magnitude 하위 ``fraction`` 비율을 prune. + + threshold 기반보다 target sparsity 제어가 용이. fraction=0.3 → 살아있는 edge 의 30% 추가 prune. + + Args: + fraction: 0.0 ~ 1.0, 살아있는 edge 중 prune 할 비율. + + Returns: + 이번 호출에서 신규로 prune 된 edge 수. + """ + if not 0.0 <= fraction <= 1.0: + raise ValueError(f"fraction must be in [0, 1], got {fraction}") + with torch.no_grad(): + mag = self.effective_edge_magnitude() + alive_mask = self.edge_mask > 0 + alive_count = int(alive_mask.sum().item()) + n_to_prune = int(alive_count * fraction) + if n_to_prune == 0: + return 0 + # 살아있는 edge 만의 magnitude 중 하위 n_to_prune 위치 + alive_mag = mag[alive_mask] + # kthvalue 는 sorted 의 k 번째 작은 값 (1-indexed) + kth = alive_mag.kthvalue(n_to_prune).values.item() + new_dead = (mag <= kth) & alive_mask + # tie-breaking: kth 와 같은 magnitude 가 여럿이면 약간 초과될 수 있으나 OK + n_pruned = int(new_dead.sum().item()) + self.edge_mask[new_dead] = 0.0 + return n_pruned + + def effective_sparsity(self) -> float: + """전체 edge 중 영구 prune (mask=0) 비율.""" + with torch.no_grad(): + return float((self.edge_mask == 0).float().mean().item()) + + def n_alive_edges(self) -> int: + """살아있는 edge 수 (mask=1).""" + with torch.no_grad(): + return int((self.edge_mask > 0).sum().item()) + def extra_repr(self) -> str: return ( f"in_features={self.in_features}, out_features={self.out_features}, " diff --git a/tests/neuron/test_graph_hybrid.py b/tests/neuron/test_graph_hybrid.py index b0c5907..3bc8c9e 100644 --- a/tests/neuron/test_graph_hybrid.py +++ b/tests/neuron/test_graph_hybrid.py @@ -140,3 +140,116 @@ def test_freeze_helpers(): assert lin.weight.requires_grad lin.freeze_adj_inner() assert not lin.adj_inner.requires_grad + + +# ── Phase 15: edge prune ──────────────────────────────────────── + + +def test_edge_mask_initial_all_ones(): + """초기 edge_mask 는 전부 1 (no prune).""" + lin = HybridGraphLinear(16, 16, group_size=4) + assert lin.edge_mask.shape == (4, 4, 4, 4) + assert torch.all(lin.edge_mask == 1.0) + assert lin.effective_sparsity() == 0.0 + assert lin.n_alive_edges() == 16 * 16 # 4·4·4·4 + + +def test_forward_with_initial_mask_unchanged(): + """edge_mask=1 일 때 forward 는 Phase 14 와 동일 (function preservation).""" + torch.manual_seed(0) + lin = HybridGraphLinear(16, 24, group_size=4) + x = torch.randn(2, 8, 16) + y = lin(x) + # mask 다 0 으로 만들면 출력도 bias 만 남아야 함 (sanity check) + with torch.no_grad(): + lin.edge_mask.zero_() + y_zero = lin(x) + expected = lin.bias.expand(2, 8, 24) + assert torch.allclose(y_zero, expected, atol=1e-6), ( + f"mask=0 시 출력은 bias 만 남아야 함, max |diff| = {(y_zero - expected).abs().max().item()}" + ) + # 원래 mask 복구해서 y 와 다르다는 것도 확인 + assert not torch.allclose(y, y_zero) + + +def test_prune_by_magnitude_basic(): + """threshold 이하 edge 가 mask=0 으로 prune.""" + torch.manual_seed(0) + lin = HybridGraphLinear(16, 16, group_size=4) + initial_mag = lin.effective_edge_magnitude() + # threshold = 50 percentile 로 잡으면 절반 정도 prune + threshold = float(initial_mag.median().item()) + n_pruned = lin.prune_by_magnitude(threshold) + assert n_pruned > 0 + sparsity = lin.effective_sparsity() + assert 0.4 < sparsity < 0.6, f"median threshold 면 ~50% sparsity, got {sparsity}" + + +def test_prune_idempotent_below_threshold(): + """같은 threshold 로 두 번 호출 시 두 번째는 0 신규 prune.""" + torch.manual_seed(0) + lin = HybridGraphLinear(16, 16, group_size=4) + threshold = float(lin.effective_edge_magnitude().median().item()) + n1 = lin.prune_by_magnitude(threshold) + n2 = lin.prune_by_magnitude(threshold) + assert n1 > 0 + assert n2 == 0, f"두 번째 prune 은 신규 0 이어야 함, got {n2}" + + +def test_pruned_edges_do_not_resurrect_via_gradient(): + """pruned edge 의 weight/adj gradient 가 정확히 0 — optimizer 가 살릴 수 없음.""" + torch.manual_seed(0) + lin = HybridGraphLinear( + 16, 16, group_size=4, adj_outer_init="uniform_around_one", adj_inner_init="uniform_around_one" + ) + threshold = float(lin.effective_edge_magnitude().median().item()) + lin.prune_by_magnitude(threshold) + dead_positions = lin.edge_mask == 0 + + x = torch.randn(2, 16) + lin(x).sum().backward() + # weight gradient: pruned 위치는 0 + assert torch.all(lin.weight.grad[dead_positions] == 0), "weight grad at pruned == 0" + # adj_inner gradient: pruned 위치는 0 + assert torch.all(lin.adj_inner.grad[dead_positions] == 0), "adj_inner grad at pruned == 0" + + +def test_prune_bottom_fraction(): + """fraction=0.3 → 살아있는 edge 의 ~30% 신규 prune.""" + torch.manual_seed(0) + lin = HybridGraphLinear(16, 16, group_size=4) + alive_before = lin.n_alive_edges() + n_pruned = lin.prune_bottom_fraction(0.3) + expected = int(alive_before * 0.3) + # tie-breaking 으로 약간 초과 가능 → ±10 허용 + assert abs(n_pruned - expected) <= 10, f"target {expected}, got {n_pruned}" + + +def test_prune_bottom_fraction_zero_fraction_noop(): + lin = HybridGraphLinear(16, 16, group_size=4) + assert lin.prune_bottom_fraction(0.0) == 0 + + +def test_prune_negative_threshold_rejected(): + lin = HybridGraphLinear(16, 16, group_size=4) + with pytest.raises(ValueError, match="must be >= 0"): + lin.prune_by_magnitude(-0.1) + + +def test_prune_invalid_fraction_rejected(): + lin = HybridGraphLinear(16, 16, group_size=4) + with pytest.raises(ValueError, match=r"must be in \[0, 1\]"): + lin.prune_bottom_fraction(1.5) + + +def test_edge_mask_in_state_dict(): + """edge_mask 가 state_dict 에 포함되어 save/load 보존.""" + lin1 = HybridGraphLinear(16, 16, group_size=4) + lin1.prune_by_magnitude(float(lin1.effective_edge_magnitude().median().item())) + sparsity_before = lin1.effective_sparsity() + assert sparsity_before > 0 + + lin2 = HybridGraphLinear(16, 16, group_size=4) + lin2.load_state_dict(lin1.state_dict()) + assert lin2.effective_sparsity() == sparsity_before + assert torch.all(lin2.edge_mask == lin1.edge_mask) From 3d7876181ca28d7e71959fa610ab5ce3c9244c3c Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 08:43:22 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2015=20(2/3)=20?= =?UTF-8?q?=E2=80=94=20demo=20/=20train=20loop=20=EC=97=90=20prune=20step?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HybridTransformerTrainConfig 에 prune_at_step / prune_fraction 필드 추가 - _prune_model: 모든 HybridGraphLinear 에 prune_bottom_fraction 일괄 적용 - _model_sparsity: 전체 HybridGraphLinear edge 평균 sparsity - train loop: prune_at_step 도달 시 1회 prune 실행, prune_event 기록 - result 에 final_sparsity / prune_event 추가 - smoke test 검증: baseline 0% sparsity vs prune 30% sparsity, loss 차 작음 (0.008) --- src/graphlm/neuron/hybrid_transformer_demo.py | 60 +++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/src/graphlm/neuron/hybrid_transformer_demo.py b/src/graphlm/neuron/hybrid_transformer_demo.py index 8e95892..299a27b 100644 --- a/src/graphlm/neuron/hybrid_transformer_demo.py +++ b/src/graphlm/neuron/hybrid_transformer_demo.py @@ -21,6 +21,7 @@ from torch import Tensor, nn from graphlm.data.tinyshakespeare import TinyShakespeareDataset, iter_random_batches +from graphlm.neuron.graph_hybrid import HybridGraphLinear from graphlm.neuron.hybrid_transformer import ( Arch, FullGraphTransformerBlock, @@ -61,6 +62,12 @@ class HybridTransformerTrainConfig: lr: float = 3e-4 max_steps: int = 1500 + # Phase 15: edge prune (one-shot at midpoint by default) + # prune_at_step=None → no prune. 0 < step ≤ max_steps 면 해당 step 끝에서 prune 실행. + prune_at_step: int | None = None + # 살아있는 edge 중 하위 magnitude 비율 (prune_bottom_fraction 사용). 0.0 → no-op. + prune_fraction: float = 0.0 + # runtime seed: int = 0 device: str = "cpu" @@ -160,11 +167,40 @@ def _snapshot_adj(model: HybridGraphTransformerLM) -> list[dict[str, dict[str, T return snapshots +def _prune_model(model: nn.Module, fraction: float) -> dict[str, int]: + """모델의 모든 HybridGraphLinear 에 prune_bottom_fraction 적용. + + Returns: + per-layer pruned count (디버깅용 — layer 이름 → 신규 prune edge 수). + """ + counts: dict[str, int] = {} + for name, mod in model.named_modules(): + if isinstance(mod, HybridGraphLinear): + counts[name] = mod.prune_bottom_fraction(fraction) + return counts + + +def _model_sparsity(model: nn.Module) -> float: + """모든 HybridGraphLinear edge 전체에 대한 평균 sparsity.""" + total = 0 + dead = 0 + for mod in model.modules(): + if isinstance(mod, HybridGraphLinear): + total += mod.edge_mask.numel() + dead += int((mod.edge_mask == 0).sum().item()) + if total == 0: + return 0.0 + return dead / total + + def train_hybrid_transformer_lm(config: HybridTransformerTrainConfig) -> dict: - """1 run 학습 — Phase 13 sweep unit. + """1 run 학습 — Phase 13/14/15 sweep unit. + + Phase 15: ``config.prune_at_step`` 에 도달 시 ``config.prune_fraction`` 만큼 prune. + plain arch 는 HybridGraphLinear 가 없어 prune 무효 (HybridGraphTransformerLM 의 plain 도 동일). - Returns: ``losses``, ``final_loss`` (last 100 mean), ``final_adj`` - (hybrid arch 인 경우 block 별 fc1/fc2 outer/inner snapshot list). + Returns: ``losses``, ``final_loss`` (last 100 mean), ``final_adj``, ``final_sparsity``, + ``prune_event`` (prune 실행 시점의 step + 신규 prune edge 수). """ set_seed(config.seed) model = HybridGraphTransformerLM( @@ -184,8 +220,9 @@ def train_hybrid_transformer_lm(config: HybridTransformerTrainConfig) -> dict: ) optimizer = torch.optim.AdamW(model.parameters(), lr=config.lr) losses: list[float] = [] + prune_event: dict | None = None model.train() - for _step in range(1, config.max_steps + 1): + for step in range(1, config.max_steps + 1): x, y = next(data_iter) x, y = x.to(config.device), y.to(config.device) optimizer.zero_grad() @@ -195,6 +232,19 @@ def train_hybrid_transformer_lm(config: HybridTransformerTrainConfig) -> dict: optimizer.step() losses.append(loss.item()) + # Phase 15: prune at midpoint (or configured step) + if ( + config.prune_at_step is not None + and step == config.prune_at_step + and config.prune_fraction > 0 + ): + per_layer = _prune_model(model, config.prune_fraction) + prune_event = { + "step": step, + "total_pruned": sum(per_layer.values()), + "sparsity_after": _model_sparsity(model), + } + n_last = min(100, len(losses)) final_loss = sum(losses[-n_last:]) / n_last if n_last > 0 else 0.0 @@ -202,6 +252,8 @@ def train_hybrid_transformer_lm(config: HybridTransformerTrainConfig) -> dict: "losses": losses, "final_loss": final_loss, "final_adj": _snapshot_adj(model), + "final_sparsity": _model_sparsity(model), + "prune_event": prune_event, } From 18029649a68c9ed36ead2a81a41182d60df69a94 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 08:45:38 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2015=20(3/3)=20?= =?UTF-8?q?=E2=80=94=20=EB=85=B8=ED=8A=B8=EB=B6=81=20+=20ruff=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - notebooks/02-function-level/14-phase15-sparsity-prune.ipynb 신규 - 4 prune fraction (dense, 30%, 50%, 70%) × 2 seed = 8 run - prune 시점: max_steps/2 = 750 (학습 중간) - arch 고정: hybrid_around_one_around_one + use_full_graph=True (Phase 14 최저 loss 구조) - 자동 verdict 4가지: all-finite / soft degradation (70% ≤ dense+1.0) / monotonic loss / moderate (30%) ≈ dense - loss curve (prune step 수직선 표시) + sparsity vs final_loss trade-off plot - ruff format 적용 (graph_hybrid / test_graph_hybrid) --- .../14-phase15-sparsity-prune.ipynb | 391 ++++++++++++++++++ src/graphlm/neuron/graph_hybrid.py | 5 +- tests/neuron/test_graph_hybrid.py | 6 +- 3 files changed, 398 insertions(+), 4 deletions(-) create mode 100644 notebooks/02-function-level/14-phase15-sparsity-prune.ipynb diff --git a/notebooks/02-function-level/14-phase15-sparsity-prune.ipynb b/notebooks/02-function-level/14-phase15-sparsity-prune.ipynb new file mode 100644 index 0000000..cbfee85 --- /dev/null +++ b/notebooks/02-function-level/14-phase15-sparsity-prune.ipynb @@ -0,0 +1,391 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# 14-phase15-sparsity-prune\n", + "\n", + "**neuron Phase 15** — paradigm 의 **정적 → 동적 위상 진입** 의 첫 단계. Phase 14 까지는 dense topology + learned magnitude 였고, Phase 15 는 학습 중 **edge 자체를 영구 제거** (sparsity-driven prune).\n", + "\n", + "핵심 가설:\n", + "1. **prune 후에도 학습 지속** — pruned edge 의 gradient 가 차단됨 (resurrection 방지) 으로 학습 자체가 깨지지 않음?\n", + "2. **sparsity vs final_loss trade-off** — 30% / 50% / 70% sparsity 에서 loss 가 얼마나 악화?\n", + "3. **soft degradation** — sparsity 가 증가해도 loss 가 catastrophic 하게 폭발하지 않고 gradual?\n", + "4. **post-prune recovery** — prune 직후의 loss spike 가 이후 학습으로 어느 정도 복구?\n", + "\n", + "설계: full graph block (`hybrid_around_one_around_one`, Phase 14 최저 loss 구조) 위에서 **prune fraction 4 단계** × 2 seed = 8 run.\n", + "- mode: `dense` (no prune) / `prune_0.3` / `prune_0.5` / `prune_0.7`\n", + "- prune 시점: max_steps / 2 = 750 (학습 중간)\n", + "- 그 외 hyperparameter 는 Phase 14 와 동일 (공정 비교)\n", + "\n", + "데이터: TinyShakespeare (char-LM, block_size=64)\n", + "시드: [42, 123]\n", + "작성일: 2026-05-27\n", + "연관: Issue [#71](https://github.com/EinSofINTEREST/GraphLM/issues/71) / Phase 14 baseline PR [#70](https://github.com/EinSofINTEREST/GraphLM/pull/70)" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "## 0. 환경 / 의존성" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "from __future__ import annotations\n", + "\n", + "import math\n", + "import statistics\n", + "from pathlib import Path\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "\n", + "from graphlm.data.tinyshakespeare import (\n", + " CharTokenizer,\n", + " TinyShakespeareDataset,\n", + " load_tinyshakespeare_text,\n", + ")\n", + "from graphlm.neuron.hybrid_transformer_demo import (\n", + " HybridGraphTransformerLM,\n", + " HybridTransformerTrainConfig,\n", + " count_parameters,\n", + " train_hybrid_transformer_lm,\n", + ")\n", + "from graphlm.utils import safe_perplexity\n", + "\n", + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "print(f\"device: {device}\")\n", + "print(f\"torch: {torch.__version__}\")" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "## 1. Config + 데이터" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "text = load_tinyshakespeare_text()\n", + "tokenizer = CharTokenizer(text)\n", + "dataset = TinyShakespeareDataset(text, tokenizer)\n", + "vocab_size = tokenizer.vocab_size\n", + "print(f\"vocab_size = {vocab_size}, dataset size = {len(dataset)}\")\n", + "\n", + "# Phase 14 와 동일 hyperparameter — full graph 위에서 prune 검증\n", + "HIDDEN_DIM = 128\n", + "N_HEADS = 4\n", + "FFN_DIM = 256\n", + "N_LAYERS = 4\n", + "GROUP_SIZE = 16\n", + "BLOCK_SIZE = 64\n", + "BATCH_SIZE = 32\n", + "LR = 3e-4\n", + "MAX_STEPS = 1500\n", + "PRUNE_AT_STEP = MAX_STEPS // 2 # 750 = 학습 중간\n", + "SEEDS = [42, 123]\n", + "ARCH = \"hybrid_around_one_around_one\" # Phase 14 최저 loss 구조 고정\n", + "PRUNE_FRACTIONS = [0.0, 0.3, 0.5, 0.7] # dense, 30%, 50%, 70%\n", + "\n", + "# 모델 파라미터 수 (prune 전)\n", + "m = HybridGraphTransformerLM(\n", + " vocab_size=vocab_size,\n", + " hidden_dim=HIDDEN_DIM,\n", + " n_heads=N_HEADS,\n", + " ffn_dim=FFN_DIM,\n", + " n_layers=N_LAYERS,\n", + " max_seq_len=BLOCK_SIZE,\n", + " arch=ARCH,\n", + " group_size=GROUP_SIZE,\n", + " use_full_graph=True,\n", + ")\n", + "print(f\"\\nfull graph 모델 (prune 전): params = {count_parameters(m):,}\")\n", + "print(f\"prune 시점: step {PRUNE_AT_STEP} / {MAX_STEPS} (학습 중간)\")" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## 2. Sweep 실행 (4 prune fraction × 2 seed = 8 run)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "results = {}\n", + "for frac in PRUNE_FRACTIONS:\n", + " for seed in SEEDS:\n", + " key = (frac, seed)\n", + " mode = \"dense\" if frac == 0.0 else f\"prune_{frac}\"\n", + " print(f\"\\n== mode={mode} seed={seed} ==\")\n", + " cfg = HybridTransformerTrainConfig(\n", + " dataset=dataset,\n", + " vocab_size=vocab_size,\n", + " hidden_dim=HIDDEN_DIM,\n", + " n_heads=N_HEADS,\n", + " ffn_dim=FFN_DIM,\n", + " n_layers=N_LAYERS,\n", + " group_size=GROUP_SIZE,\n", + " arch=ARCH,\n", + " use_full_graph=True,\n", + " block_size=BLOCK_SIZE,\n", + " batch_size=BATCH_SIZE,\n", + " lr=LR,\n", + " max_steps=MAX_STEPS,\n", + " prune_at_step=PRUNE_AT_STEP if frac > 0 else None,\n", + " prune_fraction=frac,\n", + " seed=seed,\n", + " device=device,\n", + " )\n", + " out = train_hybrid_transformer_lm(cfg)\n", + " results[key] = out\n", + " sparsity = out[\"final_sparsity\"]\n", + " print(\n", + " f\" final_loss = {out['final_loss']:.4f} (perplexity = {safe_perplexity(out['final_loss']):.2f})\"\n", + " f\" sparsity = {sparsity:.3f}\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "## 3. 결과 표 + 자동 verdict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"{'mode':>10s} {'seed':>6s} {'final_loss':>12s} {'perplexity':>12s} {'sparsity':>10s}\")\n", + "print(\"-\" * 60)\n", + "for (frac, seed), out in results.items():\n", + " fl = out[\"final_loss\"]\n", + " mode = \"dense\" if frac == 0.0 else f\"prune_{frac}\"\n", + " print(\n", + " f\"{mode:>10s} {seed:>6d} {fl:>12.4f} {safe_perplexity(fl):>12.2f} {out['final_sparsity']:>10.3f}\"\n", + " )\n", + "\n", + "# fraction 별 평균\n", + "print(\"\\n== Fraction summary (mean ± σ across seeds) ==\")\n", + "summary = {}\n", + "for frac in PRUNE_FRACTIONS:\n", + " vals = [results[(frac, s)][\"final_loss\"] for s in SEEDS]\n", + " sparsities = [results[(frac, s)][\"final_sparsity\"] for s in SEEDS]\n", + " mean = statistics.mean(vals)\n", + " std = statistics.stdev(vals) if len(vals) > 1 else 0.0\n", + " sp_mean = statistics.mean(sparsities)\n", + " summary[frac] = (mean, std, sp_mean)\n", + " mode = \"dense\" if frac == 0.0 else f\"prune_{frac}\"\n", + " print(\n", + " f\" {mode:>10s} {mean:.4f} ± {std:.4f} (perplexity ≈ {safe_perplexity(mean):.2f}) sparsity={sp_mean:.3f}\"\n", + " )\n", + "\n", + "# 자동 verdict\n", + "print(\"\\n== Verdict ==\")\n", + "dense_loss = summary[0.0][0]\n", + "\n", + "# 1. prune 후에도 학습 지속 — 모든 prune mode 가 finite loss 로 종료\n", + "all_finite = all(math.isfinite(out[\"final_loss\"]) for out in results.values())\n", + "verdict_1 = \"PASS\" if all_finite else \"FAIL\"\n", + "print(f\"1. all-finite after prune: {all_finite} [{verdict_1}]\")\n", + "\n", + "# 2. soft degradation — 70% prune 도 dense + 1.0 이내\n", + "p70_loss = summary[0.7][0]\n", + "diff_70 = p70_loss - dense_loss\n", + "verdict_2 = \"PASS\" if diff_70 < 1.0 else \"FAIL\"\n", + "print(f\"2. soft degradation (70% prune ≤ dense + 1.0): diff = {diff_70:+.4f} [{verdict_2}]\")\n", + "\n", + "# 3. monotonic degradation — sparsity 증가에 따라 loss 비감소\n", + "losses_by_frac = [summary[f][0] for f in PRUNE_FRACTIONS]\n", + "monotone = all(\n", + " losses_by_frac[i] <= losses_by_frac[i + 1] + 0.05 for i in range(len(losses_by_frac) - 1)\n", + ")\n", + "verdict_3 = \"PASS\" if monotone else \"FAIL\"\n", + "print(f\"3. monotonic loss vs sparsity (±0.05 tolerance): {monotone} [{verdict_3}]\")\n", + "\n", + "# 4. moderate prune (30%) 은 거의 무손실 — dense + 0.1 이내\n", + "p30_loss = summary[0.3][0]\n", + "diff_30 = p30_loss - dense_loss\n", + "verdict_4 = \"PASS\" if diff_30 < 0.1 else \"FAIL\"\n", + "print(f\"4. moderate prune (30%) ≤ dense + 0.1: diff = {diff_30:+.4f} [{verdict_4}]\")\n", + "\n", + "# prune 발생 정보\n", + "print(\"\\n== Prune events ==\")\n", + "for (frac, seed), out in results.items():\n", + " if out[\"prune_event\"] is not None:\n", + " ev = out[\"prune_event\"]\n", + " print(\n", + " f\" frac={frac} seed={seed}: step={ev['step']}, total_pruned={ev['total_pruned']}, sparsity_after={ev['sparsity_after']:.3f}\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "## 4. Loss curve 시각화 — prune step 표시" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(12, 6))\n", + "colors = {\n", + " 0.0: \"tab:gray\",\n", + " 0.3: \"tab:blue\",\n", + " 0.5: \"tab:orange\",\n", + " 0.7: \"tab:red\",\n", + "}\n", + "window = 50\n", + "\n", + "for frac in PRUNE_FRACTIONS:\n", + " losses_per_seed = [results[(frac, s)][\"losses\"] for s in SEEDS]\n", + " # rolling mean — slice 시작점 +1 시프트로 window 와 divisor 일치\n", + " smoothed = []\n", + " for losses in losses_per_seed:\n", + " smoothed.append(\n", + " [\n", + " sum(losses[max(0, i - window + 1) : i + 1]) / min(i + 1, window)\n", + " for i in range(len(losses))\n", + " ]\n", + " )\n", + " arr = torch.tensor(smoothed)\n", + " mean = arr.mean(dim=0)\n", + " std = arr.std(dim=0)\n", + " steps = list(range(len(mean)))\n", + " mode = \"dense\" if frac == 0.0 else f\"prune {int(frac * 100)}%\"\n", + " ax.plot(steps, mean, label=mode, color=colors[frac], linewidth=1.5)\n", + " ax.fill_between(steps, mean - std, mean + std, color=colors[frac], alpha=0.15)\n", + "\n", + "# prune step 수직선\n", + "ax.axvline(\n", + " PRUNE_AT_STEP, color=\"black\", linestyle=\":\", alpha=0.5, label=f\"prune @ step {PRUNE_AT_STEP}\"\n", + ")\n", + "\n", + "ax.set_xlabel(\"step\")\n", + "ax.set_ylabel(f\"loss (rolling mean w={window})\")\n", + "ax.set_title(\n", + " f\"Phase 15 — sparsity-driven prune ({ARCH}, full graph): dense vs 30/50/70% prune (mean ± σ over 2 seeds)\"\n", + ")\n", + "ax.legend(loc=\"upper right\")\n", + "ax.grid(alpha=0.3)\n", + "plt.tight_layout()\n", + "\n", + "out_dir = Path(\"../../runs/notebook-neuron-phase15\")\n", + "out_dir.mkdir(parents=True, exist_ok=True)\n", + "fig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\n", + "plt.show()\n", + "print(f\"saved: {out_dir / 'loss_curves.png'}\")" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "## 5. Sparsity vs final_loss trade-off" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(8, 5))\n", + "fracs = [f for f in PRUNE_FRACTIONS]\n", + "means = [summary[f][0] for f in fracs]\n", + "stds = [summary[f][1] for f in fracs]\n", + "sparsities = [summary[f][2] for f in fracs]\n", + "\n", + "ax.errorbar(sparsities, means, yerr=stds, marker=\"o\", capsize=4, linewidth=1.5, color=\"tab:blue\")\n", + "for sp, m, frac in zip(sparsities, means, fracs, strict=True):\n", + " label = \"dense\" if frac == 0.0 else f\"{int(frac * 100)}%\"\n", + " ax.annotate(label, (sp, m), xytext=(8, -8), textcoords=\"offset points\", fontsize=10)\n", + "\n", + "ax.set_xlabel(\"effective sparsity (mask=0 비율)\")\n", + "ax.set_ylabel(\"final loss (last 100 mean ± σ)\")\n", + "ax.set_title(\"Phase 15 — sparsity vs final_loss trade-off\")\n", + "ax.grid(alpha=0.3)\n", + "plt.tight_layout()\n", + "fig.savefig(out_dir / \"sparsity_tradeoff.png\", dpi=150, bbox_inches=\"tight\")\n", + "plt.show()\n", + "print(f\"saved: {out_dir / 'sparsity_tradeoff.png'}\")" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "## 6. 결론 / 다음 단계\n", + "\n", + "(셀 출력 보고 사용자가 채울 영역)\n", + "\n", + "- soft degradation 곡선의 형태 (linear / convex / cliff)?\n", + "- 30% prune 의 무손실 / 70% 의 cliff 여부?\n", + "- prune 직후 loss spike 와 회복 양상?\n", + "\n", + "**Phase 16 후보**:\n", + "- **Net2Net / LiGO 식 grow** — pruned slot 에 신규 edge 추가 (function preservation 유지), dynamic grow + shrink 동시\n", + "- **RigL / SET 식 dynamic sparse training** — 매 prune step 후 같은 수의 edge 를 다른 위치에서 재할당 (constant sparsity 유지하며 topology 만 변화)\n", + "- **layer-wise 차등 prune** — attention vs FFN 별로 다른 sparsity target" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "GraphLM (uv .venv)", + "language": "python", + "name": "graphlm-uv-venv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/graphlm/neuron/graph_hybrid.py b/src/graphlm/neuron/graph_hybrid.py index 05367c2..7248db0 100644 --- a/src/graphlm/neuron/graph_hybrid.py +++ b/src/graphlm/neuron/graph_hybrid.py @@ -222,9 +222,8 @@ def effective_edge_magnitude(self) -> Tensor: """ with torch.no_grad(): return ( - (self.adj_outer.unsqueeze(-1).unsqueeze(-1) * self.adj_inner * self.weight).abs() - * self.edge_mask - ) + self.adj_outer.unsqueeze(-1).unsqueeze(-1) * self.adj_inner * self.weight + ).abs() * self.edge_mask def prune_by_magnitude(self, threshold: float) -> int: """edge magnitude < threshold 인 위치를 영구 prune (mask=0). diff --git a/tests/neuron/test_graph_hybrid.py b/tests/neuron/test_graph_hybrid.py index 3bc8c9e..79c276c 100644 --- a/tests/neuron/test_graph_hybrid.py +++ b/tests/neuron/test_graph_hybrid.py @@ -200,7 +200,11 @@ def test_pruned_edges_do_not_resurrect_via_gradient(): """pruned edge 의 weight/adj gradient 가 정확히 0 — optimizer 가 살릴 수 없음.""" torch.manual_seed(0) lin = HybridGraphLinear( - 16, 16, group_size=4, adj_outer_init="uniform_around_one", adj_inner_init="uniform_around_one" + 16, + 16, + group_size=4, + adj_outer_init="uniform_around_one", + adj_inner_init="uniform_around_one", ) threshold = float(lin.effective_edge_magnitude().median().item()) lin.prune_by_magnitude(threshold) From 29e8a293ce606da5b17a4faf60c5d751c7d9fef7 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 09:00:36 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[FIX]:=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81,=20prune=20tie-breaking=20+=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B0=95=ED=99=94=20+=20config=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=204=EA=B1=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gemini #3307531740 (HIGH): prune_bottom_fraction 의 kthvalue+mag<=kth 가 동률 시 의도보다 많이 prune 위험 (극단적으로 100%) → torch.topk(largest=False) 로 하위 n 개 정확 인덱스 추출 후 mask=0. deterministic. - gemini #3307531745: 테스트의 ±10 tolerance → topk 정확성으로 `==` 강화. 추가로 모든 magnitude 동률 시나리오 신규 테스트 (tie-breaking deterministic 검증). - Copilot #3307536521: test_forward_with_initial_mask_unchanged 가 이름과 검증 불일치 → mask=1 forward 를 mask 없는 직접 계산과 정확 비교 (function preservation 명시). - Copilot #3307536553: HybridTransformerTrainConfig 의 prune 인자 silent no-op 위험 → __post_init__ 추가, prune_fraction ∈ [0,1] / prune_at_step ∈ [1, max_steps] 강제. test_hybrid_transformer_demo.py 신규 (9 validation tests). - 192 → 202 tests, all green --- src/graphlm/neuron/graph_hybrid.py | 18 +++--- src/graphlm/neuron/hybrid_transformer_demo.py | 10 ++++ tests/neuron/test_graph_hybrid.py | 53 +++++++++++++---- tests/neuron/test_hybrid_transformer_demo.py | 59 +++++++++++++++++++ 4 files changed, 120 insertions(+), 20 deletions(-) create mode 100644 tests/neuron/test_hybrid_transformer_demo.py diff --git a/src/graphlm/neuron/graph_hybrid.py b/src/graphlm/neuron/graph_hybrid.py index 7248db0..16f56f0 100644 --- a/src/graphlm/neuron/graph_hybrid.py +++ b/src/graphlm/neuron/graph_hybrid.py @@ -266,15 +266,15 @@ def prune_bottom_fraction(self, fraction: float) -> int: n_to_prune = int(alive_count * fraction) if n_to_prune == 0: return 0 - # 살아있는 edge 만의 magnitude 중 하위 n_to_prune 위치 - alive_mag = mag[alive_mask] - # kthvalue 는 sorted 의 k 번째 작은 값 (1-indexed) - kth = alive_mag.kthvalue(n_to_prune).values.item() - new_dead = (mag <= kth) & alive_mask - # tie-breaking: kth 와 같은 magnitude 가 여럿이면 약간 초과될 수 있으나 OK - n_pruned = int(new_dead.sum().item()) - self.edge_mask[new_dead] = 0.0 - return n_pruned + # 살아있는 edge 의 4D 인덱스 + magnitude + alive_indices = torch.nonzero(alive_mask, as_tuple=False) # (alive_count, 4) + alive_mag = mag[alive_mask] # (alive_count,) + # torch.topk(largest=False) 로 하위 n 개의 정확한 인덱스 추출 — tie-breaking 결정론적 + # (gemini #3307531740): kthvalue + mag<=kth 방식은 동률 시 의도보다 많이 prune 위험 + _, topk_idx = torch.topk(alive_mag, n_to_prune, largest=False) + prune_4d = alive_indices[topk_idx] # (n_to_prune, 4) + self.edge_mask[prune_4d[:, 0], prune_4d[:, 1], prune_4d[:, 2], prune_4d[:, 3]] = 0.0 + return n_to_prune def effective_sparsity(self) -> float: """전체 edge 중 영구 prune (mask=0) 비율.""" diff --git a/src/graphlm/neuron/hybrid_transformer_demo.py b/src/graphlm/neuron/hybrid_transformer_demo.py index 299a27b..1fd6415 100644 --- a/src/graphlm/neuron/hybrid_transformer_demo.py +++ b/src/graphlm/neuron/hybrid_transformer_demo.py @@ -72,6 +72,16 @@ class HybridTransformerTrainConfig: seed: int = 0 device: str = "cpu" + def __post_init__(self) -> None: + # Phase 15 prune 인자 입력 검증 (Copilot #3307536553) — 잘못된 값의 silent no-op 회피. + if not 0.0 <= self.prune_fraction <= 1.0: + raise ValueError(f"prune_fraction must be in [0, 1], got {self.prune_fraction}") + if self.prune_at_step is not None and not 1 <= self.prune_at_step <= self.max_steps: + raise ValueError( + f"prune_at_step must be in [1, max_steps={self.max_steps}], " + f"got {self.prune_at_step}" + ) + class HybridGraphTransformerLM(nn.Module): """Small char-LM Transformer with arch-dispatched FFN. diff --git a/tests/neuron/test_graph_hybrid.py b/tests/neuron/test_graph_hybrid.py index 79c276c..f1d343a 100644 --- a/tests/neuron/test_graph_hybrid.py +++ b/tests/neuron/test_graph_hybrid.py @@ -155,21 +155,31 @@ def test_edge_mask_initial_all_ones(): def test_forward_with_initial_mask_unchanged(): - """edge_mask=1 일 때 forward 는 Phase 14 와 동일 (function preservation).""" + """edge_mask=1 (초기) 일 때 forward 가 mask 없이 계산한 값과 정확히 동일 (function preservation). + + Copilot #3307536521 — 이름과 검증 일치: mask=1 의 forward 가 mask 적용 안 한 직접 계산과 같은지 직접 비교. + """ torch.manual_seed(0) lin = HybridGraphLinear(16, 24, group_size=4) x = torch.randn(2, 8, 16) y = lin(x) - # mask 다 0 으로 만들면 출력도 bias 만 남아야 함 (sanity check) + + # mask 없는 forward 직접 계산 (mask=1 이므로 결과 동일해야 함) + with torch.no_grad(): + x_g = x.reshape(2, 8, lin.n_groups_in, lin.group_size) + eff_w_no_mask = lin.adj_outer.unsqueeze(-1).unsqueeze(-1) * lin.adj_inner * lin.weight + y_g = torch.einsum("...gi,Ggik->...Gk", x_g, eff_w_no_mask) + expected = y_g.reshape(2, 8, lin.out_features) + lin.bias + assert torch.allclose(y, expected, atol=1e-6), ( + f"mask=1 forward 가 mask 없는 계산과 달라짐, max |diff| = {(y - expected).abs().max().item()}" + ) + + # 추가 sanity: mask 를 모두 0 으로 만들면 출력은 bias 만 남음 with torch.no_grad(): lin.edge_mask.zero_() y_zero = lin(x) - expected = lin.bias.expand(2, 8, 24) - assert torch.allclose(y_zero, expected, atol=1e-6), ( - f"mask=0 시 출력은 bias 만 남아야 함, max |diff| = {(y_zero - expected).abs().max().item()}" - ) - # 원래 mask 복구해서 y 와 다르다는 것도 확인 - assert not torch.allclose(y, y_zero) + bias_expected = lin.bias.expand(2, 8, 24) + assert torch.allclose(y_zero, bias_expected, atol=1e-6) def test_prune_by_magnitude_basic(): @@ -219,14 +229,35 @@ def test_pruned_edges_do_not_resurrect_via_gradient(): def test_prune_bottom_fraction(): - """fraction=0.3 → 살아있는 edge 의 ~30% 신규 prune.""" + """fraction=0.3 → 살아있는 edge 의 정확히 30% prune (topk 기반 deterministic). + + gemini #3307531745 — topk 로 정확 n개 prune 보장되므로 tolerance 불필요. + """ torch.manual_seed(0) lin = HybridGraphLinear(16, 16, group_size=4) alive_before = lin.n_alive_edges() n_pruned = lin.prune_bottom_fraction(0.3) expected = int(alive_before * 0.3) - # tie-breaking 으로 약간 초과 가능 → ±10 허용 - assert abs(n_pruned - expected) <= 10, f"target {expected}, got {n_pruned}" + assert n_pruned == expected, f"target {expected}, got {n_pruned}" + + +def test_prune_bottom_fraction_tie_breaking_deterministic(): + """모든 magnitude 가 동률일 때도 정확히 n_to_prune 만큼만 prune (no over-prune). + + gemini #3307531740 의 시나리오 — uniform 같은 magnitude → kthvalue 방식은 100% prune 위험. + """ + lin = HybridGraphLinear(16, 16, group_size=4) + # 모든 magnitude 가 정확히 같도록 설정 + with torch.no_grad(): + lin.weight.fill_(1.0) + lin.adj_outer.fill_(1.0) + lin.adj_inner.fill_(1.0) + alive_before = lin.n_alive_edges() + n_pruned = lin.prune_bottom_fraction(0.3) + expected = int(alive_before * 0.3) + assert n_pruned == expected + # over-prune 안 됨 — 살아있는 edge 수가 expected 만큼 줄음 + assert lin.n_alive_edges() == alive_before - expected def test_prune_bottom_fraction_zero_fraction_noop(): diff --git a/tests/neuron/test_hybrid_transformer_demo.py b/tests/neuron/test_hybrid_transformer_demo.py new file mode 100644 index 0000000..e265b47 --- /dev/null +++ b/tests/neuron/test_hybrid_transformer_demo.py @@ -0,0 +1,59 @@ +"""Tests for HybridTransformerTrainConfig validation (Phase 15).""" + +from __future__ import annotations + +import pytest + +from graphlm.data.tinyshakespeare import CharTokenizer, TinyShakespeareDataset +from graphlm.neuron.hybrid_transformer_demo import HybridTransformerTrainConfig + + +def _dummy_dataset() -> TinyShakespeareDataset: + text = "abcdefghij" * 100 + tok = CharTokenizer(text) + return TinyShakespeareDataset(text, tok) + + +def _base_kwargs() -> dict: + ds = _dummy_dataset() + return dict( + dataset=ds, + vocab_size=10, + hidden_dim=16, + n_heads=4, + ffn_dim=32, + n_layers=2, + group_size=4, + arch="hybrid_full_full", + block_size=8, + batch_size=4, + lr=1e-3, + max_steps=100, + ) + + +def test_default_config_valid(): + """Phase 15 인자 default (prune_at_step=None, prune_fraction=0.0) 가 유효.""" + cfg = HybridTransformerTrainConfig(**_base_kwargs()) + assert cfg.prune_at_step is None + assert cfg.prune_fraction == 0.0 + + +@pytest.mark.parametrize("frac", [-0.1, 1.1, 2.0]) +def test_invalid_prune_fraction_rejected(frac): + """prune_fraction ∉ [0, 1] 는 __post_init__ 에서 거부 (Copilot #3307536553).""" + with pytest.raises(ValueError, match=r"prune_fraction must be in \[0, 1\]"): + HybridTransformerTrainConfig(**_base_kwargs(), prune_fraction=frac) + + +@pytest.mark.parametrize("step", [0, -1, 101, 9999]) +def test_invalid_prune_at_step_rejected(step): + """prune_at_step ∉ [1, max_steps] 는 거부.""" + with pytest.raises(ValueError, match="prune_at_step must be in"): + HybridTransformerTrainConfig(**_base_kwargs(), prune_at_step=step) + + +def test_valid_prune_config_accepted(): + cfg = HybridTransformerTrainConfig(**_base_kwargs(), prune_at_step=50, prune_fraction=0.3) + assert cfg.prune_at_step == 50 + assert cfg.prune_fraction == 0.3 From c549022e64fe1492c347e1768710014c27cc429c Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 09:52:31 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[CHORE]:=20Phase=2015=20figure=20=EC=9E=90?= =?UTF-8?q?=EC=82=B0=20=EC=B6=94=EA=B0=80=20(Notion=20=EC=9E=84=EB=B2=A0?= =?UTF-8?q?=EB=93=9C=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/figures/neuron/phase15/loss_curves.png | Bin 0 -> 131966 bytes .../neuron/phase15/sparsity_tradeoff.png | Bin 0 -> 63371 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/figures/neuron/phase15/loss_curves.png create mode 100644 docs/figures/neuron/phase15/sparsity_tradeoff.png diff --git a/docs/figures/neuron/phase15/loss_curves.png b/docs/figures/neuron/phase15/loss_curves.png new file mode 100644 index 0000000000000000000000000000000000000000..818bc2a8dcf1efefe4da89cde5d23d1bf76f6901 GIT binary patch literal 131966 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%0Da)BYqJ);+1Hs~8SPca2Q91>%S#-*Q=O!oD0 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 ZwR4Z;5%w6o+br5jL{(EI_reYTe*u{IaiIVJ literal 0 HcmV?d00001 diff --git a/docs/figures/neuron/phase15/sparsity_tradeoff.png b/docs/figures/neuron/phase15/sparsity_tradeoff.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ad243606fd98130c6f5e1ab9a0f3bc149397d7 GIT binary patch literal 63371 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 literal 0 HcmV?d00001