<?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[Efrain Garay · Measured]]></title><description><![CDATA[Efrain Garay · Measured]]></description><link>https://efraingaray.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6acbd1060cd595b304079e8d/c83f8b9c-abfb-4906-a115-02f03bd93c13.jpg</url><title>Efrain Garay · Measured</title><link>https://efraingaray.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 27 Oct 2026 09:02:12 GMT</lastBuildDate><atom:link href="https://efraingaray.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[NVFP4 vs FP8 vs GGUF on a 16 GB Ada GPU: NVFP4 decodes 2.3x faster and ties BF16 on GSM8K]]></title><description><![CDATA[Same NVIDIA model in BF16, NVFP4, MXFP8, FP8 and GGUF on an RTX 4070 Ti SUPER: NVFP4 decodes 2.3x faster, all tie BF16 on full GSM8K.]]></description><link>https://efraingaray.hashnode.dev/nvfp4-vs-fp8-vs-gguf-on-a-16-gb-ada-gpu-nvfp4-decodes-2-3x-faster-and-ties-bf16-on-gsm8k</link><guid isPermaLink="true">https://efraingaray.hashnode.dev/nvfp4-vs-fp8-vs-gguf-on-a-16-gb-ada-gpu-nvfp4-decodes-2-3x-faster-and-ties-bf16-on-gsm8k</guid><category><![CDATA[llm]]></category><category><![CDATA[GPU]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[Benchmark]]></category><dc:creator><![CDATA[Efrain Garay]]></dc:creator><pubDate>Sun, 18 Oct 2026 01:59:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6acbd1060cd595b304079e8d/0b16c3b3-b710-4f1c-ade9-66bbf99c02ff.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you type «nvfp4 vs» into Google it completes with «fp8», «gguf», «q4_k_m» and «bf16». The usual answer compares different models quantized by different people. On October 16 NVIDIA released Nemotron Labs Dory 1.0 4B in BF16, NVFP4, MXFP8 and GGUF at once, so I measured the same model in every format on an RTX 4070 Ti SUPER (Ada, 16 GB, no FP4 hardware), with the rules written down before the first run.</p>
<table>
<thead>
<tr>
<th>Format</th>
<th>Engine</th>
<th>Generate (tok/s, batch 1)</th>
<th>Read 2048-token prompt (tok/s)</th>
<th>Weights</th>
</tr>
</thead>
<tbody><tr>
<td>BF16</td>
<td>vLLM</td>
<td>51.0</td>
<td>7,003</td>
<td>7.69 GiB</td>
</tr>
<tr>
<td>FP8 (per tensor, W8A8)</td>
<td>vLLM</td>
<td>78.5</td>
<td>10,118</td>
<td>4.67 GiB</td>
</tr>
<tr>
<td>MXFP8</td>
<td>vLLM</td>
<td>81.4</td>
<td>6,061</td>
<td>4.76 GiB</td>
</tr>
<tr>
<td>NVFP4</td>
<td>vLLM</td>
<td>116.8</td>
<td>6,978</td>
<td>3.28 GiB</td>
</tr>
<tr>
<td>GGUF Q5_K_M</td>
<td>llama.cpp</td>
<td>58.8</td>
<td>1,710</td>
<td>3.42 GiB (file)</td>
</tr>
</tbody></table>
<ul>
<li><strong>Among the vLLM formats, generation follows weight size.</strong> NVFP4 was 2.3 times faster than BF16. On Ada it runs through a weight-only Marlin kernel: the weights stay small, the math stays in 16 bits.</li>
<li><strong>Reading a long prompt, FP8 wins</strong>, because it is the only one of these formats whose multiplications Ada does in 8 bits.</li>
<li><strong>Quality, full GSM8K (1319 questions, 8192-token cap):</strong> BF16 1249, FP8 1241, MXFP8 1250, NVFP4 1238. All three tie with BF16 under the ±3-point rule; their 95 % intervals stay within ±2 points.</li>
<li><strong>Token by token it is another story.</strong> On fixed English and Spanish texts NVFP4 picks BF16's next token 89-90 % of the time, against 94-96 % for FP8 and MXFP8, while perplexity barely moves. MXFP8 is the most faithful to BF16.</li>
</ul>
<p>The post also covers what broke before measuring (the llama.cpp converter rejects the public checkpoint, a prefix cache that inflated prefill, truncated reasoning being scored as answers) and a mistake the audit caught in my own first fidelity run.</p>
<p><strong>Read the full measurements, the pre-registered sheet and the scripts → <a href="https://efraingaray.com/en/blog/nvfp4-vs-fp8-gguf-ada/">https://efraingaray.com/en/blog/nvfp4-vs-fp8-gguf-ada/</a></strong></p>
]]></content:encoded></item><item><title><![CDATA[Kandinsky 6.0 on a 16 GB GPU: the official recipe runs out of memory, and only the 29B model passed my Spanish test]]></title><description><![CDATA[The official recipe ran out of memory on a 16 GB RTX 4080; a two-phase recipe ran. Only Pro distilled passed my Spanish test (WER 0.15).]]></description><link>https://efraingaray.hashnode.dev/kandinsky-6-0-on-a-16-gb-gpu-the-official-recipe-runs-out-of-memory-and-only-the-29b-model-passed-my-spanish-test</link><guid isPermaLink="true">https://efraingaray.hashnode.dev/kandinsky-6-0-on-a-16-gb-gpu-the-official-recipe-runs-out-of-memory-and-only-the-29b-model-passed-my-spanish-test</guid><category><![CDATA[Machine Learning]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[GPU]]></category><dc:creator><![CDATA[Efrain Garay]]></dc:creator><pubDate>Wed, 14 Oct 2026 18:30:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6acbd1060cd595b304079e8d/ff8232a6-9d5f-4a57-8ebf-f62f2fd62bfa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Kandinsky 6.0 generates five seconds of video <strong>with its audio</strong>, voices included, from a text prompt (MIT license). I wanted to know two things: does it run on a 16 GB card, and can it speak Spanish?</p>
<p><strong>Memory.</strong> On a rented 16 GB RTX 4080, the README recipe (per-component CPU offload) ran out of memory with the distilled Lite model; the Qwen2.5-VL text encoder files alone add up to 15.45 GiB. An 8-bit text encoder and sequential offload failed too. What worked was a two-phase recipe: compute the prompt embeddings first, streaming the encoder through the GPU in groups of layers, then drop it and generate with a tiled video VAE. PyTorch allocated at most 11.24 GiB; a vertical clip took about 141 s; the process reached 45.9 GiB of system RAM.</p>
<p><strong>Speech.</strong> Eight scenes with one Spanish line each, two seeds, scored with faster-whisper large-v3 against the requested line. The rule, written before running: median word error ≤ 0.20 and Spanish detected in ≥ 12 of 16 clips.</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Median Spanish WER</th>
<th>Clips with WER ≤ 0.20</th>
</tr>
</thead>
<tbody><tr>
<td>Lite distilled (3B, 10 steps)</td>
<td>1.06</td>
<td>1 of 16</td>
</tr>
<tr>
<td>Lite undistilled (50 steps, guidance 5)</td>
<td>0.75</td>
<td>1 of 16</td>
</tr>
<tr>
<td>Pro distilled (29B, 10 steps)</td>
<td><strong>0.15</strong></td>
<td><strong>9 of 16</strong></td>
</tr>
</tbody></table>
<p>Only Pro met the rule, and its process reached 120 GiB of RAM at roughly 12 to 23 minutes per clip (RTX 3090 with PyTorch memory capped at 15.57 GiB, transformer streamed block by block). The data is compatible with an advantage of the bigger model, but it cannot separate size from distillation.</p>
<p>The full write-up has the recipes, the component diagram, clips with what Whisper heard, the threats to validity (three external audits), and a demo: the small model's video with a replaced voice and the mouth redrawn by LatentSync 1.6.</p>
<p><strong>Read the full measurements → <a href="https://efraingaray.com/en/blog/kandinsky6-video-audio-16gb/">https://efraingaray.com/en/blog/kandinsky6-video-audio-16gb/</a></strong></p>
<p>Scripts, the pre-registration sheet and the raw JSONL: <a href="https://gist.github.com/EfrainGaray/e38005fb2d7b8abe25045c2d1e0f1526">gist</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Qwen-Image 2.1 on 16 GB of VRAM, quantized to NF4: a real benchmark against FLUX]]></title><description><![CDATA[Qwen-Image-2.1-Turbo quantized to NF4 on a 16 GB RTX 4070 Ti SUPER against FLUX.1-dev: 7x faster, 13/18 exact texts vs 7, and what breaks.]]></description><link>https://efraingaray.hashnode.dev/qwen-image-2-1-on-16-gb-of-vram-quantized-to-nf4-a-real-benchmark-against-flux</link><guid isPermaLink="true">https://efraingaray.hashnode.dev/qwen-image-2-1-on-16-gb-of-vram-quantized-to-nf4-a-real-benchmark-against-flux</guid><category><![CDATA[Machine Learning]]></category><category><![CDATA[generative ai]]></category><category><![CDATA[Python]]></category><category><![CDATA[Benchmark]]></category><dc:creator><![CDATA[Efrain Garay]]></dc:creator><pubDate>Mon, 12 Oct 2026 03:56:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6acbd1060cd595b304079e8d/f9c1e96c-3823-470c-a883-7d837dfec60e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On a 16 GB RTX 4070 Ti SUPER, Qwen-Image-2.1-Turbo does not fit in bf16 (the pipeline is 32.5 GB). Quantized to NF4 with bitsandbytes it does, and I ran it against the FLUX.1-dev Q6_K + pixel-art LoRA that made my blog covers: same prompts, same seeds, same card, every image checked by eye.</p>
<p><img src="https://efraingaray.com/media/qwen-image-vs-flux-reel-poster-en.jpg" alt="Same prompt, same seed: FLUX against Qwen NF4" /></p>
<p><strong>What I measured</strong></p>
<ul>
<li><strong>Speed:</strong> 8.4 s per image for Qwen NF4 (8 steps) against 61 s for FLUX + LoRA (30 steps), median, 1344×768. About 7×.</li>
<li><strong>Text in the image:</strong> 13 of 18 requested texts exact for Qwen NF4, 7 for FLUX. Unquantized Qwen on a 48 GB A6000 got 17.</li>
<li><strong>Cover prompts:</strong> Qwen NF4 drew the requested scene in 11 of 15 covers; FLUX + LoRA in none (6 almost, 9 missing the main action or object).</li>
<li><strong>Memory:</strong> 11.9 GiB over the card's baseline for Qwen NF4 (nvidia-smi), 13.1 GiB for FLUX.</li>
</ul>
<p><strong>What broke on the way</strong></p>
<ul>
<li>An 8-bit (LLM.int8) transformer returns a near-uniform purple field. NF4 works.</li>
<li>Decoding the VAE in tiles (needed to fit) left faint vertical purple streaks. Fix: make the latents first, drop the transformer and the text encoder from the GPU, then decode the whole frame (0.77 s, 7.1 GiB peak).</li>
<li>An automatic reader (gemma3:4b) accepted misspelled text, and an external audit caught five of my own verdicts. Every number in the post comes from the corrected image-by-image review.</li>
</ul>
<p>What I lose: the LoRA's atmosphere. Qwen follows the scene but on a flatter background. I switched anyway: every cover on the blog is now generated by Qwen NF4.</p>
<p><strong>Read the full measurements, the side-by-side galleries and the code →</strong> <a href="https://efraingaray.com/en/blog/qwen-image-vs-flux/">https://efraingaray.com/en/blog/qwen-image-vs-flux/</a></p>
<p>Scripts, prompts and the per-image review: <a href="https://gist.github.com/EfrainGaray/427b5cc1875b888fd57e32bf8b886527">gist</a>.</p>
]]></content:encoded></item></channel></rss>