NS
NEWSAINT
ai-eng• 8 MIN READ•1 Oktober 2026

SPLASH 2026: Arsitektur Switching Parallel Layouts of Attention (TP, DPA, CP, DOP), Decoupled Ownership Parallelism, dan Seamless Handoff pada LLM Serving Generasi Blackwell B200

Analisis arsitektur sistemik riset frontier LLM serving (arXiv:2609.37626, ICT CAS & SGLang ecosystem, September 2026): Mengapa tidak ada satu pun layout paralelisme attention (TP, CP, maupun DPA) yang optimal di seluruh variasi beban kerja reasoning, agentic multi-turn, dan RL rollouts. Workload modern memulai batch dengan banyak request pendek (menguntungkan DP-attention), namun berakhir dengan beberapa reasoning trace yang sangat panjang (menguntungkan CP atau TP). Mesin serving konvensional memaku satu layout statis sejak boot karena mengubah layout sebelumnya mengharuskan request draining dan worker restart. SPLASH memperkenalkan mekanisme live attention switching yang mampu mengubah layout paralelisme secara dinamis saat inferensi tengah berjalan dengan median overhead transisi hanya 0.51% per step. Melalui pengenalan Decoupled Ownership Parallelism (DOP)—yang men-shard bobot proyeksi seperti TP namun mempertahankan KV cache pada satu owner rank seperti DPA—SPLASH menghemat kapasitas KV sebesar 27–60% tanpa replikasi redundan. Pada pengujian hardware Blackwell B200 melayani GLM-5.3 dan DeepSeek-V3.2 pada H200, scheduler adaptif SPLASH meningkatkan throughput serving end-to-end hingga 1.30–1.73x lipat dibanding layout statis.

N
Ervareza Naurian Novantila
Lead Architect & Founder NEWSAINT
Fact-Checked & Verified
Ilustrasi Arsitektur Teknis 16:9 SPLASH 2026: Arsitektur Switching Parallel Layouts of Attention (TP, DPA, CP, DOP), Decoupled Ownership Parallelism, dan Seamless Handoff pada LLM Serving Generasi Blackwell B200

Evolusi model bahasa modern menuju autonomous agentic workflows, multi-turn tool interaction, dan reinforcement learning rollout skala masif (seperti arsitektur DeepSeek-R1 dan OpenAI o1/o3) telah mengubah pola lalu lintas komputasi secara radikal. Jika beban inferensi chatbot konvensional bersifat homogen dan deterministik, beban kerja penalaran (reasoning workloads) justru memicu paradoks struktural: satu batch inferensi yang bermula dari ratusan request pendek independen akan bermutasi di tengah jalan menjadi segelintir reasoning traces ekstrem berukuran ratusan ribu token yang berjalan selama puluhan menit.

Dalam infrastruktur klaster GPU terdistribusi, mekanisme komputasi attention memaksa operator memilih satu dari tiga layout paralelisme utama: Tensor Parallelism (TP) untuk konkurensi rendah dengan latensi interaksi ketat, Data-Parallel Attention (DPA) untuk konkurensi request tinggi yang independen, atau Context Parallelism (CP) ketika panjang prompt melebihi kapasitas VRAM satu GPU. Namun hingga hari ini, mesin inferensi standar industri seperti vLLM, TensorRT-LLM, dan SGLang memaku konfigurasi layout tersebut secara statis sejak engine di-boot. Mengubah layout paralelisme di tengah jalan mengharuskan klaster melakukan request draining (menghentikan penerimaan request, menunggu seluruh request aktif selesai, dan me-restart worker)—sebuah prosedur mahal yang memakan waktu hingga puluhan detik persis di saat transisi layout paling dibutuhkan.

Systems Architecture Breakthrough • ICT CAS & SGLang Team arXiv:2609.37626 [cs.DC / cs.AI]

SPLASH: Switching Parallel Layouts of Attention with Seamless Handoff

Dipimpin oleh Chuan Liu, Shuoming Zhang, Zhicheng Li, Bersama tim peneliti Institute of Computing Technology Chinese Academy of Sciences (ICT CAS) dan kontributor inti ekosistem SGLang, riset ini memperkenalkan SPLASH—arsitektur sistem serving pertama di dunia yang mampu berpindah layout paralelisme attention secara dinamis saat inferensi berjalan tanpa membuang batch atau me-restart worker. Dengan median overhead switching hanya < 0.51% dari durasi satu step decoding dan pengenalan layout baru Decoupled Ownership Parallelism (DOP), SPLASH membukukan peningkatan throughput end-to-end serving hingga 1.30× – 1.73× lipat pada klaster NVIDIA Blackwell B200 melayani model GLM-5.3 dan DeepSeek-V3.2 pada H200.

