<?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"><channel><title><![CDATA[Vedant Jadhav - AI Engineering & Research]]></title><description><![CDATA[Vedant Jadhav - AI Engineering & Research]]></description><link>https://vedantjadhav.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ac1571c2f887bdaf6200d2d/c6f4eae5-7188-4b4d-a746-c6b0f730da88.svg</url><title>Vedant Jadhav - AI Engineering &amp; Research</title><link>https://vedantjadhav.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 10:12:51 GMT</lastBuildDate><atom:link href="https://vedantjadhav.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What 57 LLM Benchmark Runs on an AMD Instinct MI300X Taught Me About VRAM, Throughput, and Quantization]]></title><description><![CDATA[How much VRAM does a model actually need?
How does model size affect generation speed?
Does quantization always reduce memory?
Does lower precision always make inference faster?
I wanted to answer the]]></description><link>https://vedantjadhav.hashnode.dev/amd-llm-lab</link><guid isPermaLink="true">https://vedantjadhav.hashnode.dev/amd-llm-lab</guid><category><![CDATA[AI]]></category><category><![CDATA[llm]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[machine learning models]]></category><category><![CDATA[Machine Learning algorithm]]></category><category><![CDATA[ROCm]]></category><category><![CDATA[GPU]]></category><category><![CDATA[AMD MI300X]]></category><category><![CDATA[amd]]></category><category><![CDATA[AMD processor]]></category><dc:creator><![CDATA[Vedant Jadhav]]></dc:creator><pubDate>Sat, 03 Oct 2026 19:48:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ac1571c2f887bdaf6200d2d/550e749b-b630-4261-bbed-9aab7fd72ad7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>How much VRAM does a model actually need?</p>
<p>How does model size affect generation speed?</p>
<p>Does quantization always reduce memory?</p>
<p>Does lower precision always make inference faster?</p>
<p>I wanted to answer these questions using measured data rather than relying only on theoretical parameter-count calculations.</p>
<p>That led me to build <strong>AMD LLM Lab</strong>, an open-source research platform for benchmarking and modeling LLM inference performance.</p>
<p><strong>Live Lab:</strong> <a href="https://amd-llm-lab.vercel.app/">https://amd-llm-lab.vercel.app/</a></p>
<p><strong>GitHub:</strong> <a href="https://github.com/VedantJadhav701/AMD%5C_LLM%5C_LAB">https://github.com/VedantJadhav701/AMD\_LLM\_LAB</a></p>
<hr />
<h2>The Experiment</h2>
<p>The benchmark environment was an <strong>AMD Instinct MI300X</strong> with approximately <strong>192 GB of GPU memory</strong>, running the ROCm software stack.</p>
<p>I benchmarked multiple Qwen2.5 model sizes and different precision configurations, measuring:</p>
<ul>
<li><p>Peak GPU memory</p>
</li>
<li><p>Generation throughput</p>
</li>
<li><p>Model size</p>
</li>
<li><p>Precision</p>
</li>
<li><p>Quantization configuration</p>
</li>
<li><p>Context length</p>
</li>
<li><p>Inference backend</p>
</li>
</ul>
<p>The resulting dataset contains <strong>57 measured configurations</strong>.</p>
<p>The model sizes ranged from <strong>0.5B → 1.5B → 3B → 7B → 14B → 32B</strong>.</p>
<p>The benchmark included configurations using <strong>BF16, FP16, INT8, INT4 and INT2</strong>, with context lengths from <strong>512 to 8192 tokens</strong>.</p>
<p>The goal wasn't simply to find the fastest configuration. It was to understand the relationship between <strong>model size, memory, precision and inference throughput</strong>.</p>
<hr />
<h2>Why Parameter Count Isn't Enough</h2>
<p>A common way to estimate whether a model will fit into GPU memory is:</p>
<pre><code class="language-text">Parameters × Bytes per Parameter
</code></pre>
<p>For example, a 7B model in FP16 requires roughly:</p>
<pre><code class="language-text">7 billion × 2 bytes
≈ 14 GB
</code></pre>
<p>But that isn't the complete inference memory requirement.</p>
<p>Actual inference can also involve:</p>
<ul>
<li><p>KV cache</p>
</li>
<li><p>Activations</p>
</li>
<li><p>Runtime allocations</p>
</li>
<li><p>Framework overhead</p>
</li>
<li><p>ROCm allocator behavior</p>
</li>
<li><p>Context length</p>
</li>
<li><p>Quantization implementation</p>
</li>
</ul>
<p>So two configurations with the same number of parameters can behave differently in practice.</p>
<p>That's why I wanted to measure actual inference behavior.</p>
<hr />
<h2>What I Measured</h2>
<p>For every benchmark configuration, I collected runtime characteristics and stored them in a structured dataset.</p>
<h3>Peak VRAM</h3>
<p>The maximum GPU memory allocated during inference.</p>
<h3>Generation Throughput</h3>
<p>Measured in:</p>
<pre><code class="language-text">tokens / second
</code></pre>
<h3>Context Length</h3>
<p>The benchmark covered:</p>
<pre><code class="language-text">512
1024
2048
4096
8192
</code></pre>
<p>This allowed me to investigate both model scaling and context effects.</p>
<hr />
<h2>Model Scaling</h2>
<p>One of the clearest patterns was the relationship between model size and memory consumption.</p>
<p>As model size increased, peak VRAM generally increased as well.</p>
<p>Across the benchmark dataset, measured peak VRAM ranged from approximately:</p>
<blockquote>
<p><strong>4.20 GB → 68.77 GB</strong></p>
</blockquote>
<p>Measured generation throughput ranged from approximately:</p>
<blockquote>
<p><strong>4.27 → 78.32 tokens/sec</strong></p>
</blockquote>
<p>This gave me two different dimensions to analyze:</p>
<pre><code class="language-text">Model size
     ↓
