<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Data Science Collective - Medium]]></title>
        <description><![CDATA[Advice, insights, and ideas from the Medium data science community - Medium]]></description>
        <link>https://medium.com/data-science-collective?source=rss----8993e01dcfd3---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Data Science Collective - Medium</title>
            <link>https://medium.com/data-science-collective?source=rss----8993e01dcfd3---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 27 May 2026 09:12:11 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/data-science-collective" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Survivorship Bias For Humans: How to Spot the Data That Isn’t There]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/survivorship-bias-for-humans-how-to-spot-the-data-that-isnt-there-973dff1a8a00?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/2600/0*uEeMbk3xf96hf9qW" width="4288"></a></p><p class="medium-feed-snippet">How the data you can&#x2019;t see affects everything you can</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/survivorship-bias-for-humans-how-to-spot-the-data-that-isnt-there-973dff1a8a00?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/survivorship-bias-for-humans-how-to-spot-the-data-that-isnt-there-973dff1a8a00?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/973dff1a8a00</guid>
            <category><![CDATA[finance]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[investing]]></category>
            <category><![CDATA[statistics]]></category>
            <category><![CDATA[data-analysis]]></category>
            <dc:creator><![CDATA[Kalle Georgiev]]></dc:creator>
            <pubDate>Tue, 26 May 2026 12:17:05 GMT</pubDate>
            <atom:updated>2026-05-26T12:17:04.235Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Evaluation Sets Have a Half-Life. Most Teams Pretend They Don’t.]]></title>
            <link>https://medium.com/data-science-collective/evaluation-sets-have-a-half-life-most-teams-pretend-they-dont-09eb07ffa94c?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/09eb07ffa94c</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[mlops]]></category>
            <dc:creator><![CDATA[Zenefa Rahaman, PhD]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:22:46 GMT</pubDate>
            <atom:updated>2026-05-25T11:22:45.322Z</atom:updated>
            <content:encoded><![CDATA[<h4>Why the benchmark you trusted six months ago measures yesterday’s problem — and what eval maintenance actually looks like.</h4><p>A familiar pattern shows up across production AI systems. A team builds an evaluation set during launch, validates the system against it, ships, and watches the dashboard hold steady for months. Then a production incident appears that the benchmark never caught.</p><p>The benchmark didn’t fail. It was measuring an earlier version of reality.</p><p>Evaluation sets are not abstract measurements. They are operational artifacts. They are artifacts — and artifacts age. They capture what failure looked like the day they were authored. Production failure modes don’t stand still.</p><p>What makes evaluation decay dangerous is that it’s silent. Dashboards remain green while production behavior drifts underneath them. The benchmark remains valid under the conditions it was authored under — and increasingly irrelevant to current ones.</p><p>This piece is about why evaluation sets decay, what they decay into, and what evaluation maintenance actually requires in production.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/468/1*ZpIzk-U0G91x2OVD1oXFXA.png" /><figcaption><em>Figure 1 — What the benchmark hides: pass rates stay flat while production failure modes grow underneath them. (Image created by author)</em></figcaption></figure><h4>KEY TAKEAWAYS</h4><ul><li>Evaluation sets decay structurally — not because they were authored poorly, but because the environment they were authored against changes continuously</li><li>Four mechanisms drive most evaluation decay: data drift, user adaptation, distribution shift in the world, and emergent failure modes</li><li>The most dangerous evaluation set is not the inaccurate one. It is the one that keeps passing while quietly losing coverage of current production failures</li><li>A useful diagnostic: when did your team last add a test case for a failure mode that did not exist when the eval was originally authored?</li><li>A passing benchmark is not evidence that the system is working. It is evidence that the system is working against yesterday’s questions.</li></ul><h3>WHY EVALUATION SETS FEEL PERMANENT WHEN THEY AREN’T</h3><p>Teams treat evaluation sets as fixed assets because evaluation creation usually happens as a discrete engineering project. During a launch sprint, someone authors a benchmark, samples representative examples, defines labels, validates scoring logic, and operationalizes reporting. The eval has a clear creation moment, a clear owner, and a visible engineering cost.</p><p>Once deployed, it quietly transitions into an assumed-correct state.</p><p>Over time, the benchmark stops being treated as one sample of reality and starts being treated as reality itself. Passing tests raises organizational confidence. Stable metrics become proxies for system reliability. Green dashboards acquire institutional authority.</p><p>But the deeper issue is structural: evaluation decay produces none of the signals teams are wired to act on. Latency spikes trigger pages. Services emit error codes. Pipelines fail loud assertions. Evaluation decay does none of these things. There is no automatic alert telling you that the benchmark itself is becoming outdated.</p><p>It simply keeps passing while production moves away from it.</p><p>The asymmetry is the real problem. Teams receive continuous reinforcement that the system is healthy precisely because the benchmark has stopped exercising the system against current production conditions.</p><blockquote><strong>The most dangerous evaluation set is the one that has been passing for six months.</strong></blockquote><h3>THE FOUR MECHANISMS OF EVALUATION DECAY</h3><h4>1. Data drift</h4><p>The most familiar decay mechanism is distribution drift in production inputs. The queries users send today are usually not the queries they sent six months ago. New customer segments arrive. Product launches create new interaction patterns. Business priorities shift. Workflows emerge organically through usage.</p><p>The evaluation set, meanwhile, samples a historical moment.</p><p>The gap between what the benchmark measures and what production actually experiences widens gradually enough that aggregate metrics conceal it.</p><p>Offline accuracy can hold steady while failure concentration grows in regions of the input space that the benchmark no longer represents.</p><p>This becomes acute in any system exposed to large-scale user interaction. Recommendation systems, retrieval systems, conversational interfaces, and agentic workflows all run on continuously evolving distributions. Static evaluation sets assume stability where none exists.</p><p>The subtle version is just as damaging: old inputs become overrepresented relative to current usage. Benchmarks accumulate historical assumptions about what “normal” usage looks like long after production has moved on. The longer an eval remains static, the more heavily it is weighted toward historical traffic relative to current production behavior</p><blockquote><strong>If you don’t refresh the eval against current production data, you are measuring a system against a customer base that no longer exists.</strong></blockquote><h4>2. User adaptation</h4><p>One of the most underappreciated decay mechanisms is behavioral adaptation by users themselves.</p><p>Users learn systems. They discover which prompts work, which workflows fail, which phrasing produces better outputs, and which interaction patterns get ignored. Over time, their behavior changes in response to what the system rewards and punishes. That adaptation fundamentally alters the population generating production inputs.</p><p>A conversational AI assistant may initially receive broad, exploratory prompts from inexperienced users. Six months later, experienced users may employ compressed, domain-specific shorthand that simply didn’t exist during launch evaluation. Recommendation system users may become increasingly strategic in how they interact with ranking systems, shifting click behavior, search behavior, and engagement patterns.</p><p>Internally, dashboards may appear unchanged. Aggregate metrics can remain stable while the underlying generating process evolves substantially. From inside the system, operational behavior looks continuous. From the outside, the population producing that behavior may have changed dramatically.</p><p>Most evaluation strategies implicitly assume stationary users. In practice, production users are dynamic participants who co-evolve with the system.</p><blockquote><strong>If you don’t account for user adaptation, your evaluation set is measuring how a system behaves against users who no longer exist.</strong></blockquote><h4>3. Distribution shift in the world</h4><p>Sometimes the production environment changes even when neither the users nor the model do. The world itself shifts.</p><p>Product catalogs evolve. Policies change. Terminology updates. Regulatory frameworks move. Knowledge bases are revised. Organizational structures change. Entire categories of information become obsolete or get redefined.</p><p>Evaluation cases authored against an earlier state of the world become factually incorrect over time. A retrieval pipeline evaluated against last year’s documentation fails because the underlying source documents changed. A customer support classifier routes correctly against historical policy definitions while misrouting against updated procedures. A recommendation system optimizes against outdated inventory assumptions.</p><p>Teams often discover the problem only after a customer reports an “obviously incorrect” answer that turns out to be correct relative to the older knowledge base the eval was authored against. The benchmark didn’t fail. It became stale.</p><p>This creates a versioning problem most teams handle poorly. Evaluation sets are usually versioned as datasets, but not versioned against the state of the world they assume. As a result, teams lose the ability to determine whether benchmark degradation reflects model failure or environmental change. Operationally, that distinction matters: one requires retraining or architectural change. The other requires evaluation and maintenance.</p><blockquote><strong>If you don’t version the eval against the state of the world it was authored under, you are measuring a system against a knowledge base that no longer reflects reality.</strong></blockquote><h3>4. Emergent failure modes</h3><p>The final decay mechanism is the most operationally dangerous: systems begin failing in entirely new ways.</p><p>The benchmark was authored when failure mode X existed. Since then, the model was upgraded, prompts were modified, routing logic changed, tools were added, orchestration policies evolved, or the architecture became more agentic and multi-step. Failure mode Y now exists instead. But Y is absent from the evaluation set.</p><p>This is particularly important in agentic systems, where architectural complexity continuously introduces new coordination failures, reasoning inconsistencies, state-management issues, and tool interaction errors.</p><p>Every modification to orchestration logic changes the space of possible failures — and benchmarks continue testing for historical failure patterns while production systems generate entirely new categories of behavior.</p><p>The result is a dangerous illusion of robustness. Regression tests pass because the benchmark still covers yesterday’s bugs extremely well. Meanwhile, new categories of failure emerge completely outside its observational boundary.</p><p>These compounds. Organizations tend to preserve old test cases indefinitely while adding a few new ones.</p><p>Over time, the benchmark transforms into an archive of historical incidents rather than an active defense against current production risk. In agentic architectures, evaluation decay accelerates because every new tool, routing layer, memory policy, or orchestration strategy expands the failure surface.</p><blockquote><strong>A benchmark that never gets new cases for new failure modes is not a defense against tomorrow’s bugs. It is an archive of yesterday’s.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/468/1*CfaT9H3H_o-3P3vkVDYMFg.png" /><figcaption><em>Figure 2 — Four mechanisms quietly erode the alignment between your eval set and production reality (Image created by author)</em></figcaption></figure><h3>A CONCRETE PRODUCTION SCENARIO</h3><p>Consider a customer-facing retrieval and classification system launched with a carefully constructed 500-case evaluation set. At launch, the benchmark looked comprehensive — known failure categories, representative customer queries, edge cases, escalation scenarios. Nothing in the dashboard indicated the benchmark itself had lost coverage.</p><p>Six months later, the benchmark still reports a stable 94% pass rate. Operational dashboards, therefore, suggest the system is healthy.</p><p>Meanwhile, customer support tickets have climbed steadily. Internal reviewers report degraded retrieval quality. Escalations involving incorrect routing are rising.</p><p>The numbers below are illustrative — designed to make the decay mechanisms concrete, not to benchmark any specific system. The shape of the audit, not the specific figures, is the point.</p><p>An audit against current production reveals three issues.</p><p>First, roughly 18% of the original evaluation cases are now stale. Some reference products that no longer exist. Other test workflows were deprecated during later platform releases. Several cases assume policy definitions superseded months earlier.</p><p>Second, approximately 12% of recent production failures involve user query patterns absent from the benchmark entirely. Users learned how to interact with the system in more compressed and domain-specific ways than the launch eval anticipated.</p><p>Third, the organization upgraded the underlying model three months earlier and added no evaluation cases targeting the new architecture’s failure characteristics. The benchmark is therefore measuring regression relative to historical behaviors rather than coverage of newly introduced risks.</p><p>The evaluation set is not broken. It is faithfully measuring the system that existed six months ago.</p><p>That distinction matters because many organizations interpret stable evaluation metrics as evidence that the production environment itself is stable. In reality, the benchmark may simply have lost enough overlap with current conditions that it can no longer detect modern failures.</p><blockquote><strong>The green dashboard isn’t evidence of reliability. It’s evidence of historical alignment between the benchmark and an earlier production state.</strong></blockquote><p><strong>QUICK DIAGNOSTIC</strong></p><p>If your team:</p><ul><li><em>hasn’t added new test cases to the evaluation set in the last month</em></li><li><em>can’t estimate how much of the eval still reflects current production</em></li><li><em>tracks the evaluation pass rate but not the evaluation coverage of recent production failures</em></li></ul><p><strong>The evaluation set is almost certainly decaying — and the green dashboard is probably hiding it.</strong></p><h3>WHAT EVALUATION MAINTENANCE ACTUALLY LOOKS LIKE</h3><p>The operational implication is straightforward: evaluation sets are production assets and must be maintained like production assets — with schedules, owners, versioning, and explicit workflows.</p><h4>Continuous sampling refresh</h4><p>At regular intervals — quarterly at minimum in most production systems — sample new cases directly from current production traffic. Incorporate them into the benchmark after review and labeling. Without a systematic refresh, the benchmark progressively diverges from actual usage.</p><h4>Coverage auditing</h4><p>Most teams know whether their eval is passing. <strong><em>Very few know whether their eval would have caught last month’s production failures. </em></strong>That is the only question that actually measures whether the eval is doing its job.</p><p>Tracking accuracy without tracking coverage is the central failure mode here. A passing eval that doesn’t cover current failures is producing organizational confidence that the system has not earned. Coverage, not accuracy, determines whether the evaluation infrastructure remains useful.</p><h4>Sunsetting obsolete cases</h4><p>Teams continuously add tests but rarely remove outdated ones. Over time, stale cases distort benchmark metrics toward historical conditions that no longer matter. Evaluation sets need periodic pruning, just like any other production dataset.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/468/1*HkeovlJyHmRe9sRVETLPMQ.png" /><figcaption><em>Figure 3 — A quarterly cycle that keeps the benchmark aligned with the system it claims to evaluate (Image created by author)</em></figcaption></figure><p>These processes imply a broader shift in mindset. Evaluation should not be treated as a static certification artifact completed during launch. It should be treated as a continuously evolving observability layer for production behavior — especially in systems involving user interaction, evolving knowledge environments, or rapidly changing architectures.</p><p>This is the same conversation as the cost piece, asked at the evaluation level. Evaluation overhead was the fifth category in that cost taxonomy. The work described here is what that category actually buys you.</p><blockquote><strong>An evaluation set that doesn’t change is an evaluation set that has stopped working.</strong></blockquote><h3>WHEN STATIC EVALUATIONS ARE ACTUALLY FINE</h3><p>Static evaluations measure models. Living evaluations measure systems operating in production. Most organizations need both — and currently maintain only one.</p><p>Not every benchmark requires continuous refresh. Some evaluation tasks are genuinely stable and benefit from static datasets. Mathematical reasoning benchmarks, code correctness suites, and fixed factual datasets with durable answers can function effectively as long-lived regression tests. In those contexts, the goal is to measure model capabilities rather than production adaptation.</p><p>Some evaluation suites are explicitly designed to detect regressions under controlled conditions. Their value derives precisely from being stable over time.</p><p>The distinction isn’t whether static evaluation is inherently flawed. The distinction is what the evaluation is meant to measure. Static evaluations work well when the task is fixed, the underlying concepts are stable, and the objective is controlled capability comparison.</p><p>Living evaluations are necessary when users interact continuously with the system, the environment changes, or the architecture itself evolves.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/468/1*FvBtP-oaEiqLzgLJQLj_uQ.png" /><figcaption><em>Figure 4 — Two kinds of evaluation, both necessary. Most organizations need both. Most currently maintain only one. (Image created by author)</em></figcaption></figure><h3>FINAL THOUGHT</h3><p>Evaluation sets are usually discussed as though they are objective measurements. In practice, they are historical artifacts created under specific assumptions about users, environments, architectures, and failure modes. Those assumptions age.</p><p>The organizations that recognize this early treat evaluation maintenance as continuous engineering work rather than a one-time setup. They refresh cases, audit coverage, version assumptions, and retire obsolete tests. Most importantly, they understand that stable benchmark metrics do not imply stable production systems.</p><p>The organizations that fail to recognize this usually find out through production incidents.</p><p>A passing benchmark tells you the system has not regressed against yesterday’s questions. It tells you almost nothing about whether the system is working today.</p><blockquote><strong>The benchmark stayed green because the benchmark stopped looking at where the failures moved</strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=09eb07ffa94c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/evaluation-sets-have-a-half-life-most-teams-pretend-they-dont-09eb07ffa94c">Evaluation Sets Have a Half-Life. Most Teams Pretend They Don’t.</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Memory Wall Is Strangling Your LLM: Why GPUs Are Faster Than You Think and Slower Than You Need]]></title>
            <link>https://medium.com/data-science-collective/the-memory-wall-is-strangling-your-llm-why-gpus-are-faster-than-you-think-and-slower-than-you-need-cfaf28226e06?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/cfaf28226e06</guid>
            <category><![CDATA[large-language-models]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Feroz Khan]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:22:27 GMT</pubDate>
            <atom:updated>2026-05-25T11:22:26.561Z</atom:updated>
            <content:encoded><![CDATA[<h3>The Memory Wall Is Strangling Your LLM: Why GPUs Are Faster Than We Think and Slower Than We Need</h3><p>There is a number that should bother anyone who has spent time thinking seriously about LLM inference: <strong>62,000 tokens per second</strong>.</p><p>That’s the theoretical throughput ceiling for an 8B-parameter model running on a single NVIDIA H100 GPU. You can derive it purely from the chip’s peak compute capacity of one quadrillion floating-point operations per second (1 petaFLOP/s). It’s the number you would include in a slide deck if you wanted to sound optimistic about AI infrastructure.</p><p>The actual number, across virtually every production inference engine in use today, sits somewhere between 100 and 300 tokens per second.</p><p>That’s a 200x gap between theory and reality. And it’s not a software bug, a framework inefficiency, or a failure of engineering ambition. It’s a structural property of how modern hardware is built and closing that gap is one of the more interesting systems problems in AI right now.</p><h3>The Compute Illusion</h3><p>Modern GPUs are genuinely extraordinary compute engines. The H100’s tensor cores can perform matrix multiplications at a rate that would have seemed impossible a decade ago. If inference throughput were purely a function of arithmetic throughput, we would be living in a very different world, one where latency was effectively free, and model serving was a solved problem.</p><p>But inference throughput is not a function of arithmetic throughput. It’s a function of <em>memory bandwidth. </em>Specifically, the rate at which a GPU can transfer data between its high-bandwidth memory (HBM) and its on-chip compute units. And that number, while impressive in absolute terms (3.35 TB/s on the H100), is nowhere near sufficient to keep those tensor cores fed.</p><p>To understand why, you need to think carefully about what actually happens during autoregressive decoding.</p><h3>What Decoding Actually Costs</h3><p>An LLM with 8 billion parameters, stored in 16-bit precision, occupies roughly 16 GB of memory. During inference, generating each new token requires a full forward pass through the model. That means every single set of weights (all 16 GB of them) must travel from HBM to the on-chip SRAM and into the processor registers, get used for a matrix multiplication, and then be discarded to make room for the next layer’s weights.</p><p>This isn’t a one-time cost. It happens <em>for every token generated</em>.</p><p>If you want to generate a 1,000-token response, you need 1,000 complete weight transfers. With 3.35 TB/s of bandwidth and 16 GB of weights per transfer, the math is almost embarrassingly direct: you can afford roughly 200 transfers per second, giving you approximately 200 tokens per second (3350 GB/s divided by 16 GB, assuming compute time is negligible). The compute units, capable of 1,000 TFLOP/s, are sitting idle for most of this time, waiting for data to arrive.</p><p>This is the memory wall, which is not a new concept (Williams et al. described the roofline model formally in 2009 [1]), but newly relevant in a way that’s defining the economics of AI infrastructure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*mv65oCodOVrXWrT7Q8E9fg.jpeg" /><figcaption>Memory Wall showing gap between GPU computation speeds and IO speeds. Made by author using Excalidraw</figcaption></figure><h3>The Memory Hierarchy Problem</h3><p>To appreciate why this is hard to fix, it helps to understand the structure of GPU memory.</p><p>At the innermost level are <strong>registers, </strong>which are tiny, blindingly fast memory directly accessible to execution units. These hold the immediate operands of whatever operation is running. Above that is <strong>SRAM</strong> (static RAM), the on-chip cache. The H100 has about 50 MB of L2 cache. It’s fast, low-latency, and manufactured directly on the chip, which is why it is expensive and scarce.</p><p>Then there’s <strong>HBM</strong> (high-bandwidth memory). This is what people mean when they say “GPU memory.” The H100 ships with 80 GB of HBM3, using a stacked die architecture that trades some latency for dramatically higher capacity. HBM is where <strong>model weights</strong> live.</p><p>The problem is that 50 MB of SRAM cannot hold a model with billions of parameters. So weights must be continuously streamed from HBM into the cache and registers on demand, layer by layer, as computation proceeds. The bandwidth of this HBM-to-SRAM path is the bottleneck.</p><p>Compute hardware has improved at roughly Moore’s Law pace over the past few decades. Memory bandwidth has improved much more slowly. This divergence, which is sometimes called the <em>memory bandwidth gap</em> , is what makes LLM inference structurally difficult.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m1Fj3HmgyZdyIy1AaoTxHg.jpeg" /><figcaption>Data flow between a GPU, On-chip SRAM, and High Bandwidth Memory. Made by author using Excalidraw</figcaption></figure><h3>The Roofline Model: A Framework for Thinking About Bottlenecks</h3><p>The roofline model [1] gives us a clean way to reason about where inference algorithms fall in the compute-vs-memory spectrum.</p><p>The key metric is <strong>arithmetic intensity. </strong>It’s the ratio of floating-point operations to bytes of memory transferred, measured in FLOPs per byte. If you perform a lot of computation per byte read from memory, your arithmetic intensity is high; if you read a lot of bytes but do little with each one, it’s low.</p><p>On a roofline plot, the x-axis represents arithmetic intensity and the y-axis represents achieved performance (FLOPs/s). The relationship is linear up to a ridge point: performance scales with arithmetic intensity times memory bandwidth. Beyond the ridge point, the limiting factor is no longer memory bandwidth but raw compute throughput. You have crossed into the compute-bound region.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fTaJE39mo4qv8TfjPOGPfw.jpeg" /><figcaption>Example roofline plot showing encoder and decoder stages. Made on by author on their iPad</figcaption></figure><p>Autoregressive decoding sits far to the left of the ridge point. Each weight byte is read from HBM and used for a small number of multiplications before being evicted. The arithmetic intensity is low, which means the memory bandwidth slope dominates, and the processor is underutilized.</p><p>What’s interesting is that not all LLM inference stages are equal here. The <strong>prefill</strong> (encoder) stage, where the model processes the input prompt to generate attention-based dense embeddings, is actually compute-bound. Because all prompt tokens are available simultaneously, the Transformer can process them in parallel through a single forward pass. For a prompt of N tokens, you get N token-equivalents of computation from a single model stream. Arithmetic intensity scales linearly with sequence length. For prompts of hundreds or thousands of tokens, prefill easily crosses the ridge point.</p><p><strong>Decode</strong> has no such luxury. Each new token requires its own forward pass, so the ratio of output tokens to model streams is always 1:1. Arithmetic intensity stays constant regardless of response length, and it stays low. Decode is almost always memory-bound.</p><p>This asymmetry between encoder and decoder is a structural property of autoregressive generation, not an engineering oversight.</p><h3>KV Caching: Necessary but Costly</h3><p>One optimization that every serious inference framework implements is the KV cache. In Transformer attention, computing the attention scores for a new token requires access to the keys and values produced by every <em>previous</em> token. Rather than recomputing these from scratch each step (which would require re-running all prior tokens through the model), inference engines cache them in HBM.</p><p>The KV cache is essential for making autoregressive inference tractable. Without it, the computational cost would scale quadratically, O(N²), with sequence length N. With it, each decoding step is relatively cheap in FLOPs, but the cache itself must be stored and streamed alongside the model weights.</p><p>The problem is that KV cache memory scales with inference batch size (processing multiple queries at inference) times sequence length times model depth (number of parameters). As batches grow larger and sequences get longer, the KV cache consumes an increasing share of HBM. This limits how much you can amortize the weight-streaming cost across multiple queries, which brings us to the tension at the heart of batched inference.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7-hujr2Z-VTicsxnzyvMqQ.jpeg" /><figcaption>LLM batch inference pipeline and memory architecture. Made on Excalidraw by author.</figcaption></figure><p>Batching is the most obvious lever for improving arithmetic intensity during decode. If you process 64 queries simultaneously, a single model stream extends 64 responses. This means the numerator of your arithmetic intensity ratio grows while the denominator stays fixed. But as you increase batch size, the KV cache grows proportionally, eating into the HBM capacity that you would otherwise use for larger batches. Eventually, KV cache pressure becomes the binding constraint.</p><p><strong>vLLM</strong> addressed part of this with PagedAttention [2], where it borrowed ideas from operating system virtual memory to manage KV cache blocks non-contiguously. This reduces fragmentation and allows HBM to be used more efficiently, effectively enabling larger effective batch sizes. <strong>TensorRT-LLM</strong> provides fused kernels and multi-head attention optimizations that reduce per-token overhead.</p><p>These are meaningful wins. But they are all operating within the same fundamental constraint: a memory-bound regime where the limiting factor is how fast you can push bytes from HBM to compute.</p><h3>Speculative Decoding: Buying Compute-Bound Behavior Through Architecture</h3><p>Speculative decoding [4] is a cleverer approach. The core insight is that if you can predict the next several tokens cheaply, you can verify them all at once with the large model, amortizing one expensive forward pass across multiple tokens.</p><p>In practice, this means running a small <em>draft model</em> (sometimes as small as a few hundred million parameters) for several steps to generate candidate token sequences. The large <em>verifier model</em> then processes the entire drafted sequence in a single forward pass (similar to an encoder where multiple tokens are handled simultaneously), and either accepts or rejects each draft token using a carefully designed acceptance criterion that preserves the target distribution [4].</p><p>When the draft model is well-chosen and achieves high acceptance rates, speculative decoding effectively reduces the number of large model forward passes per output token, pushing the system toward higher arithmetic intensity. The verifier starts behaving more like a compute-bound workload.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xTXU23K-dR760_z8YRPPag.jpeg" /><figcaption>Smaller ‘Draft LLM’ generates multiple potential tokens that are then validated by a larger ‘Verifier LLM’ in a single forward pass.</figcaption></figure><p>The challenge is calibrating the draft model. Too large, and it loses its speed advantage over the verifier. Too small, and acceptance rates collapse and you end up doing more total work than naive decoding. The acceptance rate is also sensitive to temperature, prompt distribution, and draft length. In practice, speculative decoding requires tuning and does not deliver consistent speedups across all task types.</p><p>There are variations worth noting: self-speculative decoding [5] uses early exit layers of the same model as the draft mechanism, avoiding the need for a separate model entirely. Lookahead decoding [6] uses n-gram speculation derived from the input. These methods trade generality for deployment simplicity.</p><h3>Diffusion LLMs: A Structural Escape from Memory Bounds</h3><p>Speculative decoding is fundamentally a patch on an autoregressive paradigm. The real question is whether the paradigm itself can be changed.</p><p>Diffusion language models [7][8] represent the most structurally distinct alternative currently in serious development. Rather than generating tokens left-to-right, one at a time, diffusion models operate on the entire output sequence simultaneously. They start with a fully masked or noisy sequence and iteratively refine it across multiple denoising steps until a coherent response emerges.</p><p>From an arithmetic intensity perspective, this is a meaningful shift. During each denoising iteration, the model performs <strong>a</strong> <strong>forward pass that updates <em>every token in the context window,</em></strong> not just one. With a context window of length L, a single model stream contributes L token-update operations instead of one. Arithmetic intensity scales with context length, which is the opposite of autoregressive decoding.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pqmp3aKAofpmxpC3WKyfNw.jpeg" /><figcaption>Contrasting generation processes of Auto-Regressive LLMs and Diffusion LLMs. Made by author on Excalidraw.</figcaption></figure><p>For typical response lengths of several hundred to a few thousand tokens, this pushes diffusion models well into compute-bound territory on the roofline. The compute units are no longer waiting for weights to arrive; they are processing operations as fast as the HBM can feed them and often the HBM isn’t the bottleneck at all.</p><p>This is the theoretical appeal of diffusion for inference. But theory and practice diverge here in important ways.</p><h3>The Problems with Naive Diffusion</h3><p>Early diffusion LLMs like LLaDA [8] were often <em>slower</em> than their autoregressive counterparts in wall-clock time. Being compute-bound sounds good until you remember that being compute-bound with wasted computations is not the same as being efficient.</p><p>The central waste in vanilla diffusion is that most refinement steps don’t actually update most tokens meaningfully. Empirically, at any given step, the model is highly confident about perhaps 10% of positions. The rest are ambiguous because multiple valid tokens could occupy those slots. Yet the model dutifully computes updates for all positions, burning FLOPs on outputs it’s uncertain about and will likely revise in subsequent steps.</p><p>A separate problem is context window sizing. Standard diffusion allocates a fixed context window, often several thousand tokens, for every query, regardless of whether the response will be three tokens or three thousand. Generating a yes/no answer through a 2048-token diffusion window is wildly inefficient.</p><p>Adaptive context window techniques address this by starting small (64 tokens) and extending the window dynamically based on the probability mass assigned to the end-of-sequence token at each position. When the model starts placing high probability on EOS across the current window, it locks in the response length and continues refining. This prevents the system from over-allocating computation for short responses.</p><h3>Block Diffusion: The Hybrid Architecture</h3><p>The most promising current direction is <strong>block diffusion</strong> [9]. It’s a hybrid that <em>combines the throughput advantages of diffusion with autoregressive models.</em></p><p>The idea is straightforward: partition the output into fixed-size blocks. Within each block, tokens are decoded using diffusion (all positions refined simultaneously). Across blocks, generation proceeds autoregressively, where each block conditions on all previous blocks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yaUlO66m8Fkk278AUF4KKA.jpeg" /><figcaption>Block Diffusion illustration. Made on Excalidraw by author.</figcaption></figure><p>This structure recovers two important properties that vanilla diffusion sacrifices. First, early stopping becomes possible: once any block generates an end-of-sequence &lt;EOS&gt; token, generation terminates without diffusing subsequent blocks. For short responses, this prevents the fixed-iteration overhead that makes vanilla diffusion slow. Second, autoregressive block ordering means you can apply KV caching across blocks. The KV states from completed blocks are cached and reused exactly as in standard transformer inference.</p><p>Block diffusion also keeps the system in the compute-bound region within each block (because the diffusion over block-length sequences is still high arithmetic intensity), while recovering the operational efficiency of standard inference frameworks. Most optimizations developed for autoregressive inference like speculative decoding, paged attention, continuous batching, etc., can be grafted onto block diffusion without significant rearchitecting.</p><p>From a systems perspective, block diffusion feels like where the field is converging. It’s the first architecture that seriously addresses <em>both</em> the memory bandwidth problem (via high arithmetic intensity within blocks) and the wasted computation problem (via adaptive stopping and KV caching across blocks).</p><h3>What This Means for Inference Economics</h3><p>Today, inference costs are dominated by compute time, and compute time is dominated by the memory-bandwidth ceiling during decode. GPU utilization for inference is structurally low compared to training. This means you are paying for peak FLOP/s hardware but using a small fraction of it productively. The cost per token is higher than it needs to be, and latency is harder to reduce than the raw hardware specs suggest.</p><p>Architectures that shift workloads toward the compute-bound regime, whether through batching, speculative decoding, diffusion, or block diffusion, directly reduce cost per token by making better use of silicon that’s already paid for.</p><p>There’s also a latency angle. For interactive applications, time-to-first-token matters enormously. Prefill is fast because it’s compute-bound. Decode is slow because it’s memory-bound. Any architectural change that collapses the distinction between prefill and decode, either by batching tokens into chunks (speculative decoding) or processing all output tokens simultaneously (diffusion), has the potential to flatten the latency curve.</p><p>Looking further out, specialized inference hardware is already emerging in response to these dynamics. Chips designed with higher HBM-to-compute ratios, or with processing-in-memory architectures that reduce the HBM-to-chip transfer distance, could shift the ridge point substantially.</p><h3>Closing Thoughts</h3><p>The 200x gap between theoretical and realized token throughput is not going away through incremental improvements to existing infrastructure. It reflects a structural mismatch between the compute capabilities of modern accelerators and the memory access patterns demanded by autoregressive generation.</p><p>What’s interesting about the current moment is that solutions are emerging simultaneously at every level of the stack. At the systems level: paged attention, continuous batching, prefix caching, quantization [10]. At the algorithm level: speculative decoding, lookahead methods. At the architecture level: diffusion LLMs, block diffusion, mixture-of-experts with sparse activation.</p><p>None of these is sufficient on its own. The future of inference efficiency is probably a layered combination: block diffusion architectures served by inference engines that apply KV caching and speculative block proposals, running on hardware designed with memory-bandwidth as the primary optimization target.</p><p>The memory wall has been a known problem in high-performance computing for a long time before LLMs existed. What’s new is that language model inference has made it a first-order economic problem, one where solving it translates directly into cheaper, faster AI for everyone building on top of it.</p><p>That’s a different kind of pressure than academic interest. And it tends to produce results.</p><h3>References</h3><p>[1] Williams, S., Waterman, A., &amp; Patterson, D. (2009). Roofline: An insightful visual performance model for multicore architectures. <em>Communications of the ACM, 52</em>(4), 65–76.</p><p>[2] Kwon, W., et al. (2023). Efficient memory management for large language model serving with PagedAttention. <em>Proceedings of the ACM SIGOPS 29th Symposium on Operating Systems Principles.</em></p><p>[3] Zheng, L., et al. (2024). SGLang: Efficient execution of structured language model programs. <em>Advances in Neural Information Processing Systems 37 (NeurIPS 2024).</em></p><p>[4] Leviathan, Y., Kalman, M., &amp; Matias, Y. (2023). Fast inference from transformers via speculative decoding. <em>International Conference on Machine Learning (ICML).</em></p><p>[5] Zhang, J., et al. (2024). Draft &amp; verify: Lossless large language model acceleration via self-speculative decoding. <em>Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (ACL 2024).</em></p><p>[6] Fu, Y., Bailis, P., Stoica, I., &amp; Zhang, H. (2024). Break the sequential dependency of LLM inference using Lookahead decoding. <em>arXiv preprint arXiv:2402.02057.</em></p><p>[7] Austin, J., Johnson, D. D., Ho, J., Tarlow, D., &amp; van den Berg, R. (2021). Structured denoising diffusion models in discrete state-spaces. <em>NeurIPS 2021.</em></p><p>[8] Nie, S., Zhu, F., You, Z., Zhang, X., Ou, J., Hu, J., Zhou, J., Lin, Y., Wen, J.-R., &amp; Li, C. (2025). Large language diffusion models (LLaDA). <em>arXiv:2502.09992.</em></p><p>[10] Arriola, M., et al. (2025). Block diffusion: Interpolating between autoregressive and diffusion language models. <em>ICLR 2025 (Oral). arXiv:2503.09573.</em></p><p>[11] Dettmers, T., Lewis, M., Belkada, Y., &amp; Zettlemoyer, L. (2022). LLM.int8(): 8-bit matrix multiplication for transformers at scale. <em>NeurIPS 2022.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cfaf28226e06" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/the-memory-wall-is-strangling-your-llm-why-gpus-are-faster-than-you-think-and-slower-than-you-need-cfaf28226e06">The Memory Wall Is Strangling Your LLM: Why GPUs Are Faster Than You Think and Slower Than You Need</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MCP vs Function Calling: Which Is Better for AI Agents]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/mcp-vs-function-calling-how-should-your-agent-communicate-with-the-outside-world-8a5e15ec89ac?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/1210/1*q_2s4amUufYN9-No5T7z2A.png" width="1210"></a></p><p class="medium-feed-snippet">Tools are an AI agent&apos;s window to the real world. Without them, the agent would be restricted to what it already knows.</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/mcp-vs-function-calling-how-should-your-agent-communicate-with-the-outside-world-8a5e15ec89ac?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/mcp-vs-function-calling-how-should-your-agent-communicate-with-the-outside-world-8a5e15ec89ac?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/8a5e15ec89ac</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[mcps]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[llm-function-calling]]></category>
            <dc:creator><![CDATA[Alan Jones]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:22:09 GMT</pubDate>
            <atom:updated>2026-05-26T14:55:12.459Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[What Is Data Integration? A Complete Guide for 2026]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/what-is-data-integration-a-complete-guide-for-2026-3f688f9cf7e5?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/1024/1*zCH1x-jK9Q0Nie3ixMOvrg.png" width="1024"></a></p><p class="medium-feed-snippet">Your data is everywhere. That&#x2019;s the problem. Here&#x2019;s how smart teams are finally solving it.</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/what-is-data-integration-a-complete-guide-for-2026-3f688f9cf7e5?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/what-is-data-integration-a-complete-guide-for-2026-3f688f9cf7e5?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/3f688f9cf7e5</guid>
            <category><![CDATA[data-pipeline]]></category>
            <category><![CDATA[etl-pipeline]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-integration]]></category>
            <category><![CDATA[data-engineering]]></category>
            <dc:creator><![CDATA[Saurav Singh]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:21:53 GMT</pubDate>
            <atom:updated>2026-05-25T11:21:51.883Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[OpenAI, Grafana, and Half of France Were Breached the Same Way This Month and Here Is Why]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/openai-grafana-and-half-of-france-were-breached-the-same-way-this-month-and-here-is-why-1fe31ea8db78?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/2600/0*oSXLgWgJbsI8_lqH" width="2927"></a></p><p class="medium-feed-snippet">The npm supply chain worm and your AI agent turned out to be the same attack</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/openai-grafana-and-half-of-france-were-breached-the-same-way-this-month-and-here-is-why-1fe31ea8db78?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/openai-grafana-and-half-of-france-were-breached-the-same-way-this-month-and-here-is-why-1fe31ea8db78?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/1fe31ea8db78</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <dc:creator><![CDATA[Han HELOIR YAN, Ph.D. ☕️]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:21:18 GMT</pubDate>
            <atom:updated>2026-05-25T11:21:16.961Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[A Qwen 3.5 122B LLM on a 16 GB Mac mini: MoE Expert Streaming with TurboQuant-MLX]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/a-qwen-3-6-122b-llm-on-a-16-gb-mac-mini-moe-expert-streaming-with-turboquant-mlx-4f77f0b48518?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/2600/1*t2vK2PwQnR2MMpUP2K8Ryw.jpeg" width="2752"></a></p><p class="medium-feed-snippet">Per-expert disk streaming runs a 122-billion-parameter Mixture-of-Experts model &#x2014; 3&#xD7; bigger than RAM &#x2014; on the cheapest Mac Apple sells&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/a-qwen-3-6-122b-llm-on-a-16-gb-mac-mini-moe-expert-streaming-with-turboquant-mlx-4f77f0b48518?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/a-qwen-3-6-122b-llm-on-a-16-gb-mac-mini-moe-expert-streaming-with-turboquant-mlx-4f77f0b48518?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/4f77f0b48518</guid>
            <category><![CDATA[turbo-quant]]></category>
            <category><![CDATA[mac-mini]]></category>
            <category><![CDATA[mlx]]></category>
            <category><![CDATA[qwen]]></category>
            <dc:creator><![CDATA[Manjunath Janardhan]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:20:49 GMT</pubDate>
            <atom:updated>2026-05-25T11:20:47.905Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Securing Fabric Data Agents Where It Matters: Row-Level Security Behind Natural Language Answers]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/securing-fabric-data-agents-where-it-matters-row-level-security-behind-natural-language-answers-4734c2346f4d?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/1536/1*JROG8Y0l3X-xM4OGusx48g.png" width="1536"></a></p><p class="medium-feed-snippet">Why Fabric Data Agent security shouldn&#x2019;t live in the prompt, and how SQL Row-Level Security works across users</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/securing-fabric-data-agents-where-it-matters-row-level-security-behind-natural-language-answers-4734c2346f4d?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/securing-fabric-data-agents-where-it-matters-row-level-security-behind-natural-language-answers-4734c2346f4d?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/4734c2346f4d</guid>
            <category><![CDATA[data-security]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[sql-server]]></category>
            <category><![CDATA[azure-sql-database]]></category>
            <category><![CDATA[microsoft-fabric]]></category>
            <dc:creator><![CDATA[Luca Zavarella]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:18:49 GMT</pubDate>
            <atom:updated>2026-05-25T11:18:47.801Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Let them compete! kWTA Ensemble Neural Network]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/let-them-compete-kwta-ensemble-neural-network-7e9f02a85dab?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/1280/0*YkKXUb149xkuRLrp.jpg" width="1280"></a></p><p class="medium-feed-snippet">An accompanying article for the paper &#x201C;k-Winners-Take-All Ensemble Neural Network&#x201D; by A.F. Agarap and A.P. Azcarraga presented at the 2021&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/let-them-compete-kwta-ensemble-neural-network-7e9f02a85dab?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/let-them-compete-kwta-ensemble-neural-network-7e9f02a85dab?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/7e9f02a85dab</guid>
            <category><![CDATA[ensemble-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[mixture-of-experts]]></category>
            <category><![CDATA[neural-networks]]></category>
            <dc:creator><![CDATA[Abien Fred Agarap]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:18:37 GMT</pubDate>
            <atom:updated>2026-05-25T11:18:36.742Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-nd/4.0/</cc:license>
        </item>
        <item>
            <title><![CDATA[Autonomous AI Agents Are Redefining Data Workflows: The Rise of Self-Optimizing Analytic Pipelines]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/autonomous-ai-agents-are-redefining-data-workflows-the-rise-of-self-optimizing-analytic-pipelines-d2d33d4df3a7?source=rss----8993e01dcfd3---4"><img src="https://cdn-images-1.medium.com/max/1248/1*epEWAyY882aTQ_-j_OeAcQ.jpeg" width="1248"></a></p><p class="medium-feed-snippet">In May 2026, the biggest shift in data work isn&#x2019;t about choosing between tools. It&#x2019;s about replacing the question &#x201C;what should I do with&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/autonomous-ai-agents-are-redefining-data-workflows-the-rise-of-self-optimizing-analytic-pipelines-d2d33d4df3a7?source=rss----8993e01dcfd3---4">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/autonomous-ai-agents-are-redefining-data-workflows-the-rise-of-self-optimizing-analytic-pipelines-d2d33d4df3a7?source=rss----8993e01dcfd3---4</link>
            <guid isPermaLink="false">https://medium.com/p/d2d33d4df3a7</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[power-bi]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[ai-governance]]></category>
            <category><![CDATA[analytics]]></category>
            <dc:creator><![CDATA[Aasir Waseer]]></dc:creator>
            <pubDate>Mon, 25 May 2026 11:18:30 GMT</pubDate>
            <atom:updated>2026-05-25T11:18:28.889Z</atom:updated>
        </item>
    </channel>
</rss>