Dekopling Kepemilikan State: Fondasi Matematis Pergantian Layout

Kunci mengapa sistem serving selama ini memaku layout statis adalah anggapan bahwa pemindahan live KV cache di tengah eksekusi terlalu mahal. Namun, arsitektur attention generasi terbaru—khususnya Multi-Head Latent Attention (MLA) yang diadopsi oleh DeepSeek dan GLM generasi terbaru—menggunakan proyeksi terkompresi berdimensi rendah ($d_c + d_r$) yang meniadakan sumbu head pada latent KV cache.

Observasi fundamental SPLASH adalah: arsitektur modern mendeskopel lokasi penyimpanan KV cache request dari cara bobot proyeksi attention di-shard. Konsekuensinya, sebuah layout paralelisme sebenarnya hanya ditentukan oleh dua keputusan ortogonal:

  1. Weight Sharding: Apakah bobot matriks proyeksi attention ($W_A$) di-shard ke seluruh $T$ ranks GPU ($W_A / T$, seperti pada TP) atau direplikasi penuh pada setiap rank ($W_A$, seperti pada CP dan DPA)?
  2. KV Cache Ownership: Rank mana yang menyimpan riwayat KV cache dari sebuah request? Apakah direplikasi pada setiap rank ($B cdot k cdot s$, seperti pada TP), di-shard per request ($B/T cdot k cdot s$, seperti pada DPA), atau di-shard melintasi panjang urutan konteks ($(B cdot k cdot s)/T$, seperti pada CP)?
// Formula Alokasi Memori per-Rank (T ranks, B requests, context s, k bytes/token):
M_{\text{TP}}(s) = \frac{W_A}{T} + B \cdot k \cdot s
M_{\text{CP}}(s) = W_A + \frac{B \cdot k \cdot s}{T}
M_{\text{DPA}}(s) = W_A + \left\lceil \frac{B}{T} \right\rceil \cdot k \cdot s
M_{\text{DOP}}(s) = \frac{W_A}{T} + \left\lceil \frac{B}{T} \right\rceil \cdot k \cdot s \quad \text{[Decoupled Ownership Parallelism]}

Inovasi 1: Decoupled Ownership Parallelism (DOP)

Dengan memetakan ruang desain kepemilikan di atas, SPLASH menemukan kombinasi kuadran keempat yang selama ini luput dari seluruh mesin serving komersial: Decoupled Ownership Parallelism (DOP).

Dalam DOP, bobot proyeksi di-shard melintasi seluruh GPU persis seperti Tensor Parallelism ($W_A/T$), namun riwayat KV cache dari tiap request dipertahankan utuh pada satu owner GPU saja persis seperti Data-Parallel Attention. DOP tidak mereplikasi bobot proyeksi maupun KV cache:

  • Ekstra Kapasitas KV 27% – 60%: Karena bobot proyeksi di-shard $1/T$, DOP membebaskan ruang VRAM sebesar $(1 - 1/T)W_A$ per GPU. Pada model skala besar seperti GLM-5.3 (78 layer FP8), penghematan ini setara dengan gigabytes ruang HBM tambahan yang langsung dialokasikan untuk menampung KV cache, meningkatkan batas admission request hingga 60% dibanding DPA murni.
  • Komputasi Melalui Variable-Size All-to-All: Agar setiap GPU dapat mengeksekusi attention lokal atas riwayat KV yang lengkap, DOP menyisipkan operasi komunikasi all-to-all sebelum blok attention untuk mendistribusikan baris query $N_r$ ke owner yang sesuai, diikuti oleh reverse all-to-all setelah attention untuk mengembalikan slice aktivasi ke rank asalnya. Berbeda dengan DeepSpeed-Ulysses yang membagi urutan berdasarkan head (sehingga mewajibkan KV cache dipecah per head), DOP mengelompokkan baris berdasarkan request sehingga seluruh KV cache laten MLA tetap utuh di satu GPU tanpa fragmentasi.