VRAM requirement

Model size
     ↓
Generation throughput
</code></pre>
<p>A configuration can therefore fit comfortably in memory while still being relatively slow.</p>
<hr />
<h2>Quantization Was More Interesting Than Expected</h2>
<p>One of the questions I wanted to investigate was whether lower-bit quantization always produces better inference characteristics.</p>
<p>The intuitive assumption is:</p>
<pre><code class="language-text">FP16
 ↓
INT8
 ↓
INT4
 ↓
INT2

Lower precision
      ↓
Less memory
      ↓
Faster inference
</code></pre>
<p>The measurements did not support such a simple rule.</p>
<p>In the tested environment, some lower-bit configurations reduced memory while also substantially reducing generation throughput.</p>
<p>This means that <strong>quantization is not simply a memory optimization problem</strong>.</p>
<p>Its behavior depends on factors such as:</p>
<ul>
<li><p>Quantization method</p>
</li>
<li><p>Backend</p>
</li>
<li><p>Model architecture</p>
</li>
<li><p>Kernel implementation</p>
</li>
<li><p>Hardware</p>
</li>
<li><p>Precision</p>
</li>
<li><p>Runtime</p>
</li>
</ul>
<p>This is one of the reasons empirical benchmarking is useful.</p>
<hr />
<h2>From Benchmarking to Prediction</h2>
<p>Once I had the measured dataset, I wanted AMD LLM Lab to do something more useful than display benchmark tables.</p>
<p>The next question became:</p>
<blockquote>
<p><strong>What happens when a user selects a configuration that hasn't been directly benchmarked?</strong></p>
</blockquote>
<p>For example:</p>
<pre><code class="language-text">Model:       Qwen2.5 7B
Precision:   FP16
Context:     4096
</code></pre>
<p>If that exact configuration isn't present in the dataset, the application shouldn't pretend that a measured result exists.</p>
<p>Instead, AMD LLM Lab distinguishes between three types of results.</p>
<h3>MEASURED</h3>
<p>A configuration directly observed in the benchmark dataset.</p>
<h3>ESTIMATED</h3>
<p>A prediction generated from the performance models.</p>
<h3>INTERPOLATED</h3>
<p>A value derived from nearby measured configurations.</p>
<p>This provenance is displayed directly in the application.</p>
<hr />
<h2>Building the Predictive Layer</h2>
<p>I trained models to estimate two important quantities:</p>
<pre><code class="language-text">Peak VRAM
Generation throughput
</code></pre>
<p>The input features include:</p>
<ul>
<li><p>Model parameter count</p>
</li>
<li><p>Context length</p>
</li>
<li><p>Precision</p>
</li>
<li><p>Quantization</p>
</li>
<li><p>Backend</p>
</li>
<li><p>GPU characteristics</p>
</li>
</ul>
<p>The purpose is not to claim that a relatively small benchmark dataset can perfectly predict every possible LLM workload.</p>
<p>Instead, the predictor acts as a <strong>planning tool grounded in the measured MI300X observations</strong>.</p>
<p>The evaluation uses held-out configurations rather than simply reporting performance on the same observations used for training.</p>
<hr />
<h2>Turning the Research Into a Tool</h2>
<p>The project eventually became more than a collection of notebooks.</p>
<p>I built AMD LLM Lab as a complete application:</p>
<pre><code class="language-text">Benchmark Dataset
       ↓
Predictive Models
       ↓
Estimation Layer
       ↓
Recommendation Engine
       ↓