Inovasi 2: Seamless Handoff & Overlapped Pipelining

Tantangan terbesar live switching adalah mencegah terjadinya bubble atau stall saat status state berpindah. SPLASH merekayasa mekanisme Seamless Handoff yang berjalan tepat pada batas batch step decoding autoregresif ($t o t+1$):

Pilar 1
Maximal State Reuse

SPLASH mengevaluasi state manifest: jika beralih dari TP ke DOP, setiap rank cukup mempertahankan subset KV miliknya dan mengeksekusi discard lokal pada salinan KV yang berlebih—membebaskan VRAM secara instan dengan nol overhead transmisi jaringan.

Pilar 2
Overlapped Layer Transfer

Kolektif transfer bobot atau KV untuk layer $i$ dieksekusi secara asinkron pada background CUDA stream bersamaan dengan komputasi forward layer $i-1$. Hanya transfer layer pertama yang ter-ekspos, memangkas latensi transisi hingga ke level mikrodetik.

Pilar 3
Transition-Aware Scheduler

Fungsi scheduler $\pi(x; \theta)$ memprediksi kurva latensi per-step dari 4 layout kandidat secara real-time. Transisi hanya dipicu jika layout baru mengungguli layout lama di atas ambang histeresis batas stabilitas.

Hasil profiling mikrobenchmarks membuktikan bahwa median overhead transisi SPLASH berada di bawah 0.51% dari durasi satu langkah decoding reguler, menjadikannya nyaris tanpa biaya (virtually free) dalam siklus serving produksi.

Hasil Uji Komparatif pada NVIDIA Blackwell B200 & H200 (2026)

SPLASH diimplementasikan di atas engine serving performa tinggi SGLang 0.5.10 dan dievaluasi melayani model GLM-5.3 (78 layer FP8) pada 2 node 16x GPU NVIDIA Blackwell B200 (arsitektur prefill/decode terpisah) serta model DeepSeek-V3.2 pada klaster NVIDIA H200 SXM5:

Serving Layout Strategy Mekanisme Switching KV Memory Capacity Median Transition Overhead Serving Throughput Speedup
Fixed Tensor Parallelism (TP) Statis (No Switch) Baseline (Replicated KV) N/A 1.00× (Ref)
Fixed DP-Attention (DPA) Statis (No Switch) +35% vs TP N/A 1.18×
Naive Dynamic (Draining & Restart) Request Draining +45% vs TP 12.4s – 38.0s (Stall) 0.89× (Degraded)
SPLASH (Adaptive 4-Layout) Seamless Handoff +60% vs DPA (DOP Mode) < 0.51% Step Duration 1.30× – 1.73×

Data empiris membuktikan bahwa mencoba beralih layout secara konvensional (draining) justru menurunkan throughput agregat menjadi 0.89x karena GPU menganggur menunggu antrean request panjang selesai. Sebaliknya, SPLASH mengeksekusi transisi antar-keempat layout secara kontinu pada level per-step, menghasilkan lonjakan throughput serving bersih sebesar 30% hingga 73% melintasi aneka ragam kurva distribusi konteks token.

Implementasi Referensi TypeScript: SPLASH Transition & Scheduler Engine

Di bawah ini adalah implementasi sistematis algoritma Transition-Aware Scheduler dan kalkulator footprint layout memori yang merefleksikan arsitektur SPLASH:

src/serving/splash-layout-scheduler.ts Production TypeScript Implementation
// Production Implementation: SPLASH Dynamic Attention Layout Switching & DOP Engine
// Berdasarkan Arsitektur ICT CAS & SGLang Core (arXiv:2609.37626 - September 2026)
//
// Karakteristik Desain:
// 1. Decoupled Ownership Parallelism (DOP): Weights sharded ala TP, KV cache request-owned ala DPA
// 2. Seamless Handoff: Overlapping transfer layer i dengan komputasi layer i-1 (<0.51% overhead)
// 3. Transition-Aware Scheduler π(x; θ): Dynamic layout adaptation mengikuti profil batch reasoning

export type AttentionLayout = 'TP' | 'CP' | 'DPA' | 'DOP';

export interface ClusterHardwareProfile {
  totalRanks: number;           // T (misal: 8 rank B200 per node)
  deviceMemoryBytes: number;     // H_r (misal: 192GB HBM3e)
  nvlinkBandwidthBytesSec: number; // Bandwidth inter-rank
  collectiveLatencySec: number;  // Latensi fixed all-gather / all-to-all
}

export interface RequestBatchState {
  activeRequests: number;        // B (konkurensi request)
  averageContextLength: number;  // s (panjang token KV cache)
  queryChunkLength: number;      // q (prefill chunk / 1 decode token)
  kvBytesPerToken: number;       // k (d_c + d_r) * b * L
  projectionSizeBytes: number;   // W_A (total tensor weights proyeksi attention)
}

export interface LayoutFootprintEvaluation {
  layout: AttentionLayout;
  weightBytesPerRank: number;
  kvBytesPerRank: number;
  totalMemoryBytes: number;
  isFeasible: boolean;
  estimatedStepLatencyMs: number;
}

export class SplashLayoutScheduler {
  constructor(
    private hw: ClusterHardwareProfile,
    private switchHysteresisMargin: number = 0.08 // Margin 8% mencegah osilasi switching liar
  ) {}

  /**
   * Menghitung alokasi memori per rank untuk masing-masing dari 4 layout attention (Persamaan 1 arXiv:2609.37626)
   */
  public evaluateLayouts(batch: RequestBatchState): LayoutFootprintEvaluation[] {
    const T = this.hw.totalRanks;
    const { activeRequests: B, averageContextLength: s, kvBytesPerToken: k, projectionSizeBytes: W } = batch;

    const layouts: AttentionLayout[] = ['TP', 'CP', 'DPA', 'DOP'];

    return layouts.map((layout) => {
      let weightBytes = 0;
      let kvBytes = 0;

      switch (layout) {
        case 'TP':
          // TP: Bobot proyeksi di-shard 1/T, namun KV cache MLA direplikasi penuh pada semua rank
          weightBytes = W / T;
          kvBytes = B * k * s;
          break;
        case 'CP':
          // CP: Bobot direplikasi pada semua rank, sequence KV di-shard 1/T per request
          weightBytes = W;
          kvBytes = (B * k * s) / T;
          break;
        case 'DPA':
          // DPA: Bobot direplikasi pada semua rank, request didistribusikan B/T per rank
          weightBytes = W;
          kvBytes = Math.ceil(B / T) * k * s;
          break;
        case 'DOP':
          // DOP: Bobot di-shard 1/T (ala TP), KV cache dipegang 1 owner rank tanpa replikasi (ala DPA)
          weightBytes = W / T;
          kvBytes = Math.ceil(B / T) * k * s;
          break;
      }

      const totalMemory = weightBytes + kvBytes;
      const isFeasible = totalMemory <= this.hw.deviceMemoryBytes * 0.92; // 8% headroom untuk aktivasi & workspace

      // Per-step cost analytical model: komputasi + komunikasi all-to-all / all-gather
      const stepLatencyMs = this.estimateStepLatency(layout, batch, isFeasible);

      return {
        layout,
        weightBytesPerRank: weightBytes,
        kvBytesPerRank: kvBytes,
        totalMemoryBytes: totalMemory,
        isFeasible,
        estimatedStepLatencyMs: stepLatencyMs,
      };
    });
  }

  /**
   * Memilih layout optimal berikutnya dengan margin histeresis transisi
   */
  public selectOptimalLayout(
    currentLayout: AttentionLayout,
    batch: RequestBatchState
  ): { targetLayout: AttentionLayout; shouldSwitch: boolean; reason: string } {
    const evaluations = this.evaluateLayouts(batch);
    const feasibleLayouts = evaluations.filter((e) => e.isFeasible);

    if (feasibleLayouts.length === 0) {
      throw new Error('FATAL: Semua layout attention melebihi kapasitas HBM device. Trigger KV eviction!');
    }

    // Urutkan berdasarkan latensi langkah terendah
    feasibleLayouts.sort((a, b) => a.estimatedStepLatencyMs - b.estimatedStepLatencyMs);
    const bestCandidate = feasibleLayouts[0];
    const currentEval = evaluations.find((e) => e.layout === currentLayout);

    if (!currentEval || !currentEval.isFeasible) {
      return {
        targetLayout: bestCandidate.layout,
        shouldSwitch: true,
        reason: 'Current layout OOM or infeasible under active context expansion',
      };
    }

    const performanceGain = (currentEval.estimatedStepLatencyMs - bestCandidate.estimatedStepLatencyMs) / currentEval.estimatedStepLatencyMs;

    if (bestCandidate.layout !== currentLayout && performanceGain > this.switchHysteresisMargin) {
      return {
        targetLayout: bestCandidate.layout,
        shouldSwitch: true,
        reason: `Candidate ${bestCandidate.layout} outperforms ${currentLayout} by ${(performanceGain * 100).toFixed(1)}% (exceeding ${this.switchHysteresisMargin * 100}% threshold)`,
      };
    }

    return {
      targetLayout: currentLayout,
      shouldSwitch: false,
      reason: 'Current layout remains optimal within stable execution margin',
    };
  }