FastAPI
       ↓
Next.js
       ↓
Interactive Research Lab
</code></pre>
<p>The platform currently provides:</p>
<ul>
<li><p>Benchmark Explorer</p>
</li>
<li><p>VRAM Predictor</p>
</li>
<li><p>Throughput Predictor</p>
</li>
<li><p>Configuration Recommender</p>
</li>
<li><p>Quantization Analysis</p>
</li>
<li><p>Scaling Analytics</p>
</li>
<li><p>Local Hardware Detection</p>
</li>
<li><p>Device-aware planning</p>
</li>
</ul>
<p>The goal is to make the benchmark data useful to someone who wants to answer:</p>
<blockquote>
<p><strong>"What should I run on my hardware?"</strong></p>
</blockquote>
<p>rather than requiring them to inspect a CSV manually.</p>
<hr />
<h2>Your Hardware Matters Too</h2>
<p>A benchmark on an MI300X doesn't mean the same configuration will behave identically on a smaller consumer GPU.</p>
<p>AMD LLM Lab can detect local hardware such as:</p>
<ul>
<li><p>GPU</p>
</li>
<li><p>GPU memory</p>
</li>
<li><p>System RAM</p>
</li>
<li><p>CPU</p>
</li>
<li><p>Operating system</p>
</li>
</ul>
<p>and use those constraints when planning configurations.</p>
<p>The application therefore separates:</p>
<pre><code class="language-text">Benchmark observation
        ≠
Device-specific prediction
</code></pre>
<p>This distinction is important because the current benchmark dataset is based on the MI300X environment.</p>
<hr />
<h2>What I Learned</h2>
<p>The biggest lesson from the project is that <strong>LLM inference performance is a configuration problem, not simply a parameter-count problem.</strong></p>
<p>Model size matters.</p>
<p>But so do:</p>
<ul>
<li><p>Precision</p>
</li>
<li><p>Quantization</p>
</li>
<li><p>Context length</p>
</li>
<li><p>Backend</p>
</li>
<li><p>Runtime implementation</p>
</li>
<li><p>Hardware</p>
</li>
</ul>
<p>A 7B model is not simply "a 7B model."</p>
<p>Its actual inference characteristics depend on how and where it is executed.</p>
<hr />
<h2>Limitations</h2>
<p>There are several limitations to the current work.</p>
<p>The benchmark dataset is currently focused on <strong>AMD Instinct MI300X</strong> and a limited set of model configurations.</p>
<p>Therefore, these results should not be interpreted as universal performance laws for all GPUs, models or inference frameworks.</p>
<p>The predictive models are also constrained by the coverage and diversity of the underlying measurements.</p>
<p>More measurements across:</p>
<ul>
<li><p>Additional model families</p>
</li>
<li><p>Additional AMD GPUs</p>
</li>
<li><p>Additional context lengths</p>
</li>
<li><p>Batch sizes</p>
</li>
<li><p>Inference backends</p>
</li>
<li><p>Repeated benchmark runs</p>
</li>
</ul>
<p>would make the system substantially stronger.</p>
<p>These limitations are part of the research rather than something I want to hide.</p>
<hr />
<h2>What's Next?</h2>
<p>The next stage of AMD LLM Lab is focused on expanding the benchmark ecosystem.</p>
<p>The longer-term direction is:</p>
<pre><code class="language-text">More Models
     +
More AMD GPUs
     +
More Configurations
     +
Community Benchmarks
     ↓
Larger Dataset
     ↓
Better Performance Models
     ↓
Better Hardware Recommendations
</code></pre>
<p>I also plan to turn the current benchmark work into a formal research paper focused on empirical modeling of LLM memory and inference throughput on AMD Instinct hardware.</p>
<hr />
<h2>Try AMD LLM Lab</h2>
<p>The complete project is open source.</p>
<h3>Live Lab</h3>
<p><a href="https://amd-llm-lab.vercel.app/">https://amd-llm-lab.vercel.app/</a></p>
<h3>GitHub</h3>
<p><a href="https://github.com/VedantJadhav701/AMD%5C_LLM%5C_LAB">https://github.com/VedantJadhav701/AMD\_LLM\_LAB</a></p>
<p>The repository contains the benchmark dataset, backend, prediction models, dashboard and reproducibility instructions.</p>
<hr />
<h2>Final Note</h2>
<p>AMD LLM Lab is an <strong>independent open-source research project</strong>, not an official AMD product.</p>
<p>The purpose is straightforward:</p>
<blockquote>
<p><strong>Measure what we can. Model what we haven't measured. Make the uncertainty visible.</strong></p>
</blockquote>
]]></content:encoded></item></channel></rss>