  private estimateStepLatency(layout: AttentionLayout, batch: RequestBatchState, feasible: boolean): number {
    if (!feasible) return Infinity;
    const T = this.hw.totalRanks;
    const { activeRequests: B, averageContextLength: s, queryChunkLength: q } = batch;

    // Latensi komputasi dasar (FLOPs/Bandwidth)
    const computeBase = 0.8 + (q * s * 1e-6);

    let commOverhead = 0;
    switch (layout) {
      case 'TP':
        // All-reduce pada output projection: 2 * (T - 1)/T * payload
        commOverhead = (2 * (T - 1) / T) * (q * 4096 * 2) / (this.hw.nvlinkBandwidthBytesSec * 1e-3);
        break;
      case 'CP':
        // Ring attention / All-to-all KV exchange sepanjang head/sequence
        commOverhead = (T - 1) * this.hw.collectiveLatencySec * 1e3 + 0.12 * (s / 1024);
        break;
      case 'DPA':
        // Zero attention comms, namun menanggung replikasi bobot & redundansi
        commOverhead = 0.02;
        break;
      case 'DOP':
        // Variable-size All-to-all query rows sebelum attention + output rows setelah attention
        const dopPayloadBytes = (1 - 1 / T) * (B * q) * 4096 * 2;
        commOverhead = (2 * dopPayloadBytes / (this.hw.nvlinkBandwidthBytesSec * 1e-3)) + (2 * this.hw.collectiveLatencySec * 1e3);
        break;
    }

    return computeBase + commOverhead;
  }
}

/**
 * Eksekutor Handoff Transisi: Memindahkan KV & bobot secara non-blocking di background stream
 */
export class SplashSeamlessHandoffController {
  public static calculateHandoffManifest(
    sourceLayout: AttentionLayout,
    targetLayout: AttentionLayout,
    totalLayers: number = 78
  ): { weightTransferPrimitive: 'discard' | 'all-gather' | 'none'; kvTransferPrimitive: 'discard' | 'all-to-all' | 'all-gather' | 'none' } {
    let weightPrim: 'discard' | 'all-gather' | 'none' = 'none';
    let kvPrim: 'discard' | 'all-to-all' | 'all-gather' | 'none' = 'none';

    // Transisi matriks sesuai Gambar 3 (arXiv:2609.37626)
    if ((sourceLayout === 'TP' || sourceLayout === 'DOP') && (targetLayout === 'CP' || targetLayout === 'DPA')) {
      weightPrim = 'all-gather'; // Memulihkan bobot replikasi penuh dari sharded shards
    } else if ((sourceLayout === 'CP' || sourceLayout === 'DPA') && (targetLayout === 'TP' || targetLayout === 'DOP')) {
      weightPrim = 'discard'; // Membuang shard bobot non-lokal (nol beban jaringan)
    }

    if (sourceLayout === 'TP' && targetLayout === 'DOP') {
      kvPrim = 'discard'; // Setiap rank hanya mempertahankan request miliknya, buang replika
    } else if (sourceLayout === 'DOP' && targetLayout === 'TP') {
      kvPrim = 'all-gather'; // Replikasi KV cache ke semua rank
    } else if (sourceLayout === 'DPA' && targetLayout === 'CP') {
      kvPrim = 'all-to-all'; // Re-shard sequence context antar worker
    }

    return { weightTransferPrimitive: weightPrim, kvTransferPrimitive: kvPrim };
  }
}

Implikasi Strategis bagi Industri Infrastruktur AI 2026

Munculnya arsitektur seperti SPLASH menandai peralihan fundamental dari era statically-allocated inference clusters menuju fluid dynamic-topology serving. Di era di mana beban kerja reasoning agentic mendominasi konsumsi daya GPU data center, memaksakan satu konfigurasi paralelisme statis adalah pemborosan modal infrastruktur bernilai jutaan dolar.

Dengan mengadopsi Decoupled Ownership Parallelism dan live attention switching, penyedia layanan cloud AI hyperscaler dan enterprise self-hosted stack dapat memeras efisiensi maksimum dari hardware generasi baru seperti NVIDIA Blackwell B200 dan GB200 NVL72. SPLASH membuktikan bahwa fleksibilitas topologi di level software mampu menghasilkan percepatan throughput setara lompatan generasi arsitektur silikon fisik tanpa menambah satu watt pun konsumsi energi data center.

Referensi & Sumber Terverifikasi

Butuh Arsitektur Web & AI Berkualitas Tinggi?

Tim engineering NEWSAINT siap membantu merancang website berkecepatan tinggi, sistem AI autonomous, dan solusi SaaS terukur untuk bisnis Anda.

Artikel Terkait Lainnya

Ilustrasi Arsitektur Teknis 16:9 DecisionRAG (arXiv:2610.35868): Retriever-Free Retrieval via Decision Models — Eliminasi Capability Asymmetry, Hierarchical Tree Navigation, dan Rekor +17.4% Hit@1 Tanpa Indeks Vektor

DecisionRAG (arXiv:2610.35868): Retriever-Free Retrieval via Decision Models — Eliminasi Capability Asymmetry, Hierarchical Tree Navigation, dan Rekor +17.4% Hit@1 Tanpa Indeks Vektor

Analisis arsitektur DecisionRAG (arXiv:2610.35868, Chao Wan, Paul Jünger, Beixi Du, Bodong Liu, Navaneetha Krishnan, Kilian Q. Weinberger — Cornell University & ASAPP): Mengapa retrieval konvensional (BM25, dense embeddings) menciptakan capability asymmetry terhadap LLM generator modern, dan bagaimana DecisionRAG menavigasi struktur korpus bertingkat menggunakan model keputusan (decision models) dalam konteks bersama (shared context) tanpa token generasi, menghasilkan lompatan +13.8 R@1 di MultiDoc2Dial, +17.4 Hit@1 di Natural Questions, dan latensi secepat 0.68 detik.

Ilustrasi Arsitektur Teknis 16:9 DynaFlow (arXiv:2610.34467): Free-Form Multi-Agent Orchestration — Sintesis Alur Kerja Eksekutabel, Eliminasi Defek Aliran Informasi, dan Lonjakan Akurasi 88.08% Tanpa Mengubah Bobot Sub-Agent

DynaFlow (arXiv:2610.34467): Free-Form Multi-Agent Orchestration — Sintesis Alur Kerja Eksekutabel, Eliminasi Defek Aliran Informasi, dan Lonjakan Akurasi 88.08% Tanpa Mengubah Bobot Sub-Agent

Analisis arsitektur DynaFlow (arXiv:2610.34467, Ruhao Liu et al., NUS): Mengapa topologi multi-agent statis memicu overhead komunikasi berlebihan, dan bagaimana integrasi sintesis alur kerja bebas ke dalam ruang aksi Main Agent — dikombinasikan dengan Two-Stage SFT dan kurasi 3 defek orkestrasi — menghasilkan akurasi 88.08% serta memecahkan 100% soal AIME dengan sub-agent berbobot beku.

Ilustrasi Arsitektur Teknis 16:9 Code Graphs & Embeddings pada Small Coding Agents (arXiv:2610.33958): Eksperimen 79k Episode SWE-bench, Gradien Hop Depth, dan Batasan Representasi Leksikal Satu-Langkah

Code Graphs & Embeddings pada Small Coding Agents (arXiv:2610.33958): Eksperimen 79k Episode SWE-bench, Gradien Hop Depth, dan Batasan Representasi Leksikal Satu-Langkah

Analisis empiris 79k episode SWE-bench Verified (arXiv:2610.33958, Saurav Bellam): Apakah tool knowledge graph dan embedding search benar-benar melengkapi pemahaman struktural coding agent kecil? Menyingkap degradasi hop gradient (odds ratio 0.50–0.67 per hop), anomali tool uptake pada model 32B, dan bukti linear probing bahwa representasi kode internal agen open-weight masih dominan bersifat leksikal satu-langkah.