<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Local AI Guide</title><link>https://localai.co.kr/en</link><description>Local AI Guide — en</description><language>en</language><lastBuildDate>Sat, 31 Oct 2026 15:00:00 GMT</lastBuildDate><item><title>Run a Korean LLM directly in the browser</title><link>https://localai.co.kr/en/demo</link><guid isPermaLink="true">https://localai.co.kr/en/demo</guid><description>Download a small Korean language model directly in your browser using WebGPU and freely ask questions to check the first token time and token generation speed.</description><content:encoded><![CDATA[<header><h1>Run a small LLM on this device</h1><p>Download a small Korean language model directly in your browser using WebGPU and freely ask questions to check the first token time and token generation speed.</p></header><section><h2>How does my computer rank?</h2><p>Measure local AI generation speed directly. The GPU name and logical processor count are displayed within the range accessible through the browser. Clicking on the chipset details will retrieve additional information from the graphics driver. CPU and RAM specifications that are not recognized can be entered manually, and specifications entered manually are stored only on the device and are not reflected in the rankings.</p><p>Standard measurement performs three measurements of 128-token decoding, excluding the first token, after prefill execution, using the same question, and records the median value. You may share your personal best records and results.</p><p>Initially, it displays the top % based on the experience-based virtual comparison group. This is not based on actual computer distribution measurements or estimations. If there are 30 or more records agreeing to submission under identical conditions, the ranking is converted to participant ranking, and the virtual comparison group and actual participant data are not mixed. This is not a ranking of overall computer performance or the speed ranking of large models.</p></section><section><h2>What can you check?</h2><p>It is not a simulation that only reorders pre-defined sentences. When a user directly inputs a question, the model file and computation run within the user's browser, and responses appear one token at a time. After completion, it simultaneously displays the time taken from the first token to appear and the actual token generation speed.</p></section><section><h2>Things to know before execution</h2><p>On the first run, download the Qwen 3.5 0.8B Q4 model file; from subsequent runs, use the browser cache. Execution requires approximately 1.6GB of GPU memory and a web browser supporting WebGPU, such as the latest Chrome, Edge, or Safari. Due to its small size, it is better suited for examining local execution processes and device-level perceived performance rather than for verifying the latest facts.</p></section><section><h2>Where is the question processed?</h2><p>The input question and generated answer are not sent as analysis data for this experience feature. The model is downloaded only after the button is pressed, and currently running tasks are terminated when the tab is closed.</p></section><p><a href="https://localai.co.kr/en/speed">Compare expected prefill and token generation speeds for larger models and hardware</a></p>]]></content:encoded><pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local speech recognition and synthesis</title><link>https://localai.co.kr/en/speech</link><guid isPermaLink="true">https://localai.co.kr/en/speech</guid><description>Compare Qwen3-ASR and Whisper transcription plus Qwen3-TTS speech generation on Mac/NVIDIA. See language guides and conditions. Times are measured or conditional estimates, not live server inference.</description><content:encoded><![CDATA[<header><h1>Local speech recognition and synthesis</h1><p>Explore runtime conditions and processing times for automatic speech recognition (ASR) and text-to-speech (TTS). Times are based on published measurements or estimates with stated conditions; this page does not send audio to a server for live inference.</p></header><section><h2>Illustrative demo</h2><p>Illustrative experience: no model is run and no recording or audio is uploaded. Displayed times use measured data or estimates under stated conditions and may differ from actual use.</p></section><section><h2>Speech models covered</h2><p>Qwen3-ASR 0.6B·1.7B, Whisper, faster-whisper, Parakeet v3, Qwen3-TTS, Kokoro, Chatterbox</p></section><section><h2>Model guides</h2><ul><li><a href="https://localai.co.kr/en/guides/nemotron-35-streaming-asr-local-guide">Transcribe Korean speech live and save text with Nemotron 3.5 ASR</a></li><li><a href="https://localai.co.kr/en/guides/moonshine-cpu-streaming-asr-guide">Transcribe English speech in real time with Moonshine on CPU</a></li><li><a href="https://localai.co.kr/en/guides/whisperx-word-alignment-srt-guide">Align Korean subtitles and speaker labels with WhisperX</a></li><li><a href="https://localai.co.kr/en/guides/supertonic-3-korean-local-tts-guide">Generate Korean speech on CPU with Supertonic 3</a></li><li><a href="https://localai.co.kr/en/guides/granite-speech-5-turboctc-local-guide">Transcribe English audio locally with Granite Speech 5 TurboCTC</a></li><li><a href="https://localai.co.kr/en/guides/voxcpm2-multilingual-local-tts-guide">Generate Korean speech with VoxCPM2's 30-language TTS</a></li><li><a href="https://localai.co.kr/en/guides/omnivoice-local-multilingual-tts-guide">Generate Korean speech with OmniVoice's 600+ language and dialect coverage</a></li><li><a href="https://localai.co.kr/en/guides/pocket-tts-cpu-local-speech-guide">Generate speech on a CPU with Pocket TTS in six languages</a></li><li><a href="https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide">Make a two-speaker dialogue WAV with Fish Audio Drama 3</a></li><li><a href="https://localai.co.kr/en/guides/whisperkit-mac-korean-transcription-guide">Transcribe Korean recordings on a Mac with WhisperKit</a></li><li><a href="https://localai.co.kr/en/guides/auk-local-audio-editing-guide">Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</a></li><li><a href="https://localai.co.kr/en/guides/local-voice-assistant-mcp-pipeline">Creating a local voice assistant: ASR·LLM·MCP·TTS connection guide</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li><li><a href="https://localai.co.kr/en/guides/offline-korean-transcription-whisper-cpp">Transcribe Korean recordings on your own computer with whisper.cpp</a></li><li><a href="https://localai.co.kr/en/guides/mlx-audio-local-speech-toolkit-guide">mlx-audio: TTS and STT from a single install</a></li><li><a href="https://localai.co.kr/en/guides/fish-drama-3-int4-local-tts-guide">Fish Audio Drama 3 int4: 41.5 GB down to 22 GB</a></li><li><a href="https://localai.co.kr/en/guides/piper-korean-tts-guide">Piper in Korean: adding a ko_KR voice to Home Assistant</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide">Home Assistant voice announcements: speaking through the house with a Piper voice</a></li><li><a href="https://localai.co.kr/en/guides/wyoming-remote-speech-server-guide">Splitting speech off with Wyoming: moving transcription to another machine</a></li></ul></section><p><a href="https://localai.co.kr/en/guides">View all speech AI guides</a></p>]]></content:encoded><pubDate>Thu, 15 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local image and video generation performance comparison</title><link>https://localai.co.kr/en/generate</link><guid isPermaLink="true">https://localai.co.kr/en/generate</guid><description>Check whether you can create thumbnails, posters, image transformations, photo visualizations, and audio short forms with local equipment in terms of creation time and memory requirements.</description><content:encoded><![CDATA[<header><h1>Local image and video generation performance comparison</h1><p>Check whether you can create thumbnails, posters, image transformations, photo visualizations, and audio short forms with local equipment in terms of creation time and memory requirements.</p></header><section><h2>comparable items</h2><ul><li>expected time to generate one result</li><li>difference based on output resolution and video length</li><li>GPU memory loading status and necessity of offloading</li><li>Expected power consumption per generation</li></ul></section><section><h2>Tasks possible on local devices</h2><ul><li>Generate multiple thumbnails and sians</li><li>Create posters and product images with text chunks</li><li>Transform and synthesize based on reference image</li><li>Turn a single photo into a short video</li><li>Creating short-form content with dialogue and sound effects</li></ul></section><section><h2>image generation model</h2><ul><li><strong>Z-Image-Turbo</strong>: Diffusers · 9 steps / 8 DiT forwards · CFG 0</li><li><strong>Qwen-Image 2.1 Turbo</strong>: Diffusers · checkpoint 8-step schedule · CFG 1</li><li><strong>Pruna Qwen-Image 2.1</strong>: Pruna · distilled checkpoint</li><li><strong>FLUX 3 Image Klein · distilled</strong>: Create images with references and bounding boxes</li><li><strong>Qwen-Image 2.1</strong>: Create images, replace backgrounds and make transparent assets with one model</li><li><strong>FLUX.2 [klein] 4B</strong>fast sketch, thumbnail, repeated generation</li><li><strong>FLUX.2 [klein] 9B</strong>9B model for image generation</li><li><strong>Qwen-Image-2512</strong>poster, mixed Korean-English image, realistic representation</li><li><strong>FLUX.2 [dev] 32B</strong>image with multiple objects</li></ul></section><section><h2>video generation model</h2><ul><li><strong>MiniMax H3-Base</strong>short-form with dialogue and sound effects, control over first and last frames</li><li><strong>LTX-2.5 Audio Video</strong>a local pipeline that generates audio and video at once</li><li><strong>HunyuanVideo-1.5</strong>a short video applied with motion to a single image</li><li><strong>Wan2.2 TI2V-5B</strong>24GB graphics card for 720p video generation</li></ul></section><section><h2>MiniMax H3 local scope</h2><p>This comparison includes only the local execution of the public H3-Base at 768p. Context understanding and 2K regeneration stages are excluded from local generation time.</p></section><p>Generation time may vary significantly depending on the execution tool, driver, number of steps, and offloading, so use it for equipment comparisons under identical conditions.</p>]]></content:encoded><pubDate>Thu, 15 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Choose Local AI Hardware | 30 tok/s Minimum</title><link>https://localai.co.kr/en/decision-lab</link><guid isPermaLink="true">https://localai.co.kr/en/decision-lab</guid><description>Select your current hardware and target model to compare a no-cost option above 30 tok/s, the lowest-cost qualifying new system, maximum memory headroom, and the fastest hardware.</description><content:encoded><![CDATA[<header><h1>Before replacing hardware, find the lowest-cost solution</h1><p>Select your current hardware and target model to compare a no-cost option above 30 tok/s, the lowest-cost qualifying new system, maximum memory headroom, and the fastest hardware.</p></header><section><h2>Recommendation criteria</h2><p>If the lower end of the estimated range reaches 30 tok/s on your current hardware, we show that option first. Otherwise, we find a faster smaller model for the same device.</p></section><section><h2>Four choices</h2><ul><li>Spend nothing: a model that stays above 30 tok/s on your current device</li><li>Balanced new system: the lowest upfront price among new hardware that stays above 30 tok/s</li><li>Large-model headroom: the new system with the most fast memory left after loading the target model</li><li>Top performance: the fastest single-response token generation among new systems for the same model</li></ul></section><p><a href="https://localai.co.kr/en/decision-lab">Calculate with my hardware and model</a></p>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Mini M4 16GB Local LLM Speed and Recommended Model</title><link>https://localai.co.kr/en/hardware/mac-mini-m4-16gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-mini-m4-16gb</guid><description>Compare prefill, token generation speed, memory limits, and recommended configurations to check before purchase for local LLMs running on the Mac Mini M4 16GB. This setup is ideal when starting with models ranging from 8B to 12B in cost-efficient configurations.</description><content:encoded><![CDATA[<header><p>No-frills · Officially released product · Updated 2026-11-01</p><h1>If you are focusing on 8B to 12B, it is worth considering. For larger models, reserve more memory.</h1><p>Mac Mini M4 16GB Local LLM Speed and Recommended Model</p><p>This is the right configuration to minimize costs and start with 8B to 12B models.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>13GB</dd><dt>Memory bandwidth</dt><dd>120GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 42W</dd><dt>Korean price range (KRW)</dt><dd>165–169 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Summary, translation, light coding</li><li>Quiet, always-on operation</li><li>Private Local LLM</li></ul><h2>Check before purchasing</h2><p>The available memory is small, making it difficult to use models larger than 20B and long contexts together.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Document/Summary</th><td>Suitable</td><td>Fits short documents and 8B to 12B models.</td></tr><tr><th scope="row">Coding assistance</th><td>Conditional</td><td>Small models are possible, but large storage contexts are tight.</td></tr><tr><th scope="row">Create image</th><td>Conditional</td><td>It focuses on lightweight models and has fewer choices than the NVIDIA ecosystem.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>The first limitation is the context length, as we need to fit the model and KV cache together in 13GB.</p><h3>Recommended purchase setup</h3><p>M4 · Integrated memory 16GB · SSD 512GB or more</p><h3>Criteria for spending more money</h3><p>It is enough if you only use 8B~12B. If you are thinking of 27B, 24GB or more is better from the beginning.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>154 ~ 172.1 tok/s</td><td>1.5 to 3.8 seconds</td><td>1,089 ~ 2,661 tok/s</td></tr><tr><th scope="row">Gemma 4 12B<br><small>MLX 4-bit</small></th><td>8GB</td><td>11.6 ~ 12.9 tok/s</td><td>12.8 ~ 31.1 s</td><td>132 ~ 323 tok/s</td></tr><tr><th scope="row">Gemma 4 26B-A4B (MoE)<br><small>MLX 4-bit</small></th><td>15.55GB</td><td>9.6 ~ 15 tok/s</td><td>6.2 ~ 18.0 s</td><td>229 ~ 668 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on the Mac mini M4 16GB?</h3><p>Compare K2 Horizon 0.9B, Gemma 4 12B, Gemma 4 26B-A4B (MoE) with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Mac mini M4 16GB?</h3><p>Expected to draw approximately 42W under sustained load, with an actual range estimated between 28–58W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Mini M4 24GB local LLM performance and appropriate model</title><link>https://localai.co.kr/en/hardware/mac-mini-m4-24gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-mini-m4-24gb</guid><description>Check the Mac Mini M4 24GB's local LLM prefill and decode speed, 12B model loading capacity, power, and purchase specifications at once. If you summarize short documents and ask about small sections of code, first check whether the model you plan to use gives useful answers. If a 12B Q4 model does the job, 32GB is worth considering only when your work needs more memory headroom.</description><content:encoded><![CDATA[<header><p>For 12B models · Officially released product · Updated 2026-11-01</p><h1>For summaries and short coding questions with a 12B model, try 24GB first.</h1><p>Mac Mini M4 24GB local LLM performance and appropriate model</p><p>If you summarize short documents and ask about small sections of code, first check whether the model you plan to use gives useful answers. If a 12B Q4 model does the job, 32GB is worth considering only when your work needs more memory headroom.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>20GB</dd><dt>Memory bandwidth</dt><dd>120GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 45W</dd><dt>Korean price range (KRW)</dt><dd>150–235 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Short document summaries with 12B</li><li>Questions about a function or code excerpt</li><li>A compact desktop unit</li></ul><h2>Check before purchasing</h2><p>If your main task is feeding long documents to a 27B Q4 model, check memory headroom at that input length before choosing this configuration. macOS and open apps share the same 24GB, and you cannot add RAM after purchase.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Document/RAG</th><td>Suitable</td><td>Start with a 12B Q4 model and the relevant parts of your document. Memory use depends on the input actually sent to the model, not the PDF's page count.</td></tr><tr><th scope="row">Coding assistance</th><td>Suitable</td><td>Try explaining one function or requesting a small edit first. A task that includes the entire repository will not necessarily run at the same speed.</td></tr><tr><th scope="row">27B conversation</th><td>Conditional</td><td>For 27B Q4, check whether the model file and cache fit together. If you need long inputs, compare 32GB under the same conditions.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>Once the model fits, adding memory does not increase generation speed in proportion. Both the M4 24GB and 32GB use 120GB/s memory bandwidth. If waiting is the problem, compare speed with a Pro under the same conditions rather than looking only at capacity.</p><h3>Recommended purchase setup</h3><p>M4 · 10-core GPU · 24GB unified memory · 512GB SSD recommended</p><h3>Criteria for spending more money</h3><p>If the answers and wait times from a 12B model suit you, you can stop here. Consider paying for 32GB only after choosing a larger model or finding that other open apps leave too little memory.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>154 ~ 172.1 tok/s</td><td>1.5 to 3.8 seconds</td><td>1,089 ~ 2,661 tok/s</td></tr><tr><th scope="row">Gemma 4 12B<br><small>MLX 4-bit</small></th><td>8GB</td><td>11.6 ~ 12.9 tok/s</td><td>12.8 ~ 31.1 s</td><td>132 ~ 323 tok/s</td></tr><tr><th scope="row">K2 Horizon MoVA 36B-A4B<br><small>MLX 4-bit</small></th><td>21.94GB</td><td>9.2 ~ 14.2 tok/s</td><td>9.8 to 26.4 seconds</td><td>156 ~ 420 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on the Mac mini M4 24GB?</h3><p>Compare K2 Horizon 0.9B, Gemma 4 12B, K2 Horizon MoVA 36B-A4B with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Mac mini M4 24GB?</h3><p>Expected to be around 45W under sustained load, with an actual range of 30–60W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Mini M4 32GB Local LLM 27B Running Performance</title><link>https://localai.co.kr/en/hardware/mac-mini-m4-32gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-mini-m4-32gb</guid><description>Compare prefill, token generation speed, memory use and purchase configurations for running a 27B-class Q4 local LLM on the Mac mini M4 32GB. Consider this configuration if you want to run 27B Q4 without building a new PC. Moving up makes sense if 24GB was running out of memory. If the model and cache already fit, however, choosing 32GB does not make the chip itself faster.</description><content:encoded><![CDATA[<header><p>Capacity priority · Officially released product · Updated 2026-11-01</p><h1>More room than 24GB does not automatically mean faster answers.</h1><p>Mac Mini M4 32GB Local LLM 27B Running Performance</p><p>Consider this configuration if you want to run 27B Q4 without building a new PC. Moving up makes sense if 24GB was running out of memory. If the model and cache already fit, however, choosing 32GB does not make the chip itself faster.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>27GB</dd><dt>Memory bandwidth</dt><dd>120GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 48W</dd><dt>Korean price range (KRW)</dt><dd>180–240 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Run 27B Q4 on one machine</li><li>A personal server without PC assembly</li><li>When 24GB runs out of memory</li></ul><h2>Check before purchasing</h2><p>Do not choose this configuration if you need to move CUDA-only extensions over unchanged. Having 32GB of memory does not make them compatible with macOS. On the product listing, also check the M4 chip, 32GB unified memory, and SSD option separately.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">27B conversation</th><td>Suitable</td><td>Check a Q4 configuration with 4K input first. Whether a model fits and whether you are comfortable waiting for a long answer are separate decisions.</td></tr><tr><th scope="row">personal documents</th><td>Suitable</td><td>If you ask about the same document repeatedly, also look at settings that reuse the cache. More memory alone does not solve document-reading time.</td></tr><tr><th scope="row">Create image</th><td>Conditional</td><td>First check that your models and nodes support Metal or MLX. If you are moving a CUDA-only workflow, you may need different hardware.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>Generation-speed differences add up more over long answers than short ones. Apart from checking whether 27B Q4 fits, try an answer length you would actually be willing to wait for. Longer context also leaves less free memory.</p><h3>Recommended purchase setup</h3><p>M4 · 10-core GPU · 32GB unified memory · 512GB SSD recommended</p><h3>Criteria for spending more money</h3><p>If you only use 12B models and have memory to spare in 24GB, you do not need to move to 32GB. If you like the answers from 27B but not the wait, compare prefill and generation times with the M4 Pro 48GB rather than buying a larger SSD.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>154 ~ 172.1 tok/s</td><td>1.5 to 3.8 seconds</td><td>1,089 ~ 2,661 tok/s</td></tr><tr><th scope="row">Qwen3.8 27B<br><small>MLX 4-bit</small></th><td>17.56GB</td><td>5.1 ~ 5.7 tok/s</td><td>16.4 ~ 35.5 s</td><td>116 ~ 252 tok/s</td></tr><tr><th scope="row">K2 Horizon MoVA 36B-A4B<br><small>MLX 4-bit</small></th><td>21.94GB</td><td>34.6 ~ 38.6 tok/s</td><td>9.1 to 24.6 seconds</td><td>167 ~ 449 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on the Mac mini M4 32GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8 27B, K2 Horizon MoVA 36B-A4B with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Mac mini M4 32GB?</h3><p>Expected to be around 48W under sustained load, with an actual range of 32–63W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Mini M4 Pro 48GB Local LLM 27B·35B Performance</title><link>https://localai.co.kr/en/hardware/mac-mini-m4-pro-48gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-mini-m4-pro-48gb</guid><description>Compare prefill and decode speeds and memory space when using 27B·35B Q4 local LLM on Mac Mini M4 Pro 48GB. When you repeatedly read documents and edit code with a 27B model, each wait matters as well as capacity. This page uses the 20-core GPU, 48GB configuration. Distinguish it from less expensive listings with a 16-core GPU.</description><content:encoded><![CDATA[<header><p>Repeated tasks with 27B · Officially released product · Updated 2026-11-01</p><h1>If you use 27B often, compare the wait with an M4 32GB first.</h1><p>Mac Mini M4 Pro 48GB Local LLM 27B·35B Performance</p><p>When you repeatedly read documents and edit code with a 27B model, each wait matters as well as capacity. This page uses the 20-core GPU, 48GB configuration. Distinguish it from less expensive listings with a 16-core GPU.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>41GB</dd><dt>Memory bandwidth</dt><dd>273GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 92W</dd><dt>Korean price range (KRW)</dt><dd>263–344 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Repeated document and coding tasks with 27B</li><li>Run the model alongside work apps</li><li>A Mac setup without PC assembly</li></ul><h2>Check before purchasing</h2><p>If you need to keep using CUDA-only ComfyUI nodes unchanged, look for a supported GPU setup rather than a Mac. Do not choose this machine for 70B solely because it has 48GB either. Account for the model files, input cache, and other apps together.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Coding assistance</th><td>Suitable</td><td>Compare a 27B Q4 configuration with the code to edit and the files it needs. A larger model alone does not guarantee more accurate code.</td></tr><tr><th scope="row">Documents / RAG</th><td>Suitable</td><td>Memory left after loading the model can hold the input cache. When sending a long document at once, check the wait for the first token before focusing on generation speed.</td></tr><tr><th scope="row">Create image</th><td>Conditional</td><td>If you already have a ComfyUI workflow, check support for each node first. Having 48GB does not make CUDA-only nodes compatible.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>Reading a long input and generating an answer do not speed up by the same amount. Dividing the Pro's 273GB/s bandwidth by the M4's 120GB/s does not give the speedup for the whole task. Compare the two stages with the same model and input.</p><h3>Recommended purchase setup</h3><p>M4 Pro · 20-core GPU · 48GB unified memory · 1TB SSD recommended</p><h3>Criteria for spending more money</h3><p>If you ask short questions with a 12B model and the wait is acceptable, a base M4 may be enough. Judge the price difference only after checking whether the time saved on repeated 27B use or longer inputs matters to your work.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>370.9 ~ 412.1 tok/s</td><td>0.76 to 1.7 seconds</td><td>2,383 ~ 5,405 tok/s</td></tr><tr><th scope="row">Qwen3.8 27B<br><small>MLX 4-bit</small></th><td>17.56GB</td><td>12.3 ~ 13.7 tok/s</td><td>7.8 ~ 14.3 s</td><td>289 ~ 530 tok/s</td></tr><tr><th scope="row">K2 Horizon MoVA 36B-A4B<br><small>MLX 4-bit</small></th><td>21.94GB</td><td>83.3 ~ 92.5 tok/s</td><td>4.5 to 9.8 seconds</td><td>417 ~ 918 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on the Mac mini M4 Pro 48GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8 27B, K2 Horizon MoVA 36B-A4B with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM computing power of the Mac mini M4 Pro 48GB?</h3><p>Expected to consume approximately 92W under sustained load, with an actual range estimated between 62–122W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini M6 32GB for Local LLMs: How Does It Compare with 24GB and M4 32GB?</title><link>https://localai.co.kr/en/hardware/mac-mini-m6-32gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-mini-m6-32gb</guid><description>For a 27B Q4 local LLM on the 32GB M6 Mac mini, this guide compares memory headroom with the 24GB M6 and 32GB M4, plus current configurations and prices. If you plan to keep a browser or document app open while running a Qwen 27B-class Q4 model, the 32GB configuration belongs on the shortlist. It has the same 170GB/s memory bandwidth as the 24GB M6, so the reason to buy 8GB more is the headroom left after loading the model. It launched on September 22, 2026, and can now be compared using current configurations and prices.</description><content:encoded><![CDATA[<header><p>Available now · 32GB · Released September 22, 2026 · Updated November 1, 2026</p><h1>If you want 32GB for a 27B model, check the memory headroom before the new chip.</h1><p>Mac mini M6 32GB for Local LLMs: How Does It Compare with 24GB and M4 32GB?</p><p>If you plan to run a Qwen 27B-class Q4 model while keeping a browser or document app open, the 32GB configuration belongs on the shortlist. It has the same 170GB/s memory bandwidth as the 24GB M6, so the reason to buy 8GB more is the headroom left after loading the model. It launched on September 22, 2026, and can now be compared using current configurations and prices.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>27GB</dd><dt>Memory bandwidth</dt><dd>170GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 55W</dd><dt>Korean price range (KRW)</dt><dd>235–320 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Run a 27B Q4 model alongside work apps</li><li>Start with short prompts and extend context</li><li>A compact Mac without building a PC</li></ul><h2>Check before purchasing</h2><p>If you only plan to use 12B-class models with short inputs, you do not need to start with 32GB. Check whether the model and input cache fit comfortably in 24GB. More unified memory will not add compatibility for CUDA-only apps or nodes. Check both SSD capacity and the final price of the current configuration.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">27B conversation</th><td>Conditional</td><td>Start with Q4 and a 4K input. Even when the model fits, long conversations or several open apps reduce the room available for the input cache. Perceived speed varies with the runtime and quantization.</td></tr><tr><th scope="row">Documents and coding</th><td>Suitable</td><td>Compare the length of the sections you actually need instead of sending an entire document by default. Long inputs affect the wait for the first token; long answers affect generation time.</td></tr><tr><th scope="row">Image and CUDA workflows</th><td>Conditional</td><td>You can use models and nodes supported on Mac, but CUDA-only extensions will not transfer unchanged. Check your existing workflow first.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>The model cannot use all 32GB: macOS, open apps, and prompt cache share the unified memory. Apple's specifications give the M6 24GB and 32GB the same 170GB/s bandwidth, so when a workload fits on both, the capacity difference alone will not increase generation speed proportionally.</p><h3>Recommended purchase setup</h3><p>M6 · 12-core GPU · 32GB unified memory · 1TB or larger SSD recommended (check available configurations)</p><h3>Criteria for spending more money</h3><p>If you already own an M4 32GB, memory capacity alone is not a reason to replace it with an M6. Compare prompt processing and long-answer generation using the same model, quantization, and input length. For a new purchase, first check whether the M6 24GB can do the job; pay for 32GB only if a 27B model plus your other apps leave too little room. If waiting time is the main problem, the M4 Pro 48GB is also worth comparing.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>224.5 ~ 250.2 tok/s</td><td>1.1 to 2.7 seconds</td><td>1,498 ~ 3,742 tok/s</td></tr><tr><th scope="row">Qwen3.8 27B<br><small>MLX 4-bit</small></th><td>17.56GB</td><td>7.5 ~ 8.3 tok/s</td><td>11.4 ~ 25.0 s</td><td>165 ~ 364 tok/s</td></tr><tr><th scope="row">K2 Horizon MoVA 36B-A4B<br><small>MLX 4-bit</small></th><td>21.94GB</td><td>50.4 ~ 56.2 tok/s</td><td>7.2 to 17.5 seconds</td><td>234 ~ 571 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on the Mac mini M6 32GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8 27B, K2 Horizon MoVA 36B-A4B with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Mac mini M6 32GB?</h3><p>Expected to be around 55W under sustained load, with an actual range estimated between 35–80W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M4 Max 128GB local LLM large model performance</title><link>https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb</guid><description>See loadable models, prefill, token speed and total cost for running large local LLMs on a Mac Studio M4 Max 128GB. It suits people who want to compare a wide range from 70B-class to high-precision models in a single finished machine.</description><content:encoded><![CDATA[<header><p>large model · Officially released product · Updated 2026-11-01</p><h1>To pack 70B class into one vehicle. CUDA-specific tools cannot be used.</h1><p>Mac Studio M4 Max 128GB local LLM large model performance</p><p>Suits people who want to compare a wide range from 70B-class to high-precision models in a single finished machine.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>114GB</dd><dt>Memory bandwidth</dt><dd>546GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 130W</dd><dt>Korean price range (KRW)</dt><dd>780–888 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>70B class Q4</li><li>Simultaneous storage of multiple models</li><li>Large integrated memory</li></ul><h2>Check before purchasing</h2><p>Memory is ample, but tasks that require CUDA-specific tools require separate confirmation.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">70B conversation</th><td>Suitable</td><td>Easy to load the large Q4 model from a single finished product.</td></tr><tr><th scope="row">Documents / RAG</th><td>comfortable</td><td>Large integrated memory keeps models and cache together.</td></tr><tr><th scope="row">Create image</th><td>Suitable</td><td>There is a lot of memory space, but you need to check for CUDA-only nodes.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>It is strong for loading large models, but has fewer options for tasks that require a CUDA-specific kernel and multi-GPU scalability.</p><h3>Recommended purchase setup</h3><p>M4 Max · Integrated memory 128GB · SSD 1TB or more</p><h3>Criteria for spending more money</h3><p>It is worth considering if you want to put a 70B class model in one vehicle. If you only use 35B or less, M4 Pro 48GB is economical.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>762.3 ~ 844.8 tok/s</td><td>0.52 to 1.0 seconds</td><td>4,084 ~ 7,900 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>MLX 4-bit</small></th><td>107.13GB</td><td>34.2 ~ 48.1 tok/s</td><td>4.4 ~ 8.6 s</td><td>479 ~ 936 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Which local LLM can be run on the Studio M4 Max 128GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM computing power of the Studio M4 Max 128GB?</h3><p>Expected to draw approximately 130W under sustained load, with an actual range estimated between 95–165W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 3090 for local AI: keep it or buy used?</title><link>https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb</guid><description>Determine speed, power, used purchase risk, and overall deployment cost when using 12B·27B local LLM and image creation on an RTX 3090 24GB. If you own an RTX 3090, first check whether the target model and context fit in 24GB. Newer hardware alone is not a reason to replace a card that completes your work. For a used purchase, include power, cooling, case compatibility and return terms in the cost.</description><content:encoded><![CDATA[<header><p>A used 24GB card · Officially released product · Updated 2026-11-01</p><h1>Before checking the used price, check whether your PC can take a 24GB GPU.</h1><p>RTX 3090 for local AI: keep it or buy used?</p><p>If you own an RTX 3090, first check whether the target model and context fit in 24GB. Newer hardware alone is not a reason to replace a card that completes your work. For a used purchase, include power, cooling, case compatibility and return terms in the cost.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>22.5GB</dd><dt>Memory bandwidth</dt><dd>936GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 420W</dd><dt>Korean price range (KRW)</dt><dd>239–239 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Add 24GB VRAM to an existing PC</li><li>Q4 workloads that fit in 24GB</li><li>ComfyUI image generation</li></ul><h2>Check before purchasing</h2><p>Avoid a used card if you cannot check its condition under load or the return terms if something goes wrong. Seeing it display an image once is not enough. Before buying, also check whether that manufacturer's model fits your PC in length, thickness, and power connections.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">27B conversation</th><td>Suitable</td><td>Count both the 27B Q4 file and the input cache. Do not mix the speed of a fully GPU-resident configuration with one that offloads part of the model to RAM.</td></tr><tr><th scope="row">Create image</th><td>Suitable</td><td>In ComfyUI, check whether the model, resolution and batch size fit within 24GB. Low-precision kernels built for newer GPUs do not necessarily work the same way on a 3090.</td></tr><tr><th scope="row">24 hour server</th><td>Conditional</td><td>Separate time powered on from time spent generating. The card does not draw its rated power all day, but sustained generation still means dealing with cooling and noise.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>A 70B model's raw 4-bit weights alone are roughly 35GB before metadata and context cache. Do not compare an offloaded run as though it were fully resident on one 24GB card. RAM offloading may enable execution without preserving fully resident speed.</p><h3>Recommended purchase setup</h3><p>RTX 3090 24GB card only · 64GB system RAM in this comparison · Check PSU, case fit, and warranty for the manufacturer's model</p><h3>Criteria for spending more money</h3><p>A 24GB RTX 4090 may improve speed but does not automatically solve a capacity problem. Before moving to 32GB, check that the target workload fits there. Tasks that fit 16GB can also be compared with smaller new configurations, including power, warranty and full-system cost.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>1.03GB</td><td>1271.5 ~ 1412.8 tok/s</td><td>0.26 to 0.45 seconds</td><td>9,032 ~ 15,552 tok/s</td></tr><tr><th scope="row">Qwen3.8 27B<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>17.56GB</td><td>42.3 ~ 46.9 tok/s</td><td>4.4 to 7.5 seconds</td><td>548 ~ 944 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>Strata 0.1.34 · IQ2_XS · MTP · INT8 KV · pcie-frac 0 · SSD PLE</small></th><td>60.0561152GB</td><td>74.9 ~ 135.1 tok/s</td><td>8.1 to 14.6  seconds</td><td>280.4 ~ 505.6 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on a local LLM using an RTX 3090 24GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8 27B, Qwen3.8-Flash-Next with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the power consumption of a local LLM on an RTX 3090 24GB?</h3><p>Expected to be around 420W under sustained load, with an actual range of 330–540W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4090 24GB local LLM and image creation performance</title><link>https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb</guid><description>Compare local LLM decode, image generation, power and used market prices of the RTX 4090 24GB with RTX 3090·5090 alternatives. This is the machine to look at if you want to quickly process LLM and image creation that fit in 24GB and avoid the new high price.</description><content:encoded><![CDATA[<header><p>24GB high-speed · Officially released product · Updated 2026-11-01</p><h1>Anything that fits into 24GB is fast. The limit is also exactly 24GB.</h1><p>RTX 4090 24GB local LLM and image creation performance</p><p>This is the machine to look at if you want to quickly process LLM and image creation that fit in 24GB and avoid the new high price.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>22.5GB</dd><dt>Memory bandwidth</dt><dd>1008GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 470W</dd><dt>Korean price range (KRW)</dt><dd>325–400 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Fast 12B to 27B inference</li><li>ComfyUI image generation</li><li>CUDA development environment</li></ul><h2>Check before purchasing</h2><p>Models with more than 24GB cannot be loaded even if they are fast, and their appeal diminishes if used prices are close to the 5090.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">27B conversation</th><td>comfortable</td><td>High single GPU speed within 24GB.</td></tr><tr><th scope="row">Create image</th><td>comfortable</td><td>Compare the processing speed of the same model together with our support tools.</td></tr><tr><th scope="row">large model</th><td>Conditional</td><td>If you exceed VRAM, CPU/RAM offloading loss is significant.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>The 24GB VRAM limit is reached before compute performance.</p><h3>Recommended purchase setup</h3><p>RTX 4090 24GB · System RAM 64GB · 1000W power · 4 slots available</p><h3>Criteria for spending more money</h3><p>It's worth it when the price difference over the 5090 is big enough and 24GB is enough. If you need 32GB, look no further than the 5090.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>1.03GB</td><td>1426.4 ~ 1578.6 tok/s</td><td>0.16 to 0.22 seconds</td><td>18,789 ~ 26,195 tok/s</td></tr><tr><th scope="row">Qwen3.8 27B<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>17.56GB</td><td>38.3 ~ 51.9 tok/s</td><td>2.6 to 3.6 seconds</td><td>1,141 ~ 1,591 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>Strata 0.1.33 serving branch · IQ3_S · MTP-4 · INT8 KV · SSD PLE</small></th><td>74.5561152GB</td><td>92.6 ~ 192.3 tok/s</td><td>0.72 to 1.5  seconds</td><td>2742.3 ~ 5695.6 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on an RTX 4090 24GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8 27B, Qwen3.8-Flash-Next with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the power consumption of a local LLM on an RTX 4090 with 24GB?</h3><p>Expected to consume approximately 470W under sustained load, with an actual range estimated between 350–600W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5090 32GB local LLM/image/video generation performance</title><link>https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb</guid><description>We compare the speed, power, overall PC construction cost and alternatives when running 27B·35B local LLM and image/video creation on RTX 5090 32GB. Compare this card if you repeatedly generate images or run 27B–35B inference and want shorter waits. But 32GB is still a limit. Buying on compute performance alone, without checking the model, input and image resolution, may leave you offloading again.</description><content:encoded><![CDATA[<header><p>A single 32GB GPU · Officially released product · Updated 2026-11-01</p><h1>First check whether the task that ran out of room in 24GB fits in 32GB.</h1><p>RTX 5090 32GB local LLM/image/video generation performance</p><p>Compare this card if you repeatedly generate images or run 27B–35B inference and want shorter waits. But 32GB is still a limit. Buying on compute performance alone, without checking the model, input and image resolution, may leave you offloading again.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>30.5GB</dd><dt>Memory bandwidth</dt><dd>1792GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 620W</dd><dt>Korean price range (KRW)</dt><dd>899–929 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Repeated 27B–35B Q4 runs</li><li>Image and video tasks that fit in 32GB</li><li>Tools with confirmed Blackwell support</li></ul><h2>Check before purchasing</h2><p>Do not replace the card before checking Blackwell support in the tools you use. The driver, PyTorch, and runtime versions need to work together. Length, thickness, and power requirements also vary by manufacturer's model, so check your existing case and PSU separately.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">27B·35B conversation</th><td>Suitable</td><td>First compare a Q4 setup with the model and input cache on the GPU. Acceleration options matter only when the particular model and runtime support them.</td></tr><tr><th scope="row">Image/video</th><td>Conditional</td><td>One image and a long video have different memory demands. Choose the model, resolution and frame count, then check whether the configuration stays within 32GB.</td></tr><tr><th scope="row">24 hour server</th><td>Conditional</td><td>Calculate separately for a mostly idle server and one that generates continuously. Using only load power to estimate the monthly bill misses the actual usage pattern.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>Moving a model and cache that exceed 32GB into RAM changes the conditions of the task. A video model's name alone is not enough either. Compare at the same resolution, frame count and offloading settings.</p><h3>Recommended purchase setup</h3><p>RTX 5090 32GB card only · 64GB system RAM in this comparison · check the board vendor's PSU, connector and clearance requirements</p><h3>Criteria for spending more money</h3><p>If your current 24GB card finishes the work you need and the wait is acceptable, there is no rush to replace it. Once the time saved on repeated tasks and the need for 32GB are clear, include the cost of other PC parts before deciding.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>1.03GB</td><td>2637.3 ~ 2907.8 tok/s</td><td>0.12 to 0.18 seconds</td><td>22,847 ~ 34,856 tok/s</td></tr><tr><th scope="row">Qwen3.6 35B-A3B (MoE)<br><small>llama.cpp CUDA · Q4_K_M</small></th><td>21.28GB</td><td>111.5 ~ 280 tok/s</td><td>0.47 to 0.73 seconds</td><td>5,706 ~ 8,705 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>Strata 0.1.41 · IQ3_S · MTP-6 · INT8 KV · SSD PLE</small></th><td>82.5GB</td><td>127.7 ~ 263.9 tok/s</td><td>0.46 to 0.94  seconds</td><td>4375.9 ~ 9044.5 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>What LLM can be run on an RTX 5090 with 32GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.6 35B-A3B (MoE), Qwen3.8-Flash-Next with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the power consumption of a local LLM on an RTX 5090 with 32GB?</h3><p>Expected to be around 620W under sustained load, with an actual range of 480–760W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ryzen AI Max+ 395 128GB local LLM cost-effectiveness</title><link>https://localai.co.kr/en/hardware/amd-ryzen-ai-max-plus-395-128gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/amd-ryzen-ai-max-plus-395-128gb</guid><description>We compare memory availability, runtime compatibility, and speed when running a large local LLM on a Ryzen AI Max+ 395 128GB miniPC with Mac Studio and DGX Spark alternatives. It is attractive when you have large amounts of integrated memory at a low price and can handle runtime settings directly.</description><content:encoded><![CDATA[<header><p>Large capacity cost-effectiveness · Officially released product · Updated 2026-11-01</p><h1>This is a choice aimed at loading a 128GB model at a low body price.</h1><p>Ryzen AI Max+ 395 128GB local LLM cost-effectiveness</p><p>It is attractive when you have large amounts of integrated memory at a low price and can handle runtime settings directly.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>96GB</dd><dt>Memory bandwidth</dt><dd>256GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 125W</dd><dt>Korean price range (KRW)</dt><dd>538–562 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Loading large models</li><li>Select Windows/Linux</li><li>128GB cost-effectiveness</li></ul><h2>Check before purchasing</h2><p>Even if there is ample memory, the actual speed difference is large depending on the runtime and GPU acceleration support, so you should check compatibility for each model first.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Large LLMs</th><td>Suitable</td><td>We can review the larger Q4 model with 112GB of available memory.</td></tr><tr><th scope="row">Document/RAG</th><td>Suitable</td><td>It has a large capacity to hold both the model and long context.</td></tr><tr><th scope="row">Convenience of installation</th><td>Conditional</td><td>You should check runtime support for each model yourself.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>GPU acceleration support by runtime and kernel completeness determine actual usability rather than hardware capacity.</p><h3>Recommended purchase setup</h3><p>Ryzen AI Max+ 395 · System memory 128GB · NVMe 2TB recommended</p><h3>Criteria for spending more money</h3><p>It is advantageous if you want to put up with the settings and install a large capacity model cheaply. If you want reliable tools out of the box, you're better off with a Mac or NVIDIA finished product.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>llama.cpp HIP · Q4_K_M</small></th><td>1.03GB</td><td>338.1 ~ 376.8 tok/s</td><td>1.6 to 3.1 seconds</td><td>1,339 ~ 2,487 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>Strata 0.1.40 · IQ3_S · ROCm 7.14.1 · MTP-4</small></th><td>57.8561152GB</td><td>44.9 ~ 73.3 tok/s</td><td>2.6 to 4.3  seconds</td><td>961.4 ~ 1568.6 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Which local LLM can be run on Ryzen AI Max+ 395 128GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>How much power does the local LLM of Ryzen AI Max+ 395 with 128GB consume?</h3><p>Expected power consumption under sustained load is approximately 125W, with an actual range anticipated between 80–170W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M5 Ultra 256GB: Real-World Local LLM and Agent Performance</title><link>https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb</guid><description>Compares prefill and generation speed, concurrent request performance and memory limits for Qwen3.8 Flash-Next, GLM-5.3 and Qwen 27B on a Mac Studio M5 Ultra 256GB against measured values. In a public measurement using Flash-Next 4-bit with MTP, a 4K input was processed at about 2,600–2,900 tok/s and a 512-token answer landed in the 90–112 tok/s range. Prefill held near 2,500 tok/s at a 256K input. The shorter wait for a first answer on long prompts, beyond the larger unified memory, is the biggest difference from M3 Ultra.</description><content:encoded><![CDATA[<header><p>Large models and local agents · Officially released product · Updated 2026-11-01</p><h1>It does more than fit large models: it cuts the time spent reading long prompts.</h1><p>Mac Studio M5 Ultra 256GB: Real-World Local LLM and Agent Performance</p><p>In a public measurement using Flash-Next 4-bit with MTP, a 4K input was processed at about 2,600–2,900 tok/s and a 512-token answer landed in the 90–112 tok/s range. Prefill held near 2,500 tok/s even at a 256K input. Beyond the larger unified memory, the shorter wait for a first answer on long prompts is the biggest difference from M3 Ultra.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>236GB</dd><dt>Memory bandwidth</dt><dd>1200GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 300W</dd><dt>Korean price range (KRW)</dt><dd>1,850–2,000 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Local agents with long context</li><li>Always-on Flash-Next at 4 or 5 bit</li><li>Multiple parallel requests on one machine</li></ul><h2>Check before purchasing</h2><p>An RTX 5090 can still be faster for short requests when the whole model fits in 32GB. CUDA-only tools do not carry over unchanged. In the tested 256GB system, 6- and 8-bit Flash-Next needed their PLE embedding tables on SSD, so wait for the 512GB configuration if the goal is to keep those higher-precision builds entirely in memory.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Local agents</th><td>comfortable</td><td>Flash-Next 4-bit read a 16K prompt at about 2,700–3,050 tok/s and generated at 84–108 tok/s with MTP.</td></tr><tr><th scope="row">Long documents and codebases</th><td>Suitable</td><td>Flash-Next maintained prefill near 2,500 tok/s even at 256K input. Check each model's context limit and real cache memory separately.</td></tr><tr><th scope="row">Higher precision and multiple resident models</th><td>Conditional</td><td>The 4- and 5-bit builds fit in RAM, while the 6- and 8-bit builds needed PLE SSD offload on 256GB. Compare the 512GB configuration for this use case.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>Single-request generation is largely constrained by memory bandwidth, while first-token latency depends heavily on GPU compute and prompt length. Three concurrent requests raise aggregate throughput, but each request becomes slower.</p><h3>Recommended purchase setup</h3><p>M5 Ultra · 36-core CPU · 80-core GPU · 256GB unified memory · 2TB or larger SSD recommended for model storage</p><h3>Criteria for spending more money</h3><p>Published runs used about 155GB for Flash-Next oQ4e and about 179GB for oQ5e, so both can operate within 256GB. Unless you plan to keep oQ6e or oQ8e entirely in RAM, or keep several large models resident at once, check the 256GB system's actual latency and concurrent throughput before paying for 512GB.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>1630.2 ~ 1811.3 tok/s</td><td>0.30 to 0.55 seconds</td><td>7,488 ~ 13,721 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>oMLX 0.7.0 (4d4f5a28) · mlx-lm 94cdcae · mlx 0.32.2 · native kernels · Lightning MTP on</small></th><td>155GB</td><td>115.0 ~ 172.6 tok/s</td><td>0.70 to 1.0  seconds</td><td>3959.2 ~ 5938.8 tok/s</td></tr><tr><th scope="row">GLM-5.3-Flash (MoE)<br><small>oMLX 0.7.0 (4d4f5a28) · mlx-lm 94cdcae · mlx 0.32.2 · native kernels · Lightning MTP on</small></th><td>190.51GB</td><td>51.2 ~ 76.8 tok/s</td><td>1.5 to 2.3  seconds</td><td>1816.0 ~ 2724.0 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Which local LLM can be run on the Studio M5 Ultra 256GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next, GLM-5.3-Flash (MoE) with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Studio M5 Ultra 256GB?</h3><p>Expected to consume approximately 300W under sustained load, with an actual range estimated between 220–430W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M5 Ultra 512GB: ₩38.05M Price and 256GB Comparison</title><link>https://localai.co.kr/en/hardware/mac-studio-m5-ultra-512gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-studio-m5-ultra-512gb</guid><description>A 512GB configuration of the same M5 Ultra, with capacity as the only change. We cover the ₩19.55 million gap to 256GB and when 6/8-bit weights or long caches justify it. In the 256GB measurements, Flash-Next at 4- and 5-bit fit in RAM, but 6- and 8-bit needed the PLE embedding table moved to the SSD. The point of 512GB is not a faster chip; it is keeping those high-precision weights and a large cache in memory. If you run 6- or 8-bit routinely or keep several models loaded at once, the ₩19.55 million gap is worth calculating.</description><content:encoded><![CDATA[<header><p>Orders opened October 28, 2026 · Orders opened October 28, 2026 · Updated 2026-11-01</p><h1>512GB provides room for workloads that do not fit in 256GB—not inherently faster memory.</h1><p>Mac Studio M5 Ultra 512GB: ₩38.05M Price and 256GB Comparison</p><p>In the 256GB measurements, Flash-Next at 4- and 5-bit fit in RAM, but 6- and 8-bit needed the PLE embedding table moved to the SSD. The point of 512GB is not a faster chip; it is keeping those high-precision weights and a large cache in memory. If you run 6- or 8-bit routinely or keep several models loaded at once, the ₩19.55 million gap is worth calculating.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>480GB</dd><dt>Memory bandwidth</dt><dd>1200GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 330W</dd><dt>Korean price range (KRW)</dt><dd>3,805–3,890 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Model files and prompt caches that will not fit in 256GB</li><li>Long contexts and multiple simultaneous workloads</li><li>Large unified-memory capacity in one Mac</li></ul><h2>Check before purchasing</h2><p>512GB costs ₩19.55 million more than 256GB. If the same model already fits comfortably in 256GB, that money does not make generation faster. If your budget is fixed, start from 256GB or 128GB. CUDA-only tools and extensions stay out of reach no matter how much unified memory you add.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Loading very large models</th><td>Conditional</td><td>Parameter count alone does not decide whether a model fits. The actual converted file size plus the KV cache and runtime overhead has to fit within 512GB.</td></tr><tr><th scope="row">Long documents and simultaneous workloads</th><td>Suitable</td><td>The memory left after loading a model can go to a long input cache or parallel requests. Measure single-request token generation speed and multi-request throughput separately.</td></tr><tr><th scope="row">Models that already fit in 256GB</th><td>Not recommended</td><td>If your work already runs on 256GB, moving to 512GB does not double generation speed. Start by calculating the capacity you need.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>512GB is the total of the unified memory. macOS, open apps, model weights and the KV cache all share this space. The 480GB shown here is headroom used for the calculation, not a figure Apple guarantees. If the same model fits comfortably in 256GB, 512GB does not raise generation speed in proportion.</p><h3>Recommended purchase setup</h3><p>M5 Ultra · 36-core CPU · 80-core GPU · 512GB unified memory · 1TB SSD ₩38,050,000 (2TB ₩38,900,000)</p><h3>Criteria for spending more money</h3><p>Published runs used about 155GB for Flash-Next oQ4e and about 179GB for oQ5e, so both work on 256GB. Choosing 512GB becomes clear mainly when you need 6- or 8-bit without SSD offload, or several large models and long caches resident at once. With a 1TB SSD, 512GB is ₩38.05 million and 256GB is ₩18.5 million, so judge whether ₩19.55 million is worth that workload.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>1630.2 ~ 1811.3 tok/s</td><td>0.30 to 0.55 seconds</td><td>7,488 ~ 13,721 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>oMLX 0.7.0 (4d4f5a28) · mlx-lm 94cdcae · mlx 0.32.2 · native kernels · Lightning MTP on</small></th><td>155GB</td><td>103.5 ~ 184.1 tok/s</td><td>0.65 to 1.2  seconds</td><td>3563.3 ~ 6334.7 tok/s</td></tr><tr><th scope="row">GLM-5.3-Flash (MoE)<br><small>oMLX 0.7.0 (4d4f5a28) · mlx-lm 94cdcae · mlx 0.32.2 · native kernels · Lightning MTP on</small></th><td>190.51GB</td><td>46.1 ~ 81.9 tok/s</td><td>1.4 to 2.5  seconds</td><td>1634.4 ~ 2905.6 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Is the M5 Ultra 512GB twice as fast as the 256GB configuration?</h3><p>No. With the same 36-core CPU, 80-core GPU, and 1.2TB/s memory bandwidth, the main benefit of 512GB is capacity. The practical difference can become substantial only when a workload runs out of memory or has to offload on the 256GB configuration.</p><h3>Which local LLM can be run on the Studio M5 Ultra 512GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next, GLM-5.3-Flash (MoE) with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM power of the Studio M5 Ultra 512GB?</h3><p>Expected to consume approximately 330W under sustained load, with an actual range estimated between 240–460W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M3 Ultra 512GB for Local LLMs: Is 256GB Enough?</title><link>https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb</guid><description>Compare the Mac Studio M3 Ultra 512GB with 256GB and 128GB alternatives for large local LLMs, including memory headroom, estimated speed, and buying configuration. It is worth considering when your model file, quantization, and prompt cache cannot fit together in a 256GB setup. Add the memory needed by other open apps before choosing 512GB. If you only plan to run one Qwen3.8-Flash-Next Q4 model, compare smaller-memory devices under the same conditions first.</description><content:encoded><![CDATA[<header><p>2025 model · 512GB · Officially released · Updated 2026-11-01</p><h1>Decide what needs 512GB before comparing the price of this Mac.</h1><p>Mac Studio M3 Ultra 512GB for Local LLMs: Is 256GB Enough?</p><p>Consider this machine when the combination of model, quantization, and prompt cache will not fit on a 256GB configuration but must run on one computer. Before buying for the 512GB label, add up the actual model files and memory used by other apps. If you only want to run one Qwen3.8-Flash-Next Q4 model, first compare smaller-memory configurations under the same conditions.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>480GB</dd><dt>Memory bandwidth</dt><dd>819GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 230W</dd><dt>Korean price range (KRW)</dt><dd>2,400–2,600 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Model and cache combinations that do not fit in 256GB</li><li>Keep several large models loaded on one computer</li><li>Large-memory workloads using macOS and MLX</li></ul><h2>Check before purchasing</h2><p>If your serving tools require CUDA, 512GB of unified memory will not solve the compatibility problem. A listed price for an Apple Certified Refurbished 512GB unit does not mean it is in stock. Check availability, SSD capacity, warranty, and the 80-core GPU configuration before ordering.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Large higher-precision models</th><td>Conditional</td><td>Check the exact quantized model file, KV cache, and runtime support rather than the model name or parameter count alone. A file that fits in memory is still unusable without a working execution path.</td></tr><tr><th scope="row">Keeping several models loaded</th><td>Suitable</td><td>The capacity can keep several models loaded, but being able to hold more models does not by itself increase token-generation speed for a single request.</td></tr><tr><th scope="row">Ordinary Q4 chat workloads</th><td>Not recommended</td><td>If you plan to run just one 27B or Qwen3.8-Flash-Next Q4 model, do not start with 512GB. Compare memory headroom and speed on a smaller machine at the context length you actually need.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>The 512GB is total unified memory shared by macOS, the model, and the prompt cache. This site's 480GB usable-memory figure is a planning allowance, not GPU-only memory guaranteed by Apple. If a model already fits comfortably on a smaller configuration, adding capacity alone will not increase generation speed proportionally.</p><h3>Recommended purchase setup</h3><p>M3 Ultra · 32-core CPU · 80-core GPU · 512GB unified memory · 2TB or larger SSD · Verify current stock</p><h3>Criteria for spending more money</h3><p>If one Qwen3.8-Flash-Next Q4 model is your goal, first check memory headroom and waiting time on a 128GB or 256GB machine. Paying for 512GB makes sense only when the actual model files and cache will not fit in a 256GB configuration. A displayed price for an out-of-stock refurbished M3 Ultra is not a price you can buy at. A new M5 Ultra 512GB is ₩38.05 million with a 1TB SSD. Compare that total with the refurbished M3 Ultra 512GB listing at the same storage capacity.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>MLX 4-bit</small></th><td>1.03GB</td><td>1112.6 ~ 1236.2 tok/s</td><td>0.47 to 0.63 seconds</td><td>6,467 ~ 8,732 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>MLX 4-bit</small></th><td>107.13GB</td><td>50 ~ 70.3 tok/s</td><td>3.3 to 4.5 seconds</td><td>910 ~ 1,229 tok/s</td></tr><tr><th scope="row">DeepSeek-V4.1-Flash<br><small>oMLX 0.7.0.dev2 · Lightning MTP on · Engram resident in RAM</small></th><td>435.16GB</td><td>23.1 ~ 41.0 tok/s</td><td>7.1 to 12.6  seconds</td><td>325.5 ~ 578.8 tok/s</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Which local LLM can be run on the Studio M3 Ultra 512GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next, DeepSeek-V4.1-Flash with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>What is the local LLM computing power of the Studio M3 Ultra 512GB?</h3><p>Expected to be around 230W under sustained load, with an actual range estimated between 180–270W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>NVIDIA DGX Spark 128GB Local LLM Selection Criteria</title><link>https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb</link><guid isPermaLink="true">https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb</guid><description>We determine memory loading, prefill and decode, CUDA compatibility, power, and two-unit expansion requirements when serving a large local LLM on DGX Spark 128GB. This is for handling a large model on one machine without splitting it across several graphics cards. You should have a reason to buy 128GB. If the model you need now fits in 24GB or 32GB, do not assume Spark will be faster just because it has more memory.</description><content:encoded><![CDATA[<header><p>ARM64·128GB · Official product specifications · Updated 2026-11-01</p><h1>Start by deciding whether you need CUDA for a model that cannot fit in 32GB.</h1><p>NVIDIA DGX Spark 128GB Local LLM Selection Criteria</p><p>This is for handling a large model on one machine without splitting it across several graphics cards. You should have a reason to buy 128GB. If the model you need now fits in 24GB or 32GB, do not assume Spark will be faster just because it has more memory.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Core specifications</h2><dl><dt>Available memory</dt><dd>116GB</dd><dt>Memory bandwidth</dt><dd>273GB/s</dd><dt>Estimated sustained local LLM load</dt><dd>about 190W</dd><dt>Korean price range (KRW)</dt><dd>952–1,030 × KRW 10,000</dd></dl></section><section><h2>Who it fits</h2><ul><li>Load models that need more than 32GB</li><li>CUDA and ARM64 serving development</li><li>Run on one machine without multiple GPUs</li></ul><h2>Check before purchasing</h2><p>Do not buy a Spark first if the tools you need are x86-only with no ARM64 execution path. Check the containers and extensions you will use on DGX OS. Connecting two units with a cable does not simply pool their memory; you need a setup that splits the model across them.</p></section><section><h2>What tasks is it suitable for?</h2><table><thead><tr><th>Workload</th><th>determination</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Large LLMs</th><td>Suitable</td><td>Judge fit from the combined size of the model file and input cache. Parameter count alone cannot establish whether it fits, and fitting is a separate question from response speed.</td></tr><tr><th scope="row">serving development</th><td>Suitable</td><td>First check that your model is supported by a Spark runtime and ARM64 packages. Copying a command from a desktop setup may not be all that is needed.</td></tr><tr><th scope="row">Create image</th><td>Conditional</td><td>Distinguish tasks that need large memory from tasks that need one image quickly. Choose after comparing GeForce with the same model and resolution.</td></tr></tbody></table></section><section><h2>Configuration Selection Criteria</h2><h3>The first bottleneck encountered</h3><p>128GB is the total memory shared by the CPU and GPU. The OS and input cache also need space, and more capacity does not give it the same model-reading bandwidth as GeForce. Compare single-request speed separately from the number of requests handled at once.</p><h3>Recommended purchase setup</h3><p>GB10 · 128GB unified memory · One complete system · Check SSD capacity and warranty for the listed configuration</p><h3>Criteria for spending more money</h3><p>If you only want one 27B chat session, try your existing PC or a single GPU first. If you need plenty of memory but not necessarily CUDA, the Ryzen AI Max+ 395 128GB is also worth comparing. Consider two Sparks after identifying the capacity or throughput that one unit cannot provide.</p></section><section><h2>4K context · Q4 model-specific expected performance</h2><table><thead><tr><th>Model</th><th>Required memory</th><th>Decode</th><th>First token</th><th>Prefill</th></tr></thead><tbody><tr><th scope="row">K2 Horizon 0.9B<br><small>llama.cpp · Q4_K_M</small></th><td>1.03GB</td><td>370.9 ~ 412.1 tok/s</td><td>0.39 to 0.71 seconds</td><td>5,754 ~ 10,533 tok/s</td></tr><tr><th scope="row">Qwen3.8-Flash-Next<br><small>llama.cpp · Q4_K_M</small></th><td>107.13GB</td><td>16.7 ~ 23.4 tok/s</td><td>2.7 to 4.9 seconds</td><td>839 ~ 1,535 tok/s</td></tr><tr><th scope="row">DeepSeek-V4.1-Flash<br><small>CUDA-cMoE · mmap demand paging · text only</small></th><td>264.514761248GB</td><td>2.8 tok/s · Published CUDA-cMoE reference</td><td>2155.8 s · Not a direct TTFT measurement</td><td>1.9 tok/s · Published CUDA-cMoE reference</td></tr></tbody></table><p>Single-user expected range and may vary depending on runtime, cooling, and quantization files.</p></section><section><h2>Frequently asked questions</h2><h3>Which local LLM can be run on DGX Spark 128GB?</h3><p>Compare K2 Horizon 0.9B, Qwen3.8-Flash-Next, DeepSeek-V4.1-Flash with a 4K input and the recommended format for each hardware platform. Required memory varies by model and context length.</p><h3>How much local LLM computing power does DGX Spark 128GB have?</h3><p>Expected to be around 190W under sustained load, with an actual range of 160–233W.</p><h3>Are the displayed token speeds ground truth?</h3><p>These ranges normalize collected benchmark measurements to the same conditions. Only combinations without matching measurements are estimated from nearby measured values. Results can vary by runtime, cooling, model file, and context length.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Bonsai 2 27B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/bonsai-2-27b</link><guid isPermaLink="true">https://localai.co.kr/en/models/bonsai-2-27b</guid><description>Compare estimated memory, prefill, token generation speed, quantization and 262,144-token context conditions for Bonsai 2 27B TERNARY_PQ2 across local hardware.</description><content:encoded><![CDATA[<header><p>TERNARY_PQ2 · 4K context</p><h1>Bonsai 2 27B: a 27.36B dense model · TERNARY_PQ2 estimated memory about 9GB</h1><p>Compare estimated memory, prefill, token generation speed, quantization and 262,144-token context conditions for Bonsai 2 27B TERNARY_PQ2 across local hardware.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated TERNARY_PQ2 memory</dt><dd>About 9GB</dd><dt>total parameters</dt><dd>27.36B</dd><dt>active parameter</dt><dd>27.36B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>A ternary-weight model derived from Qwen3.8-27B. The PQ2_0 language weights are 7.21 GB and require a Hadamard-aware runtime rather than stock llama.cpp. The speed experience prioritizes PrismML's published PQ2_0 measurements.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=bonsai-2-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=bonsai-2-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=bonsai-2-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek-V4.1-Flash local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/deepseek-v4-1-flash</link><guid isPermaLink="true">https://localai.co.kr/en/models/deepseek-v4-1-flash</guid><description>Compare documented DeepSeek-V4.1-Flash runs on Spark, an RTX 5090 with 128GB RAM, and an M3 Ultra with 256GB. Storage size, published decode measurements, and prefill availability are identified separately for each format.</description><content:encoded><![CDATA[<header><p>Device-specific formats · 4K context</p><h1>DeepSeek-V4.1-Flash: MoE with 16B active parameters per token out of 552B total · 264.5GB Q2_K file · Working-set memory unknown</h1><p>Compare documented DeepSeek-V4.1-Flash runs on Spark, an RTX 5090 with 128GB RAM, and an M3 Ultra with 256GB. Storage size, published decode measurements, and prefill availability are identified separately for each format.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Q2_K model file</dt><dd>264.5GB · memory-mapped paging</dd><dt>total parameters</dt><dd>552B</dd><dt>active parameter</dt><dd>16B</dd><dt>native context</dt><dd>1,048,576 tokens</dd></dl><p>An MoE model with a 552B backbone and separate Engram tables. Published runs on Spark, RTX 5090, and high-memory Macs are separated by hardware and format, including experimental paths that require SSD streaming and dedicated runtimes.</p></section><section><h2>Main equipment</h2><ul><li>DGX Spark 128GB — available 116GB, 273GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-dgx-spark-128gb&amp;model=deepseek-v4-1-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">Price, power, and sales composition</a></li><li>Studio M3 Ultra 512GB — available 480GB, 819GB/s · <a href="https://localai.co.kr/en/speed?hardware=mac-studio-m3-ultra-512gb&amp;model=deepseek-v4-1-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ling-3.0-flash-VL local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/ling-3-0-flash-vl</link><guid isPermaLink="true">https://localai.co.kr/en/models/ling-3-0-flash-vl</guid><description>Compare estimated memory, prefill, decode speed, quantization and 131,072-token context for Ling-3.0-flash-VL in MXFP4.</description><content:encoded><![CDATA[<header><p>MXFP4 · 4K context</p><h1>Ling-3.0-flash-VL: MoE model with 124.848460496B total / 5.1B active per token · MXFP4 estimated memory about 71GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 131,072-token context for Ling-3.0-flash-VL in MXFP4.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated MXFP4 memory</dt><dd>About 71GB</dd><dt>total parameters</dt><dd>124.848460496B</dd><dt>active parameter</dt><dd>5.1B</dd><dt>native context</dt><dd>131,072 Token</dd></dl><p>An image/video-input MoE model with about 124.85B total and 5.1B active parameters. Native context is 128K. Only official DGX Spark INT4/MXFP4 measurements anchor the speed experience; rates are not transferred to other hardware.</p></section><section><h2>Main equipment</h2><ul><li>DGX Spark 128GB — available 116GB, 273GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-dgx-spark-128gb&amp;model=ling-3-0-flash-vl">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MiniCPM5-2B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/minicpm5-2b</link><guid isPermaLink="true">https://localai.co.kr/en/models/minicpm5-2b</guid><description>Compare estimated memory, prefill, decode speed, quantization and 131,072-token context for MiniCPM5-2B in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>MiniCPM5-2B: 2.51675648B dense model · Q4_K_M estimated memory about 3GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 131,072-token context for MiniCPM5-2B in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 3GB</dd><dt>total parameters</dt><dd>2.51675648B</dd><dt>active parameter</dt><dd>2.51675648B</dd><dt>native context</dt><dd>131,072 Token</dd></dl><p>A dense open-weight model with 2.51675648B parameters and a native 131,072-token context. Displayed memory and generation speeds are estimates based on quantization and hardware specifications, not measured results.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=minicpm5-2b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=minicpm5-2b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=minicpm5-2b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/minicpm5-2b-serving-recipe">A safe local starting point for MiniCPM5-2B Q4_K_M</a></p><p><a href="https://localai.co.kr/en/speed?model=minicpm5-2b">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/qwen-3.8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/models/qwen-3.8-27b</guid><description>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.8 27B in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Qwen3.8 27B: 27B dense model · Q4_K_M estimated memory about 18GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.8 27B in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 18GB</dd><dt>total parameters</dt><dd>27B</dd><dt>active parameter</dt><dd>27B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>27B dense open weight model with built-in multi-stage multi-token prediction (MTP) learning head. Supports native 262,144 (256K) token contexts.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=qwen-3.8-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=qwen-3.8-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=qwen-3.8-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></p><p><a href="https://localai.co.kr/en/speed?model=qwen-3.8-27b">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-Flash-Next local LLM: specs and speed</title><link>https://localai.co.kr/en/models/qwen-3.8-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/models/qwen-3.8-flash-next</guid><description>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.8-Flash-Next in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Qwen3.8-Flash-Next: MoE model with 125B total / 6B active per token · Q4_K_M estimated memory about 108GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.8-Flash-Next in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 108GB</dd><dt>total parameters</dt><dd>125B</dd><dt>active parameter</dt><dd>6B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>Approximately 180B resident weight MoE model consisting of 125B core LMs (6B active) with 51B n-gram/PLE embeddings and 4B MTPs built into the architecture. The built-in 51B PLE embedding table is RAM offloadable and is independent of the Prompt Lookup speculative decoding that looks for repeated prompt phrases.</p></section><section><h2>Main equipment</h2><ul><li>MBP M3 Max 128GB — available 114GB, 400GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-pro-m3-max-128gb&amp;model=qwen-3.8-flash-next">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-pro-m3-max-128gb">Price, power, and sales composition</a></li><li>RTX PRO 6000 96GB — available 93GB, 1792GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-pro-6000-blackwell-96gb&amp;model=qwen-3.8-flash-next">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-pro-6000-blackwell-96gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></p><p><a href="https://localai.co.kr/en/speed?model=qwen-3.8-flash-next">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4 12B local LLM: specs, speed, quantization</title><link>https://localai.co.kr/en/models/gemma-4-12b</link><guid isPermaLink="true">https://localai.co.kr/en/models/gemma-4-12b</guid><description>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Gemma 4 12B in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Gemma 4 12B: 11.95B dense model · Q4_K_M estimated memory about 8GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Gemma 4 12B in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 8GB</dd><dt>total parameters</dt><dd>11.95B</dd><dt>active parameter</dt><dd>11.95B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>A single 11.95B parameter dense model supports 256K (262,144) native contexts. High-speed standalone operation is possible in 16GB~24GB GPU and Mac environments.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=gemma-4-12b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=gemma-4-12b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=gemma-4-12b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</a></p><p><a href="https://localai.co.kr/en/speed?model=gemma-4-12b">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4 26B-A4B (MoE) Local LLM Recommended Specifications·Speed·Quantization</title><link>https://localai.co.kr/en/models/gemma-4-26b-a4b</link><guid isPermaLink="true">https://localai.co.kr/en/models/gemma-4-26b-a4b</guid><description>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Gemma 4 26B-A4B (MoE) in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Gemma 4 26B-A4B (MoE): MoE model with 25.2B total / 3.8B active per token · Q4_K_M estimated memory about 16GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Gemma 4 26B-A4B (MoE) in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 16GB</dd><dt>total parameters</dt><dd>25.2B</dd><dt>active parameter</dt><dd>3.8B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>This is an MoE model in which 3.8B of the total 25.2B parameters are activated per token. Supports 256K (262,144) native contexts and provides fast decoding per load.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=gemma-4-26b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=gemma-4-26b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=gemma-4-26b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/gemma-4-26b-a4b-serving-recipe">Gemma 4 26B-A4B MTP: How Speed Changes Between One and Many Requests</a></p><p><a href="https://localai.co.kr/en/speed?model=gemma-4-26b-a4b">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.6 35B-A3B (MoE): local LLM speed and memory</title><link>https://localai.co.kr/en/models/qwen-3.6-35b-a3b</link><guid isPermaLink="true">https://localai.co.kr/en/models/qwen-3.6-35b-a3b</guid><description>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.6 35B-A3B (MoE) in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Qwen3.6 35B-A3B (MoE): MoE model with 35B total / 3B active per token · Q4_K_M estimated memory about 22GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 262,144-token context for Qwen3.6 35B-A3B (MoE) in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 22GB</dd><dt>total parameters</dt><dd>35B</dd><dt>active parameter</dt><dd>3B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>This is an MoE model in which approximately 3B of the total 35B parameters are activated per token. Memory loading requires 35B capacity, and decoding bandwidth is consumed based on 3B active parameters.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=qwen-3.6-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=qwen-3.6-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=qwen-3.6-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></p><p><a href="https://localai.co.kr/en/speed?model=qwen-3.6-35b-a3b">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GLM-5.3-Flash (MoE) Local LLM Recommended Specifications·Speed·Quantization</title><link>https://localai.co.kr/en/models/glm-5.3-flash</link><guid isPermaLink="true">https://localai.co.kr/en/models/glm-5.3-flash</guid><description>Compare estimated memory, prefill, decode speed, quantization and 1,048,576-token context for GLM-5.3-Flash (MoE) in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>GLM-5.3-Flash (MoE): MoE model with 320B total / 18B active per token · Q4_K_M estimated memory about 191GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 1,048,576-token context for GLM-5.3-Flash (MoE) in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 191GB</dd><dt>total parameters</dt><dd>320B</dd><dt>active parameter</dt><dd>18B</dd><dt>native context</dt><dd>1,048,576 tokens</dd></dl><p>Hybrid sparse+linear attention MoE model with a total of 320B parameters (18B active). Supports the official 1,048,576 (1M) token context (text_config.max_position_embeddings) and loads in large memory environments of 256GB or more.</p></section><section><h2>Main equipment</h2><ul><li>2× A40 96GB (NVLink) — available 92GB, 1392GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-a40-96gb&amp;model=glm-5.3-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-a40-96gb">Price, power, and sales composition</a></li><li>Studio M3 Ultra 512GB — available 480GB, 819GB/s · <a href="https://localai.co.kr/en/speed?hardware=mac-studio-m3-ultra-512gb&amp;model=glm-5.3-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></p><p><a href="https://localai.co.kr/en/speed?model=glm-5.3-flash">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek-V4-Flash-0731 (MoE) Local LLM Recommended Specifications·Speed·Quantization</title><link>https://localai.co.kr/en/models/deepseek-v4-flash</link><guid isPermaLink="true">https://localai.co.kr/en/models/deepseek-v4-flash</guid><description>Compare estimated memory, prefill, decode speed, quantization and 1,048,576-token context for DeepSeek-V4-Flash-0731 (MoE) in Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>DeepSeek-V4-Flash-0731 (MoE): MoE model with 304B total / 13B active per token · Q4_K_M estimated memory about 181GB</h1><p>Compare estimated memory, prefill, decode speed, quantization and 1,048,576-token context for DeepSeek-V4-Flash-0731 (MoE) in Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 181GB</dd><dt>total parameters</dt><dd>304B</dd><dt>active parameter</dt><dd>13B</dd><dt>native context</dt><dd>1,048,576 tokens</dd></dl><p>Large MoE model with a total of 304B parameters (13B active) supporting 1,048,576 (1M) token contexts (max_position_embeddings). The official example uses 4×GB300 nodes, and the community compressed version must be checked separately for actual size and runtime compatibility for each artifact.</p></section><section><h2>Main equipment</h2><ul><li>2× A40 96GB (NVLink) — available 92GB, 1392GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-a40-96gb&amp;model=deepseek-v4-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-a40-96gb">Price, power, and sales composition</a></li><li>Studio M5 Ultra 256GB — available 236GB, 1200GB/s <a href="https://localai.co.kr/en/speed?hardware=mac-studio-m5-ultra-256gb&amp;model=deepseek-v4-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Price, power, and sales composition</a></li><li>Studio M3 Ultra 512GB — available 480GB, 819GB/s · <a href="https://localai.co.kr/en/speed?hardware=mac-studio-m3-ultra-512gb&amp;model=deepseek-v4-flash">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Price, power, and sales composition</a></li></ul></section><section><h2>Speed tuning for each device</h2><p>When selecting equipment, you can view quantization, safe context, GPU offloading, Flash Attention, KV cache, and batch start values together.</p><p><a href="https://localai.co.kr/en/guides/deepseek-v4-flash-serving-recipe">DeepSeek-V4-Flash: distributed serving for a 304B model</a></p><p><a href="https://localai.co.kr/en/speed?model=deepseek-v4-flash">Verify prefill and token generation speed of this model</a></p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Holo4 27B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/holo4-27b</link><guid isPermaLink="true">https://localai.co.kr/en/models/holo4-27b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 262,144-token context for Holo4 27B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Holo4 27B: a 27B dense model · Q4_K_M estimated memory about 18GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 262,144-token context for Holo4 27B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 18GB</dd><dt>total parameters</dt><dd>27B</dd><dt>active parameter</dt><dd>27B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>It is a 27B dense computer usage model that handles web, desktop, and mobile screen manipulation as well as code and tool calls. Automation is not complete with models alone; you need an executor with screen capture, input tools, and acceptance boundaries.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=holo4-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=holo4-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=holo4-27b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Holo4 35B-A3B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/holo4-35b-a3b</link><guid isPermaLink="true">https://localai.co.kr/en/models/holo4-35b-a3b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 262,144-token context for Holo4 35B-A3B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>Holo4 35B-A3B: an MoE model with 3B active parameters per token out of 35B total · Q4_K_M estimated memory about 22GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 262,144-token context for Holo4 35B-A3B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 22GB</dd><dt>total parameters</dt><dd>35B</dd><dt>active parameter</dt><dd>3B</dd><dt>native context</dt><dd>262,144 tokens</dd></dl><p>A computer-enabled MoE model that activates approximately 3B per token out of a total of 35B. The activation parameter describes the amount of computation, and local loading requires full weights and vision/KV cache headroom.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=holo4-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=holo4-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=holo4-35b-a3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LFM2.5-VL-3B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/lfm2-5-vl-3b</link><guid isPermaLink="true">https://localai.co.kr/en/models/lfm2-5-vl-3b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 32,768-token context for LFM2.5-VL-3B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>LFM2.5-VL-3B: a 3B dense model · Q4_K_M estimated memory about 3GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 32,768-token context for LFM2.5-VL-3B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 3GB</dd><dt>total parameters</dt><dd>3B</dd><dt>active parameter</dt><dd>3B</dd><dt>native context</dt><dd>32,768 tokens</dd></dl><p>It is a roughly 3B vision language model designed to quickly process single, short requests such as OCR, document layout, and image description. Using a separate DSpark draft model speeds up decode on supported devices.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=lfm2-5-vl-3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=lfm2-5-vl-3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=lfm2-5-vl-3b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon 0.9B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/k2-horizon-0-9b</link><guid isPermaLink="true">https://localai.co.kr/en/models/k2-horizon-0-9b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 131,072-token context for K2 Horizon 0.9B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>K2 Horizon 0.9B: a 0.9B dense model · Q4_K_M estimated memory about 2GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 131,072-token context for K2 Horizon 0.9B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 2GB</dd><dt>total parameters</dt><dd>0.9B</dd><dt>active parameter</dt><dd>0.9B</dd><dt>native context</dt><dd>131,072 Token</dd></dl><p>This is the smallest compact model in the K2 Horizon family. It is a first candidate for lightweight classification/summarization/local automation, and a distinction must be made between long context limits and the context length to be maintained on actual devices.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=k2-horizon-0-9b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=k2-horizon-0-9b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=k2-horizon-0-9b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon 3.7B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/k2-horizon-3-7b</link><guid isPermaLink="true">https://localai.co.kr/en/models/k2-horizon-3-7b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 3.7B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>K2 Horizon 3.7B: a 3.7B dense model · Q4_K_M estimated memory about 3GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 3.7B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 3GB</dd><dt>total parameters</dt><dd>3.7B</dd><dt>active parameter</dt><dd>3.7B</dd><dt>native context</dt><dd>524,288 Token</dd></dl><p>A compact dense model that provides 512K native contexts. It's easy to start with small memories, but longer inputs require larger KV cache and prefill times, so you'll need to start with shorter baselines and increase them.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=k2-horizon-3-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=k2-horizon-3-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=k2-horizon-3-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon 7B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/k2-horizon-7b</link><guid isPermaLink="true">https://localai.co.kr/en/models/k2-horizon-7b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 7B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>K2 Horizon 7B: a 7B dense model · Q4_K_M estimated memory about 6GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 7B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 6GB</dd><dt>total parameters</dt><dd>7B</dd><dt>active parameter</dt><dd>7B</dd><dt>native context</dt><dd>524,288 Token</dd></dl><p>A 7B dense model that sits between quality and local execution burden. We support the official 512K contexts, but on desktops it is better for responsiveness and memory management to limit this to the length required for the task.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=k2-horizon-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=k2-horizon-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 16GB — available 13GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-16gb&amp;model=k2-horizon-7b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-16gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon 32B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/k2-horizon-32b</link><guid isPermaLink="true">https://localai.co.kr/en/models/k2-horizon-32b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 32B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>K2 Horizon 32B: a 32B dense model · Q4_K_M estimated memory about 21GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon 32B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>About 21GB</dd><dt>total parameters</dt><dd>32B</dd><dt>active parameter</dt><dd>32B</dd><dt>native context</dt><dd>524,288 Token</dd></dl><p>This is a 32B dense model of K2 Horizon. On 24GB devices, check Q4 and short context first, and if you want to use long inputs and simultaneous requests, you should also check the available memory of 32GB or more.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=k2-horizon-32b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=k2-horizon-32b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=k2-horizon-32b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon MoVA 36B-A4B local LLM: specs, speed, memory</title><link>https://localai.co.kr/en/models/k2-horizon-mova-36b-a4b</link><guid isPermaLink="true">https://localai.co.kr/en/models/k2-horizon-mova-36b-a4b</guid><description>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon MoVA 36B-A4B Q4_K_M.</description><content:encoded><![CDATA[<header><p>Q4_K_M · 4K context</p><h1>K2 Horizon MoVA 36B-A4B: an MoE model with 4B active parameters per token out of 36B total · Q4_K_M estimated memory about 22GB</h1><p>Compare estimated memory, hardware-specific prefill and token generation speed, quantization, and a 524,288-token context for K2 Horizon MoVA 36B-A4B Q4_K_M.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Model specifications</h2><dl><dt>Estimated Q4_K_M memory</dt><dd>about 22GB</dd><dt>total parameters</dt><dd>36B</dd><dt>active parameter</dt><dd>4B</dd><dt>native context</dt><dd>524,288 Token</dd></dl><p>This is a MoE model with a MoVA structure that activates approximately 4B per token out of a total of 36B. The decode computation is lightweight, but the full weights must be accessible in memory, and the official server example is the multi-GPU route.</p></section><section><h2>Main equipment</h2><ul><li>RTX 5060 8GB — available 7.25GB, 448GB/s · <a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5060-8gb&amp;model=k2-horizon-mova-36b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-8gb">Price, power, and sales composition</a></li><li>2× RTX 5090 64GB (PCIe) — available 61GB, 3584GB/s <a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=k2-horizon-mova-36b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">Price, power, and sales composition</a></li><li>MBA M4 24GB — available 20GB, 120GB/s · <a href="https://localai.co.kr/en/speed?hardware=macbook-air-m4-24gb&amp;model=k2-horizon-mova-36b-a4b">Feel the speed</a> · <a href="https://localai.co.kr/en/hardware/macbook-air-m4-24gb">Price, power, and sales composition</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Direct comparison of local LLM equipment creation speeds</title><link>https://localai.co.kr/en/compare/hardware-speed-comparison</link><guid isPermaLink="true">https://localai.co.kr/en/compare/hardware-speed-comparison</guid><description>Pick two machines and models and compare the prefill, first token, token generation and overall completion times for the same inputs on both sides simultaneously. Start the same model at the same moment and check the difference not only in the numbers but also in the speed at which the actual answer is delivered.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Direct comparison of local LLM equipment creation speeds</h1><p>Start the same model at the same moment and check the difference not only in the numbers but also in the speed at which the actual answer is delivered.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Mac mini M4 Pro 64GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>56GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 95W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>412–620 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Mac mini M4 Pro 64GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Mac mini M4 Pro 64GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>The Mac mini M4 Pro 64GB is a complete system, while the RTX 5090 32GB is a GPU-only unit. The GPU-only price should be compared after adding the base system cost.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-pro-64gb">Mac mini M4 Pro 64GB local LLM speed, memory, electricity bill</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Mini M4 32GB vs M4 Pro 48GB Local LLM Comparison</title><link>https://localai.co.kr/en/compare/mac-mini-m4-32gb-vs-m4-pro-48gb</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-mini-m4-32gb-vs-m4-pro-48gb</guid><description>Compare the capacity, prefill, token generation speed, power consumption, and price differences between the 27B and 35B models for the Mac Mini M4 32GB and M4 Pro 48GB. When considering only price and 27B capacity, the Mac Mini M4 32GB offers 35B headroom and bandwidth. However, if you need bandwidth, the Mac Mini M4 Pro 48GB is the better choice.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Mac Mini M4 32GB vs M4 Pro 48GB Local LLM Comparison</h1><p>If you look at the price and 27B capacity, the M4 32GB is the right choice. If you want 35B space and bandwidth, the M4 Pro 48GB is the right choice.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Mac mini M4 32GB</th><th>Mac mini M4 Pro 48GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>27GB</td><td>41GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>120GB/s</td><td>273GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 48W</td><td>about 92W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>180–240 × KRW 10,000</td><td>263–344 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Mac mini M4 Pro 48GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Mac mini M4 32GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Mac mini M4 32GB is about ₩940,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-32gb">Mac Mini M4 32GB Local LLM 27B Running Performance</a></li><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-pro-48gb">Mac Mini M4 Pro 48GB Local LLM 27B·35B Performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 3090 vs RTX 5090 local LLM performance and electricity rate comparison</title><link>https://localai.co.kr/en/compare/rtx-3090-vs-rtx-5090-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-3090-vs-rtx-5090-local-llm</guid><description>Compare the available models, token speeds, electricity bills, and purchase costs of the 24GB used RTX 3090 and 32GB RTX 5090. If cost-effectiveness is a priority within 24GB, the 3090 is advantageous, and if 27B speed and 32GB storage space are important, the 5090 is advantageous.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 3090 vs RTX 5090 local LLM performance and electricity rate comparison</h1><p>If cost-effectiveness is a priority within 24GB, the 3090 is advantageous, and if 27B speed and 32GB storage space are important, the 5090 is advantageous.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 3090 24GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>22.5GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>936GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 420W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>239–239 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 5090 32GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 3090 24GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 3090 24GB is about ₩6,750,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 for local AI: keep it or buy used?</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>2× RTX 3090 vs RTX 5090 Local LLM Comparison</title><link>https://localai.co.kr/en/compare/dual-rtx-3090-vs-rtx-5090</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dual-rtx-3090-vs-rtx-5090</guid><description>We compare the model payload, distribution bottleneck, generation speed, power, and overall deployment cost of the 48GB dual RTX 3090 and the 32GB single RTX 5090. If putting a large model is your priority, two 3090s are right, and if single GPU speed and simple configuration are your priorities, one 5090 is right for you.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>2× RTX 3090 vs RTX 5090 Local LLM Comparison</h1><p>If putting a large model is your priority, two 3090s are right, and if single GPU speed and simple configuration are your priorities, one 5090 is right for you.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>2× RTX 3090 48GB (NVLink)</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>45GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1872GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 780W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>478–478 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>2× RTX 3090 48GB (NVLink)</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5090 32GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>2× RTX 3090 48GB (NVLink) consists of 2 GPUs, while RTX 5090 32GB is a single GPU price. When comparing single GPU prices, the base cost of the GPU itself must be added.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-3090-48gb">2× NVIDIA GeForce RTX 3090 NVLink 48GB local LLM speed·memory·electricity cost</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4090 vs RTX 5090 local LLM speed/VRAM comparison</title><link>https://localai.co.kr/en/compare/rtx-4090-vs-rtx-5090-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-4090-vs-rtx-5090-local-llm</guid><description>Compare the loadability, token generation speed, power consumption and market price of the 27B and 35B models of the RTX 4090 24GB and RTX 5090 32GB. If it's a 24GB model, the 4090 or mid-range might be reasonable, and if you need a 32GB loading limit, it's narrowed down to the 5090.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 4090 vs RTX 5090 local LLM speed/VRAM comparison</h1><p>If it's a 24GB model, the 4090 or mid-range might be reasonable, and if you need a 32GB loading limit, it's narrowed down to the 5090.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 4090 24GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>22.5GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1008GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 470W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>325–400 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 5090 32GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 4090 24GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 4090 24GB is about ₩5,510,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB local LLM and image creation performance</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>NVIDIA DGX Spark vs Mac Studio 128GB Local LLM Comparison</title><link>https://localai.co.kr/en/compare/dgx-spark-vs-mac-studio-128gb</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dgx-spark-vs-mac-studio-128gb</guid><description>Compare the large model load, CUDA·MLX environment, token speed, power, and cost of DGX Spark 128GB and Mac Studio M4 Max 128GB. If you need a CUDA development environment and the NVIDIA ecosystem, DGX Spark is the right choice, and if a quiet finished product and MLX usability are important, Mac Studio is the right choice.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>NVIDIA DGX Spark vs Mac Studio 128GB Local LLM Comparison</h1><p>If you need a CUDA development environment and the NVIDIA ecosystem, DGX Spark is the right choice, and if a quiet finished product and MLX usability are important, Mac Studio is the right choice.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>DGX Spark 128GB</th><th>Studio M4 Max 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>116GB</td><td>114GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>546GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 190W</td><td>about 130W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>952–1,030 × KRW 10,000</td><td>780–888 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>DGX Spark 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M4 Max 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M4 Max 128GB is about ₩1,570,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">NVIDIA DGX Spark 128GB Local LLM Selection Criteria</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb">Mac Studio M4 Max 128GB local LLM large model performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DGX Spark 1 vs 2 Local LLM Serving Comparison</title><link>https://localai.co.kr/en/compare/dgx-spark-one-vs-two</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dgx-spark-one-vs-two</guid><description>Compare the model loading range, expected prefill/token generation speed, power and cost differences between one DGX Spark and two units connected via ConnectX-7 under the same conditions. The two-machine configuration has two 128GB nodes rather than a single 256GB memory. This is advantageous when larger models and throughput headroom are the goal, and the rate of a single request is not immediately doubled.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>DGX Spark 1 vs 2 Local LLM Serving Comparison</h1><p>The two-machine configuration has two 128GB nodes rather than a single 256GB memory. This is advantageous when larger models and throughput headroom are the goal, and the rate of a single request is not immediately doubled.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>DGX Spark 128GB</th><th>2× DGX Spark 256GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>116GB</td><td>232GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>546GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 190W</td><td>about 380W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>952–1,030 × KRW 10,000</td><td>1,904–2,060 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>2× DGX Spark 256GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>DGX Spark 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>DGX Spark 128GB is about ₩9,910,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">NVIDIA DGX Spark 128GB Local LLM Selection Criteria</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-dgx-spark-256gb">2× NVIDIA DGX Spark cluster 256GB local LLM speed·memory·electricity cost</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DGX Spark 2 vs 2× RTX 5090 Local LLM Comparison</title><link>https://localai.co.kr/en/compare/dual-dgx-spark-vs-dual-rtx-5090</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dual-dgx-spark-vs-dual-rtx-5090</guid><description>We compare the large model payload, distributed inference, generation speed, power, and deployment difficulty of 256GB dual DGX Spark and 64GB dual RTX 5090. Two DGX Sparks are advantageous for ultra-large model loading, and two RTX 5090s are advantageous for CUDA processing speed within 64GB.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>DGX Spark 2 vs 2× RTX 5090 Local LLM Comparison</h1><p>Two DGX Sparks are advantageous for ultra-large model loading, and two RTX 5090s are advantageous for CUDA processing speed within 64GB.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>2× DGX Spark 256GB</th><th>2× RTX 5090 64GB (PCIe)</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>232GB</td><td>61GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>546GB/s</td><td>3584GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 380W</td><td>about 1100W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>1,904–2,060 × KRW 10,000</td><td>1,798–1,858 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>2× DGX Spark 256GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>2× DGX Spark 256GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>2× DGX Spark 256GB is a complete system, 2× RTX 5090 64GB (PCIe) is the price for 2 GPU units. When comparing GPU units, the base unit cost must be added.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-dgx-spark-256gb">2× NVIDIA DGX Spark cluster 256GB local LLM speed·memory·electricity cost</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">2× NVIDIA GeForce RTX 5090 PCIe 64GB local LLM speed·memory·electricity cost</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ryzen AI Max+ 395 128GB vs Mac Studio 128GB comparison</title><link>https://localai.co.kr/en/compare/ryzen-ai-max-395-vs-mac-studio-128gb</link><guid isPermaLink="true">https://localai.co.kr/en/compare/ryzen-ai-max-395-vs-mac-studio-128gb</guid><description>Compare the large local LLM speed, runtime support, power, and price of the 128GB integrated memory AMD Strix Halo and the Mac Studio M4 Max. If you prioritize Windows/Linux compatibility and price, Ryzen AI Max+ is advantageous, and if you prioritize memory bandwidth and MLX completeness, Mac Studio is advantageous.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Ryzen AI Max+ 395 128GB vs Mac Studio 128GB comparison</h1><p>If you prioritize Windows/Linux compatibility and price, Ryzen AI Max+ is advantageous, and if you prioritize memory bandwidth and MLX completeness, Mac Studio is advantageous.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Ryzen AI Max+ 395 128GB</th><th>Studio M4 Max 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>96GB</td><td>114GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>256GB/s</td><td>546GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 125W</td><td>about 130W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>538–562 × KRW 10,000</td><td>780–888 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M4 Max 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Ryzen AI Max+ 395 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Ryzen AI Max+ 395 128GB is about ₩2,840,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/amd-ryzen-ai-max-plus-395-128gb">Ryzen AI Max+ 395 128GB local LLM cost-effectiveness</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb">Mac Studio M4 Max 128GB local LLM large model performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>NVIDIA A40 48GB vs 2× RTX 3090 Local LLM Comparison</title><link>https://localai.co.kr/en/compare/a40-48gb-vs-dual-rtx-3090</link><guid isPermaLink="true">https://localai.co.kr/en/compare/a40-48gb-vs-dual-rtx-3090</guid><description>We compare the loading, multi-GPU bottleneck, cooling, power and used build costs of two models: a single 48GB A40 and a 24GB RTX 3090. If you want a single 48GB VRAM and a server environment, you could look at the A40, and if you value component accessibility and total bandwidth, you could look at the two 3090s.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>NVIDIA A40 48GB vs 2× RTX 3090 Local LLM Comparison</h1><p>If you want a single 48GB VRAM and a server environment, you could look at the A40, and if you value component accessibility and total bandwidth, you could look at the two 3090s.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>NVIDIA A40 48GB</th><th>2× RTX 3090 48GB (NVLink)</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>46GB</td><td>45GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>696GB/s</td><td>1872GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 400W</td><td>about 780W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>630–630 × KRW 10,000</td><td>478–478 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>NVIDIA A40 48GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>NVIDIA A40 48GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>NVIDIA A40 48GB is a single GPU unit, while 2× RTX 3090 48GB (with NVLink) consists of two GPUs at a single price. When comparing, the cost of the GPU unit must include the base unit cost.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-a40-48gb">NVIDIA A40 48GB local LLM speed, memory, electricity rate</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-3090-48gb">2× NVIDIA GeForce RTX 3090 NVLink 48GB local LLM speed·memory·electricity cost</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DGX Spark vs RTX 5090: Which fits your local LLM?</title><link>https://localai.co.kr/en/compare/dgx-spark-vs-rtx-5090-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dgx-spark-vs-rtx-5090-local-llm</guid><description>Compare DGX Spark 128GB and RTX 5090 32GB with the same model and input length. Check model fit, time to first token, generation speed, current prices and power consumption. If you need a large model, start with configurations that fit Spark's 128GB memory. If the model fits the 5090's 32GB, compare speed with the same model and input, and include the cost of the PC around the GPU.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>DGX Spark vs RTX 5090: Which fits your local LLM?</h1><p>If you need a large model, start with configurations that fit Spark's 128GB memory. If the model fits the 5090's 32GB, compare speed with the same model and input, and include the cost of the PC around the GPU.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>DGX Spark 128GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>116GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 190W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>952–1,030 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>DGX Spark 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>DGX Spark 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>DGX Spark 128GB is the price of finished product, RTX 5090 32GB is the price of GPU separately. For individual GPUs, you need to add the cost of the main body before comparing.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">NVIDIA DGX Spark 128GB Local LLM Selection Criteria</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX PRO 6000 vs RTX 5090: Do you need 96GB for local LLMs?</title><link>https://localai.co.kr/en/compare/rtx-pro-6000-vs-rtx-5090-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-pro-6000-vs-rtx-5090-local-llm</guid><description>Compare model capacity, optimized inference speed, power and prices for RTX PRO 6000 96GB and RTX 5090 32GB. For a model and conversation that fit in 32GB, compare the 5090's speed first. The PRO 6000's 96GB becomes valuable when you need a larger model on one card or room for long contexts and multiple requests.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX PRO 6000 vs RTX 5090: Do you need 96GB for local LLMs?</h1><p>For a model and conversation that fit in 32GB, compare the 5090's speed first. The PRO 6000's 96GB becomes valuable when you need a larger model on one card or room for long contexts and multiple requests.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX PRO 6000 96GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>93GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1792GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 650W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>2,550–2,647 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX PRO 6000 96GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5090 32GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5090 32GB is about ₩16,850,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-pro-6000-blackwell-96gb">NVIDIA RTX PRO 6000 Blackwell 96GB local LLM speed/memory/electricity rate</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Start with the workload that needs 96GB</h2><p>The buying decision differs between a model such as Qwen3.8-27B with compact quantized files and models with weights spanning many tens of GB. The PRO 6000 has a clear purpose when your chosen file and KV cache exceed one 5090. Check capacity across models, then compare first response and generation for a model that fits both cards.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Match the fast runtime to its model file</h2><p>Both cards are based on Blackwell, but the path depends on the runtime and model format. Check the configuration actually selected by the comparison, including Strata, NVFP4 or MTP, and prepare its matching file. Follow the runtime's guide rather than putting a GGUF file with the same model name into a different engine.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Evaluate the premium against larger models</h2><p>Before paying the PRO 6000 premium, list what it would make possible: reading a long report in one request, keeping a larger model resident or serving several requests. If a 5090 already delivers the answers you need, compare the effect of context and runtime tuning before replacing the card.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5080 vs RTX 5090: Is 16GB enough for local AI?</title><link>https://localai.co.kr/en/compare/rtx-5080-vs-rtx-5090-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5080-vs-rtx-5090-local-llm</guid><description>Vary model size and context to compare speed, memory and prices on RTX 5080 16GB and RTX 5090 32GB. The central choice is the capacity difference between 16GB and 32GB. Compare the 5080 first for smaller models; check the 5090's headroom when combining larger quantized files with long conversations.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 5080 vs RTX 5090: Is 16GB enough for local AI?</h1><p>The central choice is the capacity difference between 16GB and 32GB. Compare the 5080 first for smaller models; check the 5090's headroom when combining larger quantized files with long conversations.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5080 16GB</th><th>RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>30.5GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>960GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>About 352W</td><td>about 620W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>231–239 × KRW 10,000</td><td>899–929 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 5090 32GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5080 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5080 16GB is about ₩6,790,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5080-16gb">NVIDIA GeForce RTX 5080 16GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Exceeding 16GB changes the execution path</h2><p>If the 5080 runs out of memory, options include a smaller quantization or moving part of the model to system RAM. File choice, CPU and RAM then matter together. Check whether the same file fits in the 5090's VRAM to judge how much its price premium reduces offloading.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Compare small and large models separately</h2><p>Start with a model that runs on both cards and compare short-answer generation. Switch to the larger model you actually want and inspect placement and first response. Finally increase context to check conversation headroom after loading. This separates a speed upgrade from a capacity upgrade.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Include costs outside the graphics card</h2><p>Even a card-only upgrade requires checking PSU capacity, cables and case space. Include a planned RAM upgrade too. Distinguish card prices below from the cost of a finished PC, and compare sustained power if the machine will stay on for long periods.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5070 Ti vs RTX 5080: How do two 16GB GPUs compare for LLMs?</title><link>https://localai.co.kr/en/compare/rtx-5070-ti-vs-rtx-5080-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5070-ti-vs-rtx-5080-local-llm</guid><description>Compare prefill, generation, memory bandwidth and prices for the two 16GB GPUs, RTX 5070 Ti and RTX 5080. Both have the same VRAM capacity. Paying more for the 5080 is about reducing input processing and answer time for models that already fit, rather than loading larger models.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 5070 Ti vs RTX 5080: How do two 16GB GPUs compare for LLMs?</h1><p>Both have the same VRAM capacity. Paying more for the 5080 is about reducing input processing and answer time for models that already fit, rather than loading larger models.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5070 Ti 16GB</th><th>RTX 5080 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>896GB/s</td><td>960GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>About 310W</td><td>About 352W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>179–185 × KRW 10,000</td><td>231–239 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5070 Ti 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5070 Ti 16GB is about ₩530,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5070-ti-16gb">NVIDIA GeForce RTX 5070 Ti 16GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5080-16gb">NVIDIA GeForce RTX 5080 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Choose the model you will use within 16GB</h2><p>If a model and its KV cache exceed the 5070 Ti's capacity, the 5080 keeps the same total VRAM. You still need a smaller quantization or shorter context. If the model fits comfortably, compare prefill and generation next. Choosing the model first keeps a higher product tier from becoming the only reason to spend more.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Separate first response from completion</h2><p>For document summaries, use full mode with a long input. For a short prompt that generates long code, decode mode is a more direct comparison. Measure the wait saved by the 5080 at your workload length, then consider the current price ranges.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Tune an existing 5070 Ti before replacing it</h2><p>If you own a 5070 Ti, first match the recommended engine and quantized file shown here. Keeping an old setup can miss improvements from newer runtimes on the same GPU. If repeated waits remain disruptive after tuning, compare a 5080 or a card with more memory.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5070 vs RTX 5070 Ti: Does 4GB matter for local LLMs?</title><link>https://localai.co.kr/en/compare/rtx-5070-vs-rtx-5070-ti-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5070-vs-rtx-5070-ti-local-llm</guid><description>Compare capacity, context-dependent speed, power and prices for RTX 5070 12GB and RTX 5070 Ti 16GB. If your chosen model runs out of room in 12GB, check the 5070 Ti's extra 4GB first. For smaller models, weigh the 5070's cost against its speed.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 5070 vs RTX 5070 Ti: Does 4GB matter for local LLMs?</h1><p>If your chosen model runs out of room in 12GB, check the 5070 Ti's extra 4GB first. For smaller models, weigh the 5070's cost against its speed.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5070 12GB</th><th>RTX 5070 Ti 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>11GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>672GB/s</td><td>896GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>About 275W</td><td>About 310W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>116–129 × KRW 10,000</td><td>179–185 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 5070 Ti 16GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5070 12GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5070 12GB is about ₩600,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5070-12gb">NVIDIA GeForce RTX 5070 12GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5070-ti-16gb">NVIDIA GeForce RTX 5070 Ti 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">The extra 4GB can also serve conversation headroom</h2><p>VRAM holds both weights and the conversation's KV cache. A model that barely fits in 12GB may run out of room with longer input. Select the same model and increase context in steps to see whether 16GB expands model choice or enables longer conversations with the same model.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Use the same question for heavily compressed larger models</h2><p>A smaller file can make a larger model runnable. Alongside capacity, check whether its answers preserve the requirements and code your usual questions need. Try both a fast smaller model and a more heavily compressed larger model to choose the combination that suits you.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Consider the next upgrade too</h2><p>If you plan to keep moving to larger models, compare stopping at 16GB with moving to 24GB or more. Upgrading from a 5070 to a 5070 Ti and quickly hitting capacity again means paying for two changes. Check the model you need now and the one you expect to use soon.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5060 Ti 16GB vs RTX 5070: Capacity or speed for LLMs?</title><link>https://localai.co.kr/en/compare/rtx-5060-ti-16gb-vs-rtx-5070-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5060-ti-16gb-vs-rtx-5070-local-llm</guid><description>Compare model capacity, bandwidth, response speed and costs for RTX 5060 Ti 16GB and RTX 5070 12GB. If the whole model must fit in VRAM, the 5060 Ti 16GB's capacity comes first. For models that fit comfortably in 12GB, compare the 5070's speed.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 5060 Ti 16GB vs RTX 5070: Capacity or speed for LLMs?</h1><p>If the whole model must fit in VRAM, the 5060 Ti 16GB's capacity comes first. For models that fit comfortably in 12GB, compare the 5070's speed.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5060 Ti 16GB</th><th>RTX 5070 12GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>11GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>448GB/s</td><td>672GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 250W</td><td>About 275W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>99–108 × KRW 10,000</td><td>116–129 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 5060 Ti 16GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5060 Ti 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5060 Ti 16GB is about ₩190,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-ti-16gb">NVIDIA GeForce RTX 5060 Ti 16GB local LLM speed/memory/electricity rate</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5070-12gb">NVIDIA GeForce RTX 5070 12GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">A higher-tier card can have less memory</h2><p>The 5070 has higher bandwidth but 12GB of VRAM. A file that fits the 5060 Ti 16GB may need partial offloading on the 5070. In that case, model placement matters before GPU compute. Choose the required file, then check the loading status on both machines.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Test short answers and long documents</h2><p>For conversation with a small model that fits both cards, compare generation speed. For long documents, increase input to check KV cache headroom and first-token time. Model and input choices can change the reason to choose a card, so compare two of your usual workloads separately.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Check that the product is the 16GB version</h2><p>The 5060 Ti comes in both 8GB and 16GB versions. This page compares the 16GB configuration. Check the VRAM option as well as the chip name on a listing. An apparently much cheaper 8GB product has different model capacity from this comparison.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4060 Ti 16GB vs RTX 5060 Ti 16GB: Upgrade for LLMs?</title><link>https://localai.co.kr/en/compare/rtx-4060-ti-vs-rtx-5060-ti-16gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-4060-ti-vs-rtx-5060-ti-16gb-local-llm</guid><description>Compare bandwidth, recommended-runtime speed, power and prices for the 16GB versions of RTX 4060 Ti and 5060 Ti. An upgrade keeps memory capacity unchanged while changing performance and supported execution paths. If the goal is a model beyond 16GB, compare larger-VRAM options alongside the 5060 Ti.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 4060 Ti 16GB vs RTX 5060 Ti 16GB: Upgrade for LLMs?</h1><p>An upgrade keeps memory capacity unchanged while changing performance and supported execution paths. If the goal is a model beyond 16GB, compare larger-VRAM options alongside the 5060 Ti.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 4060 Ti 16GB</th><th>RTX 5060 Ti 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>288GB/s</td><td>448GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>About 216W</td><td>about 250W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>Price unavailable</td><td>99–108 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 4060 Ti 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>A price comparison is deferred because a device has no confirmed price yet.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4060-ti-16gb">NVIDIA GeForce RTX 4060 Ti 16GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-ti-16gb">NVIDIA GeForce RTX 5060 Ti 16GB local LLM speed/memory/electricity rate</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Separate lack of capacity from slow answers</h2><p>If the model loads and completes conversations on your 4060 Ti, locate the slow stage. A delayed first character after long input points to prefill; slowly continuing answers point to decode. If execution stops for lack of memory, another 16GB card still requires adjusting the file and context first.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Use the runtime path suited to the newer card</h2><p>The 5060 Ti is Blackwell and the 4060 Ti is Ada. Distinguish keeping the old file and engine after upgrading from adopting the recommended setup. The comparison selects supported configurations per device; use its runtime and quantization labels when preparing your installation.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Keep the existing card if it meets your needs</h2><p>For occasional short questions, a new card may offer little value relative to its price. Repeated code generation or document summaries accumulate the time saved. Set your usual input and answer lengths, run both, and decide based on the reduction in waiting.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4080 SUPER vs RTX 5080: A 16GB local LLM upgrade?</title><link>https://localai.co.kr/en/compare/rtx-4080-super-vs-rtx-5080-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-4080-super-vs-rtx-5080-local-llm</guid><description>Compare prefill, generation, bandwidth and costs for RTX 4080 SUPER and RTX 5080, both with 16GB. If your model already runs well on the 4080 SUPER, the 5080 is a speed upgrade. To expand model capacity, compare 24GB and 32GB cards too.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 4080 SUPER vs RTX 5080: A 16GB local LLM upgrade?</h1><p>If your model already runs well on the 4080 SUPER, the 5080 is a speed upgrade. To expand model capacity, compare 24GB and 32GB cards too.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 4080 SUPER 16GB</th><th>RTX 5080 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>736GB/s</td><td>960GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>About 324W</td><td>About 352W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>175–205 × KRW 10,000</td><td>231–239 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 4080 SUPER 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 4080 SUPER 16GB is about ₩450,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4080-super-16gb">NVIDIA GeForce RTX 4080 SUPER 16GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5080-16gb">NVIDIA GeForce RTX 5080 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Does more bandwidth help your conversations?</h2><p>Generating an answer token by token makes fast weight reads important. Check bandwidth, then run decode mode. If you often process long input, compare full mode too. Looking at both stages gives a better account of workload time than judging from one metric.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Distinguish Blackwell files from your existing ones</h2><p>Fast quantized paths on the 5080 require the runtime's matching files and packages. Your 4080 SUPER's GGUF setup may differ from the new recommendation. Update the existing card's supported path too, so you can distinguish a hardware upgrade from a software improvement.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Use a larger-memory comparison for workloads beyond 16GB</h2><p>If loading still fails after reducing context, or your model requires a smaller quantization, compare increasing capacity. Moving from a 4080 SUPER to a 5080 solves a different problem from moving to a 5090. Related comparisons below include larger-VRAM options.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4070 Ti SUPER vs RTX 5070 Ti: What changes for local LLMs?</title><link>https://localai.co.kr/en/compare/rtx-4070-ti-super-vs-rtx-5070-ti-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-4070-ti-super-vs-rtx-5070-ti-local-llm</guid><description>Compare 16GB model capacity, generation-specific runtime settings, speed and prices for RTX 4070 Ti SUPER and RTX 5070 Ti. Both have 16GB, so the upgrade concerns speed and runtime paths. If you own a 4070 Ti SUPER, try its latest supported setup before weighing the extra cost of a 5070 Ti.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 4070 Ti SUPER vs RTX 5070 Ti: What changes for local LLMs?</h1><p>Both have 16GB, so the upgrade concerns speed and runtime paths. If you own a 4070 Ti SUPER, try its latest supported setup before weighing the extra cost of a 5070 Ti.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 4070 Ti SUPER 16GB</th><th>RTX 5070 Ti 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>15GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>672GB/s</td><td>896GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 300W</td><td>About 310W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>Price unavailable</td><td>179–185 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 4070 Ti SUPER 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>A price comparison is deferred because a device has no confirmed price yet.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4070-ti-super-16gb">NVIDIA GeForce RTX 4070 Ti SUPER 16GB local LLM speed, memory and powers</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5070-ti-16gb">NVIDIA GeForce RTX 5070 Ti 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Start with the same model capacity</h2><p>Changing chip generation here does not increase total VRAM. Start with a model file and conversation that fit within 16GB. Compare a short question on your usual model, then use a long document to inspect the first-response difference.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Account for switching runtimes</h2><p>A new recommended path may require another model file and a server-address change if it differs from your app. Check the runtime label and guide to see how your chat app connects. Keeping the workflow you use most makes a speed improvement easier to carry into daily work.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Separate buying new from replacing an owned card</h2><p>For a first PC, compare current prices alongside power and cooling requirements. If you own a 4070 Ti SUPER, weigh a new card's cost against the wait it saves now. The same performance difference has different value to a first-time buyer and an existing owner.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 3090 vs RTX 5080: Can you give up 24GB for local AI?</title><link>https://localai.co.kr/en/compare/rtx-3090-vs-rtx-5080-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-3090-vs-rtx-5080-local-llm</guid><description>Compare model capacity, optimized speed, power and replacement costs for RTX 3090 24GB and RTX 5080 16GB. Moving from a 3090 to a 5080 reduces VRAM from 24GB to 16GB. Check whether your model fits the new card first, then compare speed and power for supported combinations.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 3090 vs RTX 5080: Can you give up 24GB for local AI?</h1><p>Moving from a 3090 to a 5080 reduces VRAM from 24GB to 16GB. Check whether your model fits the new card first, then compare speed and power for supported combinations.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 3090 24GB</th><th>RTX 5080 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>22.5GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>936GB/s</td><td>960GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 420W</td><td>About 352W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>239–239 × KRW 10,000</td><td>231–239 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 3090 24GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5080 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5080 16GB is about ₩40,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 for local AI: keep it or buy used?</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5080-16gb">NVIDIA GeForce RTX 5080 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Can the new card load your current file?</h2><p>A 27B quantized file that works on the 3090 may leave too little conversation room on the 5080. Compare loading with the same model and input before replacing it. If you plan a smaller quantization, check answer quality on your usual questions too. Preserving the workload is the first criterion when capacity falls.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Check new runtimes and the existing card's setup</h2><p>Use each card's supported path rather than applying the 5080's recommendation directly to the 3090. First check whether updating the 3090's runtime reduces waiting. Changing the model here also updates runtime and placement recommendations for both sides; use these labels when choosing files.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">If you need 24GB, compare keeping, adding and replacing</h2><p>If 16GB is regularly insufficient, keeping the 3090 or adding another GPU are options. Splitting a model needs runtime support plus slots, power and cooling. For a single-card replacement, compare the 32GB 5090 too. This helps find a faster path without losing workloads the old card could handle.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 4090 vs RTX 5080: Is the newer card better for local LLMs?</title><link>https://localai.co.kr/en/compare/rtx-4090-vs-rtx-5080-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-4090-vs-rtx-5080-local-llm</guid><description>Compare memory, generation-specific optimal settings, response speed and prices for RTX 4090 24GB and RTX 5080 16GB. Workloads relying on the 4090's 24GB need a new capacity check on the 5080's 16GB. For smaller models, compare current setups on both; keeping the 4090 is an option when capacity comes first.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 4090 vs RTX 5080: Is the newer card better for local LLMs?</h1><p>Workloads relying on the 4090's 24GB need a new capacity check on the 5080's 16GB. For smaller models, compare current setups on both; keeping the 4090 is an option when capacity comes first.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 4090 24GB</th><th>RTX 5080 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>22.5GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1008GB/s</td><td>960GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 470W</td><td>About 352W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>325–400 × KRW 10,000</td><td>231–239 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX 4090 24GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5080 16GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5080 16GB is about ₩1,280,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB local LLM and image creation performance</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5080-16gb">NVIDIA GeForce RTX 5080 16GB local LLM speed, memory and powers</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Compare the file and context as a pair</h2><p>A file can load in 16GB yet leave too little room for long input. Compare using the document length and conversation depth you use on the 4090. Even a promising short-question speed difference can be offset by more offloading in real document work.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Check new runtime benefits on supported models</h2><p>Engines using Blackwell need matching model formats and kernels. Check the recommendation here and follow the model's guide. If you intend to keep an existing CUDA tool, compare with a file that tool supports too, so the comparison reflects the workflow after replacement.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Name the problem the replacement should solve</h2><p>If your 4090 is hot or noisy, power limits and cooling adjustments are options to test first. For larger models, expand the comparison to higher-memory configurations. For repeated waiting on the same model, use generation with the recommended setup. Identifying the problem narrows replacement candidates.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>One vs two RTX 5090s: Is a second card worth it for local LLMs?</title><link>https://localai.co.kr/en/compare/rtx-5090-one-vs-two-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5090-one-vs-two-local-llm</guid><description>Compare model splitting, single-request speed, power and extra build costs for one 32GB RTX 5090 and two with 64GB total. A second card helps when a model exceeds one card or when requests can be divided. If the model already fits, compare splitting it across two against running it on one first.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>One vs two RTX 5090s: Is a second card worth it for local LLMs?</h1><p>A second card helps when a model exceeds one card or when requests can be divided. If the model already fits, compare splitting it across two against running it on one first.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5090 32GB</th><th>2× RTX 5090 64GB (PCIe)</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>30.5GB</td><td>61GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1792GB/s</td><td>3584GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 620W</td><td>about 1100W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>899–929 × KRW 10,000</td><td>1,798–1,858 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>2× RTX 5090 64GB (PCIe)</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX 5090 32GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5090 32GB is the price of GPU separately, 2× RTX 5090 64GB (PCIe) is the price of 2 GPUs. For individual GPUs, you need to add the cost of the main body before comparing.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">2× NVIDIA GeForce RTX 5090 PCIe 64GB local LLM speed·memory·electricity cost</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Choose between splitting a model and dividing requests</h2><p>Splitting one large model makes GPUs exchange data during computation. Keeping a small model on each card lets you route requests separately. The first serves capacity, the second concurrent work. After the single-answer comparison here, test the concurrency your actual server needs.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Check PCIe slots and physical spacing first</h2><p>Two 5090s require checking actual motherboard lane wiring, card thickness and cooling clearance. The PSU and cables must accommodate both cards. Add any component replacements to the second GPU's cost and compare the complete build. Confirm that the case and system can house both before buying.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Check waiting time after moving to a larger file</h2><p>If the goal of a second card is a larger model, comparing only the old model's speed is insufficient. Select the larger model and context you will actually use, then inspect first response and completion. Consider both whether it gives the required answer and whether the wait fits your workflow.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Two RTX 5090s vs one PRO 6000: Which for larger LLMs?</title><link>https://localai.co.kr/en/compare/dual-rtx-5090-vs-rtx-pro-6000-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dual-rtx-5090-vs-rtx-pro-6000-local-llm</guid><description>Compare capacity, GPU communication, response speed and build costs for dual RTX 5090s with 64GB total and one 96GB PRO 6000. Compare the single PRO configuration when weights, KV cache and workspace together exceed the two 5090s’ 64GB total but fit comfortably within the PRO 6000’s 96GB. The two 5090s need a supported model-splitting runtime. For smaller models, compare execution speed and complete-system costs.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Two RTX 5090s vs one PRO 6000: Which for larger LLMs?</h1><p>Compare the single PRO configuration when weights, KV cache and workspace together exceed the two 5090s’ 64GB total but fit comfortably within the PRO 6000’s 96GB. The two 5090s need a supported model-splitting runtime. For smaller models, compare execution speed and complete-system costs.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>2× RTX 5090 64GB (PCIe)</th><th>RTX PRO 6000 96GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>61GB</td><td>93GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>3584GB/s</td><td>1792GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 1100W</td><td>about 650W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>1,798–1,858 × KRW 10,000</td><td>2,550–2,647 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>RTX PRO 6000 96GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>RTX PRO 6000 96GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>2× RTX 5090 64GB (PCIe) is the price of 2 GPUs, RTX PRO 6000 96GB is the price of GPU separately. For individual GPUs, you need to add the cost of the main body before comparing.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-rtx-5090-64gb">2× NVIDIA GeForce RTX 5090 PCIe 64GB local LLM speed·memory·electricity cost</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-pro-6000-blackwell-96gb">NVIDIA RTX PRO 6000 Blackwell 96GB local LLM speed/memory/electricity rate</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">One 96GB card and two 32GB cards need different setups</h2><p>The PRO 6000 fits a broader range on one GPU. Two 5090s require splitting the model or assigning requests separately. For one model's response, check the splitting runtime and inter-card connection. For a multi-user server, independent models on each card are another option.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Budget beyond the card prices</h2><p>Two 5090s may require a new PSU, case or motherboard in addition to the cards. The PRO 6000 also needs suitable power and cooling. Use the card prices and power figures below, then add the parts your existing PC actually needs to compare total cost.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Test the large model and your everyday model</h2><p>Even if a large model fits, long waits on the smaller everyday model can disrupt work. Compare a model that fits both and one that fits only one because of capacity. This clarifies whether you are paying for the PRO 6000's memory or dual-5090 execution performance.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini M4 Pro 48GB vs 64GB: Which memory option for local LLMs?</title><link>https://localai.co.kr/en/compare/mac-mini-m4-pro-48gb-vs-64gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-mini-m4-pro-48gb-vs-64gb-local-llm</guid><description>Compare larger-model capacity, long-context headroom, speed and prices for 48GB and 64GB Mac mini M4 Pro configurations. When the same model fits both, more memory chiefly provides headroom. Check whether larger models, long documents or other apps require the 64GB configuration's extra space.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Mac mini M4 Pro 48GB vs 64GB: Which memory option for local LLMs?</h1><p>When the same model fits both, more memory chiefly provides headroom. Check whether larger models, long documents or other apps require the 64GB configuration's extra space.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Mac mini M4 Pro 48GB</th><th>Mac mini M4 Pro 64GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>41GB</td><td>56GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>273GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 92W</td><td>about 95W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>263–344 × KRW 10,000</td><td>412–620 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Mac mini M4 Pro 64GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Mac mini M4 Pro 48GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Mac mini M4 Pro 48GB is about ₩2,130,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-pro-48gb">Mac Mini M4 Pro 48GB Local LLM 27B·35B Performance</a></li><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-pro-64gb">Mac mini M4 Pro 64GB local LLM speed, memory, electricity bill</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Reserve memory for your other apps</h2><p>Unified memory serves macOS, the browser and editor as well as the model. Check headroom after opening documents and coding tools with the model loaded. If you keep many apps open, the difference between 48GB and 64GB can matter more in daily work than in an isolated benchmark.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Compare the same model before increasing file size</h2><p>Compare generation with the same model and input first. Then try a larger quantization or model to examine capacity. Rather than expecting twice the speed for the same small model, check how comfortably the larger-memory configuration accommodates your intended file and context.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Account for memory that cannot be added later</h2><p>Mac unified memory is chosen as part of the purchased configuration. Even if you use a small model now, compare against the larger file you plan to use soon. Instead of choosing maximum capacity without a plan, name your current and next models to evaluate the price difference.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M4 Max 64GB vs 128GB: How much for local AI?</title><link>https://localai.co.kr/en/compare/mac-studio-m4-max-64gb-vs-128gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-studio-m4-max-64gb-vs-128gb-local-llm</guid><description>What changes when you upgrade Mac Studio M4 Max from 64GB to 128GB? Compare model capacity, long prompts, multiple resident models and purchase costs. Start with 64GB if one model and your usual apps fit. For larger resident models or frequent model switching, check whether 128GB reduces reloading and memory shortages.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Mac Studio M4 Max 64GB vs 128GB: How much for local AI?</h1><p>Start with 64GB if one model and your usual apps fit. For larger resident models or frequent model switching, check whether 128GB reduces reloading and memory shortages.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Studio M4 Max 64GB</th><th>Studio M4 Max 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>56GB</td><td>114GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>546GB/s</td><td>546GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 120W</td><td>about 130W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>509–509 × KRW 10,000</td><td>780–888 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M4 Max 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M4 Max 64GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M4 Max 64GB is about ₩3,250,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-64gb">Mac Studio M4 Max 64GB local LLM speed, memory and power</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb">Mac Studio M4 Max 128GB local LLM large model performance</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Will you keep frequently used models resident?</h2><p>If every model switch means waiting for a load, switching time matters alongside answer speed. Decide whether to keep one large model or several smaller ones resident. The 128GB configuration leaves more room for that workflow. oMLX's pinning and unload settings can also reveal waiting you can reduce with current capacity.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Include workloads with growing conversation history</h2><p>A short first question may not reveal the capacity difference. Compare long documents and follow-up questions that require a larger KV cache. Check that requests finish while other apps are open to choose memory for the work you actually do.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">The extra cost buys capacity on the same chip</h2><p>This pair compares memory options on M4 Max. If the goal is a substantial speed improvement on the same model, open comparisons with a higher-tier chip or another device. Allocate the extra budget after deciding whether the required improvement is capacity or faster computation.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac Studio M5 Max vs M5 Ultra: Do local LLMs need Ultra?</title><link>https://localai.co.kr/en/compare/mac-studio-m5-max-vs-m5-ultra-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-studio-m5-max-vs-m5-ultra-local-llm</guid><description>Compare model capacity, prefill, generation, power and prices for M5 Max 128GB and M5 Ultra 256GB. For workloads within 128GB, compare how much waiting is reduced on the same model first. If the goal is a model needing 256GB or several resident models, include Ultra's capacity in the decision.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Mac Studio M5 Max vs M5 Ultra: Do local LLMs need Ultra?</h1><p>For workloads within 128GB, compare how much waiting is reduced on the same model first. If the goal is a model needing 256GB or several resident models, include Ultra's capacity in the decision.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Studio M5 Max 128GB</th><th>Studio M5 Ultra 256GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>114GB</td><td>236GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>614GB/s</td><td>1200GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 165W</td><td>about 300W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>922–1,050 × KRW 10,000</td><td>1,850–2,000 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M5 Ultra 256GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M5 Max 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M5 Max 128GB is about ₩9,390,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-max-128gb">Mac Studio M5 Max 128GB local LLM speed, memory and power</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB: Real-World Local LLM and Agent Performance</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Separate large-model capacity from small-model speed</h2><p>There are two main reasons to choose Ultra: fitting a model beyond Max's capacity or reducing waiting on a model that fits both. Run the everyday model on both, then select one that was difficult on Max because of memory. The two results separate the need for capacity from speed.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Match oMLX and the model format</h2><p>The recommended Mac path depends on both engine version and model-specific acceleration. Check the oMLX, quantization and MTP labels, then prepare the corresponding file. Update an existing Max's runtime before comparing to distinguish waits requiring new hardware from those reduced through settings.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Weigh the price difference against repeated waits</h2><p>A few short questions per day and continuous code or report processing justify cost differently. Compare first response and completion at your usual context length, then consider how often that benefit matters. If memory currently prevents a workload, include the value of making that work possible.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>M5 Ultra 256GB vs 512GB: Do local LLMs need 512GB?</title><link>https://localai.co.kr/en/compare/mac-studio-m5-ultra-256gb-vs-512gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-studio-m5-ultra-256gb-vs-512gb-local-llm</guid><description>Compare large models, long contexts, multiple resident models and prices across M5 Ultra 256GB and 512GB configurations. Start with 256GB if it completes your workload. Consider 512GB when you need extra room for larger weights, several models or multiple requests.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>M5 Ultra 256GB vs 512GB: Do local LLMs need 512GB?</h1><p>Start with 256GB if it completes your workload. Consider 512GB when you need extra room for larger weights, several models or multiple requests.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Studio M5 Ultra 256GB</th><th>Studio M5 Ultra 512GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>236GB</td><td>480GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1200GB/s</td><td>1200GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 300W</td><td>about 330W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>1,850–2,000 × KRW 10,000</td><td>3,805–3,890 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M5 Ultra 512GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M5 Ultra 256GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M5 Ultra 256GB is about ₩19,230,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB: Real-World Local LLM and Agent Performance</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-512gb">Mac Studio M5 Ultra 512GB: ₩38.05M Price and 256GB Comparison</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Decide what you will keep in 512GB together</h2><p>Capacity depends on whether you run one large model or keep coding, document and embedding models resident together. Budget files plus workspace and KV caches. Pinning only frequently used models is another option. Define that usage plan first to make the reason for 512GB concrete.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Capacity is the key difference for the same model</h2><p>This pair uses the same M5 Ultra, so compare capacity instead of interpreting memory size as an answer-speed multiplier. Compare one model and input, then select a larger file to see if only one configuration fits it. Check separately whether the larger file improves answers for your workload.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Prepare storage for the model files too</h2><p>A large memory option still needs SSD space to download and store models. Trying several quantizations can leave multiple copies of one model. Plan the files to retain, cache locations and how to remove unneeded copies so the machine's capacity is used efficiently.</p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>M3 Ultra vs M5 Ultra 512GB: Upgrade for local LLMs?</title><link>https://localai.co.kr/en/compare/mac-studio-m3-ultra-vs-m5-ultra-512gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-studio-m3-ultra-vs-m5-ultra-512gb-local-llm</guid><description>Compare input processing, generation and prices for the same model on 512GB Mac Studio M3 Ultra and M5 Ultra configurations. Both are 512GB configurations, so replacement is about running the same model faster. Update the M3 Ultra's runtime first, then compare the waiting time saved by M5 Ultra.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>M3 Ultra vs M5 Ultra 512GB: Upgrade for local LLMs?</h1><p>Both are 512GB configurations, so replacement is about running the same model faster. Update the M3 Ultra's runtime first, then compare the waiting time saved by M5 Ultra.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Studio M3 Ultra 512GB</th><th>Studio M5 Ultra 512GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>480GB</td><td>480GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>819GB/s</td><td>1200GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 230W</td><td>about 330W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>2,400–2,600 × KRW 10,000</td><td>3,805–3,890 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M3 Ultra 512GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M3 Ultra 512GB is about ₩13,480,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Mac Studio M3 Ultra 512GB for Local LLMs: Is 256GB Enough?</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-512gb">Mac Studio M5 Ultra 512GB: ₩38.05M Price and 256GB Comparison</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Update the existing Mac's runtime first</h2><p>An older engine on M3 Ultra may leave room for shorter waits without new hardware. Match the recommended engine, quantization and acceleration before comparing. This separates gains from a new chip from those achieved by updating software.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Run long prefill and long answers separately</h2><p>For frequent reports, full mode with long input matters. For code or long drafts, compare continuing answer speed. Decide which stage must improve to keep work flowing, then weigh it against the new machine's cost.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Distinguish SSD loading from inference waits</h2><p>Initial model loading and waiting on every question need different improvements. For slow initial loading, check residency and storage location. For repeated documents, examine cache settings. Keep these waiting stages separate when comparing the new Mac's SSD and chip.</p></section>]]></content:encoded><pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate></item><item><title>M5 Max MacBook Pro vs Mac Studio 128GB: Which for local LLMs?</title><link>https://localai.co.kr/en/compare/macbook-pro-vs-mac-studio-m5-max-128gb-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/macbook-pro-vs-mac-studio-m5-max-128gb-local-llm</guid><description>Compare capacity, generation speed, portability, always-on use and prices for M5 Max 128GB MacBook Pro and Mac Studio. This pair compares the same chip and memory. Decide whether you need portable use or a desk-based server, then add the peripherals you need to the machine price.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>M5 Max MacBook Pro vs Mac Studio 128GB: Which for local LLMs?</h1><p>This pair compares the same chip and memory. Decide whether you need portable use or a desk-based server, then add the peripherals you need to the machine price.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>MBP M5 Max 128GB</th><th>Studio M5 Max 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>114GB</td><td>114GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>614GB/s</td><td>614GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 120W</td><td>about 165W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>1,141–1,141 × KRW 10,000</td><td>922–1,050 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Similar</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>MBP M5 Max 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Studio M5 Max 128GB is about ₩1,550,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/macbook-pro-m5-max-128gb">MacBook Pro M5 Max 128GB local LLM speed, memory and power</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-max-128gb">Mac Studio M5 Max 128GB local LLM speed, memory and power</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Choose local laptop use or connecting to a server</h2><p>A MacBook Pro can run files directly while travelling. A Mac Studio server can accept requests from apps on other devices, but remote access and authentication need preparation. Decide first whether you need offline use away from home or access from several devices at home.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Check cooling and power with long-running work</h2><p>A few short questions and keeping a model active for hours impose different demands. Consider placement, ambient temperature and concurrent work. Compare response speed and sustained power here; check long-session noise and temperature on the actual configuration.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Include display and input-device costs</h2><p>The MacBook Pro includes a display and keyboard. A new Mac Studio setup may need a monitor, keyboard and mouse. Costs differ for someone with peripherals and someone building from scratch. List what you actually need rather than comparing machine prices alone.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DGX Spark vs M5 Ultra: Which machine for large local LLMs?</title><link>https://localai.co.kr/en/compare/dgx-spark-vs-mac-studio-m5-ultra-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/dgx-spark-vs-mac-studio-m5-ultra-local-llm</guid><description>Compare CUDA and MLX workflows, model capacity, speed and costs for DGX Spark 128GB and Mac Studio M5 Ultra 256GB. Compare DGX Spark to keep CUDA tools, or M5 Ultra for more unified memory and a Mac workflow. Separate speed on a model that fits both from models that fit only one.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>DGX Spark vs M5 Ultra: Which machine for large local LLMs?</h1><p>Compare DGX Spark to keep CUDA tools, or M5 Ultra for more unified memory and a Mac workflow. Separate speed on a model that fits both from models that fit only one.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>DGX Spark 128GB</th><th>Studio M5 Ultra 256GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>116GB</td><td>236GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>1200GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 190W</td><td>about 300W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>952–1,030 × KRW 10,000</td><td>1,850–2,000 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M5 Ultra 256GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>DGX Spark 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>DGX Spark 128GB is about ₩9,340,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">NVIDIA DGX Spark 128GB Local LLM Selection Criteria</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB: Real-World Local LLM and Agent Performance</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Check the environment required by your tools</h2><p>Prepare DGX Spark around NVIDIA software and CUDA, and Mac around MLX or Metal paths. The same model can require different files and server setup. Check your app's server connection, packages and CPU-architecture support first to avoid software obstacles after buying.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Check 128GB versus 256GB with the actual file</h2><p>Large models need workspace and conversation cache beyond weights. Choose your quantized file and long input, then compare headroom. Check speed on a file that fits Spark first, then consider why you would use a larger file on Mac. This shows whether the extra spending is for capacity.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Separate model serving from everyday computing</h2><p>Decide between editing and inference on one Mac or using a separate Spark server. Separation frees memory on the work PC but adds connections and management. One machine is simpler but shares memory with other apps. Include that operating model alongside hardware prices.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ryzen AI Max+ 395 vs DGX Spark: Which 128GB local LLM machine?</title><link>https://localai.co.kr/en/compare/ryzen-ai-max-395-vs-dgx-spark-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/ryzen-ai-max-395-vs-dgx-spark-local-llm</guid><description>Compare GPU-usable memory, AMD and CUDA runtime paths, speed and prices for 128GB Ryzen AI Max+ 395 and DGX Spark. Both list 128GB, but GPU allocation and software environments differ. Decide between an AMD path on Windows or Linux and an NVIDIA CUDA server before comparing.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Ryzen AI Max+ 395 vs DGX Spark: Which 128GB local LLM machine?</h1><p>Both list 128GB, but GPU allocation and software environments differ. Decide between an AMD path on Windows or Linux and an NVIDIA CUDA server before comparing.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Ryzen AI Max+ 395 128GB</th><th>DGX Spark 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>96GB</td><td>116GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>256GB/s</td><td>273GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 125W</td><td>about 190W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>538–562 × KRW 10,000</td><td>952–1,030 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>DGX Spark 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Ryzen AI Max+ 395 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Ryzen AI Max+ 395 128GB is about ₩4,410,000 cheaper at the midpoint. Check perceived speed and the task-by-task verdicts together.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/amd-ryzen-ai-max-plus-395-128gb">Ryzen AI Max+ 395 128GB local LLM cost-effectiveness</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">NVIDIA DGX Spark 128GB Local LLM Selection Criteria</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Start with the memory available to the GPU</h2><p>On a Ryzen AI Max+ system, check both GPU allocation and memory left for the OS. DGX Spark also needs operating-system and runtime headroom. Compare loading using the usable-memory figures below and check whether the actual machine's BIOS and OS can use that allocation.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Choose between AMD runtimes and CUDA tools</h2><p>To keep CUDA-only packages, examine the Spark environment. On AMD, select the ROCm, Vulkan or HIP path actually supported by the system and tool. If you have a specific tool in mind, its OS, architecture and package support table matters before the GPU name.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Keep prices tied to the actual chassis</h2><p>Ryzen AI Max+ 395 machines vary in memory, SSD and cooling. GB10-family products also vary by vendor. Match the memory option and actual chassis to this comparison when checking prices. A different chassis also calls for checking power and sustained execution conditions.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini M4 Pro 64GB vs RTX 5060 Ti 16GB for local LLMs</title><link>https://localai.co.kr/en/compare/mac-mini-m4-pro-vs-rtx-5060-ti-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/mac-mini-m4-pro-vs-rtx-5060-ti-local-llm</guid><description>Compare capacity, MLX and CUDA speed, power and complete-system costs for a 64GB Mac mini and a 16GB NVIDIA GPU. Compare Mac mini for a larger memory pool and varied models, or the 5060 Ti to add CUDA to an existing PC. Distinguish the complete Mac price from the GPU-only price and add required PC costs.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>Mac mini M4 Pro 64GB vs RTX 5060 Ti 16GB for local LLMs</h1><p>Compare Mac mini for a larger memory pool and varied models, or the 5060 Ti to add CUDA to an existing PC. Distinguish the complete Mac price from the GPU-only price and add required PC costs.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>Mac mini M4 Pro 64GB</th><th>RTX 5060 Ti 16GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>56GB</td><td>15GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>273GB/s</td><td>448GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 95W</td><td>about 250W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>412–620 × KRW 10,000</td><td>99–108 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Mac mini M4 Pro 64GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Mac mini M4 Pro 64GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>Mac mini M4 Pro 64GB is the price of finished product, RTX 5060 Ti 16GB is the price of GPU separately. For individual GPUs, you need to add the cost of the main body before comparing.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-pro-64gb">Mac mini M4 Pro 64GB local LLM speed, memory, electricity bill</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5060-ti-16gb">NVIDIA GeForce RTX 5060 Ti 16GB local LLM speed/memory/electricity rate</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Choose between smaller VRAM and larger shared memory</h2><p>The 5060 Ti uses 16GB VRAM separately from system RAM; Mac mini shares 64GB across CPU, GPU and apps. Separate the room for a large file in unified memory from the speed of a smaller model fitting VRAM. Offloading between system RAM and GPU also depends on the PC configuration.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Will you also use image-generation tools?</h2><p>If you also want image or video tools, check their CUDA and Mac support. One LLM's generation speed does not cover every workload. Compare text responses here, then inspect the image and video experience linked from device details for the models you will use.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">An existing PC changes the extra cost</h2><p>If the PC already has suitable power, slots and cooling, adding a GPU can be the starting cost. A new PC also needs CPU, board, RAM, SSD, PSU and case. For Mac mini, add a display and input devices if required. Separate owned parts from new purchases for a fair budget.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5090 vs M5 Max 128GB: Fast GPU or larger memory for local AI?</title><link>https://localai.co.kr/en/compare/rtx-5090-vs-mac-studio-m5-max-local-llm</link><guid isPermaLink="true">https://localai.co.kr/en/compare/rtx-5090-vs-mac-studio-m5-max-local-llm</guid><description>Compare model capacity, recommended inference speed, CUDA and MLX workflows and costs for RTX 5090 32GB and Mac Studio M5 Max 128GB. Choose between fast execution within 32GB and fitting a larger model in unified memory. Compare a model that fits both separately from one needing the Mac's additional capacity.</description><content:encoded><![CDATA[<header><p>direct comparison under identical conditions</p><h1>RTX 5090 vs M5 Max 128GB: Fast GPU or larger memory for local AI?</h1><p>Choose between fast execution within 32GB and fitting a larger model in unified memory. Compare a model that fits both separately from one needing the Mac's additional capacity.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>core difference</h2><table><thead><tr><th>Measure</th><th>RTX 5090 32GB</th><th>Studio M5 Max 128GB</th></tr></thead><tbody><tr><th scope="row">Available fast memory</th><td>30.5GB</td><td>114GB</td></tr><tr><th scope="row">Memory bandwidth</th><td>1792GB/s</td><td>614GB/s</td></tr><tr><th scope="row">Estimated sustained LLM load</th><td>about 620W</td><td>about 165W</td></tr><tr><th scope="row">Korean price range (KRW)</th><td>899–929 × KRW 10,000</td><td>922–1,050 × KRW 10,000</td></tr></tbody></table></section><section><h2>Which device suits the task?</h2><table><thead><tr><th>Why it matters</th><th>superior equipment</th><th>reason</th></tr></thead><tbody><tr><th scope="row">Chat / coding</th><td>Compare in the speed tool</td><td>Select the same model and input length to compare prefill and answer completion.</td></tr><tr><th scope="row">Model load</th><td>Studio M5 Max 128GB</td><td>Check usable memory against model weights, KV cache and workspace together.</td></tr><tr><th scope="row">Image and video generation</th><td>Check the media model</td><td>LLM speed does not tell you media-generation performance. Choose the image or video model and resolution separately.</td></tr><tr><th scope="row">Runtime</th><td>Settings for your hardware</td><td>See the linked execution guides for each device's model formats and supported runtimes.</td></tr><tr><th scope="row">Power / space</th><td>Studio M5 Max 128GB</td><td>Prioritize the side with lower sustained power load.</td></tr></tbody></table><h3>Local pricing</h3><p>RTX 5090 32GB is the price of GPU separately, Studio M5 Max 128GB is the price of finished product. For individual GPUs, you need to add the cost of the main body before comparing.</p></section><section><h2>Each device detail</h2><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB local LLM/image/video generation performance</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-max-128gb">Mac Studio M5 Max 128GB local LLM speed, memory and power</a></li></ul></section><section aria-labelledby="comparison-reading-0"><h2 id="comparison-reading-0">Compare answers from a fast small model and a larger one</h2><p>Choose a few everyday questions before selecting hardware. Compare answers from a model that runs quickly on the 5090 with a larger file on Mac. Seeing which delivers the coding, summary or document answers you need helps prioritize speed versus capacity.</p></section><section aria-labelledby="comparison-reading-1"><h2 id="comparison-reading-1">Include software and model files in the choice</h2><p>NVIDIA paths need CUDA and the runtime's quantized files; Mac paths need MLX or Metal-compatible files. Check whether your chat or image app can connect to the new server. Follow the recommended configuration to its guide to connect the hardware choice with practical preparation.</p></section><section aria-labelledby="comparison-reading-2"><h2 id="comparison-reading-2">Compare a GPU and a complete machine on total cost</h2><p>A 5090 price does not include the whole PC. Reusing a chassis or building a new one changes cost substantially. Add required PC parts and peripherals on the same basis when comparing with Mac Studio's machine price. Check sustained power below for always-on use too.</p></section>]]></content:encoded><pubDate>Wed, 21 Oct 2026 15:00:00 GMT</pubDate></item><item><title>China's AI Export Controls: What Happens to the Models You Use on OpenRouter?</title><link>https://localai.co.kr/en/guides/china-ai-export-controls-openrouter-local-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/china-ai-export-controls-openrouter-local-llm-guide</guid><description>Understand how China's October 2026 AI technology export proposal treats API access, overseas hosting, and public models, then prepare a local LLM option on the PC or Mac you already own.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">China's AI Export Controls: What Happens to the Models You Use on OpenRouter?</h1><p>Understand changes to hosted access and prepare a local option.</p><p id="guide-page-summary">China has proposed additional controls on transferring certain AI technologies overseas. As of October 17, 2026, pre-export registration has begun for covered transfers, while the final scope remains under consultation. Receiving an answer through an API and deploying a model on an overseas server receive different treatment. Start with how you access the model to decide what to keep using and what to prepare.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Distinguish consultation on the final rules from the pre-export registration already in effect.</li><li>API access, overseas self-hosting, and already public technology have different treatment.</li><li>Prepare a local model and its runtime settings for a task you use regularly.</li></ol></section><section><h2>What has started and what is still being decided</h2><p>On October 16, 2026, China's commerce and science ministries proposed adding AI, biotechnology, and solar technologies to its catalog of prohibited or restricted technology exports. The AI categories cover large models, agents, computing clusters, and information processing. The controls focus on which technology is transferred overseas and how that transfer happens.</p><p>The consultation runs through November 15. Until the revised catalog formally takes effect, exporters must register covered technology transfers in advance. Keep the registration already underway separate from the final rules still being consulted on. For a model you use now, its delivery method and the service's own notices are the practical points to check.</p><ul><li><a href="https://www.mofcom.gov.cn/zcfb/dwmygl/art/2026/art_61446ab4beee4f63973d4d0ab3097648.html">Ministry of Commerce and Ministry of Science and Technology Announcement No. 48 of 2026</a></li><li><a href="https://localai.co.kr/en/guides/free-open-weight-ai-services-guide">Where can you use open-weight AI for free? Five API services</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="A watercolor-style illustration of a laptop and several task panels connected to a small desktop device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The same model can be accessed through a hosted API or through files you run yourself.</figcaption></figure><section><h2>Receiving an API answer versus transferring a model overseas</h2><p>When you send a question to OpenRouter, a connected provider runs the model on its servers and returns an answer. If an overseas operator receives the model files and installs them on its own servers, the model technology itself is transferred. The official Q&amp;A treats these cases differently.</p><table><caption>Official treatment by delivery method</caption><thead><tr><th scope="col">Access or delivery method</th><th scope="col">Treatment in this announcement</th></tr></thead><tbody><tr><th scope="row">Using a company's API, app, website, or SaaS</th><td>Described as outside large-model technology export management</td></tr><tr><th scope="row">Deploying restricted AI technology on overseas servers</th><td>Subject to technology export management, with facilitation for cases such as an overseas self-operated cloud</td></tr><tr><th scope="row">Technology already public through open source, papers, or similar channels</th><td>Explicitly excluded from the management scope</td></tr><tr><th scope="row">Lightweight deployment on local end devices</th><td>Listed in the Q&amp;A as outside large-model technology export management</td></tr></tbody></table><p>Based on the Chinese Ministry of Commerce announcement and Q&amp;A dated October 16, 2026.</p><ul><li><a href="https://www.mofcom.gov.cn/zwgk/zcjd/art/2026/art_b11d5c1e9374421e93e85dc87eba6e38.html">Official Ministry of Commerce Q&amp;A</a></li></ul></section><section><h2>What could change on OpenRouter?</h2><p>OpenRouter lets you use multiple providers' inference APIs through one connection. A model may have several providers with different speeds, prices, and data-processing locations. Even when you select the same model on OpenRouter, different providers' servers may handle your requests.</p><p>A provider acquiring restricted technology to operate it on overseas servers may be affected by technology-transfer procedures. Current preregistration and the management rules still to be finalized could affect when an overseas provider adds a new endpoint. This is a scenario based on the distinction between connecting an existing API and newly hosting a model overseas.</p><p>This announcement contains no decision to stop model availability on OpenRouter or block all Qwen or DeepSeek use. If a model you use changes, check its model page for the provider and available regions, then read that provider's notice to identify affected endpoints.</p><ul><li><a href="https://openrouter.ai/providers/apply">How providers connect to OpenRouter</a></li></ul></section><section><h2>What a local LLM lets you keep doing</h2><p>A local LLM runs downloaded model files on your PC or Mac. For a task such as finding a bug in public code and suggesting a fix, you can send the same code to a local application. Your computer performs the inference, letting you continue that task without relying on a hosted inference API's availability or pricing policy.</p><p>Once the model, application, and required runtime are downloaded, LM Studio can chat and run a local server without internet access. Finding and downloading additional models requires connectivity. Tasks that use web search or external tools also need those connections, so a self-contained job such as reviewing a code snippet is a straightforward starting point.</p><p>Keeping a model locally preserves access to that version's capabilities. If you also need future larger models or a hosted service's search features, divide tasks between the existing API and your local model. Keep the license and usage terms with the downloaded files.</p><ul><li><a href="https://lmstudio.ai/docs/app/offline">LM Studio's offline capabilities</a></li></ul></section><figure><img src="https://localai.co.kr/guides/start-local.webp" alt="An illustration of a laptop connected by a cable to a green box on a desk beside a rainy window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Preparing one task that runs locally reduces your reliance on an external service.</figcaption></figure><section><h2>What to prepare before buying another GPU</h2><p>Start with the [hardware finder](/?tab=finder), selecting your current PC or Mac and a model to narrow down feasible configurations. Leave room for the model files plus the input and conversation state. If your usual work is short exchanges, you can begin with a smaller local model rather than matching the size of the hosted model.</p><p>Load the model in your app and enter a piece of code that is safe to share. Ask for the cause of an error and a proposed fix, then follow up about the same function. If you can complete the review and follow-up at a pace that suits your work, keep that setup as a fallback. Separately record whether the answer covers the needed cause and fix, and how long you waited for the first response, to identify reasons for changing models or hardware.</p><p>To keep using your existing app, follow the [guide to switching from OpenRouter to a local LLM](/guides/openrouter-to-local-llm-fallback-guide). Preserve a working configuration with the [model backup and restore guide](/guides/local-llm-model-backup-restore-guide). The goal is to have a task you can continue if a service changes, rather than to buy new hardware first.</p></section><section><h2>What to check when something changes next</h2><p>Watch the final Chinese announcement for the settled scope and exceptions, and your provider's notices for changes to models, regions, or delivery methods. If a model's provider changes, check the data-processing location and privacy terms as well as price. Adjust the connection for the affected task when there is a concrete change.</p><p>If your current API works well, keep using it. If a change in provider or terms makes it hard to continue your task, you can switch to the local setup you tested earlier.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-install.webp" alt="A desk with an external drive and compact PC; the monitor shows a storage icon and progress bar" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the model files and runtime together, then test that they still work after a restart.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>China has proposed additional controls on transferring certain AI technologies overseas. As of October 17, 2026, pre-export registration has begun for covered transfers, while the final scope remains under consultation. Receiving an answer through an API and deploying a model on an overseas server receive different treatment. Start with how you access the model to decide what to keep using and what to prepare.</dd></div><div><dt>How much memory does it need?</dt><dd>Start with the [hardware finder](/?tab=finder), selecting your current PC or Mac and a model to narrow down feasible configurations. Leave room for the model files plus the input and conversation state. If your usual work is short exchanges, you can begin with a smaller local model rather than matching the size of the hosted model.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Keeping a model locally preserves access to that version's capabilities. If you also need future larger models or a hosted service's search features, divide tasks between the existing API and your local model. Keep the license and usage terms with the downloaded files.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>When OpenRouter Is Unavailable, How Do You Switch Your App to a Local LLM?</title><link>https://localai.co.kr/en/guides/openrouter-to-local-llm-fallback-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/openrouter-to-local-llm-fallback-guide</guid><description>Prepare a compatible model in LM Studio, start its local API server, then create a separate local profile in your app and continue a code review in a new chat.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">When OpenRouter Is Unavailable, How Do You Switch Your App to a Local LLM?</h1><p>Send questions from your usual app to a model on your computer.</p><p id="guide-page-summary">LM Studio runs models on your PC or Mac and can answer questions from other apps. If your app supports a custom OpenAI-compatible connection, create a separate local profile that connects to LM Studio. Prepare the model in advance, then test the connection and response with a short code review.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Download a model file supported by an LM Studio runtime and load it into memory. Complete any runtime installation prompt on the first run.</li><li>Check the server address in the Developer tab and the `/v1/models` response; enter a model ID shown in that list in your app.</li><li>Keep a separate local profile and new chat instead of overwriting the OpenRouter profile. If server authentication is enabled, enter only its local token; do not send an external service key.</li></ol></section><section><h2>A local API server receives app requests and returns answers</h2><p>LM Studio's API server receives code and questions from the app, runs them through the local model, and sends the answer back. First check whether your app's settings offer OpenAI-compatible or Custom provider. This is where you will enter LM Studio's server address (Base URL) and model ID. [LM Studio server guide](https://lmstudio.ai/docs/developer/core/server) · [Compatible API and Base URL](https://lmstudio.ai/docs/developer/openai-compat)</p><p>The function below calculates what percentage `part` represents of `total`. Send it to the local model and ask what happens when `total` is zero and how to fix it.</p><div><p><strong>Short Python example to review</strong></p><pre><code data-guide-code-block="0-0">def percentage(part, total):
    return part / total * 100</code></pre><p><small>Division fails when total is 0. Ask the model to identify that input case and suggest a fix.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/esphome-voice-satellite-build-guide">Building an ESPHome voice satellite: an ESP32-S3 microphone and wake word</a></li></ul></section><figure><img src="https://localai.co.kr/guides/lm-studio-local-serving-guide-scene-1.webp" alt="An illustration links colored blocks in a drawer cabinet to an app-shaped panel, with a writing hand and notebook in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>To connect a local model to an app, first run the API server that serves it.</figcaption></figure><section><h2>Prepare the model and runtime while you have a connection</h2><p>Install LM Studio and find a model in the Discover tab. Check its model card for a format supported by an LM Studio runtime, such as GGUF or MLX, and choose a quantized file that fits your memory. If your task needs tool calls, check that the selected model supports them. [Model download guide](https://lmstudio.ai/docs/app/basics/download-model)</p><p>After downloading, select the model in the Chat tab and load it into memory. Complete any runtime installation prompt on the first run. You can import an external GGUF into LM Studio's model folder with `lms import --copy`. If only OpenRouter is unavailable but your internet connection works, you can still prepare the model. To prepare for losing internet access too, download the model and runtime in advance. Model search, downloads, runtime installation, and updates require a connection. [Offline operation](https://lmstudio.ai/docs/app/offline) · [Import models](https://lmstudio.ai/docs/app/advanced/import-model)</p></section><section><h2>Check the localhost server and actual model ID</h2><p>Open the Developer tab in LM Studio and turn on Start server. The default example port is 1234, and Server Settings can change it, so use the actual API address shown in the app. Leave Serve on Local Network off and keep the server on this computer's localhost. [Start the server](https://lmstudio.ai/docs/developer/core/server) · [Server settings](https://lmstudio.ai/docs/developer/core/server/settings)</p><p>Open `http://localhost:1234/v1/models` in a browser or terminal and copy an `id` from its `data` array into the app. If you changed the port, replace 1234 with the actual number. With JIT loading enabled, the list may include models stored on disk but not yet loaded into memory. Load the model first from the Chat tab's model loader, or enable JIT in Server Settings. [List models API](https://lmstudio.ai/docs/developer/openai-compat/models) · [Server settings](https://lmstudio.ai/docs/developer/core/server/settings)</p><p>With the default authentication setting, this model-list request needs no external API key. If you enabled Require Authentication in LM Studio, use a local API token created through Manage Tokens in Server Settings, and enter it in the app only if its authentication field requires one. Never put an OpenRouter or other cloud key in a localhost request. [LM Studio authentication](https://lmstudio.ai/docs/developer/core/authentication)</p><div><p><strong>Check the model list</strong></p><pre><code data-guide-code-block="2-0">curl http://localhost:1234/v1/models</code></pre><p><small>This baseline assumes localhost authentication is off. If enabled, add your LM Studio token in the Authorization header.</small></p></div></section><section><h2>Create a separate local profile and open a new chat</h2><p>Create a local profile by choosing OpenAI-compatible or Custom provider in your app's model-provider settings. Do not duplicate the OpenRouter profile because its provider type or automatic routing may remain. Set Base URL to `http://localhost:1234/v1` and use the ID copied from `/v1/models`. If the app offers automatic provider fallback or a model router, turn it off so failed requests are not sent to an external service. [LM Studio Base URL format](https://lmstudio.ai/docs/developer/openai-compat)</p><p>After saving the profile, select the local profile and open a new chat. Review the messages and attachments the app includes, then enter the code and question you want reviewed. Bring over any code or conditions from the previous cloud conversation that are needed for this review.</p></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="An illustrated workbench connects a laptop with code to several interfaces through a central device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The server passes a request to the local model and returns its answer in a compatible format.</figcaption></figure><section><h2>Check the connection with a short question, then review the code</h2><p>Ask `What is 1 + 1?` in the app. If an answer returns, the basic request-and-response connection works. If no answer arrives, use the error table in the next section. To also check that the request actually reached LM Studio, use the optional log check below.</p><p>To inspect request logs, run `lms --help` in a terminal and check that the command list appears. If the command is not found, follow the [LM Studio CLI setup guide](https://lmstudio.ai/docs/cli). Then run the log command below and leave the terminal open.</p><div><p><strong>Check the LM Studio server log</strong></p><pre><code data-guide-code-block="4-0">lms log stream --source server</code></pre><p><small>A request appearing in the server log confirms the app reached the localhost server.</small></p></div><p>If you started the log stream, repeat the same short question and check that the request appears. [Log command guide](https://lmstudio.ai/docs/cli/serve/log-stream) Once the connection is checked, send the example function with `Find the bug and suggest a minimal fix. What happens when total is 0?` After the model identifies `ZeroDivisionError` when `total == 0` and proposes a fix, compare how the code handles zero and what it returns.</p><p>A local model may have a different context limit or tool-calling support from the cloud model. For a long request, keep the code and question but shorten the input; for a task that needs tools, compare results with the app's tool integration off and on. For this example, check that the model finds the division-by-zero issue and that its proposed handling produces the intended return value.</p></section><section><h2>Check the address, model ID, and authentication when an error occurs</h2><p>When an error occurs, note the first status code or message in the app and LM Studio logs. Find the symptom in the table, change one item at a time, and repeat the same short question. Check whether a request appears in the server log to help distinguish an app connection problem from a model response problem. If task results differ after a valid response, also check context length, tool support, and output limits. [Server status guide](https://lmstudio.ai/docs/cli/serve/server-start)</p><table><caption>First place to check for each visible symptom</caption><thead><tr><th scope="col">Symptom</th><th scope="col">First check</th><th scope="col">Next</th></tr></thead><tbody><tr><th scope="row">Connection refused or timeout</th><td>Server status in the Developer tab</td><td>localhost and port in the app's Base URL</td></tr><tr><th scope="row">Model not found</th><td>The `id` value in `/v1/models`</td><td>App's model field and loading state</td></tr><tr><th scope="row">401 or authentication error</th><td>Require Authentication setting</td><td>Local token, not a cloud key</td></tr><tr><th scope="row">Response arrives but tools or context differ</th><td>Model and app feature support</td><td>Retest with short public code in a new chat</td></tr></tbody></table></section><section><h2>Record the connection details and resume later</h2><p>Note the server port, model ID, and runtime so you can continue the same check in a new chat later. For preserving model files with runtime settings, see the [local LLM backup and restore guide](/guides/local-llm-model-backup-restore-guide); for the scope of related policy, see the [AI export controls and local models guide](/guides/china-ai-export-controls-openrouter-local-llm-guide).</p></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-03.webp" alt="A monitor shows a code editor beside a chat panel with a review response" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Send the same public code review in a new chat to check the local profile's connection.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LM Studio runs models on your PC or Mac and can answer questions from other apps. If your app supports a custom OpenAI-compatible connection, create a separate local profile that connects to LM Studio. Prepare the model in advance, then test the connection and response with a short code review.</dd></div><div><dt>How much memory does it need?</dt><dd>Install LM Studio and find a model in the Discover tab. Check its model card for a format supported by an LM Studio runtime, such as GGUF or MLX, and choose a quantized file that fits your memory. If your task needs tool calls, check that the selected model supports them. [Model download guide](https://lmstudio.ai/docs/app/basics/download-model)</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Install LM Studio and find a model in the Discover tab. Check its model card for a format supported by an LM Studio runtime, such as GGUF or MLX, and choose a quantized file that fits your memory. If your task needs tool calls, check that the selected model supports them. [Model download guide](https://lmstudio.ai/docs/app/basics/download-model)</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to Back Up and Restore a Local LLM You Already Use</title><link>https://localai.co.kr/en/guides/local-llm-model-backup-restore-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-model-backup-restore-guide</guid><description>Keep the model folder, version, and runtime settings for a local LLM you use, then repeat the same task with a copy while preserving the original.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How to Back Up and Restore a Local LLM You Already Use</h1><p>Copy a working model to another drive, then get a test response from the copy while keeping the original intact.</p><p id="guide-page-summary">A local LLM backup keeps your working model folder, version, and runtime settings on another drive. To restore it, register the backup files in your app and test your usual task. Start by copying the complete folder, then follow a restore example that imports one text-only GGUF into LM Studio and summarizes a notice.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Record the model repository ID, fixed commit ID, original file names, and format.</li><li>A GGUF may be one file, but a split model needs every shard; MLX and safetensors models should be backed up with their related files.</li><li>Keep the original folder and test a copy at another path so you can continue using the model you know if the test fails.</li></ol></section><section><h2>Choose your everyday model and a test document first</h2><p>Start with one model you regularly use for document summaries. Before copying it, enter ‘Service will be unavailable for 10 minutes next Tuesday at 3 p.m. for maintenance,’ and ask, ‘Summarize the schedule and expected impact in one sentence.’ Keep both the notice and prompt so you can repeat the test after loading the copy. Leave your original model folder in place until the restore test is complete.</p><p>To retrieve the same files, record the fixed commit rather than the repository's `main` branch or a movable tag. Redownloading from a private or gated repository requires an authorized account and access. Restore model files you already have locally; check the license terms before sharing or distributing the model.</p><ul><li><a href="https://huggingface.co/docs/huggingface_hub/en/guides/download">Hugging Face file downloads and revisions</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/offline-airgapped-local-ai-deployment">Building Fully Offline Local AI: Air-Gap Installation and Update Procedures</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-transfer.webp" alt="A workspace with black protective cases holding equipment and papers on either side of a metal pass-through cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping the model and its run record together makes the setup easier to identify on another drive.</figcaption></figure><section><h2>Check what to keep based on the model format</h2><p>First, find the folder the app actually loads in its model manager. Remembering only the model name can lead you to download a similarly named quantization or a newer revision. Record the repository owner and ID, exact commit revision, original file names, format and quantization, app and runtime versions, and any settings you changed, such as the chat template or context length.</p><p>A GGUF file contains weights and metadata describing the model, and some models run from a single file. Check the model card and runtime's file requirements. If the model is split across multiple files, keep every shard together in one folder. Models that handle images or audio may need a separate projector file, so follow the file names and layout specified in the model card.</p><p>MLX and safetensors models can use configuration, tokenizer, index, and shard files to load their weights. Copy the full repository folder your app currently reads and include the files named in the model card. Keep a copy of the model card and license in the folder so you can identify the repository and its terms later.</p><table><caption>Backup record fields and why they matter</caption><thead><tr><th scope="col">Record</th><th scope="col">Why keep it</th></tr></thead><tbody><tr><th scope="row">Repository ID and commit revision</th><td>To identify the same model file revision</td></tr><tr><th scope="row">Format, quantization, and original file names</th><td>To check runtime compatibility and all required shards</td></tr><tr><th scope="row">Companion files and license</th><td>To restore configuration and usage terms together</td></tr><tr><th scope="row">App and runtime versions and adjusted settings</th><td>To reproduce the conditions used to load the model</td></tr></tbody></table><ul><li><a href="https://huggingface.co/docs/hub/gguf">GGUF metadata and format</a></li><li><a href="https://huggingface.co/docs/transformers/main/big_models">safetensors shards and index files</a></li><li><a href="https://huggingface.co/docs/hub/local-cache">Hugging Face cache and snapshot structure</a></li></ul></section><section><h2>Copy the whole model folder and compare its files</h2><p>Open the model folder you identified in the app using File Explorer or Finder, then copy the entire folder to your backup drive. Keep any weight shards, configuration files, and tokenizer files together inside it. Once copying finishes, compare file lists and sizes with the original and keep your recorded versions and settings, model card, and license with the backup. Leave the original folder intact until the restore test is complete.</p><p>Pay attention to symbolic links when copying a folder from the default Hub cache. If entries in `snapshots` link to data in `blobs`, either follow those links to copy the actual files or preserve the links and copy both `snapshots` and `blobs`. Moving only a snapshot can break links that pointed to the original computer's cache.</p><p>Compare the copy's file list and sizes with the original, then use a SHA-256 checksum to check whether important large files have identical bytes. On macOS, open Terminal and replace the two paths below with the actual paths to the source and copied GGUF files. If the checksum strings before the file names match, the files at those paths have identical contents.</p><div><p><strong>Compare the source and copied GGUF checksums on macOS</strong></p><pre><code data-guide-code-block="2-0">shasum -a 256 "$HOME/Models/Publisher/Model/model.gguf" "/Volumes/Model-Backup/Publisher/Model/model.gguf"</code></pre><p><small>Replace both paths with the actual file locations. Matching checksum strings before the file names mean the copy has the same bytes as the source.</small></p></div><ul><li><a href="https://huggingface.co/docs/huggingface_hub/en/guides/manage-cache">Hugging Face cache management</a></li></ul></section><section><h2>Import a GGUF backup into a separate LM Studio folder and run it</h2><p>Open the LM Studio app once, then run `lms --help` in a terminal and check that the command list appears. If it is not found, follow the [CLI setup guide](https://lmstudio.ai/docs/cli). The command below imports one copied text-only GGUF into a test model folder named `backup-check/restored-model`. `--copy` also leaves the imported source file intact, and `--user-repo` selects a folder separate from your everyday model. If that test folder is already in use, choose a new name rather than overwrite existing files.</p><div><p><strong>Import the copied GGUF into LM Studio while preserving the source</strong></p><pre><code data-guide-code-block="3-0">lms import "/Volumes/Model-Backup/Publisher/Model/model.gguf" --copy --user-repo "backup-check/restored-model"
lms ls</code></pre><p><small>Check the copied file path and unused test-folder name before importing.</small></p></div><p>After importing, select the test model under `backup-check/restored-model` in `lms ls` or the app's My Models screen. The test uses this model imported from your backup drive. Match the recorded app and runtime versions and settings, then send the opening notice and summary prompt again. Check that the answer includes Tuesday at 3 p.m. and the ten-minute interruption.</p><p>To check offline use, disconnect the network once the model and runtime are ready and repeat the same summary. LM Studio can chat with downloaded LLMs and run a local server offline. Model search, new file and runtime downloads, and update checks require a connection.</p><p>If the result differs from your usual one, compare the model path, any missing shards, the loaded model ID, template, and context settings with your record. A load error can point to runtime compatibility or missing companion files; a response difference can follow from changed settings or runtime versions. Check where the process diverged before downloading files again so you can distinguish a difference in the original from one in the copy.</p><ul><li><a href="https://lmstudio.ai/docs/cli/local-models/import">Import a local GGUF into LM Studio</a></li><li><a href="https://lmstudio.ai/docs/cli">Set up the LM Studio CLI and basic commands</a></li><li><a href="https://lmstudio.ai/docs/app/offline">LM Studio offline operation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-install.webp" alt="A desk with an external drive and compact PC; the monitor shows a storage icon and progress bar" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Loading the copy from its new location shows whether it can actually be restored.</figcaption></figure><section><h2>Use a fixed commit when downloading files again</h2><p>When downloading a model from Hugging Face, copy the full fixed commit ID from the repository's commit history. Pass it to `hf download` with `--revision` to select the same version; add `--dry-run` first to see the file list and total size before downloading. Add `--local-dir` when you want the full repository saved as regular files in a folder you choose. Downloading a gated model requires authentication and access approval for that account.</p><p>If you already backed up the model folder, restore from those files. For a fresh download, `--local-dir` saves regular files in the repository structure under the folder you choose. After downloading, follow the earlier copying, file comparison, and restore test steps to check your backup.</p><ul><li><a href="https://huggingface.co/docs/huggingface_hub/en/guides/cli">Hugging Face CLI downloads, revisions, and dry runs</a></li></ul></section><section><h2>A model backup and a full app backup cover different things</h2><p>The restore command in this guide is for a single text-only GGUF used with LM Studio. For MLX or safetensors, back up the folder and companion files as described earlier, then follow your original app's model registration procedure. Register the copy in the folder structure that app requires and test it with the recorded settings and the same summary prompt.</p><p>For a personal model backup, record the model files and the app and runtime versions and settings used to load them. If the new computer must start without an internet connection, prepare the operating system, app installer, and required runtime separately. First test the copy with the app and runtime you normally use; if you change versions, run the representative document summary again and check for differences.</p><p>When one person is moving one model, keep the model folder used by the current app and its settings record. For deployment across multiple devices or bringing a validated installation bundle into a secure zone, see the organizational process in the [offline and air-gapped local AI deployment guide](/guides/offline-airgapped-local-ai-deployment). Personal recovery is complete when you repeat your usual summary with the copy while keeping the original.</p><p>To connect the restored model to your usual app, continue with the local profile and server address settings in the [OpenRouter-to-local LLM guide](/guides/openrouter-to-local-llm-fallback-guide).</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave the original model folder in place until the restore test is complete.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM backup keeps your working model folder, version, and runtime settings on another drive. To restore it, register the backup files in your app and test your usual task. Start by copying the complete folder, then follow a restore example that imports one text-only GGUF into LM Studio and summarizes a notice.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>To retrieve the same files, record the fixed commit rather than the repository's `main` branch or a movable tag. Redownloading from a private or gated repository requires an authorized account and access. Restore model files you already have locally; check the license terms before sharing or distributing the model.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</title><link>https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide</guid><description>A guide to the IQ2_XXS Nemotron 3.5 Bolt 74B-A9B build, local runtime paths, and memory planning for the files and context you load.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-16</p><h1 id="guide-page-title">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</h1><p>Follow the model setup and official profile, verify a first response, and check memory use on your system.</p><p id="guide-page-summary">Nemotron 3.5 Bolt 74B-A9B is a compressed hybrid language and vision model. This guide walks through downloading it and running NVIDIA's llama.cpp recipes for different GPU memory tiers.</p><p>Nemotron 3.5 Bolt 74B-A9B is a local language model designed to answer prompts and tool results and handle multi-step agent tasks. `74B` is its total parameter count; `A9B` describes the approximate number activated for a token. Rather than training a small model from scratch, NVIDIA compressed the structure of Nemotron 3.5 Super VL and heavily quantized its weights for smaller systems. [NVIDIA model overview](https://research.nvidia.com/labs/nemotron/Nemotron-3.5-Bolt-24GB/)</p><p>Download the official GGUF and run it with llama.cpp, then check the recommended context lengths by GPU memory tier and verify a first response. The release separates the main model, image projector, and DFlash draft model, so choose the components required for your task. [Official GGUF model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>74B is the total parameter count, A9B the active parameter scale per token; each GGUF file has its own listed size.</li><li>Expert weights use IQ2_XXS, Mamba linear layers use NVFP4, and selected components use Q8_0.</li><li>Memory planning must include context state, runtime buffers, and other applications in addition to model weights.</li></ol></section><section><h2>Compressing expert weights in the 74B model to 2 bits</h2><p>NVIDIA Nemotron 3.5 Bolt is a 74B model that takes prompts such as questions or code and generates a response. For the 24 GB configuration, most expert weights use IQ2_XXS at 2.0625 bits per element; NVIDIA applies quantization-aware distillation (QAD) to recover quality at the lower precision.</p><p>The 24 GB configuration budgets memory for batch size 1 and a 128K context. NVIDIA recommends an actual runtime context of either 65,536 or 262,144 tokens, depending on GPU memory.</p><p>Precision differs by component. Mamba linear layers use NVFP4, while the lm_head, token embeddings, attention, and Latent MoE weights use Q8_0. The GGUF file list in the model card lets you add up storage for the main model, image projector, and drafter you plan to use.</p><p>For each token, the router selects some experts and computation also passes through Mamba and Transformer blocks. A9B refers to the parameter scale activated per token. When comparing speed, record memory bandwidth, runtime kernels, GPU offload, input length, and concurrent requests.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide">What Is LiLiCorr? Speculative decoding for Bolt and Super VL</a></li><li><a href="https://localai.co.kr/en/guides/astabrief-8b-local-research-guide">AstaBrief 8B: Create a Cited Research Report Locally</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A monitor, compact computer, and desktop tower on a workstation" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Load the model on your PC and verify its first response.</figcaption></figure><section><h2>What to check first on a 24 GB PC</h2><p>Plan memory separately for GPU and CPU placement. Compare the weights, KV cache, and work buffers placed on the GPU with available VRAM. Check CPU-resident model parts alongside the system RAM used by the OS, browser, and editor. Changing GPU-layer offload changes the balance between both memory pools.</p><p>Before running it, check the exact GGUF filenames and download sizes in the model card, including any drafter files. Your llama.cpp build must support Mamba and the relevant quantization formats. An older runtime can fail to load the model for reasons unrelated to memory, so compare the model-card instructions with your installed runtime release. NVIDIA's published Bolt test path used llama.cpp on Windows 11 ARM x64.</p><p>On an RTX desktop, the runtime may place all layers in GPU memory or offload some to system memory. Partial offloading can make execution possible, but it changes the memory path and may substantially change throughput. Start with a short context and one request. Watch dedicated GPU memory, system memory, and the runtime log; once the model answers reliably, increase input length to isolate the next limit.</p></section><section><h2>Get a first answer with llama.cpp</h2><p>On Windows, install llama.cpp from PowerShell with `winget install llama.cpp`. Run the quick-start command to download the model and open its local chat UI at `http://127.0.0.1:8080`. Send a short prompt, confirm a response, and stop the server with Ctrl+C. For an RTX 5090, launch the official profile below separately. [NVIDIA GGUF model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF)</p><p>During the first run, the terminal shows the model name and download progress. After loading, the server prints a ready message and address. Open it in a browser on the same PC and send: `Summarize this sentence in one sentence: The model receives a prompt and generates an answer.` A relevant summary confirms text inference is working. For speed tests, record file loading, time to first token, and generation token/s separately.</p><p>The RTX 5090's 32 GB VRAM fits NVIDIA's 32 GB+ discrete-GPU tier. Download the main GGUF, mmproj, and LiLiCorr drafter with the model-card filenames, set their PowerShell paths, and start the profile with a 65,536 context, one sequence, up to six DFlash draft tokens, and Q8_0 KV cache. Quick start downloads automatically; this profile loads the three files directly. Stop the quick-start server with Ctrl+C before starting this one. [NVIDIA Windows recipe](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF)</p><p>If the first run reports unsupported tensor, compare your llama.cpp version with the formats supported by the model card. For a CUDA allocation error, reduce context and batch size first, then check dedicated and shared GPU memory in Windows Task Manager. If the server starts but the browser cannot connect, confirm the terminal's port is 8080 and open 127.0.0.1 on that PC.</p><div><p><strong>Run the llama.cpp Windows quick start</strong></p><pre><code data-guide-code-block="2-0">winget install llama.cpp
llama serve -hf nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF --host 127.0.0.1 --port 8080</code></pre><p><small>Let the model download, test a short prompt at `http://127.0.0.1:8080`, then press Ctrl+C in the terminal to stop the server.</small></p></div><div><p><strong>Download the GGUF files for the RTX 5090 profile</strong></p><pre><code data-guide-code-block="2-1">python -m pip install --upgrade huggingface_hub
$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
hf download nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF `
  NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf `
  mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf `
  --local-dir "$env:MODEL_DIR"
hf download nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr-GGUF `
  NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf `
  --local-dir "$env:MODEL_DIR"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:MMPROJ = Join-Path $env:MODEL_DIR "mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:SPEC_DRAFT = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf"</code></pre><p><small>This block downloads the profile files and sets their paths. After downloading, run the next server command in the same PowerShell session.</small></p></div><div><p><strong>NVIDIA's official 28 GB server profile for an RTX 5090</strong></p><pre><code data-guide-code-block="2-2">$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:MMPROJ = Join-Path $env:MODEL_DIR "mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:SPEC_DRAFT = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf"
llama-server.exe `
  --model "$env:MODEL" `
  --mmproj "$env:MMPROJ" `
  --batch-size 2048 `
  --ubatch-size 512 `
  --ctx-size 65536 `
  --parallel 1 `
  -ngl 999 `
  --spec-type draft-dflash `
  --spec-draft-n-max 6 `
  --spec-draft-model "$env:SPEC_DRAFT" `
  --spec-draft-ngl 999 `
  --cache-type-k q8_0 `
  --cache-type-v q8_0 `
  --temp 1.0 `
  --top-p 0.95 `
  --flash-attn on `
  --jinja `
  --host 127.0.0.1 `
  --port 8080</code></pre><p><small>Place the exact GGUF files in `models\nemotron-bolt` and run only this server. Press Ctrl+C after testing to stop it.</small></p></div></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="An open rack-server chassis showing its internal modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plan runtime memory for both weights and context state.</figcaption></figure><section><h2>Published generation and agent-task speeds on RTX Spark</h2><p>NVIDIA compared models on an RTX Spark in a 128 GB Surface Laptop Ultra, using Windows 11 ARM x64 and llama.cpp. AIPerf SPEED-Bench-Coding measures generation speed; AA-AgentPerf Local replays multi-step tasks. The model results and conditions are collected in the table in the companion guide, ‘Nemotron Bolt vs Qwen3.8-27B.’ Here, distinguish what each metric represents.</p><p>TPS is token throughput for generating against a fixed input; replay duration is the completion time for a defined set of agent tasks that includes tool use. For short code completion, look first at TPS and time to first token. For workflows chaining several tools, start with end-to-end replay time.</p><p>Rather than applying the published figures to your PC, choose one task you actually plan to run and use the same prompt, document, and tools. First record answer quality and time to first token with a short input. Then add your usual document and repeated tool calls and compare total time, VRAM, and failures to see which setting needs to change.</p><ul><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide">See the full Bolt and Qwen3.8 results table</a></li></ul></section><section><h2>When it belongs on your shortlist</h2><p>Bolt is worth evaluating if you want a model with a 70B-class total size for agent tasks on RTX-class hardware or DGX Spark instead of a data-center server. If your use case involves terminal actions, web browsing, or multi-step planning like NVIDIA's evaluation tasks, first match the model card's prompt format. Quality and tool-call reliability depend on your own instructions, tools, and safety settings, so validate each task in a sandbox before connecting it to real automation.</p><p>To test Bolt on a 24 GB card, first check whether the CPU/RAM-first command returns an answer, then add GPU layers to the working setup. Change one setting at a time to distinguish model-load failures from GPU-memory limits. The 3090 guide contains the concrete starting command.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-scale.webp" alt="A small computer on a desk with server racks behind it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test context and request count on the PC you plan to use.</figcaption></figure><aside><h2>Run Bolt on an RTX 3090 or 5090</h2><p>See the official 5090 profile and CPU/RAM-first test command for a 3090.</p><a href="https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Nemotron 3.5 Bolt 74B-A9B is a compressed hybrid language and vision model. This guide walks through downloading it and running NVIDIA's llama.cpp recipes for different GPU memory tiers.</dd></div><div><dt>How much memory does it need?</dt><dd>The 24 GB configuration budgets memory for batch size 1 and a 128K context. NVIDIA recommends an actual runtime context of either 65,536 or 262,144 tokens, depending on GPU memory.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Precision differs by component. Mamba linear layers use NVFP4, while the lm_head, token embeddings, attention, and Latent MoE weights use Q8_0. The GGUF file list in the model card lets you add up storage for the main model, image projector, and drafter you plan to use.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to run Nemotron Bolt on an RTX 3090 or 5090</title><link>https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide</guid><description>Use NVIDIA's official 32 GB+ profile on an RTX 5090, start with CPU and system RAM on an RTX 3090, and track memory use.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">How to run Nemotron Bolt on an RTX 3090 or 5090</h1><p>Test starting configurations for the 3090 and 5090 while recording memory used by the main GGUF, KV cache, and runtime buffers.</p><p id="guide-page-summary">NVIDIA's official GGUF recipes use different context and batch settings for discrete GPUs with 32 GB+ and 48 GB+ memory. This guide explains which starting point to use on RTX 3090/5090 and what to measure.</p><p>An RTX 3090 has 24 GB of GDDR6X; the RTX 5090 has 32 GB of GDDR7. During inference, GGUF weights, KV cache, and CUDA buffers all use memory, so track GPU and system RAM after loading. NVIDIA's published Bolt speed test used a 128 GB Surface Laptop Ultra with RTX Spark. [RTX 3090 specifications](https://www.nvidia.com/en-eu/geforce/graphics-cards/30-series/rtx-3090/) · [Bolt test conditions](https://research.nvidia.com/labs/nemotron/Nemotron-3.5-Bolt-24GB/)</p><p>This guide gives starting settings and a memory log sequence for RTX 3090/5090 desktops. Check model file sizes and llama.cpp support, run a short-context test, then record load time, first response, VRAM, and system RAM to plan the next context or GPU-layer adjustment.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 3090's 24 GB is dedicated VRAM shared by weights, KV cache, and runtime buffers during execution.</li><li>Start a 5090 with the official 28 GB dGPU recipe and a 3090 with the CPU/RAM-first path.</li><li>On a 3090, increase `-ngl` from a working setup in steps and record VRAM and system RAM.</li></ol></section><section><h2>Weights and context both use runtime memory</h2><p>The RTX 3090 has 24 GB of dedicated VRAM. During inference, model weights share it with the context KV cache, compute buffers, display output, and driver. After launching, check VRAM in Task Manager and find a stable configuration starting with a short `-c 4096` context.</p><p>The RTX 5090's 32 GB VRAM fits NVIDIA's 32 GB+ dGPU profile. Confirm that your current llama.cpp build supports the Mamba and Transformer operations and IQ2_XXS, load the model, then adjust context length and concurrent requests one at a time while recording memory use.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/rtx-spark-laptop-local-ai-guide">RTX Spark laptops: how do they differ from DGX Spark and MacBook Pro?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A monitor, compact computer, and desktop tower on a workstation" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the weight and context space that must fit in GPU memory.</figcaption></figure><section><h2>Use the official profile on a 5090; start on CPU with a 3090</h2><p>The RTX 5090's 32 GB meets NVIDIA's official 28 GB discrete-GPU recipe tier. Download the main GGUF, mmproj, and separate LiLiCorr drafter; set their paths in PowerShell environment variables, then run the model-card command as written. It starts the server with a 65,536 context, one sequence, up to six DFlash draft tokens, and Q8_0 KV cache. Keep the mmproj file required by the recipe even when your first test is text-only.</p><p>For a CPU-first test on an RTX 3090, download the roughly 22 GB main GGUF from the [official model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF) and place it in `models\nemotron-bolt`. Reserve additional system RAM for the OS and runtime buffers. As an experimental first diagnostic, run `-c 4096 -ngl 0` and record the response and RAM use. If it responds, choose the -ngl 8 and 16 commands below one at a time and compare VRAM and output.</p><p>Run only one server at a time. Record its response and memory use, then press Ctrl+C in that terminal before moving to the next setting.</p><div><p><strong>Download the model, projector, and drafter for an RTX 5090</strong></p><pre><code data-guide-code-block="1-0">python -m pip install --upgrade huggingface_hub
$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
hf download nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF `
  NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf `
  mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf `
  --local-dir "$env:MODEL_DIR"
hf download nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr-GGUF `
  NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf `
  --local-dir "$env:MODEL_DIR"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:MMPROJ = Join-Path $env:MODEL_DIR "mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:SPEC_DRAFT = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf"</code></pre><p><small>After the downloads and path setup finish, run the official server profile in the same PowerShell session.</small></p></div><div><p><strong>Run the official 28 GB RTX 5090 profile</strong></p><pre><code data-guide-code-block="1-1">$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:MMPROJ = Join-Path $env:MODEL_DIR "mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
$env:SPEC_DRAFT = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf"
llama-server.exe `
  --model "$env:MODEL" `
  --mmproj "$env:MMPROJ" `
  --batch-size 2048 `
  --ubatch-size 512 `
  --ctx-size 65536 `
  --parallel 1 `
  -ngl 999 `
  --spec-type draft-dflash `
  --spec-draft-n-max 6 `
  --spec-draft-model "$env:SPEC_DRAFT" `
  --spec-draft-ngl 999 `
  --cache-type-k q8_0 `
  --cache-type-v q8_0 `
  --temp 1.0 `
  --top-p 0.95 `
  --flash-attn on `
  --jinja `
  --host 127.0.0.1 `
  --port 8080</code></pre><p><small>Download the three files into the same folder, then run the server. Check its response and press Ctrl+C before starting a 3090 command.</small></p></div><div><p><strong>Test a first CPU-only response on an RTX 3090</strong></p><pre><code data-guide-code-block="1-2">$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
llama-server.exe --model "$env:MODEL" --ctx-size 4096 --parallel 1 -ngl 0 --host 127.0.0.1 --port 8080</code></pre><p><small>Run this in the same PowerShell session. Record the response and memory use, then press Ctrl+C to stop the server.</small></p></div><div><p><strong>Next test with 8 GPU layers on the 3090</strong></p><pre><code data-guide-code-block="1-3">$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
llama-server.exe --model "$env:MODEL" --ctx-size 4096 --parallel 1 -ngl 8 --host 127.0.0.1 --port 8080</code></pre><p><small>Start this after stopping the CPU test with Ctrl+C. Record the response and VRAM, then stop it.</small></p></div><div><p><strong>Additional test with 16 GPU layers on the 3090</strong></p><pre><code data-guide-code-block="1-4">$env:MODEL_DIR = Join-Path $PWD.Path "models\nemotron-bolt"
$env:MODEL = Join-Path $env:MODEL_DIR "NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf"
llama-server.exe --model "$env:MODEL" --ctx-size 4096 --parallel 1 -ngl 16 --host 127.0.0.1 --port 8080</code></pre><p><small>Run after stopping the 8-layer server with Ctrl+C. Compare its memory use and response with the previous step.</small></p></div></section><section><h2>What to record when comparing the 3090 and 5090</h2><p>To compare the cards, hold the PC, driver, llama.cpp build, model files, context, and prompt constant. Record initial load time, time to first token, generation token/s, VRAM use, and answer accuracy separately. TPS on a short-prompt benchmark can differ from completion time on a real document, so measure both if both matter to you. Use the same number of runs and compare medians alongside averages to reduce the influence of one background task.</p><p>NVIDIA's published test used the RTX Spark in a 128 GB Surface Laptop Ultra. Its results cannot be scaled to desktop RTX 3090 or 5090 by GPU generation alone. VRAM, memory bandwidth, CPU/GPU offloading, and runtime kernels differ, so test each card separately with the same model, context, and prompt.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="An open rack-server chassis showing its internal modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the 3090 and 5090 under the same workload.</figcaption></figure><section><h2>Scale up from a short test to your real workload</h2><p>After the first response arrives, test a short coding or web-research task as a single prompt and check answer quality. Then enable tool calls and run the same request in a sandbox; inspect changed files and sources. Record total task time, including time spent reviewing tool results.</p><p>If CPU/RAM execution fails, check the model path, llama.cpp support for the format, available system RAM, and error log. If a memory error appears after adding GPU layers, return to the last `-ngl` setting that answered. Increase context length in steps after confirming a normal response.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-scale.webp" alt="A small computer on a desk with server racks behind it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use logs and memory readings to set the next configuration.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>NVIDIA's official GGUF recipes use different context and batch settings for discrete GPUs with 32 GB+ and 48 GB+ memory. This guide explains which starting point to use on RTX 3090/5090 and what to measure.</dd></div><div><dt>How much memory does it need?</dt><dd>The RTX 3090 has 24 GB of dedicated VRAM. During inference, model weights share it with the context KV cache, compute buffers, display output, and driver. After launching, check VRAM in Task Manager and find a stable configuration starting with a short `-c 4096` context.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>For a CPU-first test on an RTX 3090, download the roughly 22 GB main GGUF from the [official model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF) and place it in `models\nemotron-bolt`. Reserve additional system RAM for the OS and runtime buffers. As an experimental first diagnostic, run `-c 4096 -ngl 0` and record the response and RAM use. If it responds, choose the -ngl 8 and 16 commands below one at a time and compare VRAM and output.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Nemotron Bolt vs Qwen3.8-27B: which is faster for agent work?</title><link>https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide</guid><description>Read NVIDIA's Bolt and Qwen3.8-27B results from the same RTX Spark test and choose the metric that fits your workload: TPS or agent-task completion time.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Nemotron Bolt vs Qwen3.8-27B: which is faster for agent work?</h1><p>A short benchmark and a multi-step task can produce different speed rankings.</p><p id="guide-page-summary">This guide compares Nemotron Bolt and Qwen3.8-27B on token throughput and agent-task replay time in NVIDIA's RTX Spark test, then shows how to test them with your own prompts and tools.</p><p>In NVIDIA's same RTX Spark test, Bolt posted higher TPS and shorter agent-task time than Qwen3.8-27B, while Qwen3.6 and Gemma4 posted higher TPS and shorter task times than Bolt. The table compares all four models' quantization and acceleration setups against both measures so you can choose the one closest to your workload. [NVIDIA results](https://research.nvidia.com/labs/nemotron/Nemotron-3.5-Bolt-24GB/)</p><p>Check each model's quantization and acceleration setup in the published results. For your own comparison, use the same document, prompt, and tools for both models. Start with a short prompt, extend to your usual document length, and record answer accuracy, tool calls, and memory use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Bolt had higher TPS and shorter replay duration than Qwen3.8-27B, under one published setup.</li><li>TPS is generation throughput; replay duration is the completion time of a fixed task set.</li><li>A comparison using your prompts, tools, and context length is more directly useful.</li></ol></section><section><h2>Two metrics describe different kinds of waiting</h2><p>TPS on AIPerf SPEED-Bench-Coding is the token throughput while generating against a controlled benchmark input. It shows how quickly text is produced, but not the full cycle of selecting and running tools or revising a plan after reading results. Perceived wait also depends on time to first token and total output length.</p><p>AA-AgentPerf Local replay duration is the time to replay a set of heterogeneous agent trajectories. Because it includes prompts and tool-use steps, it is closer to end-to-end automation time than coding-benchmark TPS, but remains tied to fixed scenarios and a specific runtime. Your agent may rank models differently if it uses other tools or longer documents.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/specprefill-ttft-guide">SpecPrefill: reducing the wait before the first token</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A monitor, compact computer, and desktop tower on a workstation" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check each model's weights and runtime configuration.</figcaption></figure><section><h2>Where did Bolt beat Qwen3.8 in the published test?</h2><p>The test used the same RTX Spark system in a 128 GB Surface Laptop Ultra, Windows 11 ARM x64, and llama.cpp. TPS is from AIPerf SPEED-Bench-Coding; replay time is from a fixed AA-AgentPerf Local task set.</p><table><caption>NVIDIA's Bolt and Qwen3.8 results on the same RTX Spark</caption><thead><tr><th scope="col">Model and setup</th><th scope="col">AIPerf coding TPS</th><th scope="col">AA-AgentPerf Local replay duration (s)</th></tr></thead><tbody><tr><th scope="row">Nemotron Bolt IQ2_XXS + LiLiCorr</th><td>83.99</td><td>600.80</td></tr><tr><th scope="row">Qwen3.8-27B UD-Q4_K_M + DFlash</th><td>28.26</td><td>1,043.28</td></tr><tr><th scope="row">Qwen3.6-35B-A3B UD-Q4_K_M + MTP</th><td>96.63</td><td>453.97</td></tr><tr><th scope="row">Gemma 4 26B-A4B UD-Q4_K_M + MTP</th><td>100.56</td><td>480.68</td></tr></tbody></table></section><section><h2>Build a small comparison around your workflow</h2><p>In the table, Bolt had about three times Qwen3.8's generation TPS and finished the fixed agent replay in about 42% less time. Qwen3.6 and Gemma4 had higher TPS and shorter replay durations than Bolt. For continuous token generation, look first at TPS; for multi-step tool automation, focus on replay duration.</p><p>Download each model from its official source and match the Qwen3.8-27B quantization and DFlash setup named in the table. Specify whether your Bolt setup includes IQ2_XXS and LiLiCorr. Record file sizes, runtime versions, and memory use for reproducibility. If drafters differ, you are comparing the full acceleration setups rather than only the base models.</p><p>Choose one representative task and give both models the same document, question, tools, and output limit. Start with a short exchange to verify operation and answer accuracy, then add real document length and repeated tool calls. Record time to first token, generation speed, end-to-end time, peak VRAM, and failures. If answers differ, score them with the same rubric to compare speed and quality together.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="An open rack-server chassis showing its internal modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record TPS and task completion time as separate metrics.</figcaption></figure><section><h2>Which one to choose</h2><p>For tasks with many steps and decisions based on tool results, prioritize reliable tool calls in your tool format and end-to-end replay time. Bolt's shorter AA-AgentPerf Local result than Qwen3.8-27B is useful for shortlisting, but may not apply if your tools differ. Use a sandbox for automation that edits files or retrieves web content.</p><p>For repeated short code completions or fixed-input generation, measure TPS and time to first token separately. Qwen3.6 and Gemma4 had higher TPS than Bolt in the published table. Repeat the test with the same input length and GPU setup to see which result suits your workload.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-scale.webp" alt="A small computer on a desk with server racks behind it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the same task using your own document and tools.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>This guide compares Nemotron Bolt and Qwen3.8-27B on token throughput and agent-task replay time in NVIDIA's RTX Spark test, then shows how to test them with your own prompts and tools.</dd></div><div><dt>How much memory does it need?</dt><dd>Download each model from its official source and match the Qwen3.8-27B quantization and DFlash setup named in the table. Specify whether your Bolt setup includes IQ2_XXS and LiLiCorr. Record file sizes, runtime versions, and memory use for reproducibility. If drafters differ, you are comparing the full acceleration setups rather than only the base models.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What Is LiLiCorr? Speculative decoding for Bolt and Super VL</title><link>https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide</guid><description>Learn how LiLiCorr links draft candidates, how its Bolt and Super VL recipes differ, and what the published measurements mean.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What Is LiLiCorr? Speculative decoding for Bolt and Super VL</h1><p>LiLiCorr uses drafter files and recipes matched to each target and runtime.</p><p id="guide-page-summary">LiLiCorr is a speculative-decoding drafter that scores connections among candidate next tokens and selects a draft path for a target model. The required drafter files and settings vary by target and runtime. Bolt uses a llama.cpp GGUF pair; Super VL uses a DGX Spark vLLM pair, so this guide separates their files, commands, and published metrics.</p><p>When a target model generates one token at a time, it repeats work for each next token. Speculative decoding lets a drafter propose candidates first, then has the target verify a block and accept the matching run together. LiLiCorr scores connections between candidates to choose a draft path. [NVIDIA LiLiCorr research](https://research.nvidia.com/labs/nemotron/lilicorr/)</p><p>LiLiCorr still requires a drafter file and runtime recipe matched to the target. Bolt uses a GGUF target/drafter pair in llama.cpp; Super VL uses an NVFP4 target and LiLiCorr drafter in vLLM on DGX Spark. Prepare each pair and its settings from the corresponding model card.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Bolt uses llama.cpp with IQ2_XXS GGUF; Super VL uses vLLM with NVFP4 on DGX Spark.</li><li>Published acceptance length and tokens/s are different metrics with different conditions.</li></ol></section><section><h2>LiLiCorr selects candidates that fit together</h2><p>A parallel draft model proposes next-token candidates at several positions at once. LiLiCorr scores the connections between candidates to choose a path for the target model to verify. [LiLiCorr method](https://research.nvidia.com/labs/nemotron/lilicorr/)</p><p>Speed gains vary with the drafter and target pairing, input style, and number of concurrent requests. Bolt runs with llama.cpp and Super VL with vLLM, so use the settings for each path.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide">How to run Nemotron 3.5 Super VL on DGX Spark or RTX PRO 6000</a></li><li><a href="https://localai.co.kr/en/guides/replayssm-hybrid-model-decoding-guide">What is ReplaySSM? Faster decoding for Nemotron and Qwen servers</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p05-draft-target.webp" alt="A drafter proposes token candidates for a target model to verify" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The LiLiCorr drafter proposes tokens for the target to verify.</figcaption></figure><section><h2>Bolt: connect the GGUF drafter in llama.cpp</h2><p>For Bolt 74B-A9B, prepare both the target GGUF and the LiLiCorr drafter GGUF. Connect the llama.cpp server with `--spec-type draft-dflash` and `--spec-draft-model` to use the two files.</p><p>NVIDIA lists a 32 GB recipe for a 128 GB RTX Spark or a GeForce RTX with at least 48 GB of VRAM. It uses a 262,144 context, one concurrent sequence, and up to 7 draft tokens.</p><p>For a 64 GB RTX Spark or a GPU with at least 32 GB of VRAM, NVIDIA lists a 28 GB recipe with a 65,536 context, one sequence, up to 6 draft tokens, and a Q8_0 KV cache. [Bolt GGUF model card and recipes](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF/blob/main/README.md)</p><p>Download the target GGUF and LiLiCorr drafter GGUF. Replace the paths in the first code block with the actual file locations and run it in your shell. Once both variables are set, use the next command to pair the files. Apply the context, cache, and draft-token options from the model-card recipe for your GPU.</p><div><p><strong>Set the downloaded GGUF paths</strong></p><pre><code data-guide-code-block="1-0">export BOLT_GGUF="/absolute/path/to/target.gguf"
export LILICORR_GGUF="/absolute/path/to/lilicorr-drafter.gguf"</code></pre></div><div><p><strong>Set the llama.cpp LiLiCorr files</strong></p><pre><code data-guide-code-block="1-1">llama-server -m "$BOLT_GGUF" \
  --spec-type draft-dflash \
  --spec-draft-model "$LILICORR_GGUF" \
  --host 127.0.0.1</code></pre></div></section><section><h2>Super VL: use vLLM LiLiCorr on DGX Spark</h2><p>On DGX Spark (GB10), use NVIDIA's Super VL LiLiCorr profile. Run the NVFP4 target and a separate `...NVFP4-LiLiCorr` drafter inside the vLLM container.</p><p>The NVIDIA settings use one concurrent sequence, 7 draft tokens, 0.75 GPU memory utilization, and 8,192 batched tokens. The vLLM recipes list this DGX Spark LiLiCorr path separately from the native MTP path for RTX PRO 6000. [Super VL LiLiCorr model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p><p>The target also has a native MTP path. MTP uses prediction heads inside the target, while LiLiCorr requires a separate drafter checkpoint; keep their speculative method and model arguments distinct. Start with a short text request and confirm the API model name, then add image input and your usual concurrency while recording memory use and completion time.</p><ul><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Run Bolt 74B-A9B in llama.cpp</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-timeline.webp" alt="A view of token candidates and verification along a Nemotron generation timeline" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Super VL and Bolt use different target-specific execution paths.</figcaption></figure><section><h2>Read the workload alongside each metric</h2><p>NVIDIA's study reports that LiLiCorr increased acceptance length by 9–19% and greedy decoding throughput by 4–13% over vanilla DFlash trained on the same data. The comparison tested models including Qwen3 4B and 8B on H100 GPUs.</p><p>The Super VL LiLiCorr card's SPEED-Bench reports acceptance lengths of 4.74 (temperature 0) and 4.36 (temperature 1), averaged across three seeds with draft length 7, 880 prompts, and 64 concurrent requests.</p><p>The 64 is the benchmark load. The DGX Spark serving recipe sets `--max-num-seqs 1`. Acceptance length means the average number of accepted tokens.</p><p>[Research results](https://research.nvidia.com/labs/nemotron/lilicorr/) · [Model card measurements](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4-LiLiCorr)</p><p>A separate published Bolt measurement used a 128GB Surface Laptop Ultra with RTX Spark, Windows 11 ARM, and llama.cpp. Bolt IQ2_XXS with LiLiCorr recorded 83.99 TPS on AIPerf SPEED-Bench-Coding and 600.80 seconds for AA-AgentPerf Local replay. These measurements apply to that Bolt setup and workload. [Bolt measurement conditions](https://research.nvidia.com/labs/nemotron/Nemotron-3.5-Bolt-24GB/)</p></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A workspace running a local model on DGX Spark" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the model, drafter, and runtime before serving.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LiLiCorr is a speculative-decoding drafter that scores connections among candidate next tokens and selects a draft path for a target model. The required drafter files and settings vary by target and runtime. Bolt uses a llama.cpp GGUF pair; Super VL uses a DGX Spark vLLM pair, so this guide separates their files, commands, and published metrics.</dd></div><div><dt>How much memory does it need?</dt><dd>NVIDIA lists a 32 GB recipe for a 128 GB RTX Spark or a GeForce RTX with at least 48 GB of VRAM. It uses a 262,144 context, one concurrent sequence, and up to 7 draft tokens.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The target also has a native MTP path. MTP uses prediction heads inside the target, while LiLiCorr requires a separate drafter checkpoint; keep their speculative method and model arguments distinct. Start with a short text request and confirm the API model name, then add image input and your usual concurrency while recording memory use and completion time.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>For a 64 GB RTX Spark or a GPU with at least 32 GB of VRAM, NVIDIA lists a 28 GB recipe with a 65,536 context, one sequence, up to 6 draft tokens, and a Q8_0 KV cache. [Bolt GGUF model card and recipes](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF/blob/main/README.md)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to run Nemotron 3.5 Super VL on DGX Spark or RTX PRO 6000</title><link>https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide</guid><description>Learn what Super VL accepts and how its vLLM recipes differ for DGX Spark and RTX PRO 6000.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How to run Nemotron 3.5 Super VL on DGX Spark or RTX PRO 6000</h1><p>Choose the runtime recipe and input size before planning around a 120B model name.</p><p id="guide-page-summary">Nemotron 3.5 Super VL is a multimodal MoE model with 120B total and 12B active parameters. It accepts text, images, and video frames, then returns text. The published vLLM paths differ: DGX Spark uses LiLiCorr, while one RTX PRO 6000 recipe uses NVFP4 and native MTP with 5 draft tokens. This guide distinguishes their context allocations and input paths.</p><p>Super VL takes a prompt with text, images, or video frames and returns text. It has 120B total parameters, activates 12B per token, and uses the C-RADIO vision encoder. For local inference, first choose between the DGX Spark LiLiCorr recipe and the RTX PRO 6000 native-MTP recipe. [NVIDIA model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p><p>The model’s maximum context is 1M tokens, but the selected hardware recipe sets the actual allocation. The vLLM recipe lists context 114,688 for DGX Spark NVFP4 and 16,384 for RTX PRO 6000 NVFP4. These are allocations for those cookbook profiles, not a universal limit for every deployment. [vLLM recipe table](https://recipes.vllm.ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>DGX Spark LiLiCorr and RTX PRO 6000 MTP are separate command paths.</li><li>The NVFP4 vLLM context allocations differ: 114,688 on Spark and 16,384 on PRO 6000.</li></ol></section><section><h2>What can you send and receive?</h2><p>Super VL is a vision-language model that accepts text, images, and frames sampled from video. You can send a document table or screen image and receive a text response. The model card supports MP4 video up to 2 minutes. Image and video requests use context for visual tokens and frames, so start with a small input.</p><p>The model combines Mamba-2, MoE, and attention layers with a C-RADIO encoder and vision-language connector. The NVFP4 weight index is 75.01 GB; the vLLM recipe calculates a 91 GB minimum with a 20% allowance. That is a weight-loading baseline: context, batch size, and media-frame settings use additional memory. [Hardware-specific vLLM recipes](https://recipes.vllm.ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide">What Is LiLiCorr? Speculative decoding for Bolt and Super VL</a></li><li><a href="https://localai.co.kr/en/guides/rtx-spark-laptop-local-ai-guide">RTX Spark laptops: how do they differ from DGX Spark and MacBook Pro?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-review.webp" alt="A workspace for reviewing Nemotron model responses" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Super VL accepts text, image, and video-frame input.</figcaption></figure><section><h2>DGX Spark path: run with LiLiCorr drafting</h2><p>To use NVIDIA's vLLM quick start on DGX Spark (GB10), first run the official `vllm/vllm-openai:v0.32.0` container or the listed nightly container. Enter the `vllm serve` command below in a terminal inside the container. It runs the NVFP4 target with a separate LiLiCorr drafter.</p><p>The settings are GPU utilization 0.75, 8,192 batched tokens, one concurrent sequence, and 7 draft tokens. [NVIDIA Super VL model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4) · [Official vLLM container image](https://hub.docker.com/r/vllm/vllm-openai/)</p><p>Start the server in the container's first shell and wait for model loading and kernel compilation. Leave the server running, open another shell in the same container, and run the check below. The API is ready when the model list includes `nemotron-3.5-super-vl`. Follow the model-card quick-start for the container and its detailed options.</p><div><p><strong>Start the Super VL LiLiCorr server on DGX Spark</strong></p><pre><code data-guide-code-block="1-0">export MODEL=nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4
export DRAFT_MODEL=nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4-LiLiCorr
vllm serve "$MODEL" \
  --host 127.0.0.1 \
  --served-model-name nemotron-3.5-super-vl \
  --max-num-seqs 1 \
  --trust-remote-code \
  --gpu-memory-utilization 0.75 \
  --max-num-batched-tokens 8192 \
  --speculative_config.model "$DRAFT_MODEL" \
  --speculative_config.num_speculative_tokens 7 \
  --speculative_config.method dflash \
  --mamba-backend flashinfer \
  --mamba-ssm-cache-dtype float16 \
  --enable-mamba-cache-stochastic-rounding \
  --mamba-cache-philox-rounds 5 \
  --enable-mamba-shared-prefix-checkpoint \
  --video-pruning-rate 0.5 \
  --media-io-kwargs '{"video": {"fps": 2, "num_frames": 256}}' \
  --block-size 64 \
  --prefix-match-unit 64 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --reasoning-parser nemotron_v3</code></pre></div><div><p><strong>Check the API model in another shell in the same container</strong></p><pre><code data-guide-code-block="1-1">curl --fail http://127.0.0.1:8000/v1/models</code></pre></div></section><section><h2>RTX PRO 6000 path: NVFP4 with native MTP 5</h2><p>The vLLM cookbook provides an NVFP4 profile for one RTX PRO 6000 Blackwell. Its settings are tensor parallel 1, pipeline parallel 1, data parallel 1, max model length 16,384, and up to 128 concurrent sequences.</p><p>This profile uses a target-native MTP draft of 5. It is a different path from DGX Spark, which specifies a separate LiLiCorr drafter. [Single RTX PRO 6000 profile and command](https://recipes.vllm.ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p><p>The RTX PRO 6000 profile on the recipe page is labeled for a text workload. For image or video input, check for a profile that explicitly matches the GPU and media mode; a text-only command does not establish multimodal support. Begin with the profile’s sequence and context settings, then test with your own inputs.</p><div><p><strong>Single RTX PRO 6000 NVFP4 + MTP profile</strong></p><pre><code data-guide-code-block="2-0">vllm serve nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4 \
  --host 127.0.0.1 \
  --served-model-name nemotron-3.5-super \
  --trust-remote-code \
  --tensor-parallel-size 1 \
  --pipeline-parallel-size 1 \
  --data-parallel-size 1 \
  --max-model-len 16384 \
  --max-num-seqs 128 \
  --speculative_config.method mtp \
  --speculative_config.num_speculative_tokens 5 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --reasoning-parser nemotron_v3</code></pre></div></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-02.webp" alt="A desktop workspace prepared for local inference on DGX Spark" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>DGX Spark and RTX PRO 6000 use different vLLM profiles.</figcaption></figure><section><h2>Match input type and limits when comparing</h2><p>The DGX Spark LiLiCorr and RTX PRO 6000 native-MTP profiles here are separate recipes for different hardware, so comparing them also includes differences in device and context allocation. To isolate LiLiCorr versus MTP, measure both on the same hardware and runtime while holding target, input, sampling, context, and concurrency constant.</p><table><caption>Choosing a local Super VL profile</caption><thead><tr><th scope="col">Hardware</th><th scope="col">recipe</th><th scope="col">profile context</th><th scope="col">Speculative setting</th></tr></thead><tbody><tr><th scope="row">DGX Spark (GB10)</th><td>vLLM + NVFP4</td><td>114,688</td><td>LiLiCorr 7 draft tokens</td></tr><tr><th scope="row">1× RTX PRO 6000</th><td>vLLM + NVFP4</td><td>16,384</td><td>native MTP 5 draft tokens</td></tr></tbody></table><p>The 1M figure is the model’s maximum context. Published quick starts and hardware profiles use smaller allocations. Verify an image request with one small PNG, then add document pages. For video, start from the card’s 2 FPS and up-to-256-frame settings, adjusting clip length and resolution. [Super VL API and media examples](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</p><p>The table’s context and speculative settings are the values listed for each hardware profile in the vLLM cookbook.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="An AI server chassis opened to show its internal components" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plan for runtime cache and context memory as well as model storage.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Nemotron 3.5 Super VL is a multimodal MoE model with 120B total and 12B active parameters. It accepts text, images, and video frames, then returns text. The published vLLM paths differ: DGX Spark uses LiLiCorr, while one RTX PRO 6000 recipe uses NVFP4 and native MTP with 5 draft tokens. This guide distinguishes their context allocations and input paths.</dd></div><div><dt>How much memory does it need?</dt><dd>The model combines Mamba-2, MoE, and attention layers with a C-RADIO encoder and vision-language connector. The NVFP4 weight index is 75.01 GB; the vLLM recipe calculates a 91 GB minimum with a 20% allowance. That is a weight-loading baseline: context, batch size, and media-frame settings use additional memory. [Hardware-specific vLLM recipes](https://recipes.vllm.ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4)</dd></div><div><dt>When is it better not to choose this?</dt><dd>The RTX PRO 6000 profile on the recipe page is labeled for a text workload. For image or video input, check for a profile that explicitly matches the GPU and media mode; a text-only command does not establish multimodal support. Begin with the profile’s sequence and context settings, then test with your own inputs.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The settings are GPU utilization 0.75, 8,192 batched tokens, one concurrent sequence, and 7 draft tokens. [NVIDIA Super VL model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4) · [Official vLLM container image](https://hub.docker.com/r/vllm/vllm-openai/)</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX Spark laptops: how do they differ from DGX Spark and MacBook Pro?</title><link>https://localai.co.kr/en/guides/rtx-spark-laptop-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-spark-laptop-local-ai-guide</guid><description>Compare RTX Spark laptops with DGX Spark and MacBook Pro by operating system, memory, and software ecosystem.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">RTX Spark laptops: how do they differ from DGX Spark and MacBook Pro?</h1><p>Choose what matters first: model compatibility or portability.</p><p id="guide-page-summary">RTX Spark laptops are a new Windows on Arm platform with CUDA-capable Blackwell GPUs and shared CPU/GPU memory. DGX Spark is a Linux desktop AI system, while MacBook Pro uses macOS and the Apple Silicon ecosystem, including MLX and Core ML. Compare them by GPU-addressable memory on the exact SKU and by the apps and model recipes you need.</p><p>RTX Spark is a Windows on Arm platform used by several laptop manufacturers. Its Blackwell RTX GPU and Grace CPU share unified memory. Check GPU-accessible capacity on your chosen SKU alongside memory used by Windows, apps, and the model runtime. [Microsoft Surface configurations](https://blogs.windows.com/devices/2026/10/07/pre-order-our-most-powerful-surface-devices-ever/)</p><p>DGX Spark, by comparison, is a desktop system with GB10, 128GB coherent unified memory, and DGX OS. MacBook Pro runs macOS and offers Apple Silicon unified-memory configurations with apps such as MLX and Core ML. Even when memory figures look similar, OS, app compatibility, runtime recipes, and thermal design differ. [NVIDIA DGX Spark](https://www.nvidia.com/en-us/products/workstations/dgx-spark/) · [Apple MacBook Pro specifications](https://www.apple.com/macbook-pro/specs/)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>RTX Spark uses Windows on Arm and CUDA, DGX Spark uses DGX OS/Linux, and MacBook Pro uses macOS.</li><li>128GB is the Surface top-SKU figure, not a guarantee the GPU can use all of it.</li></ol></section><section><h2>RTX Spark laptops and their top specifications</h2><p>RTX Spark laptops are a platform with Windows on Arm, a Grace CPU, a Blackwell RTX GPU, and unified memory. Microsoft's maximum Surface Laptop Ultra configuration has a 15-inch display, up to 20 Grace CPU cores, up to 6,144 Blackwell GPU cores, and up to 128 GB of unified memory.</p><p>The maximum AI performance figure is a theoretical value using FP4 and sparsity. Measure actual processing time with the runtime, model, and input you plan to use. [Surface announcement and SKU specifications](https://blogs.windows.com/devices/2026/10/07/pre-order-our-most-powerful-surface-devices-ever/)</p><p>The GPU can use less than the full 128 GB of system unified memory. Windows, the browser, IDE, and image or video frames share the same memory pool with model weights and the KV cache.</p><p>Distinguish the total memory in a product SKU from GPU-addressable memory, and check the model recipe's minimum memory and context allocation as well.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hardware-choice-tco.webp" alt="A desk for comparing hardware for local AI workloads" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check total memory alongside GPU-addressable memory.</figcaption></figure><section><h2>Compare DGX Spark and MacBook Pro</h2><p>For these three platforms, OS and runtime compatibility often matter more than the shared ability to run local inference. RTX Spark is a candidate when you want CUDA and Windows creative apps on a laptop. DGX Spark suits a desktop system centered on Linux and NVIDIA serving recipes. If your workflow uses macOS apps and MLX or Core ML, start with MacBook Pro configurations.</p><table><caption>Platform, memory, and software paths</caption><thead><tr><th scope="col">Device</th><th scope="col">OS and form factor</th><th scope="col">Memory and AI software</th></tr></thead><tbody><tr><th scope="row">RTX Spark laptop</th><td>Windows on Arm · portable</td><td>Unified memory varies by Surface SKU; GPU-addressable capacity is lower</td></tr><tr><th scope="row">DGX Spark</th><td>DGX OS/Linux · desktop</td><td>GB10 and 128GB coherent unified memory; NVIDIA DGX/vLLM workflows</td></tr><tr><th scope="row">MacBook Pro</th><td>macOS · laptop</td><td>Apple Silicon unified memory varies by SKU; MLX and Core ML ecosystem</td></tr></tbody></table><p>MacBook Pro memory options vary by chip configuration. The NVIDIA and Apple figures describe each manufacturer’s platform, not comparative performance.</p><p>Apple lists MacBook Pro unified memory by chip and GPU SKU. Its 2026 M5 Pro/M5 Max specifications list up to 128GB for an M5 Max with a 40-core GPU and up to 64GB for M5 Pro configurations. For Mac, check the model formats supported by apps such as MLX or Core ML; for RTX Spark, check the Windows on Arm and CUDA path. [Apple MacBook Pro specifications](https://www.apple.com/macbook-pro/specs/)</p></section><section><h2>Check Windows on Arm and app versions</h2><p>Windows has Arm64 apps and x86 apps that run through Prism. NVIDIA and Microsoft announced CUDA and developer tool support for RTX Spark. Check each product's documentation to see whether your packages, plugins, and containers support the Windows on Arm CUDA path.</p><p>An x86 command-line app running does not establish that CUDA extensions or drivers will work the same way. [Windows development environment on RTX Spark](https://blogs.windows.com/windowsexperience/2026/05/31/introducing-a-powerful-new-chapter-for-windows-pcs-accelerated-by-nvidia-rtx-spark/)</p><p>RTX Spark laptop availability on October 16, 2026, may vary by region and SKU. Use the announced manufacturer list to identify candidates, then make a final choice from the exact product page’s memory, storage, display and thermal design, and Arm app compatibility. [NVIDIA COMPUTEX platform announcement](https://www.nvidia.com/en-us/geforce/news/computex-2026-nvidia-geforce-rtx-announcements/)</p></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A workstation with a compact computer and desktop PC beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Portable RTX Spark and desktop DGX Spark fit different settings.</figcaption></figure><section><h2>Before purchase: check the exact SKU and app support</h2><p>Before buying, note the checkpoint size, required context, and whether you need image or video input, then compare them with GPU-addressable memory on the candidate SKU. Check Windows Arm64 and CUDA support in the model and app documentation. Test a real request after receiving the device, or earlier if you can use a demo unit.</p><p>The published Surface Laptop Ultra specifications are an example of the highest confirmed configuration among announced RTX Spark laptops. Other RTX Spark models may use the same platform but differ in memory options, display, battery, and cooling.</p><p>Compare memory and AI workload performance using the exact order SKU and manufacturer specifications of the product you plan to buy.</p><ul><li><a href="https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide">Set up Super VL on DGX Spark or RTX PRO 6000</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide">Bolt memory tiers and GPU recipes</a></li></ul></section><section><h2>After purchase: test with your model and workload</h2><p>NVIDIA tested Bolt IQ2_XXS and LiLiCorr on a 128 GB Surface Laptop Ultra using Windows 11 ARM and llama.cpp. The AIPerf SPEED-Bench-Coding result was 83.99 TPS, and AA-AgentPerf Local replay time in the same test was 600.80 seconds.</p><p>This is an example of an actual model and runtime combination among published RTX Spark laptop results. Compare it separately from measurements on DGX Spark or MacBook Pro. [Bolt test conditions](https://research.nvidia.com/labs/nemotron/Nemotron-3.5-Bolt-24GB/)</p><p>After receiving the device, prepare the checkpoint you plan to use and repeat a short request to separate first-load time from subsequent responses. Then open your usual apps and increase context, image resolution, or video frames while recording GPU memory, completion time, fan noise, and power state. For a useful MacBook Pro comparison, match model, quantization, context, and request.</p></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-03.webp" alt="A workspace comparing a portable computer with a desktop AI system" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match model and app OS support before choosing a SKU.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>RTX Spark laptops are a new Windows on Arm platform with CUDA-capable Blackwell GPUs and shared CPU/GPU memory. DGX Spark is a Linux desktop AI system, while MacBook Pro uses macOS and the Apple Silicon ecosystem, including MLX and Core ML. Compare them by GPU-addressable memory on the exact SKU and by the apps and model recipes you need.</dd></div><div><dt>How much memory does it need?</dt><dd>RTX Spark laptops are a platform with Windows on Arm, a Grace CPU, a Blackwell RTX GPU, and unified memory. Microsoft's maximum Surface Laptop Ultra configuration has a 15-inch display, up to 20 Grace CPU cores, up to 6,144 Blackwell GPU cores, and up to 128 GB of unified memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What server do you need to run Ling 3.1 Flash?</title><link>https://localai.co.kr/en/guides/ling-31-flash-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ling-31-flash-local-guide</guid><description>Review Ling 3.1 Flash's size and official SGLang serving recipe, then check the server memory and access path you need.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What server do you need to run Ling 3.1 Flash?</h1><p>Official recipes use a multi-GPU server for a 574 GB checkpoint.</p><p id="guide-page-summary">Ling 3.1 Flash is an MoE language model with 560B total parameters and 25B active per token. Official SGLang recipes run its 574 GB FP8 checkpoint on 8×H200 or 4×GB300 servers.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It activates 25B of its 560B parameters per token.</li><li>Official SGLang examples use 8×H200 or 4×GB300 servers.</li></ol></section><section><h2>What Ling 3.1 Flash does</h2><p>Ling 3.1 Flash generates answers from text prompts for coding and agent tasks. It has 560B total parameters, activates 25B per token, and supports up to a 1M-token context. The official FP8 checkpoint file listing totals about 574 GB. [Model card and files](https://huggingface.co/inclusionAI/Ling-3.1-flash/tree/main)</p><p>Context length is the maximum input a model can process at once. Longer documents also require more memory for the KV cache and inference engine. Check the available GPU memory and document length, then set the context to fit the task.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check runtime memory needs as well as the model files.</figcaption></figure><section><h2>Plan around the official server recipes and 574 GB checkpoint</h2><p>The official SGLang quick start uses TP8 and EP8 across eight H200 GPUs, or TP4 and EP4 across four GB300 GPUs. The model files total about 574 GB; inference also needs memory for the KV cache and runtime, depending on context length. Check storage and GPU capacity, then choose a context length for your requests. [SGLang setup](https://huggingface.co/inclusionAI/Ling-3.1-flash)</p><p>Tensor parallelism (TP) splits computation across GPUs, while expert parallelism (EP) distributes MoE experts. Use the table to match these settings to the official server recipes, then allow for KV-cache and runtime memory at your actual context length.</p><table><caption>SGLang configurations in the official model card</caption><thead><tr><th scope="col">Server GPUs</th><th scope="col">Tensor / expert parallel</th><th scope="col">Runtime</th></tr></thead><tbody><tr><th scope="row">8×H200</th><td>TP8 / EP8</td><td>SGLang day-0 image</td></tr><tr><th scope="row">4×GB300</th><td>TP4 / EP4</td><td>SGLang day-0 image</td></tr></tbody></table></section><section><h2>Start the server and send a first request</h2><p>First, pull the SGLang container as described in the model card. The command below targets 8×H200 and uses `--host 127.0.0.1` instead of the official example's `0.0.0.0`, keeping access on the same machine. Add network controls and authentication before allowing other computers to connect. Mount the Hugging Face cache on host storage so the roughly 574 GB checkpoint does not need to be downloaded again after each container removal. [Cache locations](https://huggingface.co/docs/huggingface_hub/en/package_reference/environment_variables)</p><div><p><strong>Start the SGLang server</strong></p><pre><code data-guide-code-block="2-0">docker pull lmsysorg/sglang:dev-ling-3.1-flash
mkdir -p "$HOME/.cache/huggingface"

docker run --gpus all --network host --ipc=host --rm \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  lmsysorg/sglang:dev-ling-3.1-flash \
  python3 -m sglang.launch_server \
    --model-path inclusionAI/Ling-3.1-flash \
    --tp 8 --ep 8 \
    --speculative-algorithm NEXTN \
    --host 127.0.0.1 --port 30000</code></pre></div><p>When the server is ready, send a request to `http://127.0.0.1:30000/v1/chat/completions`. The OpenAI-compatible API uses the model ID `Ling-3.1-flash`; refer to the model card examples for `enable_thinking`, temperature, top-k, and top-p.</p><p>First send a short text prompt and confirm that a response arrives, then test your document length and tool calls. If there is no response, inspect the container logs for model loading errors or insufficient GPU memory. [Official setup](https://huggingface.co/inclusionAI/Ling-3.1-flash)</p><div><p><strong>Send a first text request</strong></p><pre><code data-guide-code-block="2-1">curl -s http://127.0.0.1:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"Ling-3.1-flash","messages":[{"role":"user","content":"짧은 요약을 한 문장으로 써 주세요."}],"chat_template_kwargs":{"enable_thinking":true},"temperature":1.0,"top_k":20,"top_p":0.95,"stream":true}'</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Local AI serving engine comparison</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Large models may need a server that distributes them across accelerators.</figcaption></figure><section><h2>What changed in the October 19 checkpoint</h2><p>A checkpoint dated October 19 (Ling-3.1-flash-1019) is up. The architecture and window are unchanged and the post-training differs; 560B total with 25B active, a 1M window and the 8×H200 recipe all stay as they were.</p><p>The gains look like this: the Artificial Analysis intelligence index moves from 41 to 44, AA-Briefcase from about 1400 to 1524 Elo, AutomationBench from 62 to 68 percent, CritPt from 18 to 26 and SciCode from 54 to 57.</p><table><caption>What moved in the October 19 checkpoint</caption><thead><tr><th scope="col">Measure</th><th scope="col">Before</th><th scope="col">October 19</th></tr></thead><tbody><tr><th scope="row">Artificial Analysis index</th><td>41</td><td>44</td></tr><tr><th scope="row">AA-Briefcase (Elo)</th><td>1400</td><td>1524</td></tr><tr><th scope="row">AutomationBench</th><td>62%</td><td>68%</td></tr><tr><th scope="row">CritPt</th><td>18%</td><td>26%</td></tr><tr><th scope="row">SciCode</th><td>54%</td><td>57%</td></tr></tbody></table><p>Dated checkpoints get mixed up with their predecessor: check which revision --model-path resolves to and which revision sits in your cache.</p></section><section><h2>Decide whether it fits your workload</h2><p>To check whether you need long context or coding and agent features, choose a representative task and repeat it with the same document and output length. Record time to first token and total completion time to see whether 1M context or reasoning options help your work. Published benchmark throughput applies to its test hardware and conditions.</p><p>Before providing the API to teammates, decide who can access it and how long request and server logs will be retained. For internal documents, also check the permitted scope of use.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose how the client connects to the model server.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Ling 3.1 Flash is an MoE language model with 560B total parameters and 25B active per token. Official SGLang recipes run its 574 GB FP8 checkpoint on 8×H200 or 4×GB300 servers.</dd></div><div><dt>How much memory does it need?</dt><dd>Context length is the maximum input a model can process at once. Longer documents also require more memory for the KV cache and inference engine. Check the available GPU memory and document length, then set the context to fit the task.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Ling 3.1 Flash generates answers from text prompts for coding and agent tasks. It has 560B total parameters, activates 25B per token, and supports up to a 1M-token context. The official FP8 checkpoint file listing totals about 574 GB. [Model card and files](https://huggingface.co/inclusionAI/Ling-3.1-flash/tree/main)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can you run Muse Spark Open on one Mac?</title><link>https://localai.co.kr/en/guides/muse-spark-open-mac-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/muse-spark-open-mac-guide</guid><description>Separate Muse Spark Open's memory scale, Apple MLX distributed setup, and published M5 Ultra measurements.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Can you run Muse Spark Open on one Mac?</h1><p>Separate the single-Mac oQ3e path from distributed NVFP4.</p><p id="guide-page-summary">Muse Spark Open is a multimodal model with 816B total and 42B active parameters. Meta and Apple's NVFP4 MLX path uses two M5 Ultra Mac Studios; oMLX 0.7.1rc1 reports a 370 GB oQ3e run on one 512 GB M3 Ultra Mac.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It accepts text, image, video, and audio and returns text.</li><li>Apple's measurements used two or four M5 Ultra systems at 8,192-token context.</li></ol></section><section><h2>What does this model take in and return?</h2><p>Muse Spark Open is a multimodal language model that accepts text, images, video, and audio and returns text. It has 816B total parameters, 42B active per token, and supports up to a 1M-token context at inference. It targets coding and agent work, but local deployment starts with checking whether you have enough memory for the weights and runtime headroom. [Meta model card](https://huggingface.co/meta-models/Muse-Spark-Open-816B-A42B)</p><p>Checkpoint size varies by precision and quantization. Meta's model card lists at least 700 GB VRAM for NVFP4 GPU deployment and 2 TB for BF16, with additional memory for KV cache and activations. These figures describe large server deployment requirements, not consumer-GPU compatibility.</p><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Budget for both model weights and runtime headroom.</figcaption></figure><section><h2>Choose between one 512 GB Mac and multiple M5 Ultra systems</h2><p>The MLX distributed run described by Meta and Apple uses two M5 Ultra Mac Studios, each with 512 GB of unified memory. Separately, oMLX 0.7.1rc1 reports running a 370 GB oQ3e checkpoint on a single M3 Ultra Mac with 512 GB of unified memory.</p><p>The quantization and inference engines differ, so do not compare the performance figures directly. [Apple's MLX setup](https://machinelearning.apple.com/research/mlx-distributed-inference) · [oMLX 0.7.1rc1](https://github.com/jundot/omlx/releases/tag/v0.7.1rc1)</p><p>Distributed inference requires macOS 26.2 or later and direct Thunderbolt 5 RDMA links between the Macs. First list each Mac, its Thunderbolt IP, and RDMA device in the hostfile. Meta's mlx.distributed_config instructions explain how to create hostfile.json; the existing JACCL guide also covers connection setup and validation. Run the server command below on the primary Mac where that file is saved.</p><div><p><strong>Apple MLX distributed server command</strong></p><pre><code data-guide-code-block="1-0">mlx.launch --hostfile hostfile.json --backend jaccl \
  --env MLX_METAL_FAST_SYNCH=1 -- \
  mlx_lm.server \
    --model meta-models/Muse-Spark-Open-816B-A42B-NVFP4 \
    --port 8080</code></pre></div><p>The table shows Apple's distributed NVFP4 MLX results on M5 Ultra systems at an 8,192-token context. The single-Mac oQ3e path uses a different model format and runtime, so do not compare the figures directly; test each path with your own inputs.</p><table><caption>Apple's M5 Ultra measurements at 8,192-token context</caption><thead><tr><th scope="col">Mac setup</th><th scope="col">Time to first token</th><th scope="col">Decode speed</th></tr></thead><tbody><tr><th scope="row">2-machine pipeline</th><td>8.4 seconds</td><td>15.74 tok/s</td></tr><tr><th scope="row">2-machine tensor parallelism</th><td>8.2 seconds</td><td>24.99 tok/s</td></tr><tr><th scope="row">4-machine tensor parallelism</th><td>4.8 seconds</td><td>36.73 tok/s</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/mlx-multi-mac-jaccl-guide">JACCL connection and hostfile setup</a></li><li><a href="https://dev.meta.ai/docs/cookbook/muse-spark-open-mac">Meta Muse Spark Mac setup and hostfile</a></li></ul></section><section><h2>Start with oMLX on one 512 GB Mac</h2><p>For one Mac, use the `mlx-community/Muse-Spark-Open-816B-A42B-oQ3e` variant in oMLX 0.7.1rc1, separate from Meta’s distributed NVFP4 path. The model files total 370 GB, and the release notes report loading this checkpoint on an M3 Ultra Mac with 512 GB. oMLX is a release candidate, not the stable release. [oMLX release notes](https://github.com/jundot/omlx/releases/tag/v0.7.1rc1)</p><p>In the oMLX app, open Models &gt; Downloader and select Muse Spark Open oQ3e from the Recommended tab. Check that the disk has room for the 370 GB files before downloading, then load the model from the list. Start with a short text prompt and modest context; confirm it answers without a memory warning before adding images or longer context. [Model recommendations](https://github.com/jundot/omlx/releases/tag/v0.7.1rc1)</p><p>For this M3 Ultra 512 GB oQ3e run, oMLX 0.7.1rc1 reports 225 tok/s prefill and 21.3 tok/s decode. The release notes do not include the full prompt and output conditions, so do not compare these directly with Apple’s 8,192-token M5 Ultra table. Repeat your own documents and record model loading, prefill, and decode separately to evaluate your workload.</p><p>If the model is missing or fails to load, confirm that you selected the `oQ3e` variant and that its download completed. If the files are present but a memory warning appears, unload other models and retry with a shorter context. Check the first load error in oMLX logs and verify that your version lists support for this model.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1rc1">Muse support and measurements in oMLX 0.7.1rc1</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>MLX distributes the model across Macs linked by Thunderbolt 5 RDMA.</figcaption></figure><section><h2>Check modality support and license terms</h2><p>Meta’s model card lists text, image, video, and audio inputs with text output. Image, video, and audio request formats vary by MLX adapter or runtime, so follow the examples in the documentation for your chosen setup.</p><p>The weights are released under the Muse Model License. Before using them in a service or redistributing the model, check the applicable terms in the [full license](https://huggingface.co/meta-models/Muse-Spark-Open-816B-A42B/blob/main/LICENSE).</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the input media, then test text, images, video, or audio.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Muse Spark Open is a multimodal model with 816B total and 42B active parameters. Meta and Apple's NVFP4 MLX path uses two M5 Ultra Mac Studios; oMLX 0.7.1rc1 reports a 370 GB oQ3e run on one 512 GB M3 Ultra Mac.</dd></div><div><dt>How much memory does it need?</dt><dd>Checkpoint size varies by precision and quantization. Meta's model card lists at least 700 GB VRAM for NVFP4 GPU deployment and 2 TB for BF16, with additional memory for KV cache and activations. These figures describe large server deployment requirements, not consumer-GPU compatibility.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The quantization and inference engines differ, so do not compare the performance figures directly. [Apple's MLX setup](https://machinelearning.apple.com/research/mlx-distributed-inference) · [oMLX 0.7.1rc1](https://github.com/jundot/omlx/releases/tag/v0.7.1rc1)</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Muse Spark Open is a multimodal language model that accepts text, images, video, and audio and returns text. It has 816B total parameters, 42B active per token, and supports up to a 1M-token context at inference. It targets coding and agent work, but local deployment starts with checking whether you have enough memory for the weights and runtime headroom. [Meta model card](https://huggingface.co/meta-models/Muse-Spark-Open-816B-A42B)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How can you search your local photos and recordings with EmbeddingGemma 2?</title><link>https://localai.co.kr/en/guides/embeddinggemma-2-local-search-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/embeddinggemma-2-local-search-guide</guid><description>Turn text, photos, and recordings into search vectors with runnable Python examples. Compare them in EmbeddingGemma 2's shared embedding space, evaluate retrieval on your own data, and troubleshoot environment, file-path, and memory errors.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How can you search your local photos and recordings with EmbeddingGemma 2?</h1><p>Search photos with text and compare documents and recordings in one embedding space.</p><p id="guide-page-summary">EmbeddingGemma 2 maps text, code, images, video, and audio into a shared 768-dimensional embedding space. It creates vectors for retrieval; a separate LLM can summarize the results.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Compare images, video, audio, and text in one embedding space.</li><li>Use SearchQuery for queries and Document for corpus items.</li></ol></section><section><h2>Searching beyond text documents</h2><p>EmbeddingGemma 2 turns text, code, images, video, and audio into numerical embeddings for search. It retrieves documents, photos, or recordings related to a query; a separate LLM can summarize the results. All inputs share a 768-dimensional embedding space, so text can retrieve photos and descriptions can be compared with audio. [Google model card](https://huggingface.co/google/embeddinggemma-2)</p><p>An embedding is an array of numbers representing the meaning of the original content. The model is trained so that semantically similar queries and items sit near one another. For example, a question about refund timing can retrieve a policy saying refunds take up to five business days. Korean retrieval quality depends on wording and domain, so evaluate it on your own materials.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Jev-Omni: multimodal decisions on local GPUs</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-search-fetch-api-local-rag-guide">DeepSeek Search and Fetch API: giving a local LLM web results</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-failure-diagnosis">When local RAG answer is wrong: Search, chunk, model diagnosis order</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-evaluation-deepeval">Local LLM·RAG quality evaluation: Verifying changed settings with DeepEval</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare image or audio vectors with text queries in the same space.</figcaption></figure><section><h2>Split documents and start with text retrieval</h2><p>Split content into readable units, such as one FAQ entry or one manual section, instead of embedding an entire document as a single item. Store the document ID, title, text, and source location so a result can be opened and checked. Choose chunk boundaries that do not separate tables or code from their meaning.</p><p>The installation commands below are for bash/zsh on macOS or Linux. In Windows PowerShell, create a virtual environment and activate it with `.\.venv\Scripts\Activate.ps1`. Install the packages and run the example in that environment.</p><p>For text-only search, you can disable the image and audio encoders and load the 270M text configuration. Use the `SearchQuery` prompt for queries and `Document` for documents to be searched. Format a titled document as `title: title | text: content`. See the [official developer guide](https://developers.googleblog.com/embeddinggemma-2-the-developer-guide/).</p><div><p><strong>Create the environment and install packages</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U sentence-transformers transformers</code></pre></div><div><p><strong>Compare query and document embeddings</strong></p><pre><code data-guide-code-block="1-1">from sentence_transformers import SentenceTransformer

model = SentenceTransformer(
    "google/embeddinggemma-2",
    config_kwargs={"vision_config": None, "audio_config": None},
)
documents = [
    "title: 환불 처리 | text: 결제 취소 후 영업일 기준 5일 이내에 환불됩니다.",
    "title: 배송 변경 | text: 주문 준비가 시작되기 전까지 배송지를 바꿀 수 있습니다.",
]
query = "환불은 며칠 안에 되나요?"
doc_vectors = model.encode(documents, prompt_name="Document", normalize_embeddings=True)
query_vector = model.encode(query, prompt_name="SearchQuery", normalize_embeddings=True)
scores = model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
    print(f"{scores[index]:.3f}\t{documents[index]}")</code></pre></div><p>Save the code as `search.py` and run it in the same virtual environment. The first search works when it prints both documents and ranks the refund policy first. Check whether expected items appear near the top using query-document pairs from your own data, then adjust chunking and titles.</p><div><p><strong>Run the example</strong></p><pre><code data-guide-code-block="1-2">python search.py</code></pre></div></section><section><h2>Add multimodal queries to a text index</h2><p>An existing index can be reused for image or audio queries only when vectors are compatible with the same EmbeddingGemma 2 checkpoint, task setup, and dimensions. This does not mean vectors from another model such as Qwen or BGE can be mixed into it.</p><p>For photos or recordings, keep source paths, captions, and recording dates as metadata. Vectors do not replace source files; retain identifiers that let reviewers open the result.</p></section><section><h2>Search photos and audio with text queries</h2><p>First, place `photos/lake.jpg`, `photos/street.jpg`, and `recordings/meeting.wav` in the working folder, or change the paths below to your files. Install the multimodal encoders and media-processing libraries. Pass photos to `encode()` with the `image` key and recordings with the `audio` key. The example compares a text description with two image embeddings and ranks them by similarity.</p><div><p><strong>Install multimodal input libraries</strong></p><pre><code data-guide-code-block="3-0">python -m pip install -U sentence-transformers transformers pillow soundfile torchcodec</code></pre></div><div><p><strong>Rank photos using a text query</strong></p><pre><code data-guide-code-block="3-1">from sentence_transformers import SentenceTransformer

model = SentenceTransformer("google/embeddinggemma-2")
query = model.encode("눈 덮인 산과 호수가 보이는 풍경", prompt_name="SearchQuery")
photos = [{"image": "photos/lake.jpg"}, {"image": "photos/street.jpg"}]
photo_vectors = model.encode(photos)
scores = model.similarity(query, photo_vectors)[0]
print(scores.argsort(descending=True).tolist())</code></pre></div><p>For audio, pass the file path as `model.encode({"audio": "recordings/meeting.wav"})` and compare it with a text query. The example below ranks two questions by similarity to the meeting recording. Audio is resampled to 16 kHz internally. Video defaults to one sampled frame per second; adjust the frame count for denser scene retrieval. [Google multimodal examples](https://ai.google.dev/gemma/docs/embeddinggemma/multimodal-embeddinggemma-with-sentence-transformers)</p><div><p><strong>Compare a recording with text queries</strong></p><pre><code data-guide-code-block="3-2">from sentence_transformers import SentenceTransformer

model = SentenceTransformer("google/embeddinggemma-2")
audio = model.encode({"audio": "recordings/meeting.wav"})
queries = [
    "회의 일정을 언제로 정했나요?",
    "환불은 며칠 안에 되나요?",
]
query_vectors = model.encode(queries, prompt_name="SearchQuery")
scores = model.similarity(audio, query_vectors)[0]
for index in scores.argsort(descending=True).tolist():
    print(f"{scores[index]:.3f}\t{queries[index]}")</code></pre></div></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Encode queries and documents with their matching task prompts.</figcaption></figure><section><h2>Distinguish text-only and full multimodal loading</h2><p>The official card lists a 270M text-only selective configuration and a 740M configuration with text, vision, and audio encoders. Enable only the modalities you need, and record the library options and actual memory use.</p><p>Do not treat the full-model specification from the earlier introduction as the memory requirement for a text-only path. The first run downloads weights; use the documented text-only configuration for text retrieval comparisons.</p></section><section><h2>Choose an embedding dimension and review the license</h2><p>EmbeddingGemma 2 returns 768-dimensional vectors by default. Sentence Transformers can truncate them to 512, 256, or 128 dimensions to reduce index storage, but retrieval quality still needs checking. Google reports quality close to the default down to 256 dimensions and recommends 128 dimensions for text-only workloads. Encode queries and documents at the same dimension, and normalize after truncation.</p><p>When changing dimensions, re-embed the stored documents and rebuild the index. Queries and corpus items must use the same dimension. The model uses the Apache 2.0 license, which permits use, modification, and redistribution subject to its terms; retain the license and copyright notices when redistributing. [Model card and license](https://huggingface.co/google/embeddinggemma-2)</p><div><p><strong>Create matching 256-dimensional vectors</strong></p><pre><code data-guide-code-block="5-0">from sentence_transformers import SentenceTransformer

model = SentenceTransformer("google/embeddinggemma-2")
query = "환불은 며칠 안에 되나요?"
document = "title: 환불 처리 | text: 결제 취소 후 영업일 기준 5일 이내에 환불됩니다."
query_vector = model.encode(
    query, prompt_name="SearchQuery", truncate_dim=256, normalize_embeddings=True
)
document_vector = model.encode(
    document, prompt_name="Document", truncate_dim=256, normalize_embeddings=True
)
print(model.similarity(query_vector, document_vector))</code></pre></div></section><section><h2>Match query instructions and document formatting</h2><p>For text search, prefix queries with `task: search result | query: ...` and format documents as `title: ... | text: ...`. Do not add text prefixes to image, video, or audio inputs. Use `title: none` when no document title exists.</p><p>The official Sentence Transformers example uses `SearchQuery` and `Document` task names to apply the corresponding prompts. Choose either the library prompt or manual prefixes; do not apply both and duplicate the instruction.</p></section><section><h2>Troubleshoot runtime and memory errors</h2><p>If you see `ModuleNotFoundError`, check that the Python running `search.py` is the same virtual environment where you installed the packages. Run `python -m pip show sentence-transformers` to confirm; activate the environment and install again if needed.</p><p>If an image or audio file cannot be opened, check its relative path from the current working directory. Try the absolute file path to separate a path issue from a model issue. If memory runs out, use the text-only configuration or close other apps and models before retrying.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Evaluate retrieval on your data with labeled queries.</figcaption></figure><section><h2>Update a folder index incrementally and measure its size</h2><p>Store file IDs, hashes, and modification times so only changed documents and media are re-embedded, and remove vectors for deleted files. For photo or audio folders, link captions to source files so the index points back to the right item.</p><p>Truncating to 128, 256, 512, or 768 dimensions can reduce raw vector storage but may affect quality. Compare ranks on the same queries and base storage decisions on the full database index and metadata, not raw arrays alone.</p></section><section><h2>Evaluate each modality and verify sources separately</h2><p>Create separate query sets for the directions you will use, such as text-to-image, image-to-text, or audio-to-text. Record whether the gold file ID appears in the top k. Success in one direction does not establish performance for every modality pair.</p><p>Open the retrieved documents, photos, and recordings to confirm they contain the evidence. Separate retrieval misses from parsing or caption errors. This guide reports no run on reader data; measure accuracy, latency, and memory on your own files.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>EmbeddingGemma 2 maps text, code, images, video, and audio into a shared 768-dimensional embedding space. It creates vectors for retrieval; a separate LLM can summarize the results.</dd></div><div><dt>How much memory does it need?</dt><dd>The official card lists a 270M text-only selective configuration and a 740M configuration with text, vision, and audio encoders. Enable only the modalities you need, and record the library options and actual memory use.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>EmbeddingGemma 2 turns text, code, images, video, and audio into numerical embeddings for search. It retrieves documents, photos, or recordings related to a query; a separate LLM can summarize the results. All inputs share a 768-dimensional embedding space, so text can retrieve photos and descriptions can be compared with audio. [Google model card](https://huggingface.co/google/embeddinggemma-2)</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is ReplaySSM? Faster decoding for Nemotron and Qwen servers</title><link>https://localai.co.kr/en/guides/replayssm-hybrid-model-decoding-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/replayssm-hybrid-model-decoding-guide</guid><description>How ReplaySSM changes hybrid LLM state storage and draft verification. Explains NVIDIA and Princeton measurements and what they mean for a personal PC versus a concurrent server.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">What is ReplaySSM? Faster decoding for Nemotron and Qwen servers</h1><p>Reduce repeated state writes while generating answers for concurrent requests.</p><p id="guide-page-summary">ReplaySSM is an inference optimization that changes how SSM layers retain past input. It stores a checkpoint separately from recent inputs, reducing full-state writes at each token. It is relevant to hybrid-model servers handling concurrent requests.</p><p>When several agents send requests to a Qwen or Nemotron server, the engine repeatedly reads and updates each conversation’s state. SSM layers summarize previous context in a fixed-size state. ReplaySSM reduces repeated state-memory traffic to help the server generate tokens faster.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Accumulate recent inputs and periodically fold them into the checkpoint to reduce state writes.</li><li>Retain accepted draft inputs to handle speculative-decoding rollback.</li><li>Kernel and full-step gains differed in large-batch standard decoding.</li></ol></section><section><h2>Buffer recent inputs instead of writing the state every step</h2><p>An SSM layer incorporates new information into its previous state when processing a token. With concurrent requests, reading and writing a state for every conversation creates more memory traffic. ReplaySSM keeps a checkpoint and buffers recent inputs. It computes outputs from both, then folds the buffered inputs into the checkpoint when the buffer fills.</p><p>Hybrid Nemotron and Qwen models combine SSM and attention layers. ReplaySSM reduces the cost of reading and writing the SSM state. It can coexist with weight quantization, while the file-size setting is selected separately.</p><ul><li><a href="https://arxiv.org/html/2610.13778v1">ReplaySSM paper and algorithm</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A work desk with a compact desktop and PC tower" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record a baseline with identical input and output before changing engines.</figcaption></figure><section><h2>Rollback after verifying MTP drafts becomes cheaper</h2><p>When MTP or a separate drafter proposes several tokens, the target model accepts a prefix. After discarding the rest, its conversation state must match the accepted tokens. ReplaySSM adjusts the end of the recent-input buffer to retain that prefix, reducing the need to save a large state snapshot for every draft token.</p><p>This optimization changes state computation and storage inside the engine. LiLiCorr instead improves the proposals likely to be accepted. Recording draft acceptance length separately from state-verification cost helps identify which server change was useful.</p><ul><li><a href="https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide">Understand LiLiCorr drafters</a></li></ul></section><section><h2>Results differ between one request and large batches</h2><p>NVIDIA and Princeton researchers compared four Mamba-2 and GDN models in vLLM. The table covers standard decoding without speculative acceleration. Separating kernel speedup from speedup of the entire decode step makes the server-level effect clearer.</p><table><caption>ReplaySSM standard decoding: published results</caption><thead><tr><th scope="col">Condition</th><th scope="col">Result</th></tr></thead><tbody><tr><th scope="row">Batch 1</th><td>No speedup in these tests</td></tr><tr><th scope="row">Batch 256 · SSM kernel</th><td>1.46–1.80×</td></tr><tr><th scope="row">Batch 256 · complete decode step</th><td>1.20–1.47×</td></tr></tbody></table><p>4B models: one H100; 120B-class: one B300 · no tensor parallelism · FP32 SSM state · window L=16 · tuned vLLM baseline</p><p>Published tests showed no standard-decoding speedup at batch size 1 and gains at batch size 256. On a personal PC, measure one request’s TTFT and generation speed first. For a team server, reproduce actual concurrency and compare per-request latency and total throughput.</p><ul><li><a href="https://developer.nvidia.com/blog/replayssm-rethinking-state-storage-for-faster-hybrid-model-decoding/">Models and hardware in NVIDIA’s tests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two desktop computers connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare aggregate throughput and per-request latency on a concurrent server.</figcaption></figure><section><h2>What to record before adopting it on a server</h2><p>ReplaySSM is integrated into TensorRT-LLM, vLLM and FlashInfer. Check that your version supports the model’s SSM path and start on a test server. Fix the checkpoint, input and output lengths, state precision and drafter setting, then record the current engine’s baseline. After changing the engine, compare TTFT, completion time, peak memory and failures using the same requests.</p><p>If your goal is a faster personal PC, first compare supported MTP, DFlash or more efficient quantization for the model. For a server shared by several agents, add ReplaySSM to the candidates and evaluate request completion during busy periods before switching.</p><ul><li><a href="https://github.com/Johnny-Liou/ReplaySSM">ReplaySSM implementation and reproduction materials</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">Lightning MTP on Mac</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="A desk with a recorder and notebook beside a desktop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose settings by single-request response time for a personal PC.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ReplaySSM is an inference optimization that changes how SSM layers retain past input. It stores a checkpoint separately from recent inputs, reducing full-state writes at each token. It is relevant to hybrid-model servers handling concurrent requests.</dd></div><div><dt>How much memory does it need?</dt><dd>ReplaySSM is integrated into TensorRT-LLM, vLLM and FlashInfer. Check that your version supports the model’s SSM path and start on a test server. Fix the checkpoint, input and output lengths, state precision and drafter setting, then record the current engine’s baseline. After changing the engine, compare TTFT, completion time, peak memory and failures using the same requests.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LFM2.5-24B-A2B local LLM: a Korean-capable 24B MoE on your own PC</title><link>https://localai.co.kr/en/guides/lfm25-24b-a2b-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lfm25-24b-a2b-local-guide</guid><description>Liquid AI's LFM2.5-24B-A2B is a Korean-capable MoE model with 24B total and 2.45B active parameters. This guide covers the official GGUF and MLX 4-bit files, the 131K context, the vendor's Apple M5 Max 184 tok/s claim, and what to verify on your own machine.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-23</p><h1 id="guide-page-title">LFM2.5-24B-A2B local LLM: a Korean-capable 24B MoE on your own PC</h1><p>A 24B MoE with Korean support that runs on Macs and NVIDIA PCs</p><p id="guide-page-summary">LFM2.5-24B-A2B is a reasoning model Liquid AI released on 12 October 2026. Its mixture-of-experts structure routes each token through 4 of 64 experts, so the weights occupy 24B while a single token costs roughly 2.45B of computation. It supports 16 languages including Korean, and the official GGUF and MLX 4-bit files mean both Macs and NVIDIA PCs can run it. The 184 tok/s in the model card was measured on an Apple M5 Max, so do not read it as your machine's speed.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>24B total and 2.45B active: large weights, light per-token compute.</li><li>Both an official GGUF (Q8_0) and an MLX 4-bit build are published.</li><li>The 184 tok/s on the model card was measured on an Apple M5 Max.</li></ol></section><section><h2>The file is 24B; the computation is 2.45B</h2><p>LFM2.5-24B-A2B is a text reasoning model that takes a question and produces an answer. The 24B in the name is the total parameter count the model carries; A2B means roughly 2B parameters are active for each token. The model card states 2.45B active parameters. Of its 40 layers, 30 use short convolution blocks and 10 use standard attention, and each MoE block selects 4 experts from 64.</p><p>What makes this practical is that memory and speed move separately. Loading the model needs space for 24B of weights, but token throughput stays close to the compute of 2.45B active parameters. Compared with a dense 24B model it should produce more tokens from the same memory, while a 7B-sized budget cannot hold it at all. That is why both numbers matter.</p><p>If you are looking for a local LLM that supports Korean, separate the language list from actual Korean quality. This model lists Korean among 16 languages, and it also defines the scope of free use.</p><ul><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/raon-1-mini-korean-local-guide">KRAFTON Raon-1 mini local LLM: a Korean 30B MoE on one RTX 5090 32GB</a></li><li><a href="https://localai.co.kr/en/guides/flint-local-coding-agent-guide">Flint local LLM: can an open 40B coding agent run on a personal PC?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-mac-mlx-workbench-repaired-20261016.webp" alt="A monitor beside a silver compact desktop shows a three-item list, with a keyboard and a card tray on the desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>With the 4-bit MLX build, this model can be tried on an M-series Mac too.</figcaption></figure><section><h2>It supports 16 languages, including Korean</h2><p>The model card lists English, Arabic, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Vietnamese, Thai, Indonesian, Hindi, Russian and Polish. Korean appearing in that list matters for Korean users. The list means the language was in training data, though, not that Korean quality matches a 24B model built specifically for Korean.</p></section><section><h2>Choose the weights that match your hardware</h2><p>The official repositories publish the same model in several formats: the native checkpoint for Transformers, vLLM and SGLang, block-wise FP8, GGUF, ONNX, and a 4-bit MLX build for Apple Silicon. Choose GGUF to run it in llama.cpp or Ollama, and the 4-bit MLX file when you use MLX-based tools on an M-series Mac. The two cannot be swapped.</p><p>File sizes differ sharply by format. The 4-bit variants are smaller than the original weights, and quantization changes both answer quality and speed. Note which file you used for the first run so you can keep conditions equal when comparing formats later.</p></section><section><h2>Separate the vendor's measurement from your own speed</h2><p>The model card states it runs up to 1.7 times faster than comparable MoEs, reaching 184 tok/s on an Apple M5 Max and up to 21K output tok/s on a single NVIDIA B300. Those figures come from conditions the vendor chose. To read them against your own machine, first match the hardware, the quantization file, the context length, and whether thinking tokens counted toward the output.</p><p>Because this is a reasoning model, thinking tokens appear before any answer. To compare perceived latency, time the arrival of the first answer and the completion separately. Whether thinking tokens count in the output changes the second number substantially.</p></section><figure><img src="https://localai.co.kr/guides/finding-moe-expert-drawers.webp" alt="From a card cabinet of hundreds of drawers, only three coloured drawers are pulled out and routed to a machine" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Routing 4 of 64 experts keeps per-token compute light even though the file holds 24B of weights.</figcaption></figure><section><h2>Built for agents, not for knowledge questions</h2><p>The model card recommends it for agents that reason and call tools, not for knowledge-heavy tasks on its own, and suggests pairing it with retrieval or web search. Work that already has source documents, such as meeting summaries or internal document search, plays to its strengths when combined with RAG.</p><p>Public benchmarks appear in both the vendor blog and the model card. When comparing against rival scores in the same table, check that the evaluation conditions match. Tool-use benchmarks shift with prompts and runtime, so trying your own work sentences once is more reliable.</p></section><section><h2>Check the licence and runtime conditions</h2><p>The licence is not a standard open-source one but Liquid's own LFM Open License v1.0. Personal and research use is unrestricted, while commercial use is conditional. Commercial use is permitted while annual revenue stays below 10 million US dollars, and above that threshold you need separate permission. The licence defines this as the Threshold and conditions the commercial grant on not exceeding it.</p><ul><li><a href="https://huggingface.co/LiquidAI/LFM2.5-24B-A2B">Liquid AI model card</a></li><li><a href="https://huggingface.co/LiquidAI/LFM2.5-24B-A2B/blob/main/LICENSE">LFM Open License v1.0</a></li><li><a href="https://huggingface.co/LiquidAI/LFM2.5-24B-A2B-MLX-4bit">MLX 4-bit files</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-2.webp" alt="Colour-coded blocks leave a compartmented crate wired to an Apple compact desktop and split into document, image and audio work" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Do not judge memory by file size; check what actually loads along with the context length.</figcaption></figure><aside><h2>Check LFM2.5 speed on my hardware</h2><p>Choose your hardware and context length to see expected prefill and token generation ranges.</p><a href="https://localai.co.kr/en/speed?model=lfm25-24b-a2b">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LFM2.5-24B-A2B is a reasoning model Liquid AI released on 12 October 2026. Its mixture-of-experts structure routes each token through 4 of 64 experts, so the weights occupy 24B while a single token costs roughly 2.45B of computation. It supports 16 languages including Korean, and the official GGUF and MLX 4-bit files mean both Macs and NVIDIA PCs can run it. The 184 tok/s in the model card was measured on an Apple M5 Max, so do not read it as your machine's speed.</dd></div><div><dt>How much memory does it need?</dt><dd>What makes this practical is that memory and speed move separately. Loading the model needs space for 24B of weights, but token throughput stays close to the compute of 2.45B active parameters. Compared with a dense 24B model it should produce more tokens from the same memory, while a 7B-sized budget cannot hold it at all. That is why both numbers matter.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card states it runs up to 1.7 times faster than comparable MoEs, reaching 184 tok/s on an Apple M5 Max and up to 21K output tok/s on a single NVIDIA B300. Those figures come from conditions the vendor chose. To read them against your own machine, first match the hardware, the quantization file, the context length, and whether thinking tokens counted toward the output.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Flint local LLM: can an open 40B coding agent run on a personal PC?</title><link>https://localai.co.kr/en/guides/flint-local-coding-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flint-local-coding-agent-guide</guid><description>Recursive's Flint is a coding-agent MoE model with 39.8B total and 2.5B active parameters. Its official runtime is SGLang on B300 or H200 GPUs, with quantized GGUF builds published separately. This covers the vendor's SWE-bench conditions and what to check on personal hardware.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-23</p><h1 id="guide-page-title">Flint local LLM: can an open 40B coding agent run on a personal PC?</h1><p>Check whether an open coding-agent model is usable on your own hardware</p><p id="guide-page-summary">Flint is a mixture-of-experts model for coding agents published by Recursive in October 2026. It has 39.8B total parameters, about 2.5B active per token, and a 262,144-token context. Recursive reports 54.9% on Terminal-Bench 2.1, 89.7% on SWE-bench Pro v2 and 74.2% on SWE-bench Verified. Its official instructions assume a single B300 or H200 GPU, and Transformers modelling code is not included yet. Running it on a personal PC needs separately published GGUF weights and a llama.cpp-class runtime, whose performance may differ from the vendor figures.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>39.8B total, about 2.5B active, and a 262,144-token context.</li><li>The official runtime assumes one B300 or H200 GPU.</li><li>GGUF builds are separate and do not match server performance.</li></ol></section><section><h2>An agent model that inspects a codebase itself</h2><p>Flint is a coding-agent model that reads a repository, fixes bugs, implements features and writes tests. It handles text input and output, reasoning, and multi-turn tool use. Its architecture is a decoder-only MoE Transformer: of 49 layers, 2 are dense and 47 are MoE layers. Each MoE layer selects 6 of 256 experts, plus one shared expert that always runs.</p><p>Attention is split: 35 layers use a short 513-token window and 14 layers use full attention. The short-window layers hold a smaller KV cache, which reduces the memory cost of long conversations. The 262,144-token context counts prompt plus generated output.</p><p>To use an open coding agent on a personal PC, check the runtime before the model scores. This article follows that order.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/xing4-local-coding-guide">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</a></li><li><a href="https://localai.co.kr/en/guides/lfm25-24b-a2b-local-guide">LFM2.5-24B-A2B local LLM: a Korean-capable 24B MoE on your own PC</a></li></ul></section><figure><img src="https://localai.co.kr/guides/superfluid-local-multi-agent-serving-guide-scene-1.webp" alt="Chat, code and folder windows on a laptop converge into a single model block, with a small black unit beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Because it reads and edits a codebase itself, the harness and tool permissions matter as much as the score.</figcaption></figure><section><h2>The official runtime is a server GPU</h2><p>The vendor's documented path is SGLang, not GGUF or llama.cpp. You download about 80 GB of weights, build the SGLang image, and start a server on one B300 or H200 GPU. The address binds to 127.0.0.1, and /health_generate reports readiness. The model card states that Transformers modelling code is not yet included.</p><p>These instructions were not written with a personal PC in mind. B300 and H200 are data-centre GPUs whose memory configurations differ sharply from what an individual buys. On personal hardware you must use the separately published quantized GGUF, which runs on a different engine from the one the vendor measured.</p></section><section><h2>Read the measurement conditions behind the scores</h2><p>The vendor reports 54.9% on Terminal-Bench 2.1, 89.7% on SWE-bench Pro v2 and 74.2% on SWE-bench Verified. The model card also states the evaluation conditions: temperature 1.0, top-p 0.95 and top-k 20, with Terminus 2 for Terminal-Bench and the mini-swe-agent harness for SWE-bench. Agentic scores average pass@1 over at least five attempts.</p><p>The model card also states the limits of comparison. Evaluation setups vary by source, and among the tabulated scores the ones Recursive measured itself are marked. Flint's Terminal-Bench score applies an adjustment that counts solutions obtained through web retrieval as failures, while developer-reported scores may omit that adjustment. Keep that difference in mind when reading two numbers side by side.</p></section><section><h2>On personal hardware, check support first</h2><p>Two things come first on a personal PC. One is whether your runtime supports this architecture. Flint uses sliding-window attention across 35 layers, learned attention sinks and per-head RMSNorm, which differ from a typical llama-family model. Unless the runtime's documentation confirms these are implemented, the file may load poorly or not at all.</p><p>The other is memory. Quantizing 39.8B of weights to 4 bits still needs roughly a quarter of the original size. Using the full 262K context adds a KV cache even though only the selected experts compute. Start with short code reviews and increase context gradually to see how much headroom remains.</p></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-3.webp" alt="A laptop linked by cable through a small hub to a black rack holding four modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The official runtime targets B300 or H200 server GPUs; a personal PC needs separate GGUF files and a compatible runner.</figcaption></figure><section><h2>Consider the agent harness and permissions together</h2><p>A coding agent's score does not come from the model alone. Which harness reads files, runs commands and retries failures is part of the result, and the vendor states it used the mini-swe-agent harness. To expect similar scores in your setup, match both the harness and the tool permissions.</p><p>An agent can run shell commands. Connected to a repository without a sandbox or allowlist, it can delete or transmit files by accident. Even in a personal repository, check for sensitive keys first and narrow the execution permissions.</p></section><section><h2>Check the licence and redistribution terms</h2><p>Flint is released under the Apache 2.0 licence. Modification, redistribution and commercial use are permitted with no revenue threshold, but Apache 2.0 also requires keeping copyright notices, marking changes and honouring the patent clause. When embedding it in a team tool or redistributing it, keep the NOTICE and licence files with it.</p><ul><li><a href="https://huggingface.co/RecursiveSI/flint">Recursive Flint model card</a></li><li><a href="https://huggingface.co/unsloth/flint-GGUF">Flint GGUF quantized files</a></li><li><a href="https://www.recursive.com/updates/introducing-recursive-flint">Recursive launch post</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-2.webp" alt="A shelf holds a brain-marked box, a paper stack, a toolbox and a monitor box, with a laptop below" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Using the 262K context builds up a KV cache too; start with short reviews and raise context gradually.</figcaption></figure><aside><h2>See how a local coding agent is wired</h2><p>See which runtime and tools the model connects to, and how to narrow its permissions.</p><a href="https://localai.co.kr/en/guides/local-coding-agent-harness-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Flint is a mixture-of-experts model for coding agents published by Recursive in October 2026. It has 39.8B total parameters, about 2.5B active per token, and a 262,144-token context. Recursive reports 54.9% on Terminal-Bench 2.1, 89.7% on SWE-bench Pro v2 and 74.2% on SWE-bench Verified. Its official instructions assume a single B300 or H200 GPU, and Transformers modelling code is not included yet. Running it on a personal PC needs separately published GGUF weights and a llama.cpp-class runtime, whose performance may differ from the vendor figures.</dd></div><div><dt>How much memory does it need?</dt><dd>These instructions were not written with a personal PC in mind. B300 and H200 are data-centre GPUs whose memory configurations differ sharply from what an individual buys. On personal hardware you must use the separately published quantized GGUF, which runs on a different engine from the one the vendor measured.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The vendor reports 54.9% on Terminal-Bench 2.1, 89.7% on SWE-bench Pro v2 and 74.2% on SWE-bench Verified. The model card also states the evaluation conditions: temperature 1.0, top-p 0.95 and top-k 20, with Terminus 2 for Terminal-Bench and the mini-swe-agent harness for SWE-bench. Agentic scores average pass@1 over at least five attempts.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>KRAFTON Raon-1 mini local LLM: a Korean 30B MoE on one RTX 5090 32GB</title><link>https://localai.co.kr/en/guides/raon-1-mini-korean-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/raon-1-mini-korean-local-guide</guid><description>Raon-1 mini is a Korean local LLM trained from scratch by KRAFTON AI: a 30B-A4B MoE with a 262K-token context. This covers what NVFP4 needs on a single RTX 5090 with 32GB, plus the gated access, Apache 2.0 terms and preview limitations.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-23</p><h1 id="guide-page-title">KRAFTON Raon-1 mini local LLM: a Korean 30B MoE on one RTX 5090 32GB</h1><p>A Korean-built model you can try on a single RTX 5090 with 32GB</p><p id="guide-page-summary">Raon-1 mini is a 30B-A4B MoE model that KRAFTON AI trained from scratch for Korean and agentic work. Of 30B total parameters, 4B are active per token, and the context reaches 262,144 tokens. It was trained on Korean, English, Japanese, Chinese, Spanish, French and Thai. The model card states that NVFP4 quantization lets it run on a single RTX 5090 with 32GB. It is a preview release rather than the final model, and you must request access on Hugging Face before downloading.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>30B total, 4B active, with a 262,144-token context.</li><li>The vendor states NVFP4 runs on a single RTX 5090 with 32GB.</li><li>Hugging Face access approval is required, and this is a preview, not the final model.</li></ol></section><section><h2>Trained from scratch with Korean in mind</h2><p>Raon-1 mini is a 30B-A4B MoE language model that KRAFTON AI designed and trained from scratch. The 30B is the total parameter count and A4B means about 4B active per token. The model card describes strong performance in Korean conversation and agentic tasks. It is trained in-house rather than fine-tuned from another open model.</p><p>Its training languages are Korean, English, Japanese, Chinese, Spanish, French and Thai. The model card describes strong Korean and solid English. For Korean users, Korean appearing among the training languages matters by itself. How much training weight each language received is not published, so verify Korean quality directly.</p><p>This model matters for Korean users because it is a Korean-built model with Korean in its training data. If you are looking for a Korean local LLM, a single RTX 5090 with 32GB is enough to try it first.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lfm25-24b-a2b-local-guide">LFM2.5-24B-A2B local LLM: a Korean-capable 24B MoE on your own PC</a></li></ul></section><figure><img src="https://localai.co.kr/guides/finding-moe-active-compute.webp" alt="A comparison drawing: a dense model sends every grey block through the machine, while an MoE model feeds only three coloured blocks from a lattice cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Only 4B of the 30B parameters compute per token, which is why the same memory can yield more tokens.</figcaption></figure><section><h2>A changed attention layout reduces the cost of long context</h2><p>Of its 25 layers, 18 use Raon Delta Attention and 7 use MLA. The linear-attention RDA layers hold a fixed-size state, so the KV cache does not keep growing as input lengthens. Only the 7 MLA layers keep a cache, and the model card states roughly 8 KiB per token in BF16.</p><p>For long-context work this makes memory use easier to predict. It only helps if the runtime supports this attention layout, though. Check when llama.cpp, Ollama or vLLM added support before choosing a file.</p></section><section><h2>Request access first, then choose a file</h2><p>This model is not downloadable straight from the Hugging Face repository. You fill in your name, affiliation, job title, country and intended use, and agree to the licence. After approval you can fetch the model files and the GGUF or MLX conversions. Approval is not automatic, so allow time for the first attempt.</p><p>Once you have access, pick the format that matches your use. Target a single RTX 5090 and the NVFP4 file is the one the model card points to; prefer compatibility and simpler tooling and GGUF is the choice. MXFP8 is also offered. Each format needs different memory and runtime support, so the same model does not mean the same running conditions.</p></section><section><h2>Treat preview status as part of how you read results</h2><p>The model card states that this release is not final and that specifications and results may change before the finished version. The benchmark tables are preview figures too. If a final release under the same name appears in a few weeks, scores and recommended hardware may differ, so record the version and measurement date before putting it into work.</p><p>The comparison table places Raon-1 mini beside Qwen3.6-35B-A3B, Gemma 4 26B-A4B, Qwen3.8-27B and Muse Glimmer 30B. Sharing a table does not prove the measurement environments match, so verify that separately. Some knowledge benchmarks are lower than rivals, so read them alongside the reasoning, instruction-following and agentic results the release highlights.</p></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A dual-fan graphics card, two memory modules and an NVMe drive on a wooden desk by the window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Loading NVFP4 weights onto a single RTX 5090 with 32GB is the target setup for this model.</figcaption></figure><section><h2>For Korean document work, it is worth comparing early</h2><p>What makes this model interesting for Korean users is that a model with Korean in its training data can be tried on RTX 5090-class hardware. For work where Korean input is the point, such as meeting summaries, internal document triage or Korean customer replies, it is worth comparing against the Qwen or Gemma models you already use on identical sentences.</p><p>Conversely, if your work is only English code writing or long English documents, there is little reason to pick this model first. Switch only when a comparison on the same memory shows an advantage over a model you have already validated. Keep a preview model as a candidate for testing rather than a work baseline.</p></section><section><h2>Check the Apache 2.0 terms</h2><p>Raon-1 mini is released under the Apache 2.0 licence. Commercial use, modification and redistribution are allowed with no revenue threshold. The access gate is a distribution method, not a narrower licence. Apache 2.0 does require keeping copyright notices and marking changes, so retain the licence and NOTICE when embedding it in a product.</p><ul><li><a href="https://huggingface.co/KRAFTON/Raon-1-mini-preview">KRAFTON AI Raon-1 mini model card</a></li><li><a href="https://raon-mini.krafton.ai/en">Raon-1 mini official playground</a></li></ul></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-2.webp" alt="A waveform and a document on a monitor feed into a padlocked enclosure, while a dashed line toward the cloud is crossed out" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The deciding question is whether a Korean audio or document workflow can stay entirely local.</figcaption></figure><aside><h2>RTX 5090 32GB local LLM baseline</h2><p>See the memory and speed of the single-GPU setup this model targets.</p><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Raon-1 mini is a 30B-A4B MoE model that KRAFTON AI trained from scratch for Korean and agentic work. Of 30B total parameters, 4B are active per token, and the context reaches 262,144 tokens. It was trained on Korean, English, Japanese, Chinese, Spanish, French and Thai. The model card states that NVFP4 quantization lets it run on a single RTX 5090 with 32GB. It is a preview release rather than the final model, and you must request access on Hugging Face before downloading.</dd></div><div><dt>How much memory does it need?</dt><dd>For long-context work this makes memory use easier to predict. It only helps if the runtime supports this attention layout, though. Check when llama.cpp, Ollama or vLLM added support before choosing a file.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Its training languages are Korean, English, Japanese, Chinese, Spanish, French and Thai. The model card describes strong Korean and solid English. For Korean users, Korean appearing among the training languages matters by itself. How much training weight each language received is not published, so verify Korean quality directly.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek-V4.1-Flash-1017: what to re-download and what runs it</title><link>https://localai.co.kr/en/guides/deepseek-v4-1-flash-1017-update-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-v4-1-flash-1017-update-local-guide</guid><description>The 1017 update keeps the API name and price while replacing all 48 weight shards. Mixing it with September files loads without an error but runs a different model, so check what to re-download and which runtimes read it.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-18</p><h1 id="guide-page-title">DeepSeek-V4.1-Flash-1017: what to re-download and what runs it</h1><p>The name and file sizes are unchanged, but 1017 requires new Engram and vision files.</p><p id="guide-page-summary">DeepSeek-V4.1-Flash-1017 is a retrained checkpoint of the September V4.1 Flash. The architecture, 1M-token context, MIT license and the `deepseek-flash` API name are unchanged, but all 48 weight shards were replaced. If you already run V4.1 Flash locally, do not overwrite the old folder: bring the Engram tables and vision files to the 1017 revision and re-run your usual task under the same conditions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>1017 is a retrained checkpoint with the same architecture; the `deepseek-flash` API name and price are unchanged.</li><li>All 48 shards changed, including the two Engram shards and the vision tower; mixing them with September files silently runs a mismatched model.</li><li>The mainline llama.cpp pull request for V4.1 is not merged; vLLM and SGLang on server GPUs, plus dedicated MLX conversions, come first.</li></ol></section><section><h2>1017 is a checkpoint that fills the same slot, not a new model</h2><p>Released on October 17, 2026, V4.1-Flash-1017 is a retrained checkpoint that follows the V4.1 Flash from September 10. DeepSeek calls it a minor update, yet its own benchmark table shows Terminal-Bench 4.0 up 11.1 points and ProgramBench up 8.8, with shorter outputs for the same task. The web, app and API model names stay as they were, and API users keep calling `deepseek-flash`.</p><p>The architecture is unchanged. A 552B backbone, 196B of Engram, the DSpark draft and the vision tower together appear as 763B parameters on the model card. The 1,048,576-token context, 384K maximum output and MIT license also match September. For local users, the useful question is therefore not what was added, but which files in the same slots were replaced.</p><ul><li><a href="https://api-docs.deepseek.com/news/news261017/">DeepSeek 1017 release note</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-1017-vs-opus-5-glm-53-guide">DeepSeek 1017 vs Opus 5 vs GLM-5.3: scores and cost together</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-2.webp" alt="An office cabinet with two open drawers full of files, a plant on the right and papers on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The names and sizes match, but every file inside the drawers changed for 1017.</figcaption></figure><section><h2>The file names and sizes are identical; the contents are not</h2><p>All 48 official safetensors shards were rewritten for 1017. Their names and individual sizes match September, but the two Engram n-gram tables and the vision tower carry new values. The problem is that serving engines usually read file names and tensor shapes, not the version behind them. Point a 1017 model at September's Engram tables and loading still succeeds; the replies still look plausible. They come from a mismatched combination, not from 1017.</p><p>If you already have the September checkpoint, download 1017 into a new folder instead of overwriting the old one. Deleting or renaming the previous folder reduces the chance that an engine picks up stale files. After downloading, compare the shard names and sizes with the repository file list; for a converted build, also follow the checksum file that repository provides.</p><div><p><strong>Download the 1017 checkpoint into a separate folder and check its size</strong></p><pre><code data-guide-code-block="1-0">hf download deepseek-ai/DeepSeek-V4.1-Flash-1017 \
  --revision 1bae0e1088993b9b82de08f59de5be5a34e42170 \
  --local-dir ds41-1017
du -sh ds41-1017</code></pre><p><small>Pinning the revision lets you fetch the same files later. Check that the 48 shards add up to 475.25 GiB.</small></p></div><ul><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash-1017/tree/1bae0e1088993b9b82de08f59de5be5a34e42170">1017 repository file list</a></li></ul></section><section><h2>How much you re-download depends on the format you run</h2><p>The official checkpoint totals 510.3 GB across 48 files, or 475.25 GiB. Converting it needs room for both the source and the result, and at run time the KV cache and runtime memory come on top of the weights. Planning for 1 TB or more of free space is sensible, but that is arithmetic for planning, not an official minimum.</p><p>Two routes exist for personal hardware. A VQ GGUF aimed at a single 128 GB DGX Spark keeps a 113.56 GB base, a 0.97 GB vision sidecar and 203 GB of Engram tables separately, reading Engram rows from disk; the download is about 318 GB. An MLX 3-bit conversion stores 223.5 GiB of converted shards plus 189.1 GiB of original Engram, for 412.6 GiB. Neither has published 1017-specific serving speed yet.</p><table><caption>Storage layout by format and whether 1017 has been measured</caption><thead><tr><th scope="col">Format</th><th scope="col">What is stored</th><th scope="col">Total</th><th scope="col">1017 serving measurement</th></tr></thead><tbody><tr><th scope="row">Official safetensors</th><td>48 shards</td><td>475.25GiB</td><td>Official release</td></tr><tr><th scope="row">VQ GGUF (DGX Spark)</th><td>113.56 GB base + 0.97 GB vision + 203 GB Engram</td><td>About 318 GB download</td><td>Not measured</td></tr><tr><th scope="row">MLX LSQ3</th><td>223.5 GiB converted + 189.1 GiB Engram</td><td>412.6GiB</td><td>Not measured</td></tr></tbody></table><ul><li><a href="https://huggingface.co/Baekpica/DeepSeek-V4.1-Flash-1017-VQ-GGUF">VQ GGUF conversion for DGX Spark</a></li><li><a href="https://huggingface.co/gnahzhang/DeepSeek-V4.1-Flash-1017-LSQ3-G128-MLX">MLX 3-bit conversion</a></li></ul></section><section><h2>The runtime that reads 1017 today is not mainline llama.cpp</h2><p>The llama.cpp pull request adding DeepSeek V4.1 support opened on September 10, 2026 and remained unmerged and conflicting on October 18. A claim that it runs in llama.cpp therefore usually refers to a fork or a separate conversion. The same command on a mainline build can fail because the architecture is not recognized.</p><p>On server-class GPUs, the vLLM and SGLang recipes can run this architecture, and NVIDIA's Dynamo documentation covers V4.1 Flash deployment. In vLLM, thinking is on by default at effort 50, so a small max_tokens can spend the whole budget on the trace and return empty content with finish_reason=length. The model is not broken; turn thinking off or give the output budget room.</p><p>Prompt formatting also needs care. The 1017 repository ships no Jinja chat template; the Python reference in the encoding folder and deepseek-recipe provide the same format. Treating the DSML tool-call tags, which carry a leading space, or the 1–100 numeric effort like an ordinary template can misalign the conversation.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/pull/28696">llama.cpp V4.1 support pull request</a></li><li><a href="https://recipes.vllm.ai/deepseek-ai/DeepSeek-V4.1-Flash">vLLM DeepSeek V4.1 recipe</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v4-flash-serving-recipe-scene-2.webp" alt="An illustration of folder-shaped documents following arrows into a server cabinet, with a laptop showing a bar chart and a checklist on a desk beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Downloaded files must match where the runtime reads them, or the model that runs is not the same one.</figcaption></figure><section><h2>Read the benchmark table for cost per task, not just scores</h2><p>The model card reports 1017 ahead of the September checkpoint on most rows, and above Opus 5 on one coding benchmark. Terminal-Bench 4.0 rises from 31.2 to 42.3, DeepSWE v1.1 from 74.2 to 77.0 and ProgramBench from 20.3 to 29.1. HLE improves from 36.8 to 42.6 but stays below Opus 5 at 56.3.</p><p>These are results under the vendor's published harness conditions. Terminal-Bench used the Claude Code harness and DeepSWE used Mini-SWE-V2; they are not token rates or first-token latency on your machine. Because 1017's practical gain comes from finishing the same task with shorter output, the realistic local comparison is how many tokens the same request consumes against the September checkpoint.</p><table><caption>Benchmark comparison published on the model card</caption><thead><tr><th scope="col">Benchmark</th><th scope="col">V4.1-Flash-1017</th><th scope="col">V4.1-Flash (September)</th><th scope="col">Opus 5</th></tr></thead><tbody><tr><th scope="row">Terminal-Bench 4.0</th><td>42.3</td><td>31.2</td><td>51.8</td></tr><tr><th scope="row">DeepSWE v1.1</th><td>77.0</td><td>74.2</td><td>74.0</td></tr><tr><th scope="row">ProgramBench</th><td>29.1</td><td>20.3</td><td>37.0</td></tr><tr><th scope="row">HLE (without tools)</th><td>42.6</td><td>36.8</td><td>56.3</td></tr></tbody></table></section><section><h2>API pricing is unchanged, but search tools start charging in November</h2><p>On the API, both `deepseek-flash` and the legacy alias `deepseek-v4-flash` route to 1017, and the price list matches September. Cached input costs $0.003 per million tokens off-peak and $0.006 at peak; uncached input costs $0.15 and $0.3; output costs $0.6 and $1.2. Peak hours are 01:00–04:00 and 06:00–10:00 UTC on weekdays.</p><p>The newly opened Search and Fetch APIs charge $0.75 per 1,000 successful requests each. Calls made as server-side tools from DeepSeek Harness, Claude Code or Codex are free until 00:00 Beijing time on November 1, 2026, and billed after that. Even with a local model, adding search creates this separate cost.</p><table><caption>deepseek-flash API prices per million tokens</caption><thead><tr><th scope="col">Price item</th><th scope="col">off-peak</th><th scope="col">peak</th></tr></thead><tbody><tr><th scope="row">Input (cache hit)</th><td>$0.003</td><td>$0.006</td></tr><tr><th scope="row">Input (cache miss)</th><td>$0.15</td><td>$0.3</td></tr><tr><th scope="row">Output</th><td>$0.6</td><td>$1.2</td></tr></tbody></table><ul><li><a href="https://api-docs.deepseek.com/quick_start/pricing">DeepSeek models and pricing</a></li><li><a href="https://api-docs.deepseek.com/guides/search">Search and Fetch API guide</a></li></ul></section><section><h2>The order to check before you re-download</h2><p>First decide whether the model runs locally or through the API. With the API, the name stays as it is. For local use, verify that your engine actually loads the deepseek_v41 architecture at the 1017 revision, then budget storage and conversion space, download into a separate folder and re-run one representative task under the same conditions.</p><p>Record the repository revision 1bae0e1, the conversion and runtime commit you used, the context length, output token count and time to first token. If a setup that was stable on the September checkpoint does not behave the same way on 1017, resolve that difference before chasing the new benchmark scores.</p></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-3.webp" alt="Four server racks standing side by side, an open drawing and calipers on the desk, a plant and mug on the left" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Serving 1017 today still centers on server-class GPUs and dedicated runtimes.</figcaption></figure><aside><h2>See DeepSeek V4.1 Flash hardware requirements</h2><p>Check storage size and which site hardware can load the model on the model page.</p><a href="https://localai.co.kr/en/models/deepseek-v4-1-flash">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepSeek-V4.1-Flash-1017 is a retrained checkpoint of the September V4.1 Flash. The architecture, 1M-token context, MIT license and the `deepseek-flash` API name are unchanged, but all 48 weight shards were replaced. If you already run V4.1 Flash locally, do not overwrite the old folder: bring the Engram tables and vision files to the 1017 revision and re-run your usual task under the same conditions.</dd></div><div><dt>How much memory does it need?</dt><dd>The official checkpoint totals 510.3 GB across 48 files, or 475.25 GiB. Converting it needs room for both the source and the result, and at run time the KV cache and runtime memory come on top of the weights. Planning for 1 TB or more of free space is sensible, but that is arithmetic for planning, not an official minimum.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek Search and Fetch API: giving a local LLM web results</title><link>https://localai.co.kr/en/guides/deepseek-search-fetch-api-local-rag-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-search-fetch-api-local-rag-guide</guid><description>The request and response shape of the Search and Fetch APIs, the $0.75 per successful request price, the free window until November 1, and a two-step way to feed results to a local model.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">DeepSeek Search and Fetch API: giving a local LLM web results</h1><p>Call search and page fetch separately, then put the returned summaries into the local model's prompt.</p><p id="guide-page-summary">DeepSeek's Search API returns a list of web pages for a query, and the Fetch API returns one page's body as Markdown. Both use the same API key and cost $0.75 per 1,000 successful requests each. Rather than forcing a local model to call tools, let your app search first and put the top summaries and URLs into the prompt; it is simpler and easier to reproduce.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Search lives at `/v1/tools/search` and Fetch at `/v1/tools/fetch`; both use bearer authentication.</li><li>Each costs $0.75 per 1,000 successful requests; calls through Harness, Claude Code or Codex are free until November 1.</li><li>For a local model, putting search summaries in the prompt is more reliable than relying on tool calls.</li></ol></section><section><h2>Search and page fetching are separate APIs</h2><p>The Search API returns a list of web pages matching a query, and the Fetch API returns the body of one URL as Markdown. Both sit under `https://api.deepseek.com` at `/v1/tools/search` and `/v1/tools/fetch`, and both use a DeepSeek API key as a bearer token. Search alone does not give you the full page, so decide first whether a summary is enough or you need the body.</p><p>Search accepts a query of 1 to 128 characters and returns 1 to 50 results, 10 by default. Setting `need_content` includes page bodies in the response, which makes it much larger. `ori_question` takes the original question, up to 128 characters, to improve ranking.</p><ul><li><a href="https://localai.co.kr/en/guides/embeddinggemma-2-local-search-guide">How can you search your local photos and recordings with EmbeddingGemma 2?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="An illustration of document stacks and several cards on a desk, with arrows running from one card to another" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Search returns a list of pages; the body comes from a separate Fetch call.</figcaption></figure><section><h2>Read the ranking score and summary first</h2><p>Each result carries `rerank_score` (0 to 3), `authority` (0 to 4), `date`, `summary` (usually 600 to 800 characters) and `content`. A score of 1.5 or above is described as high quality, and an authority of 3 or above marks a highly authoritative source. Keep the summary, URL and date together in the prompt so citations stay easy.</p><table><caption>Fields commonly used from a Search response</caption><thead><tr><th scope="col">Field</th><th scope="col">Value</th><th scope="col">Use</th></tr></thead><tbody><tr><th scope="row">`rerank_score`</th><td>0~3</td><td>Ranking the top results</td></tr><tr><th scope="row">`authority`</th><td>0~4</td><td>Source authority</td></tr><tr><th scope="row">`summary`</th><td>600 to 800 characters</td><td>Summary for the prompt</td></tr><tr><th scope="row">`content`</th><td>When `need_content` is set</td><td>Checking part of the page</td></tr></tbody></table><ul><li><a href="https://api-docs.deepseek.com/guides/search">Search and Fetch API guide</a></li></ul></section><section><h2>Feed the local model with search results, not tool calls</h2><p>Handing tool calls to a local model makes schema mistakes and repeated calls more likely as the model gets smaller. A simpler pattern is for your app to search first, put the top three to five summaries into the prompt with citation numbers, and ask the local model to answer only from that material and say when it does not know.</p><p>For questions that need the source text, fetch only the URLs you selected and trim the body. Keep the paragraphs that matter to the question, and record each URL and fetch time. The retrieval step then stays reusable when you change models.</p><div><p><strong>Example Search API call</strong></p><pre><code data-guide-code-block="2-0">curl https://api.deepseek.com/v1/tools/search \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"DeepSeek V4.1 Flash 1017","count":5}'</code></pre><p><small>Read the key from an environment variable and keep it out of shell history. Check the length of each summary and URL before adding them to the prompt.</small></p></div></section><section><h2>Billing counts successful requests</h2><p>Search and Fetch each cost $0.75 per 1,000 successful requests. Forty searches and twenty fetches a day come to 1,200 searches and 600 fetches a month, about $1.35. Failed requests are not billed, but a retry that succeeds does count.</p><p>Calls made as server-side tools from DeepSeek Harness, Claude Code or Codex are free until 00:00 Beijing time on November 1, 2026. After that the same calls are billed per request, so recording your volume during the free window makes the post-change cost easier to estimate.</p><table><caption>Search and Fetch pricing</caption><thead><tr><th scope="col">API</th><th scope="col">Unit</th><th scope="col">Price</th></tr></thead><tbody><tr><th scope="row">Search</th><td>1,000 successful requests</td><td>$0.75</td></tr><tr><th scope="row">Fetch</th><td>1,000 successful requests</td><td>$0.75</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="An illustration of one long document split into several smaller cards laid out on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Cutting a long page down to the relevant part saves tokens.</figcaption></figure><section><h2>Handle Fetch failures by cause</h2><p>Fetch can return 403 when the target site blocks it, 404 when no usable body is available and 500 when the address cannot be resolved. An empty balance returns 402. Retrying the same URL rarely changes a 403 or 404, so switch sources or fall back to the search summary.</p><p>A URL cannot carry a username or password, and the API must not be used to get around a site's access policy. Retry only 5xx responses, briefly, and cache successful URLs with a body hash to avoid paying repeatedly for the same page.</p></section><section><h2>What to log before production</h2><p>Log the query, the URLs you used, the fetch time, the model and the prompt version. Search results change over time, so you need the material as it looked when the question was asked. Before putting personal or internal content into a query, decide what is allowed to leave your network.</p><p>When storing response bodies, check copyright and site terms and keep only the length you need. With a local model plus this API, the model runs on your machine but queries and URLs still leave it; tell users that plainly.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-diagnosis.webp" alt="An illustration of cards on a desk linked by arrows, with the chain ending at a red X" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When a page cannot be fetched, switch sources instead of retrying the same URL.</figcaption></figure><aside><h2>Start with the local RAG setup</h2><p>Review how documents are split and retrieved before adding this API.</p><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepSeek's Search API returns a list of web pages for a query, and the Fetch API returns one page's body as Markdown. Both use the same API key and cost $0.75 per 1,000 successful requests each. Rather than forcing a local model to call tools, let your app search first and put the top summaries and URLs into the prompt; it is simpler and easier to reproduce.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek Harness: the agent harness that runs 1017</title><link>https://localai.co.kr/en/guides/deepseek-harness-local-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-harness-local-model-guide</guid><description>Installing and first-running dsh, connecting a DeepSeek key or a custom API, the values a local OpenAI-compatible server must match, and 1017 support in the 0.2.1-rc releases.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">DeepSeek Harness: the agent harness that runs 1017</h1><p>A harness does not change the model; it gives the model tools and sessions to work with.</p><p id="guide-page-summary">DeepSeek Harness (`dsh`) is an agent harness released by DeepSeek AI under the MIT license. It is not the model: it wraps file access, shell execution, search and plugins so a model can carry a task through. Start the local Web UI with `npx @deepseek-ai/dsh web`, then connect a DeepSeek key or a custom API in settings. It is a developer preview, so pin the version you use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>`dsh` is a harness for tools, sessions and plugins rather than a model, and it is MIT licensed.</li><li>`npx @deepseek-ai/dsh web` starts it at `127.0.0.1:3080`, and models are connected under Settings → Models.</li><li>1017 support and the Search and Fetch tools arrived in 0.2.1-rc or later, and the preview warns of compatibility changes.</li></ol></section><section><h2>The harness and the model do different jobs</h2><p>DeepSeek Harness (`dsh`) is an agent harness released by DeepSeek AI under the MIT license. It is not the model: it wraps conversation sessions, file access, shell execution, search and plugins so a model can carry a task through. Its everything-is-a-plugin design lets you enable only the parts you need.</p><p>It is in developer preview, and compatibility-breaking changes are expected. For work use, pin a version and read the release notes before updating.</p><ul><li><a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness repository</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="An illustration of a person at a laptop surrounded by floating document, folder, table and settings windows, with a small robot standing on the right" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The harness ties tools and sessions around the model so work can proceed.</figcaption></figure><section><h2>Install and first run take one command</h2><p>You need Node.js 22.19 or later, or 24 and later. Running `npx @deepseek-ai/dsh web` starts the Web UI at `http://127.0.0.1:3080` and opens the browser for a local launch. Add `--no-open` to run the server alone.</p><p>To run from source, clone the repository and run `pnpm install`, `pnpm run build`, then `pnpm dsh web`. Settings and credentials live under `$DSH_HOME` after the first run, so base backups and deletions on that folder.</p><div><p><strong>Start the Web UI</strong></p><pre><code data-guide-code-block="1-0">npx @deepseek-ai/dsh web</code></pre><p><small>The default address is http://127.0.0.1:3080. Keep it local rather than exposing it.</small></p></div></section><section><h2>Connect models in settings</h2><p>Under Settings → Models, enter an API key in the DeepSeek card to use `deepseek-flash`. The key cannot be read back; it is stored in `$DSH_HOME/.credentials.yaml` and settings keep only a reference.</p><p>Add other providers or an internal gateway through Custom model API under Add model provider. Supply a provider ID, base URL, one API protocol (OpenAI Chat Completions, OpenAI Responses or Anthropic Messages) and at least one model ID; Fetch available models can list them. The provider ID cannot be renamed later, so choose it carefully.</p></section><section><h2>Match three values when you attach a local server</h2><p>A local server that exposes an OpenAI-compatible API, such as vLLM or llama.cpp's server, can also be added as a Custom model API. Set the base URL, model ID, context window and maximum output tokens to match the server. If the harness exceeds the real limit while compacting a long conversation or inserting tool output, the request fails.</p><p>Tool-calling reliability on a local model varies with the model and runtime. A small model may break the tool schema or repeat a call, so narrow file and shell permissions and start with a short task. Attaching 1017 locally needs a server path such as vLLM; mainline llama.cpp still does not read this architecture.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="An illustration of a small robot standing on a server box, with cables running to a browser window, a chat window, a calendar and a folder box" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Models and tools are connected in settings, and a local server joins the same way.</figcaption></figure><section><h2>1017 and the search tools arrive with 0.2.1-rc</h2><p>DeepSeek says 1017 is tuned for dsh 0.2.1-rc.1 or later. Version 0.2.1-rc.2 adds a switch for the Search and Fetch APIs in web search settings. Those tools are free until November 1, 2026, and billed per successful request after that.</p><p>Note that a session keeps the model recorded in its own log. A session that has already sent a request does not switch to a new default, so open a new session to compare.</p><ul><li><a href="https://github.com/deepseek-ai/deepseek-harness/releases">dsh release notes</a></li><li><a href="https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/guide/providers.md">Model configuration guide</a></li></ul></section><section><h2>What to check before updating</h2><p>A preview release can change the settings file and plugin API. Back up `$DSH_HOME/profiles/web/cordis.patch.yml`, record the plugins and model settings you use, then update. Pinning a tag reproduces better than automatic updates.</p><p>Do not leave shell and file permissions at their defaults; narrow the working folder and allowed commands. A harness may take broad permissions for convenience, so check the sandbox and approval flow first on important repositories.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="An illustration of a person at a desk by the window at dusk, looking at a monitor that shows a checklist and a document-conversion screen" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Long tasks leave a checklist, and a person still checks permissions and results.</figcaption></figure><aside><h2>Compare coding agent harnesses</h2><p>Each harness differs in permissions and tooling, so compare them alongside your workflow.</p><a href="https://localai.co.kr/en/guides/local-coding-agent-harness-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepSeek Harness (`dsh`) is an agent harness released by DeepSeek AI under the MIT license. It is not the model: it wraps file access, shell execution, search and plugins so a model can carry a task through. Start the local Web UI with `npx @deepseek-ai/dsh web`, then connect a DeepSeek key or a custom API in settings. It is a developer preview, so pin the version you use.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek 1017 vs Opus 5 vs GLM-5.3: scores and cost together</title><link>https://localai.co.kr/en/guides/deepseek-1017-vs-opus-5-glm-53-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-1017-vs-opus-5-glm-53-guide</guid><description>Where 1017, Opus 5 and GLM-5.3 lead on the same benchmarks, and how API pricing and local hardware requirements change the choice.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-18</p><h1 id="guide-page-title">DeepSeek 1017 vs Opus 5 vs GLM-5.3: scores and cost together</h1><p>Coding favors 1017, overall reasoning favors Opus 5, and local execution splits between 1017 and GLM-5.3-Flash.</p><p id="guide-page-summary">On DeepSeek's model card, 1017 leads the September model by a wide margin on coding and agent benchmarks such as Terminal-Bench and DeepSWE, and passes Opus 5 on some of them. Opus 5 still leads broad reasoning rows such as HLE and NL2Repo. Add API price differences and whether the weights can run locally, and no single score decides the choice.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>1017 reaches 42.3 on Terminal-Bench and 77.0 on DeepSWE, well above September and past Opus 5 on DeepSWE.</li><li>HLE is 42.6 against Opus 5 at 56.3, so broad reasoning still shows a gap.</li><li>DeepSeek's API is far cheaper on both input and output, and only 1017 and GLM-5.3-Flash offer local weights here.</li></ol></section><section><h2>The comparison table comes from fixed harness conditions</h2><p>DeepSeek's model card compares 1017, September V4.1, K3, GLM-5.3, GPT-5.6 Sol and Opus 5 on the same rows. Terminal-Bench 4.0 was measured with the Claude Code harness and DeepSWE v1.1 with Mini-SWE-V2. Different harnesses give different scores for the same model, so the table does not transfer directly to your tooling.</p><p>These are also not local speed figures. The scores measure whether a task was completed; tokens per second and first-token latency need separate measurement.</p><ul><li><a href="https://localai.co.kr/en/guides/deepseek-v4-1-flash-1017-update-local-guide">DeepSeek-V4.1-Flash-1017: what to re-download and what runs it</a></li><li><a href="https://localai.co.kr/en/guides/mimo-v2-6-pro-flash-performance">MiMo V2.6 Pro and Flash launched together: how strong are they?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-1.webp" alt="An office with a tall open cabinet packed with identical storage boxes, plus boxes and chairs on a table" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Model file size and benchmark scores measure different things.</figcaption></figure><section><h2>1017 leads on coding and agent tasks</h2><p>On Terminal-Bench 4.0, 1017 scores 42.3, which is 11.1 points above September's 31.2 but below Opus 5 at 51.8. DeepSWE v1.1 reaches 77.0, above Opus 5 at 74.0, while ProgramBench rises from 20.3 to 29.1 but stays under Opus 5 at 37.0.</p><p>On agent rows, Automation-Bench reaches 60.5 and Agents' Last Exam 35.4, above both September and Opus 5. These are the model card's published values, not a promise that your repository sees the same result.</p><table><caption>Key benchmarks published on the model card</caption><thead><tr><th scope="col">Benchmark</th><th scope="col">1017</th><th scope="col">Opus 5</th><th scope="col">GLM-5.3</th></tr></thead><tbody><tr><th scope="row">Terminal-Bench 4.0</th><td>42.3</td><td>51.8</td><td>37.9</td></tr><tr><th scope="row">DeepSWE v1.1</th><td>77.0</td><td>74.0</td><td>66.9</td></tr><tr><th scope="row">ProgramBench</th><td>29.1</td><td>37.0</td><td>19.0</td></tr><tr><th scope="row">HLE (without tools)</th><td>42.6</td><td>56.3</td><td>42.0</td></tr></tbody></table></section><section><h2>Broad reasoning still favors Opus 5</h2><p>HLE without tools rises from 36.8 to 42.6, still under Opus 5 at 56.3 and GPT-5.6 Sol at 44.5. NL2Repo-Bench is 68.2 against Opus 5 at 75.3. On visual and tool-assisted rows such as Chartography and BabyVision, however, it has come close to Opus 5.</p><p>A claim that 1017 beat Opus 5 is true on one coding row, not as a conclusion about overall capability. The choice depends on the tasks you actually run.</p></section><section><h2>The price gap is larger than the score gap</h2><p>On the DeepSeek API, `deepseek-flash` charges $0.3 at peak for uncached input and $1.2 for output. Opus 5 is listed at $5 input and $25 output. For the same tokens that is about 17 times more on input and 21 times on output; DeepSeek's off-peak rates halve again, widening the gap.</p><p>Agent work tends to produce long output. A task using 20,000 input and 10,000 output tokens costs about $0.018 on DeepSeek at peak and about $0.35 on Opus 5. Shorter outputs in 1017 can widen that per-task gap further, but retries for failed tasks belong in the calculation.</p><table><caption>API price and weight availability</caption><thead><tr><th scope="col">Model</th><th scope="col">Input</th><th scope="col">Output</th><th scope="col">Weights</th></tr></thead><tbody><tr><th scope="row">deepseek-flash (peak)</th><td>$0.3 / 1M</td><td>$1.2 / 1M</td><td>MIT</td></tr><tr><th scope="row">Claude Opus 5</th><td>$5 / 1M</td><td>$25 / 1M</td><td>Closed</td></tr><tr><th scope="row">GLM-5.3-Flash</th><td>Provider-specific</td><td>Provider-specific</td><td>Open</td></tr></tbody></table><ul><li><a href="https://api-docs.deepseek.com/quick_start/pricing">DeepSeek pricing</a></li><li><a href="https://platform.claude.com/docs/en/models/opus-5/overview">Claude Opus 5 documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v4-flash-serving-recipe-scene-2.webp" alt="An illustration of folder-shaped documents following arrows into a server cabinet, with a laptop showing a bar chart and a checklist on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A higher score still has to be weighed against token cost and failure rate on your tasks.</figcaption></figure><section><h2>The local options are 1017 and GLM-5.3-Flash</h2><p>1017 publishes 475.25 GiB of official files under the MIT license, and GLM-5.3-Flash is an open-weight model with 320B total and 18B active parameters. Opus 5 has no public weights and is API-only. If local execution is a requirement, the choice narrows to 1017 and GLM-5.3-Flash.</p><p>With a 1M context and a 552B backbone, 1017 on personal hardware needs compressed conversions and SSD streaming. GLM-5.3-Flash is also 320B and needs server-class memory. Open weights do not mean it runs on your laptop.</p></section><section><h2>Three checks that decide it for your work</h2><p>First, pick three tasks you run often and compare them with the same prompts. Second, record the tokens and retries each one needed. Third, confirm whether the data may leave your network. These three checks matter more than the score table.</p><p>Rather than chase a one-point benchmark difference, choose the option with a lower failure rate and predictable cost on your tasks. In short: 1017 for coding, agents and local execution; Opus 5 for broad reasoning and a managed API; GLM-5.3-Flash as another open-weight option.</p></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-3.webp" alt="Four server racks standing side by side, an open drawing and calipers on the desk, a plant and mug on the left" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A model that needs server hardware and one that runs on a laptop cannot be decided by the same table.</figcaption></figure><aside><h2>See the 1017 local requirements</h2><p>Check whether your hardware can load it before comparing scores.</p><a href="https://localai.co.kr/en/guides/deepseek-v4-1-flash-1017-update-local-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>On DeepSeek's model card, 1017 leads the September model by a wide margin on coding and agent benchmarks such as Terminal-Bench and DeepSWE, and passes Opus 5 on some of them. Opus 5 still leads broad reasoning rows such as HLE and NL2Repo. Add API price differences and whether the weights can run locally, and no single score decides the choice.</dd></div><div><dt>How much memory does it need?</dt><dd>With a 1M context and a 552B backbone, 1017 on personal hardware needs compressed conversions and SSD streaming. GLM-5.3-Flash is also 320B and needs server-class memory. Open weights do not mean it runs on your laptop.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 3090 BF16 unlock: what opens and what stays the same</title><link>https://localai.co.kr/en/guides/rtx-3090-bf16-unlock-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-3090-bf16-unlock-guide</guid><description>The gpu-unlock kernel module that opens BF16 and FP16 matrix throughput on the RTX 3090: its published scope, the measured 3090 Ti numbers, the single verified machine, and the cold-boot and rollback requirements.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">RTX 3090 BF16 unlock: what opens and what stays the same</h1><p>What opens is BF16 and FP16 matrix throughput; the 24 GB of VRAM and its bandwidth do not change.</p><p id="guide-page-summary">gpu-unlock, published on October 18, 2026, is a Linux kernel module that writes a speed selector before the NVIDIA driver binds the card, opening BF16 throughput on the RTX 3090. The repository verified it on one 3090, and the 3090 Ti numbers came from a separate fork. It does not add VRAM or speed up decode, and it requires a cold boot with a rollback path.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>gpu-unlock is not a driver patch but a kernel module that writes the SS0 selector before the driver binds.</li><li>On the 3090 Ti, BF16 rose from 87.50 to 157.41 TFLOPS, but there is no published 3090 table yet.</li><li>VRAM, bandwidth and token generation do not change, and the verified environment is one card on one distribution.</li></ol></section><section><h2>A kernel module published on October 18</h2><p>gpu-unlock is a Linux kernel module that opens the blocked BF16 throughput on the RTX 3090. It is neither a UEFI app nor a patched NVIDIA driver: it writes a speed selector before the driver binds the card. The module is GPL-2.0, and the generated firmware derives from CMP unlock reference material.</p><p>The repository says it writes `0x88888888` to SS0 to select the full BF16 rate, and also writes the 4-bit SS1 value `0x8`, whose effect is untested. The card must be cold-booted; warm reboots are not supported.</p><ul><li><a href="https://github.com/Zagitta/gpu-unlock">gpu-unlock repository</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-verification-guide">Verifying a 3090 unlock: boot logs, GEMM and llama-bench</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-1.webp" alt="An RTX 3090 mounted in a case, a monitor showing colored bars and a flow diagram, a notebook and magnifier on the desk, and a plant" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separating the card from the compute path on screen shows where the unlock acts.</figcaption></figure><section><h2>What opens is BF16 and FP16 matrix throughput</h2><p>The maintainer answers that BF16 and F16 operations get about 40% faster. The published figures come from a separate fork tested on a 3090 Ti: at 450 W, dense 8192³ GEMM with FP32 accumulation and five-sample medians, BF16 rose from 87.50 to 157.41 TFLOPS, FP16 from 87.46 to 118.39 and TF32 from 42.58 to 82.61.</p><p>The table is for the 3090 Ti, and that test used Ubuntu kernel 7.0.0-38 with a modified 610.43.02 driver and a separate initramfs hook. A 3090 was also unlocked and passed CUDA checks, but no 3090 GEMM table has been published.</p><table><caption>Published 3090 Ti measurements (450 W, dense 8192³ GEMM, FP32 accumulation, five-sample medians)</caption><thead><tr><th scope="col">Input</th><th scope="col">Before</th><th scope="col">After</th></tr></thead><tbody><tr><th scope="row">FP16</th><td>87.46 TFLOPS</td><td>118.39 TFLOPS</td></tr><tr><th scope="row">BF16</th><td>87.50 TFLOPS</td><td>157.41 TFLOPS</td></tr><tr><th scope="row">TF32</th><td>42.58 TFLOPS</td><td>82.61 TFLOPS</td></tr></tbody></table></section><section><h2>VRAM and bandwidth do not change</h2><p>The unlock touches only the compute path. The RTX 3090 keeps its 24 GB of GDDR6X, 936 GB/s bandwidth and power limit. It is unrelated to the 48 GB memory mod, and it does not let you hold larger models.</p><p>Single-token decode is bound by how fast weights are read from memory. A higher BF16 rate therefore does not raise one request's tok/s by the same ratio.</p></section><section><h2>Only one machine has been verified</h2><p>The repository verified one RTX 3090 at PCI address `0000:21:00.0` on CachyOS kernel 7.2.8-1 with NVIDIA 615.71.09. Another card in the same machine served as an unmodified control. The module rejects other GA102 device IDs, so the targets are the 3090 and, through that separate fork, the 3090 Ti.</p><p>On kernels at or below 6.15, the power state does not come up before the driver loads, so the unlock fails; a patch is posted as an issue. The 3090 Ti is supported only by a separate fork, and other GA102 device IDs are rejected.</p></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-2.webp" alt="An RTX 3090 in a case, colored blocks moving along a conveyor to shelves, and cards printed with network diagrams on the work surface" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Throughput differs by precision, but storage capacity does not grow with the unlock.</figcaption></figure><section><h2>Cold boot and rollback are part of the deal</h2><p>The module runs only when the kernel command line carries `gpu_unlock.targets=`, for example `gpu_unlock.targets=0000:21:00.0` or `all`. It must load from initramfs before `nvidia`, and the machine must be powered off completely and started again.</p><p>To roll back, remove the option from the kernel command line and uninstall the packages. If firmware never stops, the module keeps DMA buffers until the next power-off, so power off before retrying. If the display stays blank, delete the option in the bootloader edit screen and boot.</p></section><section><h2>Who should consider testing it</h2><p>It matters to people running prefill-heavy, concurrent or LoRA fine-tuning workloads on a 3090. For short single-request answers the expected gain is small. Try it on a test PC rather than a work machine, after recording a baseline.</p><p>When testing, fix the power limit and the model, and record prefill time alongside concurrent throughput. Use a GEMM to isolate matrix compute, and llama-bench for the felt result.</p></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-3.webp" alt="A case with an RTX 3090 beside a check mark, and an open notebook with flow diagrams on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure again under the same conditions afterward to see the real gain.</figcaption></figure><aside><h2>See where local LLM speed can change</h2><p>Continue with which of prefill, batching and decode depends on compute.</p><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>gpu-unlock, published on October 18, 2026, is a Linux kernel module that writes a speed selector before the NVIDIA driver binds the card, opening BF16 throughput on the RTX 3090. The repository verified it on one 3090, and the 3090 Ti numbers came from a separate fork. It does not add VRAM or speed up decode, and it requires a cold boot with a rollback path.</dd></div><div><dt>How much memory does it need?</dt><dd>The unlock touches only the compute path. The RTX 3090 keeps its 24 GB of GDDR6X, 936 GB/s bandwidth and power limit. It is unrelated to the 48 GB memory mod, and it does not let you hold larger models.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Does the 3090 unlock speed up local LLMs? Prefill, batching, decode</title><link>https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide</guid><description>Decode is bound by memory bandwidth, while prefill and batching are bound by compute. Which stages the 3090 BF16 unlock changes, and which it leaves alone.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Does the 3090 unlock speed up local LLMs? Prefill, batching, decode</h1><p>The difference can appear in prefill, concurrent requests and fine-tuning rather than single-request decode.</p><p id="guide-page-summary">The RTX 3090 BF16 unlock raises matrix throughput, but single-request token generation is bound by memory bandwidth. Prefill of long documents, batched requests and LoRA fine-tuning carry more compute, so they may see an effect. No public 3090 measurement exists yet, so set an expectation and measure it yourself.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Decode is bound by 936 GB/s of bandwidth, so higher BF16 throughput barely changes it.</li><li>Prefill, batching and LoRA carry more compute, so the unlock may show up there.</li><li>Fix the power limit, model and quantization, and compare before and after under the same conditions.</li></ol></section><section><h2>Decode is bound by bandwidth, not compute</h2><p>Generating one token at a time means reading weights from memory at every step. The RTX 3090's 936 GB/s decides how long those reads take, not the BF16 matrix throughput. A higher compute rate therefore barely moves single-request tok/s.</p><p>The 3090 measurements published on this site point the same way: Qwen3.8 27B UD-Q4_K_XL with MTP n-max 3 ran at 68.9 tok/s at 350 W and 51.0 tok/s at 250 W. Lowering the power limit slows it down, which is a clock and power effect, not a compute one.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-48gb-mod-guide">The RTX 3090 48 GB mod: what to verify before you accept the card</a></li><li><a href="https://localai.co.kr/en/guides/dual-rtx-3090-nvlink-tensor-parallel-guide">Two RTX 3090s with NVLink: how much it actually changes inference</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-2.webp" alt="An RTX 3090 in a case, colored blocks moving along a conveyor to shelves, and cards printed with network diagrams on the work surface" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Decode speed is tied to memory bandwidth, so a compute unlock alone changes it little.</figcaption></figure><section><h2>Prefill is compute-bound and may change</h2><p>Prefill reads a long document at once and runs matrix products over every input token, a compute-bound stage. A runtime that prefills in BF16 may see a shorter time to first token after the unlock. Paths that do not use BF16 matrix products, such as llama.cpp's quantized kernels, see little effect.</p><p>Which runtime prefills in BF16 depends on the model and kernel, and vLLM and llama.cpp do not take the same path for the same model. To estimate the prefill gain, start with the kernels your runtime uses.</p></section><section><h2>Concurrency and batching widen the gap</h2><p>Serving several requests at once reuses the same weights, reducing bandwidth pressure and raising the compute share. BF16 throughput can then set aggregate throughput, which is why a continuously batching server such as vLLM may show more benefit.</p><p>In a single-user, one-request-at-a-time setup, no batch forms and this advantage mostly disappears. Expectations differ between a server operator and a personal desktop user.</p></section><section><h2>Fine-tuning and image generation are separate cases</h2><p>LoRA fine-tuning uses many BF16 matrix products, so it is theoretically where the unlock helps most. The 3090's 24 GB of VRAM limits batch size and sequence length, though, so memory becomes the constraint before compute does. Larger batches have more room to benefit.</p><p>In image generation, the compute and memory shares depend on model, resolution and step count. Compute-heavy FP16 sections may benefit, while high resolutions hit VRAM and bandwidth first. The before-and-after difference in image generation varies with the model, resolution and step count, so measuring your own settings answers it fastest.</p></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-1.webp" alt="Two graphics cards side by side, one short with a single fan and one long with two fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even 24 GB cards differ by generation and bandwidth, so compare them separately from the unlock.</figcaption></figure><section><h2>Measure with power fixed, before and after</h2><p>Record a baseline at the same model, quantization, context length and power limit, then repeat after the unlock with a cold boot. Decode alone will show almost nothing, so log prefill time and concurrent throughput as well.</p><table><caption>Bottleneck and expected effect by workload</caption><thead><tr><th scope="col">Workload</th><th scope="col">Bottleneck</th><th scope="col">Expectation</th></tr></thead><tbody><tr><th scope="row">Single-request decode</th><td>Memory bandwidth</td><td>Minimal</td></tr><tr><th scope="row">Long-document prefill</th><td>Matrix compute</td><td>Depends on runtime kernels</td></tr><tr><th scope="row">Concurrent requests</th><td>Matrix compute</td><td>Larger with bigger batches</td></tr><tr><th scope="row">LoRA fine-tuning</th><td>Matrix compute, VRAM</td><td>VRAM binds first</td></tr></tbody></table></section><section><h2>So should you buy one</h2><p>The unlock is an experiment on compute headroom you already own. It is a weak reason to buy a card; if decode is the goal, look at other options such as a 5090 or a 48 GB mod. The 3090's strength is 24 GB of capacity and price, not compute rate.</p><p>The decision comes from measurement, so decide after running the same card before and after.</p></section><figure><img src="https://localai.co.kr/guides/gpu-power-limit-3090-compare.webp" alt="A bar chart comparing RTX 3090 decode speed of 68.9, 65.3, 62.3 and 51.0 tok/s against measured GPU power of 347.7, 298.7, 274 and 249.5 W at 350, 300, 275 and 250 W limits" width="720" height="1140" loading="lazy" decoding="async"><figcaption>Lowering the power limit reduces decode speed, so keep power fixed in the comparison.</figcaption></figure><aside><h2>Start with the published scope of the unlock</h2><p>Check what opens and what stays the same first.</p><a href="https://localai.co.kr/en/guides/rtx-3090-bf16-unlock-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The RTX 3090 BF16 unlock raises matrix throughput, but single-request token generation is bound by memory bandwidth. Prefill of long documents, batched requests and LoRA fine-tuning carry more compute, so they may see an effect. No public 3090 measurement exists yet, so set an expectation and measure it yourself.</dd></div><div><dt>How much memory does it need?</dt><dd>Generating one token at a time means reading weights from memory at every step. The RTX 3090's 936 GB/s decides how long those reads take, not the BF16 matrix throughput. A higher compute rate therefore barely moves single-request tok/s.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Verifying a 3090 unlock: boot logs, GEMM and llama-bench</title><link>https://localai.co.kr/en/guides/rtx-3090-unlock-verification-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-3090-unlock-verification-guide</guid><description>To compare before and after an unlock, fix the kernel, driver and power limit, then measure GEMM and llama-bench the same way. A record sheet and rollback procedure.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Verifying a 3090 unlock: boot logs, GEMM and llama-bench</h1><p>Without recording the same conditions, you cannot separate the unlock's share.</p><p id="guide-page-summary">Comparing before and after starts with fixing conditions: record the kernel, driver, VBIOS, power limit and context length, measure matrix throughput with a torch GEMM and prefill and decode with llama-bench. Check the logs after a cold boot, and roll back by removing the kernel command-line option if it fails.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Record the kernel, driver, VBIOS and power limit for the comparison to hold.</li><li>GEMM isolates matrix compute; llama-bench reports prefill and decode separately.</li><li>Check the cold-boot logs, and roll back by removing the command-line option if it fails.</li></ol></section><section><h2>Record the baseline first</h2><p>Before measuring, record the kernel version, NVIDIA driver, VBIOS, power limit and current clocks. `uname -r`, `nvidia-smi` and `nvidia-smi -q` show them. The same card gives different results under a different driver or power setting.</p><p>Keep the power limit fixed for the whole experiment. The 3090 defaults to 350 W, and lowering it to 300 or 280 W slows decode slightly. Changing power between runs mixes the compute effect with the power effect.</p><div><p><strong>Baseline recording commands</strong></p><pre><code data-guide-code-block="0-0">uname -r
nvidia-smi --query-gpu=name,driver_version,vbios_version,power.limit,clocks.max.sm,memory.total --format=csv
nvidia-smi -q | grep -A2 "GPU Power Limit"</code></pre><p><small>Keep the output verbatim. If the driver or VBIOS changes, treat the next comparison as a separate experiment.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-bf16-unlock-guide">RTX 3090 BF16 unlock: what opens and what stays the same</a></li><li><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">llama.cpp: finding which settings are slowing you down</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-3.webp" alt="A graphics card with magnified callouts of its fan, power connector and PCIe contacts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verification starts with the card's connection, power and slot.</figcaption></figure><section><h2>Measure matrix compute with GEMM</h2><p>The published comparison used a dense 8192³ GEMM with FP32 accumulation and five-sample medians. Measuring FP16, BF16 and TF32 under the same setup isolates the unlock's effect on matrix compute. Discard warm-up runs and use the median.</p><p>In PyTorch, TF32 is used only when `torch.backends.cuda.matmul.allow_tf32` is enabled, and BF16 requires `torch.bfloat16` inputs. Write the script yourself, following the conditions in the repository issue.</p><div><p><strong>GEMM measurement example (verify the conditions yourself)</strong></p><pre><code data-guide-code-block="1-0">import torch, time, statistics
assert torch.cuda.is_available()
torch.backends.cuda.matmul.allow_tf32 = True
n = 8192
for dtype in (torch.float16, torch.bfloat16):
    a = torch.randn(n, n, device='cuda', dtype=dtype)
    b = torch.randn(n, n, device='cuda', dtype=dtype)
    for _ in range(3): a @ b
    torch.cuda.synchronize()
    times = []
    for _ in range(5):
        start = time.perf_counter(); a @ b; torch.cuda.synchronize()
        times.append(time.perf_counter() - start)
    med = statistics.median(times)
    print(dtype, round(2 * n**3 / med / 1e12, 2), 'TFLOPS')</code></pre><p><small>This example covers FP16 and BF16 only; measure TF32 with its own settings and dtype. Compare the ratio before and after, not the absolute number.</small></p></div></section><section><h2>Measure prefill and decode with llama-bench</h2><p>`llama-bench` reports prefill and decode separately for the same model. Fix context and repetitions with something like `-p 4096 -n 128 -r 5`, and keep the model, quantization and power limit identical before and after. Use a GGUF already on the card.</p><p>Many of llama.cpp's quantized kernels do not use BF16 matrix products. A large GEMM difference can therefore leave llama-bench decode unchanged. You need to explain that gap to interpret the results.</p><div><p><strong>Prefill and decode measurement example</strong></p><pre><code data-guide-code-block="2-0">llama-bench -m /path/to/model.gguf -p 4096 -n 128 -r 5</code></pre><p><small>Keep the model path and options identical in both runs, and record the standard deviation as well.</small></p></div></section><section><h2>Check logs after a cold boot</h2><p>The unlock applies after a full power-off and restart. After boot, check the module log with `journalctl -k -b | grep gpu_unlock` and the driver binding with `lspci -nnk -s &lt;PCI address&gt;`, and confirm the card appears normally in `nvidia-smi`.</p><p>Stop the experiment if you see Xid errors or a driver reset. A card already used by a driver in the same power cycle is refused, so power off before retrying.</p><div><p><strong>Post-boot checks</strong></p><pre><code data-guide-code-block="3-0">journalctl -k -b | grep gpu_unlock
lspci -nnk -s 0000:21:00.0
nvidia-smi</code></pre><p><small>Replace the PCI address with the one from `lspci -D`; it differs from the GPU index.</small></p></div></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-3.webp" alt="A case with an RTX 3090 beside a check mark, and an open notebook with flow diagrams on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Recording conditions in a note lets the next comparison use the same baseline.</figcaption></figure><section><h2>Rollback and failure recovery</h2><p>If something goes wrong, remove the `gpu_unlock.targets=` entry from the kernel command line and reboot. Uninstalling the packages also removes the module and initramfs configuration. If the display stays blank, delete the option temporarily in the bootloader edit screen and boot.</p><p>If the log says firmware never stopped, DMA buffers remain until the next power-off. Power off before retrying, and test on a spare card when possible.</p></section><section><h2>Record sheet</h2><p>Fill in these fields for both runs to make the comparison reproducible. If a value differs, explain it first; if it cannot be explained, do not count it as the unlock's effect.</p><table><caption>Before-and-after record fields</caption><thead><tr><th scope="col">Field</th><th scope="col">Example</th></tr></thead><tbody><tr><th scope="row">Kernel, driver, VBIOS</th><td>7.2.8-1, 615.71.09, 94.02.42.00.9b</td></tr><tr><th scope="row">Power limit</th><td>350W</td></tr><tr><th scope="row">BF16 GEMM</th><td>87.50 → 157.41 TFLOPS</td></tr><tr><th scope="row">llama-bench prefill</th><td>Record with conditions</td></tr><tr><th scope="row">llama-bench decode</th><td>68.9 tok/s (3090, 350W)</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-1.webp" alt="Two graphics cards side by side, one short with a single fan and one long with two fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure before and after at the same model and power to isolate the unlock's share.</figcaption></figure><aside><h2>Check expectations by workload</h2><p>See which stages can change before you measure.</p><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Comparing before and after starts with fixing conditions: record the kernel, driver, VBIOS, power limit and context length, measure matrix throughput with a torch GEMM and prefill and decode with llama-bench. Check the logs after a cold boot, and roll back by removing the kernel command-line option if it fails.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>The RTX 3090 48 GB mod: what to verify before you accept the card</title><link>https://localai.co.kr/en/guides/rtx-3090-48gb-mod-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-3090-48gb-mod-guide</guid><description>A 48 GB modified card is not accepted just because it boots and shows a picture. The checks that matter: a 49152 MiB report, compute capability 8.6, 92 to 95 percent memory allocation, driver, PCIe and Xid log review, and an ACCEPT/REVIEW/REJECT verdict.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">The RTX 3090 48 GB mod: what to verify before you accept the card</h1><p>The mod adds capacity, but the 936 GB/s of bandwidth and decode speed stay the same.</p><p id="guide-page-summary">The 48 GB mod physically replaces memory chips, and the first gate is whether the driver reports 49152 MiB. A card can boot and display output yet fail under high-memory allocation or a long stress run, so run the acceptance test and keep the report before accepting it. Bandwidth matches the 24 GB model, so token generation does not get faster; the gain is fitting a larger model on one card.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A modified card is not a normal GPU; booting and displaying output does not prove it passes.</li><li>The checks are a 49152 MiB report, compute capability 8.6, 92 to 95 percent memory allocation, and driver, PCIe and Xid logs.</li><li>Bandwidth stays at 936 GB/s, so decode does not speed up; the gain is resident capacity for larger models.</li></ol></section><section><h2>The 48 GB mod replaces memory chips</h2><p>The 48 GB mod is not a software setting but a physical job that replaces the card's GDDR6X chips. When it succeeds, the driver reports `49152MiB` and frameworks such as PyTorch see the same size. It is a different kind of work from a kernel-module unlock that opens compute rate.</p><p>Memory bandwidth stays at 936 GB/s, the same as the 24 GB model. Single-token generation is set by that bandwidth, so the mod does not speed up decode. What grows is the model size you can keep resident on one card.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide">Does the 3090 unlock speed up local LLMs? Prefill, batching, decode</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-2.webp" alt="An isometric illustration of a dual-fan graphics card and a triple-fan graphics card, each above a green box with an arrow pointing down" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Judge a modified card by the reported memory and allocation, not by whether the box matches.</figcaption></figure><section><h2>Booting is not proof of acceptance</h2><p>A modified card can boot and display output and still fail at handover. The team behind the acceptance tool lists the failure modes: the driver reports the wrong memory size, CUDA sees less VRAM than expected, high-memory allocation crashes, or the OS log collects NVIDIA, WHEA, Xid or PCIe errors.</p><p>The acceptance run therefore has two stages: a short check and a long stress run. The short check reads the baseline, the stress run holds a large allocation for a long time, and then you reboot and check again.</p></section><section><h2>The acceptance checklist</h2><p>The tool checks that the GPU name contains `3090`, that VRAM reports about `49152MiB`, that PyTorch CUDA sees the same size, that compute capability is `8.6` as expected for a 3090, and that writes reach 92 percent of the target memory by default. It also records the PCIe link, VBIOS, driver, power, temperature and utilization.</p><p>OS log review is part of the checklist: NVIDIA, Xid and PCIe kernel errors on Linux, and NVIDIA, Display, WHEA and PCIe system events on Windows. Checks that could not run for lack of log permissions are not treated as passes but flagged for human review.</p><table><caption>RTX 3090 48 GB acceptance criteria</caption><thead><tr><th scope="col">Check</th><th scope="col">Criterion</th></tr></thead><tbody><tr><th scope="row">GPU name</th><td>contains `3090`</td></tr><tr><th scope="row">VRAM</th><td>about 49152 MiB</td></tr><tr><th scope="row">Compute capability</th><td>8.6</td></tr><tr><th scope="row">Memory write</th><td>92 percent default, 95 percent stress</td></tr><tr><th scope="row">OS logs</th><td>no NVIDIA, Xid, WHEA or PCIe errors</td></tr></tbody></table></section><section><h2>Running the test and reading the verdict</h2><p>In a workshop you run the short check first and use a longer stress run for handover. The tool takes a duration and allocation fraction such as `--stress-seconds 1800 --vram-fraction 0.95`, and you can adjust the expected size with `--expected-memory-mib 49152 --memory-tolerance-mib 1024`. Reports are saved under `reports/` as Markdown and JSON.</p><p>There are three verdicts: `ACCEPT` when no check fails or warns, `REVIEW` when nothing hard-fails but a human should look, and `REJECT` when any required check fails. Do not accept on `REJECT`; for `REVIEW`, resolve the PCIe warning, temperature or permission issue before deciding.</p><div><p><strong>Running the acceptance test</strong></p><pre><code data-guide-code-block="3-0">chmod +x install.sh gpu-validator.sh
./install.sh
./gpu-validator.sh --quick
./gpu-validator.sh --stress-seconds 1800 --vram-fraction 0.95
# 재부팅 후 같은 카드에서 다시 확인
./gpu-validator.sh --quick</code></pre><p><small>The test does not modify the card. Keep the report and ask the seller for the same report.</small></p></div></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-3.webp" alt="A graphics card with magnified callouts of its fan, power connector and PCIe contacts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect contacts and power delivery by eye, then confirm the same details in the logs.</figcaption></figure><section><h2>Capacity grows, speed does not</h2><p>The mod has one benefit: a model that does not fit in 24 GB can live on one card. Unlike splitting across two 24 GB cards with tensor parallelism, no inter-card communication or synchronization cost is involved. Power and heat, however, stay concentrated on one card.</p><p>Expecting speed here leads to disappointment. In the 3090 measurements published on this site, decode was 68.9 tok/s at 350 W and 51.0 tok/s at 250 W, following the power limit, while memory capacity did not change speed. A modified card sits on the same bandwidth.</p></section><section><h2>Risks that remain with a modified card</h2><p>A modified card is not covered by the manufacturer's warranty. A driver or kernel update can change what memory is reported, and then you need to repeat the same checks. Check whether the seller's warranty language points to a test result, such as a passing 49152 MiB report and stress run, rather than a vague promise that it works.</p><p>The same report matters when you sell the card on. Keeping the test record lets both buyer and seller verify the same conditions, so run the same check before selling as well.</p></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-1.webp" alt="A desktop tower with its side panel removed beside a dark monitor, a notebook and pencil cup on the desk, and a plant by the window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even a card that passes should be checked once more after a reboot.</figcaption></figure><aside><h2>See the measurement record sheet</h2><p>Even a modified card needs fixed conditions for a before-and-after comparison.</p><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-verification-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The 48 GB mod physically replaces memory chips, and the first gate is whether the driver reports 49152 MiB. A card can boot and display output yet fail under high-memory allocation or a long stress run, so run the acceptance test and keep the report before accepting it. Bandwidth matches the 24 GB model, so token generation does not get faster; the gain is fitting a larger model on one card.</dd></div><div><dt>How much memory does it need?</dt><dd>The 48 GB mod is not a software setting but a physical job that replaces the card's GDDR6X chips. When it succeeds, the driver reports `49152MiB` and frameworks such as PyTorch see the same size. It is a different kind of work from a kernel-module unlock that opens compute rate.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The mod has one benefit: a model that does not fit in 24 GB can live on one card. Unlike splitting across two 24 GB cards with tensor parallelism, no inter-card communication or synchronization cost is involved. Power and heat, however, stay concentrated on one card.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Two RTX 3090s with NVLink: how much it actually changes inference</title><link>https://localai.co.kr/en/guides/dual-rtx-3090-nvlink-tensor-parallel-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/dual-rtx-3090-nvlink-tensor-parallel-guide</guid><description>In a community benchmark of 2x RTX 3090 vLLM tensor parallelism, NVLink gave 85.0 vs 81.1 tok/s and a p95 of 239.1 vs 277.6 seconds. Why the default path is PCIe with P2P off, and how to check all three layers.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Two RTX 3090s with NVLink: how much it actually changes inference</h1><p>In inference NVLink was about a 5 percent difference, and the default setup works without a bridge at all.</p><p id="guide-page-summary">The RTX 3090 has an NVLink 3.0 connector, but a bridge must be physically installed and most consumer setups do not have one. In a 2x RTX 3090 vLLM tensor-parallel community benchmark, NVLink led at 85.0 vs 81.1 tok/s, about 5 percent, with a steadier p95 of 239.1 vs 277.6 seconds. The default multi-GPU path runs on PCIe with P2P off.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>In the community benchmark, NVLink raised decode throughput about 5 percent and cut p95 latency.</li><li>Tensor parallelism works over PCIe without a bridge, and the default setup leaves P2P off.</li><li>Whether P2P is really on has to be checked at three layers: driver, NCCL and vLLM.</li></ol></section><section><h2>What an NVLink bridge does</h2><p>The RTX 3090 supports NVLink 3.0 on GA102, so a pair of cards can carry four links of 112.5 Gbit/s each for 112.5 GB/s bidirectional in total, 56.25 GB/s per direction. PCIe 4.0 x16 provides about 32 GB/s per direction, so the dedicated path between cards is much wider.</p><p>Having an NVLink connector on the 3090 is not the same as having a bridge installed. The reference notes state that a bridge has to be physically installed and that most consumer setups do not have one. Without it, multi-card setups run over PCIe.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-2.webp" alt="Two graphics cards mounted side by side inside a case with an NVLink bridge connecting them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A bridge changes the path between cards; it adds neither compute nor capacity.</figcaption></figure><section><h2>Measured: NVLink on and off at TP=2</h2><p>A community benchmark ran the same model on two 3090s with vLLM tensor parallelism (TP=2). With Devstral Small 2505 Q8_0, 50 code generation prompts and responses averaging about 1650 tokens, NVLink gave 85.0 tok/s against 81.1 tok/s over PCIe alone, roughly a 5 percent difference.</p><p>The tail latency stands out more: the 95th percentile response time was 239.1 seconds with NVLink against 277.6 seconds without, so NVLink was steadier. If variance on long requests matters more than average throughput, that difference counts. The author concluded that for inference alone the money is better spent on VRAM or a card than on a bridge.</p><table><caption>2x RTX 3090 vLLM TP=2 community measurement (Devstral Small 2505 Q8_0, 50 prompts, responses averaging about 1650 tokens)</caption><thead><tr><th scope="col">Setup</th><th scope="col">Throughput</th><th scope="col">p95 response</th></tr></thead><tbody><tr><th scope="row">NVLink enabled</th><td>85.0 tok/s</td><td>239.1 s</td></tr><tr><th scope="row">PCIe only</th><td>81.1 tok/s</td><td>277.6 s</td></tr></tbody></table></section><section><h2>The default is PCIe with P2P off</h2><p>The 2x3090 operating notes describe the default dual and multi-card path as PCIe-only with P2P off: `NCCL_P2P_DISABLE=1` and custom all-reduce disabled, chosen so it works out of the box on any consumer rig without tuning.</p><p>The same notes say enabling P2P over PCIe can add a workload-dependent few percent up to about 20 percent. The emphasis is on order: confirm the default PCIe path works, then read the topology and enable P2P to compare, which makes problems easier to isolate.</p></section><section><h2>Three layers to check whether P2P is on</h2><p>P2P is not one question but three stacked ones: whether the driver grants direct GPU-to-GPU access, whether NCCL uses that path for transfers, and whether vLLM's extra custom all-reduce kernel is active. Conflating them makes it impossible to explain why P2P looks enabled yet does not speed anything up.</p><p>vLLM's gate checks for NVLink by name, but that check is a cheap pre-filter ahead of an expensive one. As a result, rigs with three or more cards over PCIe keep custom all-reduce off by design, because they lack a fully connected NVLink mesh. That is intended behaviour rather than misconfiguration, and P2P benefits can still flow through the NCCL layer.</p><table><caption>The three P2P layers</caption><thead><tr><th scope="col">Layer</th><th scope="col">How to check</th></tr></thead><tbody><tr><th scope="row">Driver</th><td>`nvidia-smi topo -p2p rw` reports OK</td></tr><tr><th scope="row">NCCL</th><td>`NCCL_P2P_LEVEL` setting with driver permission</td></tr><tr><th scope="row">vLLM custom all-reduce</th><td>check the startup log for a disabled notice</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-3.webp" alt="Two graphics cards stacked inside an open-frame case with power cables attached to each" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting across two cards puts power and heat on each and adds a communication cost.</figcaption></figure><section><h2>What TP=2 costs and requires</h2><p>In vLLM, tensor parallelism shards the weights across the cards. The vLLM documentation notes that this leaves more KV cache space per card but can add synchronization overhead, so context length and concurrency have to be tuned alongside it.</p><p>Enabling chunked prefill splits compute-bound prefill and bandwidth-bound decode so both resources get used at once. Power limits apply per card, so two cards mean watching the combined draw and case heat. As the chart above shows, lowering a 3090's power limit lowers decode speed with it.</p><div><p><strong>TP=2 example with P2P checks</strong></p><pre><code data-guide-code-block="4-0">nvidia-smi topo -m
nvidia-smi topo -p2p rw

CUDA_VISIBLE_DEVICES=0,2 CUDA_DEVICE_ORDER=PCI_BUS_ID \
vllm serve /models/model.gguf \
  --tensor-parallel-size 2 \
  --max-num-seqs 4 --max-model-len 64000 \
  --gpu-memory-utilization 0.95 \
  --max-num-batched-tokens 16384 --enable-chunked-prefill \
  --quantization gguf</code></pre><p><small>The flags follow the conditions of the measurement above. Adjust them for your cards, model and context length, and read the P2P and all-reduce notices in the startup log.</small></p></div></section><section><h2>So should you buy a bridge</h2><p>For inference, a bridge is the last item to consider. The measured gain was about 5 percent throughput and a better tail, while larger differences come from whether a model can be split across two 24 GB cards or must live on one larger card. With two cards, confirm the default PCIe path works first.</p><p>Work that keeps card-to-card traffic running, such as training or fine-tuning, is a different story. The common assessment is that NVLink's bandwidth advantage shows up more in training than in inference, and the benchmark above reached the same conclusion for inference: about 5 percent. Decide whether your use is inference or training before committing.</p></section><figure><img src="https://localai.co.kr/guides/gpu-power-limit-3090-compare.webp" alt="A bar chart comparing RTX 3090 decode speed of 68.9, 65.3, 62.3 and 51.0 tok/s against measured GPU power of 347.7, 298.7, 274 and 249.5 W at 350, 300, 275 and 250 W limits" width="720" height="1140" loading="lazy" decoding="async"><figcaption>Tensor parallelism applies a power limit per card, so with two cards watch the combined draw.</figcaption></figure><aside><h2>See the single-card 48 GB option</h2><p>There is also a way to drop inter-card traffic by putting the capacity on one card.</p><a href="https://localai.co.kr/en/guides/rtx-3090-48gb-mod-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The RTX 3090 has an NVLink 3.0 connector, but a bridge must be physically installed and most consumer setups do not have one. In a 2x RTX 3090 vLLM tensor-parallel community benchmark, NVLink led at 85.0 vs 81.1 tok/s, about 5 percent, with a steadier p95 of 239.1 vs 277.6 seconds. The default multi-GPU path runs on PCIe with P2P off.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Where can you use open-weight AI for free? Five API services</title><link>https://localai.co.kr/en/guides/free-open-weight-ai-services-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/free-open-weight-ai-services-guide</guid><description>Compare five services for trying open-weight AI for free, including DeepSeek, GPT-OSS and Nemotron. Review quotas, setup and data policies before choosing a guide.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Where can you use open-weight AI for free? Five API services</h1><p>Try a free API before buying a GPU</p><p id="guide-page-summary">Try publicly released models through OpenCode, OpenRouter, Groq, NVIDIA and Mistral to assess them for your work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Temporary offers, daily free quotas and developer trials have different terms.</li><li>Fix the model ID and account plan, and keep auto-recharge off.</li><li>Start with code and documents that are safe to share.</li></ol></section><section><h2>Try the answers before downloading the model</h2><p>With a free open-weight model API, you can send questions or code to a publicly released model and receive answers generated on the provider's servers. Before preparing a large GPU or downloading model files, you can review public code or summarize a short document. This guide helps you choose a service and understand its free-access terms.</p><p>For example, OpenCode offers access to the MIT-licensed DeepSeek V4.1 Flash, while Groq hosts GPT-OSS, whose weights use Apache 2.0. Downloaded weights are governed by their model license; using an API also brings the service's usage and data policies into scope.</p><ul><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash">DeepSeek model release</a></li><li><a href="https://huggingface.co/openai/gpt-oss-20b">GPT-OSS model release</a></li><li><a href="https://localai.co.kr/en/guides/china-ai-export-controls-openrouter-local-llm-guide">China's AI Export Controls: What Happens to the Models You Use on OpenRouter?</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Local RAG Setup Guide: Build an AI That Answers from Your Documents</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="A laptop with code and a compact computer sit beside task windows and controls." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Comparing answers to the same code helps you choose a model for your task.</figcaption></figure><section><h2>Choose by the type of free access</h2><p>Start with OpenCode for a coding-tool workflow, or OpenRouter to try multiple models through one API format. Groq publishes request and token limits per model, NVIDIA offers developer free endpoints for new Nemotron models, and Mistral enables limited API use in account Free mode.</p><table><caption>Free access and setup guides by service</caption><thead><tr><th scope="col">Service</th><th scope="col">Free access</th><th scope="col">Setup guide</th></tr></thead><tbody><tr><th scope="row">OpenCode</th><td>Temporary DeepSeek V4.1 Flash Free offer</td><td>[Connect the coding tool](/guides/opencode-deepseek-v41-flash-free-guide)</td></tr><tr><th scope="row">OpenRouter</th><td>:free models and free-router quotas</td><td>[Free-model API](/guides/openrouter-free-open-weight-models-guide)</td></tr><tr><th scope="row">Groq</th><td>Per-model request and token limits on Free Plan</td><td>[Call GPT-OSS](/guides/groq-free-open-weight-api-guide)</td></tr><tr><th scope="row">NVIDIA API Catalog</th><td>Development and testing on listed Free Endpoints</td><td>[Try Nemotron](/guides/nvidia-api-catalog-free-nemotron-guide)</td></tr><tr><th scope="row">Mistral Studio</th><td>Limited Free mode without a credit card</td><td>[Connect Small 4](/guides/mistral-studio-free-api-guide)</td></tr></tbody></table><p>As of October 16, 2026. Check the service's model list and your account limits when availability or free-access policies change.</p><p>Hugging Face Inference Providers currently includes no monthly credits for ordinary Free accounts, so it is excluded from this free API list. Downloading publicly released model files remains a separate option.</p><ul><li><a href="https://huggingface.co/docs/inference-providers/pricing">Hugging Face pricing and included credits</a></li></ul></section><section><h2>Token limits can run out before request limits</h2><p>OpenRouter permits up to 20 free-model requests per minute. Accounts with less than $10 in total purchases have a daily limit of 50 requests; accounts that have purchased at least $10 get 1,000 per day. Start with the default free allowance rather than purchasing credits just to raise it.</p><p>Groq's public Free Plan table lists both GPT-OSS models at 30 requests per minute, 1,000 per day, 8,000 tokens per minute and 200,000 tokens per day. A single long document can exceed the minute token limit even while requests remain. Check your actual per-model limits in the account's Limits page and adjust input length and request spacing.</p><p>An agent can exchange multiple requests while reading files, checking results and revising one task. Start with one short code review and inspect call counts and token usage in the usage history. If you receive `429`, stop automatic repetition and follow the response's retry guidance.</p><ul><li><a href="https://openrouter.ai/docs/api-reference/limits">OpenRouter free limits</a></li><li><a href="https://console.groq.com/docs/rate-limits">Groq per-model limits</a></li></ul></section><section><h2>Turn off automatic switching for a free-only test</h2><p>Pin the model ID to a free entry and check whether your application switches models after an error. To compare open-weight models on OpenRouter, specify the chosen model's `:free` ID. The free router selects a model for each request, so use an individual ID when comparing the same open-weight model consistently. Choose `deepseek-v4.1-flash-free` on OpenCode. Leaving paid models out of fallback lists helps prevent a failed free request from triggering an unexpected paid call.</p><p>Keep account auto-recharge off as well. Coding tools such as OpenCode can use another model for auxiliary tasks such as session titles. Inspect model IDs and costs in the full usage history; use the direct API examples in each guide to isolate a single request.</p><ul><li><a href="https://opencode.ai/v2/docs/console/billing/">OpenCode auto-recharge settings</a></li><li><a href="https://opencode.ai/v2/docs/console/models/">Free models and auxiliary requests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A monitor connected to a compact computer on a wooden desk shows code and a conversation panel." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Fix the model and endpoint, then test the connection with one short request.</figcaption></figure><section><h2>Start with an example that fits the data policy</h2><p>Begin with a public example stripped of secrets and personal data. OpenCode's free DeepSeek provider states zero retention and no training use, while NVIDIA free endpoints are for development and testing and may log session information for security and product improvement. NVIDIA instructs users not to submit personal or confidential information.</p><p>Inputs and outputs in Mistral Free mode may be used for training. Check Anonymous improvement data under Admin → Privacy and disable it before use if you do not want that training use. On OpenRouter, terms vary with the provider actually handling the request, so also read the data policy on the model page.</p><ul><li><a href="https://help.mistral.ai/en/articles/347617-do-you-use-my-user-data-to-train-our-artificial-intelligence-models">Mistral training-data policy</a></li><li><a href="https://help.mistral.ai/en/articles/455207-can-i-opt-out-of-my-input-or-output-data-being-used-for-training">Mistral training-use settings</a></li><li><a href="https://opencode.ai/v2/docs/console/models/#privacy">Data policies by free provider</a></li></ul></section><section><h2>Decide on local hosting after testing your task</h2><p>For comparison, send the same code and question, then record whether each model identifies the issue and whether its proposed fix passes your tests. The Python examples in these guides print the answer after receiving it in full, so compare total response time. Measuring time to the first token requires a separate streaming configuration. Free API response times also include server queues and network latency. Compare your GPU's speed separately by running the same model locally.</p><p>If you work with public material occasionally, first see whether the free allowance is enough. If quotas repeatedly interrupt a growing workload, or the material must stay on your machine, follow the [local LLM agent starter guide](/guides/local-ai-agent-first-guide). Once you choose a model, use the [hardware finder](/?tab=finder) and [speed comparison](/compare/hardware-speed-comparison) to explore local configurations.</p></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-1.webp" alt="A desk with a compact computer and keyboard holds a sequence of cards and a tool tray." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once you know your recurring workload, decide whether to keep using an API or run locally.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Try publicly released models through OpenCode, OpenRouter, Groq, NVIDIA and Mistral to assess them for your work.</dd></div><div><dt>When is it better not to choose this?</dt><dd>OpenRouter permits up to 20 free-model requests per minute. Accounts with less than $10 in total purchases have a daily limit of 50 requests; accounts that have purchased at least $10 get 1,000 per day. Start with the default free allowance rather than purchasing credits just to raise it.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>For example, OpenCode offers access to the MIT-licensed DeepSeek V4.1 Flash, while Groq hosts GPT-OSS, whose weights use Apache 2.0. Downloaded weights are governed by their model license; using an API also brings the service's usage and data policies into scope.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to use DeepSeek V4.1 Flash Free with OpenCode</title><link>https://localai.co.kr/en/guides/opencode-deepseek-v41-flash-free-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/opencode-deepseek-v41-flash-free-guide</guid><description>Connect DeepSeek V4.1 Flash Free to OpenCode for code review. Learn the exact free model ID, temporary offer, billing controls and data policy.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">How to use DeepSeek V4.1 Flash Free with OpenCode</h1><p>Start with one public code sample and the free DeepSeek model</p><p id="guide-page-summary">Select DeepSeek V4.1 Flash Free in OpenCode to have a hosted model review code.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The exact free model ID is deepseek-v4.1-flash-free.</li><li>The offer is temporary, with no published end date or guaranteed quota.</li><li>Start with the direct API example to isolate the cost of a single request.</li></ol></section><section><h2>Send code through OpenCode for a DeepSeek review</h2><p>OpenCode is an AI coding tool that reads project files and helps explain or edit code. Connect **DeepSeek V4.1 Flash Free** to request reviews without downloading its model files. OpenCode prepares the request and the hosted model generates the answer.</p><p>DeepSeek V4.1 Flash has publicly released weights under the MIT license. If hosting the large model is a significant commitment, its free API offer provides a way to assess its answers first. Here we start by reviewing a short Python function that is safe to share.</p><ul><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash">DeepSeek model and license</a></li><li><a href="https://localai.co.kr/en/guides/groq-free-open-weight-api-guide">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</a></li><li><a href="https://localai.co.kr/en/guides/openrouter-free-open-weight-models-guide">Connect a Free Open-Weight Model on OpenRouter for Code Review</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="A laptop with code and a compact computer sit beside task windows and controls." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use public code to assess the answers before downloading model files.</figcaption></figure><section><h2>Choose the entry ending in Free</h2><p>As of October 16, 2026, OpenCode lists input, output and cache reads as free for DeepSeek V4.1 Flash Free. Check for the Free suffix in the model picker. The ordinary DeepSeek V4.1 Flash entry is a separate paid option.</p><table><caption>Two similarly named entries</caption><thead><tr><th scope="col">Model ID</th><th scope="col">Billing</th></tr></thead><tbody><tr><th scope="row">deepseek-v4.1-flash-free</th><td>Limited-time free</td></tr><tr><th scope="row">deepseek-v4.1-flash</th><td>Paid</td></tr></tbody></table><p>This is a limited-time promotion. No end date or guaranteed per-minute or daily quota is published, so start with model evaluation rather than an unattended long-running job.</p><ul><li><a href="https://opencode.ai/v2/docs/console/models/">Model list and free-offer policy</a></li></ul></section><section><h2>Connect and pin the model in OpenCode</h2><p>For a first installation, run `node --version` and `npm --version` in a terminal to check that Node.js and npm are available. Once both commands show a version, install OpenCode V2 with the command below. Existing OpenCode users should read the V2 installation and migration instructions first. Start in a separate folder containing a public sample rather than a private repository.</p><div><p><strong>V2 installation</strong></p><pre><code data-guide-code-block="2-0">npm install -g @opencode/cli</code></pre></div><p>Run `opencode` in the sample folder, then enter `/connect`. Choose the OpenCode pay-as-you-go provider and connect an API key issued in Console. Next, use `/models` to select DeepSeek V4.1 Flash Free. If the account screen requests payment or a top-up, check the free-access conditions before proceeding; do not purchase credits just to follow this example.</p><p>To start with the same model, set the `model` value below in the project's `opencode.jsonc`. Merge this field into existing configuration instead of overwriting the file. Check that the selected model still includes Free in a new session.</p><div><p><strong>Set the default free model</strong></p><pre><code data-guide-code-block="2-1">{
  "$schema": "https://opencode.ai/config.json",
  "model": "opencode/deepseek-v4.1-flash-free"
}</code></pre></div><ul><li><a href="https://opencode.ai/v2/docs/">V2 installation</a></li><li><a href="https://opencode.ai/v2/docs/models/">Model selection and configuration</a></li></ul></section><section><h2>Ask for an explanation before allowing edits</h2><p>Save the function below as `average.py` in the sample folder. Before sending a question, select Plan through `/agents` to start by exploring without editing normal project files.</p><div><p><strong>Public sample to review</strong></p><pre><code data-guide-code-block="3-0">def average(values):
    return sum(values) / len(values)</code></pre></div><p>Type `@` in OpenCode to attach `average.py`, then ask: ‘Explain what happens with an empty list and how to fix it. Do not edit files or run commands.’ Reject shell-command requests for this exercise. In the response, look for the connection between an empty list having length zero and the resulting division by zero.</p><p>If the review is useful, request a proposed fix next. To let OpenCode apply it, switch to an agent that permits file edits and approve the change request. In a Git repository, inspect the changes with `git diff`; in a plain sample folder, compare the files before and after editing. Run tests with both empty and non-empty lists to check the result.</p><ul><li><a href="https://opencode.ai/v2/docs/cli/tui/">File attachment and TUI controls</a></li><li><a href="https://opencode.ai/v2/docs/agents/">Plan agent</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A monitor connected to a compact computer on a wooden desk shows code and a conversation panel." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>OpenCode runs on your computer; the selected model generates answers in the cloud.</figcaption></figure><section><h2>Manage free requests and auto-recharge separately</h2><p>Check Auto-recharge rules under Console Settings → Billing and keep them off on an account used only for free evaluation. OpenCode may use other low-cost models to generate session titles. Review the model IDs and costs of both the main answer and auxiliary requests in usage history.</p><p>To isolate the request, call only the free model API directly as shown below. The example uses Python 3's standard library and prompts for the key without echoing it. Save it as `opencode-free-check.py` and run `python3 opencode-free-check.py`. It makes one request without automatic retries or switching to a paid model.</p><div><p><strong>Make one request to the free model</strong></p><pre><code data-guide-code-block="4-0">import getpass
import json
import urllib.request

key = getpass.getpass('OpenCode API key: ')
payload = {
    'model': 'deepseek-v4.1-flash-free',
    'messages': [{'role': 'user', 'content':
        'Review this Python function for empty-list handling:\n'
        'def average(values):\n    return sum(values) / len(values)'}],
    'max_tokens': 2048,
}
request = urllib.request.Request(
    'https://opencode.ai/inference/openai/v1/chat/completions',
    data=json.dumps(payload).encode(),
    headers={'Authorization': 'Bearer ' + key,
             'Content-Type': 'application/json'},
)
with urllib.request.urlopen(request, timeout=120) as response:
    result = json.load(response)
choice = result['choices'][0]
print(choice['message'].get('content') or '(empty content)')
print('finish_reason:', choice.get('finish_reason'))</code></pre></div><p>In a normal response, review text is returned in `choices[0].message.content`. If `finish_reason` is `length` or the answer is empty, reasoning may have exhausted the output budget; try a shorter input. For authentication errors, check the key and account. For limit errors, check the free entry's availability and retry guidance.</p><ul><li><a href="https://opencode.ai/v2/docs/console/billing/">Auto-recharge and billing settings</a></li><li><a href="https://opencode.ai/v2/docs/console/budgets/">Budget controls</a></li></ul></section><section><h2>Decide which code to send and which to keep local</h2><p>The provider behind the free DeepSeek entry states a zero-retention policy and no use of request data for model training. The code is still sent to a hosted service, so begin with public samples containing no secrets or customer data. Other free entries, including MiMo and NVIDIA models, have different data terms; review those when switching models.</p><p>For occasional reviews of public projects, this free route is a useful place to start. If private material must stay on your machine or you want to run on your own hardware without a provider quota, continue with the [local agent starter guide](/guides/local-ai-agent-first-guide). The [free open-weight service comparison](/guides/free-open-weight-ai-services-guide) brings together other providers' limits and connection methods.</p><ul><li><a href="https://opencode.ai/v2/docs/console/models/#privacy">Per-model data policies</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-1.webp" alt="A desk with a compact computer and keyboard holds a sequence of cards and a tool tray." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start with reading code before granting file edits or command execution.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Select DeepSeek V4.1 Flash Free in OpenCode to have a hosted model review code.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Connect a Free Open-Weight Model on OpenRouter for Code Review</title><link>https://localai.co.kr/en/guides/openrouter-free-open-weight-models-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/openrouter-free-open-weight-models-guide</guid><description>Connect OpenRouter's free Llama 3.3 endpoint to review a public code sample. Follow the request limits, cost safeguards, provider privacy checks, and first-error fixes.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Connect a Free Open-Weight Model on OpenRouter for Code Review</h1><p>Send public code and review instructions to OpenRouter and receive a response from an open-weight model.</p><p id="guide-page-summary">OpenRouter connects inference APIs from multiple model providers through one request format. This recipe pins Meta Llama 3.3 70B Instruct's `:free` variant to review public Python code and check the request body, free-tier limits, and provider privacy policies.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A model ID ending in `:free` is a free endpoint; `openrouter/free` is a dynamic router that selects a free model for the request.</li><li>The default OpenRouter free tier allows 20 requests per minute and 50 per day; a cumulative credit purchase of at least $10 raises the daily cap to 1,000.</li><li>OpenRouter says it does not train on your inputs or outputs, but each request is forwarded to a model provider. Use public code for this review example and check the provider's policy.</li></ol></section><section><h2>Send a public code sample and receive a review</h2><p>OpenRouter connects inference APIs from multiple model providers through one request format. Send a public code sample and review instructions to receive the model's comments in the response. This guide builds an API request that pins the free variant of Llama 3.3 70B Instruct to review a short Python snippet.</p><p>Llama 3.3 publishes its weights under the Meta Llama 3.3 Community License. OpenRouter's `:free` label means hosted API token pricing is zero. [Meta Llama 3.3 model card](https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct) · [OpenRouter free endpoint](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)</p><ul><li><a href="https://localai.co.kr/en/guides/groq-free-open-weight-api-guide">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</a></li><li><a href="https://localai.co.kr/en/guides/opencode-deepseek-v41-flash-free-guide">How to use DeepSeek V4.1 Flash Free with OpenCode</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/ultrabert-embed-150m-english-retrieval-guide">Retrieve English documents with UltraBERT-Embed-150M</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="An illustrated workbench connects code on a laptop to several interface panels through a central device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The API sends code and instructions for review, then receives the model's response.</figcaption></figure><section><h2>Choose the model ID and free route</h2><p>A model ID ending in `:free` is a free hosted variant of that model. `openrouter/free` is a router that selects a suitable free model for each request, so the actual model can change between calls. For comparable or reproducible code reviews, use a specific free model ID as this example does. Choose `openrouter/free` when automatic selection matters, while checking weight availability separately. The example's review instruction is written in English.</p></section><section><h2>Send the first request with Python's standard library</h2><p>You need Python 3, an internet connection, and an API key created in your OpenRouter account. This script sends a request with Python's standard `urllib` library, so no SDK installation is required. `getpass` hides the key while you type, keeping it out of command history and source files. This example sends only a short Python function that is safe to make public.</p><p>Save the code as `review.py` and run `python3 review.py` in a terminal. When prompted, enter your API key and press Enter.</p><p>Do not save the key in a shared document or repository. If it has already been exposed, revoke it in the OpenRouter dashboard and create a new key.</p><div><p><strong>Request a review of a public Python function</strong></p><pre><code data-guide-code-block="2-0">import getpass
import json
import urllib.request

api_key = getpass.getpass("OpenRouter API key: ")
payload = {
    "model": "meta-llama/llama-3.3-70b-instruct:free",
    "messages": [
        {
            "role": "user",
            "content": (
                "Review this public Python example for correctness. State one concrete issue, "
                "if any, and suggest a minimal fix:\n\n"
                "def percentage(part, total):\n"
                "    return part / total * 100\n"
            ),
        }
    ],
    "max_tokens": 200,
}
request = urllib.request.Request(
    "https://openrouter.ai/api/v1/chat/completions",
    data=json.dumps(payload).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urllib.request.urlopen(request, timeout=60) as response:
    result = json.load(response)
print(result["choices"][0]["message"]["content"])</code></pre><p><small>The request body contains the model ID and public code; the API key is read only at the prompt.</small></p></div></section><section><h2>Recognize a response and diagnose the first error</h2><p>On success, the terminal prints the code review. The response JSON stores it at `choices[0].message.content` and may include token details in `usage`, but the current script prints only the review.</p><p>To display token details too, add `print(result.get("usage"))` on the line after `print(result["choices"][0]["message"]["content"])` at the end of the script.</p><p>The model may point out division by zero when `total` is 0 and suggest a guard, but verify every suggestion against the code and tests.</p><p>For `HTTP Error 401`, check that the key is correct and active, and that a space follows `Bearer`. `HTTP Error 429` can mean you reached the 20-per-minute or daily request limit. Stop retry loops and reduce calls until the free allowance resets. For `No endpoints found` or a model error, check whether that `:free` endpoint is currently available and whether your requested features and provider filters match; then choose an available free model ID.</p></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A monitor connected to a compact desktop computer shows a code editor beside a chat panel" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set the model ID, messages, and output limit in the request.</figcaption></figure><section><h2>Keep costs at zero within the daily free limit</h2><p>As of October 16, 2026, OpenRouter's pricing page lists 20 free-model requests per minute and 50 per day for a default account. Failed requests count toward the daily limit. Buying at least $10 in credits raises the free-model cap to 1,000 requests per day. If you are testing within the free tier, leaving credits unpurchased makes costs easier to control.</p><table><caption>OpenRouter free-model request limits · checked October 16, 2026</caption><thead><tr><th scope="col">Account condition</th><th scope="col">Free-model limit</th><th scope="col">What to verify</th></tr></thead><tbody><tr><th scope="row">Default free account</th><td>20 per minute · 50 per day</td><td>Failed requests count toward the daily cap</td></tr><tr><th scope="row">At least $10 in credits purchased</th><td>20 per minute · 1,000 per day</td><td>Existing cumulative purchase threshold</td></tr></tbody></table><p>Keep the model string `meta-llama/llama-3.3-70b-instruct:free` in this example, and check the listed price whenever choosing another model. An ID such as `meta-llama/llama-3.3-70b-instruct` without `:free` may be a paid route. The OpenRouter Free plan lists no budget or spend-control feature, so do not add credits or enable auto top-up while testing; check Activity for the model used and its cost. Do not add a paid model as an automatic fallback.</p></section><section><h2>Control what code and personal data reach model providers</h2><p>OpenRouter says it does not use inputs or outputs to train its own models, but it forwards requests to the selected model provider. Provider retention and training policies can differ, so read the provider details on the Llama 3.3 page and send only public code. [OpenRouter privacy policy](https://openrouter.ai/privacy/) · [Llama 3.3 free endpoint](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)</p><p>To apply a provider filter, add a `provider` setting to the request body. `data_collection: "deny"` excludes providers that collect data, while `zdr: true` selects only providers with a Zero Data Retention policy.</p><p>Stop the request if no free provider meets the filter, and do not configure a fallback to a paid model. In the Python example, add the code after creating `payload` and immediately before the `request = urllib.request.Request(` line. [Provider data collection controls](https://openrouter.ai/docs/guides/features/sovereign-ai)</p><div><p><strong>Optional privacy filters to add after payload and before the API request</strong></p><pre><code data-guide-code-block="5-0">payload["provider"] = {
    "data_collection": "deny",
    "zdr": True,
}</code></pre><p><small>These filters can cause a request to fail when no eligible free provider is available.</small></p></div></section><section><h2>Choose what to test with the free API and when to use another route</h2><p>The free API suits requests within the daily 50-call allowance, such as asking for possible bugs in public code or refining a prompt and output format.</p><p>If your request volume grows or you need consistent latency, provider selection, and retention controls, compare the current model pages and paid-plan controls. For internal code that must stay within your repository without inference charges, a local model is a better fit. Free models and providers can change, so review the [free-model collection](https://openrouter.ai/collections/free-models/) and [pricing and limits](https://openrouter.ai/pricing) before adopting a route.</p></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-03.webp" alt="A desk monitor displays a chat panel and code editor side by side" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the model's answer beside the code while checking its suggested changes.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>OpenRouter connects inference APIs from multiple model providers through one request format. This recipe pins Meta Llama 3.3 70B Instruct's `:free` variant to review public Python code and check the request body, free-tier limits, and provider privacy policies.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not save the key in a shared document or repository. If it has already been exposed, revoke it in the OpenRouter dashboard and create a new key.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Llama 3.3 publishes its weights under the Meta Llama 3.3 Community License. OpenRouter's `:free` label means hosted API token pricing is zero. [Meta Llama 3.3 model card](https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct) · [OpenRouter free endpoint](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</title><link>https://localai.co.kr/en/guides/groq-free-open-weight-api-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/groq-free-open-weight-api-guide</guid><description>Learn how to call the open-weight GPT-OSS models through the GroqCloud free API, from account and API-key setup to Free Plan limits, a Python request, response handling, and troubleshooting.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</h1><p>Use a small code-review request to check your Groq API connection and free limits.</p><p id="guide-page-summary">GroqCloud hosts open-weight models and returns responses through an API. This guide covers a Python request to GPT-OSS 20B, the published free limits, secure key entry, response endings, and data-retention conditions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The current public Free Plan table lists the same request and token limits for `openai/gpt-oss-20b` and `openai/gpt-oss-120b`.</li><li>The Python SDK can read the key through hidden input; inspect `finish_reason` alongside the final response.</li></ol></section><section><h2>Send a request to an open-weight model through the Groq API</h2><p>The Groq API accepts conversation messages and a model ID over HTTPS, then returns a response generated by a model hosted on GroqCloud. Here, a short Python request asks `openai/gpt-oss-20b` to review code, and reads both the response text and its completion status.</p><p>GPT-OSS 20B and 120B are available as Apache 2.0 open-weight models that you can also run on your own computer. The GroqCloud API uses the model IDs `openai/gpt-oss-20b` and `openai/gpt-oss-120b` for hosted inference. See [OpenAI's open-weight model overview](https://help.openai.com/en/articles/11870455-openai-open-weight-models) and the [GPT-OSS 20B model card](https://huggingface.co/openai/gpt-oss-20b).</p><ul><li><a href="https://console.groq.com/docs/models">Groq supported models and API IDs</a></li><li><a href="https://localai.co.kr/en/guides/openrouter-free-open-weight-models-guide">Connect a Free Open-Weight Model on OpenRouter for Code Review</a></li><li><a href="https://localai.co.kr/en/guides/opencode-deepseek-v41-flash-free-guide">How to use DeepSeek V4.1 Flash Free with OpenCode</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/nvidia-api-catalog-free-nemotron-guide">Try NVIDIA Nemotron's Free API: Send a First Request to the Developer Endpoint</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person at a laptop is surrounded by connected document, spreadsheet, folder, image, settings, and robot panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The API receives the function and review instruction written in the code, then returns the model's answer.</figcaption></figure><section><h2>Choose a model within the Free Plan limits</h2><p>In Groq's published Free Plan summary, the two GPT-OSS models share the same request and token limits. RPM means requests per minute, RPD requests per day, TPM tokens per minute, and TPD tokens per day.</p><p>This free table is a public organization-level summary. Check the current values for your account in the [Groq Console Limits page](https://console.groq.com/dashboard/limits). Input and generated tokens share the 8K-per-minute budget, so start with the relevant function and error description instead of pasting a long file.</p><table><caption>GPT-OSS request and token limits in Groq's published Free Plan</caption><thead><tr><th scope="col">Model ID</th><th scope="col">Request limits</th><th scope="col">Token limits</th></tr></thead><tbody><tr><th scope="row">`openai/gpt-oss-20b`</th><td>30 RPM / 1K RPD</td><td>8K TPM / 200K TPD</td></tr><tr><th scope="row">`openai/gpt-oss-120b`</th><td>30 RPM / 1K RPD</td><td>8K TPM / 200K TPD</td></tr></tbody></table><ul><li><a href="https://console.groq.com/docs/rate-limits">Groq rate limits by plan</a></li></ul></section><section><h2>Prepare an account and API key</h2><p>Check that your GroqCloud account shows the Free Plan, then create a key under API Keys. Groq says a payment method is required to upgrade to the paid Developer plan. To stay within the free tier, check the plan shown in your account and review any payment or upgrade screen before proceeding. [Groq billing guide](https://console.groq.com/docs/billing-faqs)</p><p>The installation commands below are for a macOS or Linux shell. Enter the API key through a hidden prompt at runtime instead of writing it into the code, so it stays out of shell history and the source file. After saving the example in the next section, run `python groq_review.py` in the same terminal with the virtual environment active. Another Python environment may not find the installed `groq` package.</p><div><p><strong>Set up a virtual environment and the Groq SDK</strong></p><pre><code data-guide-code-block="2-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install groq</code></pre><p><small>Activate the virtual environment in a macOS or Linux shell, then install the SDK.</small></p></div></section><section><h2>Send a short code-review request</h2><p>Save the following as `groq_review.py` and run it. `getpass` reads the API key without echoing it to the screen, then the SDK sends a JSON request to the chat completions endpoint.</p><div><p><strong>Ask GPT-OSS 20B to review a code snippet</strong></p><pre><code data-guide-code-block="3-0">from getpass import getpass
from groq import Groq

client = Groq(api_key=getpass("Groq API key: "))
completion = client.chat.completions.create(
    model="openai/gpt-oss-20b",
    messages=[
        {
            "role": "user",
            "content": (
                "Review this function for the empty-list edge case and suggest a fix:\n\n"
                "def average(values):\n"
                "    return sum(values) / len(values)"
            ),
        }
    ],
    reasoning_effort="low",
    include_reasoning=False,
    max_completion_tokens=2048,
)

choice = completion.choices[0]
print(choice.message.content or "(No final text was returned)")
print(f"finish_reason={choice.finish_reason}")
print(f"completion_tokens={completion.usage.completion_tokens}")
if choice.finish_reason == "length" and not choice.message.content:
    print("The token limit may have been used before final text; shorten the request or raise max_completion_tokens.")</code></pre><p><small>Run the saved file with `python groq_review.py` and read the returned text and finish reason.</small></p></div><div><p><strong>Run the script</strong></p><pre><code data-guide-code-block="3-1">python groq_review.py</code></pre><p><small>The script prompts for the key and then prints the model response.</small></p></div><ul><li><a href="https://console.groq.com/docs/quickstart">Groq Python SDK quickstart</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="Lines connect a compact computer to a browser, calendar, and chat window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Input and generated output share the 8K-token-per-minute limit. Start with one function rather than a long file.</figcaption></figure><section><h2>Read the response text and finish status together</h2><p>A successful response places the code-review text in `choices[0].message.content`; `finish_reason=stop` means the model completed its reply. The output is model-generated text, so read it against the actual input and function behavior before applying a change.</p><p>`finish_reason=length` means the configured generation-token limit was reached. GPT-OSS also spends the response budget on reasoning, so if the final text is empty, shorten the request or raise `max_completion_tokens` and try again. Keep the 8K TPM limit in mind and size the output cap for the answer you need.</p><ul><li><a href="https://console.groq.com/docs/reasoning">GPT-OSS reasoning options and token settings</a></li></ul></section><section><h2>Distinguish authentication, model, and limit errors</h2><p>For a `401`, re-enter the key and check in API Keys that it is still active. If a `400` reports a model error, compare the exact spelling `openai/gpt-oss-20b` with the [current supported-model list](https://console.groq.com/docs/models).</p><p>A `429` means the request or token limit per minute or per day has been reached. Check the `retry-after`, `x-ratelimit-remaining-requests`, and `x-ratelimit-remaining-tokens` headers, then wait before retrying or reduce input and output length. The [Rate Limits documentation](https://console.groq.com/docs/rate-limits) and Console Limits page show the limit names and current remaining amounts.</p></section><section><h2>Choose where the request belongs</h2><p>Groq says customer inputs and outputs from ordinary inference requests are not retained by default. It may temporarily log them for up to 30 days when needed for reliability work or abuse investigations, and it collects usage metadata separately. Zero Data Retention can be configured in Data Controls; the [Groq data guide](https://console.groq.com/docs/your-data) explains how this affects features that require storage.</p><p>For sensitive company code or customer information, check your organization's transfer and processing rules first and send only the relevant excerpt. If you need to process data on your own computer without an internet connection, download the open weights and use a local runtime; to try a hosted API without handling model files, use GroqCloud. Compare other providers in the [free open-weight AI services guide](/guides/free-open-weight-ai-services-guide).</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A user looks at progress indicators and a document-processing window on a desktop computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Reading the response body and finish status together shows whether a request completed.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>GroqCloud hosts open-weight models and returns responses through an API. This guide covers a Python request to GPT-OSS 20B, the published free limits, secure key entry, response endings, and data-retention conditions.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>GPT-OSS 20B and 120B are available as Apache 2.0 open-weight models that you can also run on your own computer. The GroqCloud API uses the model IDs `openai/gpt-oss-20b` and `openai/gpt-oss-120b` for hosted inference. See [OpenAI's open-weight model overview](https://help.openai.com/en/articles/11870455-openai-open-weight-models) and the [GPT-OSS 20B model card](https://huggingface.co/openai/gpt-oss-20b).</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Try NVIDIA Nemotron's Free API: Send a First Request to the Developer Endpoint</title><link>https://localai.co.kr/en/guides/nvidia-api-catalog-free-nemotron-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nvidia-api-catalog-free-nemotron-guide</guid><description>Call NVIDIA API Catalog’s free Nemotron endpoint for development and testing. Prepare an API key, send a Python request, inspect the response, and review the access and input-data terms.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Try NVIDIA Nemotron's Free API: Send a First Request to the Developer Endpoint</h1><p>Send a short Python request to the free development endpoint and inspect the response.</p><p id="guide-page-summary">Choose a hosted model in NVIDIA API Catalog, then send a question from Python with its model ID and an API key to receive an answer.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The current catalog lists Nemotron 3.5 Lightning as both a Free Endpoint and Download Available.</li><li>Check the hosted API trial terms separately from the OpenMDW license for downloaded weights.</li></ol></section><section><h2>Send a text request and the hosted model returns an answer</h2><p>NVIDIA API Catalog is a developer service for trying models hosted on NVIDIA servers through an API. Browse models and examples in the catalog, then send a question from Python using an API key and model ID. Here, we'll ask Nemotron 3.5 Lightning a short question and inspect its answer and `finish_reason`.</p><ul><li><a href="https://build.nvidia.com/nvidia/nemotron-3.5-lightning-30b-a3b/build">NVIDIA Nemotron API Catalog and code sample</a></li><li><a href="https://localai.co.kr/en/guides/groq-free-open-weight-api-guide">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</a></li><li><a href="https://localai.co.kr/en/guides/mistral-studio-free-api-guide">Start with Mistral Studio’s Free API: Send a Request to Small 4</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-hermes-nemoclaw-comparison-scene-1.webp" alt="A compact computer sits beside a laptop chat and code on a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Python example asks for two points on what a 429 error means and what to try next, then shows the model’s answer in the terminal.</figcaption></figure><section><h2>Check the free endpoint and model terms</h2><p>The current catalog page for `nvidia/nemotron-3.5-lightning-30b-a3b` lists both Free Endpoint and Download Available. Use `nvidia/nemotron-3.5-lightning-30b-a3b` as the hosted API model ID; the public weights are also available on Hugging Face. The API Trial Terms govern use of the hosted endpoint, while OpenMDW License 1.1 applies to the model materials.</p><p>Nemotron 3.5 Lightning is a text model with 3B active parameters out of 30B total. Its model card explicitly lists English and Japanese among its supported languages, but not Korean. If your task requires Korean output, first check quality with a short, non-sensitive prompt.</p><ul><li><a href="https://build.nvidia.com/nvidia/nemotron-3.5-lightning-30b-a3b/modelcard">Nemotron 3.5 Lightning model card</a></li><li><a href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4">Public NVFP4 weights and OpenMDW license</a></li></ul></section><section><h2>Prepare the API key and Python environment</h2><p>Create a key with `Generate API Key` on the catalog’s `Build` screen and store it in a password manager. This API processes input on NVIDIA servers. NVIDIA’s API Trial Terms say inputs and outputs may be used to provide and improve the service, and restrict confidential, sensitive, personal, health, and payment information. Use only a short, non-sensitive prompt in this example.</p><p>In a macOS or Linux shell, create a Python virtual environment and install the OpenAI-compatible SDK. In the next step, save `quickstart.py` and run it from the same terminal.</p><div><p><strong>Prepare a virtual environment and the OpenAI SDK</strong></p><pre><code data-guide-code-block="2-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip openai</code></pre><p><small>Install the SDK in this environment, then run the Python file below.</small></p></div></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-1.webp" alt="A robot uses a laptop while keys for documents and network access hang in an open cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before sending a request, check which service and permissions the API key belongs to.</figcaption></figure><section><h2>Send a short request and read its completion status</h2><p>`quickstart.py` reads the key at runtime without echoing it. It sets the catalog endpoint and model ID, then asks the model for two points explaining what a 429 error means and what to try next. The code prints the model's answer and `finish_reason`. `max_tokens` caps generation tokens, while `reasoning_budget` limits the tokens allocated to reasoning.</p><div><p><strong>Send a Python request to the Nemotron endpoint</strong></p><pre><code data-guide-code-block="3-0"># quickstart.py
from getpass import getpass
from openai import OpenAI

client = OpenAI(
    base_url="https://integrate.api.nvidia.com/v1",
    api_key=getpass("NVIDIA API key: "),
)

response = client.chat.completions.create(
    model="nvidia/nemotron-3.5-lightning-30b-a3b",
    messages=[{"role": "user", "content": "In two short bullets, explain what a 429 API error means and what to try next."}],
    max_tokens=8192,
    extra_body={"chat_template_kwargs": {"enable_thinking": True}, "reasoning_budget": 4096},
)

choice = response.choices[0]
if choice.message.content:
    print(choice.message.content)
else:
    print(f"No final text returned; finish_reason={choice.finish_reason}")
print(f"finish_reason={choice.finish_reason}")</code></pre><p><small>Run `python quickstart.py` to print the model’s explanation and `finish_reason` in the terminal.</small></p></div><div><p><strong>Run the example</strong></p><pre><code data-guide-code-block="3-1">python quickstart.py</code></pre><p><small>Check the response text and completion status together.</small></p></div></section><section><h2>Check key errors and the permitted use</h2><p>On success, `choice.message.content` contains the model’s answer and `finish_reason` shows how generation ended. For `401`, recheck the key in the catalog. For `429`, wait and retry with more space between requests. Check the model page for current Free Endpoint status and account availability.</p><p>The Developer Program API endpoint is for development, testing, and evaluation. Public documentation does not specify monthly credits or a guaranteed request count; a service for real end users needs a separate production route.</p><ul><li><a href="https://docs.api.nvidia.com/nim/docs/product">NVIDIA Developer Program and NIM API access terms</a></li><li><a href="https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf">NVIDIA API Trial Terms</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-03.webp" alt="A desk monitor displays a conversation panel beside a code editor." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If no answer text appears in the terminal, check `finish_reason` first.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Choose a hosted model in NVIDIA API Catalog, then send a question from Python with its model ID and an API key to receive an answer.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Start with Mistral Studio’s Free API: Send a Request to Small 4</title><link>https://localai.co.kr/en/guides/mistral-studio-free-api-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mistral-studio-free-api-guide</guid><description>Try the Small 4 API for a published open-weight model through Mistral Studio Free mode. Create a key, call the Python SDK, review usage limits, and find the input-data training setting.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Start with Mistral Studio’s Free API: Send a Request to Small 4</h1><p>Send a text request to `mistral-small-2603` through Mistral Studio Free mode.</p><p id="guide-page-summary">Mistral Studio Free mode provides a development API. This guide asks Small 4 to summarize a notice and reads the answer in the terminal.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Free mode is enabled by default, and API access and key creation can start without a card.</li><li>Free-mode inputs and outputs may be used for training. Set the Studio/API opt-out in Admin’s Privacy menu.</li></ol></section><section><h2>Free mode is a limited API route for development</h2><p>The Mistral Studio API accepts messages and a model ID over HTTPS, then returns a response from a hosted model. Free mode is enabled by default for new accounts, and you can start issuing API keys and making calls without a card. This route is for evaluation and prototyping, with usage limits.</p><p>API limits cover requests per second, tokens per minute, and tokens per month. Values vary by model and organization, so check the current limits in Mistral Admin’s `Limits` page.</p><ul><li><a href="https://docs.mistral.ai/getting-started/quickstarts/studio/activate-and-generate-api-key">Create a Studio API key in Free mode</a></li><li><a href="https://help.mistral.ai/en/articles/698531-why-am-i-hitting-api-rate-limits-and-how-do-i-increase-them">Mistral API limits and Free mode caps</a></li><li><a href="https://localai.co.kr/en/guides/groq-free-open-weight-api-guide">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</a></li><li><a href="https://localai.co.kr/en/guides/nvidia-api-catalog-free-nemotron-guide">Try NVIDIA Nemotron's Free API: Send a First Request to the Developer Endpoint</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A compact computer connects to a browser, file box, calendar, and chat window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Send a public notice to the model and read its completed summary in the terminal.</figcaption></figure><section><h2>Check Small 4’s API model ID</h2><p>Mistral Small 4 handles instruction following, reasoning and coding in one model. Its weights are released under Apache 2.0, and its API model ID is `mistral-small-2603`. Check whether this ID is available in Free mode in Playground and Admin, then review current limits in Admin’s `Limits` page. The example asks for a summary of a public notice.</p><ul><li><a href="https://docs.mistral.ai/models/mistral-small-4-0-26-03">Mistral Small 4 API ID and model details</a></li><li><a href="https://huggingface.co/mistralai/Mistral-Small-4-119B-2603">Published weights and Apache 2.0 model card</a></li></ul></section><section><h2>Review input-data settings before creating a key</h2><p>In Free mode, API inputs and responses may be used to train Mistral models. To opt out, disable the `Anonymous improvement data` toggle under `Privacy` in Mistral Admin. Use short, non-sensitive text for the example.</p><p>In a macOS or Linux shell, check with `python3 --version` that Python 3.10 or later is installed. Issue an API key in Studio’s `API Keys` menu and store it securely, then create a virtual environment and install the official `mistralai` SDK.</p><div><p><strong>Install the virtual environment and Mistral SDK</strong></p><pre><code data-guide-code-block="2-0">python3 --version
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip mistralai</code></pre><p><small>Run the Python file below from this same virtual environment.</small></p></div><ul><li><a href="https://help.mistral.ai/en/articles/347617-do-you-use-my-user-data-to-train-our-artificial-intelligence-models">Input and output data policy in Free mode</a></li><li><a href="https://help.mistral.ai/en/articles/455207-can-i-opt-out-of-my-input-or-output-data-being-used-for-training">How to opt out of Mistral Studio/API training use</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A person checks progress indicators and an organized stack of documents on a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A successful response confirms that the SDK setup and model selection work together.</figcaption></figure><section><h2>Ask Small 4 to summarize a short notice</h2><p>Save the following as `quickstart.py`. `getpass` reads the key without displaying it. The script asks the model to summarize a public notice in two points, then prints the completed summary and `finish_reason` in the terminal.</p><div><p><strong>Send a summary request to Small 4</strong></p><pre><code data-guide-code-block="3-0"># quickstart.py
from getpass import getpass
from mistralai.client import Mistral

client = Mistral(api_key=getpass("Mistral API key: "))
response = client.chat.complete(
    model="mistral-small-2603",
    messages=[
        {
            "role": "user",
            "content": (
                "Summarize this notice in two bullet points: "
                "The library closes at 5 p.m. on Friday and reopens Monday at 9 a.m."
            ),
        }
    ],
    max_tokens=512,
)

choice = response.choices[0]
print(choice.message.content or "(No response text returned)")
print(f"finish_reason={choice.finish_reason}")</code></pre><p><small>Run `python quickstart.py` to print the summary and response completion status.</small></p></div><div><p><strong>Run the request file</strong></p><pre><code data-guide-code-block="3-1">python quickstart.py</code></pre><p><small>The summary and `finish_reason` appear in the terminal.</small></p></div></section><section><h2>Check the First Response and Common Startup Errors</h2><p>On success, the two-item summary appears in `choice.message.content`, and `finish_reason` shows the completion status. For `401`, recheck the Studio API key. For `402`, first check that the account is in Free mode and that the selected model is currently available for free development access in Playground and Admin. To stay on the free route, verify the model and plan before adding payment details.</p><p>A `429` appears when request frequency or token limits are reached. Check requests per second, tokens per minute, and monthly tokens in Admin’s `Limits` page; then space out requests or shorten the input. Free mode is a starting point for small evaluations and is suited to checking SDK connectivity and response format within the displayed limits.</p><ul><li><a href="https://docs.mistral.ai/getting-started/quickstarts/developer/first-api-request">Mistral API error codes and first-request guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="A robot inside a clear enclosure sits beside a router, storage box, and documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When managing an API key, review its access scope and the input-data settings too.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Mistral Studio Free mode provides a development API. This guide asks Small 4 to summarize a notice and reads the answer in the terminal.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Mistral Small 4 handles instruction following, reasoning and coding in one model. Its weights are released under Apache 2.0, and its API model ID is `mistral-small-2603`. Check whether this ID is available in Free mode in Playground and Admin, then review current limits in Admin’s `Limits` page. The example asks for a summary of a public notice.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Make your first image locally with FLUX.3 Klein</title><link>https://localai.co.kr/en/guides/flux3-klein-first-image-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flux3-klein-first-image-guide</guid><description>Set up the FLUX.3 Klein distilled INT8 model in ComfyUI and save your first PNG.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Make your first image locally with FLUX.3 Klein</h1><p>Match the model with its two required components and save a 1024×1024 image.</p><p id="guide-page-summary">Run FLUX.3 Image Klein with ComfyUI’s distilled INT8 template. Put the weights, text encoder, and VAE in their specified folders, generate one image, and find the PNG in `ComfyUI/output/`.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Use ComfyUI 0.41.0 or later with the distilled INT8 files.</li><li>Place the model, text encoder, and VAE in their respective folders.</li><li>The expected result is a PNG saved in `ComfyUI/output/`.</li></ol></section><section><h2>Prepare ComfyUI and an NVIDIA GPU</h2><p>FLUX.3 Image Klein is an image model that takes a prompt or reference images and creates a new image. Load it in ComfyUI and press Queue to save a PNG. This path uses the distilled INT8 text-to-image template in ComfyUI on an NVIDIA GPU to make one 1024×1024 image.</p><p>ComfyUI 0.41.0 or later supports the template. Update ComfyUI, then choose `Flux.3 Image Klein Distilled: Text to Image` from `Workflow Templates`. This first run uses ComfyUI’s standard loaders and does not require custom nodes. [ComfyUI’s FLUX.3 Klein guide](https://docs.comfy.org/tutorials/flux/flux-3-klein)</p><ul><li><a href="https://docs.comfy.org/tutorials/flux/flux-3-klein">Official ComfyUI template and setup guide</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-8gb-speed-guide">Does FLUX.3 Klein run in 8 GB? 5090, 5070 and Spark generation times</a></li><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/flux3-klein-first-image-workspace-20261016.webp" alt="A desk with a monitor displaying a blue jug and two lemons, beside a compact PC and a sketchbook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the PC and GPU that will run ComfyUI before downloading.</figcaption></figure><section><h2>Place the four distilled INT8 files in the correct folders</h2><p>The weights repository, `black-forest-labs/flux-3-image-klein-comfy`, has gated file access. Review and accept its terms on Hugging Face, then download the four files below from `Files and versions`. Put the weights, text encoder, and VAE in the folders ComfyUI scans. [ComfyUI model files](https://docs.comfy.org/tutorials/flux/flux-3-klein#flux3-image-klein-model-downloads)</p><p>The upsampler is a separate Qwen3.5 9B model that expands short requests into scene descriptions. The template can enable it by default, which uses additional memory. If a model does not appear in the selector, check that it is in the `models` folder used by this ComfyUI instance, then restart the app. [FLUX.3 Klein model card](https://huggingface.co/black-forest-labs/flux-3-image-klein)</p><table><caption>Distilled INT8 files scanned by ComfyUI</caption><thead><tr><th scope="col">File</th><th scope="col">ComfyUI folder</th><th scope="col">Purpose</th></tr></thead><tbody><tr><th scope="row">`flux3_image_klein_sd_int8_convrot.safetensors`</th><td>`models/diffusion_models/`</td><td>Model for 4–16-step generation</td></tr><tr><th scope="row">`qwen3vl_4b_int8_convrot.safetensors`</th><td>`models/text_encoders/`</td><td>Text encoder</td></tr><tr><th scope="row">`qwen3.5_9b_flux3_prompt_upsampler_int8_convrot.safetensors`</th><td>`models/text_encoders/`</td><td>Optional upsampler</td></tr><tr><th scope="row">`flux2-vae.safetensors`</th><td>`models/vae/`</td><td>VAE</td></tr></tbody></table><ul><li><a href="https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy">Weights repository and access terms</a></li></ul></section><section><h2>Save one PNG from the template</h2><p>Keep the square 1024×1024 size, batch 1, and 15 steps, then enter a prompt. Batch 1 creates one image at a time. A short prompt is fine when the upsampler is enabled. If you turn it off to save memory, include subject, setting, composition, and lighting in a full caption, such as “Still-life photo of a small teacup on a window-side table on a rainy evening, warm indoor light, soft raindrops blurred in the background.” ComfyUI’s distilled template defaults to 15 steps and supports 4–16.</p><p>Press Queue to start. When processing finishes, `SaveImage` writes the PNG to `ComfyUI/output/`. Open the file from that folder to confirm it was saved; a preview alone does not confirm the output file. The first run can include model loading. Record loading and generation separately when comparing time. [ComfyUI text-to-image workflow](https://docs.comfy.org/tutorials/flux/flux-3-klein#flux-3-image-klein-distilled-text-to-image)</p><ul><li><a href="https://docs.comfy.org/tutorials/flux/flux-3-klein#flux-3-image-klein-distilled-text-to-image">ComfyUI distilled text-to-image steps</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-three-components.webp" alt="A workbench with three differently sized block boxes in front of a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prepare the image model, text encoder, and VAE together.</figcaption></figure><section><h2>Check files and memory at the failing step</h2><p>If a node turns red or cannot find a model, verify the file is in the correct ComfyUI folder and restart the app. The distilled file belongs in `diffusion_models`, with the text encoder and VAE in their specified folders. A similarly named base variant does not match the distilled template.</p><p>If a VRAM error occurs while loading the upsampler, turn off `enable_prompt_upsampler` to skip the separate Qwen3.5 9B model. Write the subject, setting, composition, and lighting directly in the prompt. If the error occurs during generation, keep batch 1 and 1024×1024, close other GPU jobs, and verify that you selected the INT8 distilled files. Changing several settings at once makes the cause harder to identify.</p><p>If the composition is wrong, add the subject’s position or camera viewpoint to the prompt. The model may render small text incorrectly, so add poster copy or product labels in an image editor. To edit an existing photo, open ComfyUI’s Image Edit template, load the photo with `LoadImage`, and describe the intended result. [ComfyUI image-edit template](https://docs.comfy.org/tutorials/flux/flux-3-klein#flux-3-image-klein-image-edit)</p><ul><li><a href="https://docs.comfy.org/tutorials/flux/flux-3-klein">Official ComfyUI workflow troubleshooting</a></li></ul></section><section><h2>Read generation time and license terms in context</h2><p>BFL and NVIDIA report RTX GPU generation times at 1024×1024, distilled 16 steps, and one image per run: about 4 seconds on an RTX 5090 and under 9 seconds on an RTX 4070. ComfyUI’s template defaults to 15 steps, so it is a different setting. BFL reports API response time separately, including queueing and network time. Record your own generation time with the same prompt and settings before comparing. [BFL measurement conditions](https://bfl.ai/blog/flux-3-image-klein)</p><p>The weights use the FLUX Kommunity License. Qualifying users with under US$5 million in annual revenue, including affiliates, may use outputs commercially subject to the terms; other commercial use and commercial fine-tuning require a separate license. Read the restrictions in the [license](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/blob/main/LICENSE.md) before publishing or selling.</p><ul><li><a href="https://bfl.ai/blog/flux-3-image-klein">BFL GPU generation times</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-resolution-batch.webp" alt="Several outputs of the same landscape at different resolutions and sizes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After saving the first PNG, change resolution or steps one at a time.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?model=flux-3-image-klein&amp;hardware=nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Run FLUX.3 Image Klein with ComfyUI’s distilled INT8 template. Put the weights, text encoder, and VAE in their specified folders, generate one image, and find the PNG in `ComfyUI/output/`.</dd></div><div><dt>How much memory does it need?</dt><dd>The upsampler is a separate Qwen3.5 9B model that expands short requests into scene descriptions. The template can enable it by default, which uses additional memory. If a model does not appear in the selector, check that it is in the `models` folder used by this ComfyUI instance, then restart the app. [FLUX.3 Klein model card](https://huggingface.co/black-forest-labs/flux-3-image-klein)</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The upsampler is a separate Qwen3.5 9B model that expands short requests into scene descriptions. The template can enable it by default, which uses additional memory. If a model does not appear in the selector, check that it is in the `models` folder used by this ComfyUI instance, then restart the app. [FLUX.3 Klein model card](https://huggingface.co/black-forest-labs/flux-3-image-klein)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Does FLUX.3 Klein run in 8 GB? 5090, 5070 and Spark generation times</title><link>https://localai.co.kr/en/guides/flux3-klein-8gb-speed-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flux3-klein-8gb-speed-guide</guid><description>Compare memory and generation time across INT8, resolution, and step settings.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Does FLUX.3 Klein run in 8 GB? 5090, 5070 and Spark generation times</h1><p>The 8 GB support statement applies to the INT8 generation path.</p><p id="guide-page-summary">BFL says INT8 FLUX.3 Klein can run on RTX GPUs with 8 GB VRAM. The prompt upsampler is a separate model and uses more memory. Compare published GPU generation time separately from your full local workflow.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 8 GB support statement is specific to the INT8 path.</li><li>BFL’s ~4 s and under-9 s figures are GPU generation times at 16 steps.</li><li>Account separately for the upsampler and API request latency.</li></ol></section><section><h2>First pin down settings for 8 GB</h2><p>FLUX.3 Image Klein is a 5.6B-parameter model that creates images from text or reference images. BFL says its INT8 build runs on GeForce RTX GPUs starting at 8 GB VRAM through ComfyUI or Diffusers. On an 8 GB PC, start with the INT8 distilled checkpoint, 1024×1024, and batch 1. Do not apply this figure to BF16 or other quantized formats. [BFL model announcement](https://bfl.ai/blog/flux-3-image-klein)</p><p>ComfyUI’s distilled template defaults to 15 steps and allows 4–16. BFL’s RTX comparison uses 16 steps, so note the step-count difference when comparing it with an unchanged template run. Record both memory and time whenever you change resolution, steps, or batch size.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-first-image-guide">Make your first image locally with FLUX.3 Klein</a></li><li><a href="https://localai.co.kr/en/guides/comfyui-first-workflow-before-gpu-upgrade">Before buying a GPU for ComfyUI, decide on one image you need to make</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/flux3-klein-compact-gpu-workspace-20261016.webp" alt="A monitor beside a PC with a visible dual-fan GPU displays a small image of a blue jug and lemons." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate the main model from additional models loaded into GPU memory.</figcaption></figure><section><h2>Account for the upsampler’s additional memory</h2><p>The ComfyUI text-to-image template can use `enable_prompt_upsampler` to expand a short request into a detailed scene description. If a VRAM error appears while loading the separate Qwen3.5 9B upsampler, turn off that setting and write the subject, setting, composition, and lighting directly in the prompt. [ComfyUI template guide](https://docs.comfy.org/tutorials/flux/flux-3-klein)</p></section><section><h2>Separate published GPU time from end-to-end time</h2><p>BFL and NVIDIA’s GPU generation comparison uses distilled, 16 steps, and one image per run. The table separates text-to-image results at 1024×1024 and 2048×2048. ComfyUI defaults to 15 steps, so its unchanged template is not the same setup; API latency is a separate metric. [Published BFL results](https://bfl.ai/blog/flux-3-image-klein)</p><table><caption>BFL and NVIDIA FLUX.3 Klein distilled text-to-image generation times</caption><thead><tr><th scope="col">GPU and implementation</th><th scope="col">1024×1024</th><th scope="col">2048×2048</th></tr></thead><tbody><tr><th scope="row">RTX PRO 6000 · INT8 · ComfyUI</th><td>3.9 s</td><td>12.1 s</td></tr><tr><th scope="row">RTX 5090 · INT8 · ComfyUI</th><td>4.1 s</td><td>15.0 s</td></tr><tr><th scope="row">DGX Spark · NVFP4</th><td>7.3 s</td><td>43.9 s</td></tr><tr><th scope="row">RTX 5070 · INT8 · ComfyUI</th><td>7.7 s</td><td>44.4 s</td></tr><tr><th scope="row">RTX 4070 · INT8 · ComfyUI</th><td>8.9 s</td><td>50.4 s</td></tr></tbody></table><p>For your own comparison, record the first generation after loading the model separately from later runs. Keep the prompt, resolution, steps, batch, and upsampler setting with the result so different conditions are not mixed. If no image is generated, identify the failing stage and first ComfyUI log error before comparing speed.</p></section><figure><img src="https://localai.co.kr/guides/local-image-resolution-batch.webp" alt="Several outputs of the same landscape at different resolutions and sizes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Increasing resolution also increases the number of image pixels to generate.</figcaption></figure><section><h2>Choose an order for testing on 8 GB</h2><p>First save a batch-1 image with the INT8 distilled model. Then compare runs with the prompt upsampler on and off, and increase resolution only if needed. Record whether a PNG was saved, generation time, and the node where a VRAM error occurred. Also note whether you must close other apps for each run to understand available memory headroom.</p></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-timing-bench.webp" alt="A work note comparing image generation times beside scene drafts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record generation time at the same step count and workload.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?model=flux-3-image-klein&amp;hardware=nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>BFL says INT8 FLUX.3 Klein can run on RTX GPUs with 8 GB VRAM. The prompt upsampler is a separate model and uses more memory. Compare published GPU generation time separately from your full local workflow.</dd></div><div><dt>How much memory does it need?</dt><dd>FLUX.3 Image Klein is a 5.6B-parameter model that creates images from text or reference images. BFL says its INT8 build runs on GeForce RTX GPUs starting at 8 GB VRAM through ComfyUI or Diffusers. On an 8 GB PC, start with the INT8 distilled checkpoint, 1024×1024, and batch 1. Do not apply this figure to BF16 or other quantized formats. [BFL model announcement](https://bfl.ai/blog/flux-3-image-klein)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Edit reference photos and guide layout with FLUX.3 Klein</title><link>https://localai.co.kr/en/guides/flux3-klein-reference-editing-layout</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flux3-klein-reference-editing-layout</guid><description>Use ComfyUI Image Edit, multiple references, and bounding boxes to guide edits and placement.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Edit reference photos and guide layout with FLUX.3 Klein</h1><p>Separate what changes from what stays using the prompt and reference images.</p><p id="guide-page-summary">Use the original photo and edit instructions with FLUX.3 Klein Image Edit in ComfyUI to create an image. This guide explains how to direct composition with reference images and bounding boxes, then review the result.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Image Edit takes a photo and an editing instruction.</li><li>You can use up to 10 reference images.</li><li>Bounding boxes guide an element’s approximate placement and size.</li></ol></section><section><h2>Choose the photo and the details to preserve</h2><p>FLUX.3 Image Klein uses the same model family for text-to-image and image editing. Load a source photo and an instruction into ComfyUI’s Image Edit template to create a new image reflecting the request. For a product photo, decide whether to change only the color or also the background and lighting, then identify details such as the logo and product outline that must remain. [ComfyUI Image Edit guide](https://docs.comfy.org/tutorials/flux/flux-3-klein#flux-3-image-klein-image-edit)</p><ul><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-first-image-guide">Make your first image locally with FLUX.3 Klein</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/flux3-klein-reference-prints-20261016.webp" alt="Two framed prints of a blue jug and two lemons against different backgrounds stand side by side on a desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Decide which parts of the source photo to keep and what to change.</figcaption></figure><section><h2>Connect the photo and describe the finished scene</h2><p>In ComfyUI, open the `Flux.3 Image Klein Distilled: Image Edit` template and load the photo with `LoadImage`. Connect it to `Set Reference Multi Latent`, then describe the desired scene in the positive prompt. For example: “a product photo that keeps the green glass bottle and its position on the table, while changing the background to a bright stone kitchen in morning light.” Name both what should stay and what should change.</p><p>The template resizes reference images to about one megapixel. Keeping a larger source may preserve more detail for editing, but can also use more memory. [ComfyUI reference image guide](https://docs.comfy.org/tutorials/flux/flux-3-klein)</p></section><section><h2>Label the order when using multiple references</h2><p>FLUX.3 Klein accepts up to 10 reference images. Connect them in order to `Set Reference Multi Latent` in ComfyUI, then refer to each by index in the prompt, such as `&lt;ref_image_0&gt;` and `&lt;ref_image_1&gt;`. For example, ask it to use the first photo for the product shape and the second for the background colors.</p><p>Reference images guide the product shape and background. A logo or product outline may still change, so compare the saved result with the original. [BFL model card](https://huggingface.co/black-forest-labs/flux-3-image-klein)</p></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-reference-edit.webp" alt="Two images of the same vase against different backgrounds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare whether the background changes while the same product remains.</figcaption></figure><section><h2>Guide composition with boxes and inspect the result</h2><p>To place several elements, define regions with the template’s `Create Bounding Boxes` node and inspect them in `Preview Any`. The model-card format is `[top, left, bottom, right]` on a 0–1000 scale. For example, `[100, 100, 300, 500]` marks the top 10–30% and left 10–50% of the canvas. Boxes guide position and scale; they do not constrain pixels to a hard mask, so an element or nearby content may change outside the region. [BFL bounding-box guide](https://docs.bfl.ai/guides/flux-3-image-klein#bounding-boxes)</p></section><section><h2>Compare with the source and add final copy yourself</h2><p>Save the output PNG with `SaveImage`, then place it beside the original at the same size. Compare the product outline, logo, shadows, and background. If you intended to change just one element, inspect the areas that should remain untouched. Small text may be distorted, so add poster titles or product labels in a design tool and proofread them. Change one condition, such as the background or lighting, at a time to see how the output responds.</p></section><figure><img src="https://localai.co.kr/guides/local-image-poster-text.webp" alt="A poster design with a title and copy placed over a background image" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Add exact titles and copy in a design tool after generation.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?model=flux-3-image-klein&amp;hardware=nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Use the original photo and edit instructions with FLUX.3 Klein Image Edit in ComfyUI to create an image. This guide explains how to direct composition with reference images and bounding boxes, then review the result.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Reference images guide the product shape and background. A logo or product outline may still change, so compare the saved result with the original. [BFL model card](https://huggingface.co/black-forest-labs/flux-3-image-klein)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate an image locally with Z-Image-Turbo</title><link>https://localai.co.kr/en/guides/z-image-turbo-local-image-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/z-image-turbo-local-image-guide</guid><description>Set up the official Diffusers path and save a 1024×1024 image.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Generate an image locally with Z-Image-Turbo</h1><p>The 9-step setting runs 8 model forwards; keep guidance at 0.</p><p id="guide-page-summary">Z-Image-Turbo is a 6B image-generation model distilled for eight model evaluations. The official Diffusers example generates at 1024×1024 with `num_inference_steps=9` and `guidance_scale=0.0`, then saves `example.png`.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Turbo is distilled for 8 NFEs.</li><li>The official example uses 1024×1024, 9 steps, and guidance 0.</li><li>The official card highlights English and Chinese text rendering; proofread generated copy.</li></ol></section><section><h2>What does Z-Image-Turbo produce?</h2><p>Z-Image-Turbo is a 6B-parameter model that generates images from text. It is a Turbo variant distilled from the Z-Image foundation model for eight NFEs (number of function evaluations), and the official example does not use additional guidance. The same family includes Z-Image, a 50-step generation model, and Z-Image-Edit for editing, so distinguish Turbo from those variants when selecting files. [Official Z-Image repository](https://github.com/Tongyi-MAI/Z-Image)</p><ul><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-21-turbo-local-guide">Qwen-Image-2.1-Turbo: How Do You Generate and Edit Images in 8 Steps?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-jobs.webp" alt="A desk where image work is planned in front of a laptop and monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the target resolution and output before preparing the runtime.</figcaption></figure><section><h2>Match the GPU and Python environment before running</h2><p>The official model card says it fits within 16 GB VRAM on consumer GPUs and separately reports sub-second inference on an H800. Do not read the H800 result as timing for a consumer RTX card; first install a PyTorch and CUDA combination supported by your GPU. This path shows the Diffusers pipeline on a CUDA GPU. [Hugging Face model card](https://huggingface.co/Tongyi-MAI/Z-Image-Turbo)</p><p>The repository specifies a Diffusers installation for its latest features. Activate a virtual environment, install Diffusers from the official source command, then install `transformers` and `accelerate`. If PyTorch is not installed, choose its CUDA package to match your GPU and driver first. [Diffusers installation guide](https://huggingface.co/docs/diffusers/installation)</p><div><p><strong>Set up Diffusers in the virtual environment</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
# Install the CUDA-enabled PyTorch command that matches your driver: https://pytorch.org/get-started/locally/
python -m pip install git+https://github.com/huggingface/diffusers.git
python -m pip install transformers accelerate</code></pre></div></section><section><h2>Save the first image with the official pipeline</h2><p>The official model-card example loads `Tongyi-MAI/Z-Image-Turbo` with `ZImagePipeline`. Save the Python code below as `generate.py` and run `python generate.py`; it writes `example.png` to the current working directory. Settings are 1024×1024, `num_inference_steps=9`, `guidance_scale=0.0`, and CUDA seed 42. The official repository explains that this setting performs eight DiT forwards. [Official quick start](https://github.com/Tongyi-MAI/Z-Image#quick-start)</p><div><p><strong>Generate one 1024×1024 image</strong></p><pre><code data-guide-code-block="2-0">import torch
from diffusers import ZImagePipeline

pipe = ZImagePipeline.from_pretrained(
    "Tongyi-MAI/Z-Image-Turbo",
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=False,
)
pipe.to("cuda")

prompt = "A ceramic teacup on a wooden table beside a rain-streaked window, soft morning light, still-life photograph."
image = pipe(
    prompt=prompt,
    height=1024,
    width=1024,
    num_inference_steps=9,
    guidance_scale=0.0,
    generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("example.png")</code></pre></div></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-three-components.webp" alt="A workbench with three differently sized block boxes in front of a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the model files with the required libraries.</figcaption></figure><section><h2>Check the output file and prompt</h2><p>When the command finishes, open `example.png` in the working directory and confirm that it is 1024×1024 and contains the cup and window scene. The first run includes model download and loading. Keep the same prompt and resolution when comparing later runs. Seed 42 aids reproducibility, but different libraries or hardware may not produce identical pixels.</p><p>Even when the image looks right, check the English or Chinese text separately. The model card highlights rendering in these languages, but zoom into the PNG and proofread spelling and line breaks before using event or product copy. If you run out of system or GPU memory, check the pipeline’s CPU-offload option and change one optimization at a time. [Official hardware notes](https://github.com/Tongyi-MAI/Z-Image#quick-start)</p></section><section><h2>Check license terms and Mac support separately</h2><p>Z-Image-Turbo weights use the Apache-2.0 license. If you plan to include the model in a product or service, check the current repository license and the terms of the application you use. For Diffusers on a Mac, do not run the model-card example’s `cuda` device unchanged; verify MPS support for the version and the memory needs of your hardware. The example in this guide uses CUDA. [Z-Image-Turbo model card](https://huggingface.co/Tongyi-MAI/Z-Image-Turbo)</p><ul><li><a href="https://github.com/Tongyi-MAI/Z-Image">Official model and inference guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-resolution-batch.webp" alt="Several outputs of the same landscape at different resolutions and sizes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After saving the first file, adjust resolution and prompt.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?model=z-image-turbo">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Z-Image-Turbo is a 6B image-generation model distilled for eight model evaluations. The official Diffusers example generates at 1024×1024 with `num_inference_steps=9` and `guidance_scale=0.0`, then saves `example.png`.</dd></div><div><dt>How much memory does it need?</dt><dd>The official model card says it fits within 16 GB VRAM on consumer GPUs and separately reports sub-second inference on an H800. Do not read the H800 result as timing for a consumer RTX card; first install a PyTorch and CUDA combination supported by your GPU. This path shows the Diffusers pipeline on a CUDA GPU. [Hugging Face model card](https://huggingface.co/Tongyi-MAI/Z-Image-Turbo)</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The official model card says it fits within 16 GB VRAM on consumer GPUs and separately reports sub-second inference on an H800. Do not read the H800 result as timing for a consumer RTX card; first install a PyTorch and CUDA combination supported by your GPU. This path shows the Diffusers pipeline on a CUDA GPU. [Hugging Face model card](https://huggingface.co/Tongyi-MAI/Z-Image-Turbo)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Install LTX-2.5 locally and generate your first video</title><link>https://localai.co.kr/en/guides/ltx-2-5-local-install-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ltx-2-5-local-install-guide</guid><description>Use the official Python pipeline and 66 GiB of model files to save a short video.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Install LTX-2.5 locally and generate your first video</h1><p>Start with the 22B distilled checkpoint and the 121-frame command.</p><p id="guide-page-summary">LTX-2.5 is an open-weight model that generates video with synchronized audio from a prompt. The official LTX-2 repository provides commands to install its Python pipeline, download roughly 66 GiB of checkpoint files, and save `output.mp4` with the distilled pipeline.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The official setup uses `uv sync --extra natten`.</li><li>Download five core files totaling about 66 GiB and log in to the gated repository.</li><li>The expected output is `output.mp4` in the run directory.</li></ol></section><section><h2>Prepare Python and model storage before installation</h2><p>LTX-2.5 is an open-weight model that generates video from a text prompt along with audio matched to the scene. This guide uses the official LTX-2 Python pipeline, downloads the distilled checkpoint, and saves one 121-frame MP4. [Official repository](https://github.com/Lightricks/LTX-2)</p><p>The official setup uses Python and `uv`, adding the fast `natten` extension only on Linux. Install it using the [official uv instructions](https://docs.astral.sh/uv/getting-started/installation/) and confirm `uv --version` prints a version. On Linux, include `--extra natten` in the repository setup command below; on Windows and macOS, omit it and use the fallback decoder. Model files total about 66 GiB. Accept the LTX-2.5 terms on Hugging Face and log in with a Read token before downloading.</p><div><p><strong>Clone the repository and install dependencies</strong></p><pre><code data-guide-code-block="0-0">uv --version
git clone https://github.com/Lightricks/LTX-2.git
cd LTX-2
# Linux only; omit --extra natten on Windows and macOS
uv sync --extra natten</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A storyboard showing a cyclist on a coastal road across several frames" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Choose frame count and aspect ratio to produce one clip.</figcaption></figure><section><h2>Download the five required checkpoint files</h2><p>Accept the terms for `Lightricks/LTX-2.5` on Hugging Face, then register a Read token with `hf auth login`. The download keeps the repository’s folder structure beneath `--local-dir`, matching the generation command. Reserve at least 66 GiB before downloading, then confirm that each file exists. [Official model download and paths](https://github.com/Lightricks/LTX-2#quick-start)</p><div><p><strong>Download the required files from Hugging Face</strong></p><pre><code data-guide-code-block="1-0">hf auth login
hf download Lightricks/LTX-2.5 \
  diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors \
  text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors \
  vae/ltx-2.5-video-vae-bf16.safetensors \
  vae/ltx-2.5-audio-vae-bf16.safetensors \
  latent_upscale_models/ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors \
  --local-dir models/ltx-2.5</code></pre></div></section><section><h2>Generate your first MP4 with the distilled pipeline</h2><p>Once the five files are saved, run the official `ltx_pipelines.distilled` command. `--num-frames 121` sets the frame count for this request, and `--seed 42` helps make runs easier to compare. Describe the scene, motion, camera, and sound in the prompt. The command does not set a playback frame rate, so this guide does not assign a duration.</p><div><p><strong>Generate the MP4</strong></p><pre><code data-guide-code-block="2-0">uv run python -m ltx_pipelines.distilled \
  --transformer-path models/ltx-2.5/diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors \
  --text-encoder-path models/ltx-2.5/text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors \
  --video-vae-path models/ltx-2.5/vae/ltx-2.5-video-vae-bf16.safetensors \
  --audio-vae-path models/ltx-2.5/vae/ltx-2.5-audio-vae-bf16.safetensors \
  --spatial-upsampler-path models/ltx-2.5/latent_upscale_models/ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors \
  --num-frames 121 \
  --seed 42 \
  --output-path output.mp4 \
  --prompt "A small wooden sailboat glides across a calm lake at sunrise, camera follows from the shore, gentle water sounds and distant birds."</code></pre></div></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plan for the storage and memory used by frames and model files.</figcaption></figure><section><h2>Check the output and the first failure point</h2><p>When the command finishes, open `output.mp4` in the current run directory and confirm that the video plays and has an audio track. If the first run stops, inspect the first traceback in the terminal. For `401` or `403`, check Hugging Face acceptance and token permissions; for a missing-file error, compare the path and name under `models/ltx-2.5/`.</p><p>If GPU memory runs out, append `--quantization fp8-cast` to the generation command and add either `--offload cpu` or `--offload disk`. For example, put a `\` after the final prompt line above and add the option on the next line. CPU or disk offload changes the execution path and runtime. The reported 6.8 seconds for a 10-second 720p clip on 2×GB200 GPUs applies to that server configuration. [LTX-2.5 announcement](https://ltx.io/model/ltx-2-5)</p><ul><li><a href="https://github.com/Lightricks/LTX-2#quick-start">Official LTX-2.5 setup and generation commands</a></li></ul></section><figure><img src="https://localai.co.kr/guides/minimax-h3-audio-video.webp" alt="An editing work surface showing a strip of video scenes with audio waveforms" width="1672" height="941" loading="lazy" decoding="async"><figcaption>LTX-2.5 also generates audio synchronized with the video scene.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?mode=video&amp;model=ltx-2.5-av">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LTX-2.5 is an open-weight model that generates video with synchronized audio from a prompt. The official LTX-2 repository provides commands to install its Python pipeline, download roughly 66 GiB of checkpoint files, and save `output.mp4` with the distilled pipeline.</dd></div><div><dt>How much memory does it need?</dt><dd>If GPU memory runs out, append `--quantization fp8-cast` to the generation command and add either `--offload cpu` or `--offload disk`. For example, put a `\` after the final prompt line above and add the option on the next line. CPU or disk offload changes the execution path and runtime. The reported 6.8 seconds for a 10-second 720p clip on 2×GB200 GPUs applies to that server configuration. [LTX-2.5 announcement](https://ltx.io/model/ltx-2-5)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LTX Retake and Dub-It guide: choose interval editing or dialogue changes</title><link>https://localai.co.kr/en/guides/ltx-retake-dubit-local-video-edit-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ltx-retake-dubit-local-video-edit-guide</guid><description>Separate Retake from Dub-It in LTX’s official pipelines and prepare a focused edit.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">LTX Retake and Dub-It guide: choose interval editing or dialogue changes</h1><p>Retake regenerates a region; Dub-It changes speech and voice.</p><p id="guide-page-summary">Retake regenerates a selected video segment, while Dub-It changes dialogue or voice. This guide distinguishes their inputs and model versions, and explains how to review the results.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Retake selects the interval to regenerate with `--start-time` and `--end-time`.</li><li>Dub-It is a separate voice-editing path that requires the LTX-2.3 checkpoint.</li><li>Afterward, play the clip to check visual continuity and dialogue sync separately.</li></ol></section><section><h2>Decide whether the edit is visual or vocal</h2><p>Use Retake to regenerate the background or motion in one part of a video. For changed dialogue or voice, use the Dub-It path. The two features have different inputs and model versions, so prepare each according to its pipeline. [Lightricks LTX pipeline docs](https://github.com/Lightricks/LTX-2/tree/main/packages/ltx-pipelines)</p><ul><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local video generation: workflows and PC requirements</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A storyboard with several video frames arranged side by side" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Separate the frames to regenerate from the scene to preserve.</figcaption></figure><section><h2>Choose the time interval for Retake</h2><p>Retake edits part of the source video through the pipeline for the installed LTX-2 version. Duplicate the original as a working copy, then use ffprobe to check its frame count and dimensions. The input must have `8k+1` frames, and each dimension must be a multiple of 32. Set the edit range with `--video-path`, `--start-time`, and `--end-time`; the rest of the video remains unchanged.</p><p>Check the installed version's [Retake CLI docs](https://github.com/Lightricks/LTX-2/blob/main/packages/ltx-pipelines/docs/pipelines.md) for whether to regenerate video or audio and for the other required arguments. This guide explains the input conditions and feature differences; follow those docs for installation and checkpoint setup.</p><div><p><strong>Preserve the source and check it with ffprobe</strong></p><pre><code data-guide-code-block="1-0">cp input.mp4 working_copy.mp4
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=width,height,nb_read_frames -of default=noprint_wrappers=1 working_copy.mp4</code></pre></div></section><section><h2>Match Dub-It to its LTX-2.3 requirements</h2><p>The official Dub-It example requires the `Lightricks/LTX-2.3-22b-IC-LoRA-DubIt` LoRA, an LTX-2.3 distilled checkpoint, and the `--reference-video` input. Check the [Dub-It pipeline docs](https://github.com/Lightricks/LTX-2/tree/main/packages/ltx-pipelines) for installation, weights, and all required arguments for your version. Dub-It uses an LTX-2.3 LoRA and checkpoint, so installing LTX-2.5 alone does not prepare it.</p></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review and edit the clip in short sections.</figcaption></figure><section><h2>Play the full video and check its audio</h2><p>For Retake, check whether the people, lighting, and background connect naturally to the surrounding frames at the start and end of the regenerated segment. For Dub-It, listen for lip-sync and whether background audio masks the dialogue. If an error occurs, inspect the first traceback and missing file path, then check that the model, LoRA, and pipeline versions match.</p><p>LTX GPU requirements vary by execution environment and settings. Check the official documentation for the requirements of your model and installation path.</p></section><figure><img src="https://localai.co.kr/guides/wan-animate-2-local-video-guide-scene-3.webp" alt="An editing workflow selecting a section of video to regenerate" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen separately for whether ambience and dialogue fit the video.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?mode=video&amp;model=ltx-2.5-av">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Retake regenerates a selected video segment, while Dub-It changes dialogue or voice. This guide distinguishes their inputs and model versions, and explains how to review the results.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Add sound effects to a video with MMAudio</title><link>https://localai.co.kr/en/guides/mmaudio-video-foley-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mmaudio-video-foley-local-guide</guid><description>Generate synchronized audio from a video and scene prompt, then inspect the FLAC and MP4 outputs.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Add sound effects to a video with MMAudio</h1><p>Start with an eight-second clip and a sound prompt.</p><p id="guide-page-summary">MMAudio uses video and text conditioning to generate audio synchronized with the frames. Its official CLI accepts a video and prompt, then saves FLAC audio and an MP4 under `output/`. Start near the eight-second default and listen to check that the sound fits the video.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Prepare Python 3.9+, PyTorch 2.5.1+, and a matching CUDA build.</li><li>The default CLI example takes an eight-second video and scene prompt.</li><li>Outputs are FLAC and MP4 under `output/`; check the model license terms.</li></ol></section><section><h2>Start with a short video and a sound description</h2><p>MMAudio is a research tool that generates synchronized audio from video and/or text. If the clip shows a door opening, describe what should be heard and when, for example: `A wooden door creaks open, quiet indoor room tone`. The official demo defaults to eight seconds and accepts both a video and prompt. [Official MMAudio repository](https://github.com/hkchengrex/MMAudio)</p><ul><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/minimax-h3-audio-video.webp" alt="An editing screen showing video frames and an audio waveform together" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Describe the video’s movement and scene in the sound prompt.</figcaption></figure><section><h2>Install a matching CUDA PyTorch build first</h2><p>The repository requires Python 3.9+, PyTorch 2.5.1+, and matching torchvision/torchaudio. Activate the `.venv` created inside the repository, install the PyTorch build for a CUDA version supported by your driver, then install the package in editable mode. The authors say they tested on Ubuntu only. [Choose a driver-compatible command on the official PyTorch page](https://pytorch.org/get-started/locally/)</p><div><p><strong>Set up the Ubuntu environment</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/hkchengrex/MMAudio.git
cd MMAudio
python -m venv .venv
source .venv/bin/activate
# In MMAudio/.venv, run the PyTorch install command selected at https://pytorch.org/get-started/locally/
python -m pip install -e .
cp /path/to/scene.mp4 ./scene.mp4</code></pre></div></section><section><h2>Listen to the saved audio with the video</h2><p>Replace `/path/to/scene.mp4` with the actual file path during setup, then copy the file to `MMAudio/scene.mp4` at the repository root. In the same shell where `MMAudio/.venv` is active, move to the repository root and run the CLI below.</p><p>When processing finishes, open the FLAC and MP4 in `output/` and check whether the sound begins with the on-screen action. The FAQ says that increasing input resolution does not improve audio quality and may add encoding and decoding time. Frames are resized and cropped for the encoder, so start by testing sounds from the center of the scene.</p><div><p><strong>Generate Foley in the MMAudio virtual environment</strong></p><pre><code data-guide-code-block="2-0">cd /path/to/MMAudio
source .venv/bin/activate
python demo.py --duration=8 --video=scene.mp4 --prompt "A wooden door creaks open, quiet indoor room tone"</code></pre></div></section><figure><img src="https://localai.co.kr/guides/oct26-magenta-realtime-2-local-music-guide-02.webp" alt="An audio workspace comparing waveforms and music tracks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen to check where the generated audio matches the source video.</figcaption></figure><section><h2>Check memory and usage terms</h2><p>The repository author lists about 6 GB of GPU memory for 16-bit inference with the default `large_44k_v2` model. If memory runs short or output stops, keep `--duration=8` and check that the input file decodes correctly.</p><p>The checkpoint is distributed under CC-BY-NC 4.0. For product work, check the license and the conditions on training data sources.</p></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A video storyboard used to choose a scene for sound effects" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Check ambience and effects before relying on generated speech.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/generate?mode=video&amp;model=ltx-2.5-av">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MMAudio uses video and text conditioning to generate audio synchronized with the frames. Its official CLI accepts a video and prompt, then saves FLAC audio and an MP4 under `output/`. Start near the eight-second default and listen to check that the sound fits the video.</dd></div><div><dt>How much memory does it need?</dt><dd>The repository author lists about 6 GB of GPU memory for 16-bit inference with the default `large_44k_v2` model. If memory runs short or output stops, keep `--duration=8` and check that the input file decodes correctly.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The checkpoint is distributed under CC-BY-NC 4.0. For product work, check the license and the conditions on training data sources.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Create a 3D asset from one photo with TRELLIS.2</title><link>https://localai.co.kr/en/guides/trellis2-photo-to-3d-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/trellis2-photo-to-3d-guide</guid><description>Use the official TRELLIS.2 example to turn an input image into a GLB model.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Create a 3D asset from one photo with TRELLIS.2</h1><p>Start by checking Linux and an NVIDIA GPU with at least 24 GB.</p><p id="guide-page-summary">TRELLIS.2 is a 4B-parameter model for generating textured 3D assets from one input image. Its official example reads a photo and saves `sample.glb` plus a `sample.mp4` preview. The repository lists a 24 GB minimum NVIDIA GPU memory requirement and uses a Linux environment.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>TRELLIS.2 generates 3D geometry and PBR materials from an input photo.</li><li>Before running, check Linux, CUDA, and an NVIDIA GPU with at least 24 GB.</li><li>The expected outputs are `sample.glb` and `sample.mp4`.</li></ol></section><section><h2>Prepare the photo and check the hardware</h2><p>TRELLIS.2 generates 3D shape and materials from one image. Use a photo where the object is clear and separated from the background. The repository requires Linux and at least 24 GB of NVIDIA GPU memory, recommends CUDA Toolkit 12.4, and says it was tested on A100/H100. This setup therefore targets a Linux GPU meeting those conditions. [Official TRELLIS.2 repository](https://github.com/microsoft/TRELLIS.2)</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-omni-local-conversation-guide">Qwen3-Omni Local Setup Conditions: Testing Audio and Video Paths</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-reference-editing.webp" alt="An image workspace examining a product photo’s shape and material" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Use the shape and material cues in one photo as input for 3D generation.</figcaption></figure><section><h2>Set up the repository and environment</h2><p>Clone the repository with submodules and run `setup.sh` to install dependencies. The README recommends Python 3.8+ and CUDA Toolkit 12.4; building CUDA extensions can take time. Run the script from a Linux shell; downloading the checkpoint also requires Hugging Face access.</p><div><p><strong>Run the official setup script</strong></p><pre><code data-guide-code-block="1-0">git clone -b main https://github.com/microsoft/TRELLIS.2.git --recursive
cd TRELLIS.2
. ./setup.sh --new-env --basic --flash-attn --nvdiffrast --nvdiffrec --cumesh --o-voxel --flexgemm</code></pre></div></section><section><h2>Convert the example image to GLB</h2><p>After installation, run the official `example.py`. In the file, replace the default path in `Image.open('assets/example_image/T.png')` with your photo’s path and save it. The `microsoft/TRELLIS.2-4B` weights generate the shape and save `sample.glb` and the turntable preview `sample.mp4` in the run directory.</p><div><p><strong>Generate a sample 3D asset</strong></p><pre><code data-guide-code-block="2-0"># Edit example.py: replace Image.open('assets/example_image/T.png') with your photo path
python example.py
# Outputs: sample.glb and sample.mp4</code></pre></div></section><figure><img src="https://localai.co.kr/guides/local-image-jobs.webp" alt="A local workbench prepared with product images and drafts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A clear product photo makes the generated shape easier to inspect.</figcaption></figure><section><h2>Inspect the GLB geometry and surfaces</h2><p>When the command finishes, open `sample.glb` in a 3D viewer and rotate it. Inspect the back, thin parts, and areas around holes; finish by checking the GLB you will deliver, not just the `sample.mp4` preview.</p><p>For product drawings or measurement models that need exact dimensions, do not use a single-photo GLB as-is. Blocking out a shape quickly and producing a model for manufacturing need different preparation.</p></section><figure><img src="https://localai.co.kr/guides/local-image-resolution-batch.webp" alt="A board comparing image outputs at different sizes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After generation, rotate the GLB in a viewer to inspect it.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>TRELLIS.2 is a 4B-parameter model for generating textured 3D assets from one input image. Its official example reads a photo and saves `sample.glb` plus a `sample.mp4` preview. The repository lists a 24 GB minimum NVIDIA GPU memory requirement and uses a Linux environment.</dd></div><div><dt>How much memory does it need?</dt><dd>TRELLIS.2 generates 3D shape and materials from one image. Use a photo where the object is clear and separated from the background. The repository requires Linux and at least 24 GB of NVIDIA GPU memory, recommends CUDA Toolkit 12.4, and says it was tested on A100/H100. This setup therefore targets a Linux GPU meeting those conditions. [Official TRELLIS.2 repository](https://github.com/microsoft/TRELLIS.2)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Transcribe Korean speech live and save text with Nemotron 3.5 ASR</title><link>https://localai.co.kr/en/guides/nemotron-35-streaming-asr-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-35-streaming-asr-local-guide</guid><description>Use Nemotron 3.5 ASR and NeMo-Speech.cpp to transcribe Korean microphone input live and save the final text.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Transcribe Korean speech live and save text with Nemotron 3.5 ASR</h1><p>Follow Korean speech on screen and save the finalized transcript as text.</p><p id="guide-page-summary">Nemotron 3.5 ASR is a 600M-parameter streaming speech recognition model. With NVIDIA NeMo-Speech.cpp, you can connect the system microphone and watch Korean transcription update as you speak. Korean `ko-KR` is available for transcription without additional adaptation.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 600M model processes audio in chunks and extends the transcript with each new segment.</li><li>Korean `ko-KR` is one of the 32 locales ready to use without adaptation.</li><li>Review the live preview and the final transcript saved to a file separately.</li></ol></section><section><h2>Live text changes before a sentence is finalized</h2><p>Nemotron 3.5 ASR processes audio in small chunks and extends the text with what it has heard so far. Unlike transcribing once after a recording ends, the displayed words can change while the microphone is active. Each new chunk adds context, so treat short phrases on screen as provisional and review the finalized utterance after a pause. [NVIDIA model card](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)</p><p>The model card lists 40 language locales with different readiness levels. Nineteen are transcription-ready and 13 are broad-coverage, so both groups can transcribe without adaptation. The remaining eight need adaptation with domain data. Korean `ko-KR` is transcription-ready. [NVIDIA model card](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)</p><ul><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/local-meeting-transcription-workflow">Create local meeting notes with transcripts, timestamps, and speakers</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The transcript updates while audio arrives from the microphone.</figcaption></figure><section><h2>Install the runtime and start Korean microphone input</h2><p>NeMo-Speech.cpp provides an installer for macOS and Linux and a PowerShell installer for Windows. Follow the official instructions for your OS, open a new terminal, then run `nemo-speech doctor` and `nemo-speech model list`. The first command reports installed audio and inference backends; the second lists model aliases available in that build.</p><div><p><strong>Install NeMo-Speech.cpp on macOS or Linux</strong></p><pre><code data-guide-code-block="1-0">curl -fsSL https://github.com/NVIDIA/NeMo-Speech.cpp/raw/main/scripts/install.sh | sh</code></pre></div><div><p><strong>Install NeMo-Speech.cpp from Windows PowerShell</strong></p><pre><code data-guide-code-block="1-1">irm https://github.com/NVIDIA/NeMo-Speech.cpp/raw/main/scripts/install.ps1 | iex</code></pre></div><div><p><strong>Check the CLI in a new terminal</strong></p><pre><code data-guide-code-block="1-2">nemo-speech doctor
nemo-speech model list</code></pre></div><p>Allow microphone access for the terminal, then say a short phrase somewhere quiet. The command explicitly selects the Nemotron 3.5 alias and saves the final Korean transcript to `live-ko.txt`.</p><div><p><strong>Start Korean microphone transcription</strong></p><pre><code data-guide-code-block="1-3">nemo-speech pull nemotron-3.5
nemo-speech transcribe --live --model nemotron-3.5 --output live-ko.txt</code></pre></div></section><section><h2>Compare the live preview with the saved final transcript</h2><p>After you pause, the default endpointing setting detects silence and finalizes the utterance while microphone capture continues. To finish the full transcript, press `Ctrl-C` once so the stream can flush. The final text appears in the terminal, and the `live-ko.txt` option also saves it in the working directory. Open that file to compare words that changed during the live preview. [NeMo-Speech.cpp CLI guide](https://github.com/NVIDIA/NeMo-Speech.cpp/blob/main/docs/cli.md)</p><p>Microphone input does not create an audio file. When transcription ends, correct names and numbers in the saved text, then replay the matching passage if you have an original recording.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A desk with headphones, a microphone, and a transcription workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare interim text with finalized sentences from the same recording.</figcaption></figure><section><h2>How long until words appear?</h2><p>For live transcription, the wait between speaking and seeing words matters. The model collects 80–1120 ms audio chunks, then adds inference time before updating the transcript. Smaller chunks update more often; larger chunks gather more audio first. Read a sentence with your intended device and microphone, and check both the first visible words and the finalized line.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A recorder, notes, and headphones for reviewing speech recognition" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After stopping the microphone, review the complete transcript and saved captions.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=nemotron-35-asr-streaming">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Nemotron 3.5 ASR is a 600M-parameter streaming speech recognition model. With NVIDIA NeMo-Speech.cpp, you can connect the system microphone and watch Korean transcription update as you speak. Korean `ko-KR` is available for transcription without additional adaptation.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Nemotron 3.5 ASR processes audio in small chunks and extends the text with what it has heard so far. Unlike transcribing once after a recording ends, the displayed words can change while the microphone is active. Each new chunk adds context, so treat short phrases on screen as provisional and review the finalized utterance after a pause. [NVIDIA model card](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Transcribe English speech in real time with Moonshine on CPU</title><link>https://localai.co.kr/en/guides/moonshine-cpu-streaming-asr-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/moonshine-cpu-streaming-asr-guide</guid><description>Install Moonshine Voice for CPU microphone transcription, test a short English phrase, and check the separate streaming and license status for Korean.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Transcribe English speech in real time with Moonshine on CPU</h1><p>English can use a live streaming model, while the current Korean model has a different streaming path and license.</p><p id="guide-page-summary">Moonshine Voice is a local speech-recognition toolkit that runs on a CPU. Its English CLI updates text while listening to a microphone; the current Korean Tiny model is non-streaming.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Start the English microphone example with `moonshine-voice mic --language en`.</li><li>The official toolkit documents on-device use on CPUs, mobile devices, and browsers.</li><li>Korean has no streaming checkpoint yet, so it differs from the standard live path.</li></ol></section><section><h2>Start with live English input</h2><p>Moonshine Voice is a local speech recognition toolkit that turns speech into text. It runs on a CPU, and the English microphone CLI updates the transcript while you speak. If you want an on-device workflow that does not send audio to a server for transcription, begin with a short microphone test. [Moonshine Voice documentation](https://moonshine-voice.readthedocs.io/en/stable/)</p><div><p><strong>Run in Windows PowerShell</strong></p><pre><code data-guide-code-block="0-1">python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install moonshine-voice
moonshine-voice mic --language en</code></pre></div><p>The official quickstart installs `moonshine-voice`, then opens the English microphone with `mic`. Activate a virtual environment for your operating system and install the package. The first run prepares model assets, so it needs an internet connection and local storage.</p><div><p><strong>Prepare a virtual environment and Moonshine CLI</strong></p><pre><code data-guide-code-block="0-0">python -m venv .venv
source .venv/bin/activate
python -m pip install moonshine-voice
moonshine-voice mic --language en</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/local-meeting-transcription-workflow">Create local meeting notes with transcripts, timestamps, and speakers</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Allow microphone access, then speak a short phrase in English.</figcaption></figure><section><h2>Check microphone access and live text</h2><p>After the operating system grants microphone access to the terminal, spoken words should appear. Say a short phrase and pause to see whether the transcript adds text or finishes a line. If nothing appears, enable microphone permission for the terminal in system privacy settings and check that the CLI language is `en`. [Official quickstart](https://moonshine-voice.readthedocs.io/en/stable/quickstart/)</p><p>To add transcription to a web app, use `@moonshine-ai/moonshine-wasm`. Start with the documented package or CDN example, then connect model downloading and microphone permission.</p></section><section><h2>The Korean model follows a different path from live English</h2><p>Current model documentation does not list Korean among streaming languages; it lists a separate 26M-parameter Tiny non-streaming model. The English CLI’s live workflow therefore does not carry over to Korean dictation. If you need Korean recognition, test it with your actual speech first. [Moonshine model list](https://moonshine-voice.readthedocs.io/en/stable/models/available-models/)</p><p>The Moonshine model list distinguishes MIT-licensed English streaming models from the Korean Tiny model under the Community License. That Community License is non-commercial, so do not assume the checkpoint can be used in a commercial service or paid product. First decide whether you need live English or offline Korean recognition, then choose the matching model and license.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A desk with headphones, a microphone, and a transcription workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review the transcript as it changes while you speak.</figcaption></figure><section><h2>Decide whether live updates fit your task</h2><p>Read a short passage from an English meeting and compare names and numbers on screen with the original audio. Paste accurate lines into a notes draft, and replay important names before using them in the minutes.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A recorder, notes, and headphones for reviewing speech recognition" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the model list to see whether your language has live support.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=moonshine">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Moonshine Voice is a local speech-recognition toolkit that runs on a CPU. Its English CLI updates text while listening to a microphone; the current Korean Tiny model is non-streaming.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The Moonshine model list distinguishes MIT-licensed English streaming models from the Korean Tiny model under the Community License. That Community License is non-commercial, so do not assume the checkpoint can be used in a commercial service or paid product. First decide whether you need live English or offline Korean recognition, then choose the matching model and license.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The Moonshine model list distinguishes MIT-licensed English streaming models from the Korean Tiny model under the Community License. That Community License is non-commercial, so do not assume the checkpoint can be used in a commercial service or paid product. First decide whether you need live English or offline Korean recognition, then choose the matching model and license.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Align Korean subtitles and speaker labels with WhisperX</title><link>https://localai.co.kr/en/guides/whisperx-word-alignment-srt-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/whisperx-word-alignment-srt-guide</guid><description>Transcribe Korean speech with WhisperX, align word-level timings, then save an SRT file. Includes model access for diarization and a review against the source audio.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Align Korean subtitles and speaker labels with WhisperX</h1><p>Forced alignment matches a transcript to audio and adds word-level start and end times.</p><p id="guide-page-summary">WhisperX transcribes audio, aligns word-level timings with a separate model, and can create SRT subtitles. It can also diarize speakers, but the pyannote model requires accepting its access terms. Review the output against the audio, especially names, numbers, and overlapping speech.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>WhisperX runs a word-timing alignment step after transcription.</li><li>For Korean, the default aligner is `kresnik/wav2vec2-large-xlsr-korean`.</li><li>Review speaker labels and SRT timings against the actual recording.</li></ol></section><section><h2>Why use word-level timestamps</h2><p>WhisperX transcribes a recording, then uses an alignment model to estimate where each word falls in the audio. Word-level segments make it easier to fix only the captions that drift in a subtitle editor. Alignment matches text that it receives to speech, so a transcription error can still receive a timestamp.</p><p>Run transcription and alignment on a short Korean WAV file. Check the sentence text and each word's start and end times, then correct misrecognized words first. Running alignment again with the corrected text makes it easier to find the subtitle segments to fix.</p><ul><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/phonon-2-local-english-transcription-guide">Phonon 2: A Local English Transcription Guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Transcribe the audio first, then align its word timings.</figcaption></figure><section><h2>Save subtitles using the Korean aligner</h2><p>First install ffmpeg and place `recording.wav` in the working folder. The commands below are for macOS and Debian or Ubuntu Linux. Then install PyTorch and WhisperX in your Python environment.</p><div><p><strong>Install ffmpeg on macOS and Debian/Ubuntu</strong></p><pre><code data-guide-code-block="1-0"># macOS
brew install ffmpeg

# Debian / Ubuntu Linux
sudo apt-get update &amp;&amp; sudo apt-get install -y ffmpeg</code></pre></div><div><p><strong>Install WhisperX packages</strong></p><pre><code data-guide-code-block="1-1">python -m pip install torch torchaudio
python -m pip install whisperx</code></pre></div><div><p><strong>Save Korean SRT with word-level highlighting</strong></p><pre><code data-guide-code-block="1-2">whisperx recording.wav --output_dir whisperx-output --language ko --model large-v2 --compute_type int8 --device cpu --highlight_words True</code></pre></div><p>Place `recording.wav` in the current folder and run the command to save `whisperx-output/recording.srt` and the transcript. Set `--language ko` for Korean; WhisperX then calculates word timings with its Korean alignment settings.</p></section><section><h2>Complete model access before adding diarization</h2><p>Speaker diarization assigns a speaker ID to each recording segment. Accept the access conditions on the pyannote model card used by WhisperX, then prepare a Hugging Face read token. In macOS or Linux Bash, the command below keeps the token off screen and uses it only in the current shell.</p><p>For a conversation with two participants, add `--min_speakers 2 --max_speakers 2` to provide the expected speaker count. These values guide the model as it finds segment boundaries. Overlapping speech or brief acknowledgements may be merged or assigned a different ID, so listen again and check the labels.</p><div><p><strong>Add speaker IDs and word highlighting</strong></p><pre><code data-guide-code-block="2-0">read -rs HF_TOKEN
printf '\n'
export HF_TOKEN
whisperx recording.wav --output_dir whisperx-output --language ko --model large-v2 --compute_type int8 --device cpu --diarize --min_speakers 2 --max_speakers 2 --highlight_words True --hf_token "$HF_TOKEN"</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A desk with headphones, a microphone, and a transcription workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the recording before relying on speaker labels.</figcaption></figure><section><h2>Review the SRT while playing the recording</h2><p>Open `whisperx-output/recording.srt` with the WAV file in a subtitle editor and correct the text and timecodes. Checking numbers, names, and overlapping speech first makes it easier to distinguish alignment errors from transcription errors.</p><p>A speaker ID is a number that distinguishes speakers, not a person's name. Before adding names to meeting notes, listen to the audio again and keep the WAV and SRT files according to the permissions granted by participants and your organization.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A recorder, notes, and headphones for reviewing speech recognition" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Open the SRT in an editor and check caption start and end times.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>WhisperX transcribes audio, aligns word-level timings with a separate model, and can create SRT subtitles. It can also diarize speakers, but the pyannote model requires accepting its access terms. Review the output against the audio, especially names, numbers, and overlapping speech.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Speaker diarization assigns a speaker ID to each recording segment. Accept the access conditions on the pyannote model card used by WhisperX, then prepare a Hugging Face read token. In macOS or Linux Bash, the command below keeps the token off screen and uses it only in the current shell.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate Korean speech on CPU with Supertonic 3</title><link>https://localai.co.kr/en/guides/supertonic-3-korean-local-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/supertonic-3-korean-local-tts-guide</guid><description>Run Supertonic 3's public ONNX model on a CPU and save Korean speech as a WAV. Prepare the pinned model assets, choose a preset voice, and synthesize a short phrase.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Generate Korean speech on CPU with Supertonic 3</h1><p>Provide text, Korean code `ko`, and an included preset to generate a WAV.</p><p id="guide-page-summary">Supertonic 3 is an on-device TTS system for 31 languages. Its public ONNX assets run on a CPU, and the included M1–M5 and F1–F5 voice presets can synthesize Korean into a WAV. Custom voice styles use a separate Voice Builder service path.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Pass `--lang ko` for Korean text and generate a WAV with the ONNX model.</li><li>Choose one of M1–M5 or F1–F5 with `--voice-style`.</li><li>Bundled presets and the custom voice-style service follow separate paths.</li></ol></section><section><h2>Start CPU synthesis from the archived public model</h2><p>Supertonic 3 is a multilingual TTS system that takes text and a language code to create speech. Its public model files run with ONNX Runtime; set Korean to `ko` and a bundled voice preset to save a WAV. The model card lists 31 languages, including Korean, English, and Japanese. [Supertonic 3 model card](https://huggingface.co/supertone-oss-archive/supertonic-3)</p><p>The public repository was archived on September 9, 2026, and code changes and support have stopped. The steps below download the archived repository at its current revision and a pinned revision of the model assets.</p><ul><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the text and voice preset before synthesizing.</figcaption></figure><section><h2>Prepare the pinned model files</h2><p>You need Python 3.11 and Git. The commands below are for macOS and Linux terminals; code comes from the archived default branch, while the model-file revision is pinned.</p><div><p><strong>Set up the repository and model assets</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/supertone-oss-archive/supertonic.git
cd supertonic
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install huggingface_hub
hf download supertone-oss-archive/supertonic-3 --revision aafc6e32416a594460b32413efc49d7fe4ce6d46 --local-dir assets</code></pre></div></section><section><h2>Generate a Korean WAV and try another preset</h2><p>Install the ONNX example dependencies in the same environment and run the synthesis command from the `py/` folder. The example defaults to M1, but the command names the preset file explicitly. `--lang ko` tells it that the input text is Korean.</p><div><p><strong>Synthesize Korean text with the M1 preset</strong></p><pre><code data-guide-code-block="2-0">python -m pip install -r py/requirements.txt
cd py
python example_onnx.py --n-test 1 --text "오늘 회의는 오후 두 시에 시작합니다." --lang ko --voice-style ../assets/voice_styles/M1.json</code></pre></div><p>The measurement used an Apple M4 CPU, ONNX Runtime 1.23.1 CPUExecutionProvider, F3, 8 steps, speed 1.05, and seed 42. Each language had one warm-up followed by three runs; only the `tts()` call after model loading was timed.</p><p>For about 12 seconds of Korean speech, the median synthesis call took 2.30 seconds. This value excludes model download and loading, WAV saving, and MP3 encoding. Listen to the public sample, then generate your own text on the CPU to check the result. [Measurement conditions and data](/audio/speech/supertonic3-measurements.json)</p><p>On success, a WAV whose filename includes part of the text appears under `py/results/`. Listen for numbers, product names, and sentence endings. To try another voice, replace `M1.json` with a file such as `F3.json` from `assets/voice_styles/`. If no file appears, inspect the first terminal error and the `py/results/` folder.</p><table><caption>Audio duration and synthesis-call time by language</caption><thead><tr><th scope="col">Language</th><th scope="col">Audio duration</th><th scope="col">Median `tts()`</th><th scope="col">RTF</th></tr></thead><tbody><tr><th scope="row">Korean</th><td>12.04 s</td><td>2.299 s</td><td>0.191</td></tr><tr><th scope="row">English</th><td>11.15 s</td><td>2.215 s</td><td>0.199</td></tr><tr><th scope="row">Japanese</th><td>14.64 s</td><td>2.943 s</td><td>0.201</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen to the generated WAV and check sentence endings and numbers.</figcaption></figure><section><h2>Separate preset voices from custom voice styles</h2><p>The public model assets include ten preset voice styles, M1–M5 and F1–F5. They let you select a voice included with the model. Keep the same text and language, then change only the `--voice-style` path to compare the presets' pronunciation and pace.</p><p>Voice Builder was a separate service for creating a user style from a reference recording, and it is not included in the archived repository. For this local example, choose one of the M1–F5 presets. Get permission before imitating another person's voice.</p></section><section><h2>Review the code and model licenses separately</h2><p>The example code uses the MIT license, while the model weights use OpenRAIL-M. Review the terms for modifying or distributing the software separately from the terms applying to the model weights and generated output. The repository and model card link to their license texts.</p><p>Generate the amount of speech you plan to use on the CPU and listen for numbers, names, and sentence endings. To run it in a browser, start the development server using the local example in the archived repository's `web/README.md`.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="Headphones, an audio player, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Bundled presets and custom voice styles have different setup paths.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=supertonic-3">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Supertonic 3 is an on-device TTS system for 31 languages. Its public ONNX assets run on a CPU, and the included M1–M5 and F1–F5 voice presets can synthesize Korean into a WAV. Custom voice styles use a separate Voice Builder service path.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Supertonic 3 is a multilingual TTS system that takes text and a language code to create speech. Its public model files run with ONNX Runtime; set Korean to `ko` and a bundled voice preset to save a WAV. The model card lists 31 languages, including Korean, English, and Japanese. [Supertonic 3 model card](https://huggingface.co/supertone-oss-archive/supertonic-3)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Transcribe English audio locally with Granite Speech 5 TurboCTC</title><link>https://localai.co.kr/en/guides/granite-speech-5-turboctc-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/granite-speech-5-turboctc-local-guide</guid><description>Understand Granite Speech 5.0 TurboCTC's input and output, then use the official model-card example as a starting point for local transcription.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Transcribe English audio locally with Granite Speech 5 TurboCTC</h1><p>A 470M CTC model for turning English speech into text.</p><p id="guide-page-summary">Granite Speech 5.0 TurboCTC is a 470M model that takes English audio and returns a transcript. Start with the Transformers example in its August 2026 model card and review the Apache 2.0 license. It is English-only, so choose another system for Korean or Japanese recordings.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>English audio goes in; transcript text comes out.</li><li>The model card lists 470M parameters and an Apache 2.0 license.</li><li>The published comparison uses server GPUs, not consumer-PC measurements.</li></ol></section><section><h2>Feed in English audio and receive a transcript</h2><p>Granite Speech 5.0 TurboCTC is an automatic speech recognition model in IBM's Granite Speech family. It takes audio and returns text; the 5.0 TurboCTC model card describes English speech recognition. For Korean or Japanese meetings, choose an ASR system that supports those languages. [Official model card](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc)</p><ul><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/orukeet-local-transcription-guide">Orukeet local transcription: transcribe English and European-language audio</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prepare the English recording and choose the audio segment to submit.</figcaption></figure><section><h2>Test a short file with the Transformers example</h2><p>Install PyTorch, an audio-input library, and Transformers in a virtual environment. Copy an English WAV into the working folder as `sample.wav`, then save the code as `transcribe.py` and run it to print the transcript.</p><div><p><strong>Install the required Python packages</strong></p><pre><code data-guide-code-block="1-0">python -m pip install torch torchaudio soundfile "transformers&gt;=5.16.0" datasets</code></pre></div><div><p><strong>Transcription code for transcribe.py</strong></p><pre><code data-guide-code-block="1-1">import soundfile as sf
from transformers import pipeline

asr = pipeline("automatic-speech-recognition", model="ibm-granite/granite-speech-5.0-470m-turboctc")
audio, sample_rate = sf.read("sample.wav", dtype="float32")
if audio.ndim &gt; 1:
    audio = audio.mean(axis=1)
result = asr({"array": audio, "sampling_rate": sample_rate})
print(result["text"])</code></pre></div><div><p><strong>Run transcribe.py</strong></p><pre><code data-guide-code-block="1-2">python transcribe.py</code></pre></div></section><section><h2>Check accuracy and speed on your own hardware</h2><p>Listen to a short sample and compare sentences, numbers, and names with the output, then test a file at your real working length. Read IBM's measurement hardware and audio conditions alongside any reported comparison. Do not treat H200 or L4 results as desktop-GPU or laptop timings.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A desk with headphones, a microphone, and a transcription workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check names and numbers in the transcript against the original audio.</figcaption></figure><section><h2>Check the Apache 2.0 terms and language scope</h2><p>The model card lists an Apache 2.0 license. Check the terms for the model version and intended use, including redistribution if you publish results or bundle the model in a product. This guide treats it as English-only; for Korean, compare models that explicitly list Korean, such as Nemotron or Whisper variants.</p><p>If you need to transcribe Korean or Japanese audio, do not choose this model. It targets English speech recognition, so compare other languages with ASR models that name them.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A recorder, notes, and headphones for reviewing speech recognition" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check that the recording language matches the model's English scope.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=granite-speech-5-turboctc">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Granite Speech 5.0 TurboCTC is a 470M model that takes English audio and returns a transcript. Start with the Transformers example in its August 2026 model card and review the Apache 2.0 license. It is English-only, so choose another system for Korean or Japanese recordings.</dd></div><div><dt>When is it better not to choose this?</dt><dd>If you need to transcribe Korean or Japanese audio, do not choose this model. It targets English speech recognition, so compare other languages with ASR models that name them.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Granite Speech 5.0 TurboCTC is an automatic speech recognition model in IBM's Granite Speech family. It takes audio and returns text; the 5.0 TurboCTC model card describes English speech recognition. For Korean or Japanese meetings, choose an ASR system that supports those languages. [Official model card](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate Korean speech with VoxCPM2's 30-language TTS</title><link>https://localai.co.kr/en/guides/voxcpm2-multilingual-local-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/voxcpm2-multilingual-local-tts-guide</guid><description>Check VoxCPM2's Korean TTS, 48 kHz output, and CUDA-oriented setup before using the official model-card example to create a first WAV.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Generate Korean speech with VoxCPM2's 30-language TTS</h1><p>A 2B TTS model that generates speech in 30 languages, including Korean.</p><p id="guide-page-summary">VoxCPM2 is a 2B model that turns text into 48 kHz speech in 30 languages, including Korean and Japanese. The official Web Demo supports CPU, Apple MPS, and CUDA; on Apple Silicon, `--device auto` selects MPS. The Python example below creates a first WAV through the package API.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It supports 30 languages, including Korean, and outputs 48 kHz audio.</li><li>The official setup lists Python 3.10+, PyTorch 2.5+, CUDA 12+, and about 8 GB VRAM.</li><li>Review the Apache 2.0 terms for the released model and code.</li></ol></section><section><h2>Generate Korean speech from text</h2><p>VoxCPM2 is OpenBMB's 2B-parameter TTS model. Its model card lists 30 languages, including Korean, English, and Japanese, and 48 kHz output. Use it to turn text into a playable audio file. [VoxCPM2 model card](https://huggingface.co/openbmb/VoxCPM2)</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li><li><a href="https://localai.co.kr/en/guides/pocket-tts-cpu-local-speech-guide">Generate speech on a CPU with Pocket TTS in six languages</a></li><li><a href="https://localai.co.kr/en/guides/omnivoice-local-multilingual-tts-guide">Generate Korean speech with OmniVoice's 600+ language and dialect coverage</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose a Korean text sample and listen to the generated voice.</figcaption></figure><section><h2>Meet the CUDA and VRAM requirements first</h2><p>The model card targets Python 3.10+, PyTorch 2.5+, CUDA 12+, and about 8 GB of VRAM. Install packages in a virtual environment. For CUDA, choose the matching wheel from the PyTorch page.</p><div><p><strong>Install the published package</strong></p><pre><code data-guide-code-block="1-0">python -m pip install voxcpm soundfile</code></pre></div></section><section><h2>Synthesize a first sentence and save the WAV</h2><p>Synthesize a short Korean line and save it as `korean.wav`. Save the code below as `generate.py` in your working folder and run `python generate.py`. The output appears in the same folder.</p><div><p><strong>Generate a Korean WAV in generate.py</strong></p><pre><code data-guide-code-block="2-0">import soundfile as sf
from voxcpm import VoxCPM

model = VoxCPM.from_pretrained("openbmb/VoxCPM2")
audio = model.generate(text="오늘 회의는 오후 두 시에 시작합니다.")
sf.write("korean.wav", audio, model.tts_model.sample_rate)</code></pre></div><div><p><strong>Run generate.py</strong></p><pre><code data-guide-code-block="2-1">python generate.py</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check pronunciation and sentence endings in the WAV output.</figcaption></figure><section><h2>Compare published RTF with your own task time</h2><p>The card's speed measurements are tied to named hardware and runtime configurations, such as an RTX 4090 or Nano-VLLM. Model loading, first-audio delay, and long-text generation can feel different. Time a few scripts of fixed length on your machine and compare both audio quality and elapsed time.</p></section><section><h2>Check the license and intended use</h2><p>The model card and repository list Apache 2.0. Check the terms for the code and weights you plan to distribute, and review applicable policies and voice rights before publishing or commercializing generated audio. Use voice cloning or another person's voice only with explicit permission.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="Headphones, an audio player, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the VRAM and CUDA requirements before installation.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=voxcpm2">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>VoxCPM2 is a 2B model that turns text into 48 kHz speech in 30 languages, including Korean and Japanese. The official Web Demo supports CPU, Apple MPS, and CUDA; on Apple Silicon, `--device auto` selects MPS. The Python example below creates a first WAV through the package API.</dd></div><div><dt>How much memory does it need?</dt><dd>The model card targets Python 3.10+, PyTorch 2.5+, CUDA 12+, and about 8 GB of VRAM. Install packages in a virtual environment. For CUDA, choose the matching wheel from the PyTorch page.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>VoxCPM2 is OpenBMB's 2B-parameter TTS model. Its model card lists 30 languages, including Korean, English, and Japanese, and 48 kHz output. Use it to turn text into a playable audio file. [VoxCPM2 model card](https://huggingface.co/openbmb/VoxCPM2)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate Korean speech with OmniVoice's 600+ language and dialect coverage</title><link>https://localai.co.kr/en/guides/omnivoice-local-multilingual-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/omnivoice-local-multilingual-tts-guide</guid><description>Review OmniVoice text input, audio output, language and speaker controls, and the difference between Apache 2.0 code and non-commercial weights.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Generate Korean speech with OmniVoice's 600+ language and dialect coverage</h1><p>A 0.6B model turns text into speech, with non-commercial terms on the weights.</p><p id="guide-page-summary">OmniVoice is a 0.6B multilingual TTS model whose card describes coverage of 600+ languages and dialects. Its code is Apache 2.0, but pretrained weights are CC-BY-NC and do not allow commercial use. Check the card's language and speaking examples, then evaluate the actual pronunciation yourself.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Generate speech from text in multiple languages, including Korean.</li><li>The code and pretrained weights have different licenses.</li><li>The CC-BY-NC weight terms restrict commercial use.</li></ol></section><section><h2>Generate speech in multiple languages from text</h2><p>OmniVoice is K2-FSA’s 0.6B TTS model. Its card describes more than 600 languages and dialects and provides a zero-shot example that reads text in the voice of a reference recording and transcript. Check names and numbers with Korean text. [OmniVoice model card](https://huggingface.co/k2-fsa/OmniVoice) · [Official repository](https://github.com/k2-fsa/OmniVoice)</p><ul><li><a href="https://localai.co.kr/en/guides/voxcpm2-multilingual-local-tts-guide">Generate Korean speech with VoxCPM2's 30-language TTS</a></li><li><a href="https://localai.co.kr/en/guides/pocket-tts-cpu-local-speech-guide">Generate speech on a CPU with Pocket TTS in six languages</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the text and output language before synthesis.</figcaption></figure><section><h2>Check the repository example and hardware setup first</h2><p>The model card provides CUDA-specific PyTorch installs for NVIDIA GPUs and standard PyTorch for Apple Silicon. The example below uses CUDA. Install the packages in a virtual environment and prepare a short Korean reference recording and its transcript as `ref.wav` and `ref.txt`.</p><div><p><strong>Install OmniVoice and WAV-writing packages</strong></p><pre><code data-guide-code-block="1-0">python -m pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
python -m pip install omnivoice soundfile</code></pre></div></section><section><h2>Test Korean text and inspect pronunciation</h2><p>Save the code below as `generate.py` and run it; `korean.wav` appears in the current folder. The example synthesizes the Korean line in the voice and delivery of `ref.wav`. Use your own voice or a reference recording you have permission to use.</p><div><p><strong>Generate a Korean WAV from reference speech</strong></p><pre><code data-guide-code-block="2-0">from omnivoice import OmniVoice
import soundfile as sf
import torch

model = OmniVoice.from_pretrained("k2-fsa/OmniVoice", device_map="cuda:0", dtype=torch.float16)
with open("ref.txt", encoding="utf-8") as f:
    ref_text = f.read().strip()
audio = model.generate(text="오늘 회의는 오후 두 시에 시작합니다.", ref_audio="ref.wav", ref_text=ref_text)
sf.write("korean.wav", audio[0], 24000)</code></pre></div><div><p><strong>Run generate.py</strong></p><pre><code data-guide-code-block="2-1">python generate.py</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen to the generated speech and check names and prosody.</figcaption></figure><section><h2>Keep the code and weight licenses separate</h2><p>OmniVoice code is Apache 2.0, while pretrained weights use CC-BY-NC. Because CC-BY-NC is non-commercial, do not bundle these pretrained weights in a commercial app or service. The open-source code license does not make the full model commercially unrestricted. [Weight license and model card](https://huggingface.co/k2-fsa/OmniVoice)</p></section><section><h2>Create a final sample from the text you will actually use</h2><p>After the short test, generate a sample at the length you plan to publish and listen through the whole file. Check number readings and pronunciation, along with volume and pauses if you will mix it with background music. Local generation does not replace privacy, synthetic-voice disclosure, voice-rights, or service-policy requirements.</p><p>Do not ship this commercially on the strength of the code licence alone. The pretrained weights carry different terms, so check the weight usage scope separately before including it in a product.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="Headphones, an audio player, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review code and weight licenses separately before choosing a use.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=omnivoice">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>OmniVoice is a 0.6B multilingual TTS model whose card describes coverage of 600+ languages and dialects. Its code is Apache 2.0, but pretrained weights are CC-BY-NC and do not allow commercial use. Check the card's language and speaking examples, then evaluate the actual pronunciation yourself.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not ship this commercially on the strength of the code licence alone. The pretrained weights carry different terms, so check the weight usage scope separately before including it in a product.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>OmniVoice is K2-FSA’s 0.6B TTS model. Its card describes more than 600 languages and dialects and provides a zero-shot example that reads text in the voice of a reference recording and transcript. Check names and numbers with Korean text. [OmniVoice model card](https://huggingface.co/k2-fsa/OmniVoice) · [Official repository](https://github.com/k2-fsa/OmniVoice)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate expressive speech with Fish Audio S2 Pro</title><link>https://localai.co.kr/en/guides/fish-s2-pro-local-voice-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/fish-s2-pro-local-voice-generation-guide</guid><description>Review Fish Audio S2 Pro's tag-based expressive controls, 83-language support, and research license.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Generate expressive speech with Fish Audio S2 Pro</h1><p>Dialogue tags can steer delivery, but the weights are restricted to research and non-commercial use.</p><p id="guide-page-summary">Fish Audio S2 Pro turns text and speaker information into speech. Its model card lists 83 languages and fine-grained expression tags for shaping dialogue delivery. The fish-audio-research-license restricts use to research and non-commercial purposes, so do not use it for commercial work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The card lists 83 languages and expressive dialogue tags.</li><li>Add tags to dialogue text to specify delivery.</li><li>The weights use a research and non-commercial license.</li></ol></section><section><h2>Create speech from dialogue with delivery cues</h2><p>Fish Audio S2 Pro is a speech-generation model. It takes text and speaker information, and its card describes expression tags for marking laughter, emotion, and delivery in dialogue. Tagged text is model input rather than a script that will be read literally, so listen to how the model renders each cue. [Official model card](https://huggingface.co/fishaudio/s2-pro)</p><ul><li><a href="https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide">Make a two-speaker dialogue WAV with Fish Audio Drama 3</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test delivery by adding an expression tag to a line of dialogue.</figcaption></figure><section><h2>Prepare the CUDA environment and S2 Pro assets on Linux or WSL</h2><p>The official installation guide provides a Python 3.12, uv, and NVIDIA CUDA 12.9 path. On Linux or WSL, prepare a CUDA-compatible driver and a GPU with 24GB VRAM, then install the system audio packages, CUDA dependencies, and S2 Pro checkpoint.</p><div><p><strong>Install CUDA dependencies and the S2 Pro model</strong></p><pre><code data-guide-code-block="1-0">sudo apt-get update &amp;&amp; sudo apt-get install -y portaudio19-dev libsox-dev ffmpeg
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/fishaudio/fish-speech.git
cd fish-speech
uv sync --python 3.12 --extra cu129
uv run hf download fishaudio/s2-pro --local-dir checkpoints/s2-pro</code></pre></div></section><section><h2>Change one tag at a time</h2><p>Place reference.wav in the repository root and create its prompt tokens. Then provide the reference transcript and target text to generate semantic tokens. Save each tagged run to a separate folder and decode both as WAV files for comparison.</p><div><p><strong>Encode the reference recording</strong></p><pre><code data-guide-code-block="2-0">uv run python fish_speech/models/dac/inference.py -i reference.wav --checkpoint-path checkpoints/s2-pro/codec.pth
# Creates fake.npy and fake.wav</code></pre></div><div><p><strong>Compare one expression tag at a time</strong></p><pre><code data-guide-code-block="2-1">uv run python fish_speech/models/text2semantic/inference.py --text "[whisper] 오늘 회의는 오후 두 시에 시작합니다." --prompt-text "참조 음성의 정확한 문장" --prompt-tokens fake.npy --output-dir output-whisper
uv run python fish_speech/models/text2semantic/inference.py --text "[excited] 오늘 회의는 오후 두 시에 시작합니다." --prompt-text "참조 음성의 정확한 문장" --prompt-tokens fake.npy --output-dir output-excited</code></pre></div><div><p><strong>Decode generated tokens to WAV</strong></p><pre><code data-guide-code-block="2-2">uv run python fish_speech/models/dac/inference.py -i output-whisper/codes_0.npy --checkpoint-path checkpoints/s2-pro/codec.pth -o whisper.wav
uv run python fish_speech/models/dac/inference.py -i output-excited/codes_0.npy --checkpoint-path checkpoints/s2-pro/codec.pth -o excited.wav</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen for the intended dialogue and pauses in the generated file.</figcaption></figure><section><h2>Stay within the research and non-commercial license</h2><p>The fish-audio-research-license permits research and non-commercial use; commercial use requires separate permission from Fish Audio. Review the license and rights for the input voice before using the result in public content or a paid service.</p></section><section><h2>Listen through the final file and revise it</h2><p>Once the sample sounds right, generate the full passage and listen through. Check names, numbers, dialogue spacing and emotion tags. In your editor, even out levels and add captions and cuts for the final video.</p><p>If you only need a handful of short announcement clips, there is no reason to pick this model first. Compare it when you need many languages and long passages produced together.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="Headphones, an audio player, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the research and non-commercial license before use.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=fish-s2-pro">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Fish Audio S2 Pro turns text and speaker information into speech. Its model card lists 83 languages and fine-grained expression tags for shaping dialogue delivery. The fish-audio-research-license restricts use to research and non-commercial purposes, so do not use it for commercial work.</dd></div><div><dt>How much memory does it need?</dt><dd>The official installation guide provides a Python 3.12, uv, and NVIDIA CUDA 12.9 path. On Linux or WSL, prepare a CUDA-compatible driver and a GPU with 24GB VRAM, then install the system audio packages, CUDA dependencies, and S2 Pro checkpoint.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Fish Audio S2 Pro is a speech-generation model. It takes text and speaker information, and its card describes expression tags for marking laughter, emotion, and delivery in dialogue. Tagged text is model input rather than a script that will be read literally, so listen to how the model renders each cue. [Official model card](https://huggingface.co/fishaudio/s2-pro)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate speech on a CPU with Pocket TTS in six languages</title><link>https://localai.co.kr/en/guides/pocket-tts-cpu-local-speech-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/pocket-tts-cpu-local-speech-guide</guid><description>Generate WAV audio with Pocket TTS on a CPU and check its current language coverage, including the absence of Korean and Japanese.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Generate speech on a CPU with Pocket TTS in six languages</h1><p>Supports English, French, German, Portuguese, Italian, and Spanish.</p><p id="guide-page-summary">Pocket TTS is an approximately 100M-parameter model that turns text into speech on a CPU, with a Python API and CLI. Its current language list is English, French, German, Portuguese, Italian, and Spanish. Korean and Japanese are not listed, so this is not a TTS choice for those languages.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Current languages are English, French, German, Portuguese, Italian, and Spanish.</li><li>It is a lightweight CPU-focused TTS with a Python API and CLI.</li><li>Korean and Japanese are not currently included.</li></ol></section><section><h2>Create speech on a CPU and save it to a file</h2><p>Pocket TTS is Kyutai's lightweight TTS. Its documentation lists Python 3.10+ and PyTorch 2.5+ and says it runs on CPU without the GPU build of PyTorch. Pass text through its CLI or Python API and save a WAV. [Official model card and documentation](https://huggingface.co/kyutai/pocket-tts)</p><ul><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li><li><a href="https://localai.co.kr/en/guides/voxcpm2-multilingual-local-tts-guide">Generate Korean speech with VoxCPM2's 30-language TTS</a></li><li><a href="https://localai.co.kr/en/guides/omnivoice-local-multilingual-tts-guide">Generate Korean speech with OmniVoice's 600+ language and dialect coverage</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose an input language and synthesize a short sentence.</figcaption></figure><section><h2>Confirm the language before installing</h2><p>Supported languages are English, French, German, Portuguese, Italian and Spanish. For Korean announcements or Japanese narration, compare Supertonic 3 or VoxCPM2. [Current language list](https://huggingface.co/kyutai/pocket-tts)</p></section><section><h2>Save a sentence to WAV with the Python API</h2><p>Install pocket-tts and scipy for WAV writing in a virtual environment, then download the official Hugging Face voice asset. Save the code as generate.py and run it; the prompt is assets/alba-mackenna/casual.wav, and output.wav is written to the current folder.</p><div><p><strong>Install the Python package</strong></p><pre><code data-guide-code-block="2-0">python -m pip install pocket-tts scipy</code></pre></div><div><p><strong>Download the example voice asset</strong></p><pre><code data-guide-code-block="2-1">python -m pip install "huggingface_hub[cli]"
hf download kyutai/tts-voices alba-mackenna/casual.wav --local-dir assets</code></pre></div><div><p><strong>Generate an English speech WAV</strong></p><pre><code data-guide-code-block="2-2">from pocket_tts import TTSModel
import scipy.io.wavfile

model = TTSModel.load_model()
voice = model.get_state_for_audio_prompt("assets/alba-mackenna/casual.wav")
audio = model.generate_audio(voice, "Hello, this is a short test.")
scipy.io.wavfile.write("output.wav", model.sample_rate, audio.numpy())</code></pre></div><div><p><strong>Run the script</strong></p><pre><code data-guide-code-block="2-3">python generate.py</code></pre></div></section><section><h2>Read speed figures with their hardware conditions</h2><p>The card reports faster-than-real-time generation and first-audio delay measured on a MacBook Air M4 CPU. Those results belong to that CPU and runtime setup, not a promise for your device. Generate a representative script on your hardware and record first-audio delay and total completion time separately.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check sentence flow and number readings in the WAV.</figcaption></figure><section><h2>Treat browser implementations as a separate path</h2><p>The official Pocket TTS project also describes browser implementations. Python CPU installation and web execution are separate environments, so do not use these steps as browser setup. For browser use, check the current implementations and language coverage in the model card's in-browser section. [Pocket TTS browser implementations](https://huggingface.co/kyutai/pocket-tts)</p></section><section><h2>Check the weights license and intended use</h2><p>The current model card lists CC-BY-4.0. Check the current license text for model-weight and generated-output terms and attribution requirements. Local execution can keep processing on your device, but you still need rights to the audio and voices you use.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="Headphones, an audio player, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the language list first, especially if you need Korean.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=pocket-tts">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Pocket TTS is an approximately 100M-parameter model that turns text into speech on a CPU, with a Python API and CLI. Its current language list is English, French, German, Portuguese, Italian, and Spanish. Korean and Japanese are not listed, so this is not a TTS choice for those languages.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Pocket TTS is Kyutai's lightweight TTS. Its documentation lists Python 3.10+ and PyTorch 2.5+ and says it runs on CPU without the GPU build of PyTorch. Pass text through its CLI or Python API and save a WAV. [Official model card and documentation](https://huggingface.co/kyutai/pocket-tts)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Separate voices and sounds in recordings with SAM Audio</title><link>https://localai.co.kr/en/guides/sam-audio-local-source-separation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/sam-audio-local-source-separation-guide</guid><description>Use text, time-span, or video cues to isolate a sound from a recording with SAM Audio, and review its access requirements.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Separate voices and sounds in recordings with SAM Audio</h1><p>Describe a sound, then separate the target from the remaining audio.</p><p id="guide-page-summary">Meta's SAM Audio isolates a sound from a complex recording using a text description, visual cue, or time span. The official example runs on a CUDA GPU and requires requesting access to pretrained checkpoints and authenticating. It is a general audio source-separation tool for speech, music, and sound effects, not a dedicated vocal-removal model.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Describe the target with text, a time span, or a visual cue.</li><li>The official example requires Python 3.11+ and a CUDA GPU.</li><li>Request access to the pretrained checkpoints separately.</li></ol></section><section><h2>Separate a described sound from the rest</h2><p>SAM Audio is a sound-separation model. In a meeting recording, specify a speaker, background music, or a horn with a natural-language description, time span, or visual cue. It returns the target signal and the remaining signal from the input mix. [Meta's SAM Audio overview](https://ai.meta.com/blog/sam-audio/) · [Official repository](https://github.com/facebookresearch/sam-audio)</p><ul><li><a href="https://localai.co.kr/en/guides/auk-local-audio-editing-guide">Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</a></li><li><a href="https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide">Make a two-speaker dialogue WAV with Fish Audio Drama 3</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Name the target sound with a short description.</figcaption></figure><section><h2>Prepare CUDA and checkpoint access</h2><p>Prepare Python 3.11+ and a CUDA-compatible GPU, then install the official repository. First request and receive checkpoint access on the SAM Audio Hugging Face model card. Clone the repository, place `meeting.wav` in its root, and authenticate with the Hugging Face CLI.</p><div><p><strong>Install from a clone of the official repository</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/facebookresearch/sam-audio.git
cd sam-audio
python -m pip install .</code></pre></div><div><p><strong>Authenticate and prepare the input recording</strong></p><pre><code data-guide-code-block="1-1">python -m pip install "huggingface_hub[cli]"
hf auth login
# Enter the token in the interactive prompt
cp /path/to/meeting.wav ./meeting.wav</code></pre></div></section><section><h2>Describe the target sound precisely</h2><p>Save the code below as `separate.py` and run it. The requested speech is saved to `target.wav`, and the remaining sound to `residual.wav`. Keep `meeting.wav` in the repository root; outputs use the processor’s sample rate.</p><div><p><strong>Text-prompt separation pattern</strong></p><pre><code data-guide-code-block="2-0">from sam_audio import SAMAudio, SAMAudioProcessor
import torchaudio
import torch

checkpoint = "facebook/sam-audio-large"
model = SAMAudio.from_pretrained(checkpoint).eval().cuda()
processor = SAMAudioProcessor.from_pretrained(checkpoint)
batch = processor(audios=["meeting.wav"], descriptions=["speech"]).to("cuda")
with torch.inference_mode():
    result = model.separate(batch, predict_spans=False, reranking_candidates=1)
sample_rate = processor.audio_sampling_rate
torchaudio.save("target.wav", result.target[0].cpu().unsqueeze(0), sample_rate)
torchaudio.save("residual.wav", result.residual[0].cpu().unsqueeze(0), sample_rate)</code></pre></div><div><p><strong>Run the separation script</strong></p><pre><code data-guide-code-block="2-1">python separate.py</code></pre></div></section><section><h2>Review both target and residual signals</h2><p>Check whether the target contains only the intended speaker or effect, and whether the residual still contains background speech you need. Results depend on the source recording and prompt. If needed, narrow the description, such as `one person's speech`, or rerun with the official time-span prompting method.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A desk with headphones, a microphone, and a transcription workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen to the isolated target and the remaining background separately.</figcaption></figure><section><h2>Distinguish general separation from vocal removal</h2><p>SAM Audio is a general audio-separation tool that targets speech, instruments, and sound effects using text, video, or time spans. For vocal removal, you can try a `singing voice` prompt on a music mix, but do not assume the quality or workflow matches a dedicated vocal/accompaniment model. Listen for distortion, reverb artifacts, and missing instruments in both outputs.</p></section><section><h2>Check checkpoint terms and access conditions</h2><p>Checkpoint approval grants access to the model files, but it does not grant rights to separate or share voices in a recording. Notify participants and follow your organization’s retention policy for meeting or counseling audio.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A recorder, notes, and headphones for reviewing speech recognition" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use a time span or video cue to narrow the sound you want.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=music">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Meta's SAM Audio isolates a sound from a complex recording using a text description, visual cue, or time span. The official example runs on a CUDA GPU and requires requesting access to pretrained checkpoints and authenticating. It is a general audio source-separation tool for speech, music, and sound effects, not a dedicated vocal-removal model.</dd></div><div><dt>When is it better not to choose this?</dt><dd>SAM Audio is a general audio-separation tool that targets speech, instruments, and sound effects using text, video, or time spans. For vocal removal, you can try a `singing voice` prompt on a music mix, but do not assume the quality or workflow matches a dedicated vocal/accompaniment model. Listen for distortion, reverb artifacts, and missing instruments in both outputs.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Which embedding model should you use for Korean document search? Qwen3, BGE, and EmbeddingGemma 2</title><link>https://localai.co.kr/en/guides/korean-embedding-model-comparison-qwen3-bge-gemma2</link><guid isPermaLink="true">https://localai.co.kr/en/guides/korean-embedding-model-comparison-qwen3-bge-gemma2</guid><description>Compare Qwen3-Embedding, BGE-M3, and EmbeddingGemma 2 on the same PDF and questions, including retrieval quality, indexing time, vector size, and reranker latency.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Which embedding model should you use for Korean document search? Qwen3, BGE, and EmbeddingGemma 2</h1><p>Check whether each model finds the right passage for the same questions.</p><p id="guide-page-summary">Use a leave-policy PDF as a shared test corpus, record retrieval and indexing results, and run one model at a time on CPU with a Hit@5 baseline.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Hold the PDF, passages, queries, and gold IDs constant; change only the model.</li><li>Record Hit@5 for answerable queries and indexing and search times separately.</li></ol></section><section><h2>Compare on the same leave-policy PDF</h2><p>Qwen3-Embedding, BGE-M3, and EmbeddingGemma 2 are embedding models that turn queries and documents into numeric vectors to find relevant passages. Compare the three models' search results using the same vacation-policy PDF and queries. A reranker compares retrieved candidates with the query again and adjusts their order; a separate LLM writes the final answer.</p><p>We will search a leave-policy PDF for the passage answering whether an employee at six months of service can take summer leave. Compare extracted text with the PDF and assign an expected passage ID to each query.</p><ul><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/colpali-visual-pdf-retrieval-guide">Find PDF pages without OCR: a ColPali and ColQwen guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Documents are split into search passages, with selected passages sent to a local computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Split documents the same way to compare models fairly.</figcaption></figure><section><h2>Match checkpoints and input formats</h2><p>Qwen3-Embedding-0.6B supports a 32K input and 1,024-dimensional vectors in its official table, and recommends a task instruction on the query. BGE-M3 supports 8,192 tokens and dense, sparse, and multi-vector paths; its dense example does not add a query instruction. This comparison starts with dense retrieval.</p><p>EmbeddingGemma 2 can load a 270M text-only configuration and supports 128, 256, 512, or 768 dimensions. Use its text task prefixes and start at the native dimension. Parameter count and vector dimension do not equal on-disk index size, so measure that separately.</p><table><caption>Text retrieval settings listed in the model cards</caption><thead><tr><th scope="col">Model</th><th scope="col">Default vector</th><th scope="col">Query input</th></tr></thead><tbody><tr><th scope="row">Qwen3-Embedding-0.6B</th><td>1,024 dimensions · 32K</td><td>English retrieval instruction</td></tr><tr><th scope="row">BGE-M3</th><td>1,024 dimensions · 8,192</td><td>No extra instruction in dense example</td></tr><tr><th scope="row">EmbeddingGemma 2</th><td>768 dimensions · 8,192</td><td>SearchQuery prefix</td></tr></tbody></table></section><section><h2>Measure one model at a time on CPU</h2><p>Compare the three models one at a time with the same `corpus.json` and `questions.json`; the script stops if either file is missing. For answerable queries with one gold passage, Hit@5 is the fraction whose gold ID appears in the top five. Queries with `gold_ids: []` are reported separately.</p><p>It prints model-load, document-embedding, and query-search times. `.npy` size covers only the numeric vector array, not a vector-database index or metadata; this code reports the array only.</p><p>Save the two JSON arrays below as files with those exact names, and save the Python code as `qwen_retrieval_baseline.py`. The two-passage sample only demonstrates the format; use a larger work corpus for Hit@5 comparison.</p><div><p><strong>corpus.json</strong></p><pre><code data-guide-code-block="2-0">[
  {"id":"p-001","title":"여름휴가 자격","text":"입사 6개월 이상인 직원은 여름휴가를 신청할 수 있습니다."},
  {"id":"p-002","title":"신청 기한","text":"사용 희망일 14일 전까지 신청해야 합니다."}
]</code></pre><p><small>Add work passages using the same fields.</small></p></div><div><p><strong>questions.json</strong></p><pre><code data-guide-code-block="2-1">[
  {"id":"q-001","text":"입사 6개월 차도 여름휴가를 신청할 수 있나요?","gold_ids":["p-001"]},
  {"id":"q-002","text":"퇴직 후 미사용 휴가를 현금으로 받나요?","gold_ids":[]}
]</code></pre><p><small>Use an empty `gold_ids` array for no-answer queries.</small></p></div><div><p><strong>Create the environment</strong></p><pre><code data-guide-code-block="2-2">python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python -m pip install 'sentence-transformers&gt;=5.0' numpy FlagEmbedding
python qwen_retrieval_baseline.py --model qwen
python qwen_retrieval_baseline.py --model bge
python qwen_retrieval_baseline.py --model gemma</code></pre><p><small>A minimal CPU setup for running one model at a time. The first run downloads model weights.</small></p></div><div><p><strong>qwen_retrieval_baseline.py — run a fixed corpus</strong></p><pre><code data-guide-code-block="2-3">import argparse, json, time
from pathlib import Path
import numpy as np
MODELS = {"qwen":"Qwen/Qwen3-Embedding-0.6B", "bge":"BAAI/bge-m3", "gemma":"google/embeddinggemma-2"}
INSTRUCTION = "Instruct: Given a Korean policy question, retrieve passages that answer the question\nQuery: "
p = argparse.ArgumentParser(); p.add_argument("--model", choices=MODELS, required=True); args=p.parse_args()
for name in ("corpus.json", "questions.json"):
    if not Path(name).is_file(): raise SystemExit(f"Missing {name}; save the JSON example first.")
docs_data=json.loads(Path("corpus.json").read_text(encoding="utf-8")); questions=json.loads(Path("questions.json").read_text(encoding="utf-8"))
if not docs_data or not questions: raise SystemExit("Both JSON files need records.")
start=time.perf_counter()
if args.model=="bge":
    from FlagEmbedding import BGEM3FlagModel
    model=BGEM3FlagModel(MODELS[args.model], use_fp16=False, devices=["cpu"])
else:
    from sentence_transformers import SentenceTransformer
    kw={"device":"cpu"}
    if args.model=="gemma": kw["config_kwargs"]={"vision_config":None,"audio_config":None}
    model=SentenceTransformer(MODELS[args.model], **kw)
load_s=time.perf_counter()-start
docs=[f"title: {d.get('title','none')} | text: {d['text']}" for d in docs_data]
start=time.perf_counter()
if args.model=="bge": vectors=model.encode(docs,batch_size=2,max_length=8192)["dense_vecs"]
else: vectors=model.encode(docs,batch_size=2,normalize_embeddings=True,convert_to_numpy=True)
vectors=np.asarray(vectors,dtype=np.float32); index_s=time.perf_counter()-start
out=Path(f"{args.model}-vectors.npy"); np.save(out,vectors)
hits=answerable=0; no_answer=[]; rows=[]; start=time.perf_counter()
for q in questions:
    gold=q.get("gold_ids",[])
    if not gold: no_answer.append(q["id"]); continue
    if len(gold)!=1: raise ValueError(f"Exactly one gold ID required: {q['id']}")
    text=q["text"]
    if args.model=="qwen": text=INSTRUCTION+text
    if args.model=="gemma": text="task: search result | query: "+text
    if args.model=="bge": qv=model.encode([text],batch_size=1,max_length=8192)["dense_vecs"][0]
    else: qv=model.encode([text],normalize_embeddings=True,convert_to_numpy=True)[0]
    top=np.argsort(vectors@np.asarray(qv,dtype=np.float32))[-5:][::-1]; ids=[docs_data[i]["id"] for i in top]
    hit=gold[0] in ids; hits+=hit; answerable+=1; rows.append({"query_id":q["id"],"hit_at_5":bool(hit),"top5_ids":ids})
search_s=time.perf_counter()-start
print(json.dumps({"model":args.model,"model_load_s":round(load_s,3),"document_embedding_s":round(index_s,3),"query_search_s":round(search_s,3),"answerable_queries":answerable,"hit_at_5":hits/answerable if answerable else None,"no_answer_query_ids":no_answer,"raw_vector_array_bytes_in_ram":int(vectors.nbytes),"raw_npy_file_bytes_only":out.stat().st_size,"top5":rows},ensure_ascii=False,indent=2))</code></pre><p><small>Save as `qwen_retrieval_baseline.py`, then run the commands below.</small></p></div></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="Cards organize the expected evidence for each query" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Marking the expected passage shows whether retrieval missed a condition.</figcaption></figure><section><h2>Compare rerankers on the same candidates</h2><p>This code covers dense first-stage retrieval only. To test reranking, save candidate IDs returned for the same queries and send the shared candidate set separately to `BAAI/bge-reranker-v2-m3` or `Qwen/Qwen3-Reranker-0.6B`.</p><p>Measure candidate generation and reranking separately, then compare gold rank and Hit@5 before and after reranking. The current code does not run a reranker.</p><ul><li><a href="https://github.com/QwenLM/Qwen3-Embedding">Qwen3 embedding and reranker repository</a></li><li><a href="https://huggingface.co/BAAI/bge-m3">BGE-M3 model card</a></li><li><a href="https://huggingface.co/google/embeddinggemma-2">EmbeddingGemma 2 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two computers compare document indexing and retrieval results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record quality and time together to see how each model affects your work.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Use a leave-policy PDF as a shared test corpus, record retrieval and indexing results, and run one model at a time on CPU with a Hit@5 baseline.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Search text, photos, video, and audio in one index with Jina v5 Omni</title><link>https://localai.co.kr/en/guides/jina-v5-omni-local-multimodal-search-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/jina-v5-omni-local-multimodal-search-guide</guid><description>Use the shared space of Jina v5 text-small and omni-small to keep text documents indexed while adding image, video, and audio queries. Review licensing and storage needs.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Search text, photos, video, and audio in one index with Jina v5 Omni</h1><p>Keep a text index and query it with other modalities.</p><p id="guide-page-summary">Jina v5 Omni maps text, images, video, and audio into a shared 1,024-dimensional space aligned with text-small. It uses CC BY-NC 4.0, so review the terms before commercial use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Index text with text-small and query with images, video, or audio through omni-small.</li><li>It has 1.74B parameters, 1,024-dimensional vectors, and a CC BY-NC 4.0 license.</li></ol></section><section><h2>Keep the text index and add query types</h2><p>Jina v5 Omni can encode photos, video, and audio as retrieval vectors. This demo embeds meeting notes with text-small and a photo query with aligned omni-small, then ranks them in the shared space. It performs one in-memory search and does not persist or reuse an index.</p><p>Run `make_meeting_slide.py` to create `meeting-slide.jpg`. Save the search code as `jina_search.py` and run it; the matching meeting note should rank above the unrelated note.</p><div><p><strong>jina_search.py — search notes from a photo</strong></p><pre><code data-guide-code-block="0-2">from PIL import Image
from sentence_transformers import SentenceTransformer

text_model = SentenceTransformer(
    "jinaai/jina-embeddings-v5-text-small",
    revision="dd76d535f5447ca3897a9c893fb1e612ead98192",
    trust_remote_code=True,
    model_kwargs={"default_task": "retrieval"},
)
omni_model = SentenceTransformer(
    "jinaai/jina-embeddings-v5-omni-small",
    revision="950200abde3a3bcf3d5bdfe5d28fb5bb5e7dfbb0",
    trust_remote_code=True,
    model_kwargs={"default_task": "retrieval", "modality": "vision"},
)
minutes = [
    "title: Budget review | text: The team moved the Q4 review to Thursday at 10 a.m.",
    "title: Product launch | text: The launch checklist assigns the demo to Mina.",
]
doc_vectors = text_model.encode_document(minutes, normalize_embeddings=True)
photo = Image.open("meeting-slide.jpg").convert("RGB")
query_vector = omni_model.encode_query(photo, normalize_embeddings=True)
scores = omni_model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
    print(f"{float(scores[index]):.4f}\t{minutes[index]}")</code></pre><p><small>Both checkpoints are pinned to revisions checked on 2026-10-16.</small></p></div><div><p><strong>Install text and image retrieval dependencies</strong></p><pre><code data-guide-code-block="0-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U 'transformers&gt;=5.1' sentence-transformers pillow torch</code></pre></div><div><p><strong>make_meeting_slide.py — create the input image</strong></p><pre><code data-guide-code-block="0-1">from PIL import Image, ImageDraw

image = Image.new("RGB", (1000, 700), "#f4f1e8")
draw = ImageDraw.Draw(image)
draw.rounded_rectangle((70, 70, 930, 630), radius=24, fill="white", outline="#26354a", width=4)
draw.text((130, 145), "Q4 BUDGET REVIEW", fill="#26354a")
draw.text((130, 235), "Thursday | 10:00 AM", fill="#26354a")
draw.text((130, 335), "Agenda: operating costs and hiring plan", fill="#26354a")
image.save("meeting-slide.jpg", quality=92)
print("saved meeting-slide.jpg")</code></pre><p><small>Save this as `make_meeting_slide.py` and run it to create the sample image.</small></p></div><div><p><strong>Create the image and run search</strong></p><pre><code data-guide-code-block="0-3">python make_meeting_slide.py
python jina_search.py</code></pre><p><small>The first run downloads the checkpoints, then prints ranked notes and scores.</small></p></div><ul><li><a href="https://huggingface.co/jinaai/jina-embeddings-v5-omni-small">Jina v5 Omni model card</a></li><li><a href="https://huggingface.co/jinaai/jina-embeddings-v5-text-small">Jina v5 text-small model card</a></li><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/voice-workspace.webp" alt="A work desk with notes and recording equipment" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check retrieval from the text index before changing models.</figcaption></figure><section><h2>Measure the index trade-off on one corpus</h2><p>This minimal example loads text-small and omni-small in one process for a single search. For a reusable index, persist document vectors in a file or vector DB and record checkpoint revisions and task settings.</p><p>The card lists about 1.74B parameters, 1,024 dimensions, and a 32K maximum sequence length. That is an input limit, not unlimited video frames; record clip duration and sampling settings as well.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/voice-pipeline.webp" alt="Audio files move through processing stages into organized results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the same query as text, image, or audio.</figcaption></figure><section><h2>Check the retrieval task and license</h2><p>In Sentence Transformers, load the Omni model with `default_task='retrieval'`, then use `encode_query()` and `encode_document()`. Images, video, and audio can also be assigned a query or document role. Apply the same task adapter to the text-small index and omni-small query when comparing them.</p><p>The model card applies the CC BY-NC 4.0 license. Check the permitted scope before using the model for organizational work. In the results table, record the file types, index date, model revision, task, and index size.</p><p>If you plan to use this in a commercial service, do not pick this model first. The weights carry a non-commercial licence, so features that generate revenue need a model whose terms you have checked.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Find different file types in a shared vector space.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Jina v5 Omni maps text, images, video, and audio into a shared 1,024-dimensional space aligned with text-small. It uses CC BY-NC 4.0, so review the terms before commercial use.</dd></div><div><dt>How much memory does it need?</dt><dd>Jina v5 Omni can encode photos, video, and audio as retrieval vectors. This demo embeds meeting notes with text-small and a photo query with aligned omni-small, then ranks them in the shared space. It performs one in-memory search and does not persist or reuse an index.</dd></div><div><dt>When is it better not to choose this?</dt><dd>If you plan to use this in a commercial service, do not pick this model first. The weights carry a non-commercial licence, so features that generate revenue need a model whose terms you have checked.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card applies the CC BY-NC 4.0 license. Check the permitted scope before using the model for organizational work. In the results table, record the file types, index date, model revision, task, and index size.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Search English documents with a small model: UIBK-Embedding-v1</title><link>https://localai.co.kr/en/guides/uibk-embedding-v1-english-search-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/uibk-embedding-v1-english-search-guide</guid><description>Learn how UIBK-Embedding-v1 combines dense retrieval and late interaction for English documents, and track quality and storage as your corpus grows.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Search English documents with a small model: UIBK-Embedding-v1</h1><p>Use this English checkpoint for English retrieval experiments.</p><p id="guide-page-summary">UIBK-Embedding-v1 is a 179M English embedding model. It combines dense and token-level late-interaction scores, so evaluate corpus scale and index size together.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It is an English-only 179M checkpoint.</li><li>Measure token-level late-interaction storage as well as pooled vectors.</li></ol></section><section><h2>An encoder for English retrieval candidates</h2><p>UIBK-Embedding-v1 is a 179M model that encodes English queries and passages for retrieval. It combines dense vectors with token-level late-interaction scores in a PLAID search path, so the experiment should follow the documented retrieval workflow.</p><p>For example, fix a query and its gold page in 500 product-support documents, then grow the index through 100, 500, and 2,000 pages. Track retrieval success and token-level index growth.</p><ul><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Documents are split into search passages, with selected passages sent to a local computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>As documents grow, token-level representations add to vector storage.</figcaption></figure><section><h2>Use the PLAID path and supported language</h2><p>This example follows the documented PyLate ColBERT + PLAID path. It does not include a dense-only ablation. Its separate `./uibk-plaid-demo` folder and `support-demo` index name keep it away from existing indexes.</p><p>With four passages indexed and one query sent, it prints PLAID result IDs and scores. This small example checks the API path. For Recall@10 comparison, prepare a larger English query set with labeled gold documents.</p><div><p><strong>Index four passages in a separate PLAID demo index</strong></p><pre><code data-guide-code-block="1-1">from pylate import indexes, models, retrieve

model = models.ColBERT("DataScience-UIBK/uibk-embedding-v1", trust_remote_code=True)
document_ids = ["refund", "delivery", "battery", "warranty"]
documents = [
    "Refund requests are processed within five business days after cancellation.",
    "Delivery addresses can be changed before an order is prepared.",
    "The battery health report is available in Settings under Power.",
    "The limited warranty lasts for two years from the purchase date.",
]
index = indexes.PLAID(index_folder="./uibk-plaid-demo", index_name="support-demo", override=False)
doc_vectors = model.encode(documents, is_query=False, prompt_name="document")
index.add_documents(documents_ids=document_ids, documents_embeddings=doc_vectors)
search = retrieve.ColBERT(index=index)
query_vectors = model.encode(
    ["Where can I see the battery health report?"],
    is_query=True,
    prompt_name="query",
)
for result in search.retrieve(queries_embeddings=query_vectors, k=3)[0]:
    print(result)</code></pre></div><div><p><strong>Install the documented PyLate stack</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U pylate 'transformers&gt;=5.3' 'sentence-transformers&gt;=5.3'</code></pre></div><ul><li><a href="https://huggingface.co/blog/abdoelsayed/uibk-embedding-v1">Official UIBK-Embedding-v1 announcement</a></li><li><a href="https://huggingface.co/DataScience-UIBK/uibk-embedding-v1">UIBK-Embedding-v1 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="Cards organize the expected evidence for each query" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use fixed gold queries to compare English retrieval.</figcaption></figure><section><h2>Separate vector size from total index size</h2><p>As the corpus grows, record embedding time, query latency, Recall@10, and the size of the PLAID index directory. Late interaction retains token-level representations, so pooled vector bytes do not describe the full index.</p><p>For 200 queries, record the share whose gold passage appears in the top ten. If memory runs short, change batch size or index settings one at a time. Keep the checkpoint when quality and latency fit your current hardware.</p><p>If your documents are not in English, do not use this model as the baseline. Even for English, when retrieval scores fall short, change how you split passages and the chunk size first.</p><ul><li><a href="https://huggingface.co/blog/abdoelsayed/uibk-embedding-v1">Official UIBK-Embedding-v1 announcement</a></li><li><a href="https://huggingface.co/DataScience-UIBK/uibk-embedding-v1">UIBK-Embedding-v1 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two computers compare document indexing and retrieval results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure accuracy and actual index size together.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>UIBK-Embedding-v1 is a 179M English embedding model. It combines dense and token-level late-interaction scores, so evaluate corpus scale and index size together.</dd></div><div><dt>How much memory does it need?</dt><dd>For 200 queries, record the share whose gold passage appears in the top ten. If memory runs short, change batch size or index settings one at a time. Keep the checkpoint when quality and latency fit your current hardware.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Find PDF pages without OCR: a ColPali and ColQwen guide</title><link>https://localai.co.kr/en/guides/colpali-visual-pdf-retrieval-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/colpali-visual-pdf-retrieval-guide</guid><description>Learn how ColPali-style models retrieve PDF page images, how that differs from OCR and text extraction, and how to evaluate them on real documents.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Find PDF pages without OCR: a ColPali and ColQwen guide</h1><p>Search visual page representations; use a separate tool to extract text.</p><p id="guide-page-summary">ColPali takes PDF page images, creates a multi-vector representation for each page, and retrieves pages that match a query. Visual details such as table layout can also serve as search signals.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Retrieve PDF pages through visual representations.</li><li>Page retrieval and text extraction are separate tasks.</li></ol></section><section><h2>Treat each page as the search target</h2><p>ColPali takes PDF page images, creates a multi-vector representation for each page, and retrieves pages that match a query. It can use visible structure such as table layout, making page retrieval more layout-aware than searching only text extracted by OCR.</p><p>For a document set, define a question such as ‘the warranty period in the third table’ and record the source PDF page containing the answer. Retrieval narrows page candidates; it does not generate the final answer.</p><ul><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/korean-embedding-model-comparison-qwen3-bge-gemma2">Which embedding model should you use for Korean document search? Qwen3, BGE, and EmbeddingGemma 2</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-pdf-extraction.webp" alt="Text is extracted from a scanned PDF page" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Page layout and tables can act as retrieval cues.</figcaption></figure><section><h2>Evaluate retrieval and extraction separately</h2><p>Measure page retrieval as the share of queries whose gold page appears in the top k. Evaluate OCR separately with character error or field accuracy: finding a page does not prove that cell boundaries, reading order, or small text were extracted correctly.</p><p>Compare ColPali and ColQwen on the same PDFs and save page IDs, ranks, and search time. Verify the relevant table or passage in the original, then use OCR or a document parser when text is needed for citation.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="A long document split into overlapping context chunks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check retrieved pages against the source document.</figcaption></figure><section><h2>Check index size and page-rendering cost</h2><p>This code retrieves candidate pages using layout and tables. To compare ColPali with ColQwen, run both models with the same PDF, query, gold page, and rendering settings and collect their results.</p><p>The search example returns page numbers and scores as JSON. Check OCR character accuracy or field extraction quality in a separate parser experiment.</p><p>If your task is mostly pulling a single number from a table, you do not need a page-retrieval model first. When the document is only a few pages or already has clean OCR text, start with keyword search and a document parser.</p><div><p><strong>Install PDF rendering and the ColPali multivector API</strong></p><pre><code data-guide-code-block="2-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U 'sentence-transformers[image]&gt;=6.0.0' pymupdf pillow</code></pre></div><div><p><strong>make_report.py — create the sample PDF</strong></p><pre><code data-guide-code-block="2-1">import fitz

doc = fitz.open()
page = doc.new_page(width=595, height=842)
page.insert_text((72, 90), "Product comparison", fontsize=20)
page.insert_text((72, 150), "Model | Warranty", fontsize=13)
page.insert_text((72, 185), "Atlas | 2 years", fontsize=12)
page.insert_text((72, 220), "Nova | 1 year", fontsize=12)
page2 = doc.new_page(width=595, height=842)
page2.insert_text((72, 90), "Support contacts", fontsize=20)
page2.insert_text((72, 150), "Email: help@example.test", fontsize=12)
doc.save("report.pdf")
print("saved report.pdf")</code></pre><p><small>Save this as `make_report.py` and run it. The synthetic PDF is an input for checking the pipeline.</small></p></div><div><p><strong>colpali_search.py — search up to 20 pages and print JSON</strong></p><pre><code data-guide-code-block="2-2">import fitz, json, time
from PIL import Image
from sentence_transformers import MultiVectorEncoder

pdf_path = "report.pdf"
query = "Which page shows the warranty period in the comparison table?"
model = MultiVectorEncoder("vidore/colqwen2.5-v0.2")
page_images = []
start = time.perf_counter()
with fitz.open(pdf_path) as pdf:
    for page_number in range(1, min(len(pdf), 20) + 1):
        page = pdf[page_number - 1]
        pix = page.get_pixmap(matrix=fitz.Matrix(1.5, 1.5), alpha=False)
        image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        page_images.append((page_number, image))
query_vectors = model.encode_query([query])
page_vectors = model.encode_document([image for _, image in page_images])
scores = model.similarity(query_vectors, page_vectors)[0]
ranked = scores.argsort(descending=True).tolist()[:5]
print(json.dumps({"query": query, "pages_rendered": len(page_images), "elapsed_s": round(time.perf_counter() - start, 3), "top_pages": [{"page": page_images[i][0], "score": float(scores[i])} for i in ranked]}, indent=2))</code></pre><p><small>Save this as `colpali_search.py`. It renders at most the first 20 pages.</small></p></div><div><p><strong>Create the PDF and run search</strong></p><pre><code data-guide-code-block="2-3">python make_report.py
python colpali_search.py</code></pre><p><small>Weights download on first run; top pages are printed as JSON.</small></p></div><ul><li><a href="https://github.com/illuin-tech/colpali">Official ColPali repository</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-diagnosis.webp" alt="A retrieval issue is checked against extracted text and passage order" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record retrieval separately from extraction and indexing.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ColPali takes PDF page images, creates a multi-vector representation for each page, and retrieves pages that match a query. Visual details such as table layout can also serve as search signals.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Parse PDFs into structured output with PaddleOCR-VL 1.6</title><link>https://localai.co.kr/en/guides/paddleocr-vl-1-6-local-document-parsing-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/paddleocr-vl-1-6-local-document-parsing-guide</guid><description>Walk through PaddleOCR-VL 1.6 PDF parsing from installation to output, and distinguish structured extraction from page retrieval.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Parse PDFs into structured output with PaddleOCR-VL 1.6</h1><p>Extract text and document structure from PDFs into Markdown and JSON.</p><p id="guide-page-summary">PaddleOCR-VL 1.6 reads text and document elements from PDF pages and returns them as Markdown or JSON. You can compare the parsed output with the source before using it for search indexing or further review.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The example command explicitly selects the v1.6 pipeline.</li><li>Compare JSON and Markdown outputs with the source PDF.</li></ol></section><section><h2>What document parsing produces</h2><p>PaddleOCR-VL 1.6 is a parser that reads text and document elements from PDF pages and returns them as Markdown or JSON. Markdown can be reviewed by a person or added to a search index, while JSON can support page- and element-level processing.</p><p>For a scanned contract, parse one PDF and compare clause numbers, table rows, and pages with the source. This guide selects the v1.6 pipeline released in May 2026; do not mix v1.5 figures into a v1.6 result.</p><ul><li><a href="https://localai.co.kr/en/guides/gliner2-5-schema-extraction-local-guide">Extract fields from English text with GLiNER2.5</a></li><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Build a local AI workflow with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-pdf-extraction.webp" alt="Text is extracted from a scanned PDF page" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check page numbers and reading order in parsed output.</figcaption></figure><section><h2>Install and run the first document</h2><p>This example uses the Linux CPU or Apple Silicon CPU path. Put one PDF in the working directory as `contract_scan.pdf`; `--save_path ./output` prints structured JSON and saves result files in that output folder.</p><p>The official PaddleOCR docs show `--device cpu` for Apple Silicon. For a Linux CPU environment, install `paddlepaddle&gt;=3.2.1` and `paddleocr[doc-parser]&gt;=3.6.0`. This recipe does not cover a GPU-only install.</p><div><p><strong>Install PaddleOCR-VL 1.6 and parse a PDF</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U "paddlepaddle&gt;=3.2.1" "paddleocr[doc-parser]&gt;=3.6.0"
# Put your PDF at ./contract_scan.pdf
paddleocr doc_parser -i ./contract_scan.pdf --pipeline_version v1.6 --device cpu --save_path ./output</code></pre><p><small>Example for Linux CPU or Apple Silicon CPU. Put your PDF at `contract_scan.pdf`; results are saved under `./output`.</small></p></div><ul><li><a href="https://www.paddleocr.ai/v3.6.0/version3.x/pipeline_usage/PaddleOCR-VL.html">Official PaddleOCR 3.6.0 usage docs</a></li><li><a href="https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6">PaddleOCR-VL 1.6 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="A long document split into overlapping context chunks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare tables and body text with the source before chunking.</figcaption></figure><section><h2>Separate extraction quality from retrieval quality</h2><p>Sample 20 source pages and review body text, tables, and reading order; note missing characters or merged cells. Then index the extracted text with a fixed chunking rule so parser errors can be separated from embedding errors.</p><p>The model card's OmniDocBench v1.6 score belongs to that benchmark setup; it does not guarantee results on your contracts or scans. Compare parse success, human correction time, and JSON/Markdown size on your own sample.</p><ul><li><a href="https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6">PaddleOCR-VL 1.6 official model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-diagnosis.webp" alt="A retrieval issue is checked against extracted text and passage order" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Diagnose extraction errors separately from retrieval errors.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>PaddleOCR-VL 1.6 reads text and document elements from PDF pages and returns them as Markdown or JSON. You can compare the parsed output with the source before using it for search indexing or further review.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card's OmniDocBench v1.6 score belongs to that benchmark setup; it does not guarantee results on your contracts or scans. Compare parse success, human correction time, and JSON/Markdown size on your own sample.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to evaluate JEV-35B NVFP4 inference on B200</title><link>https://localai.co.kr/en/guides/jev-35b-nvfp4-decision-inference-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/jev-35b-nvfp4-decision-inference-guide</guid><description>Distinguish the merged BF16 JEV-35B from its NVFP4 LoRA variant, then plan an evaluation around the NVFP4 card's memory and tested hardware scope.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How to evaluate JEV-35B NVFP4 inference on B200</h1><p>Start with the 25.6 GB weights and the card's B200-tested scope.</p><p id="guide-page-summary">JEV-35B takes a situation, a question, and a set of choices, then returns a probability for each choice and a decision. The NVFP4 deployment compresses the expert weights to reduce the download size.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>B200 is the hardware tested on the NVFP4 card.</li><li>The NVFP4 LoRA and merged BF16 checkpoints are distinct releases.</li></ol></section><section><h2>Identify the release variant first</h2><p>JEV-35B takes a situation, a question, and a set of choices, then returns probabilities for the choices and a decision. For example, it can take a customer inquiry and choose billing, shipping, or technical support. The model is based on Qwen3.5-35B-A3B with a decision head and adapter added.</p><p>The NVFP4 deployment compresses the expert weights, reducing the download to 25.6GB; the weights occupied 23.3GiB in vLLM. The public run record lists a B200 as the test device. The card lists only kernel paths for the RTX 5090, RTX PRO 6000, and DGX Spark, so compatibility on those systems still needs to be checked.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/jev-system-one-model-explained">What is Jev? A System One model that decides instead of writing</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A system chooses among fixed options for a request on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect the decision output separately from chat responses.</figcaption></figure><section><h2>Evaluate decisions on the same requests</h2><p>The example sends one ticket to the NVFP4 server to inspect its response. For accuracy, label at least 100 tickets and aggregate separately; compare BF16 by running each checkpoint independently and keeping results apart. The request below covers one NVFP4 call only.</p><p>The published NVFP4 run reports single-request medians of 227 ms for text and 371 ms for images on one B200. It used a sequential workload of 387 text and 200 image requests. On your server, repeat the same tickets and record decision accuracy plus p50/p95 latency.</p></section><figure><img src="https://localai.co.kr/guides/jev-qwen-direct-logits.webp" alt="A view comparing candidate scores and selecting the highest" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare on the same ticket set as other decision models.</figcaption></figure><section><h2>Keep the two recipes separate</h2><p>This procedure is for NVFP4 only. `hf download` requires the Hugging Face CLI, and the card says `serve.sh` was tested with a September 2026 vLLM development build. The README does not specify an exact vLLM package version or commit, so that runtime must be prepared separately.</p><div><p><strong>Pin the NVFP4 card revision and start its documented server</strong></p><pre><code data-guide-code-block="2-0">python -m pip install -U huggingface_hub
hf download autotrust/JEV-35B-NVFP4 --revision 10c2c62610e315e31a75baca849ad79d526e4658 --local-dir JEV-35B-NVFP4
# Run this in the documented September 2026 vLLM development environment.
bash JEV-35B-NVFP4/serve.sh</code></pre><p><small>Prepare the card’s vLLM development runtime separately, then run this in the server terminal.</small></p></div><p>Run the server in terminal 1 and wait until it is ready. Leave it running, then send the curl request from terminal 2. This asks it to choose a department for one inquiry. The default port is 8000.</p><div><p><strong>Send a System 1 choice request</strong></p><pre><code data-guide-code-block="2-1">curl http://127.0.0.1:8000/v1/decide \
  -H 'Content-Type: application/json' \
  -d '{"kind":"choice","state":"Customer message: my card was charged twice for the same order.","question":"Which team should handle this ticket?","options":["billing","shipping","technical support","account security"]}'</code></pre></div><p>The request’s `options` define the allowed choices. A successful response returns per-option `probabilities`, the selected `choice`, its `choice_index`, and `usage`. Compare the choice with the labeled action and set a human-review cutoff for low-confidence tickets using your own labeled set.</p><p>This release uses Apache 2.0. Keep the model revision, runtime and gold labels with evaluation results so the next version can be tested on the same requests.</p><ul><li><a href="https://huggingface.co/autotrust/JEV-35B-NVFP4">Official JEV-35B NVFP4 model card</a></li><li><a href="https://huggingface.co/autotrust/JEV-35B">Official JEV-35B BF16 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-chat-versus-automation.webp" alt="A side-by-side view of chat answers and option-based decisions" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Do not confuse the decision API with chat generation.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=decision">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>JEV-35B takes a situation, a question, and a set of choices, then returns a probability for each choice and a decision. The NVFP4 deployment compresses the expert weights to reduce the download size.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The NVFP4 deployment compresses the expert weights, reducing the download to 25.6GB; the weights occupied 23.3GiB in vLLM. The public run record lists a B200 as the test device. The card lists only kernel paths for the RTX 5090, RTX PRO 6000, and DGX Spark, so compatibility on those systems still needs to be checked.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Compare Julia, Laya, and Kev decision models in llama.cpp</title><link>https://localai.co.kr/en/guides/llamacpp-decision-models-julia-laya-kev-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/llamacpp-decision-models-julia-laya-kev-guide</guid><description>Apply Julia-1, Laya, and Kev-4B to the same ticket set and compare structured decisions through /v1/systemone.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Compare Julia, Laya, and Kev decision models in llama.cpp</h1><p>Compare accuracy over fixed choices, not chat quality.</p><p id="guide-page-summary">Small decision models suit bounded choices such as classification, routing, or approval. Their languages and sizes differ, so check fit for your inputs first.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Julia-1 is multilingual; Laya and Kev-4B are English models.</li><li>Compare per-ticket decisions through /v1/systemone.</li></ol></section><section><h2>Choose from a bounded action set</h2><p>A decision model takes a ticket, a question, and a list of allowed actions, then selects one of them. A request to llama.cpp's `/v1/systemone` returns the selected action and its confidence. Since the output differs from a chat model's long-form natural-language answer, evaluate it mainly by accuracy and classification latency.</p><p>Julia-1 is multilingual; Laya and Kev-4B are English models. Save the server script and start exactly one with `MODEL=julia bash run_model.sh`, `MODEL=laya ...`, or `MODEL=kev ...`. Stop the current server before switching models.</p><ul><li><a href="https://localai.co.kr/en/guides/jev-ollama-local-decision-guide">Run Jev in Ollama: get classifications and probabilities instead of prose</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A system chooses among fixed options for a request on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Return a choice from a fixed set through the API.</figcaption></figure><section><h2>Test identical tickets and action schemas</h2><p>Start the selected model in terminal 1, then send the same ticket and action question from terminal 2. Keep question names and action choices consistent, but adapt the request JSON to each project’s API; do not assume every API accepts the same schema.</p><div><p><strong>Terminal 2 — print the selected action and confidence</strong></p><pre><code data-guide-code-block="1-1">curl http://127.0.0.1:8080/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{"state":"I was charged twice for my subscription.","questions":{"route":{"type":"choice","instructions":"Which team should handle this inquiry?","criteria":{"billing":"Payments, charges and refunds","access":"Login and account access","security":"Suspicious activity and account protection"}}}}' | python -c 'import json,sys; a=json.load(sys.stdin)["answers"]["route"]; print(json.dumps({"choice":a["choice"],"confidence":a["confidence"]},indent=2))'</code></pre><p><small>Send this request from terminal 2 to the server in terminal 1 and read the chosen action and score.</small></p></div><p>The response puts the selected action in `answers.route.choice` and its probability in `answers.route.confidence`. For example, `billing` with confidence `0.86` means the ticket was routed to billing. Do not treat this as a universal threshold; use labeled tickets to assess accuracy and unanswered cases, then set a human-review threshold.</p><div><p><strong>run_model.sh — start a server for the selected MODEL</strong></p><pre><code data-guide-code-block="1-0">curl -LsSf https://llama.app/install.sh | sh
python -m pip install -U huggingface_hub
MODEL=${MODEL:?Set MODEL=julia, laya, or kev}
case "$MODEL" in
  julia) REPO=ggml-org/Julia-1-GGUF; FILE=Julia-1-Q8_0.gguf; REV=16fee17949206fbf58da9347daea44d792a81211 ;;
  laya) REPO=ggml-org/Laya-GGUF; FILE=Laya-Q8_0.gguf; REV=22265007700297ba9e128297e82540cf28c5d7d4 ;;
  kev) REPO=ggml-org/Kev-4B-GGUF; FILE=Kev-4B-Q4_K_M.gguf; REV=d924f2e2c3872da8b8aaf3eb4453b4126deceb79 ;;
  *) echo "Set MODEL=julia, laya, or kev" &gt;&amp;2; exit 2 ;;
esac
hf download "$REPO" "$FILE" --revision "$REV" --local-dir "./models/$MODEL"
llama-server -m "./models/$MODEL/$FILE" --host 127.0.0.1 --port 8080 --ctx-size 4096</code></pre><p><small>Save as `run_model.sh` and start the terminal-1 server with e.g. `MODEL=kev bash run_model.sh`. Stop it before restarting with `MODEL=julia` or `MODEL=laya`.</small></p></div></section><figure><img src="https://localai.co.kr/guides/jev-qwen-direct-logits.webp" alt="A view comparing candidate scores and selecting the highest" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Model size and language differ, so evaluate on identical inputs.</figcaption></figure><section><h2>Read hardware figures with their test conditions</h2><p>The published latency measurements use RTX PRO 6000. They describe that device, runtime, and request setup—not guaranteed speed on a 4090, 5090, or laptop GPU. Re-run the same request set on your device.</p><p>A smaller, faster model is not always preferable. For costly mistakes, add a confidence threshold or human review; shortlist a model only when language, allowed actions, and latency fit.</p><p>If the task needs generated answer sentences, do not use a decision model. These only pick among defined options, so steps that need explanation belong with a general LLM.</p><ul><li><a href="https://huggingface.co/blog/ggml-org/decision-models-in-llamacpp">Official llama.cpp decision-model comparison</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-chat-versus-automation.webp" alt="A side-by-side view of chat answers and option-based decisions" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Evaluate chat responses and automated decisions separately.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=decision">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Small decision models suit bounded choices such as classification, routing, or approval. Their languages and sizes differ, so check fit for your inputs first.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Extract fields from English text with GLiNER2.5</title><link>https://localai.co.kr/en/guides/gliner2-5-schema-extraction-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gliner2-5-schema-extraction-local-guide</guid><description>Run the English base checkpoint of GLiNER2.5 locally and save product, error-code, and issue fields from a support message with its source text as JSON.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Extract fields from English text with GLiNER2.5</h1><p>Extract predefined fields from English inquiries and save them with the source.</p><p id="guide-page-summary">GLiNER2.5 takes a sentence and the names of the items to find, then returns those items with spans from the original text. This example extracts a product name, error code, and issue description from English support text and saves them as a JSON record.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The model card's base checkpoint is English-focused.</li><li>This example extracts fields; it does not extract relations.</li></ol></section><section><h2>Extract structured data instead of generating prose</h2><p>GLiNER2.5 is an information extraction model. It takes a sentence and the names of the items to find, then returns those items with their spans in the original text. This example extracts a product name, error code, and issue description from English support text and saves them as a JSON record.</p><p>The official repository presents `fastino/gliner2.5-base-v1` as its recommended English checkpoint and documents `pip install "gliner2[local]"`. Do not assume equivalent quality on Korean text; validate on English samples first.</p><ul><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/paddleocr-vl-1-6-local-document-parsing-guide">Parse PDFs into structured output with PaddleOCR-VL 1.6</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Documents are split into search passages, with selected passages sent to a local computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Define the document type and extraction questions first.</figcaption></figure><section><h2>Start with a small schema</h2><p>Choose one document type, define entity names and relation direction, then load the model with `AutoExtractor.from_pretrained("fastino/gliner2.5-base-v1")` and supply the field, relation, and attribute schema.</p><p>Save the Python code below as `extract.py`. It stores `source_id`, original text, and the model response in one file so reviewers can compare output with its source.</p><div><p><strong>extract.py — extract fields and save JSON</strong></p><pre><code data-guide-code-block="1-1">import json
from gliner2 import AutoExtractor

model = AutoExtractor.from_pretrained("fastino/gliner2.5-base-v1")
source_id = "ticket-001"
text = "The Atlas 14 laptop stopped charging with error E-204 after the March update."
schema = {"product": [
    "name::str::Product name and model",
    "error_code::str::Error code mentioned in the report",
    "issue::str::What went wrong",
]}
result = model.extract_json(text, schema)
record = {"source_id": source_id, "text": text, "extraction": result}
with open("extraction.json", "w", encoding="utf-8") as f:
    json.dump(record, f, ensure_ascii=False, indent=2)
print(json.dumps(record, ensure_ascii=False, indent=2))</code></pre></div><div><p><strong>Install GLiNER2.5 for local inference</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U "gliner2[local]"</code></pre></div><div><p><strong>Run the extraction</strong></p><pre><code data-guide-code-block="1-2">python extract.py</code></pre><p><small>This writes `extraction.json` with the original text and returned fields.</small></p></div></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="Cards organize the expected evidence for each query" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Track misses and false positives on a fixed sample.</figcaption></figure><section><h2>Audit results by field</h2><p>Prepare 100 human-labeled sentences and measure entity-span precision/recall, relation precision/recall, and JSON parse success separately. A single aggregate score can hide fields that are often missed or linked incorrectly.</p><p>Record correction time and the downstream cost of incorrect relations. If documents are not English or contain complex layouts, first verify that OCR output matches the model's text-input assumptions.</p><p>If you must preserve table structure or convert a whole document at once, compare a document parser before an entity-extraction model. This guide only finds the fields you define, so cells and reading order still need separate checks.</p><ul><li><a href="https://github.com/fastino-ai/GLiNER2">Official GLiNER2 repository</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two computers compare document indexing and retrieval results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Evaluate extraction separately from downstream retrieval.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>GLiNER2.5 takes a sentence and the names of the items to find, then returns those items with spans from the original text. This example extracts a product name, error code, and issue description from English support text and saves them as a JSON record.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Retrieve English documents with UltraBERT-Embed-150M</title><link>https://localai.co.kr/en/guides/ultrabert-embed-150m-english-retrieval-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ultrabert-embed-150m-english-retrieval-guide</guid><description>Review the English-only UltraBERT embedding checkpoint's context, license, and evaluation workflow, while distinguishing it from the backbone models.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Retrieve English documents with UltraBERT-Embed-150M</h1><p>Evaluate the retrieval-ready Embed-150M checkpoint, not the backbone.</p><p id="guide-page-summary">A 150M embedding model for English document retrieval. The model-card example requires `trust_remote_code=True`; review remote code before loading and evaluate on an English search set.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>UltraBERT-Embed-150M is the English retrieval checkpoint.</li><li>Treat it separately from the UltraBERT-150M and 380M backbones.</li></ol></section><section><h2>Choose the retrieval checkpoint</h2><p>UltraBERT is published as encoder backbones as well as a retrieval embedding checkpoint. Use `dmis-lab/UltraBERT-Embed-150M` for document search; do not treat `UltraBERT-150M` or `UltraBERT-380M` as interchangeable retrieval embedders.</p><p>The official card lists English-only use, 150M parameters, 768 dimensions, a 32K-token context, and Apache-2.0. Published MTEB results are benchmark figures, not measurements of your domain's retrieval accuracy or hardware speed.</p><ul><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/openrouter-free-open-weight-models-guide">Connect a Free Open-Weight Model on OpenRouter for Code Review</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Documents are split into search passages, with selected passages sent to a local computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Build a fixed set of English passages, queries, and gold IDs.</figcaption></figure><section><h2>Retrieve on the same English evaluation set</h2><p>The code embeds three English passages and prints their similarity rank for one query. It does not aggregate Hit@5 or Recall@10; use a larger labeled set to choose a model.</p><p>You can include multilingual models such as BGE-M3. For this experiment, keep every input and gold label in English and compare on the same corpus as UltraBERT-Embed-150M. Evaluate Korean separately with a Korean test set.</p><div><p><strong>UltraBERT-Embed-150M — three passages, one query</strong></p><pre><code data-guide-code-block="1-1">from sentence_transformers import SentenceTransformer

model = SentenceTransformer(
    "dmis-lab/UltraBERT-Embed-150M",
    revision="367d5343b5a0164d57b810cedf5de4b8983d5984",
    trust_remote_code=True,
)
documents = [
    "The battery health report is available in Settings under Power.",
    "Refunds are processed within five business days after cancellation.",
    "The delivery address can be changed before the order is prepared.",
]
query = "Where can I view the battery health report?"
doc_vectors = model.encode(documents, normalize_embeddings=True)
query_vector = model.encode(
    [query],
    prompt_name="query",
    normalize_embeddings=True,
)
scores = model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
    print(f"{float(scores[index]):.4f}\t{documents[index]}")</code></pre></div><div><p><strong>Install the UltraBERT retrieval environment</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U "sentence-transformers&gt;=6.0" "transformers&gt;=5"</code></pre></div></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="Cards organize the expected evidence for each query" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Track document length alongside retrieval rank.</figcaption></figure><section><h2>Review remote code and results</h2><p>The example uses `trust_remote_code=True` and pins model revision `367d5343b5a0164d57b810cedf5de4b8983d5984`. Review the repository code at that revision before running.</p><p>Keep English benchmark scores, your retrieval metrics, and local runtime in separate columns. If gold pages are missed or latency exceeds your target, adjust chunking or candidate count and measure again, even when the published score is strong.</p><p>If you need to search Korean documents, do not pick this model first. Compare it for finding the right passage inside English documents, and evaluate other languages with embedding models that name them.</p><ul><li><a href="https://huggingface.co/dmis-lab/UltraBERT-Embed-150M">UltraBERT-Embed-150M model card</a></li><li><a href="https://huggingface.co/blog/dmis-lab/ultrabert">UltraBERT release announcement</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two computers compare document indexing and retrieval results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare retrieval quality with latency and index size.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en?tab=workloads&amp;task=embedding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A 150M embedding model for English document retrieval. The model-card example requires `trust_remote_code=True`; review remote code before loading and evaluate on an English search set.</dd></div><div><dt>When is it better not to choose this?</dt><dd>If you need to search Korean documents, do not pick this model first. Compare it for finding the right passage inside English documents, and evaluate other languages with embedding models that name them.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Make a two-speaker dialogue WAV with Fish Audio Drama 3</title><link>https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide</guid><description>Use a speaker-tagged script, reference audio, and matching transcripts to create a multi-speaker WAV with Fish Audio Drama 3.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Make a two-speaker dialogue WAV with Fish Audio Drama 3</h1><p>Assign dialogue turns with speaker tags and match each voice to a reference clip.</p><p id="guide-page-summary">Drama 3 is a TTS model that takes speaker-tagged dialogue, reference audio, and transcripts to generate a WAV with multiple voices. Its local setup needs Linux or WSL, at least 48 GB of NVIDIA GPU memory, and the FP8 path.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It is a mixture-of-experts model with 35B total parameters and 3B active per token.</li><li>Pair speaker tags with reference audio and transcripts in order.</li><li>Local generation requires at least 48 GB of NVIDIA GPU memory for FP8.</li></ol></section><section><h2>Give the script speakers and delivery cues</h2><p>Fish Audio Drama 3 is a multi-speaker TTS model that turns a script into speech. Add speaker tags and dialogue, then provide a reference audio clip and its transcript for each voice to create one WAV with multiple speakers. It fits scenes or longer readings with recurring voice changes. [Drama 3 model card](https://huggingface.co/fishaudio/drama-3)</p><p>Drama 3 is a mixture-of-experts model with 35B total parameters and 3B active for each token. Its model card lists 83 languages, and the script can identify up to 16 speakers with tags from speaker 0 through speaker 15. Repeat a speaker's tag on each turn so the same character keeps the assigned voice.</p><p>Speaker tags identify who reads each line, while short bracketed cues describe a moment's delivery. The model card shows point tags such as [sighs] and [laughs]. Generate the passage and listen to whether the cue produces the delivery you intended.</p><ul><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/fish-s2-pro-local-voice-generation-guide">Generate expressive speech with Fish Audio S2 Pro</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/sam-audio-local-source-separation-guide">Separate voices and sounds in recordings with SAM Audio</a></li><li><a href="https://localai.co.kr/en/guides/auk-local-audio-editing-guide">Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker sit on a desk by a window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Speaker changes in the script determine where the voice changes in the WAV.</figcaption></figure><section><h2>Check GPU memory and runtime support first</h2><p>Fish Audio's current installation guide requires at least 48 GB of GPU memory for Drama 3 FP8. It supports NVIDIA GPUs on Linux or WSL. CPU, Apple MPS, AMD ROCm, and torch.compile are not supported, so choose another model if you need to generate on a Mac or CPU. [Official installation requirements](https://github.com/fishaudio/fish-speech/blob/main/docs/en/install.md#requirements)</p><p>The install guide lists 24 GB of GPU memory for S2-Pro and supports CPU or NVIDIA GPU inference. Drama 3's FP8 path needs at least 48 GB of NVIDIA GPU memory, so the two models target different hardware.</p><p>The published run used one concurrent stream on an H200 and a pre-encoded English Seed-TTS reference; the result aggregates four runs. The mean RTF and TTFA p50 are results for this setup.</p><table><caption>Official runtime requirements and the model card's streaming measurement</caption><thead><tr><th scope="col">Model</th><th scope="col">Local runtime requirement</th><th scope="col">Published measurement</th></tr></thead><tbody><tr><th scope="row">Drama 3</th><td>FP8, at least 48 GB NVIDIA GPU memory, Linux or WSL</td><td>One H200 stream: mean RTF 0.131 and TTFA p50 88.9 ms</td></tr><tr><th scope="row">S2-Pro</th><td>24 GB GPU memory listed; CPU or NVIDIA GPU supported</td><td>No S2-Pro result is included here for a direct comparison with Drama 3.</td></tr></tbody></table></section><section><h2>Install the CUDA runtime on Linux or WSL</h2><p>On Ubuntu or WSL, prepare Python 3.12 and an NVIDIA driver, then install the audio system packages listed by the repository. The commands below clone the source and install its CUDA 12.9 dependencies into the Python environment.</p><div><p><strong>Install the repository and CUDA dependencies on Ubuntu or WSL</strong></p><pre><code data-guide-code-block="2-0">sudo apt-get update &amp;&amp; sudo apt-get install -y portaudio19-dev libsox-dev ffmpeg
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"
git clone https://github.com/fishaudio/fish-speech.git
cd fish-speech
uv sync --python 3.12 --extra cu129</code></pre></div><p>After uv sync finishes, keep working from the repository directory. If your shell is elsewhere, change into fish-speech before continuing.</p></section><section><h2>Download the model files and prepare speaker references</h2><p>Download this Drama 3 revision into checkpoints/drama-3. It includes the codec.pth required for inference, so you do not need separate S2-Pro weights. The public model can be downloaded without a login token.</p><div><p><strong>Download Drama 3 and its included codec</strong></p><pre><code data-guide-code-block="3-0">uv pip install "huggingface_hub[cli]"
uv run hf download fishaudio/drama-3 --revision e0a9218aa48888270f06ef1ed9ea67622c0e17d2 --local-dir checkpoints/drama-3</code></pre></div><p>Save the two reference recordings as speaker0.wav and speaker1.wav in the fish-speech directory. Listen to each clip and transcribe its exact words. Use recordings with the speakers' permission.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Pair each speaker's reference clip with its matching transcript.</figcaption></figure><section><h2>Match two references to two speakers and save a WAV</h2><p>The CLI pairs reference audio and transcripts in the order you provide them. Put the exact words spoken in speaker0.wav after that clip, then the transcript for speaker1.wav. The lines below are examples; replace them with the actual words in your WAV files before running the command. Keep the script's speaker numbers in the same order.</p><p>The command pairs two reference WAVs with their transcripts, then switches speakers within one script. The official CLI accepts repeated reference-audio and transcript options. [Official Drama 3 CLI](https://github.com/fishaudio/fish-speech/blob/main/docs/en/inference.md#drama-3)</p><div><p><strong>Generate the two-speaker scene as drama-two-voices.wav</strong></p><pre><code data-guide-code-block="4-0">uv run python fish_speech/models/text2semantic/inference.py \
  --checkpoint-path checkpoints/drama-3 \
  --text "&lt;|speaker:0|&gt;제가 먼저 장면을 설명할게요. [laughs] &lt;|speaker:1|&gt;좋아요. 다음 대사를 이어가죠. [sighs]" \
  --prompt-audio speaker0.wav \
  --prompt-text "오늘은 새 전시를 소개합니다." \
  --prompt-audio speaker1.wav \
  --prompt-text "첫 번째 작품은 창가에 걸려 있어요." \
  --output drama-two-voices.wav \
  --device cuda:0</code></pre></div></section><section><h2>Check the voices and dialogue in the output WAV</h2><p>When the command completes, drama-two-voices.wav appears in the fish-speech directory. Listen through it to check voice changes, each line's pronunciation, and the placement of the laugh and sigh. If a voice sounds wrong, check that speaker's reference clip and transcript before generating again.</p><p>The example selects cuda:0 for one GPU. For multiple GPUs, pass the CLI's comma-separated device list and reserve memory on the last GPU for both the tower and codec.</p></section><section><h2>License terms: revenue threshold and delivery method</h2><p>Drama 3 ships with the Fish Audio Community License 1.0, updated October 13, 2026. It permits research and non-commercial use, plus limited commercial use when your and your affiliates' combined gross revenue from all sources over the preceding 12 months is below USD 500,000. If you install the model for a third party's operations or deliver them a copy of the model, that company must also meet the threshold. [Full license](https://huggingface.co/fishaudio/drama-3/blob/main/LICENSE)</p><p>A self-service API, website, or app where users request speech generation is a Hosted Service and needs a separate written license regardless of revenue or purpose. The license excludes speech for content or products you create or control, and production work where you operate the model and deliver only finished files. A free, non-commercial research or demo service is also excluded when it meets the stated conditions. Distribution requires the “Built with Fish Audio” attribution and a license copy; obtain consent before imitating an identifiable person's voice.</p><p>Checked October 16, 2026: Hugging Face metadata still shows the earlier Research License label. The conditions above follow the LICENSE text distributed with the current model.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="An audio player and headphones sit beside an open notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen through the whole file to check delivery and transitions between turns.</figcaption></figure><aside><h2>Check workload and execution time</h2><p>Choose a model configuration or calculate workloads from your own measurements.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=fish-drama-3">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Drama 3 is a TTS model that takes speaker-tagged dialogue, reference audio, and transcripts to generate a WAV with multiple voices. Its local setup needs Linux or WSL, at least 48 GB of NVIDIA GPU memory, and the FP8 path.</dd></div><div><dt>How much memory does it need?</dt><dd>Fish Audio's current installation guide requires at least 48 GB of GPU memory for Drama 3 FP8. It supports NVIDIA GPUs on Linux or WSL. CPU, Apple MPS, AMD ROCm, and torch.compile are not supported, so choose another model if you need to generate on a Mac or CPU. [Official installation requirements](https://github.com/fishaudio/fish-speech/blob/main/docs/en/install.md#requirements)</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Fish Audio Drama 3 is a multi-speaker TTS model that turns a script into speech. Add speaker tags and dialogue, then provide a reference audio clip and its transcript for each voice to create one WAV with multiple speakers. It fits scenes or longer readings with recurring voice changes. [Drama 3 model card](https://huggingface.co/fishaudio/drama-3)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What Is a World Model? How AI Generates the Next Scene Locally</title><link>https://localai.co.kr/en/guides/local-world-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-world-model-guide</guid><description>A world model predicts the next image or state from the current scene and an action. Compare the inputs, outputs, and local paths for Matrix-Game, DIAMOND, LingBot-World, Cosmos, GameCraft, and Oasis.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">What Is a World Model? How AI Generates the Next Scene Locally</h1><p>A world model uses the current scene and an action to produce a predicted next image or state.</p><p id="guide-page-summary">A world model takes a current scene and an action such as a key press or camera movement, then predicts the next frame or environment state. Implementations differ: Matrix-Game combines an engine with a neural renderer, DIAMOND models Atari environments, and Oasis generates video from a supplied action file.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The basic input-output loop predicts the next image or state from the current scene and an action.</li><li>In Matrix-Game 4.0, the game engine handles physics and input while the model renders the video.</li><li>The released Oasis 500M code reads an action file on a GPU and writes `video.mp4`.</li><li>Choose a project by its input format and runtime requirements.</li></ol></section><section><h2>A world model predicts the next state from the current scene</h2><p>A world model takes an environment’s current state and an action, then predicts the next state. When it works with game imagery, it can use a frame showing a character and a movement key to produce the next frame. Some models return frames or short clips; other systems connect to a game engine to render the next view. Start by checking whether the output is a video file or an interactive game session.</p><p>Action inputs vary by project: they may be keyboard buttons, a camera path, or a file of recorded controls. The model needs the current scene and its corresponding action to predict a continuation. [Matrix-Game 4.0](https://github.com/SkyworkAI/Matrix-Game/tree/main/Matrix-Game-4) handles game input and physics in its engine, while a neural video model renders the low-poly RGB view.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/matrix-game-4-rtx-5090-local-guide">Run the Matrix-Game 4.0 Local Browser Demo on an RTX 5090</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/diamond-local-world-model-guide">Run DIAMOND on a Mac: Play the CSGO world model with MPS</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A storyboard arranging several frames of a cyclist on a coastal road" width="1672" height="941" loading="lazy" decoding="async"><figcaption>A model can predict a following scene from the current one.</figcaption></figure><section><h2>Six different input paths sit under the same label</h2><p>Inputs and outputs vary by project. Choose the task you want, such as a keyboard-controlled game, an Atari simulator, video frames linked by camera conditions, a robot physics and action model, or a clip rendered from recorded controls. Then check the OS and model-file requirements in that project's repository.</p><p>[Matrix-Game 4.0](https://github.com/SkyworkAI/Matrix-Game/tree/main/Matrix-Game-4) uses a game engine for rules, physics, and input, then a video model renders the low-poly view as a stream. Its RTX 5090 preset supports a local browser demo on Linux.</p><p>The [DIAMOND CSGO path](https://github.com/eloialonso/diamond) runs a diffusion world model trained on Counter-Strike: Global Offensive scenes. Check out the repository’s `csgo` branch to start play; its README documents `PYTORCH_ENABLE_MPS_FALLBACK=1` for sending unsupported MPS operations to the CPU on Apple Silicon.</p><p>The [Apple Silicon fork of LingBot-World V2](https://huggingface.co/PandacatAI/lingbot-world-v2-mps) runs the 1.3B causal-fast model on a single MPS device. It is closer to extending video frames under camera conditioning than to a tool that creates a single still image.</p><p>[NVIDIA Cosmos3-Edge](https://huggingface.co/nvidia/Cosmos3-Edge) provides video and image generation plus dynamics and policy paths for physical AI. Its 4B model card separates generator and reasoner tasks, so first decide whether you want to continue a game view or work with actions and states in a robotics environment.</p><p>[Hunyuan-GameCraft](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0) generates game-like video from a reference image and keyboard-style camera actions. Its official Linux CUDA path lists 24 GB as the minimum single-GPU memory for the documented case and describes that configuration as very slow.</p><p>[Oasis 500M](https://github.com/etched-ai/open-oasis) is an offline example that takes an opening image or video and an action-sequence file, generates following frames, and saves `video.mp4`. The model card describes the website’s live demo as a larger version.</p></section><section><h2>A game engine and a neural renderer do different jobs</h2><p>In Matrix-Game 4.0, the engine calculates collisions, rules, and game state from keyboard input, while a neural video model renders a clean view of that state. The HUD and sound are synchronized outside the model-generated RGB frames.</p><p>Oasis `generate.py` takes a prepared control recording and creates a video file. It does not provide a UI for controlling a live game with key presses. If you need an interactive game session, look at a project such as Matrix-Game, which connects an engine, transport, and browser UI. Compare the [Matrix-Game architecture](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/README.md) with the [Oasis inference code](https://github.com/etched-ai/open-oasis/blob/master/generate.py) to see how their execution paths differ.</p></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Changing the action changes the predicted next frame.</figcaption></figure><section><h2>The input and hardware determine the local path</h2><p>For a Linux NVIDIA PC and browser-based control, see Matrix-Game’s RTX 5090 path. For single-device video generation on Apple Silicon, the LingBot-World MPS fork is a different option. If you want to pass an opening image and action trace to a Python script and inspect a saved clip, Oasis 500M is the more direct example.</p><p>Check each repository's terms before downloading model files. The Oasis checkpoint requires a Hugging Face login and review of its access conditions. The LingBot MPS fork lists CC BY-NC-SA 4.0, and the DIAMOND Atari path also has ROM licensing conditions. Download availability alone does not grant usage rights, so review the terms for the project, model, and ROM separately.</p></section><section><h2>Choose the output file or interaction you want first</h2><p>Your first path depends on whether you want to save a short clip, control a game in a browser, or work with states and actions in a robotics environment. For a first video file, follow the Oasis route that takes an opening image and action file. For an interactive game view, choose Matrix-Game’s engine and browser demo. Do not infer the local runtime from a model name or a website demo alone.</p><p>Next, use the [Matrix-Game 4.0 RTX 5090 guide](/guides/matrix-game-4-rtx-5090-local-guide) to prepare a local browser game, or the [Oasis 500M guide](/guides/oasis-500m-local-world-model-guide) to make `video.mp4` from an image and action file. Each page documents the runtime required by that project.</p></section><figure><img src="https://localai.co.kr/guides/local-video-hardware-tiers.webp" alt="Several workstations with video-editing displays and computers with graphics cards" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Check both the graphics hardware and input method when choosing a model.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A world model takes a current scene and an action such as a key press or camera movement, then predicts the next frame or environment state. Implementations differ: Matrix-Game combines an engine with a neural renderer, DIAMOND models Atari environments, and Oasis generates video from a supplied action file.</dd></div><div><dt>How much memory does it need?</dt><dd>[Hunyuan-GameCraft](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0) generates game-like video from a reference image and keyboard-style camera actions. Its official Linux CUDA path lists 24 GB as the minimum single-GPU memory for the documented case and describes that configuration as very slow.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Your first path depends on whether you want to save a short clip, control a game in a browser, or work with states and actions in a robotics environment. For a first video file, follow the Oasis route that takes an opening image and action file. For an interactive game view, choose Matrix-Game’s engine and browser demo. Do not infer the local runtime from a model name or a website demo alone.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>[NVIDIA Cosmos3-Edge](https://huggingface.co/nvidia/Cosmos3-Edge) provides video and image generation plus dynamics and policy paths for physical AI. Its 4B model card separates generator and reasoner tasks, so first decide whether you want to continue a game view or work with actions and states in a robotics environment.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run the Matrix-Game 4.0 Local Browser Demo on an RTX 5090</title><link>https://localai.co.kr/en/guides/matrix-game-4-rtx-5090-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/matrix-game-4-rtx-5090-local-guide</guid><description>Install Matrix-Game 4.0 on Linux with an RTX 5090, fetch the Ancient Egypt model and game assets, then launch the local browser demo with PyTorch CUDA and MediaMTX.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Run the Matrix-Game 4.0 Local Browser Demo on an RTX 5090</h1><p>The game engine calculates input and physics while the video model renders the view.</p><p id="guide-page-summary">Create a Python 3.12 environment with the CUDA 13.2 PyTorch packages in the Matrix-Game-4 repository and select the `rtx5090` preset. Download the Ancient Egypt model and game assets from manifest revision `2c53100457da7abcf0e966f75637c644d3423a63`, build the native game, then run MediaMTX and the model server. The local demo opens at `http://127.0.0.1:8025/`.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Run the inference server on Linux with Python 3.12 and an NVIDIA GPU.</li><li>The 5090 preset is `--preset rtx5090` and does not require a separate quantized checkpoint.</li><li>`--fps 40` is the game capture target cadence, not a model-throughput or latency measurement.</li><li>Open `http://127.0.0.1:8025/` on the server PC to reach the demo.</li></ol></section><section><h2>The engine runs the game, and the model renders its view</h2><p>Matrix-Game 4.0 runs an executable low-poly game: its game engine handles keyboard input and physics, while a causal video model streams clean RGB views. The HUD and sound are synchronized outside the renderer. This installation path uses one RTX 5090 to control the Ancient Egypt scene from a local browser. [Official v4 README](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/README.md)</p><ul><li><a href="https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/README.md">Official Matrix-Game 4.0 installation and run guide</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-world-model-guide">What Is a World Model? How AI Generates the Next Scene Locally</a></li><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-01.webp" alt="A monitor shows two mountain-road views beside a desktop computer and film reel" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The runtime needs both the game client and the inference server.</figcaption></figure><section><h2>Prepare the Linux and RTX 5090 runtime</h2><p>Inference requires Linux, an NVIDIA GPU, and Python 3.12. The same host that runs the browser demo also needs the native game and GStreamer; follow the official installation guide for system dependencies such as CMake, C++20, SDL2, and FFmpeg. A model-only test and the browser demo do not require identical setup.</p><p>The RTX 5090 path explicitly selects `rtx5090` or the optional `rtx5090-sage` preset. The standard `rtx5090` preset uses PyTorch SDPA and does not require SageAttention. The runtime does not automatically select a matching preset for other GPUs. The current README publishes the optimized path for the 5090 and lists 5080 and 5070 support as a later release. [RTX 5090 setup](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/README.md#rtx-5090)</p></section><section><h2>Install PyTorch and Matrix-Game in a virtual environment</h2><p>Clone the repository and enter its v4 folder. These commands create a Python 3.12 virtual environment, then install PyTorch 2.12.0 for CUDA 13.2 and the Matrix-Game inference, server, and download dependencies. Run them from the repository’s Matrix-Game-4 directory.</p><div><p><strong>Create the Python environment for an RTX 5090</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/SkyworkAI/Matrix-Game.git
cd Matrix-Game/Matrix-Game-4
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install torch==2.12.0 torchvision==0.27.0 --index-url https://download.pytorch.org/whl/cu132
python -m pip install -e '.[inference,server,download,test]'</code></pre></div></section><section><h2>Download Ancient Egypt files from the pinned revision</h2><p>Download the game data and model separately. Using the same official Hub revision, `2c53100457da7abcf0e966f75637c644d3423a63`, for both manifests keeps the asset list and checkpoint aligned with the code. The example saves the Ancient Egypt scene under `resources/`. Keep the downloaded files in this directory rather than moving them into Git-tracked source paths.</p><div><p><strong>Download the scene assets and checkpoint</strong></p><pre><code data-guide-code-block="3-0">matrix-game download --manifest releases/game-assets.json \
  --repo-id Skywork/Matrix-Game-4.0 --repo-type model \
  --revision 2c53100457da7abcf0e966f75637c644d3423a63 \
  --scene ancient-egypt --resources resources

matrix-game download --manifest releases/models.json \
  --repo-id Skywork/Matrix-Game-4.0 --repo-type model \
  --revision 2c53100457da7abcf0e966f75637c644d3423a63 \
  --scene ancient-egypt --resources resources</code></pre></div></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-02.webp" alt="A film strip shows several consecutive scenes of a cyclist moving along a road" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Control input changes the game state, and the model renders that state.</figcaption></figure><section><h2>Build the game and start both services</h2><p>After installing the native libraries and browser-demo media dependencies listed in the setup guide, build the game from `Matrix-Game-4/`. MediaMTX and the model server run in separate terminals, so leave each process open while you start the next one in another window. [Browser demo requirements](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/README.md#browser-demo)</p><div><p><strong>Build the game</strong></p><pre><code data-guide-code-block="4-0">bash scripts/build_game.sh</code></pre></div><div><p><strong>Terminal 1: start MediaMTX</strong></p><pre><code data-guide-code-block="4-1">mediamtx configs/mediamtx.yml</code></pre></div><div><p><strong>Terminal 2: start the RTX 5090 inference server</strong></p><pre><code data-guide-code-block="4-2">CUDA_VISIBLE_DEVICES=0 bash scripts/serve.sh \
  --scene ancient-egypt --resources resources --preset rtx5090 \
  --prompt-mode fixed --fps 40</code></pre></div></section><section><h2>Open the scene in a browser and isolate the first error</h2><p>When both processes are running, open `http://127.0.0.1:8025/` on the server PC. Use the controls and check that the scene and HUD appear. The `--fps 40` option sets the target cadence for capturing game frames. It does not measure 40 model-generated frames per second or a 1/40-second response after a key press. Browser decoding, transport, and buffering also affect the observed response.</p><p>If the page does not open, first check that the MediaMTX and model-server terminals are still running. If the server reports missing model files, run `matrix-game verify` from the repository root for both manifests to locate them. If CUDA initialization fails, check that this virtual environment has the CUDA 13.2 PyTorch build and that the NVIDIA driver supports the combination. Verification checks installed files and checksums without downloading the models again.</p><p>The browser demo is for a trusted single user, not an authenticated public service. HTTP, RTSP, and WebRTC bind to loopback by default, so do not expose them to the Internet by forwarding ports or changing firewall rules. If you need remote access, follow the documented SSH-forwarding procedure and security notes. [Official security guide](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/SECURITY.md)</p></section><figure><img src="https://localai.co.kr/guides/local-video-hardware-tiers.webp" alt="A studio with monitors showing video scenes and computers of different sizes" width="1672" height="941" loading="lazy" decoding="async"><figcaption>The computer illustration is not a screenshot of Matrix-Game 4.0.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Create a Python 3.12 environment with the CUDA 13.2 PyTorch packages in the Matrix-Game-4 repository and select the `rtx5090` preset. Download the Ancient Egypt model and game assets from manifest revision `2c53100457da7abcf0e966f75637c644d3423a63`, build the native game, then run MediaMTX and the model server. The local demo opens at `http://127.0.0.1:8025/`.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The browser demo is for a trusted single user, not an authenticated public service. HTTP, RTSP, and WebRTC bind to loopback by default, so do not expose them to the Internet by forwarding ports or changing firewall rules. If you need remote access, follow the documented SSH-forwarding procedure and security notes. [Official security guide](https://github.com/SkyworkAI/Matrix-Game/blob/main/Matrix-Game-4/SECURITY.md)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Oasis 500M Locally: Generate Game Video from an Image and Action File</title><link>https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide</guid><description>Set up Oasis 500M and ViT-VAE weights on Linux with NVIDIA CUDA, then create `video.mp4` from an opening image and action file. Includes access terms, sample inputs, and CUDA checks.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</h1><p>Give `generate.py` an opening image and action trace to save predicted frames as a video file.</p><p id="guide-page-summary">The released Oasis 500M inference code reads an opening image or video and an action file, then generates following frames conditioned on those controls. Clone `open-oasis` into a Linux NVIDIA CUDA environment, accept the Hugging Face access conditions yourself, download the DiT and ViT-VAE weights, and run `python generate.py` to save `video.mp4` in the working directory.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The defaults use a sample opening image and a one-hot action file.</li><li>The script requires CUDA and does not provide a real-time keyboard-control UI.</li><li>The expected result is `video.mp4` at the selected output path.</li><li>The released code does not specify a minimum VRAM requirement.</li></ol></section><section><h2>The action file conditions the next frames</h2><p>Oasis is a world model that generates the next game view from an opening scene and user actions. The released 500M inference code reads conditioning frames from an image or video, then uses a separate action file to generate following frames and save them as `video.mp4`. This is offline script-based inference, not a browser game with a live keyboard-control interface. [Official open-oasis repository](https://github.com/etched-ai/open-oasis)</p><p>The model card describes the website’s live demo as a more powerful version. Oasis 500M is a separately released checkpoint with its own inference code, so use this local path to create an output file rather than expecting the live demo’s latency or interaction. [Oasis 500M model card](https://huggingface.co/Etched/oasis-500m)</p><ul><li><a href="https://localai.co.kr/en/guides/local-world-model-guide">What Is a World Model? How AI Generates the Next Scene Locally</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/z-image-turbo-local-image-guide">Generate an image locally with Z-Image-Turbo</a></li><li><a href="https://localai.co.kr/en/guides/ltx-2-5-local-install-guide">Install LTX-2.5 locally and generate your first video</a></li><li><a href="https://localai.co.kr/en/guides/mmaudio-video-foley-local-guide">Add sound effects to a video with MMAudio</a></li><li><a href="https://localai.co.kr/en/guides/matrix-game-4-rtx-5090-local-guide">Run the Matrix-Game 4.0 Local Browser Demo on an RTX 5090</a></li><li><a href="https://localai.co.kr/en/guides/cosmos-3-edge-local-world-model-guide">Turn an image into a short video with Cosmos 3 Edge on DGX Spark</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A storyboard with an opening view of a coastal road followed by cycling frames" width="1672" height="941" loading="lazy" decoding="async"><figcaption>The model uses an opening frame and action trace to generate following frames.</figcaption></figure><section><h2>Use a Linux Python environment with a visible NVIDIA GPU</h2><p>The released `generate.py` starts by checking whether `torch.cuda.is_available()` is true. This code will not run with CPU-only PyTorch or on a device without available CUDA. The repository README installs PyTorch and torchvision from its CUDA 12.1 package index, then adds `einops`, `diffusers`, `timm`, and `av`. Before installing, confirm that your GPU and driver support the selected PyTorch CUDA package. The repository does not publish a minimum VRAM figure.</p><div><p><strong>Prepare the virtual environment and CUDA dependencies</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/etched-ai/open-oasis.git
cd open-oasis
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
python -m pip install einops diffusers timm av</code></pre></div></section><section><h2>Review the access terms and download both checkpoints</h2><p>Oasis files on Hugging Face require sign-in and acceptance of access conditions. Read the terms that apply to you on the model page, and continue under your own account only if you agree to the condition that shares contact information. Each user must make that decision; this guide does not accept the terms for you. The model card shows the access status. [Etched/oasis-500m](https://huggingface.co/Etched/oasis-500m)</p><p>Download two files: the DiT checkpoint `oasis500m.safetensors` and the ViT-VAE checkpoint `vit-l-20.safetensors`. Sign in to your own account with `hf auth login`, then use `--local-dir .` to save both in the current `open-oasis/` folder. Do not share your token or write it into manuscripts or source code. [Model-file instructions](https://github.com/etched-ai/open-oasis#download-the-model-weights)</p><div><p><strong>Sign in with your own account and download the released weights</strong></p><pre><code data-guide-code-block="2-0">python -m pip install -U huggingface_hub
hf auth login
hf download Etched/oasis-500m oasis500m.safetensors --local-dir .
hf download Etched/oasis-500m vit-l-20.safetensors --local-dir .</code></pre></div></section><section><h2>Generate the first clip from the sample image and action trace</h2><p>With both weight files in the repository root, run `python generate.py` from `open-oasis/`. The defaults use `sample_data/sample_image_0.png` and `sample_data/sample_actions_0.one_hot_actions.pt`, and write `video.mp4`. The first run loads the models onto the GPU and generates frames, so wait for the inference arguments and progress indicator to finish in the terminal. [Default paths in generate.py](https://github.com/etched-ai/open-oasis/blob/master/generate.py)</p><p>When the run finishes, open `open-oasis/video.mp4` and check that it contains frames following the opening scene. The script defaults to `--num-frames 32` and saves the video with `--fps 20`. This `--fps` value sets the video file’s playback frame rate; it does not measure model-generation speed. [Official basic usage](https://github.com/etched-ai/open-oasis#basic-usage)</p></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-01.webp" alt="A monitor shows a damaged landscape beside a restored version" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>This monitor scene is an editorial illustration from a video guide, not an Oasis run screenshot.</figcaption></figure><section><h2>Replace the opening image while keeping the sample action file</h2><p>To use your own PNG, JPG, or JPEG as the opening frame, set its path with `--prompt-path`. Leaving the default action file unchanged uses the example control sequence. To change the actions too, provide an `.actions.pt` or `.one_hot_actions.pt` file and set its path with `--actions-path`. `generate.py` reads the action array from that file and passes it into the frame-generation model.</p><p>Replace `/path/to/opening-frame.png` with the actual image path. For a video input, use `--video-offset` to select where to read and `--n-prompt-frames` to set the number of conditioning frames. Run `python generate.py --help` to see available options; `--num-frames` changes the output frame count.</p><div><p><strong>Start from a custom image</strong></p><pre><code data-guide-code-block="4-0">python generate.py \
  --prompt-path /path/to/opening-frame.png \
  --actions-path sample_data/sample_actions_0.one_hot_actions.pt \
  --output-path video.mp4</code></pre></div></section><section><h2>For CUDA or file errors, start with the device and paths</h2><p>If the script immediately raises `AssertionError`, check whether it failed the CUDA-availability assertion. In the activated environment, run `python -c 'import torch; print(torch.cuda.is_available(), torch.version.cuda)'`. If the first value is `False`, PyTorch cannot see a CUDA device. Install a CUDA build compatible with your GPU and driver, then run the check again. Oasis’s published setup command uses the CUDA 12.1 wheel index.</p><p>If the script cannot find a checkpoint, run `pwd` to confirm that you are in `open-oasis/`, then check that both `.safetensors` files are there. If you stored them elsewhere, pass their actual paths with `--oasis-ckpt` and `--vae-ckpt`. [Checkpoint options in the inference code](https://github.com/etched-ai/open-oasis/blob/master/generate.py)</p><p>Start with the default `.one_hot_actions.pt` file, then compare the opening frame with `video.mp4` when generation finishes. Change only the image or action file on the next run to isolate its effect. The repository does not publish minimum GPU memory. If CUDA or memory errors occur, reduce the output frame count with the supported `--num-frames` option and try again.</p></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>`video.mp4` is the output file containing the generated frames.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The released Oasis 500M inference code reads an opening image or video and an action file, then generates following frames conditioned on those controls. Clone `open-oasis` into a Linux NVIDIA CUDA environment, accept the Hugging Face access conditions yourself, download the DiT and ViT-VAE weights, and run `python generate.py` to save `video.mp4` in the working directory.</dd></div><div><dt>How much memory does it need?</dt><dd>The released `generate.py` starts by checking whether `torch.cuda.is_available()` is true. This code will not run with CPU-only PyTorch or on a device without available CUDA. The repository README installs PyTorch and torchvision from its CUDA 12.1 package index, then adds `einops`, `diffusers`, `timm`, and `av`. Before installing, confirm that your GPU and driver support the selected PyTorch CUDA package. The repository does not publish a minimum VRAM figure.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card describes the website’s live demo as a more powerful version. Oasis 500M is a separately released checkpoint with its own inference code, so use this local path to create an output file rather than expecting the live demo’s latency or interaction. [Oasis 500M model card](https://huggingface.co/Etched/oasis-500m)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run DIAMOND on a Mac: Play the CSGO world model with MPS</title><link>https://localai.co.kr/en/guides/diamond-local-world-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/diamond-local-world-model-guide</guid><description>Run DIAMOND's CSGO branch on an Apple Silicon Mac and control its generated game view. Follow the setup commands, Atari ROM licensing note, and first-run checks.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Run DIAMOND on a Mac: Play the CSGO world model with MPS</h1><p>Move and change your view while AI generates the next game frame.</p><p id="guide-page-summary">DIAMOND takes player actions and generates subsequent game frames with a diffusion world model. This guide uses the csgo branch of the original eloialonso/diamond repository and enables MPS CPU fallback to open the interactive view on Apple Silicon.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>This recipe stays on the original repository's `csgo` branch and does not mix in Atari's `--pretrained` command.</li><li>The command downloads the model and spawn data, then opens an interactive window and prints controls in the terminal.</li></ol></section><section><h2>The model takes an action and generates the next game view</h2><p>DIAMOND is a diffusion world model that generates the next game frame from the current view and a player action. In its research CSGO branch, you provide an action and the model repeatedly generates the next frame to continue the scene. The steps below use this interactive CSGO path on a Mac.</p><p>On a Mac, use the `csgo` branch of the original `eloialonso/diamond` repository. Enable CPU fallback for operations unsupported by MPS, then move and change your view inside the model-generated scene.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-world-model-guide">What Is a World Model? How AI Generates the Next Scene Locally</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A coastal cycling scene is arranged as a starting image and consecutive frames" width="1672" height="941" loading="lazy" decoding="async"><figcaption>A world model generates the next frame in response to an action.</figcaption></figure><section><h2>Prepare the original CSGO branch</h2><p>You need an Apple Silicon Mac and conda. The project specifies Python 3.10, and the CSGO play path downloads model weights plus spawn-point and player-action data from Hugging Face on first run. The published weight size is 1.5 GB. This path does not include Atari ROMs.</p><div><p><strong>Install the CSGO branch from the original repository</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/eloialonso/diamond.git
cd diamond
git switch csgo
conda create -n diamond python=3.10 -y
conda activate diamond
python -m pip install -r requirements.txt</code></pre><p><small>Clone the original repository and install its dependencies.</small></p></div></section><section><h2>Enable MPS fallback and open the interactive window</h2><p>Set the environment variable so PyTorch can route operations that MPS cannot handle to the CPU on Apple Silicon. The setting below applies only to this command. The first run downloads model files, so you need an internet connection and enough disk space.</p><div><p><strong>Run the CSGO world model</strong></p><pre><code data-guide-code-block="2-0">PYTORCH_ENABLE_MPS_FALLBACK=1 python src/play.py</code></pre><p><small>When the terminal prints the device and controls, press Enter to begin playing.</small></p></div><p>The generated game view appears in an interactive window. If startup stops, inspect the first traceback in the terminal, confirm that you are inside the repository, and check that `git branch --show-current` returns `csgo`.</p></section><section><h2>Check ROM rights before using the Atari example</h2><p>To try the Atari example, use the pretrained model on the default branch. This route downloads Atari ROMs with its dependencies, so first confirm that you have a license to use those ROMs. Continue with the commands below only after confirming your rights.</p><div><p><strong>Separate Atari route, only after confirming ROM rights</strong></p><pre><code data-guide-code-block="3-0">git switch main
conda create -n diamond-atari python=3.10 -y
conda activate diamond-atari
python -m pip install -r requirements.txt
python src/play.py --pretrained</code></pre><p><small>This runs the Atari world model and agent from the default branch. It is separate from the CSGO MPS command.</small></p></div></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-02.webp" alt="A film strip on a desk shows consecutive views of a cyclist in motion" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A frame sequence makes it easier to inspect how the model continues motion.</figcaption></figure><section><h2>Check the first-run error and display state</h2><p>For `No module named ...`, check that the `diamond` conda environment is active and verify the requirements installation in that environment. If model download stops, check the connection and available disk space for the Hugging Face file named in the error, then rerun the command. For an MPS operation error, confirm that `PYTORCH_ENABLE_MPS_FALLBACK=1` appears before the command.</p><p>If the startup log reports `mps`, it is using the Mac GPU. If it selects `cpu`, frame updates will be slower; check whether your PyTorch installation supports MPS first.</p></section><section><h2>Explore other world models</h2><p>After trying DIAMOND's interactive view, compare how other models accept input. The [world-model introduction](/guides/local-world-model-guide) explains the uses of six projects. To combine a game engine with AI rendering on an RTX 5090, continue with the [Matrix-Game 4.0 guide](/guides/matrix-game-4-rtx-5090-local-guide).</p><ul><li><a href="https://github.com/eloialonso/diamond/tree/csgo">CSGO branch and MPS instructions in the original DIAMOND repository</a></li><li><a href="https://github.com/dweam-team/diamond">Fork repository linking back to the original project</a></li><li><a href="https://pytorch.org/docs/stable/notes/mps.html">PyTorch MPS backend documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A monitor connected to a compact desktop computer shows code and conversation panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>In the play window, change your actions to see how the next view responds.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DIAMOND takes player actions and generates subsequent game frames with a diffusion world model. This guide uses the csgo branch of the original eloialonso/diamond repository and enables MPS CPU fallback to open the interactive view on Apple Silicon.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>To try the Atari example, use the pretrained model on the default branch. This route downloads Atari ROMs with its dependencies, so first confirm that you have a license to use those ROMs. Continue with the commands below only after confirming your rights.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</title><link>https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide</guid><description>Install PandacatAI's MPS fork, provide an image, camera path, and prompt, and save an MP4. Assemble the checkpoints, run a 480×832 generation command, and locate the output file.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</h1><p>Use the community 1.3B Mac port to generate an MP4 with camera motion.</p><p id="guide-page-summary">LingBot-World V2 takes a starting image, camera-action path, and text prompt to generate a continuing video. The Apple Silicon instructions use PandacatAI's community PyTorch MPS fork, with the 1.3B DiT plus shared encoder and VAE files, and save an MP4.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The upstream 1.3B package contains DiT weights only, so also prepare the shared T5, VAE, and tokenizer assets.</li><li>MLX is optional for the 8-bit text encoder only; video generation itself runs with PyTorch MPS.</li></ol></section><section><h2>Generate a continuing video from a starting image and action path</h2><p>LingBot-World V2 takes a starting image, an action path containing camera movement, and a scene prompt, then generates subsequent frames. On the Mac route, PyTorch MPS on Apple Silicon runs the 1.3B causal-fast DiT and saves the result as an MP4. This guide uses PandacatAI's Apple Silicon fork rather than the upstream CUDA multi-GPU path.</p><p>Changing any of the three inputs can change the generated scene. Start with the image and camera path in `examples/03` and use the supplied prompt so you can first confirm that the files and command are connected correctly.</p><ul><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/local-world-model-guide">What Is a World Model? How AI Generates the Next Scene Locally</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/z-image-turbo-local-image-guide">Generate an image locally with Z-Image-Turbo</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A cyclist on a coastal road appears in a starting image and a sequence of frames" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Keeping the starting image and camera path fixed makes generation conditions repeatable.</figcaption></figure><section><h2>Install the Mac fork and dependencies</h2><p>Prepare an Apple Silicon Mac and a Python environment. These steps download the MPS fork's code and configuration from Hugging Face, then install the dependencies listed in `requirements.txt` except the CUDA-only `flash_attn` line. Do not install that package on macOS.</p><div><p><strong>Install the MPS fork</strong></p><pre><code data-guide-code-block="1-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip huggingface_hub
hf download PandacatAI/lingbot-world-v2-mps --local-dir lingbot-world-v2-mps
cd lingbot-world-v2-mps
grep -v '^flash_attn
  

 requirements.txt &gt; requirements-mps.txt
python -m pip install -r requirements-mps.txt</code></pre><p><small>Create the macOS environment from the fork's requirements, excluding `flash_attn`.</small></p></div><p>`requirements-mps.txt` is the local install list with the CUDA package removed. If you see `hf: command not found`, run `python -m pip install -U huggingface_hub` in the active `.venv`, then restart the download.</p></section><section><h2>Assemble the 1.3B DiT and shared encoder/VAE files</h2><p>The 1.3B checkpoint contains the video-generating DiT weights. Also place the prompt-processing T5 encoder, the video VAE, and tokenizer files under `ckpt`. The commands below download both the original encoder and the optional MLX 8-bit encoder, so leave plenty of disk space. The video model and VAE run with PyTorch MPS.</p><div><p><strong>Download the checkpoint assets</strong></p><pre><code data-guide-code-block="2-0">python -m pip install -U huggingface_hub
hf download robbyant/lingbot-world-v2-1.3b-causal-fast --local-dir ckpt/transformers
hf download Wan-AI/Wan2.1-T2V-14B Wan2.1_VAE.pth --local-dir ckpt
hf download google/umt5-xxl --local-dir ckpt/google/umt5-xxl
python -m pip install mlx
hf download PandacatAI/umt5-xxl-enc-mlx-q8 --local-dir ckpt/umt5-xxl-enc-mlx-q8</code></pre><p><small>To skip the optional MLX 8-bit encoder, omit the last two commands.</small></p></div><p>After downloading, confirm that the 1.3B DiT is under `ckpt/transformers` and `Wan2.1_VAE.pth` is at the `ckpt` root. T5 and tokenizer files belong in `ckpt/google/umt5-xxl`. If you installed the 8-bit encoder, `ckpt/umt5-xxl-enc-mlx-q8` must exist for automatic selection. Add `--t5_backend torch` to the generation command to use the original bf16 encoder.</p></section><section><h2>Generate an MP4 from the fixed example inputs</h2><p>Start with the example image and camera-action path unchanged. `--frame_num 121` sets the requested frame count; the published run with these inputs wrote 109 frames. `--size '480*832'` sets the output size, and `--local_attn_size 18` with `--sink_size 6` configures causal context. Set the output path with `--save_file`.</p><div><p><strong>Generate the example video with MPS</strong></p><pre><code data-guide-code-block="3-0">mkdir -p output
python generate.py --task i2v-1.3B --size '480*832' --ckpt_dir ckpt --image examples/03/image.jpg --action_path examples/03 --frame_num 121 --local_attn_size 18 --sink_size 6 --prompt 'A serene lakeside scene with a lone tree standing in calm water, surrounded by distant snow-capped mountains under a bright blue sky with drifting white clouds, gentle ripples reflect the tree and sky, creating a tranquil, meditative atmosphere.' --save_file output/lingbot-mps-demo.mp4</code></pre><p><small>When generation finishes, play `output/lingbot-mps-demo.mp4` to inspect the result.</small></p></div><p>The completion message prints the save path and the specified MP4 should appear. If it does not, check that `ckpt_dir` and the image/action paths are valid relative to `lingbot-world-v2-mps`, then inspect `ckpt/transformers` and the shared T5/VAE directories.</p></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>More frames increase both the saved video length and generation time.</figcaption></figure><section><h2>Read the published Mac record with its conditions</h2><p>The Mac fork's published example takes several minutes even for a short clip. Start with its output size and frame count to check the wait and memory use before attempting a longer video.</p><table><caption>Published baseline on an M4 Pro with 48 GB</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Result</th></tr></thead><tbody><tr><th scope="row">Output</th><td>480×832 · 109 frames · 16 fps</td></tr><tr><th scope="row">Full generation time</th><td>14.4 minutes</td></tr><tr><th scope="row">Peak process footprint</th><td>16.1GB</td></tr></tbody></table><p>M4 Pro 48 GB · PyTorch MPS · 1.3B causal-fast · MLX 8-bit text encoder · prompt-cache hit · 121 requested/109 written frames · measured before the conditioning-encode optimization.</p><p>A later optimization reduced the conditioning-encode stage for the input image. In a same-process comparison for a 361-frame request, that stage fell from 1,048.6 to 349.6 seconds. The table below reports full generation before that change. With the current version, time the interval from the end of download and initialization until the MP4 is saved.</p><ul><li><a href="https://huggingface.co/PandacatAI/lingbot-world-v2-mps">README and Mac baseline in the Apple Silicon MPS fork</a></li></ul></section><section><h2>Check the input paths and license before wrapping up</h2><p>If Python does not detect MPS, run `python -c 'import torch; print(torch.backends.mps.is_available())'` in the active environment. If it does not print `True`, check the Apple Silicon PyTorch installation first. For checkpoint-path errors, inspect `ckpt/transformers`, `ckpt/Wan2.1_VAE.pth`, and `ckpt/google/umt5-xxl`. If the MP4 will not play, check the completion message and the file size of `output/lingbot-mps-demo.mp4`.</p><p>The upstream LingBot-World V2 and the Apple Silicon fork use CC BY-NC-SA 4.0. The license requires noncommercial use, attribution, and share-alike terms for adaptations. If you plan to redistribute or make derivatives, read the [full license](https://github.com/robbyant/lingbot-world-v2/blob/main/LICENSE.txt) and check the terms for each model and dataset. For NVIDIA execution conditions, see the [Cosmos 3 Edge guide](/guides/cosmos-3-edge-local-world-model-guide).</p><ul><li><a href="https://github.com/robbyant/lingbot-world-v2">LingBot-World V2 upstream repository</a></li><li><a href="https://huggingface.co/PandacatAI/lingbot-world-v2-mps">Apple Silicon MPS fork and run files</a></li><li><a href="https://github.com/robbyant/lingbot-world-v2/blob/main/LICENSE.txt">Full CC BY-NC-SA 4.0 license</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai-scene-1.webp" alt="Two small desktop computers sit beside stacks of memory blocks at different heights" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A compact Mac still needs enough unified-memory headroom for the run.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LingBot-World V2 takes a starting image, camera-action path, and text prompt to generate a continuing video. The Apple Silicon instructions use PandacatAI's community PyTorch MPS fork, with the 1.3B DiT plus shared encoder and VAE files, and save an MP4.</dd></div><div><dt>How much memory does it need?</dt><dd>The Mac fork's published example takes several minutes even for a short clip. Start with its output size and frame count to check the wait and memory use before attempting a longer video.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The upstream LingBot-World V2 and the Apple Silicon fork use CC BY-NC-SA 4.0. The license requires noncommercial use, attribution, and share-alike terms for adaptations. If you plan to redistribute or make derivatives, read the [full license](https://github.com/robbyant/lingbot-world-v2/blob/main/LICENSE.txt) and check the terms for each model and dataset. For NVIDIA execution conditions, see the [Cosmos 3 Edge guide](/guides/cosmos-3-edge-local-world-model-guide).</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Turn an image into a short video with Cosmos 3 Edge on DGX Spark</title><link>https://localai.co.kr/en/guides/cosmos-3-edge-local-world-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cosmos-3-edge-local-world-model-guide</guid><description>Use Cosmos 3 Edge on DGX Spark to turn an image and a JSON prompt into an MP4. Set up the ARM64 container, call the local API, and read published generation times in context.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Turn an image into a short video with Cosmos 3 Edge on DGX Spark</h1><p>Feed it a still image and JSON prompt; Cosmos 3 Edge returns a generated MP4.</p><p id="guide-page-summary">Cosmos 3 Edge's Generator turns a reference image and a video-oriented JSON prompt into a short clip. This guide starts the ARM64-capable vLLM-Omni container on DGX Spark, sends the published I2V sample image to a local API, and saves the returned MP4. The model card's DGX Spark timings are published results for 189 frames; read them as separate runtime paths. Text reasoning and action prediction belong to different tasks.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Cosmos 3 Edge's Generator creates an MP4 from a reference image and a video JSON prompt.</li><li>On DGX Spark, run the vLLM-Omni container as ARM64 and bind its API to a local port.</li><li>Published I2V timings use 480p and 189 frames; they are separate from Reasoner results and other GPUs.</li></ol></section><section><h2>It turns an image into a short MP4</h2><p>Cosmos 3 Edge is NVIDIA's world model for generating or interpreting physical-world content from text, images, and actions. This guide follows one Generator path: image-to-video (I2V). Send a still image and a structured JSON prompt describing the continuation; the API returns an MP4. Reasoner requests for action prediction or video understanding are separate workloads and should not be compared with these video-generation times. [Cosmos 3 Edge model card](https://huggingface.co/nvidia/Cosmos3-Edge)</p><p>DGX Spark is an ARM64 Linux system built around GB10. The official vLLM-Omni Cosmos3 image manifest includes `linux/arm64`, so this recipe selects that platform. The command binds the API only to `127.0.0.1`; the request uploads the image directly. [vLLM-Omni Cosmos3-Edge recipe](https://github.com/vllm-project/vllm-omni/blob/main/recipes/cosmos3/Cosmos3-Edge.md)</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A compact computer sits beside a monitor showing code and a chat window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A local model server turns the request into a saved video file.</figcaption></figure><section><h2>Start the ARM64 server on a local Docker port</h2><p>Prepare the NVIDIA driver and NVIDIA Container Toolkit on DGX Spark. For the default guardrails, first read the terms on the [Cosmos Guardrail model page](https://huggingface.co/nvidia/Cosmos-1.0-Guardrail) and obtain access for your own account. Then use the commands below to create a Python environment, sign in, and start the server. It is ready when the logs show `Application startup complete`. [DGX Spark User Guide](https://docs.nvidia.com/dgx/dgx-spark/)</p><div><p><strong>Run the Cosmos 3 Edge server locally</strong></p><pre><code data-guide-code-block="1-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U huggingface_hub requests
hf auth login
cosmos_cache="${HF_HOME:-$HOME/.cache/huggingface}"
mkdir -p "$cosmos_cache"
docker run --rm --name cosmos3-edge --platform linux/arm64 \
  --runtime nvidia --gpus all --ipc=host \
  -p 127.0.0.1:8000:8000 \
  -v "$cosmos_cache:/root/.cache/huggingface" \
  vllm/vllm-omni:cosmos3 \
  vllm serve nvidia/Cosmos3-Edge --omni --host 0.0.0.0 --port 8000 \
    --init-timeout 1800</code></pre></div><p>Leave the server running and open a second terminal in the same working directory. Reactivate the environment and download only the sample image and JSON prompts. Inspecting the output video requires `ffprobe`, included with FFmpeg.</p><div><p><strong>Download the official I2V example inputs</strong></p><pre><code data-guide-code-block="1-1">source .venv/bin/activate
hf download nvidia/Cosmos3-Edge --include "assets/*" --local-dir Cosmos3-Edge</code></pre></div></section><section><h2>Upload the sample image and structured prompt</h2><p>Move into the downloaded sample folder and run the Python client below. It reads the model card's JSON prompt and negative prompt, then uploads the image as a multipart request to the local server. The request asks for 121 frames at 832×480 and 24 fps; it writes the returned bytes to `cosmos3_edge_i2v.mp4` in the current directory. [I2V request format in the model card](https://huggingface.co/nvidia/Cosmos3-Edge)</p><div><p><strong>Send the I2V request and inspect the MP4</strong></p><pre><code data-guide-code-block="2-0">cd Cosmos3-Edge
python - &lt;&lt;'PY'
import json, mimetypes, requests
from pathlib import Path
prompt = json.load(open('assets/example_i2v_prompt.json'))
negative = json.load(open('assets/negative_prompt.json'))
image = Path('assets/example_i2v_input.jpg')
data = {
    'prompt': json.dumps(prompt),
    'negative_prompt': json.dumps(negative),
    'size': '832x480',
    'num_frames': '121',
    'fps': '24',
    'num_inference_steps': '20',
    'guidance_scale': '6.0',
    'max_sequence_length': '4096',
    'flow_shift': '12.0',
    'seed': '0',
    'extra_params': json.dumps({
        'use_resolution_template': False,
        'use_duration_template': False,
        'guardrails': True,
    }),
}
mime = mimetypes.guess_type(image.name)[0] or 'image/jpeg'
with image.open('rb') as file:
    response = requests.post('http://127.0.0.1:8000/v1/videos/sync', data=data, files={'input_reference': (image.name, file, mime)}, headers={'Accept': 'video/mp4'}, timeout=1800)
response.raise_for_status()
output = Path('cosmos3_edge_i2v.mp4')
output.write_bytes(response.content)
print(f'Saved {output} ({len(response.content):,} bytes)')
PY
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,nb_frames,r_frame_rate -of default=noprint_wrappers=1 cosmos3_edge_i2v.mp4</code></pre></div><p>The server returns the video bytes and the client saves them. Afterward, use `ffprobe` to inspect the video dimensions and frame count and confirm the request produced an MP4 file.</p></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A cyclist on a coastal road appears in one still image and several moving-scene frames." width="1672" height="941" loading="lazy" decoding="async"><figcaption>The reference image anchors the opening frame; the prompt describes what follows.</figcaption></figure><section><h2>Read the published generator timings as separate records</h2><p>On DGX Spark, the runtime affects how long the same image-to-video task takes. The table reports published generation of 189 frames. The shorter example above requests 121 frames, so keep the frame count alongside each timing.</p><table><caption>DGX Spark Generator image-to-video records in the model card</caption><thead><tr><th scope="col">Runtime</th><th scope="col">DGX Spark I2V latency</th></tr></thead><tbody><tr><th scope="row">vLLM-Omni</th><td>165.96 s</td></tr><tr><th scope="row">PyTorch</th><td>179.80 s</td></tr></tbody></table><p>DGX Spark · Generator I2V · 480p · 189 frames · one integrated platform · batch size 1. [Conditions and results](https://huggingface.co/nvidia/Cosmos3-Edge)</p><p>If the server will not start, check `docker info` for the NVIDIA runtime. For a 422 response, inspect the server log and request fields, then confirm the JPEG and official JSON files are under `Cosmos3-Edge/assets/`. An MP4 stream reported by `ffprobe` confirms the output file was written.</p></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-02.webp" alt="Several frames of a cyclist on a mountain road run across a strip of film." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Video output is a sequence of frames, so frame count and size affect generation time.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Cosmos 3 Edge's Generator turns a reference image and a video-oriented JSON prompt into a short clip. This guide starts the ARM64-capable vLLM-Omni container on DGX Spark, sends the published I2V sample image to a local API, and saves the returned MP4. The model card's DGX Spark timings are published results for 189 frames; read them as separate runtime paths. Text reasoning and action prediction belong to different tasks.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Cosmos 3 Edge is NVIDIA's world model for generating or interpreting physical-world content from text, images, and actions. This guide follows one Generator path: image-to-video (I2V). Send a still image and a structured JSON prompt describing the continuation; the API returns an MP4. Reasoner requests for action prediction or video understanding are separate workloads and should not be compared with these video-generation times. [Cosmos 3 Edge model card](https://huggingface.co/nvidia/Cosmos3-Edge)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Generate an action-controlled clip with Hunyuan-GameCraft on a 24 GB GPU</title><link>https://localai.co.kr/en/guides/hunyuan-gamecraft-24gb-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/hunyuan-gamecraft-24gb-local-guide</guid><description>Set up Hunyuan-GameCraft on Linux and use its official 24 GB single-GPU CPU-offload recipe to turn a reference image and camera actions into a video clip.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Generate an action-controlled clip with Hunyuan-GameCraft on a 24 GB GPU</h1><p>It turns a village image and keyboard-direction actions into a generated MP4 scene.</p><p id="guide-page-summary">Hunyuan-GameCraft takes a reference image, text prompt, and ordered movement inputs to generate video with a moving game camera. The official Linux CUDA example lists 24GB as the minimum GPU memory for its 704×1216 setup, but warns that it is very slow and recommends an 80GB GPU. Follow the steps to create an MP4 from the example village image with the default 50-step checkpoint.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Inputs are a reference image, scene description, and ordered keyboard-camera actions.</li><li>The official 24 GB single-GPU example uses CPU offload and FP8 and is very slow at 704×1216.</li><li>The base checkpoint uses 50 inference steps; the 8-step distilled model has separate weights and settings.</li></ol></section><section><h2>Continue a game scene from an image and movement inputs</h2><p>Hunyuan-GameCraft does not launch a game engine or simulate a playable game's physics. It takes a reference image, prompt, and camera actions derived from keyboard or mouse input, then generates the next scene as video. This example starts from the repository's `asset/village.png` and applies `w`, `a`, `d`, and `s` in order to create a clip moving through a village. It generates frame segments for the action sequence and saves an MP4. [Official Hunyuan-GameCraft repository](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0)</p><p>The authors' single-GPU path targets Linux, NVIDIA CUDA, and at least 24 GB of GPU memory. It uses 704×1216 output, CPU offload, and FP8 together. They describe the 24 GB minimum configuration as very slow and recommend an 80 GB GPU for better generation quality. The command below follows their low-memory example.</p><table><caption>GPU-memory guidance stated in the repository</caption><thead><tr><th scope="col">Setting</th><th scope="col">Authors' guidance</th></tr></thead><tbody><tr><th scope="row">Single GPU, 704×1216</th><td>24 GB minimum; very slow</td></tr><tr><th scope="row">For better generation quality</th><td>80 GB GPU recommended</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/oasis-500m-local-world-model-guide">Run Oasis 500M Locally: Generate Game Video from an Image and Action File</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-01.webp" alt="A monitor compares a noisy mountain-road clip with a clearer version side by side." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Generated frames continue from the composition of the reference scene.</figcaption></figure><section><h2>Set up the Linux environment with CUDA 12.4</h2><p>The repository's manual setup specifies CUDA 12.4, Python 3.10, and PyTorch 2.5.1. Run these commands on Linux with an NVIDIA driver compatible with the CUDA 12.4 runtime. FlashAttention 2 is the additional acceleration package listed by the repository. [Official installation guide](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0#-dependencies-and-installation)</p><p>Create and activate the environment from the repository root, then install PyTorch, the pinned dependencies, and FlashAttention. Continue running the next steps from the `Hunyuan-GameCraft-1.0` directory.</p><div><p><strong>Install the Linux environment and repository dependencies</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0.git
cd Hunyuan-GameCraft-1.0
conda create -n HYGameCraft python==3.10 -y
conda activate HYGameCraft
conda install pytorch==2.5.1 torchvision==0.20.0 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia -y
python -m pip install -r requirements.txt
python -m pip install ninja
python -m pip install git+https://github.com/Dao-AILab/flash-attention.git@v2.6.3</code></pre></div></section><section><h2>Download the checkpoints and locate the village image</h2><p>Check available storage before downloading the weights. The public Hugging Face download places the model files and standard components under `weights/`. Confirm that the required checkpoint paths exist; the input is the repository's `asset/village.png`, so no separate image file is needed. [Weight layout and download instructions](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0/blob/main/weights/README.md)</p><p>The commands enter `weights`, download the model repository, and check for both released checkpoints. If the first run reports a missing file, verify that the file names and directories match the documented layout.</p><div><p><strong>Download the GameCraft weights and check their paths</strong></p><pre><code data-guide-code-block="2-0">python -m pip install 'huggingface_hub&gt;=0.34,&lt;1.0'
cd weights
hf download tencent/Hunyuan-GameCraft-1.0 --local-dir ./
cd ..
test -f weights/gamecraft_models/mp_rank_00_model_states.pt
test -f weights/stdmodels/vae_3d/hyvae/pytorch_model.pt
test -f asset/village.png</code></pre></div></section><figure><img src="https://localai.co.kr/guides/swiftvr-restoration-workspace-repaired-20261016.webp" alt="A monitor shows a side-by-side coastal scene, with a film reel and a disconnected external SSD beside it." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>One generation extends a still image into a sequence of moving frames.</figcaption></figure><section><h2>Generate a clip with the base 50-step checkpoint</h2><p>This command follows the repository's single-GPU low-memory path. The 24 GB example enables CPU offload and FP8, starts from the reference image, and applies `w`, `a`, `d`, and `s` in order. Each action uses the repository example's speed value of 0.2. This is the base checkpoint with 50 inference steps. [Official low-memory inference example](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0#-single-gpu-with-low-vram-inference)</p><div><p><strong>Generate village.mp4 with the official 24 GB CPU-offload example</strong></p><pre><code data-guide-code-block="3-0">export PYTHONPATH="$PWD${PYTHONPATH:+:$PYTHONPATH}"
export MODEL_BASE=weights/stdmodels
export DISABLE_SP=1
export CPU_OFFLOAD=1
torchrun --nnodes=1 --nproc_per_node=1 --master_port 29605 hymm_sp/sample_batch.py \
  --image-path asset/village.png \
  --prompt "A charming medieval village with cobblestone streets, thatched-roof houses, and vibrant flower gardens under a bright blue sky." \
  --add-neg-prompt "overexposed, low quality, deformation, a poor composition, bad hands, bad teeth, bad eyes, bad limbs, distortion, blurring, text, subtitles, static, picture, black border." \
  --ckpt weights/gamecraft_models/mp_rank_00_model_states.pt \
  --video-size 704 1216 \
  --cfg-scale 2.0 \
  --image-start \
  --action-list w a d s \
  --action-speed-list 0.2 0.2 0.2 0.2 \
  --seed 250160 \
  --sample-n-frames 33 \
  --infer-steps 50 \
  --flow-shift-eval-video 5.0 \
  --cpu-offload \
  --use-fp8 \
  --save-path ./results_poor/</code></pre></div><p>If the first GPU run runs out of memory, check whether a file is already present under `results_poor/`, then retry with a shorter frame setting as a small test. The authors describe the 24 GB configuration as very slow. First verify whether the system is closer to their 80 GB recommendation and that both `CPU_OFFLOAD` and `--cpu-offload` are set. This model generates video offline.</p><div><p><strong>Inspect the saved village video</strong></p><pre><code data-guide-code-block="3-1">ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,nb_frames,r_frame_rate -of default=noprint_wrappers=1 results_poor/village.mp4</code></pre></div><p>The 8-step distilled version pairs `mp_rank_00_model_states_distill.pt` with `--infer-steps 8`, `--cfg-scale 1.0`, and `--use-fp8`. The command below uses the base checkpoint and 50-step setting. [Distilled example in the repository](https://github.com/Tencent-Hunyuan/Hunyuan-GameCraft-1.0#-parallel-inference-on-multiple-gpus)</p></section><figure><img src="https://localai.co.kr/guides/minimax-h3-first-last-frame.webp" alt="A paper boat starts beside a stream and reaches a bridge in the final frame." width="1672" height="941" loading="lazy" decoding="async"><figcaption>The starting image and movement actions jointly shape how the scene continues.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Hunyuan-GameCraft takes a reference image, text prompt, and ordered movement inputs to generate video with a moving game camera. The official Linux CUDA example lists 24GB as the minimum GPU memory for its 704×1216 setup, but warns that it is very slow and recommends an 80GB GPU. Follow the steps to create an MP4 from the example village image with the default 50-step checkpoint.</dd></div><div><dt>How much memory does it need?</dt><dd>The authors' single-GPU path targets Linux, NVIDIA CUDA, and at least 24 GB of GPU memory. It uses 704×1216 output, CPU offload, and FP8 together. They describe the 24 GB minimum configuration as very slow and recommend an 80 GB GPU for better generation quality. The command below follows their low-memory example.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Apple Minions? Sharing inference jobs across idle Macs</title><link>https://localai.co.kr/en/guides/apple-minions-idle-mac-inference-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/apple-minions-idle-mac-inference-guide</guid><description>How Apple Minions distributes embedding and LLM jobs across Macs, how that differs from model sharding, and when it helps document-search workloads.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is Apple Minions? Sharing inference jobs across idle Macs</h1><p>Give independent document jobs to different Macs.</p><p id="guide-page-summary">Minions is a distributed inference system published by Apple researchers. It sends embedding jobs or LLM requests to the GPUs of multiple Apple Silicon Macs, then collects their results. Teams processing document collections can consider sharing the work across Macs when they are idle.</p><p>Building document search requires time to turn each document into a retrieval vector. When many such jobs are waiting, consider distributing batches to available Macs. This is the use case in Apple's October 2026 research. [Apple Minions](https://machinelearning.apple.com/research/distributed-gpu-cloud)</p><p>People's Macs become available at different times. In Minions, an available Mac pulls a waiting job. When a device sleeps or loses its connection, its unfinished job returns to the queue for another Mac to take.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Split inference jobs into smaller units across Mac GPUs.</li><li>Judge usefulness by document throughput and queue time.</li></ol></section><section><h2>Sharing document embeddings across Macs</h2><p>Embedding turns a document's content into a numerical vector for search. Use the same model for every document, and you can later retrieve documents similar to a question. Since batches can be processed independently, different Macs can work on different documents.</p><p>Before building document search, agree on document IDs, the model version, and how documents are split. All Macs need to produce vectors using the same rules for comparison in one search index. Keep document IDs with the results so you can identify and remove duplicates after a retry.</p><ul><li><a href="https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide">Backburner: Accelerate Mac LLM Prefill with an iPhone</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Each Mac must be able to run the model assigned to its documents.</figcaption></figure><section><h2>When to use a job queue or model sharding</h2><p>The published design uses Hugging Face Transformers for embeddings and Ollama on each Mac for LLM completion. An executor caches the required model and computes the jobs it claims. [Research paper](https://arxiv.org/html/2610.12970v1)</p><p>A model that does not fit in one Mac's memory needs a runtime with model sharding. If each Mac can run the model and you have many documents, you can distribute the documents instead. The design depends on whether you need a larger model or more documents processed by the same model.</p><table><caption>Ways to use multiple Macs</caption><thead><tr><th scope="col">Your goal</th><th scope="col">Setup</th><th scope="col">First check</th></tr></thead><tbody><tr><th scope="row">Process a document collection</th><td>Job-level scheduling</td><td>Model fit on each Mac</td></tr><tr><th scope="row">Run a model too large for one Mac</th><td>Runtime with model sharding</td><td>Runtime and inter-device communication</td></tr></tbody></table></section><section><h2>Decide where documents may be sent</h2><p>The published design stores inputs and results in S3 and manages job status with a server and PostgreSQL. Each organization can designate its own participating Macs. For internal documents, choose the devices and restrict access to storage and job records to the people responsible for that work.</p><p>Start a personal multi-Mac experiment with public documents. Decide where originals are copied and when results and logs are deleted before extending it to sensitive documents. Manage both the machines performing inference and the route used to deliver files.</p></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose independent document jobs or model sharding for the capacity you need.</figcaption></figure><section><h2>How to judge whether your workload benefits</h2><p>For daily batch processing, record when the entire collection finishes rather than just one document's response time. Separate model download, queue wait, inference, and result collection to see where time was saved. Include failed and retried documents when assessing throughput.</p><p>Keeping several Macs running also increases electricity use. Enter each Mac's active hours and power in the electricity calculator, then compare total completion time and monthly cost with your existing server. If one machine already meets the deadline, weigh the management overhead first.</p><ul><li><a href="https://localai.co.kr/en?tab=electricity">Mac runtime and electricity cost calculator</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Include data transfer and retries in the total completion time.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Minions is a distributed inference system published by Apple researchers. It sends embedding jobs or LLM requests to the GPUs of multiple Apple Silicon Macs, then collects their results. Teams processing document collections can consider sharing the work across Macs when they are idle.</dd></div><div><dt>How much memory does it need?</dt><dd>A model that does not fit in one Mac's memory needs a runtime with model sharding. If each Mac can run the model and you have many documents, you can distribute the documents instead. The design depends on whether you need a larger model or more documents processed by the same model.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can a Mac Neural Engine run local AI? GPU, MLX, and ANE roles</title><link>https://localai.co.kr/en/guides/apple-neural-engine-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/apple-neural-engine-local-ai-guide</guid><description>What Apple Neural Engine does in speech recognition and LLMs, Core ML and MLX execution paths, and the role of M5 GPU Neural Accelerators.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Can a Mac Neural Engine run local AI? GPU, MLX, and ANE roles</h1><p>Use a model and runtime designed for the Neural Engine.</p><p id="guide-page-summary">Apple Neural Engine is dedicated hardware for neural-network computation. Core ML speech tools and some LLM projects can use it. To make local AI work well on your Mac, start with your task and check which GPU or Neural Engine path its runtime uses.</p><p>If you already use an LLM on your Mac, check its runtime first. There are MLX models running on the Metal GPU, Core ML models placed on the Neural Engine, and hybrid runtimes that share parts of prefill across the GPU and ANE. Your app and model format determine which path is available.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>WhisperKit and FluidAudio offer Core ML paths for speech recognition.</li><li>For LLMs, choose GPU execution, shared prefill, or an ANE-converted model.</li></ol></section><section><h2>Split transcription and summarization work</h2><p>ASR needs a speech-recognition model and software to organize its output. WhisperKit runs Whisper through Core ML, while FluidAudio runs speech models such as Parakeet. After choosing your model, inspect the Core ML report for operations assigned to the Neural Engine. This helps you judge whether speech processing can share work with other GPU tasks.</p><p>For meeting notes, transcribe the recording first and send that text to an LLM for summarization. Live captions can make these stages overlap, so compare latency with transcription and summarization running together. [WhisperKit](https://github.com/argmaxinc/argmax-oss-swift), [FluidAudio](https://github.com/FluidInference/FluidAudio)</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/offline-korean-transcription-whisper-cpp">Transcribe Korean recordings on your own computer with whisper.cpp</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the task before choosing a model format and runtime.</figcaption></figure><section><h2>LLMs can share the input-processing stage</h2><p>An LLM reads a long document during prefill before generating an answer. Runtimes such as Splash can split part of supported models' prefill across the GPU and Neural Engine. That path targets the wait between submitting a long document and receiving the first answer. [Splash](https://github.com/incoai/splash)</p><p>ANEMLL provides converted models and samples for trying LLM execution on ANE. It is a developer-oriented path with files prepared for particular architectures, context sizes, and conversions. For everyday chat, start with your current GPU runtime as the baseline and compare the wait after submitting long inputs. [ANEMLL](https://github.com/Anemll/Anemll)</p></section><section><h2>Where M5 GPU Neural Accelerators fit</h2><p>M5 GPU cores contain Neural Accelerators for matrix computation. MLX uses this GPU capability through Metal 4 TensorOps and Metal Performance Primitives. Apple's M5 MLX performance article describes that GPU path. [Apple MLX and M5](https://machinelearning.apple.com/research/exploring-llms-mlx-m5)</p><p>An app using the M5 GPU's Neural Accelerators computes on the GPU. To check Neural Engine use, inspect operations assigned to ANE in the Core ML report. When choosing a Mac, compare where your model runs and how quickly it finishes your work alongside the chip's TOPS specification.</p></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the first response to long documents separately from generation speed.</figcaption></figure><section><h2>Choose the app, then compare the same task</h2><p>For Korean recordings, start with a multilingual WhisperKit model; for several speech features in an app, consider FluidAudio. If you frequently send long documents to an LLM, compare Splash's shared-prefill approach too. Choose your task first, then the model and software that support it.</p><p>Record the initial model download and compilation time separately. Once preparation is complete, run the same recording or document twice to compare first-use and repeat completion times and results. Try the same task with your usual apps open. Follow the Core ML inspection guide to examine which devices perform the computation.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>You can separate Neural Engine transcription from GPU LLM work.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Apple Neural Engine is dedicated hardware for neural-network computation. Core ML speech tools and some LLM projects can use it. To make local AI work well on your Mac, start with your task and check which GPU or Neural Engine path its runtime uses.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Is the Neural Engine actually working? Inspect Core ML execution</title><link>https://localai.co.kr/en/guides/coreml-neural-engine-execution-check-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/coreml-neural-engine-execution-check-guide</guid><description>Use Xcode Performance reports to inspect CPU, GPU, and Neural Engine placement, loading and prediction time, then compare configurations for the same model.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Is the Neural Engine actually working? Inspect Core ML execution</h1><p>Inspect operation placement alongside completion time.</p><p id="guide-page-summary">Open a Core ML model in Xcode to inspect which operations run on the CPU, GPU, or Neural Engine and how long loading and prediction take. Compare All, CPU and GPU, and CPU and Neural Engine for the same model to choose a configuration on your Mac.</p><p>You need Xcode and an `.mlmodel` or `.mlpackage` to inspect. A report can be generated by opening the file without adding it to an app project. For GGUF or MLX files, compare through that runtime's logs; use this procedure when you have a Core ML conversion. [Apple performance inspection](https://developer.apple.com/documentation/coreml/analyzing-a-core-ml-model-s-performance-in-xcode)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Choose the device and Compute Units in the Performance tab.</li><li>Record operation placement, first execution, and repeat execution time.</li></ol></section><section><h2>Open the model and create an All report</h2><p>Open the model in Xcode and switch to Performance. Click the Add button at the lower left, select My Mac, choose All for Compute Units, and run the test. The completed report shows Prediction, Load, Compilation, and operation placement.</p><p>Close unnecessary apps so other work does not interfere during the test. Record the device name, macOS and Xcode versions, and model filename with the report. Keep the model file unchanged and vary only Compute Units to compare the effect of different execution devices.</p><ul><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/whisperkit-mac-korean-transcription-guide">Transcribe Korean recordings on a Mac with WhisperKit</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare execution settings on the same Mac and model.</figcaption></figure><section><h2>Compare allowed compute-unit configurations</h2><p>Create two more reports for the same model: CPU and GPU, and CPU and Neural Engine. Core ML places operations among the permitted devices, so read timing and placement together. [Core ML execution configuration](https://apple.github.io/coremltools/docs-guides/source/model-prediction.html)</p><table><caption>Configurations to compare for one model</caption><thead><tr><th scope="col">Setting</th><th scope="col">Allowed devices</th><th scope="col">Purpose</th></tr></thead><tbody><tr><th scope="row">All</th><td>CPU, GPU, ANE</td><td>Inspect default placement</td></tr><tr><th scope="row">CPU and GPU</th><td>CPU·GPU</td><td>GPU-path baseline</td></tr><tr><th scope="row">CPU and Neural Engine</th><td>CPU·ANE</td><td>Compare ANE participation</td></tr></tbody></table><p>Find operations marked as executing in the report's ANE column. In the All configuration, also inspect whether expensive operations are placed on the CPU, GPU, or ANE, then compare Prediction time with the other two settings. Choose the faster setting after checking that its output is correct.</p></section><section><h2>Separate startup from repeated execution</h2><p>Compilation prepares a model for execution, Load brings the prepared model into use, and Prediction computes the input. If the first run takes a long time, record downloads separately and inspect these three report metrics. Your wait also depends on whether the app reloads the model each time or keeps it loaded.</p><p>The report offers statistics such as Median and First. Record the repeated-run median for steady use, and first execution plus uncached loading if the app is restarted often. Prediction timing from an already-loaded model omits the wait a user experiences when opening the app.</p></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use both placement and completion time when choosing a setting.</figcaption></figure><section><h2>Check the same input in the actual app</h2><p>After finding a fast configuration, process the same recording or image in the app. Record completion time including preprocessing, file reading, and displaying the result. For transcription, also inspect omissions and misrecognized words before deciding to keep an optimization.</p><p>If a report cannot be generated, check that the model download is complete and that your macOS and Xcode versions support it. A CPU only report can establish whether the model itself runs. If only one device fails, record that report's error and the model version to investigate.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After the report, repeat with real files in your usual work environment.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Open a Core ML model in Xcode to inspect which operations run on the CPU, GPU, or Neural Engine and how long loading and prediction take. Compare All, CPU and GPU, and CPU and Neural Engine for the same model to choose a configuration on your Mac.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Close unnecessary apps so other work does not interfere during the test. Record the device name, macOS and Xcode versions, and model filename with the report. Keep the model file unchanged and vary only Compute Units to compare the effect of different execution devices.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Transcribe Korean recordings on a Mac with WhisperKit</title><link>https://localai.co.kr/en/guides/whisperkit-mac-korean-transcription-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/whisperkit-mac-korean-transcription-guide</guid><description>Transcribe recordings locally with a multilingual WhisperKit Core ML model. Covers installation, a first transcription, long recordings, and Neural Engine inspection.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Transcribe Korean recordings on a Mac with WhisperKit</h1><p>Turn the recording into text, then summarize it with your local LLM.</p><p id="guide-page-summary">WhisperKit runs Whisper speech-recognition models on Apple devices using Core ML. Choose a multilingual model for Korean, provide an audio file, and receive a transcript. Start with one file in the CLI before moving to longer recordings or microphone input.</p><p>The example below uses the CLI to process one audio file on an Apple Silicon Mac. A short Korean recording with clear speech makes the first output easy to check. Use other people's recordings only with their permission. [WhisperKit](https://github.com/argmaxinc/argmax-oss-swift)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Choose a multilingual model for Korean.</li><li>Incremental loading can reduce memory use for long recordings.</li></ol></section><section><h2>Prepare the build environment and recording</h2><p>Prepare macOS 14 or later and Xcode 16 or later. Building current source also requires the Swift tools version specified in the repository's `Package.swift`. After installing Xcode, check the selected tools with `xcodebuild -version` and `swift --version`.</p><p>Clone the source with the commands below, then place a short WAV recording named `meeting.wav` in the `argmax-oss-swift` folder. MP3, M4A, and FLAC inputs are also supported. For another file, change `--audio-path` in the following commands to its actual filename. Check that the recording plays normally before transcription.</p><div><p><strong>Prepare source and CLI</strong></p><pre><code data-guide-code-block="0-0">git clone --depth 1 https://github.com/argmaxinc/argmax-oss-swift.git
cd argmax-oss-swift
xcodebuild -version
swift --version
swift run argmax-cli transcribe --help</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/fluidaudio-mac-local-voice-toolkit-guide">What is FluidAudio? Local transcription, speakers, and speech on Mac</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="A desk with a recorder and notebook beside a compact desktop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the first result with one short recording that plays correctly.</figcaption></figure><section><h2>Check the selected app's inference backend on Apple devices</h2><p>WhisperKit is a Swift implementation that converts Whisper models to Core ML for Apple Silicon. Apps that select WhisperKit use this path for transcription. FluidAudio is a separate Swift SDK for Parakeet-based transcription and diarization; its README describes the ANE path.</p><p>Check Korean support, diarization, and input file formats for the model and app you plan to use. [WhisperKit](https://github.com/argmaxinc/WhisperKit) · [FluidAudio](https://github.com/FluidInference/FluidAudio)</p></section><section><h2>Run your first multilingual transcription</h2><p>You can start with `large-v3-v20240930_626MB`. Downloading the model requires a network connection and storage; transcription follows after initialization. Check that the terminal prints the words spoken in your recording. [Model selection and CLI](https://github.com/argmaxinc/argmax-oss-swift#whisperkit)</p><div><p><strong>Transcribe the recording</strong></p><pre><code data-guide-code-block="2-0">swift run argmax-cli transcribe \
  --model large-v3-v20240930_626MB \
  --audio-path ./meeting.wav</code></pre></div><p>For Korean, choose a multilingual model rather than an English-only variant such as `base.en` or `small.en`. You can use `tiny` for a quick execution check, then assess meeting-note quality with the multilingual model you intend to use. Compare names, product terms, and numbers against the recording.</p></section><section><h2>Use bounded loading for long files; test the microphone separately</h2><p>Add `--incremental-loading` to avoid reading an entire long recording into memory at once. It loads and processes bounded chunks. Compare the same file with and without it, recording completion time, memory pressure, and transcript output.</p><div><p><strong>Load a long file incrementally</strong></p><pre><code data-guide-code-block="3-0">swift run argmax-cli transcribe \
  --model large-v3-v20240930_626MB \
  --audio-path ./meeting.wav \
  --incremental-loading</code></pre></div><p>Test microphone input with `--stream` instead of an audio path. Grant microphone permission to the running app when macOS asks. Getting file transcription working first makes model problems easier to distinguish from input-device problems.</p><div><p><strong>Microphone input</strong></p><pre><code data-guide-code-block="3-1">swift run argmax-cli transcribe \
  --model large-v3-v20240930_626MB \
  --stream</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Add long files and microphone input after the first transcription works.</figcaption></figure><section><h2>Inspect Neural Engine use alongside transcription quality</h2><p>After transcription succeeds, inspect the operation placement of the Core ML model you used. The Xcode Performance report on the same Mac shows which computations use the CPU, GPU, and ANE. Follow the Neural Engine inspection guide to open and inspect the model file.</p><p>Record model initialization separately from subsequent transcription. Even fast output creates extra work if names or amounts are wrong. Correct the transcript against the recording before sending it to an LLM so recognition errors are less likely to propagate into the summary.</p><ul><li><a href="https://localai.co.kr/en/guides/coreml-neural-engine-execution-check-guide">Inspect Neural Engine execution</a></li></ul></section><section><h2>Where to start when the first run stalls</h2><p>For a Swift build failure, inspect the first error and `swift --version`. If model downloading stops, check the network and disk space. If the file cannot be opened, check the working directory and the actual location of `meeting.wav`. For an empty transcript, check playback and model selection first.</p><p>Once the output is correct, run the same short recording again. Use that baseline to add long files, microphone input, and summarization one at a time. This makes delays easier to locate and helps you judge whether your current Mac is enough.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-models-1.webp" alt="A desk with a microphone and a laptop displaying two audio waveforms" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check names and numbers against the audio before summarizing.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>WhisperKit runs Whisper speech-recognition models on Apple devices using Core ML. Choose a multilingual model for Korean, provide an audio file, and receive a transcript. Start with one file in the CLI before moving to longer recordings or microphone input.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is FluidAudio? Local transcription, speakers, and speech on Mac</title><link>https://localai.co.kr/en/guides/fluidaudio-mac-local-voice-toolkit-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/fluidaudio-mac-local-voice-toolkit-guide</guid><description>Start local transcription, speaker diarization, and Kokoro speech with FluidAudio Core ML models. Covers language selection and CPU, GPU, and ANE execution paths.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">What is FluidAudio? Local transcription, speakers, and speech on Mac</h1><p>Add the transcription, speaker diarization, and speech generation your Mac app needs.</p><p id="guide-page-summary">FluidAudio is a Swift SDK for running speech models on Apple devices. It can add ASR, speaker diarization, and TTS to local apps. Choose the supported language and model, then start by running the one feature you need.</p><p>Start by deciding what result you need from one short recording. Use ASR to read the words and diarization to separate speaking intervals by person. Each feature has its own models and language support, so choose from your actual audio and language. [FluidAudio](https://github.com/FluidInference/FluidAudio)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Combine ASR, diarization, VAD, and TTS as needed.</li><li>Kokoro ANE v3 uses a fixed hybrid CPU, ANE, and GPU path.</li></ol></section><section><h2>Choose the language before running transcription</h2><p>FluidAudio's default Parakeet v3 supports 25 European languages, while v2 is English-only. For Korean transcription, you can start with a multilingual WhisperKit model. Check that the model's supported-language list includes your language. [Speech models](https://github.com/FluidInference/FluidAudio/blob/main/Documentation/Models.md)</p><p>Prepare an Apple Silicon Mac and the Xcode Swift environment, matching the tools version in the source Package.swift for the CLI below. Put a short English `audio.wav` in the repository folder and run transcription first. The initial run includes model download and preparation.</p><div><p><strong>Start ASR with an English recording</strong></p><pre><code data-guide-code-block="0-0">git clone --depth 1 https://github.com/FluidInference/FluidAudio.git
cd FluidAudio
swift run fluidaudiocli transcribe ./audio.wav</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/whisperkit-mac-korean-transcription-guide">Transcribe Korean recordings with WhisperKit</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/local-voice-assistant-mcp-pipeline">Creating a local voice assistant: ASR·LLM·MCP·TTS connection guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="A desk with a recorder and notebook beside a compact desktop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the transcription model to the recording's language.</figcaption></figure><section><h2>Read FluidAudio's ANE path alongside each model's language list</h2><p>The FluidAudio README describes offloading local inference to the ANE on Apple devices. ASR language support varies by model. Some Parakeet models support 25 European languages and Japanese, while `Parakeet EOU` provides real-time transcription for English.</p><p>TTS language support also varies by model. Check the model table for supported languages and real-time processing. [FluidAudio README](https://github.com/FluidInference/FluidAudio/blob/main/README.md) · [API documentation](https://github.com/FluidInference/FluidAudio/blob/main/Documentation/API.md)</p></section><section><h2>Diarization separates speaking intervals</h2><p>Speaker diarization groups sections spoken by the same person and assigns a speaker ID. Match those IDs to the participants' names and align the time segments with the ASR transcript to create minutes showing who said what.</p><p>For a recorded meeting, start with offline mode to separate speakers. The command below finds each speaker's time segments in `audio.wav`. Compare overlapping speech and similar-sounding speakers with the recording to check that the segments are separated correctly. [CLI guide](https://github.com/FluidInference/FluidAudio/blob/main/Documentation/CLI.md)</p><div><p><strong>Speaker diarization</strong></p><pre><code data-guide-code-block="2-0">swift run fluidaudiocli process ./audio.wav --mode offline --threshold 0.6</code></pre></div></section><section><h2>Generate speech from text</h2><p>TTS converts a script into audio. FluidAudio offers paths such as Kokoro and PocketTTS. The example below saves a short English announcement to `en.wav` with Kokoro ANE v3. On macOS 15 or later, v3 uses a fixed hybrid route across CPU, ANE, and GPU.</p><div><p><strong>Save an English announcement as WAV</strong></p><pre><code data-guide-code-block="3-0">swift run -c release fluidaudiocli tts "The meeting starts at four." \
  --backend kokoro-ane --kokoro-version v3 --voice af_heart --output en.wav</code></pre></div><p>After it finishes, play `en.wav` in the working folder. Listen for the voice and pronunciation, then choose the variant and voice for your language. The Japanese example uses `--variant ja --voice jf_alpha`. Match the model and voice before supplying a script in another language.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Align speaker intervals with the transcript by time.</figcaption></figure><section><h2>Measure voice-assistant waiting time by stage</h2><p>A voice assistant uses VAD to find speech, ASR to turn it into text, an LLM to produce the answer, and TTS to read it aloud. Record time for VAD, ASR, the LLM, and TTS separately to find where replies are delayed.</p><p>For file transcription, record total file completion time. For conversation, record the interval from the end of speech to the first audible answer. Run the actual app combination so GPU LLM and speech resource sharing is represented. Separate initial model preparation and check recognition and pronunciation on several familiar sentences.</p></section><section><h2>Integrate only the features you need</h2><p>Once CLI output is correct, add FluidAudio through Swift Package Manager and call the managers your app needs. Keep models loaded for repeated use, and separate model preparation from user requests to avoid unexpected downloads during a task.</p><p>For an offline-only app, prepare the models and set `ModelHub.offlineMode = true`. Missing files cause an error, so connect the exact model folder your distributed app will use and test a real request. Get transcription working in the required language before adding diarization or TTS one at a time to make failures easier to locate.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-models-1.webp" alt="A desk with a microphone and a laptop displaying two audio waveforms" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check pronunciation in the generated audio file and record speech-generation time separately.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>FluidAudio is a Swift SDK for running speech models on Apple devices. It can add ASR, speaker diarization, and TTS to local apps. Choose the supported language and model, then start by running the one feature you need.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What can DiffusionGemma do on a Mac? Documents, images, and voice workflows</title><link>https://localai.co.kr/en/guides/diffusiongemma-mac-local-applications-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/diffusiongemma-mac-local-applications-guide</guid><description>DiffusionGemma text, image, and video inputs, block generation, its Fast-dLLM-mlx path on Mac, and integration with transcription tools.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What can DiffusionGemma do on a Mac? Documents, images, and voice workflows</h1><p>Generate text from documents and images; connect speech through a transcript.</p><p id="guide-page-summary">DiffusionGemma is Google's model for generating text from text, images, and video frames. It refines answer blocks through discrete diffusion, and a Mac can use an MLX implementation. A speech app can transcribe audio with ASR and pass the resulting text to it.</p><p>The example uses a 4-bit MLX conversion of the `google/diffusiongemma-26B-A4B-it` family. Start by extracting owners and deadlines from a short note, then expand to a real transcript. For images, choose a runtime with image preprocessing support. [Google model](https://huggingface.co/google/diffusiongemma-26B-A4B-it)</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Official inputs are text, images, and video frames; output is text.</li><li>The Mac example uses Fast-dLLM-mlx and a 4-bit MLX model.</li></ol></section><section><h2>Refining an answer in blocks</h2><p>Sequential generation appends the next token after earlier ones. DiffusionGemma refines the tokens in a block together before creating the next block. The encoder reads the input and the decoder generates answer blocks. Record input-processing and answer-generation time separately when comparing performance.</p><p>Programs that display completed blocks may show the answer in chunks. For document summaries, compare time to completion and accuracy. For conversation, also record time to the first output block to measure how long you wait for a reply.</p><ul><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A desk with a compact desktop and PC tower beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check correct answers and memory headroom with a short input first.</figcaption></figure><section><h2>Start with the MLX example on Mac</h2><p>Prepare an Apple Silicon Mac and uv, then clone the repository into a separate working folder. Use `uv sync` to prepare the environment and run the 4-bit example below. The first run downloads weights, so allow storage and network access. [Fast-dLLM-mlx](https://github.com/MacPaw/Fast-dLLM-mlx#diffusiongemma-inference)</p><div><p><strong>Prepare the environment</strong></p><pre><code data-guide-code-block="1-0">git clone --depth 1 https://github.com/MacPaw/Fast-dLLM-mlx.git
cd Fast-dLLM-mlx
uv sync</code></pre></div><p>The command below asks for the decision, owner, and deadline from a short meeting note. Check that the result says Minsu will prepare a new search-screen draft and that the deadline is Friday. After the short note succeeds, try a longer transcript if memory has room.</p><div><p><strong>Summarize a short meeting note</strong></p><pre><code data-guide-code-block="1-1">uv run python -m fast_dllm_mlx.diffusion_gemma \
  --model mlx-community/diffusiongemma-26B-A4B-it-4bit \
  --prompt "다음 메모의 결정, 담당자, 기한을 정리해줘. 회의에서 민수가 금요일까지 새 검색 화면 시안을 작성하기로 했다." \
  --max-new-tokens 256 --steps 16 --threshold 0.9 \
  --use-compile --no-think --use-self-conditioning --max-canvas-length 64</code></pre></div></section><section><h2>Connecting documents, images, and speech</h2><p>Use text directly for document summarization, an image-capable runtime for descriptions or OCR, and frames for video. The command above is a text example; an image or video app needs an implementation supporting the corresponding multimodal preprocessing.</p><p>A speech app transcribes audio with ASR, sends the text to DiffusionGemma, and optionally passes the answer to TTS. A Korean meeting can use WhisperKit transcription and DiffusionGemma for decision summaries. Correct transcription errors first so names and dates carry through accurately.</p><table><caption>Roles in one meeting-note workflow</caption><thead><tr><th scope="col">Stage</th><th scope="col">Input to output</th><th scope="col">Mac path</th></tr></thead><tbody><tr><th scope="row">Transcription</th><td>Audio to text</td><td>WhisperKit·Core ML</td></tr><tr><th scope="row">Decision summary</th><td>Text to summary</td><td>DiffusionGemma·MLX</td></tr><tr><th scope="row">Read aloud</th><td>Summary to speech</td><td>TTS for the supported language</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="A workspace with two compact desktops connected by cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare a new execution path using the same document and output request.</figcaption></figure><section><h2>Where DiffusionGemma and DFlash2 fit</h2><p>DiffusionGemma generates answers from documents or images. DFlash2 proposes draft tokens to help another supported main model generate answers faster. Splash and ANEMLL Forge pair supported main models and execution devices to use this kind of drafting.</p><p>To try Neural Engine execution, choose the project's ANE-compatible models separately from this MLX example. ANEMLL Forge offers a research bundle pairing Qwen3.8-27B with DFlash2 Core AI packages. Match its M5 or M6 function set and context configuration when downloading files. [ANEMLL Forge](https://github.com/Anemll/anemll-forge)</p></section><section><h2>Use the same note to compare with your current model</h2><p>If you already use Qwen3.8, send the same meeting note and output request to both models. Check the owner and deadline and look for decisions absent from the note, then record first-output and completion times. Use the same note when changing diffusion steps or canvas size.</p><p>If execution ends with a memory error, reduce the input and output limits and retry a short request. For a missing module, check that you are in the repository where `uv sync` ran. Once answers work, connect transcription and summarization; add images separately in an implementation supporting them.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Connect speech to the summarization model through a transcript.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DiffusionGemma is Google's model for generating text from text, images, and video frames. It refines answer blocks through discrete diffusion, and a Mac can use an MLX implementation. A speech app can transcribe audio with ASR and pass the resulting text to it.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is XeStrata? Running Qwen3.8 on Intel, AMD, or NVIDIA</title><link>https://localai.co.kr/en/guides/xestrata-local-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xestrata-local-llm-guide</guid><description>XeStrata runs Qwen3.8-Flash-Next on Linux PCs with Intel Arc, AMD Radeon, or NVIDIA GPUs. This guide covers supported distributions and memory, then walks through downloading the model and getting a first local response.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is XeStrata? Running Qwen3.8 on Intel, AMD, or NVIDIA</h1><p>XeStrata lets you run Qwen3.8-Flash-Next locally across GPUs from different vendors.</p><p id="guide-page-summary">XeStrata runs on x86-64 Linux PCs with Ubuntu 26.04 or Fedora 44 and an Intel Arc, RDNA2-or-later Radeon, or Pascal-or-later NVIDIA GPU. Install the package for your distribution, then run `xestrata --setup`; it checks the GPU and RAM, asks about the model and context, and opens a local chat page. Qwen3.8-Flash-Next needs about 60–110 GB for model files plus about 6 GB for the MTP file, so check available RAM and NVMe storage first.</p><p>XeStrata is a Linux program for running Qwen3.8-Flash-Next locally. Choose a supported Intel Arc, AMD Radeon, or NVIDIA GPU, install the runtime, and use its browser chat interface to send prompts and receive answers on your PC.</p><p>It is an option when you want to try a server-sized model on a personal PC. Before installing, match the Linux distribution and check both the selected model file's RAM requirement and storage size, not just the GPU name. That helps avoid stopping the first run because of a large download or insufficient memory.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Official packages are DEB for Ubuntu 26.04 and RPM for Fedora 44; other distributions require a source installation.</li><li>Matching the GPU list is not enough. Depending on the Qwen3.8-Flash-Next file, plan for about 32–62 GB of RAM and 60–110 GB of model storage.</li><li>After installation, run `xestrata --setup` to download a model; it opens `http://127.0.0.1:8095` in your default browser.</li></ol></section><section><h2>XeStrata runs a model using your GPU and RAM</h2><p>XeStrata is a local inference tool that runs language models such as Qwen3.8 on a Linux PC and returns answers to prompts. The GPU handles part of the model computation, while RAM supplies expert weights that are not selected. Check both VRAM and the RAM needed for the chosen model files and context length.</p><p>Start by choosing a GPU and model file. XeStrata recommends at least 12 GB of VRAM, though it may run more slowly with less. Qwen3.8-Flash-Next also needs RAM for its expert weights. IQ2_XS is about 68 GB on disk and calls for about 48 GB of RAM; IQ3_XXS is about 76 GB and about 60 GB of RAM.</p><ul><li><a href="https://github.com/MistVVK/XeStrata">XeStrata requirements and model list</a></li><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">XeStrata xe0.1.43.1 installation instructions</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-radeon-linux-guide">Using XeStrata on Radeon: choosing a distro for RX 7000 and 9000</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A blank monitor, desktop tower, and RAM modules on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>XeStrata computes on the GPU and reads the remaining expert weights from RAM.</figcaption></figure><section><h2>Match the Linux distribution and GPU path before installing</h2><p>Prebuilt packages are provided for Ubuntu 26.04 and Fedora 44. Windows is unsupported, and WSL 2 may work. Other Linux distributions need a source installation. The PC needs an x86-64 CPU with AVX2. For a discrete GPU, the project calls for `Above 4G Decoding` and `Re-Size BAR` enabled and CSM disabled in BIOS.</p><p>Intel support covers Arc A and B series, AMD covers RDNA2 and later, and NVIDIA covers Pascal and later. AMD also requires a supported GPU architecture and distribution rocBLAS library. RX 6700 and RX 7600 are listed only for Fedora 44; RX 6600 is not listed for either distribution. After installation, compare the GPU and gfx code from `xestrata --check` with this table.</p><ul><li><a href="https://github.com/MistVVK/XeStrata#amd-gpus">XeStrata AMD gfx and distribution matrix</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A dual-fan graphics card, RAM modules, an NVMe SSD, and an open blank notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before installing, check the memory and storage space needed by the GPU and model.</figcaption></figure><section><h2>Install the package and get a first response</h2><p>Download a package matching your GPU and distribution from XeStrata xe0.1.43.1, along with `SHA256SUMS`. Ubuntu 26.04 and Fedora 44 commands are separate below; choose the CUDA variant for the GPU generation. Intel and AMD can run without CUDA GPUs, although the distribution package names include a CUDA variant. NVIDIA Pascal and Volta need the Ubuntu CUDA 12.4 package; Fedora has no binary package for them, so use the source-install path.</p><div><p><strong>Verify downloaded package checksums</strong></p><pre><code data-guide-code-block="2-0">sha256sum -c SHA256SUMS --ignore-missing</code></pre></div><div><p><strong>Ubuntu 26.04: install the CUDA 13.1 package</strong></p><pre><code data-guide-code-block="2-1">sudo apt install ./xestrata-contrib-cuda13.1_0.1.43-2_amd64.deb</code></pre></div><div><p><strong>Fedora 44: install the CUDA 13.4 package</strong></p><pre><code data-guide-code-block="2-2">sudo dnf install ./xestrata-contrib-cuda13.4-0.1.43-2.x86_64.rpm</code></pre></div><div><p><strong>Ubuntu 26.04: CUDA 12.4 package for NVIDIA Pascal/Volta</strong></p><pre><code data-guide-code-block="2-3">sudo apt install ./xestrata-contrib-cuda12.4_0.1.43-2_amd64.deb</code></pre></div><p>After installation, run `xestrata --setup`. It checks the GPU, RAM, and CPU, then asks for a model, quantized file, and context length. Accept the recommendation or choose a file and shorter context that fit your available memory. The Qwen3.8-Flash-Next IQ2_XS model file is about 68 GB and the MTP file is separate, so leave room on the NVMe SSD. Afterward, `xestrata --check` shows the detected GPU and AMD gfx code.</p><p>After the download and initial GPU code preparation, the default browser opens `http://127.0.0.1:8095`. Send a short question; receiving an answer confirms the first run. The initial launch reads model data into RAM and prepares GPU code, so the PC may respond slowly for one to three minutes. Keep the terminal open until setup finishes.</p><div><p><strong>Choose a model and start the first run</strong></p><pre><code data-guide-code-block="2-4">xestrata --setup</code></pre></div><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">xe0.1.43.1 release and packages</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="An open PC with two graphics cards beside a box, notebook, and screwdriver" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once the model is ready, use a short question in the local web interface to check the first response.</figcaption></figure><section><h2>If the first run stops, check the device and setup log</h2><p>If `xestrata --setup` stops because it cannot find a GPU library or the render group, run the installation command printed in the terminal and then run `xestrata --setup` again. For an AMD card, check that the gfx code shown by `xestrata --check` appears in the rocBLAS table for your distribution. If checksum verification fails, confirm that you selected the right package and downloaded it completely, then compare it with the release's `SHA256SUMS`.</p><p>If the model downloads but the browser does not respond, check the terminal error and logs in `~/.local/state/xestrata`, and confirm the address is `http://127.0.0.1:8095`. If the message reports insufficient RAM, reopen setup and choose a smaller quantized file or shorter context. If the first answer arrives with your usual applications open, the PC has usable headroom. If RAM remains insufficient, use a PC with more RAM or choose a smaller model.</p></section><aside><h2>Choose a package for your GPU in xe0.1.43.1</h2><p>Check your distribution, GPU, and checksum file before installing.</p><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>XeStrata runs on x86-64 Linux PCs with Ubuntu 26.04 or Fedora 44 and an Intel Arc, RDNA2-or-later Radeon, or Pascal-or-later NVIDIA GPU. Install the package for your distribution, then run `xestrata --setup`; it checks the GPU and RAM, asks about the model and context, and opens a local chat page. Qwen3.8-Flash-Next needs about 60–110 GB for model files plus about 6 GB for the MTP file, so check available RAM and NVMe storage first.</dd></div><div><dt>How much memory does it need?</dt><dd>Start by choosing a GPU and model file. XeStrata recommends at least 12 GB of VRAM, though it may run more slowly with less. Qwen3.8-Flash-Next also needs RAM for its expert weights. IQ2_XS is about 68 GB on disk and calls for about 48 GB of RAM; IQ3_XXS is about 76 GB and about 60 GB of RAM.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Start by choosing a GPU and model file. XeStrata recommends at least 12 GB of VRAM, though it may run more slowly with less. Qwen3.8-Flash-Next also needs RAM for its expert weights. IQ2_XS is about 68 GB on disk and calls for about 48 GB of RAM; IQ3_XXS is about 76 GB and about 60 GB of RAM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Reading the public Arc Pro B70 benchmark: XeStrata and SYCL</title><link>https://localai.co.kr/en/guides/xestrata-intel-arc-pro-b70-benchmark</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xestrata-intel-arc-pro-b70-benchmark</guid><description>This guide compares XeStrata xe0.1.43.1's Arc Pro B70 32 GB IQ3_XXS results: 1,511 tok/s prefill for a 4K prompt and 81.1 tok/s decode, against the upstream SYCL path. It also explains the measurement types and how to reproduce them under matching conditions.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Reading the public Arc Pro B70 benchmark: XeStrata and SYCL</h1><p>Even with the same Arc Pro B70 and IQ3_XXS, compare prefill for reading input and decode for generating an answer separately.</p><p id="guide-page-summary">In the XeStrata xe0.1.43.1 release measurement on an Intel Arc Pro B70 32 GB, Qwen3.8-Flash-Next IQ3_XXS processed a 4K prompt at 1,511 tok/s prefill and generated 256 tokens at 81.1 tok/s decode. The upstream v0.1.43 SYCL path under the same conditions measured 1,259 tok/s and 62.2 tok/s. These are release-reported comparison results; they do not directly represent other GPUs or the completion time of an ordinary chat.</p><p>See how Arc Pro B70 handles long input and answer generation. XeStrata xe0.1.43.1 compares Qwen3.8-Flash-Next IQ3_XXS against upstream v0.1.43 SYCL with matching 4K input and 256-token output. Public figures are collected in the table; everyday-chat records and version fixes are read separately.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>4K generate, IQ3_XXS: XeStrata measured 1,511 tok/s prefill and 81.1 tok/s decode; upstream SYCL measured 1,259 and 62.2 tok/s.</li><li>Each value is the median of two alternating runs; generate used temperature 0 and produced 256 tokens.</li><li>Serving, Japanese chat, and coding-agent results use different input and output flows and are measured separately from generate.</li></ol></section><section><h2>The two 4K test figures measure different parts of a request</h2><p>The XeStrata xe0.1.43.1 release compares Qwen3.8-Flash-Next IQ3_XXS on an Arc Pro B70 32 GB with the upstream v0.1.43 Intel SYCL build. The public generate results below use an approximately 4K-token input and 256-token output; prefill is input processing and decode is subsequent token generation.</p><table><caption>IQ3_XXS 4K generate comparison on an Arc Pro B70 32 GB</caption><thead><tr><th scope="col">Measure</th><th scope="col">XeStrata xe0.1.43.1</th><th scope="col">upstream v0.1.43 SYCL</th></tr></thead><tbody><tr><th scope="row">prefill</th><td>1,511 tok/s</td><td>1,259 tok/s</td></tr><tr><th scope="row">decode</th><td>81.1 tok/s</td><td>62.2 tok/s</td></tr></tbody></table><p>This table reports the median for temperature-0 generate using the same IQ3_XXS model, an approximately 4K prompt, and 256 output tokens. The release alternated between the two runtimes for two runs; it does not include different context lengths or the ordinary chat path.</p><p>With a short prompt, a prefill difference may account for only a small part of the total wait; with a long answer, decode speed matters for longer. For a short question, measure time to first token. For a longer coding request, also record generation speed and total completion time to see how these figures affect your work.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">xe0.1.43.1 B70 benchmark table</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A blank monitor, desktop tower, and RAM modules on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare prefill as the rate for reading input and decode as the rate for generating answer tokens.</figcaption></figure><section><h2>The release fixes an Arc prefill regression</h2><p>In xe0.1.43, 32K prefill for Qwen3.8-Flash-Next on an Arc Pro B70 fell back from the XMX matrix engine to the slower DP4a path; the release notes say it was about one-third slower. XeStrata xe0.1.43.1 fixes this and raises 32K IQ3_XXS prefill from 1,590 to 2,415 tok/s. This is a fix compared with an earlier XeStrata version, under conditions different from the 4K upstream comparison above.</p><p>The release also reports serving and everyday-use measurements separately from generate. For a 32K conversation, serving records prefill, the wait before a follow-up answer, and decode. Japanese chat and coding-agent tests go through `serve/server.py` and report first-token time and decode. For example, Japanese chat recorded 0.58 seconds to the first token and 62.7 tok/s decode. Each runtime generated its own response, with two alternating runs at temperature 0.7, so these figures should remain separate from the single generate test.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">Release generate, serve, and everyday-use results</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A dual-fan graphics card, RAM modules, an NVMe SSD, and an open blank notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>xe0.1.43.1 restores the XMX prefill path on Intel Arc.</figcaption></figure><section><h2>Record results for your own installation</h2><p>Read the public SYCL comparison in the release table; use `xestrata --bench` to record your own installation separately. It tests the installed IQ3_XXS for roughly 40 minutes. Stop the running XeStrata server first; add `--bench-verbose` if you need stage timings, GPU load, and temperatures.</p><p>Records are saved under `records/bench-&lt;time&gt;/` in the program's data directory. Read `summary.md` and `tables.md`, then check `record.json` to confirm the hardware and engine paths. The default is two runs; increase it with an option such as `--bench-rounds 3` for more repetitions. A mixed-GPU layer-split configuration measures everyday use only, not generate and serve, so check the scope before comparing tables.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/BENCH.md">XeStrata benchmark procedure and record format</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="An open PC with two graphics cards beside a box, notebook, and screwdriver" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For a comparable local measurement, match the model, prompt, input length, and output token count.</figcaption></figure><aside><h2>Review the B70 xe0.1.43.1 test conditions</h2><p>Check the card, model file, prompt length, and generation method in the comparison.</p><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>In the XeStrata xe0.1.43.1 release measurement on an Intel Arc Pro B70 32 GB, Qwen3.8-Flash-Next IQ3_XXS processed a 4K prompt at 1,511 tok/s prefill and generated 256 tokens at 81.1 tok/s decode. The upstream v0.1.43 SYCL path under the same conditions measured 1,259 tok/s and 62.2 tok/s. These are release-reported comparison results; they do not directly represent other GPUs or the completion time of an ordinary chat.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Using XeStrata on Radeon: choosing a distro for RX 7000 and 9000</title><link>https://localai.co.kr/en/guides/xestrata-radeon-linux-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xestrata-radeon-linux-guide</guid><description>A Radeon model name alone does not determine whether XeStrata will run. This guide matches the gfx code of RX 7000 and 9000 cards with rocBLAS support on Ubuntu 26.04 or Fedora 44, then checks the first launch.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Using XeStrata on Radeon: choosing a distro for RX 7000 and 9000</h1><p>The AMD GPU's compute target must be included in rocBLAS for your Linux distribution.</p><p id="guide-page-summary">Radeon support in XeStrata depends on the gfx code and ROCm rocBLAS included with the Linux distribution. RX 7900 (gfx1100), RX 7800/7700 (gfx1101), RX 9060 (gfx1200), and RX 9070 (gfx1201) appear in the tables for both Ubuntu 26.04 and Fedora 44, while RX 6700 (gfx1031) and RX 7600 (gfx1102) are listed for Fedora 44 only. Check the gfx code with `xestrata --check`, compare it with the distribution table, and then install the package.</p><p>Prepare XeStrata on Radeon by matching the GPU model with the Linux distribution. The support table below connects each product's gfx architecture code to the distribution's rocBLAS support. Choose and install a package first, then check detection with `xestrata --check`.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>AMD prefill's dense matrix operations depend on the distribution's rocBLAS and hipBLASLt.</li><li>RX 6700 and RX 7600 are listed only for Fedora 44; RX 6600/6500/6400 are absent from both distribution tables.</li><li>After installing a release package, use `xestrata --check` and `xestrata --setup` to confirm device detection and a first model response.</li></ol></section><section><h2>The distribution's rocBLAS must provide the Radeon compute target</h2><p>XeStrata does more than send model input to a Radeon GPU for prefill. The dense matrix calculations used to process input rely on ROCm rocBLAS and hipBLASLt from the distribution, so the GPU's architecture target, or gfx code, must be included in those libraries. Even with the same RX product name, support can differ between Ubuntu and Fedora depending on the gfx targets included in rocBLAS.</p><table><caption>AMD gfx targets and distribution support in XeStrata xe0.1.43.1</caption><thead><tr><th scope="col">Radeon family</th><th scope="col">gfx</th><th scope="col">Ubuntu 26.04</th><th scope="col">Fedora 44</th></tr></thead><tbody><tr><th scope="row">RX 7900</th><td>gfx1100</td><td>Yes</td><td>Yes</td></tr><tr><th scope="row">RX 7800·7700</th><td>gfx1101</td><td>Yes</td><td>Yes</td></tr><tr><th scope="row">RX 6700</th><td>gfx1031</td><td>No</td><td>Yes</td></tr><tr><th scope="row">RX 7600</th><td>gfx1102</td><td>No</td><td>Yes</td></tr><tr><th scope="row">RX 9060·9070</th><td>gfx1200·1201</td><td>Yes</td><td>Yes</td></tr><tr><th scope="row">RX 6600·6500·6400</th><td>gfx1032·1034</td><td>No</td><td>No</td></tr></tbody></table><p>This support table is based on the gfx targets in ROCm 7.1 rocBLAS for Ubuntu 26.04 and Fedora 44. Development checks on an actual Radeon used the RX 9060 XT, so treat other listed cards as installation compatibility and measure their speed on your own hardware.</p><ul><li><a href="https://github.com/MistVVK/XeStrata#amd-gpus">AMD GPU support table and ROCm conditions by distribution</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-local-llm-guide">What is XeStrata? Running Qwen3.8 on Intel, AMD, or NVIDIA</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-basics-1.webp" alt="An open handwritten notebook, dual-fan graphics card, and disc case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the gfx code and rocBLAS support in addition to the Radeon model name.</figcaption></figure><section><h2>Install the package and start with a short request</h2><p>Once the gfx code matches your distribution, choose a package from the xe0.1.43.1 release and download it with `SHA256SUMS`. On Ubuntu 26.04, select the recommended package for AMD RDNA2 or later; on Fedora 44, choose a listed compatible package. After verifying the file, install it with `sudo apt install ./&lt;downloaded-DEB-file&gt;` or `sudo dnf install ./&lt;downloaded-RPM-file&gt;`. Use the actual downloaded filename rather than guessing a package name that is not in the release table.</p><p>After installation, run `xestrata --check` again to confirm the Radeon is detected, then run `xestrata --setup`. Choose a model, quantization, and context length; the program downloads the model and accepts questions at `http://127.0.0.1:8095`. Keep the startup window open until you see a first response. The PC may slow briefly while GPU code is prepared, and Qwen3.8-Flash-Next downloads range from about 60 to 110 GB, so the download can take time.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">XeStrata installation package for your distribution</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-basics-3.webp" alt="A wide workstation with a laptop, two monitors, and an open desktop computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After the GPU is detected, a short request checks the execution path.</figcaption></figure><section><h2>Read your Radeon gfx code first</h2><p>After installing the XeStrata release on Linux, run `xestrata --check` in a terminal to display the detected GPU name and AMD gfx code. For example, if it shows `RX 7600 (gfx1102)`, compare it with the Fedora 44 row. Starting from a GPU name in Windows or another hardware utility can miss the ROCm library support that XeStrata actually sees.</p><p>To compare processing time on your PC, keep the model, quantization, and context length the same and reuse one prompt. Record the GPU and gfx code, distribution, and package name so you can check differences after changing the setup.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">GPUs checked and changes in xe0.1.43.1</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-check-1.webp" alt="A dual-fan graphics card, blank sheets, and a magnifying glass on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Find the row for your gfx code in the support table for your distribution.</figcaption></figure><section><h2>If the GPU is missing, check the gfx code and library separately</h2><p>If Radeon does not appear in `xestrata --check`, first check the distribution package and GPU driver. If the device name appears but setup stops, compare its gfx code with the support table and check whether `xestrata --setup` printed an installation command for a missing GPU library or render group. Run the suggested command and repeat setup to check that requirement again.</p><p>If the gfx code is supported but startup still fails, confirm that the CPU is x86-64 with AVX2 and that Above 4G Decoding and Re-Size BAR are enabled in BIOS. If the model has downloaded but the browser does not respond, check the first error in the program terminal and confirm the address is `http://127.0.0.1:8095`. If the message reports insufficient RAM, choose a smaller model file or shorter context in setup. A successful launch means receiving a first response in the checked environment; speed or stability on another Radeon needs separate testing.</p></section><aside><h2>Check AMD and distribution support</h2><p>Match your GPU gfx code with the Linux version before choosing a package.</p><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Radeon support in XeStrata depends on the gfx code and ROCm rocBLAS included with the Linux distribution. RX 7900 (gfx1100), RX 7800/7700 (gfx1101), RX 9060 (gfx1200), and RX 9070 (gfx1201) appear in the tables for both Ubuntu 26.04 and Fedora 44, while RX 6700 (gfx1031) and RX 7600 (gfx1102) are listed for Fedora 44 only. Check the gfx code with `xestrata --check`, compare it with the distribution table, and then install the package.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A 35B model on 4 GB VRAM? XeStrata Ornith and llm-jp requirements</title><link>https://localai.co.kr/en/guides/xestrata-4gb-vram-moe-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xestrata-4gb-vram-moe-guide</guid><description>See what 4 GB VRAM means for XeStrata's beta small-MoE paths, including system RAM and file sizes. Choose between Ornith-1.5 and llm-jp-4.1, then check the first run.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">A 35B model on 4 GB VRAM? XeStrata Ornith and llm-jp requirements</h1><p>4 GB VRAM is the minimum path for specific beta quantizations. You still need enough system RAM and disk space for the model weights.</p><p id="guide-page-summary">XeStrata's 4 GB figure applies only to specified beta files such as Ornith-1.5 35B-A3B Q4_K_M and llm-jp-4.1 32B-A3B Q4_K_M. Their downloads are about 21.7 GB and 21.5 GB, and each calls for about 30 GB of system RAM. A 4 GB GPU does not make Qwen3.8 125B or every quantization runnable.</p><p>Even with 4 GB of VRAM, XeStrata's beta MoE models can be tested using system RAM alongside the GPU. Compare file sizes and RAM requirements for Ornith-1.5 35B-A3B and Japanese-focused llm-jp-4.1 32B-A3B, choose a supported file, and send a first prompt.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 4 GB minimum applies to specified beta Q4_K_M paths. Other quantizations have different memory requirements.</li><li>The Ornith and llm-jp Q4_K_M files are about 21.7 GB and 21.5 GB, with about 30 GB RAM required.</li><li>These are text-only beta paths, not configurations for multi-GPU or Intel integrated graphics.</li></ol></section><section><h2>Start with files that meet the 4 GB condition</h2><p>XeStrata's README lists model download size, RAM, and minimum VRAM separately for beta models. The entries marked 4 GB are Ornith-1.5 35B-A3B Q4_K_M and llm-jp-4.1 32B-A3B Q4_K_M. Their files are about 21.7 GB and 21.5 GB, and each calls for about 30 GB RAM.</p><p>The README also lists a smaller community reproduction. GSQ-RCO-3BIT is 13 GB on disk, 22 GB RAM, and 4 GB minimum VRAM, but has no MTP layer. Its source and MTP status differ from the standard official Q4_K_M file. Higher options include Q5_K_M at 25.3 GB/34 GB/6 GB, Q6_K at 29.2 GB/38 GB/6 GB, and Q8 at 37.8 GB/46 GB/6 GB.</p><ul><li><a href="https://github.com/MistVVK/XeStrata#beta-models">XeStrata beta model memory table</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-local-llm-guide">What is XeStrata? Running Qwen3.8 on Intel, AMD, or NVIDIA</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A dual-fan graphics card, RAM modules, an NVMe SSD, and an open blank notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the VRAM figure separately from model file size and system RAM requirements.</figcaption></figure><section><h2>Choose between Japanese use and exploring the model family</h2><p>For Japanese documents or chat, start by considering llm-jp-4.1 32B-A3B Q4_K_M. The README lists a 21.5 GB file, about 30 GB RAM, and 4 GB minimum VRAM. BF16 is a 64.3 GB file requiring 73 GB RAM and 8 GB VRAM, so it does not fit the same 4 GB configuration.</p><p>Ornith-1.5 35B-A3B Q4_K_M has the same listed RAM and VRAM thresholds. Larger quantized files are not listed as 4 GB options, so begin with the matching Q4_K_M and a short prompt to check whether it runs before changing models. Both families are labeled beta and text-only in the README.</p><ul><li><a href="https://github.com/MistVVK/XeStrata">Ornith and llm-jp beta notes in the XeStrata README</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-check-1.webp" alt="A dual-fan graphics card, blank sheets, and a magnifying glass on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Narrow the choices by model family and whether Japanese use is the priority.</figcaption></figure><section><h2>Check PC memory and installation path before downloading</h2><p>XeStrata provides distribution packages for Ubuntu 26.04 and Fedora 44. The model file is about 22 GB, so leave room on the target drive and check that roughly 30 GB of system RAM is available. Other running applications reduce the RAM headroom below the installed total.</p><p>This is a beta path. The README says some low-memory-card checks were performed by limiting B70 VRAM and XMX paths, rather than running on a physical low-memory card. Do not read that as a reproduced 4 GB run on your exact GPU; verify setup and a short first generation on your own system.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">xe0.1.43.1 packages and beta changes</a></li></ul></section><section><h2>After installation, use a short prompt to check memory headroom</h2><p>Install the release package for your distribution, then run `xestrata --setup`. Check the detected GPU and select Q4_K_M for Ornith or llm-jp. Compare the displayed RAM recommendation and file size with the figures above before downloading.</p><div><p><strong>Open model setup after installation</strong></p><pre><code data-guide-code-block="3-0">xestrata --setup</code></pre></div><p>Start the first generation with a short Japanese question or a one- or two-sentence summary request. Open `http://127.0.0.1:8095`; a completed answer with no terminal memory error confirms the basic run. Save the prompt so you can compare if you change quantization or context length.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/releases/tag/xe0.1.43.1">XeStrata xe0.1.43.1 installation guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A blank monitor, desktop tower, and RAM modules on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check that a short first generation completes before deciding whether to use the setup regularly.</figcaption></figure><section><h2>Separate RAM errors from unsupported-path errors</h2><p>If `xestrata --setup` cannot find a GPU library, compare the device name and gfx code from `xestrata --check` and your distribution with the README support table. AMD also needs rocBLAS for that gfx code in the distribution. If setup still will not open after installation, check the first terminal error and logs in `~/.local/state/xestrata`.</p><p>If RAM is insufficient, close other applications and retry. If that does not help, check whether the README lists a smaller option on the same 4 GB path. If not, the practical choices are adding RAM or switching to a smaller model. Decide whether this setup is usable by whether a short Q4_K_M prompt completes.</p></section><aside><h2>Check the beta model memory table</h2><p>Compare RAM, VRAM, and file size before downloading.</p><a href="https://github.com/MistVVK/XeStrata#beta-models">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>XeStrata's 4 GB figure applies only to specified beta files such as Ornith-1.5 35B-A3B Q4_K_M and llm-jp-4.1 32B-A3B Q4_K_M. Their downloads are about 21.7 GB and 21.5 GB, and each calls for about 30 GB of system RAM. A 4 GB GPU does not make Qwen3.8 125B or every quantization runnable.</dd></div><div><dt>How much memory does it need?</dt><dd>XeStrata's README lists model download size, RAM, and minimum VRAM separately for beta models. The entries marked 4 GB are Ornith-1.5 35B-A3B Q4_K_M and llm-jp-4.1 32B-A3B Q4_K_M. Their files are about 21.7 GB and 21.5 GB, and each calls for about 30 GB RAM.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Using Intel Arc and RTX together with XeStrata</title><link>https://localai.co.kr/en/guides/xestrata-mixed-gpu-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xestrata-mixed-gpu-guide</guid><description>Learn how XeStrata's multi-GPU mode places model layers and expert caches across different cards. This guide covers setup commands, split selection, and what to verify in a real run.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Using Intel Arc and RTX together with XeStrata</h1><p>In mixed-GPU mode, each device holds its assigned layers and state, handing data off at layer boundaries.</p><p id="guide-page-summary">XeStrata offers an experimental path for splitting model layers across multiple GPUs in one PC. Specify two devices with `./setup.sh --gpus 1,2` and optionally choose a layer boundary. Each GPU keeps its assigned weights, state, and expert cache; free VRAM is not automatically pooled. Current documentation assumes `--serve` and an expert profile.</p><p>XeStrata mixed-GPU mode splits model layers across Intel, AMD, and NVIDIA cards in one Linux PC. This guide checks the devices from a source checkout, establishes a one-GPU run, then compares the same model with two GPUs.</p><p>Free VRAM on each card does not guarantee a useful split if layer, state, and cache placement do not fit. First establish a working single-GPU server, then adjust the layers assigned to the second card.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Each GPU separately maintains weights for its assigned layers, GDN and QSA state, and an expert cache.</li><li>The base command is `./setup.sh --gpus 1,2`; `--layer-split` sets a boundary or requests automatic splitting.</li><li>GPU data transfers and CPU-memory handoffs mean total VRAM alone cannot predict speed or whether a model will fit.</li></ol></section><section><h2>What each device owns in mixed-GPU mode</h2><p>XeStrata splits model layers across selected GPUs and places the corresponding dense weights and PLE tensors on each device. Session state is also maintained per GPU. The documentation includes GDN recurrent state and QSA KV cache, along with a separate expert cache on each device.</p><p>GPUs hand results off through CPU memory once per verify window. A larger expert cache may fit on GPU memory, reducing experts computed by the CPU, but the handoff remains. Total VRAM is therefore not one transparent pool or a guarantee of linear speedup.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/MULTIGPU.md">XeStrata multi-GPU architecture notes</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="An open PC with two graphics cards beside a box, notebook, and screwdriver" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Each GPU in one PC holds its assigned layers and state.</figcaption></figure><section><h2>Set device indexes and a layer boundary</h2><p>First clone the repository and run `./setup.sh --check`; choose the one-GPU device from the displayed indexes. A mixed setup that includes NVIDIA requires the `contrib-llvm` build, which is also the source setup's default path. For an Intel/AMD-only machine, choose actual indexes from the same check output.</p><p>Replace `0` and `0,1` in the commands below with indexes from `--check`. First complete setup and a run on one GPU, then record the model, quantization, context length, short prompt, time to first response, and completion time. Stop the server and run two GPUs with the same model and context for a comparable result. Start with automatic splitting, then adjust the boundary using memory use and response time.</p><div><p><strong>Clone the repository and check GPU indexes</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/MistVVK/XeStrata.git
cd XeStrata
./setup.sh --check</code></pre></div><div><p><strong>Baseline: replace the index with your device and run one GPU</strong></p><pre><code data-guide-code-block="1-1">./setup.sh --gpu 0</code></pre></div><div><p><strong>Comparison: run two GPUs with the same model and context</strong></p><pre><code data-guide-code-block="1-2">./setup.sh --gpus 0,1 --layer-split auto</code></pre></div><ul><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/MULTIGPU.md">Multi-GPU setup options and split notes</a></li><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/BUILD.md">Source installation and build path</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A dual-fan graphics card, RAM modules, an NVMe SSD, and an open blank notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check device indexes, then compare automatic splitting with a fixed boundary.</figcaption></figure><section><h2>Run it in serving mode and inspect the result</h2><p>`setup.sh` builds the engine, downloads the model, starts the server, and records the selected GPUs and layer split in the model configuration. The server supplies both `--serve` and `--expert-profile` for this path; there is no need to run a fragment of those flags in another terminal. When the server is ready, open `http://127.0.0.1:8095` and check that both cards have assignments and per-GPU memory use matches the split.</p><p>Run the same short request on the single- and dual-GPU configurations and record time to first response and total completion time. XeStrata passes state between GPUs through CPU memory, so compare per-GPU utilization alongside response times that include this handoff.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/MULTIGPU.md">XeStrata multi-GPU serving guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A blank monitor, desktop tower, and RAM modules on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record single- and mixed-GPU runs with the same prompt and output length.</figcaption></figure><section><h2>When device assignment or speed differs from expectations</h2><p>If the second GPU shows no activity, confirm that the indexes passed to `--gpus` match `xestrata --check` and that setup detects both devices. If memory concentrates on one card, compare automatic and manual boundaries. For finer control over multiple split points or device order, consult the multi-GPU docs for `--split-device`, `--split-order`, and how the server configuration passes them.</p><p>If assignment succeeds but is slower than one GPU, inspect timings for the same input and output length, per-GPU utilization, and CPU-memory handoff intervals. If moving the boundary does not reduce task time, keep single-GPU as the default for this workload. Use the multi-GPU setup only when splitting capacity or placing more cache on GPUs serves the goal.</p><ul><li><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/MULTIGPU.md">Split options and configuration checks</a></li></ul></section><aside><h2>Check the current multi-GPU options</h2><p>Check XeStrata's device indexes, layer splitting, and serving requirements in the source docs.</p><a href="https://github.com/MistVVK/XeStrata/blob/main/docs/MULTIGPU.md">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>XeStrata offers an experimental path for splitting model layers across multiple GPUs in one PC. Specify two devices with `./setup.sh --gpus 1,2` and optionally choose a layer boundary. Each GPU keeps its assigned weights, state, and expert cache; free VRAM is not automatically pooled. Current documentation assumes `--serve` and an expert profile.</dd></div><div><dt>How much memory does it need?</dt><dd>Replace `0` and `0,1` in the commands below with indexes from `--check`. First complete setup and a run on one GPU, then record the model, quantization, context length, short prompt, time to first response, and completion time. Stop the server and run two GPUs with the same model and context for a comparable result. Start with automatic splitting, then adjust the boundary using memory use and response time.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is TensorFold? A local model engine for Mac, RTX, and DGX Spark</title><link>https://localai.co.kr/en/guides/tensorfold-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-local-serving-guide</guid><description>TensorFold 1.0.8 serves qualified models on Macs and NVIDIA GPUs through an OpenAI-compatible API. This guide shows how to download Qwen3.8-27B on a Mac, start it with DFlash2, and review the supported model and hardware combinations.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is TensorFold? A local model engine for Mac, RTX, and DGX Spark</h1><p>TensorFold runs a model and exposes it through an OpenAI-compatible API. First check that a recipe supports your model and hardware combination.</p><p id="guide-page-summary">TensorFold 1.0.8 runs qualified checkpoints with Metal or CUDA and returns replies through an OpenAI-compatible API. The Mac example downloads `TensorFold/Qwen3.8-27B-MLX-4bit` and `z-lab/Qwen3.8-27B-DFlash2`, starts the server, and sends a request to `/v1/chat/completions`. Support is limited to documented model and hardware combinations, so match your device and checkpoint in the table before installing.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>TensorFold is a local inference engine; each recipe specifies a model, hardware, and runtime settings as a combination.</li><li>The supported Mac combination for Qwen3.8-27B is an M5 Max or M3 Ultra with the specified MLX 4-bit checkpoint.</li><li>After the server responds, configure the app with the matching API address and model name to use it in a real workflow.</li></ol></section><section><h2>Serve a model so an app can call it</h2><p>TensorFold is a local inference engine that reads checkpoints on Apple Silicon and NVIDIA GPUs and generates replies with Metal or CUDA kernels. Once the server is running, a client sends prompts to `http://127.0.0.1:8080/v1` and receives replies. The steps below cover model selection, server startup, and the first request.</p><ul><li><a href="https://github.com/ashhart/TensorFold">TensorFold repository</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/ninfer-qwen38-nvidia-local-guide">Run Qwen3.8 Locally with NInfer: RTX 5090, MTP, and DFlash2</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-27b-serving-recipe-scene-1.webp" alt="A laptop with a block diagram beside colored block stacks, a desktop case, and a notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Qwen3.8-27B path uses the specified checkpoint and DFlash2 drafter together.</figcaption></figure><section><h2>Choose a model and Mac from the 1.0.8 qualified combinations</h2><p>This example uses the Metal combination listed in the TensorFold 1.0.8 release. The qualified checkpoint is `TensorFold/Qwen3.8-27B-MLX-4bit` in MLX affine 4-bit, group 64 format, on M5 Max and M3 Ultra. The DFlash2 drafter ID for Qwen3.8-27B is `z-lab/Qwen3.8-27B-DFlash2`.</p><p>The release's Qualified models table and `tensorfold models` output show whether this file and your platform form a supported combination.</p><table><caption>Model, checkpoint, and platform combinations in TensorFold 1.0.8</caption><thead><tr><th scope="col">Model and checkpoint</th><th scope="col">Format</th><th scope="col">Qualified platform</th></tr></thead><tbody><tr><th scope="row">Qwen3.8-27B · TensorFold/Qwen3.8-27B-MLX-4bit</th><td>MLX affine 4-bit, group 64 · separate DFlash2 drafter</td><td>M5 Max, M3 Ultra · Metal</td></tr><tr><th scope="row">Qwen3.8 Flash Next</th><td>MLX affine 6-bit, group 32</td><td>M5 Ultra · Metal</td></tr><tr><th scope="row">GLM-5.3-Flash</th><td>MLX affine 4-bit, group 64</td><td>Two M5 Ultras · Metal</td></tr><tr><th scope="row">GLM-5.3 · kindlingai/glm-5.3-exlr8-k2-k3-k4</th><td>EXLR8 home profile</td><td>Two M5 Ultras · Metal</td></tr><tr><th scope="row">Nemotron 3.5 Lightning 30B-A3B</th><td>MLX affine 4-bit, group 64, MTP included</td><td>M1–M5 · Metal; GB10·RTX 3090·RTX PRO 6000 Blackwell · CUDA</td></tr><tr><th scope="row">Qwen3.5-2B · mlx-community/Qwen3.5-2B-MLX-4bit</th><td>Pinned MLX affine 4-bit, group 64</td><td>M5 Max · Metal</td></tr></tbody></table><p>The table lists TensorFold 1.0.8 Metal and CUDA combinations. MIA's separately patched TensorFold 0.6.x recipes use a different version and runtime path.</p><ul><li><a href="https://github.com/ashhart/TensorFold/releases/tag/v1.0.8">TensorFold 1.0.8 release notes</a></li></ul></section><section><h2>Download the model and start the API server</h2><p>Install TensorFold with Homebrew and check its version. Then pull the specified Qwen3.8-27B checkpoint; TensorFold verifies the model files and stores them in its cache.</p><div><p><strong>Install TensorFold and check version</strong></p><pre><code data-guide-code-block="2-0">brew install ashhart/tensorfold/tensorfold
tensorfold --version</code></pre></div><p>After the model download, start the server with the DFlash2 drafter. The default API base is `http://127.0.0.1:8080/v1`, and `--name qwen38-local` sets the model name used by API requests. When the server is ready, the terminal reports that it is listening; leave it open and send a request from another terminal.</p><div><p><strong>Download Qwen3.8-27B model files</strong></p><pre><code data-guide-code-block="2-1">tensorfold pull TensorFold/Qwen3.8-27B-MLX-4bit</code></pre></div><div><p><strong>Start the Qwen3.8-27B server with DFlash2</strong></p><pre><code data-guide-code-block="2-2">tensorfold serve TensorFold/Qwen3.8-27B-MLX-4bit --name qwen38-local --drafter z-lab/Qwen3.8-27B-DFlash2 --context 4096 --parallel 1 --temperature 0</code></pre></div></section><figure><img src="https://localai.co.kr/guides/omlx-mac-serving-guide-scene-3.webp" alt="A laptop showing blocks and arrows beside a block cabinet, desktop case, and open notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Enter the server's base address and model name in the app's connection settings.</figcaption></figure><section><h2>Send a curl request and connect an app</h2><p>With the server running, open a second terminal and send the request below. A one-sentence reply in `choices[0].message.content` confirms the request round trip. In your app, choose an OpenAI-compatible provider and enter base URL `http://127.0.0.1:8080/v1` and model name `qwen38-local`.</p><div><p><strong>Send a local chat completion request</strong></p><pre><code data-guide-code-block="3-0">curl -fsS http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen38-local","messages":[{"role":"user","content":"Explain what this function returns: def first_item(items): return items[0]"}],"max_tokens":128,"temperature":0}'</code></pre></div><p>If the server cannot find a model ID, check the cached name with `tensorfold models`. If a hash check or network error interrupts the pull, rerun the same pull command to fetch missing files, then inspect the format with `tensorfold info TensorFold/Qwen3.8-27B-MLX-4bit`. If startup reports an unsupported family, compare your TensorFold version and the `tensorfold models` list. This model path is qualified for Metal on M5 Max and M3 Ultra.</p></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-27b-serving-recipe-scene-2.webp" alt="A dual-fan graphics card, RAM modules, a storage drive, and an open notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify a short API response, then continue with your usual coding task.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>TensorFold 1.0.8 runs qualified checkpoints with Metal or CUDA and returns replies through an OpenAI-compatible API. The Mac example downloads `TensorFold/Qwen3.8-27B-MLX-4bit` and `z-lab/Qwen3.8-27B-DFlash2`, starts the server, and sends a request to `/v1/chat/completions`. Support is limited to documented model and hardware combinations, so match your device and checkpoint in the table before installing.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>TensorFold 1.0.8 cuts Qwen3.8-27B Mac memory by 17.6 GiB</title><link>https://localai.co.kr/en/guides/tensorfold-qwen38-mac-memory-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-qwen38-mac-memory-guide</guid><description>TensorFold 1.0.8 removes duplicate Qwen3.8-27B weight loading on Mac, saving 17.6 GiB when preparing the model with DFlash2. At the 70K-context check, M5 Max went from 47.2 to 29.6 GiB and M3 Ultra from 42.2 to 24.6 GiB.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">TensorFold 1.0.8 cuts Qwen3.8-27B Mac memory by 17.6 GiB</h1><p>Removing duplicate loading creates more room to prepare DFlash2 with a long context.</p><p id="guide-page-summary">TensorFold 1.0.8 keeps one in-memory copy of Qwen3.8-27B weights, reducing readiness memory with DFlash2 by 17.6 GiB. In the release's 70,000-token context check, M5 Max changed from 47.2 to 29.6 GiB and M3 Ultra from 42.2 to 24.6 GiB. The reduction creates room for this combination's DFlash2 drafter and long context; actual use should be checked with your usual apps and input lengths included.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Removing duplicate weights reduced readiness memory by 17.6 GiB with DFlash2 included.</li><li>At the 70K-context check, M5 Max went from 47.2 to 29.6 GiB and M3 Ultra from 42.2 to 24.6 GiB.</li><li>The 17.6 GiB reduction comes from eliminating duplicate model weight loading.</li></ol></section><section><h2>The weights now occupy one copy instead of two</h2><p>With DFlash2, the drafter proposes next tokens and Qwen3.8-27B verifies them. TensorFold 1.0.8 keeps one in-memory copy of the Qwen3.8-27B weights on Mac.</p><p>The table shows readiness memory with DFlash2 at a 70,000-token context in the TensorFold release check. The version changed under the same stated condition, with a 17.6 GiB reduction on each Mac.</p><ul><li><a href="https://github.com/ashhart/TensorFold/releases/tag/v1.0.8">TensorFold 1.0.8 release notes</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Mac Studio M3 Ultra 512GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/kv-cache">Reduce KV cache memory: vLLM FP8 setup and response checks</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set up the server hardware alongside the workstation you use as a client.</figcaption></figure><section><h2>Readiness memory fell at 70K context</h2><p>The figures below show memory reserved to prepare the server and DFlash2 in the TensorFold release check. The version changed from 1.0.7 to 1.0.8; at the same 70,000-token context and generation speed, readiness memory fell by 17.6 GiB on each Mac.</p><p>The table records process memory while preparing TensorFold and DFlash2 on those Macs. macOS and your usual apps share unified memory too. Run the server on your own Mac and check Activity Monitor's memory pressure and swap growth to assess practical headroom.</p><table><caption>TensorFold release readiness memory at 70K context</caption><thead><tr><th scope="col">Hardware</th><th scope="col">1.0.7</th><th scope="col">1.0.8</th><th scope="col">Change</th></tr></thead><tbody><tr><th scope="row">M5 Max</th><td>47.2 GiB</td><td>29.6 GiB</td><td>−17.6 GiB</td></tr><tr><th scope="row">M3 Ultra</th><td>42.2 GiB</td><td>24.6 GiB</td><td>−17.6 GiB</td></tr></tbody></table><p>To use the space saved by avoiding duplicate loading, check the server first with `--context 4096`, then raise the context while your usual apps are open. `/memory` is a read-only HTTP route on the default API server, not a terminal command. Check the process's physical footprint and lifetime peak before increasing request length.</p><ul><li><a href="https://github.com/ashhart/TensorFold/releases/tag/v1.0.8">TensorFold 1.0.8 release check</a></li></ul></section><section><h2>Install 1.0.8 and run it with DFlash2</h2><p>Upgrade the existing Homebrew install to 1.0.8, then specify the exact model repository and DFlash2 drafter. `tensorfold pull` verifies large model files by checksum and resumes missing pieces after an interrupted download.</p><div><p><strong>Upgrade to TensorFold 1.0.8</strong></p><pre><code data-guide-code-block="2-0">brew upgrade ashhart/tensorfold/tensorfold
tensorfold --version</code></pre></div><p>On an M5 Max or M3 Ultra, download the model and start the server with the commands below. `--context 4096` is a starter value for the test request; raise it after checking readiness memory. `--drafter` attaches DFlash2 to Qwen3.8-27B.</p><div><p><strong>Pull Qwen3.8-27B and DFlash2</strong></p><pre><code data-guide-code-block="2-1">tensorfold pull TensorFold/Qwen3.8-27B-MLX-4bit
tensorfold pull z-lab/Qwen3.8-27B-DFlash2</code></pre></div><div><p><strong>Start the Qwen3.8-27B server</strong></p><pre><code data-guide-code-block="2-2">tensorfold serve TensorFold/Qwen3.8-27B-MLX-4bit --name qwen38-local --drafter z-lab/Qwen3.8-27B-DFlash2 --context 4096 --parallel 1 --temperature 0</code></pre></div></section><figure><img src="https://localai.co.kr/images/guides/backburner-iphone-mac-local-llm-guide-1.webp" alt="A laptop with a document window connected by cable to a phone displaying a page" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Continue memory checks in the everyday setup where you use the model.</figcaption></figure><section><h2>Distinguish readiness memory from everyday use</h2><p>The 17.6 GiB reduction matters when loading Qwen3.8-27B with DFlash2 or preparing a longer context. Leave room for apps alongside model loading, and check both macOS memory pressure and TensorFold's `/memory` diagnostics.</p><div><p><strong>Read memory diagnostics from the default API server</strong></p><pre><code data-guide-code-block="3-0">curl -fsS http://127.0.0.1:8080/memory</code></pre></div></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two compact desktop computers connected to a monitor showing streams of particles" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check server memory and Mac headroom before extending the context.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>TensorFold 1.0.8 keeps one in-memory copy of Qwen3.8-27B weights, reducing readiness memory with DFlash2 by 17.6 GiB. In the release's 70,000-token context check, M5 Max changed from 47.2 to 29.6 GiB and M3 Ultra from 42.2 to 24.6 GiB. The reduction creates room for this combination's DFlash2 drafter and long context; actual use should be checked with your usual apps and input lengths included.</dd></div><div><dt>How much memory does it need?</dt><dd>The table records process memory while preparing TensorFold and DFlash2 on those Macs. macOS and your usual apps share unified memory too. Run the server on your own Mac and check Activity Monitor's memory pressure and swap growth to assess practical headroom.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GLM-5.3 744B on two M5 Ultras: memory and link requirements</title><link>https://localai.co.kr/en/guides/tensorfold-glm53-two-macs-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-glm53-two-macs-guide</guid><description>TensorFold 1.0.8's GLM-5.3 EXLR8 home profile splits the model across two M5 Ultras. This guide covers why each needs 256 GB, split checkpoint downloads, memory at 8K context, and the conditions behind MTP speed.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">GLM-5.3 744B on two M5 Ultras: memory and link requirements</h1><p>The full GLM-5.3 model is split across two Macs, and each needs 256 GB of memory and a wired connection.</p><p id="guide-page-summary">TensorFold 1.0.8 runs the full GLM-5.3 744B model across two M5 Ultras with kindlingai's trellis-coded EXLR8 home profile. Each machine has 256 GB unified memory; download the checkpoint by rank and connect the machines over a cable. At context 8192 and parallel 4, each rank needs 159.6 GB. A single stream decoded at 31–32 tok/s with MTP and 21 tok/s without it; prefill was about 200 tok/s.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Both machines need to be M5 Ultras with 256 GB unified memory.</li><li>At context 8192 and parallel 4, each rank needs 159.6 GB.</li><li>MTP raised single-stream decode from 21 to 31–32 tok/s.</li></ol></section><section><h2>Split one model across two Mac ranks</h2><p>TensorFold's GLM-5.3 EXLR8 path splits checkpoint experts and attention heads across two ranks. One Mac does not hold the complete 744B model. Each rank works on the same request and computes its share of the model.</p><p>The figures here apply to the full GLM-5.3 744B home profile. The Flash model uses a different checkpoint and runtime path, so their memory and speed figures are kept separate. Before setup, confirm the model name, memory capacity, and TensorFold version on both Macs.</p><ul><li><a href="https://github.com/ashhart/TensorFold/releases/tag/v1.0.8">GLM-5.3 details in TensorFold 1.0.8</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two compact desktop computers connected to a monitor showing streams of particles" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Each Mac rank works on the same request over the cable link.</figcaption></figure><section><h2>Check per-rank memory and MTP figures</h2><p>Each Mac downloads half of the expert weights (139.5 GiB) plus 11 GB of whole files shared by each rank. These are checkpoint file sizes. Separately, a running rank uses 159.6 GB at context 8192 and parallel 4. File size and runtime memory measure different things and use the source's different units; leave room for the OS, apps, and cache even on a 256 GB Mac.</p><table><caption>Two-Mac conditions for the GLM-5.3 home profile</caption><thead><tr><th scope="col">Setting</th><th scope="col">Value</th><th scope="col">How to read it</th></tr></thead><tbody><tr><th scope="row">Model</th><td>Full GLM-5.3 744B · EXLR8 home</td><td>Flash excluded</td></tr><tr><th scope="row">Hardware</th><td>Two M5 Ultras · 256 GB each</td><td>Connect ranks over a cable</td></tr><tr><th scope="row">Condition</th><td>context 8192 · parallel 4</td><td>159.6 GB per rank</td></tr><tr><th scope="row">decode</th><td>MTP on 31–32 · off 21 tok/s</td><td>Single stream</td></tr></tbody></table><p>On two M5 Ultras, a single stream decoded at 21 tok/s with MTP off and 31–32 tok/s with it on. Prompt prefill was about 200 tok/s. These are results for one stream's decode and prompt processing, not concurrent-user throughput or a long-run average.</p><ul><li><a href="https://github.com/ashhart/TensorFold/releases/tag/v1.0.8">v1.0.8 figures and conditions</a></li></ul></section><section><h2>Prepare both ranks and check the link</h2><p>Install TensorFold 1.0.8 and pull the same checkpoint revision on both Macs with `--node 0/2` and `--node 1/2`. These numbers select the download shard. For serving, start rank 1 first and start rank 0 within five minutes.</p><div><p><strong>Pull rank 0 shard</strong></p><pre><code data-guide-code-block="2-0">tensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 0/2 --dir ~/models/glm-5.3-exlr8-home</code></pre></div><div><p><strong>Pull rank 1 shard</strong></p><pre><code data-guide-code-block="2-1">tensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 1/2 --dir ~/models/glm-5.3-exlr8-home</code></pre></div><p>First prepare the network on both Macs. Follow the MCDMA [Thunderbolt fabric setup](https://github.com/ashhart/MCDMA/blob/main/docs/fabric.md) to enable RDMA in Recovery, then check the cable-connected interface and peer address. This setup uses the built-in Thunderbolt RDMA path and does not use the separate security changes for Mac and ConnectX drivers.</p><p>From the MCDMA repository root, run the build below in a regular macOS terminal. When `build/rpc/libmcdma-fabric.dylib` is created and passes the official fabric connectivity check, prepare the rank JSON files.</p><div><p><strong>Build the fabric library on both Macs</strong></p><pre><code data-guide-code-block="2-2">git clone https://github.com/ashhart/MCDMA.git
cd MCDMA
make -C rpc
ls -l build/rpc/libmcdma-fabric.dylib
printf '%s\n' "$PWD/build/rpc/libmcdma-fabric.dylib"</code></pre></div><p>Use `~/models/glm-5.3-exlr8-home` on both Macs. Save `rank0.json` there on Mac A and `rank1.json` on Mac B. Set `library` to the absolute library path printed earlier, and `device` and `via` to the actual RDMA device and cable-peer address. Replace `192.0.2.x` and `/path/to` with actual values, then start rank 1 followed by rank 0. When both logs are ready, send requests to Mac A on port 8080.</p><div><p><strong>Mac A: $HOME/models/glm-5.3-exlr8-home/rank0.json</strong></p><pre><code data-guide-code-block="2-3">{
  "rank": 0,
  "library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
  "links": [{"peer": 1, "device": "rdma_en4", "via": "en4/192.0.2.2", "port": 7490, "name": "speedup"}]
}</code></pre></div><div><p><strong>Mac B: $HOME/models/glm-5.3-exlr8-home/rank1.json</strong></p><pre><code data-guide-code-block="2-4">{
  "rank": 1,
  "library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
  "links": [{"peer": 0, "device": "rdma_en4", "via": "en4/192.0.2.1", "port": 7490, "name": "speedup"}]
}</code></pre></div><div><p><strong>Start rank 1 on Mac B first</strong></p><pre><code data-guide-code-block="2-5">tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank1.json" --context 8192 --parallel 4 --temperature 0</code></pre></div><div><p><strong>Start rank 0 on Mac A within five minutes</strong></p><pre><code data-guide-code-block="2-6">tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank0.json" --context 8192 --parallel 4 --temperature 0 --name glm-5.3</code></pre></div><div><p><strong>Send an API request after both logs are ready</strong></p><pre><code data-guide-code-block="2-7">curl -fsS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'</code></pre></div><ul><li><a href="https://github.com/ashhart/TensorFold/blob/main/docs/speed-up-mode.md">MCDMA setup and rank JSON</a></li><li><a href="https://github.com/ashhart/TensorFold">TensorFold repository's GLM-5.3 on two Macs instructions</a></li><li><a href="https://github.com/ashhart/MCDMA">MCDMA library and setup documentation</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A desk with a large monitor showing code-like lines, a desktop tower, and a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the server log to confirm that both ranks are ready.</figcaption></figure><section><h2>Set the working limits after the first response</h2><p>When both ranks are ready and return a reply, the link is working. Change context or parallel one at a time. A longer context expands the state held for each request; more parallel requests require more memory at once. Record response delay and memory pressure together to identify a suitable setting.</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After the first reply, adjust context and concurrent requests for your workload.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>TensorFold 1.0.8 runs the full GLM-5.3 744B model across two M5 Ultras with kindlingai's trellis-coded EXLR8 home profile. Each machine has 256 GB unified memory; download the checkpoint by rank and connect the machines over a cable. At context 8192 and parallel 4, each rank needs 159.6 GB. A single stream decoded at 31–32 tok/s with MTP and 21 tok/s without it; prefill was about 200 tok/s.</dd></div><div><dt>How much memory does it need?</dt><dd>Each Mac downloads half of the expert weights (139.5 GiB) plus 11 GB of whole files shared by each rank. These are checkpoint file sizes. Separately, a running rank uses 159.6 GB at context 8192 and parallel 4. File size and runtime memory measure different things and use the source's different units; leave room for the OS, apps, and cache even on a 256 GB Mac.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>One or two DGX Sparks for Qwen3.8 Flash Next?</title><link>https://localai.co.kr/en/guides/tensorfold-qwen-flash-next-dgx-spark-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-qwen-flash-next-dgx-spark-guide</guid><description>The one-Spark recipe emphasizes concurrent throughput on TensorFold's Zig engine; the two-Spark recipe targets a 1M context and higher single-request decode. Compare conditions without conflating single decode, concurrent throughput, and prefill.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">One or two DGX Sparks for Qwen3.8 Flash Next?</h1><p>The one-Spark setup measured 64.4 tok/s for one request and 200.9 combined at eight; two Sparks with NVFP4 measured 67.4 for one request and 390.1 combined at sixteen.</p><p id="guide-page-summary">The one-Spark recipe uses TensorFold's Zig engine and an INT4-AutoRound checkpoint. At its default 262,144-token window, it measured 64.4 tok/s for one request and 200.9 combined at eight. The two-Spark recipe links two ranks over ConnectX-7, offers either NVFP4 or INT4-AutoRound, and uses a 1,048,576-token window. NVFP4 measured 67.4 tok/s for one request and 390.1 combined at sixteen. Checkpoint, context, and parallelism also change with machine count, so compare the results under their recipe conditions.</p><p>Compare two ways to send prompts to Qwen3.8 Flash-Next on DGX Spark. The single-Spark recipe uses INT4-AutoRound; two Sparks connect through ConnectX-7 and offer NVFP4 or INT4-AutoRound. Read single-request speed separately from aggregate throughput, then follow the server setup.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>One Spark: INT4-AR, 262K, 64.4 tok/s single and 200.9 combined at eight requests.</li><li>Two Sparks with NVFP4: 1M, 67.4 tok/s single and 390.1 combined at sixteen requests.</li><li>Two-Spark INT4-AutoRound reached 89.3 tok/s for one request, with a different checkpoint and quantization.</li></ol></section><section><h2>The one- and two-Spark recipes use different setups</h2><p>The one-Spark recipe serves Qwen3.8 Flash Next with TensorFold's Zig engine. Its defaults are an INT4-AutoRound checkpoint, FP8 KV cache, image input, context 262,144, and parallel 8. The two-Spark recipe assigns one Spark to each rank and connects them over ConnectX-7, offering a larger context window and two checkpoint choices.</p><p>These Spark figures come from MIA's recipe-specific TensorFold Zig builds and settings. As with other MIA recipes that patch TensorFold 0.6.x, do not transfer these results to TensorFold 1.0.8's native qualification table. Model, branch, or patch changes alter the conditions even on the same GPU.</p><p>These are separate recipes. Do not read the one-Spark result as a two-Spark test with the same checkpoint and context; distinguish the effect of the extra machine from quantization differences.</p><ul><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold">One-Spark recipe</a></li><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold">Two-Spark recipe</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start by comparing a one-machine and two-machine server setup.</figcaption></figure><section><h2>Single-request speed and aggregate speed change with request count</h2><p>The table reports prose decode. It separates the single-request result from the aggregate across concurrent requests. More simultaneous requests can raise total throughput while reducing tokens per request and increasing first-token delay.</p><table><caption>Default prose decode comparison</caption><thead><tr><th scope="col">Setup</th><th scope="col">One request</th><th scope="col">Concurrent aggregate</th><th scope="col">Measured parallelism</th></tr></thead><tbody><tr><th scope="row">1 Spark · INT4-AR</th><td>64.4 tok/s</td><td>200.9 tok/s</td><td>8</td></tr><tr><th scope="row">2 Sparks · NVFP4</th><td>67.4 tok/s</td><td>390.1 tok/s</td><td>16</td></tr><tr><th scope="row">2 Sparks · INT4-AR</th><td>89.3 tok/s</td><td>483.6 tok/s</td><td>16</td></tr></tbody></table><p>For personal use, compare the one-request column. For a shared server, also read aggregate throughput and the measured request count. The two-Spark NVFP4 and INT4-AutoRound rows use different checkpoints, so retain that distinction when choosing a setup.</p><ul><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold">One-Spark measurements and conditions</a></li><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold">Two-Spark measurements and conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two compact desktop computers connected to a monitor showing streams of particles" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The two Spark ranks use a dedicated link and network configuration.</figcaption></figure><section><h2>Install the one-Spark recipe and check the first response</h2><p>For the one-Spark setup, prepare a DGX Spark with NVIDIA GPU drivers, Docker and the NVIDIA Container Toolkit, and about 160 GB of free disk. The README's start.sh fetches the container and checkpoint and prepares the server with defaults.</p><div><p><strong>Clone and start the single-Spark recipe</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold.git
cd Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold
./start.sh</code></pre></div><p>Follow the repository's current Quick start procedure. When setup completes, the server reports LIVE on port 8888. Set the API base to the head machine's address followed by /v1 and use model ID Qwen3.8-Flash-Next. After curl receives a reply, enter the same address and model in your client.</p><div><p><strong>Check the API and send a first request on the head</strong></p><pre><code data-guide-code-block="2-1">curl -s http://127.0.0.1:8888/v1/models
curl -s http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"Qwen3.8-Flash-Next","messages":[{"role":"user","content":"Write a Python fibonacci function."}],"max_tokens":1000}'</code></pre></div><p>For the two-device recipe, first create `scripts/local.sh` with the command below. The next settings block belongs in that file: edit its `WORKER` and `FABRIC_PEER` entries with a file editor and save, rather than running the block in the terminal. `WORKER` is the management-LAN SSH target; `FABRIC_PEER` is the worker's CX7 address when needed. Replace the reserved `192.0.2.x` examples with actual addresses. Both devices need Docker and NVIDIA Container Toolkit, and key-based SSH from the head. The default copy mode stores the checkpoint on both devices, so allow disk space on each.</p><div><p><strong>Configure the worker and start the two-Spark recipe</strong></p><pre><code data-guide-code-block="2-2">git clone https://github.com/MiaAI-Lab/Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold.git
cd Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold
cp scripts/local.sh.example scripts/local.sh</code></pre></div><div><p><strong>Save these settings in scripts/local.sh using a file editor</strong></p><pre><code data-guide-code-block="2-3"># Replace both reserved documentation addresses with your actual values.
WORKER=user@192.0.2.2       # worker SSH target on the management LAN
FABRIC_PEER=192.0.2.12      # worker CX7 address when needed</code></pre></div><div><p><strong>Check the saved settings on the head</strong></p><pre><code data-guide-code-block="2-4">grep -nE 'WORKER=|FABRIC_PEER=' scripts/local.sh</code></pre></div><div><p><strong>Verify worker SSH from the head</strong></p><pre><code data-guide-code-block="2-5">ssh-copy-id user@192.0.2.2
ssh -o BatchMode=yes user@192.0.2.2 true</code></pre></div><div><p><strong>Start the two-Spark server</strong></p><pre><code data-guide-code-block="2-6">./start.sh</code></pre></div><div><p><strong>Check the model list and first response after LIVE</strong></p><pre><code data-guide-code-block="2-7">curl -fsS http://127.0.0.1:8888/v1/models
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"Qwen3.8-Flash-Next","messages":[{"role":"user","content":"Write a Python fibonacci function."}],"max_tokens":1000}'</code></pre></div><ul><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold">One-Spark README and commands</a></li><li><a href="https://mia-ai.net/models/Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold">Two-Spark README and commands</a></li></ul></section><section><h2>Choose after matching prefill and context too</h2><p>The two-Spark recipe offers up to a 1M context and defaults to parallel 16, but that is not a promise that every request can fill both limits at once. Each Spark needs about 102 GiB of free memory, and concurrent requests share the KV pool. Choose based on whether you need both 1M context and sixteen concurrent requests, or mostly shorter one- or two-request sessions.</p><p>Prefill is the stage that reads the prompt before producing the first token. The one-Spark result was 2,630 tok/s at a 32K prompt; the two-Spark results near that length were about 2,575 tok/s for NVFP4 and 3,285 tok/s for INT4-AR. First-token delay also depends on prompt length, so evaluate it separately from decode speed.</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check concurrency and prompt length against your workload.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The one-Spark recipe uses TensorFold's Zig engine and an INT4-AutoRound checkpoint. At its default 262,144-token window, it measured 64.4 tok/s for one request and 200.9 combined at eight. The two-Spark recipe links two ranks over ConnectX-7, offers either NVFP4 or INT4-AutoRound, and uses a 1,048,576-token window. NVFP4 measured 67.4 tok/s for one request and 390.1 combined at sixteen. Checkpoint, context, and parallelism also change with machine count, so compare the results under their recipe conditions.</dd></div><div><dt>How much memory does it need?</dt><dd>The two-Spark recipe offers up to a 1M context and defaults to parallel 16, but that is not a promise that every request can fill both limits at once. Each Spark needs about 102 GiB of free memory, and concurrent requests share the KV pool. Choose based on whether you need both 1M context and sixteen concurrent requests, or mostly shorter one- or two-request sessions.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run and compare GLM-5.3 Flash recipes on two, three, and four Sparks</title><link>https://localai.co.kr/en/guides/tensorfold-glm53-flash-multi-spark-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-glm53-flash-multi-spark-guide</guid><description>Compare single-request speed and concurrent throughput in the GLM-5.3-Flash TensorFold recipes for two, three, and four Sparks. The three-Spark setup uses patches; the four-Spark result is experimental on a separate tp4 branch.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run and compare GLM-5.3 Flash recipes on two, three, and four Sparks</h1><p>Single-request decode measured 60.4, 77.6, and 95.2 tok/s on two, three, and four Sparks; four-Spark tp4 remains experimental.</p><p id="guide-page-summary">MIA's GLM-5.3-Flash Spark recipe adds 96 patches to TensorFold 0.6.0. With its default EXL3 4-bit setup, single-request decode measured 60.4 tok/s on two Sparks, 77.6 on three, and 95.2 on four. Aggregate throughput was 108.8 tok/s at four requests on two Sparks, 146.2 at four on three, and 222.4 at eight on four. The four-Spark run uses the experimental tp4 branch.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Single request: 60.4 tok/s on two, 77.6 on three, and 95.2 on four Sparks.</li><li>Aggregate throughput: 108.8 tok/s on two (4 requests), 146.2 on three (4), and 222.4 on four (8). Keep these separate from per-request rates.</li><li>Four-Spark tp4 is experimental and does not include all later fixes.</li></ol></section><section><h2>Start with the scope of the two-Spark recipe</h2><p>GLM-5.3-Flash is a different model from full GLM-5.3 744B. This guide covers the Flash model's two-rank TensorFold recipe. MIA's default run places patches on TensorFold v0.6.0, with one Spark per rank.</p><p>Connect the ConnectX-7 ports directly and configure RoCE v2. The three-Spark experiment needs a triangle layout and rank order; four Sparks use a switch or ring and the separate tp4 branch procedure.</p><ul><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold">GLM-5.3-Flash Spark recipe</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-qwen-flash-next-dgx-spark-guide">One or two DGX Sparks for Qwen3.8 Flash Next?</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-glm53-flash-rtx-pro6000-guide">GLM-5.3 Flash on two RTX PRO 6000s: speed and power limits</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare single-request and concurrent results when adding Spark machines.</figcaption></figure><section><h2>Compare one request and concurrent throughput separately</h2><p>The one-request column is the generation speed of one answer. The aggregate column includes its request count: four concurrent requests for two or three Sparks, and eight for four Sparks. Keep these workloads distinct when comparing shared-server capacity.</p><table><caption>Prose decode speed and concurrent throughput</caption><thead><tr><th scope="col">Sparks</th><th scope="col">One request</th><th scope="col">Aggregate (request count)</th><th scope="col">Status</th></tr></thead><tbody><tr><th scope="row">2</th><td>60.4 tok/s</td><td>108.8 tok/s (4 requests)</td><td>Base recipe</td></tr><tr><th scope="row">3</th><td>77.6 tok/s</td><td>146.2 tok/s (4 requests)</td><td>Patched experiment</td></tr><tr><th scope="row">4</th><td>95.2 tok/s</td><td>222.4 tok/s (8 requests)</td><td>tp4 branch · experimental</td></tr></tbody></table><p>The two-Spark figures were measured with sparkDash at the defaults: 1M context, FP8 KV cache, 4-bit dense weights, DFlash2 and copy drafts, vision on, and GPU clocks capped at 2,200 MHz. The three-Spark run also used its default four streams, 1M window, FP8 KV, and DFlash2 plus copy drafts. Compare model version and request count alongside the table.</p><ul><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold">Two- and three-Spark figures and test conditions</a></li><li><a href="https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold/tree/tp4">Four-Spark tp4 branch and link procedure</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two compact desktop computers connected to a monitor showing streams of particles" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check what each server rank does across the link.</figcaption></figure><section><h2>Prepare the machines and repository, then start the server</h2><p>Each Spark uses a GB10 with 128 GB unified memory and needs about 110 GiB free when the server starts. For the two-Spark recipe, install Docker and the NVIDIA Container Toolkit on both machines and verify key-based SSH from head to worker. Reserve disk for the checkpoint, DFlash2, and container image.</p><p>Clone the repository on the head and copy `scripts/local.sh.example` to `scripts/local.sh`. Save the following settings in the matching entries of `scripts/local.sh` with a file editor. `WORKER` is the worker's management-LAN SSH address; `FABRIC_PEER` is its CX7 address when needed. Check the saved file, then verify key-based SSH using the actual address before starting the server.</p><div><p><strong>Prepare the two-Spark repository and settings file</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold.git
cd GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold
cp scripts/local.sh.example scripts/local.sh</code></pre></div><div><p><strong>Save these settings in scripts/local.sh with a file editor</strong></p><pre><code data-guide-code-block="2-1">WORKER=user@192.0.2.2
FABRIC_PEER=192.0.2.12</code></pre></div><div><p><strong>Check the saved settings and worker SSH from the head</strong></p><pre><code data-guide-code-block="2-2">grep -nE 'WORKER=|FABRIC_PEER=' scripts/local.sh
# Replace the reserved address with the actual worker SSH target.
ssh-copy-id user@192.0.2.2
ssh -o BatchMode=yes user@192.0.2.2 true</code></pre></div><p>On first run, the two-Spark starter prepares the container, checkpoint, and DFlash2, then smoke-tests both ranks. Success prints `GLM-5.3-Flash-EXL3 is now LIVE! on port 8888`. Three Sparks use `start-tp3.sh`; four use the tp4 branch's switchless-ring procedure. The four-Spark path is experimental, so verify detected cabling and rank order in a dry run first.</p><div><p><strong>Start the two-Spark server</strong></p><pre><code data-guide-code-block="2-3">./start.sh</code></pre></div><div><p><strong>Check the model list and first request after LIVE</strong></p><pre><code data-guide-code-block="2-4">curl -fsS http://127.0.0.1:8888/v1/models
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"GLM-5.3-Flash-EXL3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'</code></pre></div><div><p><strong>Start the three-Spark TP3 experiment</strong></p><pre><code data-guide-code-block="2-5">./start-tp3.sh</code></pre></div><div><p><strong>4 Spark ring dry run</strong></p><pre><code data-guide-code-block="2-6">git clone --branch tp4 https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold.git ../glm-flash-tp4
cd ../glm-flash-tp4
DRY_RUN=1 ./start-tp4-switchless.sh</code></pre></div><div><p><strong>Start four-Spark tp4 after checking the wiring</strong></p><pre><code data-guide-code-block="2-7">./start-tp4-switchless.sh</code></pre></div><div><p><strong>Check the four-Spark server response</strong></p><pre><code data-guide-code-block="2-8">curl -fsS http://127.0.0.1:8888/v1/models
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"GLM-5.3-Flash-EXL3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'</code></pre></div><ul><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold">Requirements, startup command, and API address</a></li></ul></section><section><h2>Treat the four-Spark run as a separate validation scope</h2><p>The progression from two to four Sparks shows decode gains as machines are added. The three-Spark setup adds recipe patches, while four Sparks use an experimental branch that has not received the same breadth of exactness checks as the three-Spark setup. Treat the four-Spark figure as a reproduction target for a specific topology and branch, not a guaranteed result on any setup.</p><p>If concurrent throughput is your goal, record both aggregate and per-request tok/s. With only one or two users, single-request speed and TTFT matter more. More concurrent requests can still mean longer waits per user, so measure using your own prompts and reply lengths.</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Validate the final choice with your real request count and reply length.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MIA's GLM-5.3-Flash Spark recipe adds 96 patches to TensorFold 0.6.0. With its default EXL3 4-bit setup, single-request decode measured 60.4 tok/s on two Sparks, 77.6 on three, and 95.2 on four. Aggregate throughput was 108.8 tok/s at four requests on two Sparks, 146.2 at four on three, and 222.4 at eight on four. The four-Spark run uses the experimental tp4 branch.</dd></div><div><dt>How much memory does it need?</dt><dd>Each Spark uses a GB10 with 128 GB unified memory and needs about 110 GiB free when the server starts. For the two-Spark recipe, install Docker and the NVIDIA Container Toolkit on both machines and verify key-based SSH from head to worker. Reserve disk for the checkpoint, DFlash2, and container image.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GLM-5.3 Flash on two RTX PRO 6000s: speed and power limits</title><link>https://localai.co.kr/en/guides/tensorfold-glm53-flash-rtx-pro6000-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-glm53-flash-rtx-pro6000-guide</guid><description>Compare GLM-5.3-Flash TensorFold results on two and four RTX PRO 6000 Blackwell GPUs. Separate the 300 W and 250 W configurations, single-request decode, and concurrent aggregates, then follow the two-GPU setup.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">GLM-5.3 Flash on two RTX PRO 6000s: speed and power limits</h1><p>The two-GPU 300 W setup measured 238.3 tok/s for one request and 448.7 combined at four; four GPUs at 250 W measured 265.9 and 1,063.6 respectively.</p><p id="guide-page-summary">The two-GPU recipe uses TensorFold v0.6.5, an EXL3 expert 4-bit checkpoint, 4-bit dense layers, and an FP8 KV cache. Two RTX PRO 6000 Blackwell GPUs were measured at 300 W each, with 238.3 tok/s for one prose request and 448.7 combined for four. The four-GPU recipe measured 265.9 tok/s for one request and 1,063.6 combined for four at 250 W per card. Both GPU count and per-card power change, so the ratio is not a power-efficiency or retention measure.</p><p>This recipe serves GLM-5.3 Flash locally using two RTX PRO 6000 Blackwell GPUs. Send a prompt and receive an answer, then compare single-request speed and aggregate throughput using the public records below. Four-GPU results are included with their own power limits and runtime settings.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Two GPUs at 300 W: 238.3 tok/s single, 448.7 aggregate at four.</li><li>Four GPUs at 250 W: 265.9 tok/s single, 1,063.6 aggregate at four.</li><li>GPU count and power limits differ, so this is not a same-card power-scaling test.</li></ol></section><section><h2>Fix the model and GPU setup first</h2><p>This guide compares two Linux recipes serving GLM-5.3-Flash on RTX PRO 6000 Blackwell GPUs. Each uses one host with either two or four cards, and the guide separates single-request speed from concurrent throughput. The two-GPU recipe is based on TensorFold v0.6.5; the two results use different power and runtime conditions.</p><ul><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-2x-RTX-PRO-6000-TensorFold">Two-GPU RTX PRO recipe and measurement conditions</a></li><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-4x-RTX-PRO-6000-TensorFold">Four-GPU RTX PRO recipe and measurement conditions</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-glm53-flash-multi-spark-guide">Run and compare GLM-5.3 Flash recipes on two, three, and four Sparks</a></li><li><a href="https://localai.co.kr/en/guides/basalt-qwen38-flash-next-blackwell-guide">Basalt at 665 tok/s? Qwen3.8 Flash-Next Setup and GPU Requirements</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Single-request speed and the aggregate for four requests measure different things.</figcaption></figure><section><h2>Separate per-request speed from aggregate throughput</h2><p>The two-GPU run was measured with sparkDash v1.8.9 at temperature 0, top_p 1, thinking off, and 400-token replies, with each GPU at 300 W. One prose request measured 238.3 tok/s; four requests reached 448.7 combined. The median per-request rate in that four-request test was 114.9 tok/s, so aggregate and individual response flow are different readings.</p><table><caption>Prose decode comparison for RTX PRO setups</caption><thead><tr><th scope="col">Setup</th><th scope="col">Power per GPU</th><th scope="col">One request</th><th scope="col">Four-request aggregate</th></tr></thead><tbody><tr><th scope="row">Two RTX PRO 6000s</th><td>300W</td><td>238.3 tok/s</td><td>448.7 tok/s</td></tr><tr><th scope="row">Four RTX PRO 6000s</th><td>250W</td><td>265.9 tok/s</td><td>1,063.6 tok/s</td></tr></tbody></table><p>The four-GPU page reports 265.9 tok/s for one prose request and 1,063.6 combined for four. Each card was at 250 W, on a different TensorFold and recipe version. Because GPU count and per-card power both differ from the two-card 300 W run, a simple ratio cannot show that performance is retained at twice the power.</p><ul><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-2x-RTX-PRO-6000-TensorFold">Original two-GPU results</a></li><li><a href="https://mia-ai.net/models/GLM-5.3-Flash-EXL3-4x-RTX-PRO-6000-TensorFold">Original four-GPU results</a></li></ul></section><section><h2>Start the two-GPU recipe on a Linux host</h2><p>The two-GPU recipe requires two 96 GB RTX PRO 6000 Blackwell cards in one Linux x86_64 host. Free at least 90,000 MiB on each GPU and confirm CUDA peer access. It also requires Docker, NVIDIA Container Toolkit, Bash, Python 3, Git, GNU patch, curl, gzip, and flock.</p><p>The default recipe uses the DFlash2 drafter under a non-commercial license. If those terms do not fit your use, choose `DRAFTER=mtp ./start.sh` before starting; that path serves one request at a time. The 238.3 tok/s and four-request figures below are from the default DFlash2 recipe.</p><p>The official Aevonix start.sh builds a pinned TensorFold commit with 86 patches, downloads the checkpoint and DFlash2, then runs kernel autotuning and a smoke test. Start with idle GPUs; on success it reports LIVE on port 8022. DRY_RUN=1 ./start.sh prints the steps without using Docker or GPUs.</p><div><p><strong>Start the two-GPU recipe from its official repository</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/Aevonix/GLM-5.3-Flash-EXL3-2x-RTX-PRO-6000-TensorFold.git
cd GLM-5.3-Flash-EXL3-2x-RTX-PRO-6000-TensorFold
DRY_RUN=1 ./start.sh
./start.sh</code></pre></div><ul><li><a href="https://github.com/Aevonix/GLM-5.3-Flash-EXL3-2x-RTX-PRO-6000-TensorFold">Two-GPU TensorFold recipe and launch command</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A desk with a large monitor showing code-like lines, a desktop tower, and a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The startup script checks both GPUs and their connection.</figcaption></figure><section><h2>Read the power warning and first errors in the log</h2><p>Send a request with model ID `glm-5.3-flash` and confirm the first reply. If W_POWER appears, check the configured GPU power limit and record each card's setting with the comparison.</p><div><p><strong>Check the first response through the port 8022 API</strong></p><pre><code data-guide-code-block="3-0">curl -fsS http://127.0.0.1:8022/v1/models
curl -fsS http://127.0.0.1:8022/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"glm-5.3-flash","messages":[{"role":"user","content":"Say READY in one word."}],"temperature":0,"max_tokens":32}'</code></pre></div><p>E_P2P indicates a CUDA peer-access problem between the GPUs. Check the driver, PCIe topology, ACS, and IOMMU settings. For E_GPU_MEMORY, stop other GPU work and verify at least 90,000 MiB free on each card.</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Recording power limits and error codes makes later comparisons easier.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The two-GPU recipe uses TensorFold v0.6.5, an EXL3 expert 4-bit checkpoint, 4-bit dense layers, and an FP8 KV cache. Two RTX PRO 6000 Blackwell GPUs were measured at 300 W each, with 238.3 tok/s for one prose request and 448.7 combined for four. The four-GPU recipe measured 265.9 tok/s for one request and 1,063.6 combined for four at 250 W per card. Both GPU count and per-card power change, so the ratio is not a power-efficiency or retention measure.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The default recipe uses the DFlash2 drafter under a non-commercial license. If those terms do not fit your use, choose `DRAFTER=mtp ./start.sh` before starting; that path serves one request at a time. The 238.3 tok/s and four-request figures below are from the default DFlash2 recipe.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-27B on a 16 GB GPU: choosing ExLlamaV3 and EXL3</title><link>https://localai.co.kr/en/guides/qwen38-27b-exl3-16gb-gpu-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen38-27b-exl3-16gb-gpu-guide</guid><description>The Windows and Linux serving kit matches EXL3 bits per weight, context length, and image input to available VRAM. Compare profiles for 12, 16, 24, and 32 GB, then serve the selected file through an API.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Qwen3.8-27B on a 16 GB GPU: choosing ExLlamaV3 and EXL3</h1><p>The default 16 GB profile is EXL3 2.5 bpw with about 176K context and image input. The 2.0 bpw option offers a longer 229K window with a different quality trade-off.</p><p id="guide-page-summary">MIA's serving kit serves Qwen3.8-27B EXL3 on NVIDIA GPUs with at least 12 GB VRAM and compute capability 7.5. Setup reads VRAM and proposes a bits-per-weight level, context, and image support. The default 16 GB profile is 2.5 bpw with images at 176K; the default 24 GB profile is 4.0 bpw with images at 262K. A 32 GB card shows the same menu. The profile planner prints the selected file size and planned context.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>16 GB recommendation: 2.5 bpw, about 176K context with images.</li><li>24 GB recommendation: 4.0 bpw, 262K context with images.</li><li>Before setup, the planner shows each VRAM profile, download size, and context.</li></ol></section><section><h2>EXL3 adjusts storage size and weight precision together</h2><p>ExLlamaV3 is an inference engine for NVIDIA GPUs, and EXL3 bpw describes the average bits per weight used to store model weights. Lower bpw reduces the file and weight memory, leaving room for a longer context, while moving farther from the original BF16 representation. Choose VRAM, input length, and image support as one profile.</p><p>The kit requires at least 12 GB VRAM, compute capability 7.5 or newer, and NVIDIA driver 570 or newer. Prepare Python 3.11 or newer and run the installer for Windows or Linux. You do not need to install the CUDA Toolkit or packages into system Python.</p><ul><li><a href="https://github.com/MiaAI-Lab/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install">Qwen3.8-27B EXL3 serving kit</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A desk with a large monitor showing code-like lines, a desktop tower, and a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose bpw, context, and image use together in the VRAM profile.</figcaption></figure><section><h2>Compare default profiles and measured limits by VRAM</h2><p>The profile menu calculates combinations after reserving memory for the driver. On 16 GB, 3.5 bpw offers 78K text-only, 3.0 bpw offers 118K with images, 2.5 bpw offers 176K with images, and 2.0 bpw offers 229K with images. The default does not simply select the highest bpw; it also accounts for image support and a useful context length.</p><table><caption>VRAM profile options from the official planner</caption><thead><tr><th scope="col">GPU VRAM</th><th scope="col">bpw</th><th scope="col">Context and images</th></tr></thead><tbody><tr><th scope="row">12GB</th><td>2.0</td><td>33K · text-only</td></tr><tr><th scope="row">16GB</th><td>2.5 default · 3.0 · 3.5 · 2.0</td><td>176K images · 118K images · 78K text · 229K images</td></tr><tr><th scope="row">24GB</th><td>4.0 default · 5.0 · 6.0</td><td>262K images · 180K images · 84K text</td></tr><tr><th scope="row">32GB+</th><td>Same menu as 24 GB</td><td>Capped at measured prefill limits</td></tr></tbody></table><p>The 24 GB and 32 GB+ menu includes 6.0 bpw text-only at 84K, 5.0 bpw with images at 180K, and 4.0 bpw with images at 262K. The planner prints the actual download size and context, so you can preview the 16 GB profiles before setup. The selected profile writes the repository, revision, context, KV cache, GPU memory budget, and vision state to .env.</p><ul><li><a href="https://github.com/MiaAI-Lab/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install">VRAM profiles and context table</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The profile planner calculates context options for the card's VRAM.</figcaption></figure><section><h2>Choose a download with the profile planner and serve it</h2><p>First use `Code → Download ZIP` in the repository and extract the kit into Downloads. The paths below assume `Downloads/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install-main`; replace that path if you extract elsewhere. Run the following commands from the kit root, where `tools/profiles.py`, `linux`, and `windows` are visible.</p><div><p><strong>Enter the extracted kit folder on Linux</strong></p><pre><code data-guide-code-block="2-0">cd "$HOME/Downloads/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install-main"
ls tools/profiles.py linux/setup.sh windows/START-HERE.bat</code></pre></div><div><p><strong>Enter the kit folder in Windows PowerShell</strong></p><pre><code data-guide-code-block="2-1">Set-Location "$HOME\Downloads\Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install-main"
Get-Item .\tools\profiles.py, .\linux\setup.sh, .\windows\START-HERE.bat</code></pre></div><p>To inspect profiles before installation, run tools/profiles.py from the kit folder with system Python; this query needs no extra packages. Start installation with windows\START-HERE.bat on Windows or ./linux/setup.sh on Linux. After setup, the kit contains .venv and the model files.</p><div><p><strong>Preview profiles for a 16 GB card</strong></p><pre><code data-guide-code-block="2-2">python3 tools/profiles.py --list --vram 16
# Windows PowerShell: py -3 tools\profiles.py --list --vram 16</code></pre></div><p>After installation, start the server with ./linux/start.sh on Linux or windows\start.bat on Windows. The local API is at http://127.0.0.1:8888/v1. Read the actual model ID from /v1/models, then send a short request with that ID from Bash or Windows PowerShell and check the response content. Node 22.19 or newer also enables the DeepSeek Harness UI.</p><div><p><strong>Start installation on Linux</strong></p><pre><code data-guide-code-block="2-3">bash linux/setup.sh</code></pre></div><div><p><strong>Start installation on Windows</strong></p><pre><code data-guide-code-block="2-4">&amp; .\windows\START-HERE.bat</code></pre></div><div><p><strong>Start the serving server on Linux</strong></p><pre><code data-guide-code-block="2-5">bash linux/start.sh</code></pre></div><div><p><strong>Start the serving server on Windows</strong></p><pre><code data-guide-code-block="2-6">&amp; .\windows\start.bat</code></pre></div><div><p><strong>Read the model ID, then send a first API request</strong></p><pre><code data-guide-code-block="2-7">curl -fsS http://127.0.0.1:8888/v1/models
# Copy an actual id from the response into MODEL_ID.
MODEL_ID='paste-the-id-returned-by-v1-models'
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Say READY in one word.\"}],\"max_tokens\":8,\"temperature\":0}"</code></pre></div><div><p><strong>Send the first request from Windows PowerShell</strong></p><pre><code data-guide-code-block="2-8">$models = Invoke-RestMethod http://127.0.0.1:8888/v1/models
$id = $models.data[0].id
$body = @{ model = $id; messages = @(@{ role = 'user'; content = 'Say READY in one word.' }); max_tokens = 8; temperature = 0 } | ConvertTo-Json -Depth 6
Invoke-RestMethod -Uri http://127.0.0.1:8888/v1/chat/completions -Method Post -ContentType 'application/json' -Body $body</code></pre></div><ul><li><a href="https://github.com/MiaAI-Lab/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install">Installation, profiles, and OpenAI API procedure</a></li></ul></section><section><h2>Check VRAM and model state after the first error</h2><p>If the server reports Insufficient VRAM in split for model and cache, lower CONTEXT_SIZE or GPU_MEM_GB in .env and restart. If the image tower does not fit alongside the context, the Ready state shows Images: off. Reduce context or select a profile that includes images.</p><p>If the model list is empty, inspect download state with simplex models. If the error persists, simplex doctor checks Python, driver, ports, required .env values, model files, and free disk. One request runs at a time by default, so additional requests wait for the current reply.</p><ul><li><a href="https://github.com/MiaAI-Lab/Qwen3.8-27B-16gb-NVIDIA-GPUs-one-click-install">Profile troubleshooting and simplex doctor</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/backburner-iphone-mac-local-llm-guide-1.webp" alt="A laptop with a document window connected by cable to a phone displaying a page" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the error log to check the memory budget and server state.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MIA's serving kit serves Qwen3.8-27B EXL3 on NVIDIA GPUs with at least 12 GB VRAM and compute capability 7.5. Setup reads VRAM and proposes a bits-per-weight level, context, and image support. The default 16 GB profile is 2.5 bpw with images at 176K; the default 24 GB profile is 4.0 bpw with images at 262K. A 32 GB card shows the same menu. The profile planner prints the selected file size and planned context.</dd></div><div><dt>How much memory does it need?</dt><dd>ExLlamaV3 is an inference engine for NVIDIA GPUs, and EXL3 bpw describes the average bits per weight used to store model weights. Lower bpw reduces the file and weight memory, leaving room for a longer context, while moving farther from the original BF16 representation. Choose VRAM, input length, and image support as one profile.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to measure local LLM speed with sparkDash</title><link>https://localai.co.kr/en/guides/sparkdash-local-llm-benchmark-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/sparkdash-local-llm-benchmark-guide</guid><description>Set up sparkDash's decode and prefill benchmarks and read request count, prompt length, and TTFT. The guide follows the current sparkDash 2.40.0 setup and remote API configuration.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How to measure local LLM speed with sparkDash</h1><p>Measure single-request speed and concurrent throughput separately in sparkDash, then compare results with hardware, model, and workload conditions recorded.</p><p id="guide-page-summary">sparkDash monitors DGX Spark and NVIDIA GPU hosts, local LLM servers, and runs decode, prefill, and quality benchmarks in one dashboard. Decode tests select prose, code, structured, or JSON across concurrent request counts. Prefill sweeps context sizes from 1K to 300K and records TTFT and prefill tok/s. Different request counts and input lengths represent different workloads, so compare matching engine, model, GPU power, prompt, and reply length.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>For decode, distinguish per-request tok/s from the aggregate.</li><li>Prefill records input-token throughput and time to first token.</li><li>Record GPU power, engine, model ID, prompt, and concurrency together.</li></ol></section><section><h2>Choose the workload and server first</h2><p>sparkDash's decode benchmark measures token speed while a server generates replies. Its prefill benchmark records prompt processing throughput and time until the first token. If your work begins with long documents, focus on prefill and TTFT; if replies are long, focus on decode.</p><p>The current README documents sparkDash 2.40.0. Remote GPU hosts can be added over SSH, and each LLM server address and port can be registered for backend and model detection. Before adding a local LLM, note its server port; for a remote unit, prepare an account that sparkDash can reach over SSH.</p><ul><li><a href="https://github.com/MiaAI-Lab/sparkDash">Current sparkDash README and setup</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A desk with a large monitor showing code-like lines, a desktop tower, and a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Save run conditions with the benchmark to trace differences later.</figcaption></figure><section><h2>Start the dashboard from the official repository</h2><p>Clone the repository and start the production Docker Compose stack. Its default bind is loopback-only, so open http://127.0.0.1:5555 on that host. The dashboard monitors servers and displays benchmark results; it does not install or download LLM models.</p><div><p><strong>Start sparkDash on loopback</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/MiaAI-Lab/sparkDash.git
cd sparkDash
docker compose up --build -d</code></pre></div><p>Select This host in Add unit, or enter a remote machine's LAN address and SSH user. Add the TensorFold default port 8888 or the actual port used by the running API. For remote Linux collection, the SSH public-key setup must be visible inside the Docker container. To view the dashboard from another computer, use a loopback SSH tunnel rather than exposing it directly.</p><div><p><strong>Reach it remotely through an SSH tunnel</strong></p><pre><code data-guide-code-block="1-1">ssh -N -L 5555:127.0.0.1:5555 user@sparkdash-host</code></pre></div><ul><li><a href="https://github.com/MiaAI-Lab/sparkDash#quick-start">Quick start and Add unit configuration</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Run decode and prefill tests after the GPU and model server are ready.</figcaption></figure><section><h2>Vary request count in the decode benchmark</h2><p>Open the benchmark on the LLM unit, choose prose, structured, code, or JSON, then set concurrent request count and reply length. The lab protocol uses temperature 0 and thinking off. During the run, sparkDash measures tok/s from the streams and saves the result. When you increase concurrency, read both aggregate tok/s and per-request speed.</p><p>For example, if four requests each average 25 tok/s, the server total is 100 tok/s. Check the speed experienced by an individual through per-request token speed and time to first token (TTFT). Compare prose requests with prose and structured requests with structured ones.</p><ul><li><a href="https://github.com/MiaAI-Lab/sparkDash">Concurrency and task types in the decode bench</a></li></ul></section><section><h2>Record prefill and hardware conditions for comparison</h2><p>The prefill benchmark varies context size from 1K to 300K and records tok/s and TTFT. It uses a unique prefix at each prompt size, helping distinguish first-time prompt processing from cache hits. Read the time to the first token alongside the 32K prefill rate.</p><p>Record GPU model and power limit, TensorFold and model versions, quantization, context, KV cache, and parallelism beside the result. If the backend reports them, the health panel also shows KV use and running or waiting requests. If results differ sharply, check the unit's GPU and API connection before repeating the same workload.</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare model and workload conditions alongside the results.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>sparkDash monitors DGX Spark and NVIDIA GPU hosts, local LLM servers, and runs decode, prefill, and quality benchmarks in one dashboard. Decode tests select prose, code, structured, or JSON across concurrent request counts. Prefill sweeps context sizes from 1K to 300K and records TTFT and prefill tok/s. Different request counts and input lengths represent different workloads, so compare matching engine, model, GPU power, prompt, and reply length.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>TensorFold Living Weights and RAG store knowledge differently</title><link>https://localai.co.kr/en/guides/tensorfold-living-weights-rag-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/tensorfold-living-weights-rag-guide</guid><description>Living Weights updates weights in a supported model folder, while RAG stores source documents separately and retrieves them. This guide covers TensorFold 1.0.8's documented Nemotron scope, making a copy, and rollback.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">TensorFold Living Weights and RAG store knowledge differently</h1><p>TensorFold 1.0.8's Living Weights experiment writes learned facts into a Nemotron folder. Start only from a copy.</p><p id="guide-page-summary">RAG retrieves relevant passages from a document store and places them in the prompt. Living Weights writes facts into the model folder so later runs can use them. TensorFold 1.0.8 documents a Mac workflow for Nemotron 3.5 Lightning with `--slide`. Learning rewrites files and has no automatic undo, so create a separate copy, verify its path, preserve the original, and test only on the copy.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 1.0.8 docs cover the `--slide` path for Nemotron 3.5 Lightning.</li><li>RAG retrieves documents; Living Weights updates weights in the model folder.</li><li>Keep the original, test only on a copy, and restore by replacing the folder.</li></ol></section><section><h2>Start with how each method supplies information</h2><p>RAG retrieves passages related to a question and adds them to the model input. When documents change, update the store; retrieved source text can be shown as evidence. The model weights remain unchanged.</p><table><caption>Operational differences between RAG and Living Weights</caption><thead><tr><th scope="col">Aspect</th><th scope="col">RAG</th><th scope="col">Living Weights</th></tr></thead><tbody><tr><th scope="row">Storage</th><td>Document index</td><td>Weight files in the model folder</td></tr><tr><th scope="row">Source evidence</th><td>Retrieved passages can accompany an answer</td><td>Learned facts may affect replies</td></tr><tr><th scope="row">Update</th><td>Edit documents and refresh the index</td><td>Restore a backup copy to remove learned facts</td></tr></tbody></table><p>Living Weights learns supplied facts into files for a supported model. Later requests may reflect them without retrieving the same text into the prompt, but this is different from a document search system that finds and cites source passages.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Local RAG Setup Guide: Build an AI That Answers from Your Documents</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A dark monitor, a compact desktop computer, and a PC case with several visible fans" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Point learning at a model copy kept apart from the original.</figcaption></figure><section><h2>Stay within the model scope documented for 1.0.8</h2><p>TensorFold 1.0.8 marks Living Weights as experimental and documents learning on Apple-silicon Macs and NVIDIA GB10. The Mac example here uses the Nemotron 3.5 Lightning MLX 4-bit checkpoint with `--slide`.</p><p>Do not infer that `--slide` works with other checkpoints. Qwen3.8-27B and GLM families are not listed as supported in this release guidance; check the README before using any model/platform pair that is not explicitly named.</p><ul><li><a href="https://github.com/ashhart/TensorFold/blob/main/README.md">Living Weights and qualified models in TensorFold 1.0.8</a></li></ul></section><section><h2>Preserve the original and learn on a separate copy</h2><p>`tensorfold pull` downloads the model into the Hugging Face cache. List the snapshot directories as shown below, inspect them, and set `src` to the exact revision for the Nemotron checkpoint; do not pick an arbitrary first entry. Copy only when the new destination `~/models/nemotron-living` does not exist. `cp -cRL` can clone on the same APFS volume; a different volume needs room for a full copy.</p><div><p><strong>Choose a revision and make a fresh copy</strong></p><pre><code data-guide-code-block="2-0">tensorfold pull TensorFold/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-MLX-4bit
cache="$HOME/.cache/huggingface/hub/models--TensorFold--NVIDIA-Nemotron-3.5-Lightning-30B-A3B-MLX-4bit/snapshots"
ls -1d "$cache"/*/
# Inspect the listed revisions, then paste the exact chosen directory below.
src="$cache/replace-with-exact-revision-from-list"
dst="$HOME/models/nemotron-living"
test -d "$src" &amp;&amp; test ! -e "$dst" || { echo 'Check source and ensure destination is new'; exit 1; }
mkdir -p "$HOME/models"
cp -cRL "$src" "$dst"
tensorfold serve "$dst" --slide --name nemotron-living</code></pre></div><p>Learning rewrites files in the model folder, and the README says there is no automatic undo. Use `pwd` or `ls` to confirm the target is the copy rather than the original cache. Read the actual ID from `/v1/models`, send a baseline question with that ID, then compare the same ID and question after learning.</p><div><p><strong>Check the model ID and baseline answer</strong></p><pre><code data-guide-code-block="2-1">curl -fsS http://127.0.0.1:8080/v1/models
# Set this to the exact id returned above; --name normally sets it to nemotron-living.
MODEL_ID='paste-the-id-returned-by-v1-models'
curl -fsS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"What color do I like?\"}],\"max_tokens\":32,\"temperature\":0}"</code></pre></div><div><p><strong>Send one learning request</strong></p><pre><code data-guide-code-block="2-2">curl -N http://127.0.0.1:8080/v1/slide/learn -H 'Content-Type: application/json' -d '{"text":"I like blue."}'</code></pre></div><div><p><strong>Check the result with the same question after learning</strong></p><pre><code data-guide-code-block="2-3">MODEL_ID='paste-the-same-id-from-v1-models'
curl -fsS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"What color do I like?\"}],\"max_tokens\":32,\"temperature\":0}"</code></pre></div><ul><li><a href="https://github.com/ashhart/TensorFold/blob/main/README.md">Official copy-and-serve example</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A desk with a large monitor showing code-like lines, a desktop tower, and a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Write the fact clearly and make it easy to verify before teaching it.</figcaption></figure><section><h2>Check what it remembers and restore if needed</h2><p>Check the success log for the learning request separately from the model's answer. Compare the answer to `What color do I like?` with the baseline you recorded. If the answer is wrong or unwanted, stop the server and replace the model folder with the preserved original or backup copy instead of trying to overwrite it through more learning.</p><p>Before adding another fact, repeat the same test question. Keep pre-learning and modified directories separate so the folder to restore is clear.</p><ul><li><a href="https://github.com/ashhart/TensorFold/blob/main/README.md">Learning target folder and rollback condition</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Printed reports and an open notebook around a laptop displaying documents and charts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After learning, repeat the same question and compare against the original.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>RAG retrieves relevant passages from a document store and places them in the prompt. Living Weights writes facts into the model folder so later runs can use them. TensorFold 1.0.8 documents a Mac workflow for Nemotron 3.5 Lightning with `--slide`. Learning rewrites files and has no automatic undo, so create a separate copy, verify its path, preserve the original, and test only on the copy.</dd></div><div><dt>When is it better not to choose this?</dt><dd>`tensorfold pull` downloads the model into the Hugging Face cache. List the snapshot directories as shown below, inspect them, and set `src` to the exact revision for the Nemotron checkpoint; do not pick an arbitrary first entry. Copy only when the new destination `~/models/nemotron-living` does not exist. `cp -cRL` can clone on the same APFS volume; a different volume needs room for a full copy.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Build a local AI chat interface with Open WebUI</title><link>https://localai.co.kr/en/guides/open-webui-local-chat-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/open-webui-local-chat-guide</guid><description>Open WebUI connects to a local model server and lets you manage chats and document questions in a browser. This guide installs it with Docker, creates the first admin account, connects Ollama, and tests saved conversations and PDF questions.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Build a local AI chat interface with Open WebUI</h1><p>Connect Open WebUI to a model server such as Ollama to chat in a browser and ask questions about attached files.</p><p id="guide-page-summary">Open WebUI is a chat interface that sends requests to a local model server; it is not a model itself. Run its Docker container on a loopback-only port, create the first admin account, and add an Ollama connection. Chats and uploaded files are stored in the configured data volume, so manage and back up that storage.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Open WebUI does not include a model; it connects to Ollama or a compatible API server.</li><li>Binding the Docker port to 127.0.0.1 keeps the web interface accessible only from this computer.</li><li>When Open WebUI in Docker connects to Ollama on the host, use the host.docker.internal address.</li><li>Chats and uploaded files remain in the data volume, which must be retained when recreating the container.</li></ol></section><section><h2>Open WebUI is a chat interface that connects to a model</h2><p>Open WebUI is a browser interface for chatting with a local language model and asking questions about attached files. It sends prompts to Ollama or an OpenAI-compatible API server and displays the responses. It does not provide a model itself, so a model server must be running first.</p><p>This guide connects Ollama as a Mac app to Open WebUI in Docker Desktop. Start the container, create the first admin account, and register the Ollama address. Once a model appears in the picker, test a text prompt, then attach a short PDF.</p><ul><li><a href="https://docs.openwebui.com/getting-started/quick-start/">Open WebUI official quick start</a></li><li><a href="https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide">What is Crane? Run LLM, OCR and audio models behind a local Rust API</a></li><li><a href="https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide">Backburner: Accelerate Mac LLM Prefill with an iPhone</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-1.webp" alt="A laptop with a block diagram connects through a colored-block device to document panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The chat interface sends requests to the model server and displays its responses.</figcaption></figure><section><h2>Install Docker and expose the container on a local port</h2><p>Install and start Docker Desktop, then launch the Open WebUI container from a terminal. `127.0.0.1:3000:8080` maps port 3000 on this computer to port 8080 in the container, while the `open-webui` volume stores accounts, settings, chats, and uploads.</p><div><p><strong>Start the Open WebUI container</strong></p><pre><code data-guide-code-block="1-0">docker run -d --name open-webui --restart unless-stopped -p 127.0.0.1:3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data ghcr.io/open-webui/open-webui:main</code></pre><p><small>Keep the volume to retain accounts and saved data when recreating the container.</small></p></div><p>When the container starts, open `http://127.0.0.1:3000` in a browser. If the first screen shows Create Admin Account, choose a username and password. This first account is the admin; public sign-up is disabled by default afterward. Keep the password and Docker volume safe so you can regain access to settings and chats. After signing in, connect Ollama in the next section to load its model list.</p><ul><li><a href="https://docs.openwebui.com/getting-started/quick-start/">Docker setup and first admin account</a></li></ul></section><section><h2>Connect Ollama from Open WebUI inside Docker</h2><p>Use these settings when Ollama runs as a Mac app and Open WebUI runs in Docker Desktop. Inside the container, `localhost` refers to the Open WebUI container, not Ollama. Use `http://host.docker.internal:11434` to reach the Ollama API on the host Mac from Docker Desktop.</p><p>By default, Ollama accepts connections only on the Mac's `127.0.0.1`. To accept requests from Docker, set `OLLAMA_HOST` to `0.0.0.0:11434` before starting the macOS app, then restart it. This setting accepts connections on every network interface and does not provide API authentication by default.</p><p>Do not use this setting on an untrusted network. Restrict inbound connections to port 11434 in the firewall and do not expose the port through a router.</p><div><p><strong>Allow Ollama connections from Docker on Mac</strong></p><pre><code data-guide-code-block="2-0">launchctl setenv OLLAMA_HOST 0.0.0.0:11434</code></pre><p><small>Restart the Ollama app after this command. It broadens the listener, so use it only with firewall restrictions on a trusted network.</small></p></div><p>Open Settings → Admin → Connections from the avatar menu, edit the Ollama API connection, and save `http://host.docker.internal:11434`. When an Ollama model appears in the picker, send a short text prompt and confirm the response. If the list is empty or the connection fails, first confirm Ollama is running and that `ollama list` shows a downloaded model.</p><div><p><strong>Check downloaded Ollama models</strong></p><pre><code data-guide-code-block="2-1">ollama list</code></pre><p><small>The model must appear here before it can be selected in Open WebUI.</small></p></div><ul><li><a href="https://docs.openwebui.com/getting-started/quick-start/">Ollama connection URL and admin settings</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A small robot device connected to browser, calendar, and message panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test a short document after confirming the model connection.</figcaption></figure><section><h2>Test saved chats and PDF questions with a real file</h2><p>Send a short, non-sensitive prompt to the connected model and confirm a response. Start a new chat and send the same sentence to create a separate conversation, then reopen the first chat from the sidebar to confirm it was saved. Deleting the data volume can remove saved chats, so back up needed data before removing volumes.</p><p>Next, attach a short PDF and ask for a specific heading or date from it. Compare the response with the actual page to check that the file was processed and the result is useful. Scanned pages may need text extraction, and before uploading confidential or personal information, confirm where the file is stored and included in backups.</p><ul><li><a href="https://docs.openwebui.com/">Open WebUI chat and document features</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-3.webp" alt="An open cabinet of colored blocks, a wastebasket, and arranged blocks beside a checklist notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The server and chat history are stored separately, so manage each storage location.</figcaption></figure><section><h2>Trace the first failure when the page or model does not respond</h2><p>If the page does not open, use `docker ps` to see whether the container is running and read the first error with `docker logs open-webui` if it stopped. If the container is absent or reports a port conflict, check whether another program uses port 3000 and remap Open WebUI to a different local port.</p><p>If the page opens but no models appear, check in Settings → Admin → Connections that the Ollama URL is `http://host.docker.internal:11434`. This address is used with Docker Desktop on Mac. If `ollama list` shows a model and Ollama is running but the connection fails, check that Ollama on the Mac accepts Docker requests.</p><p>If Ollama is installed on a Linux host, `host.docker.internal` may not be available automatically. Configure a Docker host-gateway mapping or host networking, then use the Ollama address that matches that setup.</p><ul><li><a href="https://docs.openwebui.com/troubleshooting/">Open WebUI official troubleshooting</a></li></ul></section><aside><h2>Prepare the Ollama server first</h2><p>Start a model in Ollama, add `http://host.docker.internal:11434` under Open WebUI's connection settings, and test a short chat.</p><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Open WebUI is a chat interface that sends requests to a local model server; it is not a model itself. Run its Docker container on a loopback-only port, create the first admin account, and add an Ollama connection. Chats and uploaded files are stored in the configured data volume, so manage and back up that storage.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not use this setting on an untrusted network. Restrict inbound connections to port 11434 in the firewall and do not expose the port through a router.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Build a local AI workflow with n8n and Ollama</title><link>https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide</guid><description>n8n connects file reading, PDF text extraction, local LLM summarization, and output storage. This guide links Docker-based n8n to Ollama running natively on a Mac, tests the workflow manually, and adds a schedule after checking the results.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Build a local AI workflow with n8n and Ollama</h1><p>Place a PDF in a folder and n8n can extract its text, ask Ollama to summarize it, and save the result as a file.</p><p id="guide-page-summary">n8n automates file handling and model calls by connecting workflow nodes. Its self-hosted AI Starter Kit is an example Docker Compose environment for n8n and related services. On Apple Silicon Macs, Docker containers cannot directly use the GPU, so this guide runs Ollama as a Mac app and lets n8n in Docker connect to the host. Because Ollama's port must accept network connections, restrict who can reach it.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>n8n automates recurring work by connecting trigger, file, and model nodes.</li><li>On Apple Silicon, running Ollama as a macOS app and n8n in Docker keeps model inference on the host, where it can use the Mac GPU.</li><li>Use `http://host.docker.internal:11434/` from the container and configure Mac Ollama to accept that connection.</li><li>Check that extracted PDF text reaches the model and that the output path works with a small sample before scheduling runs.</li></ol></section><section><h2>n8n connects file handling and model requests in one workflow</h2><p>n8n connects schedules, files, and web requests to processing steps in a workflow. This example reads a PDF from a shared folder, extracts its text, asks Ollama for a Korean summary, and saves the result. Inspect each step's inputs and outputs to spot where a run failed.</p><p>Create the workflow with a `Manual Trigger` as its first node. In the editor, click `Execute Workflow` to run one PDF end to end, then inspect each node's input and output and check that the summary preserves the source. Set a duplicate/retry policy before adding a `Schedule Trigger`.</p><ul><li><a href="https://docs.n8n.io/hosting/starter-kits/ai-starter-kit/">n8n official self-hosted AI Starter Kit guide</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/crane-server-workflow.webp" alt="A laptop with panel shapes on screen beside a compact computer, microphone, notebook, and stopwatch" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate file handling, model calls, and output storage into inspectable steps.</figcaption></figure><section><h2>Prepare the Docker starter kit and Ollama on the Mac</h2><p>Install Docker Desktop and the Ollama app. From Ollama's model library, choose a model and run the exact `ollama pull ...` command shown on its page; then use `ollama list` to see the installed name. The official starter kit notes that Docker on Mac cannot pass the Apple GPU into the container, so n8n runs in Docker Compose while native Ollama handles inference.</p><p>Clone the starter kit, create its environment file, and replace the documented default passwords and encryption key. When Ollama runs natively on the Mac, set `OLLAMA_HOST` to `host.docker.internal:11434`. Prepare `shared/inbox`, `shared/output`, and `shared/processed`, then start the project and open `http://localhost:5678/` to set up n8n.</p><div><p><strong>Create the n8n starter-kit folder</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git n8n-ai-local
cd n8n-ai-local
cp .env.example .env
mkdir -p shared/inbox shared/output shared/processed</code></pre><p><small>Run this in a new folder and replace the sample secrets in .env.</small></p></div><div><p><strong>Start the starter kit on Mac</strong></p><pre><code data-guide-code-block="1-1">docker compose up</code></pre><p><small>Docker cannot pass through the Apple GPU, so run Ollama separately as a Mac app.</small></p></div><div><p><strong>Environment variable for local Ollama</strong></p><pre><code data-guide-code-block="1-2">OLLAMA_HOST=host.docker.internal:11434</code></pre><p><small>Put this value in `.env`. The n8n credential Base URL is `http://host.docker.internal:11434/`.</small></p></div><p>The Ollama app accepts connections only on `127.0.0.1:11434` by default. Docker needs a matching listener setting on the Mac to reach Ollama. For the macOS app, set the value from the official FAQ, `launchctl setenv OLLAMA_HOST 0.0.0.0:11434`, then restart the app.</p><p>This setting accepts connections on every network interface. Use the Mac firewall to restrict port 11434 to trusted local connections, and do not forward the port through a router or expose it to the internet. The Ollama API has no authentication by default.</p><div><p><strong>Allow Ollama connections from the macOS app</strong></p><pre><code data-guide-code-block="1-3">launchctl setenv OLLAMA_HOST "0.0.0.0:11434"</code></pre><p><small>This listens on all interfaces; restrict access with a firewall and do not expose it externally.</small></p></div><ul><li><a href="https://github.com/n8n-io/self-hosted-ai-starter-kit">Mac connection instructions in the n8n starter-kit repository</a></li><li><a href="https://docs.ollama.com/faq">Ollama FAQ on host binding and macOS configuration</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-2.webp" alt="Lines connect an open desktop with colored blocks to tablet and screen-shaped panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Ollama on the Mac and n8n in Docker run in different address spaces.</figcaption></figure><section><h2>Build the PDF summary workflow one step at a time</h2><p>Start with `Manual Trigger`. Place the PDF at `n8n-ai-local/shared/inbox/brief.pdf` on the host and connect `Read/Write Files from Disk`. Set Operation to `Read File(s) From Disk`, File(s) Selector to `/data/shared/inbox/*.pdf`, and Put Output File in Field to `data`. Compose mounts the host's `shared` at `/data/shared`, so the selector uses the container path.</p><p>Connect `Extract From File` with Operation `Extract From PDF` and Input Binary Field `data`. Its output text is in `text`. Add `Basic LLM Chain`, connect `Ollama Chat Model`, set its credential Base URL to `http://host.docker.internal:11434/`, and select the exact model name from `ollama list`. Put the following prompt in the chain's Prompt field.</p><div><p><strong>Summary prompt for the chain</strong></p><pre><code data-guide-code-block="2-0">문서의 핵심을 5개 항목 이내로 요약하세요. 날짜·금액·고유명사는 원문대로 유지하세요.

{{ $json.text }}</code></pre></div><p>The chain output is in the `text` field. In `Convert to File`, choose Operation `Convert to Text File`, set Text Input Field to `text`, and set File Name to `{{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}`.</p><p>In the final `Read/Write Files from Disk` node, choose `Write File to Disk`, set File Path and Name to `/data/shared/output/{{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}`, and Input Binary Field to `data`.</p><p>The first output is `n8n-ai-local/shared/output/brief.summary.txt` on the host. Add OCR if extracted `text` is empty for a scanned PDF.</p><p>After connecting every node, click `Execute Workflow` in the editor. Inspect each node's inputs and outputs, then read `shared/output/brief.summary.txt` on the host against the original.</p><ul><li><a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/">n8n Read/Write Files from Disk node</a></li><li><a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/">PDF text extraction node</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A person at a monitor with check marks and document icons, beside a stack of papers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect extracted text and summaries before enabling scheduled runs.</figcaption></figure><section><h2>Check the summary before adding a schedule trigger</h2><p>Before enabling the schedule, insert `Remove Duplicates` between file reading and PDF extraction. Set Operation to `Remove Items Processed in Previous Executions`, Keep Items Where to `Value Is New`, Value to Dedupe On to `{{ $binary.data.fileName }}`, and Scope to `Node`. A filename already seen is filtered out on the next execution rather than sent to the model again.</p><p>This exercise uses filenames as document IDs. Give revised documents new names such as `brief-v2.pdf`; rename a failed input before submitting it again. Keep an earlier summary under another name if needed. Different documents must have distinct filenames.</p><p>Run the same file twice and confirm that the second execution sends no item beyond the deduplication node. Then add `Schedule Trigger`, set a low frequency, and activate the workflow. Check execution logs and the output folder after the first scheduled runs.</p><ul><li><a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.removeduplicates/">Remove Duplicates across executions</a></li></ul></section><section><h2>Trace the path when the model or file step returns nothing</h2><p>If the Ollama model node reports a connection error, check that Ollama is running on the Mac and that `ollama list` contains the model. Then verify that Credentials has `http://host.docker.internal:11434/` and `.env` has `host.docker.internal:11434`. Select the exact model name shown in the list.</p><p>If a file node cannot find the path, check that you used a container path such as `/data/shared/...` rather than a Mac path. If `Extract From File` returns nothing, check whether the PDF contains selectable text. Use execution history to find whether reading, extraction, the model request, or writing failed so you can fix that step without rebuilding the whole workflow.</p><ul><li><a href="https://docs.n8n.io/hosting/starter-kits/ai-starter-kit/">Mac Ollama URL and shared folder in the starter kit</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Read the n8n starter kit guide</h2><p>Check the shared-volume path and Mac Ollama connection first.</p><a href="https://docs.n8n.io/hosting/starter-kits/ai-starter-kit/">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>n8n automates file handling and model calls by connecting workflow nodes. Its self-hosted AI Starter Kit is an example Docker Compose environment for n8n and related services. On Apple Silicon Macs, Docker containers cannot directly use the GPU, so this guide runs Ollama as a Mac app and lets n8n in Docker connect to the host. Because Ollama's port must accept network connections, restrict who can reach it.</dd></div><div><dt>When is it better not to choose this?</dt><dd>This setting accepts connections on every network interface. Use the Mac firewall to restrict port 11434 to trusted local connections, and do not forward the port through a router or expose it to the internet. The Ollama API has no authentication by default.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Save and resume a local LLM workflow with LangGraph</title><link>https://localai.co.kr/en/guides/langgraph-local-checkpoint-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/langgraph-local-checkpoint-guide</guid><description>Connect a LangGraph checkpointer to an Ollama model and save a document-question workflow's state. Reuse the same thread_id to continue the conversation, and use a SQLite file to load checkpoints after restarting the process.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Save and resume a local LLM workflow with LangGraph</h1><p>A checkpointer saves graph state for one thread. Fix the local model endpoint and thread_id to inspect and resume work after a pause.</p><p id="guide-page-summary">This example uses `ChatOllama` in Python to call an Ollama model at `http://127.0.0.1:11434`, then stores input and response messages from a LangGraph `StateGraph` in `checkpoints.sqlite` with `SqliteSaver`. Reuse the same `configurable.thread_id` on each call to continue that thread. An in-memory checkpointer disappears when the process ends; choose SQLite when you need restart recovery.</p><p>To continue a local-LLM conversation after restarting a program, save its questions and answers. A LangGraph `checkpoint` records graph execution state. The example stores conversation messages in SQLite and restores them with the same conversation ID.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A `StateGraph` receives and returns state; a checkpointer stores snapshots of execution steps.</li><li>The same `thread_id` selects the same conversation `checkpoints`; a different ID separates another workflow.</li><li>The local model call and `checkpoint` storage are separate: Ollama serves the model, while SQLite stores the `checkpoints`.</li></ol></section><section><h2>Separate the model call from graph-state storage</h2><p>LangGraph represents processing steps as nodes and their connections as edges. Saving state in a `checkpoint` lets the next request resume with the same `thread_id`. Start here with one question-answering node and a local Ollama call.</p><ul><li><a href="https://docs.langchain.com/oss/python/langgraph/persistence">LangGraph persistence documentation</a></li><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Build a local AI workflow with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="Arrows lead from document, table, and mail icons to a robot beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Represent the question and model call as graph nodes; let the checkpointer store state.</figcaption></figure><section><h2>Prepare a virtual environment and local model endpoint</h2><p>Start Ollama and note the chat model ID you already downloaded. In a Python virtual environment, install `langgraph`, `langgraph-checkpoint-sqlite`, and `langchain-ollama`. Set `ChatOllama`'s `base_url` to the default server at `http://127.0.0.1:11434` and use the model ID shown by `ollama list`.</p><div><p><strong>Create an environment and install packages</strong></p><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U langgraph langgraph-checkpoint-sqlite langchain-ollama</code></pre><p><small>Commands use a macOS/Linux shell. Keep Ollama running separately.</small></p></div><ul><li><a href="https://reference.langchain.com/python/langchain-ollama/langchain_ollama/chat_models/ChatOllama">ChatOllama API reference</a></li></ul></section><section><h2>Build a state graph that answers a question</h2><p>Use `MessagesState` and `StateGraph` to define one node that answers a user question. Open a SQLite saver as a context manager to store `checkpoints` in `checkpoints.sqlite`, then attach the saver when compiling the graph. Pass `{'configurable': {'thread_id': 'demo-1'}}` to the first and later invocations to continue that thread's messages.</p><div><p><strong>SQLite checkpointer and Ollama graph</strong></p><pre><code data-guide-code-block="2-0">import sys
from langchain_ollama import ChatOllama
from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.graph import START, END, MessagesState, StateGraph

model = ChatOllama(model="YOUR_OLLAMA_MODEL_ID", base_url="http://127.0.0.1:11434")
def answer(state: MessagesState):
    return {"messages": [model.invoke(state["messages"])]}

builder = StateGraph(MessagesState)
builder.add_node("answer", answer)
builder.add_edge(START, "answer")
builder.add_edge("answer", END)
config = {"configurable": {"thread_id": "demo-1"}}
mode = sys.argv[1]
with SqliteSaver.from_conn_string("checkpoints.sqlite") as checkpointer:
    graph = builder.compile(checkpointer=checkpointer)
    if mode == "start":
        question = "예제 문서: 장비 대여 규정의 시행일은 2026년 4월 1일이다. 이 문서의 시행일은 언제야?"
        graph.invoke({"messages": [("user", question)]}, config)
        print("saved messages:", len(graph.get_state(config).values["messages"]))
    elif mode == "resume":
        print("restored messages:", len(graph.get_state(config).values["messages"]))
        result = graph.invoke({"messages": [("user", "방금 답변에서 날짜만 다시 말해줘.")]}, config)
        print("messages after follow-up:", len(graph.get_state(config).values["messages"]))
        print(result["messages"][-1].content)
    else:
        raise SystemExit("Usage: python app.py start|resume")</code></pre><p><small>Replace `YOUR_OLLAMA_MODEL_ID` with an ID from `ollama list` and save as `app.py`. `python app.py start` stores the fictional policy and date in SQLite and reports two messages. After that process exits, `python app.py resume` restores two messages from the same file and thread_id, then reports four after the follow-up.</small></p></div><ul><li><a href="https://reference.langchain.com/python/langgraph-checkpoint-sqlite">SQLite checkpointer reference</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Page cards follow arrows between a document stack, monitor, and server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Save graph state in the checkpointer to continue on the next request.</figcaption></figure><section><h2>Call twice and check state, then test restart recovery</h2><p>Send an initial and follow-up question with the same thread_id, then inspect the length of `graph.get_state(config).values['messages']` and the last reply. For a meaningful continuity check, do not manually resend the earlier conversation in the second question. After ending the process, reopen the same SQLite file with the same thread_id to load the saved state.</p><p>`InMemorySaver` suits an in-process check, but its state disappears when the process exits. If the SQLite file is not updated, check that the graph received the checkpointer and that each call uses the exact same thread_id. A different ID starts a separate conversation.</p><p>If several people continue the same conversation or you switch devices mid-thread, local checkpoints alone do not solve it. Compare a setup that keeps state on a server separately.</p><ul><li><a href="https://docs.langchain.com/oss/python/langgraph/persistence">thread_id and state recovery docs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A person at a monitor with check marks and document icons, beside a stack of papers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After restarting, review whether the saved state matches the conversation you expect.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Explore checkpointer configuration</h2><p>Compare the scope of memory, SQLite, and server-oriented persistence.</p><a href="https://docs.langchain.com/oss/python/langgraph/persistence">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>This example uses `ChatOllama` in Python to call an Ollama model at `http://127.0.0.1:11434`, then stores input and response messages from a LangGraph `StateGraph` in `checkpoints.sqlite` with `SqliteSaver`. Reuse the same `configurable.thread_id` on each call to continue that thread. An in-memory checkpointer disappears when the process ends; choose SQLite when you need restart recovery.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Find slow steps in a local agent with Langfuse</title><link>https://localai.co.kr/en/guides/langfuse-local-agent-tracing-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/langfuse-local-agent-tracing-guide</guid><description>Run Langfuse locally and record agent steps with observations from the Python SDK v4. Separating model calls, tool waits, and retries helps distinguish GPU token generation from end-to-end request latency.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Find slow steps in a local agent with Langfuse</h1><p>Break one response's time into model, retrieval, and tool steps to decide where to investigate.</p><p id="guide-page-summary">Langfuse displays trace events that an application explicitly sends. With a local instance and Python SDK v4, point the API base URL at that instance and instrument function calls with `@observe`. Installing Langfuse does not automatically trace arbitrary Ollama requests. Instrumented inputs and outputs can contain personal or document data, so choose recorded fields deliberately and mask sensitive values.</p><p>Use Langfuse to see which part of a local agent takes time: model calls, file reads, or tools. Python SDK trace events show the start, end, and duration of each step. The example traces a local Ollama request and a synthetic file read without storing prompt or response content.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A trace's total duration can include queueing, tools, model setup, and generation.</li><li>For new instrumentation, use `@observe` and `get_client()` from Python SDK v4 rather than older `trace()` examples.</li><li>Choose instrumentation boundaries so sensitive information is not recorded in Langfuse inputs or outputs.</li></ol></section><section><h2>Break end-to-end latency into processing steps</h2><p>A slow agent does not always mean slow token generation. Retrieval, file reads, tool waits, retries, and response generation can all contribute. Recording each step in a Langfuse trace lets you compare which segment grew for the same test input.</p><ul><li><a href="https://langfuse.com/docs/observability/get-started">Langfuse tracing quickstart</a></li><li><a href="https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide">What is Crane? Run LLM, OCR and audio models behind a local Rust API</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="Arrows lead from document, table, and mail icons to a robot beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Recording each step's duration makes end-to-end latency easier to diagnose.</figcaption></figure><section><h2>Start the local instance and prepare SDK instrumentation</h2><p>In the repository root's `docker-compose.yml`, replace every value marked `# CHANGEME`. Restrict the web service's `ports` to `127.0.0.1:3000:3000` and set `NEXTAUTH_URL` to `http://localhost:3000`. Run `docker compose up -d` and `docker compose ps`, then confirm the port shows `127.0.0.1:3000-&gt;3000/tcp`.</p><p>When `Ready` appears in `docker compose logs -f langfuse-web`, open `http://localhost:3000` in a browser. Create the first user on the signup screen, then generate public and secret keys under the project's `Settings → API Keys`.</p><div><p><strong>Prepare the Langfuse Compose repository</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/langfuse/langfuse.git langfuse-local
cd langfuse-local
# 저장소 루트 docker-compose.yml에서 # CHANGEME 값을 바꾸고 NEXTAUTH_URL을 맞춰요.</code></pre><p><small>Prepare the repository, then apply the following port mapping to the UI service.</small></p></div><div><p><strong>Loopback-only port mapping for the UI service</strong></p><pre><code data-guide-code-block="1-1">ports:
  - "127.0.0.1:3000:3000"</code></pre><p><small>Replace the existing ports entry on the Compose service exposing port 3000.</small></p></div><div><p><strong>Start Langfuse and verify its port</strong></p><pre><code data-guide-code-block="1-2">docker compose up -d
docker compose ps
docker compose logs -f langfuse-web</code></pre><p><small>Open http://localhost:3000 when the PORTS column shows 127.0.0.1:3000-&gt;3000/tcp.</small></p></div><ul><li><a href="https://langfuse.com/self-hosting/deployment/docker-compose">Official Langfuse Docker Compose deployment</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A small robot device connected to browser, calendar, and message panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Point the UI and tracing SDK at the same local instance.</figcaption></figure><section><h2>Record model and tool steps with SDK v4</h2><p>Install `langfuse` and `requests`, then set the project's public and secret API keys, `LANGFUSE_BASE_URL=http://localhost:3000`, and an already-installed Ollama model ID. `@observe` creates the parent request span; context managers from `get_client()` record Ollama generation and file-read tool observations beneath it. The sample omits input/output bodies and records only status and character count as metadata.</p><div><p><strong>Install the SDK and set environment variables</strong></p><pre><code data-guide-code-block="2-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U langfuse requests
export LANGFUSE_PUBLIC_KEY='pk-lf-project-key'
export LANGFUSE_SECRET_KEY='sk-lf-project-secret'
export LANGFUSE_BASE_URL='http://localhost:3000'
export OLLAMA_MODEL='YOUR_INSTALLED_MODEL_ID'</code></pre><p><small>Copy keys from project settings and use a model ID listed by ollama list.</small></p></div><p>After setting the environment variables, save the code below as `run_trace.py`. It calls Ollama once with a fixed prompt and reads a synthetic text file. The trace records duration and status for the two steps.</p><div><p><strong>run_trace.py: trace Ollama and a synthetic file read</strong></p><pre><code data-guide-code-block="2-1">import os
from pathlib import Path
import requests
from langfuse import get_client, observe, propagate_attributes

MODEL = os.environ['OLLAMA_MODEL']
langfuse = get_client()

@observe(name='local-agent-request', as_type='span', capture_input=False, capture_output=False)
def run_trace():
    with propagate_attributes(trace_name='local-agent-toy', session_id='toy-session-1'):
        with langfuse.start_as_current_observation(as_type='generation', name='ollama-chat', model=MODEL) as generation:
            response = requests.post('http://127.0.0.1:11434/api/chat', json={'model': MODEL, 'stream': False, 'messages': [{'role': 'user', 'content': 'Reply with exactly: local trace test'}]}, timeout=120)
            response.raise_for_status()
            generation.update(metadata={'http_status': response.status_code})
        with langfuse.start_as_current_observation(as_type='tool', name='read-toy-file') as tool:
            text = Path('fixture.txt').read_text(encoding='utf-8')
            tool.update(metadata={'file': 'fixture.txt', 'characters': len(text)})
        print('Ollama status:', response.status_code, '| fixture characters:', len(text))

run_trace()
langfuse.flush()</code></pre><p><small>Save this code block as run_trace.py. Put only synthetic text in fixture.txt; record model, HTTP status, and file character count, not prompt or response content.</small></p></div><div><p><strong>Create the synthetic file and send a trace</strong></p><pre><code data-guide-code-block="2-2">printf '%s\n' 'Synthetic fixture for a local tracing example.' &gt; fixture.txt &amp;&amp; python run_trace.py</code></pre><p><small>On success, the terminal prints HTTP 200 and a character count, and Langfuse shows a local-agent-toy trace.</small></p></div><ul><li><a href="https://langfuse.com/docs/observability/sdk/overview">Python SDK v4 setup and instrumentation</a></li></ul></section><section><h2>Inspect a trace with a fixed, non-sensitive input</h2><p>When `local-agent-toy` appears in Traces, open it and inspect the parent span, its `ollama-chat` generation and `read-toy-file` tool children, their durations, and recorded metadata.</p><p>For an initial 401/403, check that the public and secret keys came from the same project and that the API URL is `http://localhost:3000`. For a connection error, check service status and the PORTS value in `docker compose ps`; for Ollama, check `curl http://127.0.0.1:11434/api/tags`.</p><p>Only the synthetic prompt and fixture are used; document text and model output are not set as trace input/output.</p><ul><li><a href="https://langfuse.com/docs/observability/sdk/upgrade-path/python-v3-to-v4">Python SDK v3 to v4 migration</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-3.webp" alt="An open cabinet of colored blocks, a wastebasket, and arranged blocks beside a checklist notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare one trace's step timings to separate model work from tool waits.</figcaption></figure><aside><h2>Set tracing boundaries</h2><p>Review which inputs and outputs to record and how to mask them.</p><a href="https://langfuse.com/docs/observability/sdk/overview">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Langfuse displays trace events that an application explicitly sends. With a local instance and Python SDK v4, point the API base URL at that instance and instrument function calls with `@observe`. Installing Langfuse does not automatically trace arbitrary Ollama requests. Instrumented inputs and outputs can contain personal or document data, so choose recorded fields deliberately and mask sensitive values.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A Korean LoRA SFT walkthrough: data, training, and evaluation</title><link>https://localai.co.kr/en/guides/local-korean-llm-lora-qlora-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-korean-llm-lora-qlora-guide</guid><description>Prepare Korean prompts and target answers as JSONL, save an adapter with TRL SFTTrainer and PEFT LoRA, then compare base and adapted outputs on a prompt excluded from training. Qwen2.5-0.5B in the code is a small library-wiring fixture, not a current model recommendation; the guide explains how to select a current model separately.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">A Korean LoRA SFT walkthrough: data, training, and evaluation</h1><p>The input is Korean prompt/completion JSONL and the output is a saved adapter. Compare the base and adapter on the same question excluded from training.</p><p id="guide-page-summary">The Qwen model card lists Qwen2.5-0.5B-Instruct as 0.49B parameters, supports 29+ languages including Korean, uses Apache-2.0, and provides a Transformers example. This recipe uses TRL `SFTTrainer` and PEFT `LoraConfig` targeting `q_proj`, `k_proj`, `v_proj`, and `o_proj`. The sample rows demonstrate format only; replace them with task examples and split train/held-out data by source document.</p><p>You may want support requests labeled consistently, for example as returns or refunds. LoRA fine-tuning teaches that task behavior from input examples and desired answers. Create Korean examples, train a small model, save the adapter, and compare the same question before and after training.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>LoRA trains adapter parameters; QLoRA combines a quantized base with adapter training.</li><li>Check model-specific target modules, precision, and chat template against the model card and current TRL/PEFT APIs.</li><li>Compare before/after on the same held-out queries and retain a RAG baseline.</li></ol></section><section><h2>Decide whether retrieval is a better fit than training</h2><p>Use RAG when answering requires looking up facts or documents that change. Fine-tuning is a candidate for repeated response formats or consistent Korean task behavior. If uncertain, evaluate a retrieval baseline and a training candidate on the same questions.</p><ul><li><a href="https://huggingface.co/docs/trl/peft_integration">TRL PEFT and LoRA integration docs</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-omni-local-conversation-guide">Qwen3-Omni Local Setup Conditions: Testing Audio and Video Paths</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="A set of picture cards with check tokens and a card organizer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set a criterion for whether to test retrieval or an adapter before training.</figcaption></figure><section><h2>Choose the Qwen model and prepare training data</h2><p>Collect varied Korean examples from the task, but remove or anonymize personal and confidential documents. Deduplicate boilerplate and record input, expected output, and failure criteria for each example. Split by user or source document so duplicates and templates do not leak between training and evaluation.</p><div><p><strong>One training row</strong></p><pre><code data-guide-code-block="1-0">{"prompt":"&lt;|im_start|&gt;user\n문의 유형을 분류해 주세요: 주문한 상품을 반품하고 싶어요.&lt;|im_end|&gt;\n&lt;|im_start|&gt;assistant\n","completion":"환불·반품&lt;|im_end|&gt;"}
{"prompt":"&lt;|im_start|&gt;user\n다음 문장에서 날짜와 할 일을 JSON으로 정리해 주세요: 10월 20일까지 견적서를 보내 주세요.&lt;|im_end|&gt;\n&lt;|im_start|&gt;assistant\n","completion":"{\"date\":\"10월 20일\",\"task\":\"견적서 보내기\"}&lt;|im_end|&gt;"}</code></pre><p><small>Save the two lines as `train.jsonl`. They are fixtures for practicing the data format.</small></p></div><p>Use the small Qwen2.5-0.5B-Instruct for this exercise: 0.49B parameters, 29+ languages including Korean, Apache-2.0, and Transformers support make it a setup fixture for data files and adapter saving. For production model selection, check a current card's languages, license, and PEFT target modules. Qwen3.5-0.8B is a multilingual hybrid vision-language model, so verify its training path before transferring this text-LoRA configuration.</p><div><p><strong>Install the training environment</strong></p><pre><code data-guide-code-block="1-1">python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U 'trl[peft]' datasets accelerate</code></pre><p><small>The first run downloads packages and model weights. Use the Windows-specific virtual-environment activation command on Windows.</small></p></div><ul><li><a href="https://huggingface.co/docs/trl/sft_trainer">TRL SFTTrainer guide</a></li><li><a href="https://huggingface.co/docs/peft/index">PEFT documentation</a></li><li><a href="https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct">Qwen2.5-0.5B-Instruct model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-human-review.webp" alt="A person taking notes while inspecting reports on a desk with a magnifying glass" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep source-document duplicates out of the evaluation set.</figcaption></figure><section><h2>Start with a small TRL configuration and evaluate</h2><p>`train_lora.py` first prints base responses to held-out questions that are not in the training file, then starts TRL training with the same tokenizer chat template. `SFTConfig` sets the output path, maximum length 512, batch size 1, gradient accumulation 8, 2 epochs, and LoRA learning rate `2e-4`.</p><p>After training, the adapter and tokenizer are saved in `output/adapter`; generate responses to the held-out questions again and compare them. Record the training loss and actual memory use, then review the held-out answer quality.</p><div><p><strong>train_lora.py: baseline, LoRA SFT, save, and compare</strong></p><pre><code data-guide-code-block="2-0">from datasets import load_dataset
from peft import LoraConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTConfig, SFTTrainer

MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
QUESTION = "문의 유형을 분류해 주세요: 결제한 물건을 돌려보내고 결제 취소를 요청하고 싶습니다."  # held-out wording; expected label: 환불·반품
tokenizer = AutoTokenizer.from_pretrained(MODEL)

def answer(model, question):
    messages = [{"role": "user", "content": question}]
    inputs = tokenizer.apply_chat_template(
        messages, add_generation_prompt=True, tokenize=True,
        return_dict=True, return_tensors="pt"
    ).to(model.device)
    output = model.generate(**inputs, max_new_tokens=80, do_sample=False)
    return tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)

base = AutoModelForCausalLM.from_pretrained(MODEL, device_map="auto", torch_dtype="auto")
print("base:", answer(base, QUESTION))
del base

dataset = load_dataset("json", data_files="train.jsonl", split="train")
trainer = SFTTrainer(
    model=MODEL,
    args=SFTConfig(
        output_dir="output/checkpoints",
        max_length=512,
        num_train_epochs=2,
        per_device_train_batch_size=1,
        gradient_accumulation_steps=8,
        learning_rate=2e-4,
        logging_steps=1,
        save_strategy="epoch",
        report_to="none",
        eos_token=tokenizer.eos_token,
    ),
    train_dataset=dataset,
    processing_class=tokenizer,
    peft_config=LoraConfig(
        r=8, lora_alpha=16, lora_dropout=0.05, bias="none",
        task_type="CAUSAL_LM",
        target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    ),
)
trainer.train()
trainer.save_model("output/adapter")
tokenizer.save_pretrained("output/adapter")
print("adapter:", answer(trainer.model, QUESTION))</code></pre><p><small>Save as `train_lora.py`, then run the next command. For real training, collect varied examples and separate training from evaluation data.</small></p></div><div><p><strong>Start training after saving both files</strong></p><pre><code data-guide-code-block="2-1">python train_lora.py</code></pre></div><p>The console prints generated responses after `base:` and `adapter:`. On success, `output/adapter/adapter_config.json` and adapter weights should exist.</p><p>If CUDA runs out of memory, reduce `max_length` while keeping batch size 1, or use a larger GPU. If model loading fails, check that Transformers is current; the Qwen2.5 card documents `KeyError: 'qwen2'` with versions below 4.37.0.</p><p>Review held-out accuracy, format, and Korean fluency in a score sheet, and compare against RAG when the task needs changing facts.</p><ul><li><a href="https://github.com/huggingface/trl/blob/main/docs/source/peft_integration.md">TRL LoRA training example</a></li><li><a href="https://huggingface.co/docs/trl/sft_trainer">SFTTrainer dataset formats and saving docs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two compact devices print document pages beside stacks of output sheets" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record held-out quality alongside VRAM and latency.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Qwen3.5 reference model card</h2><p>The runnable example uses Qwen2.5-0.5B-Instruct. The Qwen3.5 card is separate reference material, not the model used by this training setup.</p><a href="https://huggingface.co/Qwen/Qwen3.5-0.8B">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The Qwen model card lists Qwen2.5-0.5B-Instruct as 0.49B parameters, supports 29+ languages including Korean, uses Apache-2.0, and provides a Transformers example. This recipe uses TRL `SFTTrainer` and PEFT `LoraConfig` targeting `q_proj`, `k_proj`, `v_proj`, and `o_proj`. The sample rows demonstrate format only; replace them with task examples and split train/held-out data by source document.</dd></div><div><dt>How much memory does it need?</dt><dd>After training, the adapter and tokenizer are saved in `output/adapter`; generate responses to the held-out questions again and compare them. Record the training loss and actual memory use, then review the held-out answer quality.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Use the small Qwen2.5-0.5B-Instruct for this exercise: 0.49B parameters, 29+ languages including Korean, Apache-2.0, and Transformers support make it a setup fixture for data files and adapter saving. For production model selection, check a current card's languages, license, and PEFT target modules. Qwen3.5-0.8B is a multilingual hybrid vision-language model, so verify its training path before transferring this text-LoRA configuration.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is GraphRAG? Cross-document relationships and a Neo4j example</title><link>https://localai.co.kr/en/guides/local-graphrag-document-relations-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-graphrag-document-relations-guide</guid><description>What connects facts split between a contract and an acquisition notice? Learn the retrieval idea behind GraphRAG and build a small relationship graph using three fictional companies.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">What is GraphRAG? Cross-document relationships and a Neo4j example</h1><p>GraphRAG uses connections among people, organizations, and events found in documents to support answers.</p><p id="guide-page-summary">A contract links company A to B, while a separate notice says C acquired B. Answering who acquired A's supplier means connecting both documents. GraphRAG stores such relationships in a graph and retrieves the relevant connections and source text for an LLM.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Graph nodes represent entities such as companies; edges represent contracts or acquisitions.</li><li>The small exercise teaches relationship retrieval. Document extraction and LLM answering are added afterward.</li><li>Store the source document and date with each new relationship.</li></ol></section><section><h2>From retrieving passages to retrieving relationships</h2><p>Vector retrieval finds passages with meaning close to a question. But a contract may never mention an acquisition, while the acquisition notice never mentions company A. A graph can store A→contract→B and C→acquisition→B, connecting both pieces through B to gather the evidence.</p><p>Neo4j GraphRAG Python connects retrievers and LLMs. Options include `VectorCypherRetriever`, which expands vector results with connected entities, and `Text2CypherRetriever`, which translates questions into Cypher. Building a small graph manually first makes the information to extract easier to understand.</p><ul><li><a href="https://neo4j.com/docs/neo4j-graphrag-python/current/user_guide_rag.html">Neo4j retriever options</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Build a local AI workflow with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Local RAG Setup Guide: Build an AI That Answers from Your Documents</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Page cards follow arrows between a document stack, monitor, and server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use a small corpus to test whether your questions need graph relations.</figcaption></figure><section><h2>Start a local Neo4j exercise database</h2><p>Start on Mac, Windows, or Linux with Docker running. The command downloads Neo4j Community 2026.09.0 and binds both ports to your own computer. Replace `replace_this_password` with your chosen password before running it. The `graphrag-demo-data` volume stores the exercise data.</p><div><p><strong>Start the exercise database</strong></p><pre><code data-guide-code-block="1-0">docker run -d --name graphrag-demo \
  -p 127.0.0.1:7474:7474 -p 127.0.0.1:7687:7687 \
  -e NEO4J_AUTH=neo4j/replace_this_password \
  -v graphrag-demo-data:/data \
  neo4j:2026.09.0</code></pre><p><small>Exercise-only configuration; ports are not exposed externally.</small></p></div><p>After startup, open `http://127.0.0.1:7474`.</p><ul><li><a href="https://neo4j.com/docs/operations-manual/current/docker/introduction/">Neo4j Docker setup</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="Document passages highlighted with green bands and divided into separate cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Changes to text extraction and chunking can alter relation extraction.</figcaption></figure><section><h2>Connect three fictional companies and retrieve an answer</h2><p>Log in as `neo4j` with your chosen password. Run the first query in the query editor to create Demo A, B, and C, plus contract and acquisition relationships. Each relationship also carries fictional source filenames, page numbers, and an acquisition date.</p><div><p><strong>Store fictional relationships</strong></p><pre><code data-guide-code-block="2-0">MERGE (a:DemoCompany {name: 'Demo A'})
MERGE (b:DemoCompany {name: 'Demo B'})
MERGE (c:DemoCompany {name: 'Demo C'})
MERGE (a)-[contract:CONTRACTED_WITH]-&gt;(b)
SET contract.source = 'demo-contract.pdf', contract.page = 1
MERGE (c)-[purchase:ACQUIRED]-&gt;(b)
SET purchase.date = '2026-10-01',
    purchase.source = 'demo-notice.pdf', purchase.page = 2
RETURN a, b, c;</code></pre></div><p>The second query follows A's supplier and then the company that acquired that supplier. Expected results are `Demo B`, `Demo C`, `2026-10-01`, and both source filenames. Returning evidence with the answer lets you check a mistaken relationship against the source.</p><div><p><strong>Retrieve the supplier and acquirer</strong></p><pre><code data-guide-code-block="2-1">MATCH (:DemoCompany {name: 'Demo A'})-[contract:CONTRACTED_WITH]-&gt;(b)
MATCH (c:DemoCompany)-[purchase:ACQUIRED]-&gt;(b)
RETURN b.name AS supplier, c.name AS acquirer,
       purchase.date AS acquisition_date,
       contract.source AS contract_source,
       purchase.source AS notice_source;</code></pre></div><ul><li><a href="https://neo4j.com/docs/cypher-manual/current/clauses/merge/">MERGE for creating graph patterns</a></li></ul></section><section><h2>What changes when adding PDFs and Ollama</h2><p>Real PDFs require text extraction and entity/relation extraction before writing the graph. Resolve alternate company names to the same entity, and preserve relationship direction, dates, and sources. Start with two or three documents and review the extracted connections: one incorrect acquisition link can affect later answers.</p><p>Use Neo4j GraphRAG's `OllamaLLM` and `OllamaEmbeddings` to connect local models. The chat model writes answers; the embedding model supports vector retrieval. Python running inside Docker needs a separate Ollama endpoint, since container localhost points to the container rather than the host.</p><p>Compare on the same corpus and questions, separating single-fact lookups from cross-document relationship questions. Record whether the right evidence is retrieved and how long answers take. Expand the graph when relationship queries benefit; otherwise keep vector retrieval. If the browser does not open, check startup logs and port conflicts with `docker logs graphrag-demo`.</p><ul><li><a href="https://neo4j.com/docs/neo4j-graphrag-python/current/api.html">Ollama integration API</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-diagnosis.webp" alt="A document leads through mountain, leaf, and rock cards to a plant card, while a separate card is marked with an X" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare evidence and answer latency on the same documents and questions.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Extend a relationship graph into document retrieval</h2><p>After the small exercise, connect source extraction and a retriever.</p><a href="https://neo4j.com/docs/neo4j-graphrag-python/current/user_guide_rag.html">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A contract links company A to B, while a separate notice says C acquired B. Answering who acquired A's supplier means connecting both documents. GraphRAG stores such relationships in a graph and retrieves the relevant connections and source text for an LLM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Add embeddings and a reranker to Korean PDF search</title><link>https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide</guid><description>Retrieve top candidates with BGE-M3 embeddings, then rerank them with BGE reranker v2-m3 using the same documents and queries. Compare relevant-document rank and latency before and after reranking to decide whether the models help with your PDFs.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Add embeddings and a reranker to Korean PDF search</h1><p>First narrow candidates with embeddings, then apply the slower reranker only to top results.</p><p id="guide-page-summary">The `BAAI/bge-m3` embedding model searches passages extracted from PDFs, while `BAAI/bge-reranker-v2-m3` scores top candidates again and reorders them. Run both locally and compare baseline rankings with reranked results using a fixed Korean query set. The first run needs an internet connection and disk space to download the model weights.</p><p>A relevant PDF passage can fail to appear near the top of your search results. First retrieve candidates with embeddings, then let a reranker read each query-passage pair and reorder them. The example uses BGE-M3 and BGE reranker v2-m3 to read your PDF and print passage rankings, pages, and processing time.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Fix PDF extraction and chunking so retrieval results can be compared fairly across models.</li><li>BGE-M3 retrieves passages with embeddings; the BGE reranker reorders top candidates by query relevance.</li><li>MIT and Apache-2.0 are the model repositories' listed licenses; check each card and file before distribution.</li></ol></section><section><h2>Candidate retrieval and reranking do different work</h2><p>An embedding model converts the query and each passage into vectors and retrieves similar passages quickly. A reranker reads each query-passage pair together and scores relevance to reorder retrieved candidates. So this comparison does not use the reranker to search every PDF passage; it reranks the top K from embedding retrieval.</p><ul><li><a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html">Sentence Transformers cross-encoder usage</a></li><li><a href="https://localai.co.kr/en/guides/korean-embedding-model-comparison-qwen3-bge-gemma2">Which embedding model should you use for Korean document search? Qwen3, BGE, and EmbeddingGemma 2</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/jina-v5-omni-local-multimodal-search-guide">Search text, photos, video, and audio in one index with Jina v5 Omni</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Page cards follow arrows between a document stack, monitor, and server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Embeddings retrieve candidates; reranking changes their order.</figcaption></figure><section><h2>Check multilingual support and model licenses</h2><p>The `BAAI/bge-m3` model card lists multilingual embeddings and an MIT license. The `BAAI/bge-reranker-v2-m3` card describes a multilingual cross-encoder and lists Apache-2.0. Both can be evaluated on Korean, but a multilingual label does not establish retrieval accuracy for a specific domain.</p><p>Check each model card for repository license, language support, input length, and usage. Some embedding models require a query prefix such as `query: ...`, while the BGE-M3 example uses the same encode interface. On first load, model files download to the local cache.</p><ul><li><a href="https://huggingface.co/BAAI/bge-m3">BGE-M3 model card</a></li><li><a href="https://huggingface.co/BAAI/bge-reranker-v2-m3">BGE reranker v2-m3 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="Document passages highlighted with green bands and divided into separate cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review license and language details alongside your own evaluation results.</figcaption></figure><section><h2>Extract PDF text and build retrieval candidates</h2><p>First determine whether a PDF is scanned or text-based, then choose a parser that preserves tables, headers, and page numbers. Use the same PDFs, queries, and human-verified gold pages so embedding comparisons are not confounded by OCR differences.</p><p>Keep source filenames and page numbers on passage IDs. When a malformed table looks like the gold passage, fix extraction before changing the retrieval model.</p></section><section><h2>Record ranking and latency with the same queries</h2><p>Read page text from `sample.pdf` with `pypdf`, split it into 700-character chunks, and attach `source`, `page`, and `chunk_id`. If the PDF contains only scanned images, extraction yields no text and the script raises an OCR-needed error. This search example uses real PDF passages but has no relevance labels, so it is not a quality evaluation. Install Sentence Transformers and pypdf; model weights download on first use.</p><div><p><strong>Install the library in a virtual environment</strong></p><pre><code data-guide-code-block="3-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U sentence-transformers pypdf</code></pre><p><small>The first model download requires an internet connection.</small></p></div><p>For the comparison, encode and retain document vectors once. Time baseline retrieval as query encoding plus cosine ranking, then pass the same top candidates to CrossEncoder. The code prints baseline and reranked ranks, retrieval time, reranker-only time, and total query time.</p><div><p><strong>Read PDF pages and rerank embedding candidates</strong></p><pre><code data-guide-code-block="3-1">from pathlib import Path
from pypdf import PdfReader
from sentence_transformers import SentenceTransformer, CrossEncoder
from sentence_transformers.util import cos_sim
from time import perf_counter

pdf_path = Path("sample.pdf")
reader = PdfReader(pdf_path)
passages = []
for page_number, page in enumerate(reader.pages, start=1):
    text = " ".join((page.extract_text() or "").split())
    for start_char in range(0, len(text), 700):
        chunk = text[start_char:start_char + 700].strip()
        if chunk:
            passages.append({"chunk_id": f"p{page_number}-{start_char}", "text": chunk, "source": pdf_path.name, "page": page_number})
if not passages:
    raise ValueError("No selectable PDF text found; use a text PDF or run OCR first.")

query = "환불은 며칠 안에 신청해야 하나요?"
embedder = SentenceTransformer("BAAI/bge-m3")
reranker = CrossEncoder("BAAI/bge-reranker-v2-m3")
# One-time indexing is outside both per-query timers.
doc_vectors = embedder.encode([p["text"] for p in passages], normalize_embeddings=True)
start = perf_counter()
query_vector = embedder.encode([query], normalize_embeddings=True)
candidate_scores = cos_sim(query_vector, doc_vectors)[0].tolist()
candidates = sorted(zip(passages, candidate_scores), key=lambda x: x[1], reverse=True)[:3]
baseline_ms = (perf_counter() - start) * 1000
print("baseline ranks:")
for rank, (p, score) in enumerate(candidates, 1):
    print(rank, p["source"], p["page"], p["chunk_id"], round(float(score), 4))

start = perf_counter()
r_scores = reranker.predict([(query, p["text"]) for p, _ in candidates])
rerank_ms = (perf_counter() - start) * 1000
reranked = sorted(zip([p for p, _ in candidates], r_scores), key=lambda x: float(x[1]), reverse=True)
print("reranked ranks:")
for rank, (p, score) in enumerate(reranked, 1):
    print(rank, p["source"], p["page"], p["chunk_id"], round(float(score), 4))
print("baseline_query_ms", round(baseline_ms, 2))
print("reranker_only_ms", round(rerank_ms, 2))
print("query_total_ms", round(baseline_ms + rerank_ms, 2))</code></pre><p><small>Place a text PDF in the same folder as `sample.pdf`, save the script as `rag_compare.py`, and change `query` to a question answered by that document.</small></p></div><div><p><strong>Run the saved PDF retrieval example</strong></p><pre><code data-guide-code-block="3-2">python rag_compare.py</code></pre></div><p>This code has no relevance labels, so it does not calculate Recall@5 or MRR@10. Next, label relevant passages for a Korean query set and compare baseline and reranked positions for the same questions. Ten to twenty queries are an initial check. For p50/p95 latency, repeat queries after warm-up and exclude first model loading and document indexing.</p><ul><li><a href="https://www.sbert.net/docs/sentence_transformer/usage/usage.html">Embedding model usage</a></li><li><a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html">Cross-encoder reranking docs</a></li><li><a href="https://pypdf.readthedocs.io/en/latest/user/extract-text.html">Extract PDF text with pypdf</a></li></ul></section><section><h2>Balance retrieval quality and cost before adopting reranking</h2><p>Compare the expected document's rank before and after reranking. Calculate Recall@5 and MRR@10 over 10–20 queries and record p50/p95 latency to weigh retrieval improvement against added response time. Keep batch size, hardware, and extracted PDF text constant between runs.</p><p>Local inference still uses the network for the first weight and library downloads. Check each model repository's license. If model version or chunking changes, rebuild reusable document embeddings. A reranker cannot recover passages missing from candidate retrieval, so improve chunking or embedding search first when Recall@K is low.</p><ul><li><a href="https://huggingface.co/BAAI/bge-m3">BGE-M3 model card and MIT license</a></li><li><a href="https://huggingface.co/BAAI/bge-reranker-v2-m3">BGE reranker card and Apache-2.0 license</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="A set of picture cards with check tokens and a card organizer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare ranking and added latency with the same queries and source passages.</figcaption></figure><section><h2>Separate BGE-M3 dense retrieval from reranking</h2><p>BGE-M3 supports dense, sparse, and multi-vector paths; hold the first comparison to dense retrieval. Apply the BGE reranker only after producing the same top-20 candidates to separate first-stage misses from reranking gains.</p><p>For each query, record Hit@5 and gold rank; aggregate Hit@5 and MRR@10 over the full set. Log reranking time per query, while index-folder size belongs to one model/chunk/index configuration, not to a query. Also calculate the fraction of gold passages present in first-stage candidates.</p></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Build a retrieval evaluation set</h2><p>Fix expected passages and latency measurements first.</p><a href="https://huggingface.co/BAAI/bge-m3">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The `BAAI/bge-m3` embedding model searches passages extracted from PDFs, while `BAAI/bge-reranker-v2-m3` scores top candidates again and reorders them. Run both locally and compare baseline rankings with reranked results using a fixed Korean query set. The first run needs an internet connection and disk space to download the model weights.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Check each model card for repository license, language support, input length, and usage. Some embedding models require a query prefix such as `query: ...`, while the BGE-M3 example uses the same encode interface. On first load, model files download to the local cache.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A task-harness design example for a local coding agent</title><link>https://localai.co.kr/en/guides/local-coding-agent-harness-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-coding-agent-harness-guide</guid><description>Connect a local coding agent's edit scope and tests with a small JavaScript example. Combine project instructions, permissions, a failing test, and the fixed result, then review the final diff yourself.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">A task-harness design example for a local coding agent</h1><p>Define the file to edit and the test that must pass before starting.</p><p id="guide-page-summary">A harness combines a coding agent's instructions, tools, tests, and approval steps. This guide connects an edit request to verification using a small function that mishandles empty names.</p><p>A coding agent changes code and runs commands in response to an edit request. The surrounding environment that manages file access, tests, approval, and retries is called a harness. It connects the edit to checks of whether the code meets the requirement.</p><p>If an agent reintroduces bugs or edits unrelated files, clarify scope and completion criteria before switching models. The example concerns one function. Start in a practice directory separate from your work repository so its changes are easy to inspect.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Specify edit scope down to the file name.</li><li>Run the same test before and after the edit.</li><li>Read the test result and actual diff together.</li></ol></section><section><h2>Prepare the code and its failing test together</h2><p>In a practice directory with Node.js installed, create `src/label.mjs` and `test/label.test.mjs`. The function trims whitespace but returns an empty string for whitespace-only input. The requirement is to use `Untitled` for an empty name.</p><div><p><strong>src/label.mjs · Before</strong></p><pre><code data-guide-code-block="0-0">export function normalizeLabel(text) {
  return text.trim();
}</code></pre></div><div><p><strong>test/label.test.mjs · Requirement test</strong></p><pre><code data-guide-code-block="0-1">import test from 'node:test';
import assert from 'node:assert/strict';
import { normalizeLabel } from '../src/label.mjs';

test('trims ordinary names', () =&gt; {
  assert.equal(normalizeLabel('  Project  '), 'Project');
});
test('replaces an empty name', () =&gt; {
  assert.equal(normalizeLabel('   '), 'Untitled');
});</code></pre></div><p>Run the test first: the ordinary string passes and the empty name fails. Give the agent this failure and the required return value. This defines completion more clearly than a broad request to improve the code.</p><div><p><strong>Run the same test before and after</strong></p><pre><code data-guide-code-block="0-2">node --test test/label.test.mjs</code></pre></div><ul><li><a href="https://nodejs.org/api/test.html">Node.js test runner</a></li><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Build a local AI workflow with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/groq-free-open-weight-api-guide">Try GPT-OSS with Groq's Free API: From Account Setup to Your First Response</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-coding-ai-choose-by-workflow-scene-1.webp" alt="Colored blocks in an open desktop case, a signpost, and lines leading to grouped stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the reproducing input and expected result with the request.</figcaption></figure><section><h2>Put scope and completion criteria in project instructions</h2><p>Write the allowed files and test command in project instructions. The example is for an agent that reads `AGENTS.md`. If your product reads a different file, put the same content there and ask it to identify the instructions and target file before editing.</p><div><p><strong>Example project instructions</strong></p><pre><code data-guide-code-block="1-0">수정 대상: src/label.mjs
요구사항: 공백을 제거한 결과가 비면 Untitled 반환
검증: node --test test/label.test.mjs
테스트 파일은 수정하지 말 것
네트워크 접근·배포·비밀 파일 열람 금지
완료 보고: 변경 파일, 테스트와 결과, 남은 문제</code></pre></div><p>Align the agent's execution permissions with the instructions. This exercise needs file reading, editing the function, and a terminal for the test command. Network and deployment tools are unnecessary, so leave them off the allowlist.</p><ul><li><a href="https://agents.md/">AGENTS.md format</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-1.webp" alt="A robot with a laptop beside an open cabinet of keys and a sleeping cat" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Align instructions with actual tool permissions.</figcaption></figure><section><h2>Read the final diff even when tests pass</h2><p>Ask the agent to pass the empty-name test by editing only `src/label.mjs`, then rerun the same tests. Returning `Untitled` only when the trimmed value is empty passes both checks in this example.</p><div><p><strong>src/label.mjs · Example satisfying the requirement</strong></p><pre><code data-guide-code-block="2-0">export function normalizeLabel(text) {
  const label = text.trim();
  return label || 'Untitled';
}</code></pre></div><p>Read the function and tests together at the end. Confirm the agent fixed the return value rather than the expected test value, and changed no unrelated files. If failure continues, inspect the failing input and this function's diff before requesting a broad rewrite.</p><p>In a real repository, keep the reproducing input, relevant files and tests, and final review in the same order. Approve deletion, deployment, and external transmission separately when needed, and roll back only this task's edits while preserving other contributors' changes.</p><ul><li><a href="https://nodejs.org/api/assert.html">Node.js assertions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-coding-ai-choose-by-workflow-scene-2.webp" alt="A pile of paper cards, an open cabinet of colored blocks, and a monitor linked to the cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review this task's changes and test results together.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Connect a local coding agent</h2><p>Finish the model connection, then apply the scope and tests.</p><a href="https://localai.co.kr/en/guides/strata-coding-agent-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A harness combines a coding agent's instructions, tools, tests, and approval steps. This guide connects an edit request to verification using a small function that mishandles empty names.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Align the agent's execution permissions with the instructions. This exercise needs file reading, editing the function, and a terminal for the test command. Network and deployment tools are unnecessary, so leave them off the allowlist.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Darwin-27B-ZTC? Probability-based decisions with 54 GB BF16</title><link>https://localai.co.kr/en/guides/darwin-27b-ztc-local-decision-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/darwin-27b-ztc-local-decision-guide</guid><description>Darwin-27B-ZTC returns probabilities for yes/no, choice, and rubric questions instead of generating answer text. Review its input structure, a local Python call, and the BF16 memory requirement.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is Darwin-27B-ZTC? Probability-based decisions with 54 GB BF16</h1><p>It fits tasks with explicit choices where per-option probabilities feed a downstream rule. It is not intended to write free-form explanations or drafts like a generative model.</p><p id="guide-page-summary">Darwin-27B-ZTC takes a state and typed questions, then returns a probability distribution over each question's options. `noul` handles yes/no, `choice` selects among N options, and `score` uses an ordered rubric. The model card calls for about 54 GB of BF16 weights, so first confirm that the execution device has room for them.</p><p>Darwin-27B-ZTC takes a situation or document state with a typed question and returns probabilities for each option. An application can combine that distribution with its own policy or threshold to route for approval, hold, or human review.</p><p>For example, a duplicate-charge ticket can be classified as refund, send to billing, or no action. Route low-confidence or sensitive requests to a separate review path under your business policy.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It returns a probability distribution per question without generating text.</li><li>Question types are `noul`, `choice`, and `score`; descriptions of the options are part of the input.</li><li>The model card's local example uses `DecisionModel.predict`; BF16 weights require about 54 GB.</li></ol></section><section><h2>Read option probabilities instead of generated prose</h2><p>The model card says Darwin processes a state and typed question in one forward pass. It returns a probability distribution by applying softmax to option scores; it generates no tokens. It is therefore not a model to evaluate with chat-style tok/s or answer length.</p><p>The three question types serve different purposes. `noul` makes a yes/no decision, `choice` selects one labeled option, and `score` rates an ordered rubric. Including a description for each option makes the comparison criteria explicit in the input.</p><ul><li><a href="https://huggingface.co/FINAL-Bench/Darwin-27B-ZTC">Darwin-27B-ZTC model card and input format</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Jev-Omni: multimodal decisions on local GPUs</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A stack of papers passes through a network-marked device and emerges as icon cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Score a fixed set of options and pass the result to the next step.</figcaption></figure><section><h2>Prepare BF16 memory and the Python environment</h2><p>The model card lists about 54 GB of GPU memory for BF16 weights. That figure covers weights, so leave additional room for the operating system, CUDA context, and input length. If the device cannot provide that capacity, do not assume this example will run unchanged; first check the model card for an official quantized or distributed option.</p><p>The model card's local example downloads a Hugging Face snapshot and imports `autojev.model.DecisionModel`. Listed dependencies are PyTorch, Transformers with Qwen3.5 support, safetensors, and Pillow. The decision code and weights are both required, including `readout.safetensors` and `decision_config.json` alongside the backbone files.</p><div><p><strong>Install the required libraries</strong></p><pre><code data-guide-code-block="1-0">pip install torch transformers safetensors pillow huggingface_hub</code></pre></div><ul><li><a href="https://huggingface.co/FINAL-Bench/Darwin-27B-ZTC">Check weight files and dependencies</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="A rack of cable-connected server equipment beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check BF16 weight capacity and additional runtime headroom first.</figcaption></figure><section><h2>Build a state and typed question, then inspect probabilities</h2><p>The card example combines `state` and `question` in one row and passes it to `model.predict([row])`. A `choice` question includes its type, instructions, and descriptions by option. Save the code as `decide.py` and run `python decide.py`; verify option names and probability indexes with a fixed case before wiring it into a service.</p><div><p><strong>Code to print probabilities for each input option</strong></p><pre><code data-guide-code-block="2-0">import sys
from huggingface_hub import snapshot_download

path = snapshot_download("FINAL-Bench/Darwin-27B-ZTC")
sys.path.insert(0, path)
from autojev.model import DecisionModel
model = DecisionModel(checkpoint=path)

row = {
    "state": {"ticket": "Customer was charged twice for the same order."},
    "question": {
        "type": "choice",
        "instructions": "What should support do?",
        "criteria": {
            "refund": "Refund the duplicate charge.",
            "escalate": "Send to billing.",
            "close": "No action.",
        },
    },
}
probabilities = model.predict([row])[0]
for label, probability in zip(row["question"]["criteria"], probabilities):
    print(label, float(probability))</code></pre></div><p>The example below follows the model card's duplicate-charge classification. No output probability values are stated here because they depend on the hardware and package version used. Check that the option probabilities form a distribution near 1 and preserve input order before connecting them to application policy.</p><ul><li><a href="https://huggingface.co/FINAL-Bench/Darwin-27B-ZTC">Typed decision example in the model card</a></li></ul></section><section><h2>Do not treat probabilities as approval by themselves</h2><p>On the model card's Typed Decisions evaluation, the test split contains 400 cases and 2,000 decisions, with reported overall accuracy of 0.743. This is a result on that evaluation set, not a guarantee for your business data. The card also describes the difference between two runs, 0.741 and 0.743 accuracy, as run-to-run variation from request batching.</p><p>Compare representative cases with real labels to evaluate classification errors and probability calibration. If BF16 memory is unavailable or the task needs free-form explanations, another decision or generative path may fit better.</p><ul><li><a href="https://huggingface.co/FINAL-Bench/Darwin-27B-ZTC">Review evaluation conditions and probability metrics</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A person at a monitor with check marks and document icons, beside a stack of papers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use model probabilities together with business policy and review criteria.</figcaption></figure><aside><h2>Check Darwin's model card and files</h2><p>Check the local loading code and BF16 file layout in the source card.</p><a href="https://huggingface.co/FINAL-Bench/Darwin-27B-ZTC">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Darwin-27B-ZTC takes a state and typed questions, then returns a probability distribution over each question's options. `noul` handles yes/no, `choice` selects among N options, and `score` uses an ordered rubric. The model card calls for about 54 GB of BF16 weights, so first confirm that the execution device has room for them.</dd></div><div><dt>How much memory does it need?</dt><dd>The model card lists about 54 GB of GPU memory for BF16 weights. That figure covers weights, so leave additional room for the operating system, CUDA context, and input length. If the device cannot provide that capacity, do not assume this example will run unchanged; first check the model card for an official quantized or distributed option.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card lists about 54 GB of GPU memory for BF16 weights. That figure covers weights, so leave additional room for the operating system, CUDA context, and input length. If the device cannot provide that capacity, do not assume this example will run unchanged; first check the model card for an official quantized or distributed option.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Parse documents, audio, and video into JSON with Youtu-Parsing-Omni</title><link>https://localai.co.kr/en/guides/youtu-parsing-omni-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/youtu-parsing-omni-local-guide</guid><description>Select a task for a document image, chart, audio clip, or video and receive structured JSON. This practical workflow covers the pinned vLLM plugin, local file path restrictions, and output checks.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Parse documents, audio, and video into JSON with Youtu-Parsing-Omni</h1><p>Youtu-Parsing-Omni processes one file and a selected task at a time, structuring document elements or time-based segments. Check coordinates and reading order against the source before storing the JSON.</p><p id="guide-page-summary">Youtu-Parsing-Omni is a 5B BF16 model that returns document, image, chart, audio, and video tasks in a unified JSON family. The official vLLM path uses a dedicated plugin and pinned dependencies, so isolate the environment and pin the plugin commit. Its license is the custom `youtu-parsing` license; review the source terms before distribution or commercial use.</p><p>Youtu-Parsing-Omni turns document, audio, and video files into task-specific structured results. Provide local media and a task, then inspect JSON containing document elements, coordinates, reading order, or audio/video time segments in the terminal.</p><p>Run a document image, a short audio clip, and a short video as separate tasks. Compare document tables and reading order, audio speakers and timestamps, and video OCR/ASR segments with the originals before passing results downstream.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Choose a task such as `document`, `audio`, or `natural_video` to match the input.</li><li>vLLM uses a dedicated plugin and `transformers==5.2.0`; direct Transformers inference uses `5.10.2` in a separate environment.</li><li>For vLLM, media files must be below `DATA_ROOT`, and the resulting JSON should be checked against the source.</li></ol></section><section><h2>Select a task for each input and receive JSON</h2><p>The model card lists separate tasks such as `document` for document pages, `graphics_chart` for charts, `audio` for speech, `natural_video` for video, and `textrich_video` for text-heavy video. Document JSON may contain element text or LaTeX, tables, coordinates, and reading order; audio and video return timestamped segments.</p><p>Do not treat every input as the same OCR task. Charts return table-like content, notes, and captions; audio includes speech and non-speech segments and ASR; text-heavy video combines OCR, ASR, and an overall report. Choosing a task that does not match the input can omit the structure you need.</p><ul><li><a href="https://huggingface.co/tencent/Youtu-Parsing-Omni">Input tasks and output structures in the model card</a></li><li><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Jev-Omni: multimodal decisions on local GPUs</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/lightonocr-3-local-pdf-table-guide">Extract scanned PDFs and tables locally with LightOnOCR-3</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-1.webp" alt="A monitor showing a document page, paper stacks, cards, and a desktop computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The document task structures elements and reading order as well as text.</figcaption></figure><section><h2>Isolate the vLLM environment and pin custom code</h2><p>The official quick start assumes Python 3.10 or later and a CUDA GPU. The vLLM server setup uses `vllm==0.19.0`, `transformers==5.2.0`, and the `vllm-plugin-vita-omni` path. Direct Transformers inference uses `transformers==5.10.2`, so keep the two setups in separate environments.</p><p>The plugin contains model implementation code, so pin a reviewed commit rather than relying on a moving default branch. The official repository's main branch resolved to `421cfad7acf8f0f80f5bd6dfa03b5ce3916224eb` on October 13, 2026. Read Hugging Face's custom `youtu-parsing` license before installation and restrict which directory the server can read for media.</p><div><p><strong>Get the reviewed code revision</strong></p><pre><code data-guide-code-block="1-0">mkdir -p "$HOME/projects"
cd "$HOME/projects"
git clone https://github.com/TencentCloudADP/youtu-parsing.git
cd youtu-parsing
git checkout 421cfad7acf8f0f80f5bd6dfa03b5ce3916224eb
cd youtu_parsing_omni</code></pre></div><ul><li><a href="https://huggingface.co/tencent/Youtu-Parsing-Omni">Check official setup and pinned dependencies</a></li></ul></section><section><h2>Parse a first document page from a local media directory</h2><p>Create a separate Python virtual environment for the model server and run the setup script there. The server script's `MODEL` can be a Hugging Face model ID, which it downloads, or a local checkpoint path; the default model cache is under HF_HOME. `DATA_ROOT` is not the model location: it limits which media files the server can read.</p><div><p><strong>Create a virtual environment and install the pinned vLLM stack</strong></p><pre><code data-guide-code-block="2-0">python3 -m venv .venv
source .venv/bin/activate
bash scripts/setup_env.sh</code></pre></div><p>Open a new terminal and change to `$HOME/projects/youtu-parsing/youtu_parsing_omni`. Put `media/page.png`, `media/speech.wav`, and `media/clip.mp4` in that folder. Place the example inputs under `youtu_parsing_omni/media/` and run `infer_vllm.py`.</p><p>`infer_vllm.py` prints fenced JSON in the terminal instead of saving it to a file. Copy the output into a text editor, remove the code fences at the beginning and end, and save it as a `.json` file if needed. Compare the document's title, body, table elements, and reading order; the audio segments, speakers, and ASR text; and the video's timestamped OCR and ASR content with the source files.</p><div><p><strong>Start the server with a media path</strong></p><pre><code data-guide-code-block="2-1">mkdir -p media
MODEL=tencent/Youtu-Parsing-Omni DATA_ROOT="$PWD/media" GPU=0 bash scripts/vllm.sh</code></pre></div><div><p><strong>Parse documents, audio, and video from another terminal</strong></p><pre><code data-guide-code-block="2-2">cd "$HOME/projects/youtu-parsing/youtu_parsing_omni"
source .venv/bin/activate
python examples/infer_vllm.py --task document --media media/page.png
python examples/infer_vllm.py --task audio --media media/speech.wav
python examples/infer_vllm.py --task natural_video --media media/clip.mp4</code></pre></div><div><p><strong>Top-level fields to inspect in the JSON</strong></p><pre><code data-guide-code-block="2-3">{
  "modality": "image",
  "subtype": "document",
  "elements": [],
  "reading_order": [],
  "global_description": {}
}</code></pre></div><ul><li><a href="https://huggingface.co/tencent/Youtu-Parsing-Omni">Document task and output format</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-2.webp" alt="A stack of documents leads past hourglasses to a small computer holding colored blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Place the test file below DATA_ROOT and start with one document page.</figcaption></figure><section><h2>Validate the JSON before passing it downstream</h2><p>Compare document JSON against source-table rows, columns, small text, and reading order. For audio, check the playback segment for each speaker label and timestamp; for video, align OCR and ASR with the same time range.</p><p>If the server cannot find a file, first check that the media is below `DATA_ROOT`. If audio or video reports missing `ffmpeg`, confirm it is executable in the environment. Also check that the package versions match the vLLM setup. If the output structure does not match the request, recheck the task and prompt selection.</p><ul><li><a href="https://huggingface.co/tencent/Youtu-Parsing-Omni">Official output schema and troubleshooting</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-3.webp" alt="Documents and picture cards pass through a funnel toward a monitor and a block-filled cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare extracted tables and coordinates with the source page before saving.</figcaption></figure><aside><h2>Review Youtu-Parsing-Omni before installation</h2><p>Check the license, task input format, and plugin version first.</p><a href="https://huggingface.co/tencent/Youtu-Parsing-Omni">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Youtu-Parsing-Omni is a 5B BF16 model that returns document, image, chart, audio, and video tasks in a unified JSON family. The official vLLM path uses a dedicated plugin and pinned dependencies, so isolate the environment and pin the plugin commit. Its license is the custom `youtu-parsing` license; review the source terms before distribution or commercial use.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not treat every input as the same OCR task. Charts return table-like content, notes, and captions; audio includes speech and non-speech segments and ASR; text-heavy video combines OCR, ASR, and an overall report. Choosing a task that does not match the input can omit the structure you need.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The plugin contains model implementation code, so pin a reviewed commit rather than relying on a moving default branch. The official repository's main branch resolved to `421cfad7acf8f0f80f5bd6dfa03b5ce3916224eb` on October 13, 2026. Read Hugging Face's custom `youtu-parsing` license before installation and restrict which directory the server can read for media.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Extract scanned PDFs and tables locally with LightOnOCR-3</title><link>https://localai.co.kr/en/guides/lightonocr-3-local-pdf-table-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lightonocr-3-local-pdf-table-guide</guid><description>A practical workflow for saving a PDF as page-level Markdown and grounded blocks, then checking extracted tables against the source. Connect a vLLM server to the LightOnOCR CLI and inspect grounding-mode files.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Extract scanned PDFs and tables locally with LightOnOCR-3</h1><p>Grounding mode preserves labels and coordinates for page regions along with text. Check rows, columns, and units against the original before adding a table to RAG or a search index.</p><p id="guide-page-summary">LightOnOCR-3 offers plain and `grounding` modes. Plain mode transcribes the page to Markdown; grounding adds block labels and normalized 0–1000 coordinates. The CLI saves PDFs as page-level files under `out/&lt;name&gt;/page-NNN.md` and also creates structured `.json` in grounding mode. Review the OCR output against the source table before connecting it to search.</p><p>Use this workflow when extracting body text and tables from scanned PDFs for document search or review. Input a PDF and optional page range; output is page-level Markdown and, optionally, grounding blocks with locations.</p><p>Start with one page containing a table and another with mostly prose. Check numeric cells, column headings, and units against the source before indexing; that helps prevent layout or small-text errors from carrying into search results.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The CLI processes PDFs page by page; grounding mode also preserves block labels and coordinates.</li><li>The documented LightOnOCR-3-1B setup pins `vllm==0.30.0` and `transformers==5.16.1`.</li><li>Do not translate H100 benchmark throughput into desktop speed. Test a small PDF on your own GPU first.</li></ol></section><section><h2>Choose between plain and grounding output</h2><p>Plain mode extracts page text to Markdown, including readable tables and equations. Passing `grounding` adds a labeled bounding-box marker before each region; coordinates are normalized to 0–1000 regardless of page size. Use the `.json` blocks for programmatic post-processing and `.md` for quick review and storage.</p><p>For table-heavy documents, grounding is a useful starting point because it lets you review a table's location and text together. Chart data may be represented as an HTML table. Pages can differ, so check for empty cells, truncated columns, and headers or footers mixed into the body.</p><ul><li><a href="https://github.com/lightonai/LightOnOCR">LightOnOCR CLI usage and output format</a></li><li><a href="https://localai.co.kr/en/guides/youtu-parsing-omni-local-guide">Parse documents, audio, and video into JSON with Youtu-Parsing-Omni</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Local RAG Setup Guide: Build an AI That Answers from Your Documents</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-1.webp" alt="A monitor showing a document page, paper stacks, cards, and a desktop computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plain produces readable Markdown; grounding adds region labels and coordinates.</figcaption></figure><section><h2>Connect vLLM to the LightOnOCR CLI</h2><p>Prepare Linux, an NVIDIA GPU with CUDA support, and Python 3.10 or later. Check `uv --version`; if uv is missing, follow the Linux method in the [official uv installation guide](https://docs.astral.sh/uv/getting-started/installation/). Reopen the terminal and confirm a version appears before installing the repository below.</p><div><p><strong>Check uv; if missing, install using the official Linux method</strong></p><pre><code data-guide-code-block="1-0">uv --version
# If missing, the official Linux installer is:
# curl -LsSf https://astral.sh/uv/install.sh | sh
# Reopen the terminal and confirm uv --version before continuing.</code></pre></div><p>The official quick start installs the CLI and serving dependencies with `uv sync --extra vllm`. Its LightOnOCR-3-1B example uses port 8010, one image per prompt, a 16,384 maximum model length, and a disabled image cache. The repository pins vLLM 0.30.0 and Transformers 5.16.1 and warns about issues with Transformers 5.17 and vLLM 0.27.1.</p><div><p><strong>Clone the repository, install vLLM dependencies, and run the server</strong></p><pre><code data-guide-code-block="1-1">mkdir -p "$HOME/projects"
cd "$HOME/projects"
git clone https://github.com/lightonai/LightOnOCR.git
cd LightOnOCR
uv sync --extra vllm
source .venv/bin/activate
vllm serve lightonai/LightOnOCR-3-1B --limit-mm-per-prompt '{"image": 1}' --max-model-len 16384 --mm-processor-cache-gb 0 --no-enable-prefix-caching --port 8010 --host 127.0.0.1</code></pre></div><p>Place the PDF to process at `$HOME/projects/LightOnOCR/report.pdf` and run the CLI from the repository root. Keep the server in the foreground in a separate terminal; `--host 127.0.0.1` binds it to the local interface. The CLI connects to `http://127.0.0.1:8010/v1` by default, so keep the repository's default model name for the first run.</p><div><p><strong>Process a PDF in grounding mode from another terminal</strong></p><pre><code data-guide-code-block="1-2">cd "$HOME/projects/LightOnOCR"
source .venv/bin/activate
lightonocr report.pdf --mode grounding</code></pre></div><ul><li><a href="https://github.com/lightonai/LightOnOCR">Official quick start and LightOnOCR-3 model flags</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-3.webp" alt="Documents and picture cards pass through a funnel toward a monitor and a block-filled cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once page-level Markdown and JSON are produced, compare tables and coordinates to the source.</figcaption></figure><section><h2>Review and save tables from page-level output</h2><p>On success, the CLI saves page-level `.md` files and the sent page images under `out/report/` by default. Grounding mode also creates a `.json` block file for each page. First check that files were created, page numbers match the PDF, and Markdown tables retain their rows and columns.</p><div><p><strong>Per-page output files</strong></p><pre><code data-guide-code-block="2-0">out/report/
├── page-001.png
├── page-001.md
├── page-001.json  # grounding mode
└── ...</code></pre></div><p>Before passing the output into a workflow, sample-check numeric cells, currencies and units, merged headings, and footnotes against the source PDF. Confirm grounding coordinates are in the 0–1000 range, but still verify the rows, columns, and numbers even if the box surrounds the table. Store only reviewed pages in the downstream document system.</p><ul><li><a href="https://github.com/lightonai/LightOnOCR">CLI page-level Markdown and JSON output</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-2.webp" alt="A stack of documents leads past hourglasses to a small computer holding colored blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Pass reviewed pages to search only after checking table values and units.</figcaption></figure><section><h2>Troubleshoot incorrect tables or empty pages</h2><p>If the output directory or page files are missing, check that the server was ready before running the CLI and confirm the port-8010 address. For blank pages or request errors, render the source PDF to an image and confirm it is readable; rerun only the affected pages with `--pages`. If output is truncated, process a smaller page range instead of the whole PDF.</p><p>If a table is distorted, compare plain and grounding outputs first. `--longest-edge` controls the page image size and can be adjusted if small source text becomes unclear. The default server profile also chooses a page size by model, but check the accuracy and throughput tradeoff on a small batch whenever you change image size.</p><ul><li><a href="https://github.com/lightonai/LightOnOCR">Review CLI rerun and page-selection options</a></li></ul></section><aside><h2>Check model options in the LightOnOCR CLI docs</h2><p>Review supported modes, port, page size, and output files.</p><a href="https://github.com/lightonai/LightOnOCR">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LightOnOCR-3 offers plain and `grounding` modes. Plain mode transcribes the page to Markdown; grounding adds block labels and normalized 0–1000 coordinates. The CLI saves PDFs as page-level files under `out/&lt;name&gt;/page-NNN.md` and also creates structured `.json` in grounding mode. Review the OCR output against the source table before connecting it to search.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can an 8GB GPU run Qwen and Gemma faster? Install PolyStrata and use two GPUs</title><link>https://localai.co.kr/en/guides/polystrata-local-moe-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/polystrata-local-moe-guide</guid><description>Run Qwen3.6 and Gemma 4 on an 8GB GPU with PolyStrata. Compare RAM requirements and generation speeds, then follow Linux AMD beta support, dual-NVIDIA setup, and the developer's backup download route.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Can an 8GB GPU run Qwen and Gemma faster? Install PolyStrata and use two GPUs</h1><p>PolyStrata uses your GPU and CPU together to run large MoE models on your PC.</p><p id="guide-page-summary">With an 8GB graphics card and 32GB of system RAM, you can try running Qwen3.6 or Gemma 4. Choose a model size that fits your RAM, install it, and send a prompt in the browser.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>On the 8GB laptop, Qwen3.6 UD-Q3_K_M generated 94–100 tok/s in short chats.</li><li>Model files live on the SSD; system RAM and the CPU handle expert computation that does not fit on the GPU.</li><li>Two NVIDIA GPUs split the model layers on Linux. A two-GPU Windows setup was not tested.</li><li>After installation, you can use local browser chat or connect an OpenAI-compatible app.</li></ol></section><section><h2>Keep frequently used experts in GPU memory</h2><p>MoE models such as Qwen3.6 select a subset of expert weights for each token. PolyStrata caches frequently used experts in GPU memory and computes the rest on the CPU from system RAM. This lets a model file larger than 8GB run across GPU and system memory.</p><p>You can also run Qwen3.8-Flash-Next, using the unchanged Strata engine. Qwen3.6, Ornith 1.5, Gemma 4, Tiel Coder, and GLM 5.3 Flash use PolyStrata's dedicated engine. You can switch between installed models while the server is running and connect them to local chat or coding agents.</p><ul><li><a href="https://vecszn-polystrata.static.hf.space/index.html">PolyStrata developer downloads and running guide</a></li><li><a href="https://github.com/VecSzn/PolyStrata">Supported models and engines</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules on a warm wood desk indoors" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Open browser chat on the PC running the model.</figcaption></figure><section><h2>Pair an 8GB GPU with enough system RAM</h2><p>You can use NVIDIA RTX 20-series or newer cards with at least 8GB VRAM; the published 8GB runs used a laptop with 32GB RAM. Because weights that do not fit on the GPU stay in RAM, you need both SSD space for the files and enough system RAM to run them. Start by comparing file sizes and RAM requirements for Qwen3.6, Gemma 4, Ornith, and Tiel Coder.</p><table><caption>Model files and RAM alongside an 8GB GPU</caption><thead><tr><th scope="col">Model</th><th scope="col">File size</th><th scope="col">System RAM</th></tr></thead><tbody><tr><th scope="row">Qwen3.6-35B-A3B</th><td>13 / 17 / 23GB</td><td>17 / 21 / 27GB</td></tr><tr><th scope="row">Gemma 4 26B-A4B</th><td>11 / 13 / 17GB</td><td>15 / 18 / 21GB</td></tr><tr><th scope="row">Ornith 1.5</th><td>14 / 17 / 24GB</td><td>18 / 22 / 28GB</td></tr><tr><th scope="row">Tiel Coder 35B-A3B</th><td>14 / 17 / 23GB</td><td>18 / 21 / 27GB</td></tr></tbody></table><p>Installer RAM estimates alongside an 8GB GPU. The three file sizes and RAM values correspond in the same left-to-right order within each row. Image input adds about 1GB of disk space.</p><p>Qwen3.6's middle size uses an approximately 17GB model file and about 21GB of system RAM alongside the GPU. Even on a 32GB PC, close other apps to leave room. For long documents or chat histories, start with a shorter context and increase it gradually.</p><p>On Windows, these four models use NVIDIA cards. Linux also offers an AMD beta; the published RX 7600 tests cover Qwen3.6 and Ornith. The AMD beta builds its engine on your PC. AMD support for Qwen3.8-Flash-Next follows the existing Strata path.</p><p>GLM 5.3 Flash needs substantially more memory. Its model files are 79–114GB, with roughly 60–96GB or more system RAM alongside a 32GB GPU, depending on the variant. For an 8GB laptop, start with the four models in the table.</p><ul><li><a href="https://github.com/VecSzn/PolyStrata#what-you-need">System requirements by model</a></li><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/MODELS.md">Model sizes and memory selection</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a warm wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>VRAM and system RAM handle different parts of model execution.</figcaption></figure><section><h2>How fast are Qwen and Gemma on the same 8GB laptop?</h2><p>The table shows answer-generation speeds in short chats. Changing the quantized file changes speed even within the same model. Results for the RTX 4070 Laptop and RTX 5090 are separated by file.</p><table><caption>Generation speed by Qwen3.6 and Gemma 4 file</caption><thead><tr><th scope="col">Model and quantization</th><th scope="col">RTX 4070 Laptop 8GB</th><th scope="col">RTX 5090 32GB</th></tr></thead><tbody><tr><th scope="row">Qwen3.6 · UD-Q2_K_XL</th><td>123–124 tok/s</td><td>450 tok/s</td></tr><tr><th scope="row">Qwen3.6 · UD-Q3_K_M</th><td>94–100 tok/s</td><td>394–395 tok/s</td></tr><tr><th scope="row">Qwen3.6 · UD-Q4_K_M</th><td>82–86 tok/s</td><td>363–401 tok/s</td></tr><tr><th scope="row">Gemma 4 · UD-Q2_K_XL</th><td>101–104 tok/s</td><td>327–340 tok/s</td></tr><tr><th scope="row">Gemma 4 · UD-Q3_K_M</th><td>92–93 tok/s</td><td>353–356 tok/s</td></tr><tr><th scope="row">Gemma 4 · UD-Q4_K_M</th><td>85 tok/s</td><td>335–346 tok/s</td></tr></tbody></table><p>Project-published measurements. Laptop: RTX 4070 Laptop 8GB / Core i7-14700HX / 32GB RAM. Workstation: RTX 5090 32GB / Xeon Platinum 8470Q, 25 vCPU / 120GB RAM. Token-generation speeds in short chats.</p><p>On the 8GB laptop, Qwen3.6 generated 94–100 tok/s with the Q3 file and 82–86 tok/s with Q4. Start with Q3 on your usual prompts or code edits; if the answers are unsatisfactory, compare the same request with Q4. Try Q2 when you need more speed or lower RAM use.</p><ul><li><a href="https://vecszn-polystrata.static.hf.space/index.html">Model generation speeds published by the developer</a></li><li><a href="https://github.com/VecSzn/PolyStrata#qwen36-35b-a3b">Test hardware and model files</a></li></ul></section><section><h2>Compare long-prompt processing and two-GPU results</h2><p>Long-document summaries also depend on prompt-reading speed. The table collects generation and prompt-processing results for Qwen3.6 and Gemma 4. It includes single-GPU RTX 4070 Laptop and RTX 5090 results, plus Linux layer splitting across two RTX 3080 cards, each with its own model layers and expert cache.</p><table><caption>Model speeds and hardware conditions reported by PolyStrata</caption><thead><tr><th scope="col">Model and configuration</th><th scope="col">Hardware and input</th><th scope="col">Generation</th><th scope="col">Prompt processing</th></tr></thead><tbody><tr><th scope="row">Qwen3.6 UD-Q3_K_M · 1 GPU</th><td>RTX 4070 Laptop 8GB, i7-14700HX, 32GB RAM · short chat</td><td>94–100 tok/s</td><td>30–32K prompt: 1,690 tok/s</td></tr><tr><th scope="row">Qwen3.6 UD-Q3_K_M · 1 GPU</th><td>RTX 5090 32GB, Xeon 8470Q 25 vCPU, 120GB RAM · short chat</td><td>394–395 tok/s</td><td>30–32K prompt: 6,350–6,550 tok/s</td></tr><tr><th scope="row">Qwen3.6 UD-Q3_K_M · 2× RTX 3080 10GB</th><td>Xeon 8255C · 2,727-token input</td><td>2 GPU: 217–221 tok/s / 1 GPU: 165–177 tok/s</td><td>2 GPU: 3,425–3,562 tok/s / 1 GPU: 1,567–1,582 tok/s</td></tr><tr><th scope="row">Gemma 4 UD-Q3_K_M · 2× RTX 3080 10GB</th><td>Xeon 8255C · 3,527-token input</td><td>2 GPU: 191–193 tok/s / 1 GPU: 182–187 tok/s</td><td>2 GPU: 3,540–3,590 tok/s / 1 GPU: 2,170 tok/s</td></tr></tbody></table><p>RTX 3080 comparison: 2×10GB at 320W each / Xeon Platinum 8255C / Linux / CUDA 12.4 / engine dated 2026-10-11. 256 tokens generated after a short prompt; three restarts per configuration for Qwen3.6, two for Gemma 4. Uncached inputs: Qwen3.6 2,727 tokens; Gemma 4 3,527 tokens.</p><p>Sources: project measurements in the model README and MULTI_GPU.md.</p><p>For the same Qwen3.6 UD-Q3_K_M file with a 30–32K-token input, the RTX 4070 Laptop 8GB processed 1,690 tok/s and the RTX 5090 32GB processed 6,350–6,550 tok/s. In the separate Linux dual-RTX-3080 experiment, Qwen3.6 improved both generation and input processing over one card, while Gemma 4 showed a smaller generation gain. If your Linux desktop has two cards, try layer splitting with your usual model.</p><ul><li><a href="https://github.com/VecSzn/PolyStrata#qwen36-35b-a3b">Qwen3.6 speeds and prompt conditions by hardware</a></li><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/MULTI_GPU.md">Two-GPU layer-split setup and limitations</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards and other components installed in an open PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>With layer splitting, the two cards compute different layers of the model.</figcaption></figure><section><h2>The setup tool guides GPU and model configuration</h2><p>If GitHub is unavailable, download the source ZIP from the developer's backup page. The backup notice identifies it as version 0.1.43.1-poly.2. Extract the ZIP, or clone the backup repository with the Git commands below.</p><p>Install Git and Git LFS before using the Git route. The backup repository uses its source branch and stores some binaries with Git LFS. Skip these commands if you downloaded the ZIP.</p><div><p><strong>Initialize Git LFS and clone the developer backup</strong></p><pre><code data-guide-code-block="4-0">git lfs install
git clone -b source https://huggingface.co/spaces/VecSzn/PolyStrata
cd PolyStrata</code></pre></div><p>Run the setup file for your operating system inside the PolyStrata folder: START-HERE.bat on Windows or setup.sh on Linux.</p><div><p><strong>Start installation on Windows</strong></p><pre><code data-guide-code-block="4-1">START-HERE.bat</code></pre></div><div><p><strong>Start installation on Linux</strong></p><pre><code data-guide-code-block="4-2">./setup.sh</code></pre></div><p>The setup tool detects the GPU and asks you to choose a model, quantization, context length, and image input support. Choosing the recommended defaults prepares the engine and model. Qwen3.8-Flash-Next is about 70GB and the other models range from roughly 11 to 114GB, so leave enough disk space.</p><p>Building the NVIDIA engine locally on Windows requires Visual Studio build tools and the CUDA Toolkit. If a prebuilt engine is unavailable, setup offers to install the tools for a local build. Linux builds require g++ and the CUDA Toolkit.</p><p>To use two NVIDIA GPUs on Linux, check their numbers and select both during setup. The tool saves the selection, uses the first card as the primary GPU, and starts layer splitting in auto mode.</p><div><p><strong>Select two NVIDIA GPUs on Linux</strong></p><pre><code data-guide-code-block="4-3">nvidia-smi
./setup.sh --gpus 0,1</code></pre></div><p>To use an existing CUDA 12.x toolkit on Linux, specify the option below. The published dual-RTX-3080 measurements used an engine built with CUDA 12.4. Two-GPU operation of PolyStrata's dedicated engine was tested on Linux with NVIDIA cards.</p><div><p><strong>Compile strata-poly with CUDA 12</strong></p><pre><code data-guide-code-block="4-4">./setup.sh --cuda 12</code></pre></div><ul><li><a href="https://vecszn-polystrata.static.hf.space/index.html">Source ZIP and Git backup instructions</a></li><li><a href="https://github.com/VecSzn/PolyStrata#install">Installation and first run</a></li><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/MULTI_GPU.md">GPU numbers and layer-split options</a></li><li><a href="https://git-lfs.com/">Install Git LFS</a></li></ul></section><section><h2>Send a first prompt in the browser and check the response</h2><p>After installation, keep the terminal or batch window open while the model loads. Reading the model into RAM and preparing GPU memory can temporarily slow the PC. Once loading finishes, the window shows the browser address.</p><p>Open http://127.0.0.1:8080 in a browser and enter this in the Chat box: “Summarize this in one sentence: Today's meeting starts at 3 p.m.; we will decide whether to deploy after checking QA results.” A summary should appear while the server window remains open. That confirms local chat is ready.</p><p>Connect an OpenAI-compatible app by entering the URL below as its server address. Use it on the same PC running PolyStrata. An Anthropic-compatible API is also available; follow the installation document's connection settings for that protocol.</p><div><p><strong>OpenAI-compatible API base URL</strong></p><pre><code data-guide-code-block="5-0">http://127.0.0.1:8080/v1</code></pre></div><ul><li><a href="https://github.com/VecSzn/PolyStrata#install">Browser chat and app connections</a></li><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/INSTALL.md">Installation options and API guide</a></li></ul></section><section><h2>If the first run fails, check model loading and GPU selection</h2><p>If the browser cannot connect, first check whether the server window is still loading the model. The first load can take several minutes. If an error appears, keep the window open and read the last error line. If a model download stopped midway, rerun the setup file for your operating system to resume it.</p><p>For a CUDA compilation failure, check the last setup error for missing tools or an unsupported GPU. On a Linux NVIDIA PC with the CUDA 12 Toolkit installed, you can rebuild with the CUDA 12 option above.</p><p>If both GPUs do not appear, compare the card numbers in the GPU list with the selection saved during setup. Two-GPU operation was tested on Linux with NVIDIA cards.</p><ul><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/INSTALL.md">Installation issues and options</a></li><li><a href="https://github.com/VecSzn/PolyStrata/blob/main/docs/MULTI_GPU.md">Multi-GPU support requirements and troubleshooting</a></li></ul></section><aside><h2>PolyStrata installation guide</h2><p>Check your GPU, RAM, and operating system, then send a first prompt with the model recommended by PolyStrata setup.</p><a href="https://vecszn-polystrata.static.hf.space/index.html">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>With an 8GB graphics card and 32GB of system RAM, you can try running Qwen3.6 or Gemma 4. Choose a model size that fits your RAM, install it, and send a prompt in the browser.</dd></div><div><dt>How much memory does it need?</dt><dd>MoE models such as Qwen3.6 select a subset of expert weights for each token. PolyStrata caches frequently used experts in GPU memory and computes the rest on the CPU from system RAM. This lets a model file larger than 8GB run across GPU and system memory.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can you run a Jev-like decision model on your PC? A guide to d1-3B and d1-omni</title><link>https://localai.co.kr/en/guides/liquid-d1-local-decision-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/liquid-d1-local-decision-guide</guid><description>d1-3B and the experimental d1-omni-600M return choices and probabilities for predefined questions instead of long replies. This guide shows how to start a llama.cpp server, send local requests, use text, image, and audio input, and interpret latency measurements.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Can you run a Jev-like decision model on your PC? A guide to d1-3B and d1-omni</h1><p>Define questions and choices in advance, then d1 returns decisions and probabilities for text, image, or audio state in one pass.</p><p id="guide-page-summary">Liquid AI's d1 models handle repeatable decisions such as classification, routing, and scoring rather than continuing a chat. d1-3B accepts text and images; the experimental d1-omni-600M accepts text with either images or audio. Run a GGUF model with llama.cpp, send state and questions to /v1/systemone, and receive choices and probabilities as JSON.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>d1-3B is a 3B-class open-weight decision model; d1-omni-600M is a 600M-class model.</li><li>d1-3B accepts text and images; d1-omni-600M accepts text with either images or audio.</li><li>The model returns a choice and probabilities in one forward pass without generating new tokens.</li><li>The llama.cpp server exposes /v1/systemone, and the GGUF model cards provide launch commands and request examples.</li></ol></section><section><h2>Define a question and choices, and d1 returns a decision</h2><p>Suppose you need to route a customer message to billing, technical support, or fraud review. Send the message as state with a question and choices for the responsible team. d1 returns the selected choice and probabilities as JSON, which your application can use to route the case to the next step.</p><p>Liquid AI introduced d1-3B and d1-omni-600M on October 7, 2026, as decision models for these tasks. Rather than continuing a chat with a long generated answer, they respond to predefined questions in one forward pass. Depending on the question, the result can be a yes/no probability, a choice with confidence and per-option probabilities, or a score on an ordered scale.</p><p>d1-3B accepts text and image input. The experimental d1-omni-600M accepts text with either an image or audio; a single request cannot combine image and audio. Neither model writes long open-ended replies, so use a generative model for explanations, support conversations, or code generation.</p><ul><li><a href="https://www.liquid.ai/blog/d1-open">Liquid AI's d1 announcement</a></li><li><a href="https://huggingface.co/LiquidAI/d1-3B">d1-3B model card and Transformers example</a></li><li><a href="https://huggingface.co/LiquidAI/d1-omni-600M">d1-omni-600M model card and input requirements</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/clef-local-decision-guide">Can you run Cloudflare Clef locally? Choose 27B or 9B and send a SystemOne request</a></li><li><a href="https://localai.co.kr/en/guides/ai-phone-mac-local-call-agent-guide">Let an AI answer your phone on a Mac: installing ai-phone and choosing 4B or 9B</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A desk showing several decision cards from one long document" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Send several questions about one state and receive a choice for each.</figcaption></figure><section><h2>Choose between the models based on input type and size</h2><p>d1-3B is the larger option at 3B parameters. d1-omni-600M is a smaller 600M model to consider when you need a lighter checkpoint; it accepts text with either images or audio. Both models accept images, while audio is supported only by the experimental omni model. Test the selected model with your actual workflow inputs before adopting it.</p><p>Liquid AI reports d1-3B end-to-end latency from receiving one question to returning a decision. The table below compares text-question processing times on an RTX 4090 and an Apple M5 Pro.</p><table><caption>Single-request latency examples for d1-3B reported by Liquid AI</caption><thead><tr><th scope="col">Hardware</th><th scope="col">Input</th><th scope="col">Latency for one question</th></tr></thead><tbody><tr><th scope="row">NVIDIA RTX 4090</th><td>One text question</td><td>8ms</td></tr><tr><th scope="row">Apple M5 Pro</th><td>One text question</td><td>30ms</td></tr></tbody></table><p>No latency figure was reported for the initial research release of d1-omni-600M. Image and audio requests vary with encoder work and input length; audio input supports clips up to 30 seconds.</p><ul><li><a href="https://huggingface.co/LiquidAI/d1-3B">d1-3B single-question latency and model specifications</a></li><li><a href="https://www.liquid.ai/blog/d1-open">Latency measurement setup and d1-omni experimental status</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-prefill-without-decoding.webp" alt="Comparison of long token generation with a decision returned after input processing" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Latency for one predefined decision is a different measure from token generation speed.</figcaption></figure><section><h2>Start a GGUF server with llama.cpp</h2><p>Install llama.cpp with Homebrew on macOS or WinGet on Windows.</p><div><p><strong>Install llama.cpp on macOS</strong></p><pre><code data-guide-code-block="2-0">brew install llama.cpp</code></pre></div><div><p><strong>Install llama.cpp on Windows</strong></p><pre><code data-guide-code-block="2-1">winget install llama.cpp</code></pre></div><p>After installation, start the d1-3B GGUF Q8_0 server.</p><div><p><strong>Start the d1-3B GGUF Q8_0 server</strong></p><pre><code data-guide-code-block="2-2">llama-server -hf LiquidAI/d1-3B-GGUF:Q8_0</code></pre></div><p>When the server is ready, the web UI and local API become available. Keep this terminal open and send requests from a second one. To use the Q4_K_M file, replace `Q8_0` in the model ID with `Q4_K_M`. The same server command works on Windows.</p><p>To run d1-omni-600M, change the model ID and batch sizes.</p><div><p><strong>Start d1-omni-600M GGUF</strong></p><pre><code data-guide-code-block="2-3">llama-server -hf LiquidAI/d1-omni-600M-GGUF:Q8_0 -b 4096 -ub 4096</code></pre></div><p>In llama.cpp, `-b` sets the maximum number of tokens in a logical batch and `-ub` the maximum number in a physical batch. d1-omni reads one question in a single batch, so the question input must fit within both limits. The model card gives 4096 as an example that handles images and states of a few thousand tokens, and says to raise both values up to 16384 for longer states. These settings cap the amount processed in one batch; context length is configured separately. The d1-omni GGUF Q8_0 model file is about 407MB.</p><ul><li><a href="https://huggingface.co/LiquidAI/d1-3B-GGUF">d1-3B GGUF setup and llama.cpp request example</a></li><li><a href="https://huggingface.co/LiquidAI/d1-omni-600M-GGUF">d1-omni GGUF launch command and input options</a></li><li><a href="https://github.com/ggml-org/llama.cpp">llama.cpp installation and server guide</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">Logical and physical server batch options</a></li></ul></section><section><h2>Send state and questions, then read the choice probabilities</h2><p>While the server is running, call the local API from a second terminal. The example sends a customer message as state and asks whether a refund is requested and which team should handle it. `noul` is a yes/no judgment; `choice` selects one of the names in `criteria`.</p><div><p><strong>Send state and questions with curl</strong></p><pre><code data-guide-code-block="3-0">curl http://127.0.0.1:8080/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": "이번 달에 두 번 결제됐어요. 한 건은 환불해 주세요.",
  "questions": {
    "refund": {"type": "noul", "instructions": "환불을 요청했나요?"},
    "team": {"type": "choice", "instructions": "어느 팀이 처리해야 하나요?", "criteria": {"billing": "결제·환불·청구서", "technical": "앱이나 사이트 오류", "fraud": "무단 사용 의심"}}
  }
}'</code></pre></div><p>The response contains `answers` and `usage`. `refund` is a `noul` value with the positive probability; `team` includes the selected name, `confidence`, and per-choice `probabilities`. `usage.output_tokens` is 0. Set probability thresholds and human-review rules in your application.</p><p>Put image data URLs in the request's `images` array. For d1-omni audio, put an audio data URL in `files`; one request can contain image input or one audio clip of up to 30 seconds. d1-3B handles text and images; d1-omni handles text with images or text with audio. Check that your work data produces the typed answers and probabilities you need.</p><ul><li><a href="https://huggingface.co/LiquidAI/d1-3B-GGUF">d1-3B System One API text request example</a></li><li><a href="https://huggingface.co/LiquidAI/d1-omni-600M-GGUF">Image and audio request formats and response fields</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-chat-versus-automation.webp" alt="An open-ended chat model beside an automation panel with fixed choices" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the answer type that fits the question, such as `noul`, `choice`, or `score`, and define any choices in advance.</figcaption></figure><section><h2>If the server does not start, check the model ID and batch settings</h2><p>If llama.cpp cannot find the repository after `-hf`, check for the exact ID `LiquidAI/d1-3B-GGUF:Q8_0` or `LiquidAI/d1-omni-600M-GGUF:Q8_0`. Keep the terminal open while the first Hugging Face download finishes.</p><p>If the server starts but a request fails, check the `/v1/systemone` path and make sure the JSON includes both `state` and `questions`. Add descriptions for every choice under `criteria`. If d1-omni reports that the state exceeds the batch size, raise `-b` and `-ub` to the same value, up to 16384, and restart.</p><p>Finally, check the llama.cpp version. The model card documents GGUF use with llama.cpp, but very old builds may lack the model architecture or `/v1/systemone` endpoint. Update using the current installation instructions and send the request again. Once it responds, you can pass the structured decision to the next step in your app.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp">Current llama.cpp installation and update instructions</a></li><li><a href="https://huggingface.co/LiquidAI/d1-3B-GGUF">d1-3B repository ID and API endpoint</a></li><li><a href="https://huggingface.co/LiquidAI/d1-omni-600M-GGUF">d1-omni batch sizes and request fields</a></li></ul></section><aside><h2>View d1-3B GGUF files</h2><p>Start with a text example from your workflow, define the choices in `questions`, and send it to d1-3B at `/v1/systemone`.</p><a href="https://huggingface.co/LiquidAI/d1-3B-GGUF">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Liquid AI's d1 models handle repeatable decisions such as classification, routing, and scoring rather than continuing a chat. d1-3B accepts text and images; the experimental d1-omni-600M accepts text with either images or audio. Run a GGUF model with llama.cpp, send state and questions to /v1/systemone, and receive choices and probabilities as JSON.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Finally, check the llama.cpp version. The model card documents GGUF use with llama.cpp, but very old builds may lack the model architecture or `/v1/systemone` endpoint. Update using the current installation instructions and send the request again. Once it responds, you can pass the structured decision to the next step in your app.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can you run Cloudflare Clef locally? Choose 27B or 9B and send a SystemOne request</title><link>https://localai.co.kr/en/guides/clef-local-decision-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/clef-local-decision-guide</guid><description>Clef and Clef-Flash take a state and question schema, then return probabilities for each choice. Learn to download a model with oMLX on Apple Silicon and send a first request with an API key, with an H200 server path as an alternative.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Can you run Cloudflare Clef locally? Choose 27B or 9B and send a SystemOne request</h1><p>Clef returns probabilities for predefined questions and choices, supporting classification and routing workflows.</p><p id="guide-page-summary">Cloudflare's Clef 27B and Clef-Flash 9B answer predefined questions about text, JSON, images, or video in one pass and return probabilities for each choice. On Apple Silicon, you can run MLX quantizations with oMLX 0.7.1.dev1. Download a checkpoint in Model Downloader, read its API model ID from `/v1/models`, then send state and questions to `/v1/systemone` with an API key. An SGLang/H200 path for server use is also included.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Clef is a 27B model based on Qwen3.8-27B; Clef-Flash is a 9B model based on Qwen3.5-9B.</li><li>Both models handle text, JSON, images, and video as state and return `noul`, `choice`, or `score` answers.</li><li>The Hugging Face model cards document tests with torch 2.11 and transformers 5.10.2 on one H200.</li><li>Both models are compatible with the Jev/SystemOne API and use the `/v1/systemone` endpoint.</li></ol></section><section><h2>Send the inquiry as state and define what to decide</h2><p>Suppose a customer reports a payment problem. Put the message or a JSON order record in `state`, then use `questions` to ask whether it is urgent and which team should handle it. Clef returns the selected choices and their probabilities, which your application can use to route a ticket or send it for human review.</p><p>Cloudflare's Clef and Clef-Flash are decision models for typed questions, not chatbots that keep generating open-ended text. `noul` returns the probability of a proposition being true, `choice` selects among named options, and `score` assigns a level on an ordered scale. The calling application decides what to do next.</p><p>Both models accept text, JSON, images, and video as state and are compatible with the Jev/SystemOne API. For long-form writing or support replies, pair Clef with a generative LLM and use Clef for the routing decision.</p><ul><li><a href="https://blog.cloudflare.com/clef-decision-models/">Cloudflare's Clef announcement</a></li><li><a href="https://huggingface.co/Cloudflare/clef">27B Clef model card</a></li><li><a href="https://huggingface.co/Cloudflare/clef-flash">9B Clef-Flash model card</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/liquid-d1-local-decision-guide">Can you run a Jev-like decision model on your PC? A guide to d1-3B and d1-omni</a></li><li><a href="https://localai.co.kr/en/guides/ai-phone-mac-local-call-agent-guide">Let an AI answer your phone on a Mac: installing ai-phone and choosing 4B or 9B</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li></ul></section><section><h2>Choose between the 27B and 9B model</h2><p>Clef is the 27B model based on Qwen3.8-27B, while Clef-Flash is a 9B model based on Qwen3.5-9B. Cloudflare suggests Clef for decisions where precision matters and Clef-Flash when lower latency is important. Both accept image and video input.</p><p>On a personal Apple Silicon Mac, start with MLX checkpoints in oMLX. Jundot/clef-oQ4e is the 27B model with files around 17 GB; Jundot/clef-flash-oQ4e is the 9B model at about 6.28 GB. Leave memory for image inputs and working buffers when choosing a model. Both checkpoints use the Apache-2.0 license.</p><p>Cloudflare's original model cards provide an SGLang example tested with torch 2.11 and transformers 5.10.2 on a single H200. That is the server path; the Mac path uses oMLX 0.7.1.dev1, which automatically detects decision models.</p><ul><li><a href="https://huggingface.co/Cloudflare/clef#model">Clef base model and configuration files</a></li><li><a href="https://huggingface.co/Cloudflare/clef-flash#model">Clef-Flash base model information</a></li><li><a href="https://blog.cloudflare.com/clef-decision-models/">Cloudflare's model use cases and release comparison</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-rtx3090-parallel-scoring.webp" alt="An open desktop tower contains a graphics card; four paper cards are cabled to it, with four analog gauges on the desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For the sample ticket, put the incident details in `state` and ask about urgency and the responsible team in `questions`.</figcaption></figure><section><h2>Install oMLX and download Clef on an Apple Silicon Mac</h2><p>oMLX 0.7.1.dev1 supports Apple Silicon and macOS 15 or later. Download the DMG for your macOS version from the [official release](https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1), install it in Applications, and open the app. Set the model directory and start the server from the welcome screen.</p><p>In the dashboard's Model Downloader, search for `Jundot/clef-flash-oQ4e` or `Jundot/clef-oQ4e` and download it. Clef-Flash is about 6.28GB; Clef is about 17GB. oMLX scans models in its configured directory and automatically detects the decision type. If you copied an existing checkpoint into the model folder yourself, restart the server to discover it.</p><p>The default server address is `http://127.0.0.1:8000`. Open `/admin` in a browser and save an API key in the server settings. Use the same key in the curl request below to authenticate with the local server.</p><p>When the server is running, open `http://127.0.0.1:8000/admin` in a browser and confirm that the model appears. The oMLX app can start the server and show its status from the menu bar.</p><p>If you want to start a separate server from Terminal, use the CLI shim installed by the DMG app. Stop the app-managed server first, then pass the same model directory you selected on the Welcome screen to `--model-dir`. No separate CLI installation is needed.</p><div><p><strong>Start the CLI server with the selected model directory</strong></p><pre><code data-guide-code-block="2-0">~/.omlx/bin/omlx serve --model-dir "/PATH/TO/SELECTED_MODEL_DIRECTORY" --api-key "YOUR_OMLX_API_KEY" --host 127.0.0.1 --port 8000</code></pre><p><small>Use the same directory path you selected on the Welcome screen.</small></p></div><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">oMLX 0.7.1.dev1 macOS release and decision-model support</a></li><li><a href="https://huggingface.co/Jundot/clef-oQ4e">27B Clef MLX checkpoint, size, and license</a></li><li><a href="https://huggingface.co/Jundot/clef-flash-oQ4e">9B Clef-Flash MLX checkpoint, size, and license</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-mac-mlx-workbench-repaired-20261016.webp" alt="A monitor beside a silver compact desktop shows a three-item list, with a keyboard and a card tray on the desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>On Apple Silicon, download an oMLX Clef checkpoint and test local decisions.</figcaption></figure><section><h2>Send a SystemOne request and inspect its probabilities</h2><p>First, query `/v1/models` with your API key and copy the value of `data[].id` from the response. The ID format can vary with the model directory or alias configuration.</p><div><p><strong>List model IDs exposed by the server</strong></p><pre><code data-guide-code-block="3-0">curl http://127.0.0.1:8000/v1/models -H 'Authorization: Bearer YOUR_OMLX_API_KEY'</code></pre><p><small>Copy the actual data[].id value from the response for the next request.</small></p></div><p>Insert the copied value in `YOUR_DECISION_MODEL_ID` and send a SystemOne request. Replace the API-key placeholder with the value you set earlier.</p><div><p><strong>Send a SystemOne decision request</strong></p><pre><code data-guide-code-block="3-1">curl http://127.0.0.1:8000/v1/systemone -H 'Authorization: Bearer YOUR_OMLX_API_KEY' -H 'Content-Type: application/json' -d '{
  "model": "YOUR_DECISION_MODEL_ID",
  "state": "결제가 한 시간째 실패해 모든 고객의 주문이 막혔습니다.",
  "questions": {
    "urgent": {"type": "noul", "instructions": "이 요청은 긴급한가요?"},
    "team": {"type": "choice", "instructions": "어느 팀이 처리해야 하나요?", "criteria": {"billing": "결제와 환불", "technical": "장애와 오류", "sales": "요금제와 업그레이드"}}
  }
}'</code></pre></div><p>On success, `answers.urgent` shows the urgency probability, and `answers.team` shows the selected team and per-choice probabilities. To use the 27B model, copy its actual `data[].id` from the `/v1/models` response into `YOUR_DECISION_MODEL_ID`. Set the ticket-routing rule and the probability threshold for human review in the connected application.</p><ul><li><a href="https://github.com/jundot/omlx/blob/main/README.md">oMLX API address, model listing, and authentication</a></li><li><a href="https://huggingface.co/Jundot/clef-flash-oQ4e">Clef-Flash model ID and SystemOne instructions</a></li><li><a href="https://huggingface.co/Cloudflare/clef#jev--systemone-api">SystemOne request and response fields for original Clef</a></li></ul></section><section><h2>For an H200 server, use Cloudflare's SGLang path</h2><p>To serve an original checkpoint on a data-center H200, use the SGLang example from Cloudflare's model card. Run it on Linux with Docker configured for NVIDIA GPU access; the model files download from Hugging Face on the first run.</p><div><p><strong>Serve Cloudflare Clef with SGLang</strong></p><pre><code data-guide-code-block="4-0">docker run --gpus all --shm-size 32g -p 127.0.0.1:30000:30000 -v ~/.cache/huggingface:/root/.cache/huggingface --ipc=host lmsysorg/sglang:dev-clef sglang serve --model-path Cloudflare/clef --host 0.0.0.0 --port 30000</code></pre><p><small>Check model download and loading progress in the terminal running the command.</small></p></div><p>For Clef-Flash, change `--model-path Cloudflare/clef` to `--model-path Cloudflare/clef-flash`. The model card's test environment uses one H200. The host port is bound to localhost; for a personal Mac, use the oMLX path above.</p><ul><li><a href="https://huggingface.co/Cloudflare/clef#sglang">SGLang/H200 example for Cloudflare's original Clef</a></li><li><a href="https://huggingface.co/Cloudflare/clef-flash">Original Clef-Flash model card</a></li></ul></section><section><h2>If the server does not start, check the model ID and hardware requirements</h2><p>If oMLX does not list the model, search for its repository ID again in Model Downloader. For a manually copied checkpoint, confirm that the files are inside the configured model directory, then restart the server.</p><p>For a 401 response, make sure the API key saved in `/admin` for the app, or passed to `--api-key` for CLI startup matches the `Authorization: Bearer` value. If the model file cannot be found, compare the Hugging Face repository ID with the local model directory. The Clef checkpoint also needs `joint_head.safetensors` and `joint_head_config.json` alongside its weights.</p><p>If the server is running but requests fail, check that the endpoint is `/v1/systemone`, `model` matches an ID from `/v1/models`, and `questions` contains a typed question. Add image or video input only after a text request succeeds.</p><ul><li><a href="https://huggingface.co/Jundot/clef-oQ4e">Clef MLX files, head, and configuration</a></li><li><a href="https://github.com/jundot/omlx/blob/main/README.md">oMLX API authentication and troubleshooting</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-sglang-server-branches.webp" alt="An SGLang server branching multiple decision requests from a prefix cache" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The H200 server example uses SGLang.</figcaption></figure><aside><h2>View Clef-Flash MLX files</h2><p>Download the Clef-Flash checkpoint, confirm its ID in `/v1/models`, and send one text question with your API key.</p><a href="https://huggingface.co/Jundot/clef-flash-oQ4e">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Cloudflare's Clef 27B and Clef-Flash 9B answer predefined questions about text, JSON, images, or video in one pass and return probabilities for each choice. On Apple Silicon, you can run MLX quantizations with oMLX 0.7.1.dev1. Download a checkpoint in Model Downloader, read its API model ID from `/v1/models`, then send state and questions to `/v1/systemone` with an API key. An SGLang/H200 path for server use is also included.</dd></div><div><dt>How much memory does it need?</dt><dd>On a personal Apple Silicon Mac, start with MLX checkpoints in oMLX. Jundot/clef-oQ4e is the 27B model with files around 17 GB; Jundot/clef-flash-oQ4e is the 9B model at about 6.28 GB. Leave memory for image inputs and working buffers when choosing a model. Both checkpoints use the Apache-2.0 license.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Label Speakers and Inspect Ambient Sounds in Meeting Recordings with LocalAI 4.11</title><link>https://localai.co.kr/en/guides/localai-411-local-meeting-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/localai-411-local-meeting-guide</guid><description>Use LocalAI 4.11 Studio to transcribe a meeting, explicitly save speaker voices for later recordings, and inspect sound events such as coughing or applause. This guide also explains restart and shared-server limits.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Label Speakers and Inspect Ambient Sounds in Meeting Recordings with LocalAI 4.11</h1><p>Name speakers in a meeting recording, then review its transcript and surrounding sounds</p><p id="guide-page-summary">LocalAI 4.11 is an open-source local AI server. Send it a meeting recording to receive speech segments and a transcript; listen to a speaker segment and save a name for reuse in a later recording. An audio-scene model also returns non-speech events such as coughing or applause with timestamps.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Diarization marks who spoke when; ASR turns the speech in those segments into text.</li><li>Preview a speaker in Studio and explicitly confirm the name before it can be reused in later recordings.</li><li>Sound events include labels and time spans for non-speech audio such as coughing or applause.</li><li>Saved voices are cleared on restart and shared among users of the same LocalAI instance.</li></ol></section><section><h2>A meeting recording can yield transcript, speaker, and sound information</h2><p>LocalAI 4.11 diarization marks the start and end of each utterance and assigns temporary labels such as `SPEAKER_00` to voices. With ASR, each segment also contains transcript text.</p><p>Sound-event analysis has a different job from speech transcription. It can identify the type and timing of sounds such as a cough or applause in the same recording. That helps when reviewing not only who said what, but also when applause or an alert sound occurred around the meeting.</p><p>Speaker names are not imported automatically from an attendee list. Listen to a voice segment and save a name so it can appear for the same voice in a later recording. An internet connection is needed to download model weights during the first installation.</p><ul><li><a href="https://localai.co.kr/en/guides/nemotron-3-diarization-local-meeting-guide">Nemotron 3 Diarization: who said what in your meeting?</a></li><li><a href="https://localai.co.kr/en/guides/phonon-2-local-english-transcription-guide">Phonon 2: A Local English Transcription Guide</a></li><li><a href="https://localai.co.kr/en/guides/local-voice-assistant-mcp-pipeline">Creating a local voice assistant: ASR·LLM·MCP·TTS connection guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-meeting.webp" alt="A wooden meeting table with a central microphone surrounded by four empty chairs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review meeting notes with both the transcript and the timing of each turn.</figcaption></figure><section><h2>Use a short recording to review speakers in Studio</h2><p>Run LocalAI 4.11 or later. In Models → Explore, search for and install `parakeet-cpp-nemotron-3-diarization-asr-speakers`. This gallery entry combines the models needed for transcription, speaker turns, and speaker recognition. If installation stalls or fails, check progress and errors in Operate → Activity.</p><p>After obtaining participants' consent to prepare and register voice profiles, choose the installed model and a short recording in Studio → Diarization. Enable Prepare speakers to remember even for the first test if you want transcript text, then select Diarize. The option requests both text and speaker profiles. First read the anonymous speaker labels and spoken words; save names in the next step.</p><p>When results appear, read the transcript sentence by sentence and replay sections where a speaker label changes or voices overlap. Before recording an owner or decision in the minutes, check the label against the recording; leave uncertain turns for review rather than assigning a name.</p><ul><li><a href="https://localai.io/blog/diarization-speaker-profiles/">Speaker enrollment and the complete Studio workflow</a></li></ul></section><section><h2>Preview and save a name, then reuse it in later recordings</h2><p>When the preceding step returns results, play the person's Preview in Speakers. Choose a segment where their voice is clear, select Name and remember, enter a name, and select Remember. After the server confirms registration, the name appears on that person's turns.</p><p>A very short or overlapping preview may be too unclear to name. Prepare another recording with a longer, clearer segment. Compare important statements with the recording even after a name appears.</p><p>For the next recording, select the same speaker-recognition-capable model. When it finds a saved voice, it can show the saved name instead of an anonymous label.</p></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-timeline.webp" alt="A laptop with three colored audio tracks, headphones, and a portable recorder" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the timeline to locate where overlapping speech starts and ends.</figcaption></figure><section><h2>Choose a sound-scene model to include surrounding audio events</h2><p>The gallery entry for saving speaker names differs from the one that also returns surrounding sound events. To review speech alongside events such as coughing or applause, install `parakeet-cpp-multilingual-diarization-speakers-sounds`. This offline-recording option combines transcription, speaker turns, saved-voice matching, and sound events.</p><p>Once LocalAI is running and the sound-scene model is installed, open a new terminal in the folder containing `meeting.wav`. For a different file, change the filename in `file=@meeting.wav`. Send the recording to `/v1/audio/diarization` with `include_text`, `include_speaker_profiles`, and `include_sounds` enabled and `response_format=verbose_json`.</p><div><p><strong>Request transcript, speakers, and sound events from a meeting WAV</strong></p><pre><code data-guide-code-block="3-0">curl http://localhost:8080/v1/audio/diarization -F model=parakeet-cpp-multilingual-diarization-speakers-sounds -F file=@meeting.wav -F include_text=true -F include_speaker_profiles=true -F include_sounds=true -F response_format=verbose_json</code></pre></div><p>The response's `segments` contain speech times and text; `sounds` contains labels and times for non-speech events. Replay labeled intervals to decide which events matter for the meeting record. Both default `json` and `verbose_json` can carry sound events; `rttm` has no field for them.</p><p>If the file cannot be read, check the terminal's current folder and filename. For HTTP 501 with `include_sounds_unsupported`, check whether the selected gallery model supports sound events. Select `parakeet-cpp-multilingual-diarization-speakers-sounds` when sound analysis is needed, and review model-loading errors in the server.</p></section><section><h2>Check storage scope and server operating state</h2><p>Saved voices are currently lost when the server restarts. Users of the same LocalAI instance also share enrollment information. Agree with the operator on whose voices are enrolled, who may use them, and how recordings are retained.</p><p>Operate → This machine shows VRAM, RAM, CPU, model-disk usage, and processes behind loaded models. If a model does not appear or memory becomes constrained after loading, use this page to inspect current processes and resource use. The first CPU sample may show Measuring… while LocalAI gathers enough data.</p><p>Failover routes requests to other model targets according to its configured order and conditions. If a chain includes another LocalAI server or remote target, recordings or request data may be sent there. Check the deployment targets and remove remote paths if audio must stay within your environment.</p><ul><li><a href="https://localai.io/blog/what-landed-in-localai-4-11/">LocalAI 4.11 release: saved speakers, failover, and host operations</a></li><li><a href="https://localai.io/docs/features/">LocalAI documentation for audio, speakers, and sound events</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-review.webp" alt="A small desktop computer beside an audio-track monitor, blank notebook, and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the recording timeline to find a turn and compare it with the transcript.</figcaption></figure><aside><h2>Review the transcription workflow with a short recording</h2><p>This demo covers ASR transcription. Speaker-name enrollment and sound events are configured separately in LocalAI 4.11 Studio or its API.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=qwen3-asr-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LocalAI 4.11 is an open-source local AI server. Send it a meeting recording to receive speech segments and a transcript; listen to a speaker segment and save a name for reuse in a later recording. An audio-scene model also returns non-speech events such as coughing or applause with timestamps.</dd></div><div><dt>How much memory does it need?</dt><dd>Operate → This machine shows VRAM, RAM, CPU, model-disk usage, and processes behind loaded models. If a model does not appear or memory becomes constrained after loading, use this page to inspect current processes and resource use. The first CPU sample may show Measuring… while LocalAI gathers enough data.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Basalt at 665 tok/s? Qwen3.8 Flash-Next Setup and GPU Requirements</title><link>https://localai.co.kr/en/guides/basalt-qwen38-flash-next-blackwell-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/basalt-qwen38-flash-next-blackwell-guide</guid><description>Learn what Basalt accepts and returns, which hardware it supports, how its .basalt packs use memory, and how to start the local API.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Basalt at 665 tok/s? Qwen3.8 Flash-Next Setup and GPU Requirements</h1><p>How can you run Qwen3.8 Flash-Next faster with Basalt?</p><p id="guide-page-summary">Basalt is an inference engine for running Qwen3.8-Flash-Next on Linux x86-64 with a Blackwell (sm_120) GPU. It takes a .basalt model pack and a prompt, then returns a text response through an OpenAI- or Anthropic-compatible API. Expert weights that do not fit in VRAM are read from system RAM.</p><p>Connect a ready-made Qwen3.8-Flash-Next model pack to the Basalt server on a Linux PC and send a prompt; the answer comes back through a local API. This guide checks the requirements, downloads the IQ3_XXS pack, builds the server, and follows the steps through the first response.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Basalt is a Linux inference engine for Qwen3.8-Flash-Next.</li><li>Published RTX 5090+5060 Ti results report 354 tok/s for prose and 665 tok/s for structured output.</li><li>In the IQ3_S concurrency test, total prose throughput across eight requests was 623 tok/s.</li></ol></section><section><h2>A Strata Fork with a Tuned Token Drafter</h2><p>Basalt is derived from Strata. Its IQ3_XXS, IQ3_S and Q2_0 packs include an MTP drafter additionally trained on Qwen3.8 Flash-Next's own output. The drafter proposes several upcoming tokens for the main model to verify; higher acceptance can improve generation speed.</p><p>Basalt is an engine derived from Strata that provides a server and compatible API for running this model. To use a chat interface, connect an OpenAI- or Anthropic-compatible client.</p><ul><li><a href="https://github.com/jesdga95/basalt">Basalt source repository and current run instructions</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li></ul></section><section><h2>RAM and VRAM Hold Different Parts of the Expert Weights</h2><p>Qwen3.8-Flash-Next is a mixture-of-experts (MoE) model. For each input token, it uses selected experts rather than computing every expert. Basalt keeps frequently used experts in a GPU-memory (VRAM) cache and places expert weights that do not fit in VRAM in system RAM, retrieving them as needed. This lets the model run without loading the entire model file into VRAM, but the system needs enough RAM to hold the remaining weights.</p><p>The IQ3_XXS file is 74.4 GiB, including 40.0 GiB of expert weights. IQ3_S is 81.0 GiB with 46.8 GiB of experts. Reserve enough storage for the full file, then budget runtime memory for the GPU cache, experts remaining in RAM and the operating system.</p><ul><li><a href="https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt">.basalt model packs and file details</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A compact workstation and two memory modules sit on a desk with a blank monitor and keyboard." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Basalt keeps some model weights in GPU memory and the rest in system memory.</figcaption></figure><section><h2>The Dual-GPU Run Reached 354 tok/s for Prose and 665 for Structured Output</h2><p>The figures below are single-request generation speeds for Qwen3.8-Flash-Next GSQ-RCO IQ3_XXS. The reported results with one RTX 5090 were 316 tok/s for prose and 585 tok/s for structured output; adding an RTX 5060 Ti as a peer expert tier raised those figures to 354 and 665 tok/s.</p><table><caption>IQ3_XXS speeds reported by the Basalt developer</caption><thead><tr><th scope="col">GPU setup</th><th scope="col">Prose generation</th><th scope="col">Structured output</th></tr></thead><tbody><tr><th scope="row">RTX 5090 + RTX 5060 Ti</th><td>354 tok/s</td><td>665 tok/s</td></tr><tr><th scope="row">RTX 5090</th><td>316 tok/s</td><td>585 tok/s</td></tr></tbody></table><p>The dual-GPU setup used a Ryzen 9 9950X, 32 GB RAM, and a 400 W GPU power limit. A separate concurrency result in the model card reports IQ3_S prose throughput of 338 tok/s for one request and 623 tok/s combined across eight requests. The 623 tok/s figure is aggregate throughput, not per-request speed, and uses a different quantized pack from the IQ3_XXS table. These speeds are measurements published by the developer.</p><ul><li><a href="https://www.reddit.com/r/LocalLLaMA/comments/1x223ai/basalt_flashnext_at_665_toks_structured_354_prose/">Developer's Reddit post and benchmark conditions</a></li><li><a href="https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt">Speed and concurrency table in the model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards are installed one above the other inside an open workstation case." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Read the one-card result separately from the RTX 5090 plus RTX 5060 Ti setup.</figcaption></figure><section><h2>Check Linux and GPU Requirements Before Installing</h2><p>Building and serving Basalt requires Linux x86-64, an AVX2 CPU, an NVIDIA Blackwell GPU with compute capability 12.0 (sm_120), CUDA 13, CMake 3.24 or later, and a C++20 compiler. The Python server also requires Python 3.10 or later and the packages in the repository's `requirements.txt`.</p><p>System RAM holds expert weights that do not fit in VRAM. Check that enough RAM remains for the rest of the selected model pack and the operating system.</p><p>From the repository root, build the Release binaries and prepare the Python server environment. The build creates bin/basalt.</p><div><p><strong>Build the engine and install server packages</strong></p><pre><code data-guide-code-block="3-0">git clone https://github.com/jesdga95/basalt.git
cd basalt
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt</code></pre></div><ul><li><a href="https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt/blob/main/README.md">Available model packs and downloads</a></li></ul></section><section><h2>Download the IQ3_XXS Pack into the Repository</h2><p>Basalt can read a finished .basalt file from Hugging Face directly, so you do not need to convert the Qwen weights yourself. This walkthrough uses the IQ3_XXS pack. The file is 74.4 GiB, so make sure your storage has that much free space before downloading it.</p><p>From the repository root, create a models directory and run the command below. When it finishes, the file should appear there with the same name.</p><div><p><strong>Download the IQ3_XXS model</strong></p><pre><code data-guide-code-block="4-0">mkdir -p models
curl -fL --output models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt/resolve/main/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt</code></pre></div><ul><li><a href="https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt">IQ3_XXS model file</a></li></ul></section><section><h2>Start the Server on Localhost First</h2><p>Start with the server listening only on 127.0.0.1. If another computer needs to connect, enable authentication by passing --api-key when launching the server. The API key is a command-line-only option and cannot be stored in the config file.</p></section><section><h2>Put the Model and Engine Options in One Configuration File</h2><p>The model file does not contain engine options. The current repository README says the built-in defaults are a 4096-token context, fp16 KV cache, no speculative decoding, and no expert cache, so configure these explicitly when you want the published setup. Put the model path and server port under server, and cache, prefill, speculative decoding, and context length under engine.</p><p>Save the JSON below as basalt_config.json at the repository root. Begin with max-context 16384 and automatic expert-cache and prefill. spec: 7 proposes up to seven draft tokens; spec-min-p: 0.5 sets the draft probability threshold. Tune context and cache after confirming a response.</p><p>Check the applied settings in the console's [server] engine: line. Add resident-experts only when you have sufficient RAM for resident expert weights; otherwise start with the automatic cache. After confirming a response, adjust max-context and cache settings one at a time so you can track their effects.</p><div><p><strong>First-run basalt_config.json</strong></p><pre><code data-guide-code-block="6-0">{
  "server": {
    "model": "models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt",
    "alias": "Qwen 3.8 FN",
    "gpu": "0",
    "host": "127.0.0.1",
    "port": 8080
  },
  "engine": {
    "expert-cache": "auto",
    "prefill": "auto",
    "spec": 7,
    "spec-min-p": 0.5,
    "max-context": 16384,
    "kv": "int8",
    "vram-reserve-mib": 700
  }
}</code></pre></div><div><p><strong>Start the server with this config</strong></p><pre><code data-guide-code-block="6-1">bin/basalt serve --config basalt_config.json</code></pre></div><ul><li><a href="https://github.com/jesdga95/basalt#settings---config">Full list of settings and precedence rules</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="Two graphics cards and two memory modules lie on a desk beside a notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the model pack to available RAM first, then adjust the GPU cache and context settings.</figcaption></figure><section><h2>Check the First Response and Common Startup Errors</h2><p>From another terminal, check the /v1/models path for the model ID, then send a simple request and confirm that a response arrives. In this example the model ID is Qwen 3.8 FN. The server response contains model-generated text for your message. Open http://127.0.0.1:8080/ in a browser to see the statistics page with throughput and request logs.</p><p>The first call succeeded if Qwen 3.8 FN appears in the model list and the second request returns JSON with choices[0].message.content.</p><p>If the model list is empty, first check whether the model path in your config points to the actual file and whether its download has finished. For a CUDA error or a message saying no GPU was found, check that the driver, CUDA 13, and the card's compute capability meet the requirements. If the server starts but the model does not load, inspect the first console warning for RAM shortages, the VRAM reserve, and space taken by the KV cache; then try starting again with a shorter context length.</p><div><p><strong>Check the model and send a first chat request</strong></p><pre><code data-guide-code-block="7-0">curl http://127.0.0.1:8080/v1/models
curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen 3.8 FN","messages":[{"role":"user","content":"Explain what a mixture-of-experts model is in one sentence."}],"max_tokens":80}'</code></pre></div><ul><li><a href="https://github.com/jesdga95/basalt#run">Basalt server and API instructions</a></li></ul></section><section><h2>Supported Hardware and Related Ways to Run Models</h2><p>If you have Linux, a supported GPU, and enough RAM for the model, start with the IQ3_XXS file and run the localhost API. After a successful request, check whether the context and cache remain stable for your workload, then adjust the settings.</p><p>Use the related guides below to compare other Strata-family setups and GPU configurations, find models for an RTX 5090, or review published speeds across inference engines.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-multi-gpu-guide">Strata multi-GPU guide</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-5090-guide">Strata RTX 5090 model guide</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Local LLM engine comparison</a></li><li><a href="https://localai.co.kr/en/speed">Local LLM speed comparison</a></li></ul></section><aside><h2>Compare local LLM speeds</h2><p>Review published speed data for your GPU and model combination.</p><a href="https://localai.co.kr/en/speed">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Basalt is an inference engine for running Qwen3.8-Flash-Next on Linux x86-64 with a Blackwell (sm_120) GPU. It takes a .basalt model pack and a prompt, then returns a text response through an OpenAI- or Anthropic-compatible API. Expert weights that do not fit in VRAM are read from system RAM.</dd></div><div><dt>How much memory does it need?</dt><dd>Qwen3.8-Flash-Next is a mixture-of-experts (MoE) model. For each input token, it uses selected experts rather than computing every expert. Basalt keeps frequently used experts in a GPU-memory (VRAM) cache and places expert weights that do not fit in VRAM in system RAM, retrieving them as needed. This lets the model run without loading the entire model file into VRAM, but the system needs enough RAM to hold the remaining weights.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Basalt can read a finished .basalt file from Hugging Face directly, so you do not need to convert the Qwen weights yourself. This walkthrough uses the IQ3_XXS pack. The file is 74.4 GiB, so make sure your storage has that much free space before downloading it.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen-Image-2.1-Turbo: How Do You Generate and Edit Images in 8 Steps?</title><link>https://localai.co.kr/en/guides/qwen-image-21-turbo-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-image-21-turbo-local-guide</guid><description>Install the supported Diffusers path for Qwen-Image-2.1-Turbo, then generate an image or edit a reference image with its saved 8-step schedule.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Qwen-Image-2.1-Turbo: How Do You Generate and Edit Images in 8 Steps?</h1><p>How Do You Generate and Edit Images with Qwen-Image-2.1-Turbo?</p><p id="guide-page-summary">Qwen-Image-2.1-Turbo is a 7B model for creating images from text prompts and editing reference images. Diffusers uses the 8-step schedule saved with the model. This guide installs CUDA-enabled PyTorch and Diffusers, saves a square image, then edits one with the same pipeline.</p><p>This recipe starts in a Python environment with a CUDA GPU and CUDA-enabled PyTorch ready. Create a virtual environment, install Diffusers, load the model files, then use the same pipeline for generation and editing.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Turbo is a checkpoint distilled for eight-step generation.</li><li>The recommended schedule is saved in the checkpoint and applied automatically. Changing only num_inference_steps does not replace it; specify sigmas to use another schedule.</li><li>The weights, text encoder, and VAE use GPU memory, and output size also affects the headroom required.</li><li>The Qwen Research License permits non-commercial research or evaluation; commercial use requires separate permission.</li></ol></section><section><h2>Turbo Changes the Checkpoint and Sampling Schedule</h2><p>Image models start from noise and refine it over several steps. Turbo distills Qwen-Image-2.1 to perform this process in eight steps. You can use it to iterate on a prompt or try several backgrounds for the same photograph.</p><p>Diffusers automatically loads the 8-step schedule stored in the checkpoint. Increasing or reducing the step count alone does not change that schedule. To test another schedule, pass sigmas directly when calling the pipeline.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1-Turbo">Qwen-Image-2.1-Turbo model card</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/pruna-qwen-image-2-1-local-guide">Run Pruna-Qwen-Image-2.1 locally: choosing its 5- or 8-step adapter</a></li><li><a href="https://localai.co.kr/en/guides/z-image-turbo-local-image-guide">Generate an image locally with Z-Image-Turbo</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-creative-desk.webp" alt="A desk with a monitor and printed still life" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Save one image from a short prompt first, then adjust the output size.</figcaption></figure><section><h2>Prepare the Supported Diffusers Version</h2><p>First create and activate a project virtual environment. Choose and run the command for your operating system and CUDA version on the PyTorch installation page, then use the command below to install the latest Diffusers version required by the Turbo checkpoint and its additional packages.</p><div><pre><code data-guide-code-block="1-0">python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
# Install the CUDA-enabled PyTorch command selected from pytorch.org/get-started/locally/
pip install git+https://github.com/huggingface/diffusers.git
pip install "transformers&gt;=5.17.0" accelerate pillow</code></pre></div><ul><li><a href="https://pytorch.org/get-started/locally/">Choose the CUDA-enabled PyTorch install command</a></li><li><a href="https://github.com/huggingface/diffusers/pull/14950">Diffusers support for saved schedules</a></li></ul></section><section><h2>Generate and Save a First Image with a Short Prompt</h2><p>Save the code below as qwen_turbo.py and run it in the virtual environment you installed. The model files download on the first run. The script saves an image at 2048×2048, the official 1:1 preset.</p><div><pre><code data-guide-code-block="2-0">import torch
from diffusers import QwenImage21Pipeline

pipe = QwenImage21Pipeline.from_pretrained(
    "Qwen/Qwen-Image-2.1-Turbo",
    dtype=torch.bfloat16,
).to("cuda")

prompt = "A small ceramic teapot on a wooden table, soft morning light, editorial product photo"
image = pipe(
    prompt=prompt,
    width=2048,
    height=2048,
    use_kv_cache=True,
).images[0]
image.save("qwen-turbo.png")</code></pre></div><div><pre><code data-guide-code-block="2-1">python qwen_turbo.py</code></pre></div></section><section><h2>Reuse Context with the KV Cache</h2><p>In the preceding code, use_kv_cache=True reuses information from the prompt and reference image across steps, reducing repeated processing. Start with the default CFG of 1 and adjust the prompt and output dimensions first.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1-Turbo#sampling">Turbo sampling notes</a></li></ul></section><section><h2>Edit an Image by Providing a Reference</h2><p>Place a reference image named reference.png in the same folder as qwen_turbo.py. Append the code below to the generation code to reuse the same pipe for editing. Save the script, then run python qwen_turbo.py again to create both images.</p><div><pre><code data-guide-code-block="4-0">from diffusers.utils import load_image

input_image = load_image("reference.png").convert("RGBA")
edit_prompt = "Keep the vase shape and flowers; replace the plain background with a sunlit pale-blue studio backdrop."

image = pipe(
    prompt=edit_prompt,
    image=input_image,
    width=2048,
    height=2048,
    use_kv_cache=True,
).images[0]
image.save("qwen-turbo-edit.png")</code></pre></div></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-reference-edit.webp" alt="Two images of the same vase against different backgrounds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate what should stay from what should change to review an edit more easily.</figcaption></figure><section><h2>Choose Output Dimensions from the Aspect-Ratio Presets</h2><p>Choose an output aspect ratio from the official presets in the table and enter its width and height in the code. The first run uses a 1:1 size. Changing both dimensions also changes the pixel count and aspect ratio, so choose values that match the output you want.</p><table><caption>Aspect ratios and resolutions listed in the model card</caption><thead><tr><th scope="col">Aspect ratio</th><th scope="col">Width × height</th></tr></thead><tbody><tr><th scope="row">1:1</th><td>2048 × 2048</td></tr><tr><th scope="row">4:3</th><td>2400 × 1792</td></tr><tr><th scope="row">3:4</th><td>1792 × 2400</td></tr><tr><th scope="row">3:2</th><td>2528 × 1696</td></tr><tr><th scope="row">2:3</th><td>1696 × 2528</td></tr><tr><th scope="row">16:9</th><td>2752 × 1536</td></tr><tr><th scope="row">9:16</th><td>1536 × 2752</td></tr></tbody></table><p>Width and height are in pixels. Start at 2048×2048 for a square or 1536×2752 for a vertical poster.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1-Turbo#supported-aspect-ratios">Official resolution presets</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-transparent-layers.webp" alt="A transparent botanical illustration over different backgrounds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Turbo outputs can also support work with backgrounds and transparent assets.</figcaption></figure><section><h2>Check the Runtime First When Something Fails</h2><p>For an ImportError when loading QwenImage21Pipeline, check that the virtual environment is active and reinstall Diffusers in that environment. Close other GPU workloads if CUDA runs out of memory. An error during model loading points to insufficient space for weights; an error during generation may be helped by reducing output dimensions.</p><p>If the image misses part of your instruction, separate the elements to keep from those to change in the prompt, then try again at a test output size. Change the input image, instruction, and resolution one at a time to see which condition affects the result.</p></section><section><h2>Check the License Before Commercial Use</h2><p>The Qwen Research License allows non-commercial use of the model for research and evaluation. Commercial use requires a separate license from Qwen.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1-Turbo/blob/main/LICENSE">Full Qwen Research License agreement</a></li></ul></section><aside><h2>Compare Hardware Times for Base Qwen-Image-2.1</h2><p>Use the calculator to compare generation time and memory for base Qwen-Image-2.1 across hardware.</p><a href="https://localai.co.kr/en/generate?model=qwen-image-2.1">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen-Image-2.1-Turbo is a 7B model for creating images from text prompts and editing reference images. Diffusers uses the 8-step schedule saved with the model. This guide installs CUDA-enabled PyTorch and Diffusers, saves a square image, then edits one with the same pipeline.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can a CMP 170HX mining card run a 64GB local LLM?</title><link>https://localai.co.kr/en/guides/cmp170hx-local-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-local-llm-guide</guid><description>Explore the CMP 170HX for local LLMs: its 32GB, 40GB and 64GB memory variants, Linux unlock requirements, model runtime options, cooling and PCIe limits.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Can a CMP 170HX mining card run a 64GB local LLM?</h1><p>Prepare Linux drivers and cooling to make use of the 64GB memory configuration.</p><p id="guide-page-summary">The CMP 170HX is a mining-oriented accelerator with an NVIDIA GA100-105F GPU and HBM2e. On Linux, a local runtime loads a model into GPU memory, processes the prompt and generates an answer. With a supported cmpunlocker memory profile and a runtime path suited to GA100, it can be used for local LLM inference.</p><p>It is worth examining when comparing options for models that need more memory. Start with the card's rank, Linux environment, and cooling setup, then review the Qwen3.8 run records.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>64GB on some 8GB cards, 40GB on 10GB cards and 32GB on some single-rank cards are distinct configurations.</li><li>GA100-105F supports BF16, FP16 and TF32, but has no native FP8 or FP4 tensor path.</li><li>Add strong forced airflow to the passive heatsink and check PCIe Gen2 operation and the board-specific link width.</li></ol></section><section><h2>Match compute formats with runtime memory</h2><p>After the model weights are loaded, the runtime still uses memory for workspaces and the KV cache. A longer context grows the KV cache, so check the actual context length and runtime buffers alongside the quantized file size.</p><p>GA100-105F supports BF16, FP16, and TF32. It does not have native FP8 or FP4 Tensor execution paths, so check whether the model's quantization format and runtime kernels support GA100.</p><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/docs/CMP170HX-UNDERSTANDING.md">GA100 architecture and documented runtime conditions</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><section><h2>CMP 170HX cards can have different memory configurations</h2><p>The unlocked memory capacity of a CMP 170HX depends on its memory rank. An 8GB dual-rank card can be configured as 64GB, some 8GB single-rank cards as 32GB, and 10GB cards as 40GB. Rank refers to how memory chips are grouped. Check the shipped capacity and rank before buying.</p><p>The installer detects a profile from the card information. Before overriding it, compare the card's memory rank with the maintainer's guidance, then use the capacity reported after reboot when choosing a model.</p><table><caption>Memory profiles described by cmpunlocker</caption><thead><tr><th scope="col">Card as shipped</th><th scope="col">After profile</th><th scope="col">What to verify</th></tr></thead><tbody><tr><th scope="row">Some 8GB cards</th><td>Up to a 64GB configuration</td><td>Some single-rank cards may expose 32GB</td></tr><tr><th scope="row">10GB cards</th><td>40GB configuration</td><td>Compare the README with the card identification</td></tr></tbody></table><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">cmpunlocker maintainer README and requirements</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single data-center accelerator card sits on a workbench beside a magnifier and notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Checking the card's configuration helps identify the right memory profile.</figcaption></figure><section><h2>Match the operating system and driver before installing</h2><p>cmpunlocker is not a regular desktop app. It patches NVIDIA open GPU kernel modules on Linux to change the reported memory geometry. The maintainer lists Linux x86-64, root access, an NVIDIA CMP 170HX, a supported nvidia-open 610.xx.xx-or-later branch with matching libraries and firmware, and headers matching the running kernel. The first build needs network access, and Secure Boot must be disabled so unsigned modules can load.</p><p>Choose a driver version by comparing the README's supported versions with packages available for your distribution; the maintainer also lists 615.78.08. A driver update may require rebuilding the patched module for the new version. The Linux unlock guide covers installation, profile checks and removal on the host that will use the card.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker/releases/tag/v0.5">v0.5 release notes</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-linux-unlock-guide">Linux unlock guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A workstation monitor shows a blank window, with an accelerator card installed inside the case." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the driver and kernel requirements before starting a Linux installation.</figcaption></figure><section><h2>What can you run with 64GB of memory?</h2><p>Each memory configuration is a budget shared by model weights, runtime workspace and KV cache. When choosing a model, account for runtime memory requirements and input context together. A 32GB or 40GB card may call for a lower quantization level or shorter context.</p><p>Inference speed depends on the model, quantization, HBM clock, PCIe link, engine and decode settings. Cards sold under the same board number can still use different VBIOS and HBM clocks. PixelML recorded a one-card Qwen3.8-27B setup at 64GiB, 74 SMs, 1728MHz HBM, PCIe Gen2 x16, 180W and forced airflow. The measurement guide lists the vLLM and open-jet results and input-length conditions.</p><table><caption>How memory variants change the room available for inference</caption><thead><tr><th scope="col">Detected capacity</th><th scope="col">Room for a model</th><th scope="col">First check</th></tr></thead><tbody><tr><th scope="row">32GB</th><td>Least room for weights, workspace and context</td><td>Quantized file size and context length</td></tr><tr><th scope="row">40GB</th><td>More room for a mid-sized model, still needs workspace</td><td>10GB-card profile and runtime formats</td></tr><tr><th scope="row">64GB</th><td>More room for weights and longer context together</td><td>Rank layout and applied profile on an 8GB card</td></tr></tbody></table><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/docs/CMP170HX-UNDERSTANDING.md">CMP 170HX hardware notes and board records</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-qwen38-serving-guide">measurement guide</a></li></ul></section><section><h2>Check both the reported memory and actual use</h2><p>After unlocking and rebooting, use nvidia-smi to check the GPU name, total memory and driver version, then nvidia-smi -q -d PCI to inspect link generation and width. If an 8GB card expected to use the 64GB profile reports 32GB, first verify whether its rank layout is supported and which profile the installer detected. When testing a model, check in order that memory allocation completes, a first token appears after the prompt, and a longer-context request finishes.</p><p>If the link remains at Gen1, check the card, slot, riser, BIOS settings and board limits. PixelML recorded successful Gen2 operation, while Gen3 was fuse-blocked on all four cards it tested. Depending on the board, the link may also be x4 or x16, so a Gen2 unlock does not guarantee the same transfer path on every system.</p><ul><li><a href="https://github.com/PixelML/club-170hx">PixelML CMP 170HX records</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open case beside a fan and an unmarked meter." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Monitor memory temperature and airflow while the card is serving a model.</figcaption></figure><section><h2>A passive-heatsink card needs forced airflow</h2><p>The CMP 170HX uses a passive heatsink without an onboard fan. Position a blower or ducted fan so air passes through its fins. Load a model and send repeated requests while monitoring GPU core and memory temperatures and clock speed to check the cooling setup.</p><p>A lower power limit can help reduce heat. Establish adequate airflow first, then adjust the cap while comparing speed and temperature with the same workload. The power and cooling guide covers the published 180 W single-card Qwen run and the four-card GLM power sweep.</p><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/docs/CMP170HX-UNDERSTANDING.md">Hardware notes with cooling and power conditions</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-power-cooling-guide">power and cooling guide</a></li></ul></section><section><h2>Start with one card and judge it under your workload</h2><p>When choosing a model, first check its quantized file, detected memory, context length and whether the runtime supports GA100. Then send a document similar to your real input and record time to first token, output speed and whether the request completes. Even when the card reports 64GB, a longer input adds KV cache, and some engines require kernels suited to the model architecture.</p><p>Choose a setup based on the memory shown by nvidia-smi, a runtime that supports GA100, and the quantization and context length you plan to use. If you can manage Linux drivers and kernel modules and provide strong airflow, you can experiment with local LLMs on one CMP 170HX. Since those requirements are part of the setup, compare other GPUs and their setup effort if you want a simple desktop installation.</p></section><aside><h2>Estimate CMP 170HX speed</h2><p>Choose a model and context to explore an estimate. The result is not a measurement from a specific CMP 170HX card.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The CMP 170HX is a mining-oriented accelerator with an NVIDIA GA100-105F GPU and HBM2e. On Linux, a local runtime loads a model into GPU memory, processes the prompt and generates an answer. With a supported cmpunlocker memory profile and a runtime path suited to GA100, it can be used for local LLM inference.</dd></div><div><dt>How much memory does it need?</dt><dd>After the model weights are loaded, the runtime still uses memory for workspaces and the KV cache. A longer context grows the KV cache, so check the actual context length and runtime buffers alongside the quantized file size.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What should you check before buying a CMP 170HX?</title><link>https://localai.co.kr/en/guides/cmp170hx-buying-checklist-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-buying-checklist-guide</guid><description>A pre-purchase checklist for CMP 170HX card rank and 32/40/64GB profiles, Linux drivers and Secure Boot, PCIe links, cooling and power setup.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">What should you check before buying a CMP 170HX?</h1><p>Check the card details, Linux support path and cooling before trusting the listing title.</p><p id="guide-page-summary">The CMP 170HX is a GA100-family accelerator sold for mining, so evaluating one means checking both the card and the Linux system where it will be installed. Get the memory-rank details and board photos from the seller, then compare them with the driver version, PCIe link and airflow you can provide to choose a suitable model and setup.</p><p>Start with memory capacity, but do not overlook fans and power cables. Work through the information to request from the seller and the checks to make on your PC to reduce surprises after purchase.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>64GB is a profile result for some 8GB cards; the 10GB-card profile is 40GB, and some single-rank cards may expose 32GB.</li><li>It requires Linux x86-64, a supported nvidia-open branch, matching kernel headers and the appropriate Secure Boot setting.</li><li>Plan for case clearance and forced airflow around the passive heatsink.</li></ol></section><section><h2>Ask for the actual board details, not just the listing title</h2><p>Start by requesting photos of both sides of the card, its power connector, and the area around the memory packages. A board identifier alone does not establish the HBM clock or VBIOS on an individual card. If possible, ask the seller for nvidia-smi -q output, GPU UUID, driver version and total memory to confirm its working state.</p><p>Check whether the bracket, auxiliary power cable, and fan are included, and note the return period and how long you have to inspect the card after delivery. Once it arrives, compare the seller's `nvidia-smi -q` output with your own. Then load a model, send consecutive requests, and watch temperature and clock speed.</p><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/docs/CMP170HX-UNDERSTANDING.md">Card-specific VBIOS and HBM clock notes</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-ecc-v05-guide">CMP 170HX ECC Is Now Unlocked. What Actually Changes?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single data-center accelerator card sits on a workbench beside a magnifier and notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Photos and identifiers let you compare the card's rank and board configuration.</figcaption></figure><section><h2>Use rank and profile to estimate usable memory</h2><p>Before buying, confirm the card's shipped memory and rank layout, then compare them with the cmpunlocker profile you expect to use. The maintainer's README describes automatic detection plus an 8GB profile for 8GB cards and automatic detection plus a 10GB profile for 10GB cards. Some single-rank 8GB cards may configure to 32GB rather than 64GB, so ask what capacity the seller can substantiate.</p><p>If you plan to buy two cards, check multi-GPU support in your chosen engine. It needs to split the model across cards, and inter-card transfers use the PCIe path. Plan the slot layout, power supply, and cooling space together.</p><table><caption>Memory path to confirm before purchase</caption><thead><tr><th scope="col">Card to identify</th><th scope="col">Profile outcome</th><th scope="col">Evidence to request</th></tr></thead><tbody><tr><th scope="row">Some 8GB cards</th><td>Up to 64GB; some single-rank cards expose 32GB</td><td>Memory rank and card identifiers</td></tr><tr><th scope="row">10GB cards</th><td>40GB</td><td>Shipped memory and applied profile</td></tr></tbody></table></section><section><h2>Check the PCIe slot and board layout</h2><p>Check the PCIe link width and generation supported by the board, then use the motherboard manual to inspect the wiring of the slot you plan to use. PixelML tested PCIe Gen2 operation on the CMP 170HX; Gen3 was fuse-blocked on all four cards in its sample. Board configurations can also differ between x4 and x16, so check CPU-lane sharing and slot changes when other cards are installed.</p><p>The card has no NVLink bridge circuitry, and each GPU keeps separate memory. Sharding a model across two cards requires runtime support for PCIe multi-GPU execution and that model's partitioning method, so check model and engine support before buying.</p><ul><li><a href="https://localai.co.kr/en/guides/cmp170hx-multi-gpu-guide">Topology and measurement conditions for two cards</a></li></ul></section><section><h2>Verify driver and operating-system support</h2><p>Current cmpunlocker requirements include Linux x86-64, root access, a supported driver branch of 610.xx.xx or later with NVIDIA open GPU kernel modules, matching libraries and firmware, and headers for the running kernel. The first build needs network access, and Secure Boot must be disabled because the patched modules are unsigned. Also check that your distribution provides the driver branch and that you can install matching headers after kernel updates.</p><p>After a kernel or driver update, you may need to rebuild the patched module and check GPU recognition after boot. This fits a PC where you already maintain Linux; a standard GPU may be easier if you prefer not to modify drivers. See the Linux unlock guide for installation and removal.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">Supported drivers and OS requirements in the maintainer README</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-linux-unlock-guide">Linux unlock guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A workstation monitor shows a blank window, with an accelerator card installed inside the case." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before buying, check driver and kernel support for the Linux host you will use.</figcaption></figure><section><h2>Fit cooling, power and clearance to your case</h2><p>The CMP 170HX's passive heatsink needs airflow directed across the card. Measure card spacing, power-cable reach and room for a fan or duct, then confirm that air can move from intake to exhaust with the case closed. If considering a server chassis or open frame, include dust control, noise and heat released into nearby equipment in the system cost.</p><p>Check PSU capacity against the GPU, CPU, and other components together. Auxiliary power connectors and cables must match the card. After delivery, start with a light workload, monitor memory temperature and clocks, and maintain strong airflow. The power and cooling guide explains how to tune the power limit.</p><ul><li><a href="https://localai.co.kr/en/guides/cmp170hx-power-cooling-guide">power and cooling guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open case beside a fan and an unmarked meter." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check card clearance, fan placement and power connections together inside the case.</figcaption></figure><section><h2>Compare costs beyond the card itself</h2><p>A CMP 170HX setup includes the Linux host, supported driver path, kernel-header maintenance, forced-airflow fans, a suitable slot and case clearance. If you already have those parts and skills, the additional setup may be small; if you must build them, the total budget can compare differently with another GPU. Compare current listings plus the required supporting hardware on the same basis rather than relying on a past used-card price.</p><p>Once the supporting setup is in place, finish the decision by checking the expected memory profile, model requirements, runtime support and responses to your actual inputs. If speed is the goal, use the comparison tool with a fixed model and context as an initial estimate, then compare your setup with published measurements where hardware conditions are documented, such as the Qwen3.8-27B result.</p><ul><li><a href="https://localai.co.kr/en/guides/cmp170hx-local-llm-guide">Choosing a local model for the CMP 170HX</a></li><li><a href="https://github.com/PixelML/club-170hx/tree/main/results/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card">Conditions for the one-card Qwen3.8-27B test</a></li></ul></section><aside><h2>Explore estimated speed and settings</h2><p>Fix the model and context to review an estimate, then compare it with the support details of the actual card.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The CMP 170HX is a GA100-family accelerator sold for mining, so evaluating one means checking both the card and the Linux system where it will be installed. Get the memory-rank details and board photos from the seller, then compare them with the driver version, PCIe link and airflow you can provide to choose a suitable model and setup.</dd></div><div><dt>How much memory does it need?</dt><dd>Before buying, confirm the card's shipped memory and rank layout, then compare them with the cmpunlocker profile you expect to use. The maintainer's README describes automatic detection plus an 8GB profile for 8GB cards and automatic detection plus a 10GB profile for 10GB cards. Some single-rank 8GB cards may configure to 32GB rather than 64GB, so ask what capacity the seller can substantiate.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How do you start unlocking CMP 170HX memory on Linux?</title><link>https://localai.co.kr/en/guides/cmp170hx-linux-unlock-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-linux-unlock-guide</guid><description>Follow the cmpunlocker maintainer README for Linux x86-64 prerequisites, 8GB/10GB profile selection, post-reboot memory and PCIe checks, and removal or rollback.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">How do you start unlocking CMP 170HX memory on Linux?</h1><p>Match the supported driver, kernel headers and Secure Boot first; then verify the profile and reboot.</p><p id="guide-page-summary">cmpunlocker patches the NVIDIA open kernel module on Linux to change the memory configuration of a CMP 170HX. After meeting the repository and driver requirements, run the installer and reboot; the driver then reports the capacity for the selected profile. Start with automatic detection and verify the reported capacity.</p><p>Record the driver and kernel versions first. After installation, reboot and check memory capacity and the PCIe link. If something goes wrong, use the installation log and removal procedure to roll back.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Before the first build, install the supported open driver, matching libraries and firmware, and headers for the running kernel.</li><li>Start with automatic profile detection; specify the 8GB or 10GB profile only after checking the hardware.</li><li>After either installation or rollback, reboot and check the result with `nvidia-smi`.</li></ol></section><section><h2>Check the Linux and driver prerequisites first</h2><p>The README requires Linux x86-64, root access, an NVIDIA CMP 170HX, a supported driver version of 610.xx.xx or later that includes NVIDIA open kernel modules, libraries and firmware from the same driver branch, and headers matching the running kernel. Python 3 is also used during the build to select 8GB or 10GB memory geometry. Package names vary by distribution, so use your distribution's instructions for installing kernel headers.</p><p>Check the README's supported versions rather than installing an arbitrary newest driver. The current README lists 610.xx.xx or later and 615.78.08. Also confirm that the driver libraries and firmware come from the same branch and that the headers match the running kernel shown by uname -r.</p><p>Secure Boot must be disabled. The patched kernel modules are unsigned and will not load while Secure Boot is enabled. Change the setting in BIOS/UEFI, save it, and verify the state after Linux boots. The first installation also downloads the matching NVIDIA open kernel module sources for the build, so network access is required.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">Current installation requirements in the maintainer README</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Install Strata on Windows or Linux and send a first prompt</a></li><li><a href="https://localai.co.kr/en/guides/mlx-multi-mac-jaccl-guide">Run a local LLM across Macs: MLX, JACCL and performance</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-local-llm-guide">Can a CMP 170HX mining card run a 64GB local LLM?</a></li></ul></section><section><h2>Choose a memory profile for the card's rank</h2><p>The default installation reads the card information and detects a profile automatically. Keep automatic detection for the first run. According to the maintainer's README, the `8gb` profile for an 8GB card configures 64GB, while the `10gb` profile for a 10GB card configures 40GB. Some 8GB single-rank cards may expose 32GB. If the shipped capacity and rank are unclear, check the card information before forcing a profile.</p><p>Use the 8GB or 10GB override only after confirming that the card matches that profile. An incorrect profile can make the geometry used during installation differ from the card's actual configuration. Keep a note of the installation output and compare it with the post-reboot result to locate failures.</p><table><caption>Maintainer profiles by shipped memory</caption><thead><tr><th scope="col">Shipped configuration</th><th scope="col">Profile</th><th scope="col">README outcome</th></tr></thead><tbody><tr><th scope="row">8GB card</th><td>Auto-detect or `8gb`</td><td>64GB configuration; some single-rank cards expose 32GB</td></tr><tr><th scope="row">10GB cards</th><td>Auto-detect or `10gb`</td><td>40GB configuration</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single data-center accelerator card sits on a workbench beside a magnifier and notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before installation, identify the card's shipped memory and rank.</figcaption></figure><section><h2>Clone the repository and run the installer</h2><p>On the Linux host that meets the prerequisites, clone the maintainer's repository, enter the project directory and run the default installer. This patches the NVIDIA modules and builds modules for the current kernel, so leave the terminal open until it finishes.</p><div><p><strong>Install with automatic profile detection</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/amoghmunikote/cmpunlocker.git
cd cmpunlocker
sudo ./install.sh</code></pre><p><small>Build the required modules following the repository instructions.</small></p></div><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">Installer and current README</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A workstation monitor shows a blank window, with an accelerator card installed inside the case." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Installing the modules involves the driver and kernel, not a single screen setting.</figcaption></figure><section><h2>Override the memory profile only when needed</h2><p>If the shipped memory and rank show that you need a particular profile instead of automatic detection, add --profile to the installer command. Choose the 8GB profile for an 8GB card and the 10GB profile for a 10GB card. Use the option names exactly as shown in the repository README. To switch profiles after an installation, remove the existing setup before applying the new profile.</p><div><p><strong>Manual profile for an 8GB card</strong></p><pre><code data-guide-code-block="3-0">sudo ./install.sh --profile=8gb</code></pre><p><small>Select this only for an 8GB card with a verified supported rank configuration.</small></p></div><div><p><strong>Manual profile for a 10GB card</strong></p><pre><code data-guide-code-block="3-1">sudo ./install.sh --profile=10gb</code></pre><p><small>Choose only this command for a verified 10GB card.</small></p></div></section><section><h2>Verify memory and the PCIe link after reboot</h2><p>When the installer finishes, reboot the system. After boot, check the GPU name, driver version and total memory in nvidia-smi. If an expected 64GB profile on an 8GB card reports 32GB, it may be a single-rank board; recheck the hardware information and choose a supported profile from the README. The 10GB-card profile should report 40GB.</p><p>The second command reports the PCIe link generation and width. If the motherboard has multiple slots, compare the result with its lane-sharing table. PixelML tested Gen2; Gen3 was fuse-blocked on all four cards in its sample. If the link differs from expectations, check the card, slot, riser and BIOS settings one at a time.</p><p>Even with the expected capacity and driver, test model execution separately. Confirm that your runtime supports GA100 kernels, load the model, and send a short prompt followed by a request at your usual context length. If memory allocation fails, retry with a shorter context and runtime buffers; if the kernel module fails to load, check the driver branch, kernel headers and Secure Boot state.</p><div><p><strong>Check GPU memory and PCIe link</strong></p><pre><code data-guide-code-block="4-0">nvidia-smi
nvidia-smi -q -d PCI</code></pre><p><small>Check total memory in the first output and link status in the PCI section.</small></p></div><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/docs/CMP170HX-UNDERSTANDING.md">PixelML observations on Gen2 and link width</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open case beside a fan and an unmarked meter." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before sustained load after installation, check that the fan moves air across the cards.</figcaption></figure><section><h2>When a problem occurs, start at the first failed step</h2><p>If install.sh cannot find kernel headers or sources, check the running kernel with uname -r and confirm that headers for that same version are installed. If the build cannot download driver sources, verify network connectivity and repository access for the first installation. If the module will not load, check Secure Boot in BIOS/UEFI and verify that the driver, libraries and firmware use the matching branch.</p><p>If nvidia-smi cannot find the GPU, confirm that you rebooted and inspect the error message and installation log for the first module build or load failure. If less memory appears than expected, check shipped capacity, memory rank and the auto-detected profile. Comparing the card details before reinstalling with a suitable profile is more useful than repeatedly trying arbitrary overrides.</p></section><section><h2>Roll back with the removal script and a reboot</h2><p>To return to the original driver-module state, run the removal script from the cmpunlocker directory and reboot. The --yes option proceeds without a confirmation prompt, so finish any work using the GPU first. After reboot, check nvidia-smi to confirm that the GPU is detected and the memory configuration has returned to its previous state.</p><div><p><strong>Remove cmpunlocker and reboot</strong></p><pre><code data-guide-code-block="6-0">sudo ./remove.sh --yes
sudo reboot</code></pre><p><small>This is the removal sequence documented by the maintainer.</small></p></div><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">Maintainer README with removal instructions</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Estimate model speed after installation</h2><p>After confirming the profile, choose your model and context to review an estimate.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>cmpunlocker patches the NVIDIA open kernel module on Linux to change the memory configuration of a CMP 170HX. After meeting the repository and driver requirements, run the installer and reboot; the driver then reports the capacity for the selected profile. Start with automatic detection and verify the reported capacity.</dd></div><div><dt>How much memory does it need?</dt><dd>The README requires Linux x86-64, root access, an NVIDIA CMP 170HX, a supported driver version of 610.xx.xx or later that includes NVIDIA open kernel modules, libraries and firmware from the same driver branch, and headers matching the running kernel. Python 3 is also used during the build to select 8GB or 10GB memory geometry. Package names vary by distribution, so use your distribution's instructions for installing kernel headers.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Check the README's supported versions rather than installing an arbitrary newest driver. The current README lists 610.xx.xx or later and 615.78.08. Also confirm that the driver libraries and firmware come from the same branch and that the headers match the running kernel shown by uname -r.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>CMP 170HX ECC Is Now Unlocked. What Actually Changes?</title><link>https://localai.co.kr/en/guides/cmp170hx-ecc-v05-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-ecc-v05-guide</guid><description>Separate the ECC behavior changed by cmpunlocker v0.5 from reporting counters, then review prerequisites and a practical stability check.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">CMP 170HX ECC Is Now Unlocked. What Actually Changes?</h1><p>v0.5 enables DRAM and SRAM ECC and increases the SM count from 70 to 74.</p><p id="guide-page-summary">ECC detects and corrects some data errors in GPU memory. cmpunlocker v0.5 added a patch to enable ECC for DRAM and SRAM on the CMP 170HX.</p><p>This guide covers v0.5 patch roles, installation prerequisites, and post-install workload checks.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The v0.5 ecc-enable patch and ecc-reporting compatibility patch serve different purposes.</li><li>v0.5 added DRAM and SRAM ECC and increased active SMs from 70 to 74.</li><li>Before installation, match the Linux driver and kernel requirements to the card's memory profile.</li></ol></section><section><h2>v0.5 Changed ECC and the SM Count</h2><p>ECC can correct certain transient errors in memory data during a long computation, helping keep those errors from affecting the result. v0.5 enables DRAM and SRAM ECC and increases active SMs from 70 to 74. SM count relates to parallel compute resources, but this update alone does not provide a measured speed change for any particular model.</p><p>Earlier card notes that said ECC was unavailable describe the state before v0.5. The patch record and installation notes below show the release's scope and published test details.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker/releases/tag/v0.5">cmpunlocker v0.5 release notes</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-buying-checklist-guide">What should you check before buying a CMP 170HX?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single CMP 170HX card, a magnifier, and a notebook sit on a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>ECC detects and corrects certain errors that may occur in GPU memory.</figcaption></figure><section><h2>The ECC-Enabling Patch and the Reporting Patch Do Different Jobs</h2><p>The repository contains ecc-enable.patch, ecc-fbpa-static.patch, and ecc-reporting.patch. The first two are used to enable ECC behavior in the memory-control path; the reporting patch adds a compatibility path for how the driver handles ECC status and error counters. Even though all three patches were introduced together, the behavior change and display compatibility should be read separately.</p><p>In the maintainer's published test with driver 615.71.09, ECC_CTRL was 0x41, memory register MR4 was 0x33, the readout was 0x00010233, and nvidia-smi showed ECC Enabled. The configuration also retained 64GB of memory. This record demonstrates the v0.5 path, but does not guarantee the same result for other driver, card, or kernel combinations.</p><table><caption>Roles to Distinguish in the v0.5 ECC Patches</caption><thead><tr><th scope="col">Patch or status</th><th scope="col">Purpose</th><th scope="col">What to check</th></tr></thead><tbody><tr><th scope="row">ecc-enable / ecc-fbpa-static</th><td>Enable ECC behavior in the memory path</td><td>Record the source and driver combination</td></tr><tr><th scope="row">ecc-reporting</th><td>Add compatibility for driver status and counters</td><td>Do not treat Enabled and zero counters as standalone proof</td></tr><tr><th scope="row">Memory load and workload results</th><td>Assess stability during extended use</td><td>Record errors, interruptions, and answer stability with the version</td></tr></tbody></table><p>The ECC reporting compatibility patch synthesizes statuses such as Enabled, Supported, scrubComplete, and InfoROM 6.16, and initializes some counters to zero. Therefore, an Enabled display and zero counters in nvidia-smi alone cannot show whether an error was corrected when one occurred or whether memory remains stable after a long load. That is why you should record the patch version and review memory-load tests alongside real workload results.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker/pull/56">ECC implementation and test record</a></li></ul></section><section><h2>Match the Driver and Kernel Prerequisites Before Installing</h2><p>cmpunlocker v0.5 requires the NVIDIA open driver 610.xx.xx or later on Linux x86-64. It also needs matching driver libraries and firmware, kernel headers for the running kernel, and Secure Boot disabled. A network connection is needed for the first build. The repository's current support list includes 615.78.08, so choose a driver branch listed as supported rather than assuming the newest release is suitable.</p><p>Installation uses the repository's sudo ./install.sh command followed by a reboot. The default profile detects the card configuration. If you need to select a profile explicitly, first identify the hardware, then use sudo ./install.sh --profile=8gb or sudo ./install.sh --profile=10gb. The 8GB profile can expose 64GB on dual-rank cards and 32GB on some single-rank cards; the 10GB profile targets a 40GB configuration. A profile changes the memory-unlock configuration as well as the ECC setup, so it must match the card.</p><p>The installer patches Linux kernel modules and may use unsigned modules. A kernel update can require rebuilding the matching module, and these changes do not permanently flash the card's firmware. To roll back, follow the repository instructions with sudo ./remove.sh --yes, then reboot. Run the procedure on the Linux PC that uses the GPU, and prepare a way to recover its operating system and driver before installing.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker">cmpunlocker installation and support notes</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A blank window is open on a monitor beside a workstation with a graphics card installed." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before installation, match a supported driver with headers for the running kernel.</figcaption></figure><section><h2>After Installation, Check the Display and Real Workloads Separately</h2><p>After rebooting, check whether nvidia-smi reports ECC Enabled and record the cmpunlocker and driver versions. Also confirm that the card is detected and its memory capacity matches the selected profile.</p><p>Next, run a memory-intensive fixed-input workload or a numerical calculation with a known answer, and record its result alongside CUDA and kernel error logs. If checking model answers, use temperature 0 and the same prompt and settings. Also watch for errors or interruptions during extended jobs.</p><p>If errors persist, review the recorded driver and kernel combination and its logs. If removal is needed, follow the repository's removal procedure. Recheck with the model, context, and concurrent work you plan to use in production to assess whether the patch fits your workload.</p><ul><li><a href="https://github.com/amoghmunikote/cmpunlocker/pull/56">v0.5 ECC patch details and record</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open workstation, with a fan and an unmarked meter beside it." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After checking installation status, assess extended memory workloads and real model responses separately.</figcaption></figure><aside><h2>See the Linux memory-unlock procedure</h2><p>Review supported conditions and installation or rollback steps before checking the CMP 170HX setup.</p><a href="https://localai.co.kr/en/guides/cmp170hx-linux-unlock-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ECC detects and corrects some data errors in GPU memory. cmpunlocker v0.5 added a patch to enable ECC for DRAM and SRAM on the CMP 170HX.</dd></div><div><dt>How much memory does it need?</dt><dd>In the maintainer's published test with driver 615.71.09, ECC_CTRL was 0x41, memory register MR4 was 0x33, the readout was 0x00010233, and nvidia-smi showed ECC Enabled. The configuration also retained 64GB of memory. This record demonstrates the v0.5 path, but does not guarantee the same result for other driver, card, or kernel combinations.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How Can You Run Qwen3.8-27B Fastest on a CMP 170HX?</title><link>https://localai.co.kr/en/guides/cmp170hx-qwen38-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-qwen38-serving-guide</guid><description>Compare measured vLLM DFlash2 and open-jet megakernel results on one CMP 170HX, with pinned Qwen3.8-27B serving references and tested context limits.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">How Can You Run Qwen3.8-27B Fastest on a CMP 170HX?</h1><p>In the measured single-card setup, vLLM DFlash2 had the higher decode mean on a 3.2K-token prompt.</p><p id="guide-page-summary">Running Qwen3.8-27B on a CMP 170HX means loading GGUF Q4_K_M or W4A16 AutoRound weights in a serving engine and returning answers to text requests. In an individual approximately 3.2K-token request from the October 10 single-card measurement, vLLM DFlash2 reached 109.42 tok/s and open-jet MTP d=4 reached 77.20 tok/s. Separately, the greedy mean across five prompts was 181.8 and 94.1 tok/s, respectively.</p><p>For fast generation with short inputs, start by examining the vLLM DFlash2 setup. For longer documents, open-jet has a published completed run with 18,976 input tokens. Below we compare generation speed, time to the first answer, and how to reproduce the setups.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>At 180W on one card, vLLM DFlash2 averaged 181.8 tok/s greedy, versus 94.1 tok/s for open-jet MTP d=4.</li><li>The runs used different Q4_K_M GGUF and W4A16 AutoRound checkpoints, so the difference cannot be attributed to the engine alone.</li><li>The pinned recipe currently has a fresh-environment install error, so review the reproduction notebook's fix record as well.</li></ol></section><section><h2>Read Decode and Prefill Results Separately</h2><p>Prefill covers processing the input up to the first token; decode is the speed at which the answer continues after that token. In the October 10 comparison at 180W, vLLM DFlash2 k=7 averaged 181.8 tok/s across five greedy prompts, versus 94.1 tok/s for open-jet megakernel MTP d=4. The four-prompt mean with thinking enabled was also higher for vLLM: 156.3 versus 75.6 tok/s.</p><table><caption>October 10, 2026 results on one CMP 170HX</caption><thead><tr><th scope="col">Workload and input</th><th scope="col">vLLM DFlash2 k=7</th><th scope="col">open-jet MTP d=4</th></tr></thead><tbody><tr><th scope="row">Single chat · 3,163 / 3,158 input tokens</th><td>109.42 tok/s · TTFT 1.6515 s · 58/128 output tokens</td><td>77.20 tok/s · TTFT 2.0662 s · without MTP: 48.74 tok/s</td></tr><tr><th scope="row">Greedy mean · 5 prompts</th><td>181.8 tok/s</td><td>94.1 tok/s</td></tr><tr><th scope="row">Thinking mean · 4 prompts</th><td>156.3 tok/s</td><td>75.6 tok/s</td></tr></tbody></table><p>This comparison served one request at a time on a CMP with 64GiB, 74 SMs, HBM at 1,728MHz, and PCIe Gen2 x16, capped at 180W with forced airflow. vLLM 0.27.1 used stock guest driver 580.178.04 and host unlock commit 88e39ce; open-jet used published commit 93c2b9a.</p><ul><li><a href="https://github.com/PixelML/club-170hx/tree/main/results/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card">Benchmark results and conditions</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single CMP 170HX card, a magnifier, and a notebook sit on a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Read a speed result together with card count, power limit, and input length.</figcaption></figure><section><h2>Keeping the Server Running or Starting It Again</h2><p>Both runs used 4-bit Qwen3.8-27B weights, but the files differed. open-jet used Qwen3.8-27B-Q4_K_M.gguf from a pinned revision; vLLM used a W4A16 AutoRound model with a DFlash2 drafter. Quantization format and checkpoint can affect output and speed, so the table compares these two specific setups.</p><p>The vLLM server became ready after 427 seconds, including CUDA graph capture and DFlash2 setup, while open-jet started in seconds. If a server starts once per day and stays running, startup is a one-time daily cost; during development with frequent restarts, that wait can recur. Once a server stays online, decode speed is the more direct per-request comparison.</p><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/notebooks/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card.ipynb">See the measurement notebook and pinned versions</a></li></ul></section><section><h2>For Reproduction, Follow the Published vLLM Recipe Pins</h2><p>The measured setup used vLLM 0.27.1. Start from commit 69ba4d0688c6ae76cb9d3c4a5c3b36445e1b040c and requirements.lock in the linked syv.ai recipe. The server used SPEC=dflash2, CTX=fast, MAX_SEQS=1, DFLASH_TOKENS=7, GPU_UTIL=0.90, and BF16 KV cache. Context was configured to 65,536; reproduce.ipynb and recipe.json describe model files and execution steps.</p><p>Check the CUDA compiler installation path when reproducing this in a fresh environment. In the published notebook, nvidia-cuda-nvcc 13.4.92 was installed under nvidia/cu13/, causing import nvidia.cuda_nvcc to fail. The notebook appendix records the researcher's path fix.</p><p>To try open-jet, check out the measured commit and build for GA100. Run the commands below after preparing CUDA 12.8.93 and the repository's dependencies. Follow the linked reproduction notebook for model downloads and server startup.</p><div><p><strong>Build the pinned open-jet source for the CMP architecture</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/L-Forster/open-jet.git
cd open-jet
git checkout 93c2b9abee50ea2ea41981c406cfd201989e4d58
make ARCH=sm_80</code></pre><p><small>This is the build command used with PixelML's published measurement commit and CUDA 12.8.93. Run it from that repository at the pinned commit.</small></p></div><ul><li><a href="https://github.com/syv-ai/qwen38-27b-rtx3090/tree/69ba4d0688c6ae76cb9d3c4a5c3b36445e1b040c/recipes/qwen3.8-27b-dflash2">syv.ai's pinned Qwen3.8-27B DFlash2 recipe</a></li><li><a href="https://github.com/PixelML/club-170hx/blob/main/notebooks/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card.ipynb">PixelML reproduction notebook</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A blank window is open on a monitor beside a workstation with a graphics card installed." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When following the vLLM recipe, pin the runtime version and model files first.</figcaption></figure><section><h2>Reassess the Result at Your Own Context Length</h2><p>If you want the highest decode speed on short prompts, vLLM DFlash2 is the leading starting point in the published single-card setup. If server restart time matters more or you need a path with a short startup, open-jet's quick start may also matter. Because the 180W open-jet and vLLM runs used different checkpoint formats, compare them with the same prompts and response settings before deciding.</p><p>Results differed by request type when inputs were increased. vLLM completed a 6,603-token /v1/completions task, but exited with Xid 31 on a 9,472-token chat request. open-jet completed inputs up to 18,976 tokens. For long-document work, use these completed runs to choose an engine, then test with your own documents.</p><p>Before deciding, fix the prompt and answer lengths that are common in your work. Record whether the engine completes each request, time to first token, generation speed, and completion status separately. If you need longer inputs, increase context step by step with the engine and checkpoint you use rather than jumping to the configured maximum; mark any length that fails as outside the validated range.</p><ul><li><a href="https://github.com/PixelML/club-170hx/tree/main/results/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card">Per-request results and failure record</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open workstation, with a fan and an unmarked meter beside it." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>To apply a measurement to your workload, compare input length and completion status on the same basis.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Explore Qwen3.8-27B speed estimates</h2><p>Explore estimated speed ranges for a CMP 170HX and Qwen3.8-27B at the selected 4K context.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Running Qwen3.8-27B on a CMP 170HX means loading GGUF Q4_K_M or W4A16 AutoRound weights in a serving engine and returning answers to text requests. In an individual approximately 3.2K-token request from the October 10 single-card measurement, vLLM DFlash2 reached 109.42 tok/s and open-jet MTP d=4 reached 77.20 tok/s. Separately, the greedy mean across five prompts was 181.8 and 94.1 tok/s, respectively.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How Much Long-Context Text Fits on a 64GB CMP 170HX?</title><link>https://localai.co.kr/en/guides/cmp170hx-long-context-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-long-context-guide</guid><description>Separate 64GB memory capacity from usable context length, with the conditions behind open-jet's 18,976-token run and vLLM's 9,472-token failure in October 2026 measurements.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">How Much Long-Context Text Fits on a 64GB CMP 170HX?</h1><p>A measured 18,976-token run exists, but 64GB alone does not determine your usable context length.</p><p id="guide-page-summary">After loading the model into 64GB of memory, KV cache uses part of the remaining space to retain document and conversation context. The input length a CMP 170HX can handle depends on the engine and model setup. In the published Qwen3.8-27B test, open-jet completed an 18,976-token input, taking about 13.55 seconds to the first token.</p><p>For long documents, time to the first answer matters alongside generation speed. Compare completion status and waiting time in the input-length table below, then check with documents you normally use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>64GB is memory capacity; the tokens that fit in one request must be checked with the engine and model settings.</li><li>open-jet completed an 18,976-token input; vLLM stopped with Xid 31 at 9,472 tokens.</li><li>A 65,536 context setting does not mean that context length was validated.</li></ol></section><section><h2>Memory Capacity and Context Length Are Different Numbers</h2><p>Model weights reside in GPU memory, and processing longer inputs also grows the KV cache that stores attention state for tokens. The prompt and answer share the configured context, so asking for a long answer leaves less room for input. The physical capacity of 64GB is one part of this memory budget; it is not the same as the maximum token count supported by an engine.</p><p>Document page count also cannot be converted directly into token count. The amount the model receives changes with charts, text density, and whether the PDF app sends the full document or only retrieved passages. Token counts in a recipe or measurement table describe the actual input length; they are not a page-count estimate.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/turbovec-vector-index-memory-guide">turbovec: shrink the RAM a RAG index needs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single CMP 170HX card, a magnifier, and a notebook sit on a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>64GB is the card's memory capacity; verify actual request lengths on each engine.</figcaption></figure><section><h2>Separate the Engine That Processed 18,976 Tokens from the One That Failed</h2><p>open-jet completed inputs of 3,158, 9,472, and 18,976 tokens. vLLM completed the 3,163-token chat request, but exited with an error on the 9,472-token chat request. Start by finding your intended input length and engine in the table.</p><table><caption>Recorded input-length results on one CMP 170HX</caption><thead><tr><th scope="col">Engine and mode</th><th scope="col">Input tokens</th><th scope="col">Recorded result</th><th scope="col">TTFT</th></tr></thead><tbody><tr><th scope="row">open-jet MTP d=4</th><td>3,158</td><td>Completed</td><td>2.066 s</td></tr><tr><th scope="row">open-jet MTP d=4</th><td>9,472</td><td>Completed</td><td>6.358 s</td></tr><tr><th scope="row">open-jet MTP d=4</th><td>18,976</td><td>Completed</td><td>13.550 s</td></tr><tr><th scope="row">vLLM DFlash2 k=7</th><td>3,163</td><td>Completed</td><td>1.651 s</td></tr><tr><th scope="row">vLLM DFlash2 k=7</th><td>9,472</td><td>Engine exited with Xid 31</td><td>Not measured</td></tr><tr><th scope="row">vLLM DFlash2 k=7</th><td>65,536</td><td>Configured value; no input test</td><td>Not measured</td></tr></tbody></table><ul><li><a href="https://github.com/PixelML/club-170hx/tree/main/results/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card">Measurement records and failure logs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A blank window is open on a monitor beside a workstation with a graphics card installed." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even at the same length, completion and first-token time can vary by engine.</figcaption></figure><section><h2>Test in Steps Under Consistent Conditions Before Loading a Long Document</h2><p>First choose the model file and serving engine, then fix the instructions and conversation history that your real task will send. Check a short input, then increase the content and confirm whether each request completes. Record input token count, TTFT, generation speed, and completion or error status separately at each length to see what changes as the document grows.</p><p>The open-jet measurement increased input length from 3,158 to 9,472 to 18,976 tokens on the same GPU setup. MTP d=4 TTFT rose from 2.066 to 6.358 to 13.550 seconds, while decode means were about 77.20, 76.74, and 75.39 tok/s. These are records from one device and engine; recheck with your own documents and answer length rather than applying them directly to another card or model quantization.</p><p>If the engine stops as input length increases, do not call the context setting the maximum supported length. Record the token count and error, then retest at a shorter input. Splitting the document or retrieving relevant passages are also options, but they change the context sent to the model and should be distinguished from processing the entire document in one request.</p></section><section><h2>Send relevant passages first when a document is too large.</h2><p>vLLM also completed a 6,603-token input through /v1/completions. This used a different API and input from the chat requests in the table. Prepare documents around the length completed with your intended request type, rather than the server's configured limit of 65,536.</p><p>If the whole document is too large for one request, summarize it by chapter or section, then combine the summaries. For targeted questions, RAG can retrieve and send only relevant passages. Choose whether to send the whole document or selected parts based on the task.</p><ul><li><a href="https://github.com/PixelML/club-170hx/blob/main/notebooks/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card.ipynb">Notebook with input lengths and reproduction conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two GPU cards are installed in an open workstation, with a fan and an unmarked meter beside it." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When increasing input length, record both the longest completed request and any failure length.</figcaption></figure><aside><h2>View Qwen3.8-27B speed by context</h2><p>Explore a 4K input estimate, then increase real document tests in steps.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>After loading the model into 64GB of memory, KV cache uses part of the remaining space to retain document and conversation context. The input length a CMP 170HX can handle depends on the engine and model setup. In the published Qwen3.8-27B test, open-jet completed an 18,976-token input, taking about 13.55 seconds to the first token.</dd></div><div><dt>How much memory does it need?</dt><dd>Model weights reside in GPU memory, and processing longer inputs also grows the KV cache that stores attention state for tokens. The prompt and answer share the configured context, so asking for a long answer leaves less room for input. The physical capacity of 64GB is one part of this memory budget; it is not the same as the maximum token count supported by an engine.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can You Lower CMP 170HX Power Without Losing Speed?</title><link>https://localai.co.kr/en/guides/cmp170hx-power-cooling-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-power-cooling-guide</guid><description>Compare measured GLM throughput and power draw at different CMP 170HX power limits. Learn the Linux commands to adjust the cap, check memory temperature, and restore the original setting.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Can You Lower CMP 170HX Power Without Losing Speed?</h1><p>Adjust the power limit one step at a time while watching real requests and temperature.</p><p id="guide-page-summary">If you plan to keep a CMP 170HX running for long sessions, try tuning its power limit. A lower cap can reduce heat and electricity use. In the four-card GLM test below, lowering the per-card cap from 165 W to 140 W reduced single-user throughput by about 1.4% and the four GPUs' combined power draw by 113 W.</p><p>Before changing the limit, record the supported range and original setting. Keep adequate fan airflow and compare speed, temperature, and power with the same requests to find a suitable cap for your setup.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A power limit caps GPU power, so lowering it can change both power use and throughput.</li><li>In the four-card GLM test, 165 W→140 W changed single-user speed from 418.6→412.7 tok/s and four-GPU power from 650→537 W.</li><li>Record the supported range and current limit before testing, then restore the original value afterward.</li></ol></section><section><h2>A power limit caps GPU power</h2><p>A power limit sets the maximum power the GPU may draw. Lowering it keeps the GPU within a smaller power budget; when a workload reaches the cap, clock speed or throughput may fall. Power use varies with the model, input length, and request count, so compare using the requests you expect to run.</p><p>GPU-reported power and whole-system power measured at the wall cover different boundaries. The four-GPU figure below is the sum for four cards; it excludes CPU, memory, fans, and power-supply losses.</p><ul><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-multi-gpu-guide">Will Two CMP 170HX Cards Double the Speed?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-local-llm-guide">Can a CMP 170HX mining card run a 64GB local LLM?</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-buying-checklist-guide">What should you check before buying a CMP 170HX?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single CMP 170HX card on a workbench with a magnifier beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate GPU-reported values from the point where you measure system power.</figcaption></figure><section><h2>Compare power and throughput in the four-card GLM test</h2><p>The public GLM-5.3-Flash test used four CMP 170HX cards at Tensor Parallel 4 and varied the per-card power limit. The single-user column is output speed for one structured request; the eight-user column is aggregate throughput across eight requests. The table separates solo speed, concurrent throughput, and the four-GPU power sum.</p><table><caption>GLM-5.3-Flash TP4 · Per-card limit, throughput, and four-GPU power</caption><thead><tr><th scope="col">Per-card limit</th><th scope="col">Single user</th><th scope="col">8-user aggregate</th><th scope="col">Four-GPU sum</th></tr></thead><tbody><tr><th scope="row">165 W</th><td>418.6 tok/s</td><td>822.4 tok/s</td><td>650 W</td></tr><tr><th scope="row">150 W</th><td>418.0 tok/s</td><td>816.5 tok/s</td><td>582 W</td></tr><tr><th scope="row">140 W</th><td>412.7 tok/s</td><td>814.2 tok/s</td><td>537 W</td></tr><tr><th scope="row">130 W</th><td>394.9 tok/s</td><td>785.9 tok/s</td><td>517 W</td></tr><tr><th scope="row">120 W</th><td>374.4 tok/s</td><td>756.5 tok/s</td><td>476 W</td></tr><tr><th scope="row">110 W</th><td>340.1 tok/s</td><td>706.8 tok/s</td><td>436 W</td></tr><tr><th scope="row">100 W</th><td>291.9 tok/s</td><td>627.4 tok/s</td><td>398 W</td></tr></tbody></table><p>Conditions: GLM-5.3-Flash TP4 on four CMP 170HX cards, all at 1,728 MHz HBM, with limits applied live. GPU power is the four-card sum, not wall power. [PixelML source record](https://github.com/PixelML/club-170hx/blob/5267e485f7396ca00a408654dba2df5048d004d7/docs/CMP170HX-UNDERSTANDING.md)</p><p>Reducing the per-card cap from 165 W to 140 W lowered the four-GPU sum from 650 W to 537 W, a 113 W reduction. Single-user speed fell about 1.4%, from 418.6 to 412.7 tok/s; aggregate throughput for eight users fell about 1%, from 822.4 to 814.2 tok/s. Both workloads stayed close in this four-card GLM setup, but solo and eight-user results cannot be substituted for one another.</p></section><section><h2>The 180 W Qwen run and 250 W stop are separate conditions</h2><p>A separate one-card Qwen3.8-27B test completed at 180 W on a 64 GiB CMP 170HX with 74 SMs, 1728 MHz HBM, PCIe Gen2 x16, and forced airflow. The researcher began a 250 W run but stopped within a minute when memory temperature reached 80°C. Thus 180 W was the completed test condition, and 80°C was the stop point in the 250 W run. It is not a universal manufacturer maximum.</p><p>This result differs from the four-card GLM table in model, card count, workload, and cooling, so the two cannot be compared directly. The researcher recorded them in separate public run reports. [Qwen one-card test conditions and logs](https://github.com/PixelML/club-170hx/blob/5267e485f7396ca00a408654dba2df5048d004d7/results/2026-10-10-qwen3.8-27b-megakernel-vs-dflash2-1card/README.md)</p></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A CMP 170HX card beside a monitor with a blank window and note-taking tools" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record the original limit and supported range first.</figcaption></figure><section><h2>Record the current value, then change one step at a time</h2><p>On Linux, run nvidia-smi -q -d POWER,TEMPERATURE,CLOCK and save the output. First record each card’s current limit, supported minimum and maximum, temperature, and clocks. Do not apply an arbitrary -pl value before checking the range reported by the card. The CMP 170HX has a passive heatsink, so also confirm that strong forced airflow is working.</p><p>Use the example only if 180 W is within card 0’s supported range. The command changes card 0 only. Repeat the same request after applying it and record TTFT, output tok/s, power, and memory temperature. Stop the workload if temperature keeps rising or an error appears.</p><p>To restore card 0’s original limit, replace OLD_LIMIT_W with the number you recorded and run the restore command. For example, if your note says 165 W, replace the placeholder with 165. After saving the test results, read the setting again and confirm it matches the recorded value.</p><div><p><strong>Read current status</strong></p><pre><code data-guide-code-block="3-0">nvidia-smi -q -d POWER,TEMPERATURE,CLOCK</code></pre><p><small>Record the current value and the range supported by the card.</small></p></div><div><p><strong>Change card 0 after checking its supported range</strong></p><pre><code data-guide-code-block="3-1">sudo nvidia-smi -i 0 -pl 180</code></pre><p><small>Use only when 180 W is within card 0’s supported range.</small></p></div><div><p><strong>Restore the recorded original value</strong></p><pre><code data-guide-code-block="3-2">sudo nvidia-smi -i 0 -pl OLD_LIMIT_W</code></pre><p><small>Replace OLD_LIMIT_W with card 0’s actual watt value recorded before testing.</small></p></div></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two installed CMP 170HX cards near a forced-air fan and an unmarked meter" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Direct strong airflow across the passive heatsinks and check temperatures.</figcaption></figure><section><h2>Convert GPU power differences into energy use</h2><p>If the power difference is 100 W at the same measurement point and the system runs 8 hours a day for 30 days, the calculation is 100÷1000×8×30=24 kWh. This is an arithmetic example, not a CMP 170HX wall-power measurement. Do not treat a GPU reading as if it covered the whole system.</p><p>To estimate electricity cost, measure whole-system power at the wall and enter actual operating hours and your tariff in the site’s electricity tool. Use only a limit that meets your normal speed and temperature requirements.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>View Qwen speed conditions for CMP 170HX</h2><p>Compare estimated prefill and decode ranges for the selected model and context.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>If you plan to keep a CMP 170HX running for long sessions, try tuning its power limit. A lower cap can reduce heat and electricity use. In the four-card GLM test below, lowering the per-card cap from 165 W to 140 W reduced single-user throughput by about 1.4% and the four GPUs' combined power draw by 113 W.</dd></div><div><dt>When is it better not to choose this?</dt><dd>On Linux, run nvidia-smi -q -d POWER,TEMPERATURE,CLOCK and save the output. First record each card’s current limit, supported minimum and maximum, temperature, and clocks. Do not apply an arbitrary -pl value before checking the range reported by the card. The CMP 170HX has a passive heatsink, so also confirm that strong forced airflow is working.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Will Two CMP 170HX Cards Double the Speed?</title><link>https://localai.co.kr/en/guides/cmp170hx-multi-gpu-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cmp170hx-multi-gpu-guide</guid><description>Learn how model splitting, PCIe paths, and P2P affect two CMP 170HX cards, and what the public Qwen TP2 result does and does not show.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Will Two CMP 170HX Cards Double the Speed?</h1><p>Two cards can split a model, but their connection path changes performance.</p><p id="guide-page-summary">Multi-GPU model parallelism splits a model’s weights and computation across GPUs, then passes intermediate results between cards while processing a request. The split GPUs work together to compute the next tokens and return an answer.</p><p>Splitting across two cards may let you run a model that does not fit on one card, and it can sometimes speed up a single request. Communication between cards means speed does not automatically double. First inspect how the cards are connected, then measure solo response speed separately from aggregate throughput across multiple requests.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>TP divides computation within layers; PP divides layer ranges. Both require inter-GPU communication.</li><li>Qwen3.8-27B TP2 reached 54→72 tok/s for one request, but aggregate throughput at 16 concurrent streams was below TP1’s 546 tok/s.</li><li>P2P experiments are an advanced path separate from the basic unlock install; topology, driver, and BAR1 conditions need separate review.</li></ol></section><section><h2>Splitting a model across GPUs also requires communication</h2><p>Tensor Parallel (TP) divides computation within a layer across GPUs and exchanges intermediate results. Pipeline Parallel (PP) assigns ranges of model layers to GPUs and passes outputs from one card to the next. Even if the combined memory can hold the model, the runtime must support the split and communication between GPUs must work well.</p><p>Memory unlocking increases the memory available on a card. It does not turn on GPU peer-to-peer (P2P). If P2P is unavailable, communication may pass through host memory, and the CMP 170HX has no usable NVLink bridge circuitry.</p><ul><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-power-cooling-guide">Can You Lower CMP 170HX Power Without Losing Speed?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-buying-checklist-guide">What should you check before buying a CMP 170HX?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single CMP 170HX card on a workbench with a magnifier beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting a model across two cards still requires a path for inter-GPU data.</figcaption></figure><section><h2>Check the route between GPUs in the PCIe topology</h2><p>On Linux, nvidia-smi topo -m shows GPU and CPU connections in a matrix. Check the GPU indices and PCIe path between cards, then use nvidia-smi -q -d PCI to read each card’s current link state. Two cards in one server can still use different data routes depending on CPU and PCIe-switch placement.</p><p>CMP 170HX was tested at PCIe Gen2; Gen3 was fuse-blocked on all four cards examined. An x16 connector does not guarantee the negotiated link width or speed, which depend on the card, riser, slot, and host configuration. Save the output, and if it differs from your expected route, check slot placement and BIOS settings before the runtime.</p><div><p><strong>Inspect the GPU connection matrix</strong></p><pre><code data-guide-code-block="1-0">nvidia-smi topo -m</code></pre><p><small>Read inter-GPU paths alongside CPU and NUMA placement.</small></p></div><div><p><strong>Inspect PCIe link state</strong></p><pre><code data-guide-code-block="1-1">nvidia-smi -q -d PCI</code></pre><p><small>Inspect the current PCIe link information for each GPU.</small></p></div></section><figure><img src="https://localai.co.kr/guides/cmp170hx-linux-workstation.webp" alt="A CMP 170HX card beside a monitor with a blank window and note-taking tools" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect the inter-GPU PCIe path in the topology command output.</figcaption></figure><section><h2>The Qwen TP2 speed increase is one specific comparison</h2><p>The table compares one-card TP1 and two-card TP2 output speed and concurrent throughput. Single-request decode shows how quickly one answer continues; aggregate throughput shows how much work multiple requests complete in the same period.</p><table><caption>Qwen3.8-27B TP1 and TP2 · One request and 16 concurrent streams</caption><thead><tr><th scope="col">Setup</th><th scope="col">Single-request decode</th><th scope="col">Aggregate at 16 concurrent streams</th></tr></thead><tbody><tr><th scope="row">TP1 · 1 GPU</th><td>53.97 tok/s</td><td>545.78 tok/s</td></tr><tr><th scope="row">TP2 · 2 GPU</th><td>71.96 / 71.88 tok/s</td><td>529.70 / 534.74 tok/s</td></tr></tbody></table><p>In its 2026-10-01 test, PixelML compared TP1 and TP2 using a Qwen3.8-27B W4A16 checkpoint, vLLM, two 64 GB CMP 170HX cards, PCIe Gen2 x16, a 180 W limit per card, and P2P disabled.</p><p>The single request was a short greedy 256-token decode; the concurrent load used 16 streams. The two TP2 figures are ordered same PLX switch / separate PLX switches. [Original notebook and run receipts](https://github.com/PixelML/club-170hx/blob/5267e485f7396ca00a408654dba2df5048d004d7/notebooks/2026-10-01-qwen3.8-27b-w4a16-2card-tp2-vllm.ipynb)</p><p>Single-request speed and concurrent throughput answer different questions. If your goal is to finish one response quickly, record first-token wait and output tok/s. For a server serving multiple users, measure concurrent requests and aggregate tok/s. This test found little difference between placing the cards on the same or different PLX switches, but inspect your own topology and compare under the same conditions.</p></section><section><h2>P2P is an advanced configuration beyond the basic install</h2><p>For a 256MiB transfer without P2P, host-memory staging measured 6.21–6.30GB/s. A separate advanced experiment configured P2P with four BAR1 static-mapping patches, a manual placement layout, and a kexec reboot path. All 12 pairs passed byte-level validation, with a transfer rate of 5.79GB/s.</p><p>With Qwen TP2, P2P made decode 11% faster, or 14% faster with MTP k=3. In contrast, on the Broadwell PLX path with GLM TP4, single-user decode was 20–26% slower and aggregate throughput for eight users was 38–48% slower.</p><p>In Morrowmake's measurement on an EPYC root-port configuration, P2P was 11% faster. Results vary by CPU, switch, and P2P path, so they should not be generalized as one figure.</p><p>This configuration statically places the BAR1 address space and restarts through kexec so the kernel adopts that layout. It requires closer matching of the driver, board, and PCIe placement than the basic install. First verify ordinary TP2 and inspect the topology; for a specialized experiment, follow the layout and data-integrity validation across all 12 GPU pairs in [PixelML’s BAR1 P2P notebook](https://github.com/PixelML/club-170hx/blob/5267e485f7396ca00a408654dba2df5048d004d7/notebooks/2026-10-01-cmp170hx-4card-bar1-p2p-plx-cuda.ipynb).</p></section><section><h2>Consider a second card when capacity or throughput is the constraint</h2><p>If a model does not fit on one card, TP or PP may distribute its memory needs. If aggregate throughput is the goal, compare splitting one model with replicating it across GPUs and distributing requests, using the approach your runtime supports. First-token and completion times may matter most for the split model, while concurrent throughput may matter more for replicas.</p><p>If one card runs the model at the response speed you need, there may be little reason to add a second. Establish a baseline with the same workload, then vary topology, model-splitting options, and request count one at a time. When memory capacity or concurrent throughput is demonstrably insufficient, compare two-card configurations including the board’s PCIe paths to see what the extra card solves.</p></section><figure><img src="https://localai.co.kr/guides/cmp170hx-cooling-multigpu.webp" alt="Two installed CMP 170HX cards near a forced-air fan and an unmarked meter" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Both heatsinks need airflow and space between the card slots.</figcaption></figure><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>View Qwen speed conditions for CMP 170HX</h2><p>Compare estimated prefill and decode ranges for the selected model and context.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-cmp-170hx-64gb-unlocked&amp;model=qwen-3.8-27b&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Multi-GPU model parallelism splits a model’s weights and computation across GPUs, then passes intermediate results between cards while processing a request. The split GPUs work together to compute the next tokens and return an answer.</dd></div><div><dt>How much memory does it need?</dt><dd>Memory unlocking increases the memory available on a card. It does not turn on GPU peer-to-peer (P2P). If P2P is unavailable, communication may pass through host memory, and the CMP 170HX has no usable NVLink bridge circuitry.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GPU power limits for local AI: RTX 3090, 4090, 5090 and DGX Spark</title><link>https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide</guid><description>Compare published RTX 3090, 4090 and 5090 power sweeps, Windows and Linux controls, RTX PRO 6000, DGX Spark and Mac options, multi-GPU energy and cooling costs.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">GPU power limits for local AI: RTX 3090, 4090, 5090 and DGX Spark</h1><p>Keep your memory capacity while finding a lower-power setting.</p><p id="guide-page-summary">A power limit sets the maximum power a graphics card may use—for example, running an RTX 3090 at 300W instead of 350W. It preserves the VRAM available to your model while reducing power and heat. The trade-off can be slower responses, so compare how much longer your usual work takes.</p><p>300W is not a universal answer. Published 3090 and 5090 sweeps favored different limits, and MTP made the same 5090 more sensitive to a lower cap. DGX Spark and Mac use different controls altogether. Choose the method for your hardware first, then test it with a record of the original settings.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Published RTX 3090 sweep: about 95% of the 350W decode speed at 300W.</li><li>The same RTX 5090 power cap has a different speed cost with and without MTP.</li><li>For Spark, start with its power supply, updates and supported clock controls; for Mac, start with Low Power Mode.</li></ol></section><section><h2>Why a lower cap can leave response speed nearly unchanged</h2><p>Prefill processes many calculations together as the model reads your input. Decode repeatedly reads model data and produces the next token. If memory traffic limits decode, a modest reduction in compute clock may have little effect on its overall speed.</p><p>MTP adds calculations that verify several candidate tokens. That can make the same model more sensitive to a power cap. After lowering the limit, test both a short question and a long-document summary. Record time to the first response separately from time to completion to see which work slowed down.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Understand prefill and decode</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai">New RTX 5060 Ti 16GB or used RTX 3090 24GB for local AI?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li></ul></section><section><h2>RTX 3090: most decode speed remained at 300W</h2><p>In this published Qwen3.8 27B test, the power cap changed on the same RTX 3090. Reducing it from 350W to 300W cut decode speed by about 5% and measured GPU power by about 14%. At 275W, speed fell about 10% and power about 21%. At 250W, the speed loss grew to about 26%.</p><p>In this configuration, 300W offered a compromise between response speed and power savings, while 275W had the best tokens-per-second-per-watt ratio. Prepare your model and document, compare 300W first, and try 275W if the added wait is acceptable.</p><table><caption>RTX 3090 · Qwen3.8 27B · MTP n-max 3</caption><thead><tr><th scope="col">Power limit</th><th scope="col">Generation</th><th scope="col">Measured GPU power</th></tr></thead><tbody><tr><th scope="row">350W</th><td>68.9 tok/s</td><td>347.7W</td></tr><tr><th scope="row">300W</th><td>65.3 tok/s</td><td>298.7W</td></tr><tr><th scope="row">275W</th><td>62.3 tok/s</td><td>274.0W</td></tr><tr><th scope="row">250W</th><td>51.0 tok/s</td><td>249.5W</td></tr></tbody></table><div><p><strong>Measurement conditions</strong></p><pre><code data-guide-code-block="1-0">RTX 3090 · Qwen3.8-27B UD-Q4_K_XL Dynamic 3.0
llama.cpp b10829 · CUDA 13.3 · NVIDIA 610.43.03
131,072 context capacity · Q4_0 KV · MTP n-max 3
thinking off · parallel 1 · median of 3 complete passes</code></pre><p><small>Power is the median during GPU utilization of at least 90%. The context value is configured capacity; measure whole-PC power separately.</small></p></div><ul><li><a href="https://github.com/sudoingX/qwen38-mtp/blob/master/sweeps/rtx-3090.md#rtx-3090-dynamic-30-power-limit-sweep-275w-is-the-efficiency-peak">RTX 3090 measurement and settings</a></li></ul></section><figure><img src="https://localai.co.kr/guides/gpu-power-limit-3090-compare.webp" alt="RTX 3090 decode at 68.9, 65.3, 62.3 and 51.0 tok/s, with GPU power at 347.7, 298.7, 274.0 and 249.5W across caps" width="720" height="1140" loading="lazy" decoding="async"><figcaption>The RTX 3090 retained about 95% of its decode speed at 300W.</figcaption></figure><section><h2>RTX 5090: recheck the trade-off when MTP is enabled</h2><p>In a published RTX 5090 Qwen3.8 27B sweep, decode without MTP was nearly unchanged when the cap fell from 600W to 500W. With MTP n-max 4, it dropped from 162.1 to 153.6 tok/s, about 5%. Settings that add more compute can therefore incur a larger wait on the same card.</p><p>At 400W, speed fell about 5% without MTP and about 18% with it. A lower limit favors energy savings; start near 500W if avoiding a large latency increase matters more. The tested ASUS TUF 5090 had a 600W default. Check your own card’s default and allowed range first.</p><table><caption>Same RTX 5090 · Qwen3.8 27B · with and without MTP</caption><thead><tr><th scope="col">Power limit</th><th scope="col">MTP off</th><th scope="col">MTP n-max 4</th></tr></thead><tbody><tr><th scope="row">600W</th><td>74.8 tok/s</td><td>162.1 tok/s</td></tr><tr><th scope="row">550W</th><td>74.8 tok/s</td><td>158.8 tok/s</td></tr><tr><th scope="row">500W</th><td>74.5 tok/s</td><td>153.6 tok/s</td></tr><tr><th scope="row">450W</th><td>73.5 tok/s</td><td>142.7 tok/s</td></tr><tr><th scope="row">400W</th><td>71.2 tok/s</td><td>132.8 tok/s</td></tr></tbody></table><div><p><strong>Measurement conditions</strong></p><pre><code data-guide-code-block="2-0">ASUS TUF RTX 5090 32GB · Unsloth UD-Q4_K_XL
llama.cpp b10451 (10bf611e5) · Arch Linux 7.1.8 / CUDA
131K context capacity · q4_0 KV · parallel 1
thinking off · max output 400 · mean of 27 runs per cell</code></pre><p><small>The table shows mean decode speed. The source reports power using p95 samples collected at 1-second intervals.</small></p></div><ul><li><a href="https://github.com/sudoingX/qwen38-mtp/blob/master/sweeps/rtx-5090.md#rtx-5090-32gb-the-power-cap-taxes-the-flag-not-the-baseline-400-600-w">RTX 5090 power sweep</a></li></ul></section><figure><img src="https://localai.co.kr/guides/gpu-power-limit-5090-compare.webp" alt="RTX 5090 decode with MTP off and n-max 4 across 600, 550, 500, 450 and 400W caps" width="720" height="1140" loading="lazy" decoding="async"><figcaption>The same RTX 5090 became more sensitive to its power cap with MTP enabled.</figcaption></figure><section><h2>Where to start with RTX 4090, 5060 Ti and RTX PRO 6000</h2><p>A separate RTX 4090 test using Qwen3.6 27B Q3_K_XL reported single-request decode at 51.96 tok/s at 450W, 50.16 at 300W, and 48.26 at 260W. This workload retained about 97% of its speed at 300W. Its model, file and test differ from the 3090 and 5090 tables, so use it to compare caps within this 4090 test.</p><p>Other GeForce cards, including the RTX 5060 Ti, can use the same testing procedure when their controls support it. Start roughly 10% below the default and compare first-response and completion times. If insufficient VRAM has pushed part of the model to the CPU, inspect model placement first; a power cap does not add memory.</p><p>Identify the RTX PRO 6000 Blackwell edition first: Workstation Edition is rated at 600W, Max-Q at 300W, and Server Edition at 400–600W. Do not treat all editions as one 600W card. Lower the queried default within its Min/Max range and test long inputs and concurrent requests too. Keep the system-provided cooling required by server cards.</p><ul><li><a href="https://github.com/noonghunna/club-3090/blob/master/docs/HARDWARE.md#single-card-efficiency-curves-10w-resolution">RTX 4090 power comparison</a></li><li><a href="https://www.nvidia.com/en-sg/products/workstations/professional-desktop-gpus/rtx-pro-6000-family/">RTX PRO 6000 edition specifications</a></li></ul></section><figure><img src="https://localai.co.kr/guides/gpu-power-limit-4090-compare.webp" alt="RTX 4090 decode speeds of 51.96, 50.16 and 48.26 tok/s at 450, 300 and 260W power caps" width="720" height="660" loading="lazy" decoding="async"><figcaption>This RTX 4090 workload retained about 97% of its decode speed at 300W.</figcaption></figure><section><h2>Windows: record the original value, then change only Power Limit</h2><p>Install MSI Afterburner from its official site and select the card. Save a screenshot of its current Power Limit. If it was 100%, lower it to around 90% and click Apply. Leave voltage, core clock and memory clock unchanged so you can identify what caused any speed difference.</p><p>Complete an answer to the same document, then compare the wait and fan noise. On a card whose 100% default is 350W, 90% is approximately 315W. You need the default to translate a percentage into watts. If the slider is locked, check card and driver support. To restore, enter the recorded value and click Apply. Keep startup auto-apply disabled during testing.</p><ul><li><a href="https://www.msi.com/Landing/afterburner/afterburner">Official Afterburner download</a></li><li><a href="https://au.msi.com/blog/rtx-5070-5060ti-overclocking-undervolting-guide-with-msi-afterburner-part-2/">MSI power-limit guide</a></li></ul></section><section><h2>Linux: query, change, verify, restore</h2><p>On a PC with an NVIDIA driver, nvidia-smi can control supported cards. Identify the GPU index and name, then record its current limit and Min/Max values. The first two commands below only read settings. If the limit is N/A or changing it is unsupported, stop before the change step.</p><p>The change example lowers an RTX 3090 at GPU index 0 to 300W. Run it only if 300W is within your card’s allowed range. Query again to verify the applied limit, then compare your work. Restore the wattage you recorded before the change. Test normal operation and restoration before considering a startup service.</p><div><p><strong>Select the GPU and query its power range</strong></p><pre><code data-guide-code-block="5-0">nvidia-smi -L
nvidia-smi -i 0 -q -d POWER</code></pre><p><small>Replace GPU index 0 with your target card. Record Current, Default, Min and Max.</small></p></div><div><p><strong>300W test on a supported RTX 3090</strong></p><pre><code data-guide-code-block="5-1">sudo nvidia-smi -i 0 -pl 300
nvidia-smi -i 0 -q -d POWER</code></pre><p><small>For another card, choose a value within its queried range. Setting the limit requires permission.</small></p></div><div><p><strong>Restore the previous cap</strong></p><pre><code data-guide-code-block="5-2">sudo nvidia-smi -i 0 -pl ORIGINAL_WATTS
nvidia-smi -i 0 -q -d POWER</code></pre><p><small>Replace ORIGINAL_WATTS with the number you recorded. Driver reloads or management apps may reset or reapply limits; query again after restarting.</small></p></div><ul><li><a href="https://docs.nvidia.com/deploy/nvidia-smi/index.html">nvidia-smi controls and support</a></li></ul></section><section><h2>DGX Spark: start with the controls it supports</h2><p>DGX Spark’s GB10 combines CPU and GPU. Its SoC TDP is 140W, and the supplied adapter is 240W. The power reported by nvidia-smi covers the GPU portion, so measure the complete system at the wall when calculating electricity costs.</p><p>Published Spark reports currently show that nvidia-smi -pl power-limit changes are unsupported. If its power-limit fields are N/A, do not transplant the 3090’s 300W command. Start by updating DGX OS and using the supplied adapter. OS updates improved power handling for unused high-speed networking; stopping unused server work also avoids unnecessary load.</p><p>A community report lowered the clock ceiling to reduce heat and abrupt shutdowns. In that configuration, restricting GPU clocks to 300–2,200MHz changed the same dual-node workload from 32.3 to 30.8 tok/s, about 5%. It was not an electricity-savings measurement, and the report also examined power delivery and memory settings. If your Spark has the same symptom, collect logs and temperatures for support first; treat clock changes as a separate test after checking support and restoration.</p><ul><li><a href="https://docs.nvidia.com/dgx/dgx-spark/hardware.html">Spark power and thermal specifications</a></li><li><a href="https://forums.developer.nvidia.com/t/dgx-spark-power-clarification/349668">GPU power versus system power</a></li><li><a href="https://docs.nvidia.com/dgx/dgx-spark/release-notes.html">DGX OS updates</a></li><li><a href="https://github.com/tonyd2wild/dgx-spark-hard-poweroff-fix">Spark clock-cap and recovery report</a></li></ul></section><section><h2>Mac and Radeon have their own ways to reduce heat</h2><p>On a supported Mac, compare Low Power Mode in System Settings under Energy or Battery. Apple documents reduced energy use and fan noise on supported models, including Mac mini and Mac Studio. Keep the model, document and output length fixed while comparing completion times with Automatic mode. If other apps also become too slow, use Automatic during active work and Low Power for lighter always-on tasks.</p><p>For Radeon, use power controls provided by the card vendor rather than NVIDIA commands. Supported AMD Software exposes power-limit controls under Performance and Tuning; save the defaults before changing them. If the control is absent or locked on a managed computer, check the system’s management policy first. As with NVIDIA, test the power cap alone before combining it with voltage changes.</p><ul><li><a href="https://support.apple.com/en-us/101613">Mac power modes and supported models</a></li><li><a href="https://www.amd.com/en/resources/support-articles/faqs/DH3-020.html">AMD Software performance tuning</a></li></ul></section><section><h2>For two GPUs or two Sparks, measure the complete job</h2><p>When a model spans two GPUs, the cards exchange results. A large cap reduction on only one can make the other wait. Record each GPU’s index, UUID and current limit, then start with a small proportional reduction and compare end-to-end response time. If each card runs a different model, tune those workloads separately.</p><p>The same principle applies to two Sparks or several PCs. Add the energy used by every node until the distributed job finishes. If a spare node has no other work, stop its server after the job or schedule its idle and shutdown periods around actual use. Include powered networking devices and switches when they are part of the setup.</p></section><section><h2>Record first response, completion time and energy</h2><p>Establish a baseline by answering the same document at the original setting. Lower the limit, send the same request three times and compare medians. In apps with prompt caching, compare first requests separately from follow-up requests. Keep other requests and model downloads out of the test to isolate the power-cap effect.</p><p>Decode speed per GPU watt helps choose a setting. To determine whether the electricity bill improved, measure the whole PC’s energy until the answer finishes. Observe GPU power and temperature with the command below, and record cumulative Wh at the wall. Compare fan noise from the same position.</p><table><caption>Record the same workload at each setting</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Record</th></tr></thead><tbody><tr><th scope="row">Run configuration</th><td>Model, quantization, engine, input, output, MTP and concurrency</td></tr><tr><th scope="row">First response and completion</th><td>Seconds to the first token and to the end of the answer</td></tr><tr><th scope="row">Power and heat</th><td>Whole-system Wh, GPU power, temperature and fan noise</td></tr></tbody></table><div><p><strong>Query GPU status every second</strong></p><pre><code data-guide-code-block="9-0">nvidia-smi -i 0 -q -d POWER,TEMPERATURE -l 1</code></pre><p><small>Stop with Ctrl+C. This command does not change power or clock settings.</small></p></div></section><section><h2>Include monthly electricity and summer cooling</h2><p>Average watts multiplied by hours and divided by 1,000 gives kWh. Suppose whole-PC average power measured at the wall falls from 450W to 400W. Running for the same four hours a day over 30 days reduces use from 54kWh to 48kWh, a 6kWh saving.</p><p>If you instead run until the same job finishes, include its longer duration. A job that took four hours at the original setting uses 1.76kWh if it takes 4.4 hours at 400W, but 1.84kWh if it takes 4.6 hours. The original used 1.8kWh. Excessive slowdowns can therefore shrink or eliminate the energy saving.</p><p>Most electricity used by the hardware becomes heat in the room. During air-conditioned hours, cooling that extra heat uses additional electricity. Enter measured whole-system power and runtime in the electricity calculator and enable the cooling option. Include the home’s existing use and progressive tariff band to compare monthly costs.</p><table><caption>Fixed time versus fixed work · illustrative assumptions</caption><thead><tr><th scope="col">Condition</th><th scope="col">Daily energy</th><th scope="col">30-day energy</th></tr></thead><tbody><tr><th scope="row">450W × 4h</th><td>1.8kWh</td><td>54kWh</td></tr><tr><th scope="row">400W × 4h</th><td>1.6kWh</td><td>48kWh</td></tr><tr><th scope="row">400W × 4.4h</th><td>1.76kWh</td><td>52.8kWh</td></tr><tr><th scope="row">400W × 4.6h</th><td>1.84kWh</td><td>55.2kWh</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en?tab=electricity">Calculate power, runtime and cooling together</a></li></ul></section><section><h2>Lower the limit only as far as the wait remains acceptable</h2><p>Start by lowering the current cap by roughly 10% and compare the same job. If answers finish in almost the same time and noise or temperature improves, try a lower value. Step back if long inputs or MTP add too much delay. The goal is a comfortable everyday setting, not the lowest wattage.</p><p>Use the 3090, 4090 and 5090 measurements to choose a starting point, and test RTX PRO, Spark and Mac through their own supported controls. If your model and memory already meet the workload, try these settings to reduce heat and energy before replacing hardware.</p><ul><li><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">Keep, add a GPU or replace an RTX 3090</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-tco">Total cost including electricity</a></li></ul></section><aside><h2>Calculate my hardware’s electricity cost</h2><p>Enter whole-system power and actual runtime, and compare cooling costs too.</p><a href="https://localai.co.kr/en?tab=electricity">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A power limit sets the maximum power a graphics card may use—for example, running an RTX 3090 at 300W instead of 350W. It preserves the VRAM available to your model while reducing power and heat. The trade-off can be slower responses, so compare how much longer your usual work takes.</dd></div><div><dt>How much memory does it need?</dt><dd>Use the 3090, 4090 and 5090 measurements to choose a starting point, and test RTX PRO, Spark and Mac through their own supported controls. If your model and memory already meet the workload, try these settings to reduce heat and energy before replacing hardware.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Published Spark reports currently show that nvidia-smi -pl power-limit changes are unsupported. If its power-limit fields are N/A, do not transplant the 3090’s 300W command. Start by updating DGX OS and using the supplied adapter. OS updates improved power handling for unused high-speed networking; stopping unused server work also avoids unnecessary load.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>AstaBrief 8B: Create a Cited Research Report Locally</title><link>https://localai.co.kr/en/guides/astabrief-8b-local-research-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/astabrief-8b-local-research-guide</guid><description>Learn how to give AstaBrief 8B a research question and retrieved paper excerpts, create a cited report, trace citations to their sources, and assess published scores and local memory needs.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-05</p><h1 id="guide-page-title">AstaBrief 8B: Create a Cited Research Report Locally</h1><p>Turn retrieved papers into a report whose evidence you can review.</p><p id="guide-page-summary">AstaBrief-8B takes a research question and paper excerpts and writes a report with citations. Collect sources with a search tool and pass them to the model to organize arguments and evidence from multiple papers into a draft. The model is released under Apache-2.0 and can run through Transformers or vLLM.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Give the model a research question and retrieved excerpts; a separate tool handles paper search.</li><li>The official model ID is `allenai/AstaBrief_8B`, under Apache-2.0.</li><li>On the published 100-question evaluation, citation precision was 90.5 and citation recall was 78.2.</li><li>The card lists no official minimum memory or local tok/s. Open cited sources and verify that they support the claims.</li></ol></section><section><h2>Give it a research question and paper excerpts to get a cited report</h2><p>Ai2 released `allenai/AstaBrief_8B` under Apache-2.0 on 2026-10-02. The model takes a research question and retrieved scientific-literature excerpts, then writes a report citing the evidence. To compare battery-degradation factors across papers, for example, first use a search tool to collect relevant papers and passages, then send the question and excerpts to AstaBrief. It does not search the web or scholarly databases itself. [Ai2 announcement](https://huggingface.co/blog/allenai/astabrief) · [Model card](https://huggingface.co/allenai/AstaBrief_8B)</p><p>First check that the retrieved set contains every comparison target and key condition. Then compare the model’s summaries and citations with the source text so retrieval gaps and writing errors can be fixed separately.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/xing4-local-coding-guide">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><section><h2>Keep retrieval and report writing as separate steps</h2><p>Use one task throughout: compare three papers on how high-temperature storage affects lithium-ion battery capacity loss, and tabulate their different test temperatures and observation periods. Keep each retrieved paper’s title, year, DOI or URL, and the actual excerpt. An identifier on each excerpt makes it easier to connect a citation in the report back to its source.</p><p>Include the research question, requested report sections, excerpts, and source identifiers. The official SFT prompt has `[QUERY]` and `[SECTION_REFERENCES]` slots, making it straightforward to connect the question with its evidence. [AstaBrief model card](https://huggingface.co/allenai/AstaBrief_8B)</p></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-1.webp" alt="Laptop on a desk with papers and research notes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Retrieval gathers papers and passages; AstaBrief writes from that evidence.</figcaption></figure><section><h2>Review cited sentences and the scope of their evidence</h2><p>A citation at the end of a sentence does not mean every part of the sentence appears in the source. If a result from storage at 45°C is generalized to typical degradation at 25°C, the citation may be real while the conclusion has changed scope. Open the cited paper for each comparison and check whether temperature, sample, duration, and measured outcome match.</p><p>Ai2 reports citation precision and citation recall as separate measures. Precision concerns whether attached citations support their statements; recall concerns whether necessary evidence for the report’s claims is present. A high score on one does not imply the same score on the other. During review, record unsupported citations and claims with missing citations as different issues.</p><table><caption>Distinguish the two citation measures while reviewing a report sentence.</caption><thead><tr><th scope="col">Measure</th><th scope="col">Question</th><th scope="col">What to do in the battery comparison</th></tr></thead><tbody><tr><th scope="row">Citation precision</th><td>Does an attached citation support the statement?</td><td>Check temperature, duration, and measurements in each paper.</td></tr><tr><th scope="row">Citation recall</th><td>Has evidence needed for a claim been omitted?</td><td>Check that each comparison row has a source identifier.</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-2.webp" alt="Three sets of papers and writing tools spread across a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Open the citation and check that conditions and claim scope match the source.</figcaption></figure><section><h2>Report quality was evaluated on 100 computer-science questions.</h2><p>Ai2 evaluated reports on ScholarQA-CS2, a set of 100 user-written computer-science questions. The final AstaBrief-8B averaged 87.0, compared with 77.3 for Qwen3-8B and 83.7 for AstaBrief-8B-SFT in the same table. The evaluation considers coverage of requested content and whether citations support claims. [Official model-card evaluation table](https://huggingface.co/allenai/AstaBrief_8B)</p><p>Citation precision was 90.5 and citation recall was 78.2. Because recall—which checks whether claims have needed evidence—was lower, begin draft review by finding key claims without citations. These results belong to this question set; evaluate Korean-language sources separately.</p><table><caption>Scores compared in the same ScholarQA-CS2 evaluation table.</caption><thead><tr><th scope="col">Model</th><th scope="col">Average score</th><th scope="col">Evaluation scope</th></tr></thead><tbody><tr><th scope="row">Qwen3-8B</th><td>77.3</td><td>100 user-written CS questions</td></tr><tr><th scope="row">AstaBrief-8B-SFT</th><td>83.7</td><td>Same question set</td></tr><tr><th scope="row">AstaBrief-8B</th><td>87.0</td><td>Same question set</td></tr></tbody></table></section><section><h2>Plan memory for weights and the input context.</h2><p>BF16 typically stores each parameter in two bytes, putting 8B model weights at about 16 GB by simple arithmetic. Longer paper excerpts increase the KV cache, so check how much memory remains after loading the weights. The official card does not specify a minimum inference VRAM.</p><p>First check model loading and response generation using a short excerpt from one paper. Then add papers and excerpts while recording peak memory to find a workable input size for your device.</p><table><caption>Leave memory for input and generation after loading the weights.</caption><thead><tr><th scope="col">Item</th><th scope="col">Known value</th><th scope="col">Remaining condition</th></tr></thead><tbody><tr><th scope="row">Model</th><td>8B, BF16</td><td>No minimum inference VRAM in the card</td></tr><tr><th scope="row">Weight arithmetic</th><td>About 16 GB (8B × 2 bytes)</td><td>KV cache, runtime, and workspace add memory</td></tr></tbody></table></section><section><h2>Run the model using the official card’s Python path</h2><p>The official model card includes Python examples for Transformers and vLLM, along with a recommended prompt file. Put the research question and retrieved excerpts in `[QUERY]` and `[SECTION_REFERENCES]`. The example below uses the card's recommended settings: temperature 0.7, top_p 0.95, and a maximum output of 4,096 tokens. See the [model card](https://huggingface.co/allenai/AstaBrief_8B) and [official SFT prompt](https://huggingface.co/datasets/allenai/AstaBrief_prompts/blob/main/sft_prompt.txt).</p><p>For batched inputs in vLLM, use `LLM.generate`. See the [vLLM generate API](https://docs.vllm.ai/en/latest/getting_started/quickstart/).</p><p>On success, the terminal prints the generated report. If Python cannot find `sft_prompt.txt`, check that you are running from the folder where you downloaded it; for `ModuleNotFoundError`, check that the packages are installed in the active virtual environment. If loading runs out of memory, do not assume a shorter generation limit solves weight-loading memory; record the GPU, runtime, and input context length, then reassess the precision or model choice. [vLLM installation and supported environments](https://docs.vllm.ai/en/stable/getting_started/installation/)</p><div><p><strong>Prepare the runtime and official prompt file</strong></p><pre><code data-guide-code-block="5-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U transformers accelerate vllm
curl -L -o sft_prompt.txt https://huggingface.co/datasets/allenai/AstaBrief_prompts/resolve/main/sft_prompt.txt</code></pre><p><small>Install vLLM in a Python environment with a supported GPU and driver. Before installing, check the [official vLLM installation guide](https://docs.vllm.ai/en/stable/getting_started/installation/) and model card.</small></p></div><div><p><strong>Generate one report from retrieved excerpts</strong></p><pre><code data-guide-code-block="5-1">import json
from pathlib import Path

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

model_name = "allenai/AstaBrief_8B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name)

query = "Compare the outcomes reported in these papers and state which conditions differ."
section_references = {
    "[P1]": "Paste a relevant quotation from paper 1 here.",
    "[P2]": "Paste a relevant quotation from paper 2 here.",
    "[P3]": "Paste a relevant quotation from paper 3 here.",
}
formatted_sft_prompt = (
    Path("sft_prompt.txt").read_text(encoding="utf-8")
    .replace("[QUERY]", query)
    .replace("[SECTION_REFERENCES]", json.dumps(section_references, ensure_ascii=False))
)
messages = [{"role": "user", "content": formatted_sft_prompt}]
text = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
sampling = SamplingParams(
    temperature=0.7, top_p=0.95, max_tokens=4096,
    stop_token_ids=[tokenizer.eos_token_id],
)
outputs = llm.generate([text], sampling)
print(outputs[0].outputs[0].text.strip())</code></pre><p><small>Put the actual question and literature excerpts into the two slots in `sft_prompt.txt`. `[P1]` and `[P2]` are example source IDs. The snippet sends instructional placeholders if run unchanged, so replace them with the material for your report.</small></p></div></section><figure><img src="https://localai.co.kr/images/guides/astabrief-8b-local-research-guide-3.webp" alt="Report open on a laptop beside papers and comparison notes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review each comparison value alongside the paper that supports it.</figcaption></figure><section><h2>Check the report against all three source papers</h2><p>For the battery comparison, first check that all three papers appear in the report’s table. Then compare each row’s temperature and observation period with the source, and finally verify that statements in the report point to the papers that support the table values. Keep source identifiers intact so you can trace any mismatch to the original table or passage.</p><p>If a paper reports several test temperatures and capacity-measurement times, the model may select just one. Instead of recording only that it was wrong, check whether the excerpts included the condition needed by the research question. If the condition was missing, retrieve the relevant passage; if it was present but changed in the report, correct the cited statement.</p><table><caption>Distinguish retrieval gaps from report-writing errors during review.</caption><thead><tr><th scope="col">Observed issue</th><th scope="col">Where to look first</th><th scope="col">Next action</th></tr></thead><tbody><tr><th scope="row">A paper needed for comparison is missing</th><td>Retrieved results and excerpt list</td><td>Revise the query and add relevant passages.</td></tr><tr><th scope="row">Temperature or duration differs from the paper</th><td>Cited table and passage</td><td>Re-extract the condition and correct the statement.</td></tr><tr><th scope="row">A claim has no citation</th><td>Report statement and source identifier</td><td>Limit the claim to supported content or add a citation.</td></tr></tbody></table></section><section><h2>Move the workflow locally when retrieval and memory are ready</h2><p>If unpublished research or internal literature must stay off external APIs, you can run open weights on your own hardware. First test retrieval, drafting, and citation review on three public papers; then record model-load memory and end-to-end time with realistic input lengths. Check those results and your organization’s data policy before adding internal material.</p><p>For recurring research drafts with human citation review, connect a retrieval system to AstaBrief and test it on three public papers. Use retrieval coverage, conditions in comparison tables, and whether citations support each statement as acceptance checks to identify changes before adopting it in real work.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Learn how to prepare local retrieval</h2><p>Review document collection and retrieved results.</p><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>AstaBrief-8B takes a research question and paper excerpts and writes a report with citations. Collect sources with a search tool and pass them to the model to organize arguments and evidence from multiple papers into a draft. The model is released under Apache-2.0 and can run through Transformers or vLLM.</dd></div><div><dt>How much memory does it need?</dt><dd>BF16 typically stores each parameter in two bytes, putting 8B model weights at about 16 GB by simple arithmetic. Longer paper excerpts increase the KV cache, so check how much memory remains after loading the weights. The official card does not specify a minimum inference VRAM.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Ai2 released `allenai/AstaBrief_8B` under Apache-2.0 on 2026-10-02. The model takes a research question and retrieved scientific-literature excerpts, then writes a report citing the evidence. To compare battery-degradation factors across papers, for example, first use a search tool to collect relevant papers and passages, then send the question and excerpts to AstaBrief. It does not search the web or scholarly databases itself. [Ai2 announcement](https://huggingface.co/blog/allenai/astabrief) · [Model card](https://huggingface.co/allenai/AstaBrief_8B)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</title><link>https://localai.co.kr/en/guides/xing4-local-coding-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/xing4-local-coding-guide</guid><description>Learn how to use Xing4.0-29B-A4B for coding work. Compare its 4B active experts with 29B total parameters, review official agent evaluations, and plan the GPU, context length, and runtime.</description><content:encoded><![CDATA[<header><p>new model · 2026-10-05</p><h1 id="guide-page-title">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</h1><p>Before sending a coding task, choose a runtime and GPUs for the full 29B model.</p><p id="guide-page-summary">Xing4.0-29B-A4B is a MoE coding-agent model with about 4B of its 29B parameters active per token. BF16, FP8, and GGUF files are released under Apache-2.0, and the official vLLM example uses tensor parallelism 2 with a 256K context. The pull request for main runtime support has not yet been merged.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The exact model ID is `XingChen-AGI/Xing4.0-29B-A4B`, under Apache-2.0.</li><li>The 29B total and 4B active parameter counts describe different things for memory planning.</li><li>The official vLLM configuration example uses TP=2, 256K context, and up to four sequences.</li><li>SWE-bench and Terminal-Bench scores measure agent tasks, not tok/s.</li></ol></section><section><h2>A 29B model selects about 4B of experts per token</h2><p>Xing4.0-29B-A4B is an open-weight agent model designed to read code, propose edits, and continue through tool calls. Its full model has about 29B parameters; the MoE architecture activates about 4B when computing each token. In an agent framework, the model receives code and error logs and generates a next action or code response, while a separate runner executes the tool call. [Publisher’s official model card](https://huggingface.co/XingChen-AGI/Xing4.0-29B-A4B)</p><p>We will follow one task: inspect three files in a repository, run a test to investigate a bug, then explain the changes. The model is described as supporting tool calling and a 256K context, but the workflow still needs a code runner, repository permissions, and a supported runtime. Benchmark scores alone do not show that it will edit, test, and revert files reliably.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/flint-local-coding-agent-guide">Flint local LLM: can an open 40B coding agent run on a personal PC?</a></li><li><a href="https://localai.co.kr/en/guides/astabrief-8b-local-research-guide">AstaBrief 8B: Create a Cited Research Report Locally</a></li><li><a href="https://localai.co.kr/en/guides/holo4-local-computer-use-guide">Holo4 for Local Computer Use: Model, Runner, and Permission Boundaries</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-release-local-guide">Gemma 4: choosing 12B or 26B-A4B for your hardware</a></li><li><a href="https://localai.co.kr/en/guides/k2-horizon-local-model-guide">K2 Horizon 0.9B to 36B-A4B: choose the right model for your hardware</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-v4-1-flash-local-requirements">Running DeepSeek V4.1 Flash locally: the numbers beyond 552B</a></li><li><a href="https://localai.co.kr/en/guides/ling-3-0-flash-vl-local-requirements">Running Ling-3.0-flash-VL locally: what the 70.87 GiB INT4 build means</a></li><li><a href="https://localai.co.kr/en/guides/server-scale-open-weight-models-2026">GLM-5.3 and DeepSeek-V4: open weights, but for a personal PC?</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-1.webp" alt="A code editor, terminal window, and notepad sit open on a watercolor-painted coding desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The agent uses both code and run output to propose a next step.</figcaption></figure><section><h2>Do not calculate VRAM from the 4B active figure</h2><p>Active parameters describe the experts selected for each token’s computation; they do not remove the other experts from memory. A simple BF16 estimate for all weights is 29B × 2 bytes ≈ 58 GB. This is an approximate amount of weight data, not a measured checkpoint size or runtime-memory requirement. KV cache, the runtime, and working headroom add more.</p><p>Start memory planning with precision and the actual release file. The official repository records BF16, FP8, and GGUF releases on September 17, 2026. Their file sizes differ, but the existence of a GGUF does not establish that it fits a particular GPU. Check whether your selected runtime supports both the architecture and that quantized file. [Official release record](https://github.com/XingChen-AGI/Xing4.0-29B-A4B)</p><table><caption>Separate total weights from per-token computation when planning memory.</caption><thead><tr><th scope="col">Figure</th><th scope="col">Meaning</th><th scope="col">Use in hardware planning</th></tr></thead><tbody><tr><th scope="row">29B total</th><td>Overall checkpoint expert and weight scale</td><td>Check file and memory requirements</td></tr><tr><th scope="row">About 4B active</th><td>Experts selected for token computation</td><td>Use to understand compute per token</td></tr><tr><th scope="row">About 58 GB BF16 arithmetic estimate</th><td>Estimated weight data from 29B × 2 bytes</td><td>Do not treat as minimum runtime memory</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-2.webp" alt="An open desktop case reveals a large GPU beside a laptop showing model settings, in a watercolor scene." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plan for 4B active computation separately from 29B total weights.</figcaption></figure><section><h2>Coding-agent scores depend on the harness and run conditions</h2><p>The model card reports 75.0 on SWE-bench Verified. The publisher specifies `SWE-agent`, temperature 1.0, top_p 0.95, repetition penalty 1.05, and a 210K context. This score evaluates an agent solving repository tasks, so it is different from a single code-completion response or local tok/s. [Xing4.0 official evaluation notes](https://huggingface.co/XingChen-AGI/Xing4.0-29B-A4B)</p><p>The Terminal-Bench 2.1 score is 57.5. The card reports a three-run average using `terminus-2`, temperature 0.8, top_p 0.95, repetition penalty 1.05, up to 64K output tokens, and a 24-hour limit per task. This evaluation includes agent tools and a long timeout; it does not show how quickly the model writes one line. On your repository, track edit success, test results, and permitted tools separately.</p><table><caption>The published scores come from different coding-agent evaluations.</caption><thead><tr><th scope="col">Evaluation</th><th scope="col">Published score</th><th scope="col">Key conditions</th></tr></thead><tbody><tr><th scope="row">SWE-bench Verified</th><td>75.0</td><td>SWE-agent, 210K context, temp 1.0; see card for remaining settings</td></tr><tr><th scope="row">Terminal-Bench 2.1</th><td>57.5</td><td>terminus-2, up to 64K output, 24 hours per task, three-run average</td></tr></tbody></table></section><section><h2>Check the pre-merge runtime paths</h2><p>The publisher’s repository documents Transformers and vLLM, SGLang, and KTransformers configurations. As checked on 2026-10-05, it also says upstream support pull requests for vLLM, SGLang, llama.cpp, and other runtimes are not yet merged. Do not assume the default latest package already includes Xing support; use the PR branch or prebuilt container linked by the official repository. [Official run paths and PR status](https://github.com/XingChen-AGI/Xing4.0-29B-A4B)</p><p>Keep code-execution permissions separate from the model. Start with read-only access, add test execution next, and allow file edits only when you can inspect the diff. Even when an agent framework connects a repository and terminal, first check whether model outputs execute commands automatically and whether approval is required. Agent scores do not measure the safety of your tool permissions or success on your repository.</p><div><p><strong>Prepare the official Transformers environment</strong></p><pre><code data-guide-code-block="3-0">python -m venv .venv
source .venv/bin/activate
pip install -U torch transformers accelerate huggingface_hub
hf download XingChen-AGI/Xing4.0-29B-A4B</code></pre><p><small>These commands prepare the Transformers path documented by the repository. Use the Python example in the next section to load the model. Installation does not establish that a 29B BF16 model fits; inspect the checkpoint files and available memory first.</small></p></div></section><section><h2>Send a short coding question with the official Transformers example</h2><p>The official repository’s Transformers example loads the model with `trust_remote_code=True`. This uses model code supplied by the repository, so review the official model files before running it. The example fixes the prompt and caps output at 1,024 tokens as a short check of loading and response format. For repository work, adjust the output limit to the explanation and code changes needed. [Xing official Transformers quickstart](https://github.com/XingChen-AGI/Xing4.0-29B-A4B)</p><p>On success, the terminal prints a short explanation of the Python error. For an unsupported-architecture error, check Transformers compatibility. For an out-of-memory error, account for the roughly 58 GB arithmetic size of BF16 weights as well as context and runtime memory. Lowering `max_new_tokens` limits generation length but may not fix an error that occurs while loading the weights. [Official architecture and inference example](https://github.com/XingChen-AGI/Xing4.0-29B-A4B)</p><div><p><strong>Load the model and check a capped response</strong></p><pre><code data-guide-code-block="4-0">import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "XingChen-AGI/Xing4.0-29B-A4B"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id, trust_remote_code=True, device_map="auto", dtype=torch.bfloat16
)

messages = [{"role": "user", "content": "Explain this Python error and suggest a minimal fix: KeyError: 'id'"}]
prompt = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.inference_mode():
    output = model.generate(
        **inputs, do_sample=True, top_p=0.95, temperature=0.8,
        repetition_penalty=1.05, max_new_tokens=1024
    )
print(tokenizer.decode(
    output[0][inputs.input_ids.shape[-1]:],
    skip_special_tokens=False, spaces_between_special_tokens=False
))</code></pre><p><small>This requires a supported hardware and Transformers combination. On success, generated text appears in the terminal. If the architecture is reported as unsupported, first check that the installed Transformers release supports Xing and that the checkpoint path and dtype are correct.</small></p></div></section><section><h2>The vLLM recipe uses two GPUs and limits concurrent requests</h2><p>The publisher’s vLLM example sets `--tensor-parallel-size 2`, `--gpu-memory-utilization 0.90`, `--max-model-len 262144`, and `--max-num-seqs 4`.</p><p>This is a two-GPU sharded serving path with up to four sequences.</p><p>It does not mean every prompt should use 256K; longer context also uses more KV-cache memory. Decide on prompt length and concurrency, then check whether that configuration fits.</p><p>The publisher’s KTransformers example is a heterogeneous path that uses CPU and GPU together. It sets the number of experts placed on the GPU and CPU inference threads. Thus ‘runs with one GPU’ may mean the selected runtime assigns some work to the CPU, not that all weights fit in GPU memory. The official material does not give a precise minimum RAM or inference speed, which must be measured on the chosen setup.</p><p>When the server starts, the vLLM API responds at `http://localhost:8000/v1`. If startup reports an architecture or parser error, check that you are using the publisher’s prebuilt image or a PR branch linked by the repository rather than a generic vLLM build. For an out-of-memory error, first reduce context and concurrent sequences, then check that both GPUs are visible. Runtime after such changes remains unmeasured until you test it directly. [Official vLLM settings and support paths](https://github.com/XingChen-AGI/Xing4.0-29B-A4B)</p><table><caption>Compare the execution assumptions in the official serving paths.</caption><thead><tr><th scope="col">Path</th><th scope="col">Published setup</th><th scope="col">Still to verify</th></tr></thead><tbody><tr><th scope="row">Transformers</th><td>device_map=auto, BF16 example</td><td>Actual placement memory and supported hardware</td></tr><tr><th scope="row">vLLM</th><td>TP=2, 256K maximum context, up to 4 sequences</td><td>Upstream PR not merged; use official PR branch/image</td></tr><tr><th scope="row">KTransformers</th><td>CPU/GPU heterogeneous example</td><td>System RAM and runtime are not published</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/images/guides/xing4-local-coding-guide-3.webp" alt="Code-review desk with a laptop and checking notes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A person reviews the diff and tests after the model responds.</figcaption></figure><section><h2>Judge fit with a small repository task</h2><p>After the Python `KeyError: 'id'` explanation appears, use a small repository bug as the next read-only task. Send the reproduction command and relevant files, then ask which test to run. Before letting the agent edit files, check that its file path, cause, and verification steps agree. Only then allow edits in a limited directory and have a person review the diff and test results.</p><p>For hardware selection, account for storage for the checkpoint, memory for weights and input, and headroom for the apps you normally use. The official TP=2 path requires two GPUs and its runtime setup. A KTransformers CPU/GPU path uses other memory resources when GPU memory is limited, but completion time may change. If the task does not require this exact model, compare it with a smaller coding model on the same repository issue before spending on hardware.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Choose a coding model by task</h2><p>Compare repository edits, terminal work, and code explanation.</p><a href="https://localai.co.kr/en/guides/local-coding-ai-choose-by-workflow">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Xing4.0-29B-A4B is a MoE coding-agent model with about 4B of its 29B parameters active per token. BF16, FP8, and GGUF files are released under Apache-2.0, and the official vLLM example uses tensor parallelism 2 with a 256K context. The pull request for main runtime support has not yet been merged.</dd></div><div><dt>How much memory does it need?</dt><dd>Active parameters describe the experts selected for each token’s computation; they do not remove the other experts from memory. A simple BF16 estimate for all weights is 29B × 2 bytes ≈ 58 GB. This is an approximate amount of weight data, not a measured checkpoint size or runtime-memory requirement. KV cache, the runtime, and working headroom add more.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Xing4.0-29B-A4B is an open-weight agent model designed to read code, propose edits, and continue through tool calls. Its full model has about 29B parameters; the MoE architecture activates about 4B when computing each token. In an agent framework, the model receives code and error logs and generates a next action or code response, while a separate runner executes the tool call. [Publisher’s official model card](https://huggingface.co/XingChen-AGI/Xing4.0-29B-A4B)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run a Local LLM in Your Browser with Transformers.js</title><link>https://localai.co.kr/en/guides/transformers-js-browser-local-inference-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/transformers-js-browser-local-inference-guide</guid><description>Learn how to run an ONNX model in the browser with Transformers.js 4.3.0 and WebGPU. Follow a working example and understand the first model download, CPU-versus-GPU choices, and browser support limits.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run a Local LLM in Your Browser with Transformers.js</h1><p>Build a small web app that answers prompts inside your browser.</p><p id="guide-page-summary">Transformers.js runs AI models from JavaScript. Once an ONNX model is downloaded, the browser can generate replies locally. This guide builds a prompt field and a reply button using LFM2.5-350M, the official example model for version 4.3.0.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Serve the static HTML from `localhost` or HTTPS and import Transformers.js 4.3.0 as an ES module.</li><li>CPU/WASM is the default; select `device: 'webgpu'` only when the browser and GPU support it.</li><li>The prompt is passed to a model running in the browser and does not call a separate inference server.</li></ol></section><section><h2>What changes with browser-local inference?</h2><p>A typical AI website sends a prompt to a server and receives a reply. Browser-local inference moves that work to the user's computer. Create a Transformers.js `pipeline()` once, then pass it a prompt: the downloaded model generates a reply inside the page.</p><p>No separate Python inference server is needed, making this useful for testing small web features. Start with lightweight tasks such as text classification or short replies. Consider a dedicated serving engine for many concurrent users or continuous large-model serving.</p><ul><li><a href="https://huggingface.co/docs/transformers.js/en/index">Transformers.js quick tour and browser defaults</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/transformers-js-browser-local-inference-guide-1.webp" alt="A laptop on a desk showing a browser window running Transformers.js with an ONNX model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once loaded, the model processes prompts in the same browser.</figcaption></figure><section><h2>Choose a model and device supported by 4.3.0</h2><p>Transformers.js 4.3.0 was released on September 16, 2026. Its release example uses `q4f16` for WebGPU with `onnx-community/LFM2.5-350M-ONNX`. The model repository also has a `q4` file for CPU/WASM, but no `q8` file was listed, so the code below selects between the two available formats based on the device.</p><p>When switching to another ONNX model, confirm that the selected dtype file exists in that repository. The file and inference settings must match for the model to load.</p><p>Official sources do not specify minimum system RAM or GPU memory for this model. Do not infer whether it will run from the model file size alone; check the tab's memory use in the browser task manager during the first run.</p><table><caption>These are the execution formats and browser device paths confirmed in this model repository.</caption><thead><tr><th scope="col">Execution path</th><th scope="col">Setting</th><th scope="col">When to use</th></tr></thead><tbody><tr><th scope="row">CPU/WASM</th><td>Omit `device`, use `dtype: 'q4'`</td><td>Default inference path using the q4 file present in this repository</td></tr><tr><th scope="row">Supported GPU</th><td>`device: 'webgpu'`, `dtype: 'q4f16'`</td><td>When a WebGPU adapter is available and supports this format</td></tr><tr><th scope="row">q8</th><td>Do not select for this model</td><td>No q8 ONNX file is listed in the model repository</td></tr></tbody></table><ul><li><a href="https://github.com/huggingface/transformers.js/releases/tag/4.3.0">Model and WebGPU example in the 4.3.0 release</a></li><li><a href="https://huggingface.co/docs/transformers.js/en/guides/dtypes">How to check dtype files by model</a></li><li><a href="https://huggingface.co/onnx-community/LFM2.5-350M-ONNX/tree/main/onnx">q4 and q4f16 files listed in the example ONNX repository</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/transformers-js-browser-local-inference-guide-3.webp" alt="A laptop beside a workstation, each representing CPU and GPU execution paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use CPU/WASM when WebGPU is unavailable. Processing speed and memory use vary by device.</figcaption></figure><section><h2>Prepare a static HTML page on localhost</h2><p>You only need two static files to start. Because the page uses an ES module CDN import, serve it with a local web server instead of opening the file directly from a file browser. `localhost` is treated as a secure context for WebGPU. Use HTTPS for a public deployment.</p><p>In a new empty folder, create `index.html` and `main.js`, then save the HTML below. This follows the official documented approach of importing the library as a module from jsDelivr. Pinning the version in the URL makes this example request 4.3.0 even if a later CDN tag changes.</p><div><p><strong>index.html — input and output elements</strong></p><pre><code data-guide-code-block="2-0">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  &lt;title&gt;Browser-local text generation&lt;/title&gt;
  &lt;label&gt;Prompt &lt;input id="prompt" value="Reply in one short sentence: local AI runs in a browser."&gt;&lt;/label&gt;
  &lt;button id="run" disabled&gt;Generate&lt;/button&gt;
  &lt;pre id="status"&gt;Loading model…&lt;/pre&gt;
  &lt;pre id="output"&gt;&lt;/pre&gt;
  &lt;script type="module" src="./main.js"&gt;&lt;/script&gt;
&lt;/html&gt;</code></pre><p><small>The ES module script loads `main.js` from the same folder.</small></p></div><ul><li><a href="https://huggingface.co/docs/transformers.js/tutorials/vanilla-js">Official vanilla JavaScript tutorial using a CDN</a></li><li><a href="https://cdn.jsdelivr.net/npm/@huggingface/transformers@4.3.0">Pinned Transformers.js 4.3.0 CDN module</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/transformers-js-browser-local-inference-guide-2.webp" alt="A laptop screen with the browser downloads list and a folder containing model files" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Initial network requests fetch the library and weight files; prompt generation then runs in the page.</figcaption></figure><section><h2>Load the model and generate once</h2><p>The following `main.js` checks for WebGPU before loading the model. It selects `q4f16` when a GPU adapter is available, or CPU/WASM `q4` if no adapter is available or the check fails. The Generate button becomes enabled when the model is ready.</p><p>On the first run, the library is fetched from a CDN and model files from Hugging Face Hub. This example processes prompts in the browser rather than sending them to a separate inference server. When integrating it into a service, also check whether analytics or logging code transmits input. Load the model once and reuse the same pipeline for each click.</p><div><p><strong>main.js — check WebGPU, then run a local pipeline</strong></p><pre><code data-guide-code-block="3-0">import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/transformers@4.3.0';

const status = document.querySelector('#status');
const output = document.querySelector('#output');
const promptInput = document.querySelector('#prompt');
const button = document.querySelector('#run');
const modelId = 'onnx-community/LFM2.5-350M-ONNX';
let adapter = null;
try {
  adapter = await navigator.gpu?.requestAdapter() ?? null;
} catch (error) {
  console.warn('WebGPU unavailable; using CPU/WASM.', error);
}
const device = adapter ? 'webgpu' : undefined;
const dtype = adapter ? 'q4f16' : 'q4';
let generator;

try {
  status.textContent = `Loading ${modelId} (${device ?? 'CPU/WASM'}, ${dtype})…`;
  generator = await pipeline('text-generation', modelId, { dtype, ...(device ? { device } : {}) });
  status.textContent = `Ready: ${device ?? 'CPU/WASM'} / ${dtype}`;
  button.disabled = false;
} catch (error) {
  status.textContent = `Model load failed: ${error.message}`;
  console.error(error);
}

button.addEventListener('click', async () =&gt; {
  if (!generator) return;
  button.disabled = true;
  status.textContent = 'Generating…';
  try {
    const result = await generator(promptInput.value, { max_new_tokens: 48 });
    const generated = result[0]?.generated_text;
    output.textContent = typeof generated === 'string'
      ? generated
      : Array.isArray(generated)
        ? generated.at(-1)?.content ?? JSON.stringify(result)
        : JSON.stringify(result);
    status.textContent = 'Done.';
  } catch (error) {
    status.textContent = `Generation failed: ${error.message}`;
    console.error(error);
  } finally {
    button.disabled = false;
  }
});</code></pre><p><small>This uses the ONNX model and `q4f16` shown in the Transformers.js 4.3.0 release. Generation passes the input to a pipeline in the page.</small></p></div><ul><li><a href="https://huggingface.co/docs/transformers.js/guides/webgpu">WebGPU execution options and browser limits</a></li><li><a href="https://huggingface.co/onnx-community/LFM2.5-350M-ONNX">LFM2.5-350M-ONNX model card and usage example</a></li></ul></section><section><h2>Serve the page and check the result and first download</h2><p>Open a terminal in the folder containing the files and run one of the commands below. Visit `http://127.0.0.1:8000` and click Generate once the status begins with `Ready:`. The first run takes time to download the model; once it is ready, a short result appears for the entered prompt.</p><p>Both commands bind to the local computer only. Choose the first if you use Node.js, or the second if Python is installed. Use HTTPS when publishing a public website.</p><div><p><strong>Start a server — choose Node.js or Python</strong></p><pre><code data-guide-code-block="4-0"># Option A: Node.js
npx serve --listen tcp://127.0.0.1:8000 .

# Option B: Python (choose one server, not both)
python3 -m http.server 8000 --bind 127.0.0.1</code></pre><p><small>Either command serves the page at `http://127.0.0.1:8000`.</small></p></div></section><section><h2>If the model fails to load, check downloads and GPU errors.</h2><p>If there is no WebGPU adapter, use `q4` for CPU/WASM. For Safari, confirm that it is version 26 or later, the range added in Transformers.js 4.3.0; check WebGPU support separately for other browser versions. A model may still fail to load because of memory limits even when an adapter is returned.</p><p>If the model files fail to load, inspect the browser developer tools' Network panel for blocked or failed CDN or Hub requests. For a GPU device error, close other tabs and apps, retry with CPU `q4`, or choose a smaller supported model. For errors after input, record the first console error and the model ID, dtype, and device combination to help reproduce the issue.</p></section><section><h2>Return browser extraction results as JSON</h2><p>JSON can be more convenient than prose when passing an answer to another program. For example, you can extract only sentiment and topic from product feedback. The experimental structured-output feature in 4.3.0 uses JSON Schema to constrain fields and values. It currently generates one sequence at a time.</p><p>This feature needs a separate package. Use the following code in a web project with a module bundler such as Vite, rather than pasting it into the earlier CDN HTML. Install the dependencies and add the code to a JavaScript file. Parse the output with `JSON.parse()` and check required fields before using it.</p><div><p><strong>Install dependencies in a bundler project</strong></p><pre><code data-guide-code-block="6-0">npm install @huggingface/transformers@4.3.0 @huggingface/transformers-structured-output</code></pre><p><small>Unlike the static HTML example, this code needs a development environment that resolves npm packages.</small></p></div><div><p><strong>Constrain sentiment and topic with StructuredOutputProcessor</strong></p><pre><code data-guide-code-block="6-1">import { pipeline } from '@huggingface/transformers';
import { StructuredOutputProcessor } from '@huggingface/transformers-structured-output';

const generator = await pipeline('text-generation', 'onnx-community/LFM2.5-350M-ONNX', {
  dtype: 'q4f16', device: 'webgpu',
});

const processor = new StructuredOutputProcessor(generator.tokenizer, {
  type: 'json_schema',
  json_schema: {
    type: 'object',
    properties: {
      sentiment: { enum: ['positive', 'negative', 'neutral'] },
      topic: { enum: ['price', 'quality', 'delivery', 'other'] },
    },
    required: ['sentiment', 'topic'],
    additionalProperties: false,
  },
});

const result = await generator(
  [{ role: 'user', content: 'Classify this feedback: Shipping was fast, but the product is expensive.' }],
  { max_new_tokens: 48, do_sample: false, logits_processor: [processor] },
);
const jsonText = result[0].generated_text.at(-1).content;
console.log(JSON.parse(jsonText));</code></pre><p><small>Run this example in a WebGPU-capable browser.</small></p></div><ul><li><a href="https://github.com/huggingface/transformers.js/releases/tag/4.3.0">4.3.0 structured-output example and support limits</a></li></ul></section><aside><h2>Open the browser WebGPU demo</h2><p>Continue exploring the browser-based experience on this site.</p><a href="https://localai.co.kr/en/demo">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Transformers.js runs AI models from JavaScript. Once an ONNX model is downloaded, the browser can generate replies locally. This guide builds a prompt field and a reply button using LFM2.5-350M, the official example model for version 4.3.0.</dd></div><div><dt>How much memory does it need?</dt><dd>Official sources do not specify minimum system RAM or GPU memory for this model. Do not infer whether it will run from the model file size alone; check the tab's memory use in the browser task manager during the first run.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</title><link>https://localai.co.kr/en/guides/auk-local-audio-editing-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/auk-local-audio-editing-guide</guid><description>Use AuK with an instruction and optional audio to synthesize or edit speech, enhance recordings, and separate sources. Check the required Qwen2.5-Omni-3B encoder’s separate license and the conditions behind reported memory figures.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</h1><p>AuK is a local model that turns an instruction and optional source audio into generated or edited speech.</p><p id="guide-page-summary">AuK is a 1.5B model that generates speech or edits recordings from instructions. Provide a source file and replacement words to revise speech, or request noise and reverberation reduction. This guide starts with Python setup on CUDA and short-file editing, and also points to MLX on Mac and audio.cpp.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>AuK-Base and four-step distilled AuK-Flash accept an instruction with text and optional source audio.</li><li>The official CLI requires Python 3.10 and separately downloaded AuK checkpoints and the Qwen2.5-Omni-3B encoder.</li><li>The official BF16 table reports 24.78 GiB without CPU offload and 16.75 GiB with it for 1.5-second text-only output on an A800-SXM4-80GB.</li></ol></section><section><h2>What does AuK take in and produce?</h2><p>AuK is a 1.5B local model controlled by an instruction. Give it text to synthesize speech, or include an audio file to request a content edit or changes to delivery such as speed, emotion, or voice quality. Noise and reverberation reduction or source isolation use the same instruction-based interface.</p><p>Start by deciding whether the task needs source audio. For new narration, provide the text and a voice description; for revising or cleaning a recording, provide the audio and the requested change. AuK is not an ASR system that returns only a transcript: its output is an audio file.</p><ul><li><a href="https://github.com/Tencent-Hunyuan/AuK">AuK official installation and model download instructions</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide">Make a two-speaker dialogue WAV with Fish Audio Drama 3</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li></ul></section><section><h2>Choose between revising words, reducing noise, or generating new speech</h2><p>AuK released its code and weights on September 9, 2026, with Base and four-step distilled Flash checkpoints. In editing, the instruction describes what to change or preserve while reference audio supplies the speaker and delivery context. For cleanup, the instruction names the source to keep and noise to remove.</p><p>Official examples focus on English and Chinese. If Korean pronunciation or a particular delivery style matters, generate a short segment first and check pronunciation, edit boundaries, and remaining background sound before processing a longer recording.</p></section><figure><img src="https://localai.co.kr/images/guides/auk-local-audio-editing-guide-1.webp" alt="A short audio waveform and an editing sentence appear on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Pair the source clip with the requested replacement and test a short segment first.</figcaption></figure><section><h2>Prerequisites and installation</h2><p>The official README specifies a Python 3.10 environment. Clone the repository, install the core inference package, and download AuK-Base and Qwen2.5-Omni-3B separately under `ckpts` with the Hugging Face CLI. AuK-Flash is optional for a first Base inference check.</p><p>First install a PyTorch build that matches your GPU. The next table shows the AuK README’s measurement conditions alongside its memory results.</p><p>For Apple Silicon, follow the MLX instructions on the official `feat/mlx-apple-silicon` branch. audio.cpp also supports AuK and Flash as experimental GGUF models. This guide's `--cpu_offload` command and A800 memory table concern CUDA; on Mac, use the installation documentation and model components for the chosen runtime.</p><div><p><strong>Install AuK and download the model components</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/Tencent-Hunyuan/AuK
cd AuK
conda create -n auk python=3.10 -y
conda activate auk
pip install -e .
pip install -U "huggingface_hub[cli]"
hf download tencent/AuK --local-dir ./ckpts/AuK
hf download Qwen/Qwen2.5-Omni-3B --local-dir ./ckpts/Qwen2.5-Omni-3B</code></pre></div><ul><li><a href="https://github.com/Tencent-Hunyuan/AuK/tree/feat/mlx-apple-silicon">Official Apple Silicon MLX branch</a></li><li><a href="https://github.com/0xShug0/audio.cpp/blob/main/docs/community_models/auk.md">AuK GGUF setup and execution in audio.cpp</a></li></ul></section><section><h2>Start by replacing words in a short recording.</h2><p>Use a short audio file that you have permission to process. The official example input is `assets/demo-input-audio/content-edit/content.wav`; for your own file, change the path and specify the phrase to replace. `--gen_seconds` sets the target output duration. If the result is clipped, increase that value first.</p><p>A successful run creates `out_content_edit.wav`. Compare the same segment with the source to hear whether the words changed and surrounding speech connects naturally. The second command adapts the official cleanup request into English. Check the output for reduced noise and reverberation, and ensure the voices you wanted to keep remain.</p><div><p><strong>Official content-editing CLI</strong></p><pre><code data-guide-code-block="3-0">auk-infer \
  --audio assets/demo-input-audio/content-edit/content.wav \
  --instruction "Replace 'but accepting what we cannot have' with 'and living well with dreams unmet'." \
  --output out_content_edit.wav \
  --gen_seconds 7.0</code></pre></div><div><p><strong>Reduce speech noise and reverberation</strong></p><pre><code data-guide-code-block="3-1">auk-infer \
  --audio assets/demo-input-audio/vocal-extraction/vocal-1-input.wav \
  --instruction "Please restore this audio to clean vocals, preserve the original speakers, and remove noise and reverberation." \
  --output out_denoise.wav</code></pre></div></section><figure><img src="https://localai.co.kr/images/guides/auk-local-audio-editing-guide-2.webp" alt="Two audio waveforms, representing the source and edited versions, sit side by side on a laptop screen" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen for the changed words, the transition around them, and the voice you intended to keep.</figcaption></figure><section><h2>Under what conditions did CPU offload reduce memory?</h2><p>The official README table records `torch.cuda.max_memory_allocated` during BF16 inference on one NVIDIA A800-SXM4-80GB and compares CPU offload disabled and enabled. Its two input conditions are text-only generation of 1.5 seconds and generation with five seconds of reference audio.</p><p>The table lets you compare each model under the same A800 conditions. Do not treat these figures as minimum memory requirements for another GPU. Check input duration, precision, and memory used by other applications before choosing an offload setting.</p><table><caption>Peak allocated memory by text/reference input on NVIDIA A800-SXM4-80GB with BF16</caption><thead><tr><th scope="col">Model and input</th><th scope="col">Offload off</th><th scope="col">Offload on</th></tr></thead><tbody><tr><th scope="row">AuK-Base, text-only, 1.5 s output</th><td>24.78 GiB</td><td>16.75 GiB</td></tr><tr><th scope="row">AuK-Base, 5 s reference audio</th><td>25.00 GiB</td><td>16.98 GiB</td></tr><tr><th scope="row">AuK-Flash, text-only, 1.5 s output</th><td>24.77 GiB</td><td>16.75 GiB</td></tr><tr><th scope="row">AuK-Flash, 5 s reference audio</th><td>24.97 GiB</td><td>16.98 GiB</td></tr></tbody></table><div><p><strong>Enable CPU offload for CUDA</strong></p><pre><code data-guide-code-block="4-0">auk-infer --cpu_offload \
  --audio assets/demo-input-audio/content-edit/content.wav \
  --instruction "Replace 'but accepting what we cannot have' with 'and living well with dreams unmet'." \
  --output out_content_edit.wav \
  --gen_seconds 7.0</code></pre></div></section><figure><img src="https://localai.co.kr/images/guides/auk-local-audio-editing-guide-3.webp" alt="An audio waveform is visible on a laptop beside a small speaker" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For cleanup, name the sound to keep and the noise or reverberation to reduce.</figcaption></figure><section><h2>Check the encoder license before commercial use.</h2><p>AuK code is MIT-licensed. Its required `Qwen/Qwen2.5-Omni-3B` encoder uses `qwen-research`, with non-commercial research and evaluation terms. Before integration into a commercial service, check the conditions for the code and every model component.</p><p>AuK fits short spoken edits, voice-over drafts, and recording cleanup. Choose a dedicated ASR system when you need document transcription or speaker timestamps across long recordings; when Korean output matters, start with a tool you can evaluate on Korean speech samples.</p><ul><li><a href="https://github.com/Tencent-Hunyuan/AuK">Official AuK installation, inference, and offload instructions</a></li><li><a href="https://huggingface.co/Qwen/Qwen2.5-Omni-3B">Required Qwen2.5-Omni-3B model card and license</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>AuK is a 1.5B model that generates speech or edits recordings from instructions. Provide a source file and replacement words to revise speech, or request noise and reverberation reduction. This guide starts with Python setup on CUDA and short-file editing, and also points to MLX on Mac and audio.cpp.</dd></div><div><dt>How much memory does it need?</dt><dd>For Apple Silicon, follow the MLX instructions on the official `feat/mlx-apple-silicon` branch. audio.cpp also supports AuK and Flash as experimental GGUF models. This guide's `--cpu_offload` command and A800 memory table concern CUDA; on Mac, use the installation documentation and model components for the chosen runtime.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>AuK code is MIT-licensed. Its required `Qwen/Qwen2.5-Omni-3B` encoder uses `qwen-research`, with non-commercial research and evaluation terms. Before integration into a commercial service, check the conditions for the code and every model component.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Orukeet local transcription: transcribe English and European-language audio</title><link>https://localai.co.kr/en/guides/orukeet-local-transcription-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/orukeet-local-transcription-guide</guid><description>Install Orukeet ASR on Mac, CPU, or CUDA and transcribe audio files to text. The guide clarifies that Korean is not among its 25 supported languages and distinguishes NeMo, ONNX, and native-weight licenses and the official FLEURS evaluation conditions.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Orukeet local transcription: transcribe English and European-language audio</h1><p>Orukeet is a local ASR model for transcribing English and European-language audio files.</p><p id="guide-page-summary">Orukeet is a 0.6B-class ASR model that converts recordings to text. It supports 25 languages centered on English and European languages, and its roughly 714 MB Q8 GGUF can run with Metal on Mac. Use the installer to prepare the model and runtime, then transcribe a short WAV file.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Supports 25 languages including English, French, and German. Korean and Japanese are not in the supported list.</li><li>The official native installer verifies Q8 weights and selects Apple Silicon Metal, detected CUDA, or CPU paths.</li><li>The 9.85% pooled WER on 25-language FLEURS used 20,146 recordings, greedy-batch TDT, FP32 weights, and CUDA BF16 autocast.</li></ol></section><section><h2>What languages does Orukeet transcribe, and what does it return?</h2><p>Orukeet is an automatic speech recognition (ASR) model that takes a recording and returns recognized words as text. Released on September 11, 2026, it is a 0.6B-class model based on NVIDIA Parakeet TDT 0.6B v3, according to its model card. Its main purpose is transcription, not speaker diarization or emotion scoring.</p><p>The model card lists 25 languages: Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, and Ukrainian. Korean and Japanese are not listed. If Korean recordings are your main workload, choose an ASR system that supports Korean.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/phonon-2-local-english-transcription-guide">Phonon 2: A Local English Transcription Guide</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/granite-speech-5-turboctc-local-guide">Transcribe English audio locally with Granite Speech 5 TurboCTC</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/orukeet-local-transcription-guide-1.webp" alt="A portable voice recorder sits beside a laptop showing an audio waveform" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First check that the recording language appears in Orukeet’s supported list.</figcaption></figure><section><h2>Choose an inference format before judging by hardware</h2><p>The original NeMo model is geared toward retraining and the official evaluation path; native GGUF is a simpler starting point for a local transcription app or a Mac. The native Q8 file is 714,456,704 bytes (about 714 MB), and the F16 file is about 1.30 GB. The compressed ONNX INT8 file is about 487 MB and about 672 MB when unpacked. Download size differs from RAM or VRAM use during inference, so it should not be treated as the memory requirement.</p><p>The native package can select Metal on Apple Silicon, CUDA when it detects an NVIDIA device, and CPU otherwise. The choice still depends on the runtimes available on the system, so keep the installation JSON’s `device`, `model`, and `runtime` values to identify the path used on later runs.</p><table><caption>Check model files and usage rights separately from code</caption><thead><tr><th scope="col">Path</th><th scope="col">Approximate artifact</th><th scope="col">Key note</th></tr></thead><tbody><tr><th scope="row">NeMo</th><td>2,509,342,720 bytes</td><td>Official evaluation path; requires NeMo</td></tr><tr><th scope="row">native Q8 GGUF</th><td>714,456,704 bytes</td><td>Metal, CUDA, or CPU runtime</td></tr><tr><th scope="row">ONNX INT8</th><td>486,807,585 bytes compressed; about 672 MB extracted</td><td>sherpa-onnx path</td></tr></tbody></table></section><section><h2>Start native transcription with Python 3.12 or later</h2><p>The official model card specifies Python 3.12 or later and the v0.1.1 wheel. Install the wheel in an activated virtual environment and use `orukeet install` to fetch the Q8 weights and native runtime. In an application, keep the `Orukeet` object alive and call `transcribe()` for each file instead of reloading the model every time.</p><p>Begin with a short WAV file and inspect both the returned `text` field and the installation JSON. If words are missing, first check that the language is supported, the file can be opened, and the selected runtime is installed. The Python snippet follows the model card’s interface; it was not executed as part of this writing task.</p><div><p><strong>Install the official v0.1.1 wheel</strong></p><pre><code data-guide-code-block="2-0">python -m pip install --upgrade \
  https://github.com/Oruk-AI/orukeet/releases/download/v0.1.1/orukeet-0.1.1-py3-none-any.whl
orukeet install --device auto --cache ./orukeet-cache --output installation.json</code></pre></div><div><p><strong>Transcribe one audio file</strong></p><pre><code data-guide-code-block="2-1">import json
from pathlib import Path
from orukeet import Orukeet

config = json.loads(Path("installation.json").read_text(encoding="utf-8-sig"))
with Orukeet(config["model"], config["runtime"], device=config["device"]) as asr:
    result = asr.transcribe("recording.wav")
    print(result["text"])</code></pre></div></section><figure><img src="https://localai.co.kr/images/guides/orukeet-local-transcription-guide-2.webp" alt="An open handwritten notebook sits beside a laptop displaying an audio waveform and transcript workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check omissions and punctuation on a short segment before processing longer files.</figcaption></figure><figure><img src="https://localai.co.kr/images/guides/orukeet-local-transcription-guide-3.webp" alt="Transcription desk with a compact Mac and monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the Metal runtime and device values from the installation JSON to identify the path used.</figcaption></figure><section><h2>Read the FLEURS score with its evaluation conditions</h2><p>Oruk AI reports that pooled WER on 25-language FLEURS changed from a baseline of 11.01% to 9.85% with Orukeet. The evaluation contains 20,146 audio recordings and uses the same NeMo greedy-batch TDT path, FP32 weights, and CUDA BF16 autocast. The 9.85% figure belongs to that dataset and inference setup; it is not an error-rate guarantee for every recording.</p><p>The paper states that LibriSpeech test-other was used for further adaptation and checkpoint selection. Since this evaluation material also informed model development, take that into account when interpreting results. For your recordings, compare missing or incorrect words using the same file and runtime settings.</p><table><caption>FLEURS aggregate across 25 languages with the same NeMo evaluation path.</caption><thead><tr><th scope="col">Model</th><th scope="col">Word error rate (WER)</th><th scope="col">Evaluation conditions</th></tr></thead><tbody><tr><th scope="row">Parakeet TDT 0.6B v3</th><td>11.01%</td><td>20,146 recordings, greedy-batch TDT, FP32 weights and CUDA BF16 autocast</td></tr><tr><th scope="row">Orukeet</th><td>9.85%</td><td>Same conditions</td></tr></tbody></table><ul><li><a href="https://arxiv.org/abs/2609.10054">Orukeet paper and evaluation method</a></li></ul></section><section><h2>Check the code and weight licenses separately</h2><p>The repository code is MIT-licensed, while the Hugging Face model card lists the weights and fitted kernels under CC BY-SA 4.0. If you modify or redistribute the model or weights, checking only the code license is insufficient. Review the weight terms separately, including attribution and share-alike requirements.</p><p>If your goal is local transcription of English or European-language recordings and you need transcript text with segment timing, inspect the native output and test a short sample. If speaker identity, emotion analysis, or Korean support is central, those needs fall outside the published scope and another tool is a better fit.</p><ul><li><a href="https://huggingface.co/oruk/orukeet">Official Orukeet model card, languages, and license</a></li><li><a href="https://oruk.ai/research/orukeet">Official Oruk AI Orukeet announcement</a></li></ul></section><section><h2>If the first run fails, check language, file, and runtime</h2><p>If download verification or runtime selection fails, check whether `installation.json` was created and whether its `device` and `runtime` paths match the current OS. If the model file is missing, inspect write permission on the `--cache` directory and confirm the Q8 file finished downloading. Because the native installer checks both model and runtime, do not start by changing the Python code before this step is resolved.</p><p>If the transcript is empty, first verify that the recording is in one of the model’s 25 listed languages and that its format and audio track can be read. If a transcript appears but omits words, test the same short segment in a supported language and separate input audibility from transcription behavior. Check performance in another language with recordings in that language.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Orukeet is a 0.6B-class ASR model that converts recordings to text. It supports 25 languages centered on English and European languages, and its roughly 714 MB Q8 GGUF can run with Metal on Mac. Use the installer to prepare the model and runtime, then transcribe a short WAV file.</dd></div><div><dt>How much memory does it need?</dt><dd>The original NeMo model is geared toward retraining and the official evaluation path; native GGUF is a simpler starting point for a local transcription app or a Mac. The native Q8 file is 714,456,704 bytes (about 714 MB), and the F16 file is about 1.30 GB. The compressed ONNX INT8 file is about 487 MB and about 672 MB when unpacked. Download size differs from RAM or VRAM use during inference, so it should not be treated as the memory requirement.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Oruk AI reports that pooled WER on 25-language FLEURS changed from a baseline of 11.01% to 9.85% with Orukeet. The evaluation contains 20,146 audio recordings and uses the same NeMo greedy-batch TDT path, FP32 weights, and CUDA BF16 autocast. The 9.85% figure belongs to that dataset and inference setup; it is not an error-rate guarantee for every recording.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Backburner: Accelerate Mac LLM Prefill with an iPhone</title><link>https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide</guid><description>Backburner is a pre-release project that uses a USB-C-connected iPhone to extend Qwen3.8-27B prefill and context on a Mac. Review supported devices, published benchmarks, setup steps, and security conditions.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Backburner: Accelerate Mac LLM Prefill with an iPhone</h1><p>A USB-C-connected iPhone shares long-input processing and context storage with your Mac.</p><p id="guide-page-summary">Backburner is an experimental llama.cpp fork that connects an iPhone to a Mac over USB-C to process long Qwen3.8-27B inputs faster and keep part of context beyond 64K in the phone's memory. Published measurements are limited to an M4 Pro 24GB paired with an iPhone 17 Pro Max. The guide separates prefill and decode figures and explains the phone's role.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>In published tests reading 2,000-token inputs, the iPhone cut prefill wait by 31%, 22%, and 23% at 16K, 32K, and 48K context.</li><li>Up to 64K, the Mac runs layers 1–40 and the iPhone runs layers 41–64; beyond that, the iPhone computes attention over older KV pages.</li><li>At 27K–33K context, the same fork decoded at 25.0 tok/s on the Mac alone and 25.1 tok/s with the iPhone.</li></ol></section><section><h2>Backburner is a local LLM server that splits work between a Mac and iPhone</h2><p>Backburner splits Qwen3.8-27B computation between a Mac and an iPhone connected over USB-C. Keep the Backburner app open in the foreground on the iPhone so it can help process long prompts during prefill. Beyond 64K context, the iPhone stores part of the older context’s KV cache and performs attention computation. Compatible client apps can receive responses through the Mac’s OpenAI-compatible server.</p><p>While the Mac computes the earlier layers, the iPhone computes the later ones, using both devices' GPUs. The Mac engine also includes a DFlash2 draft model and kernel optimizations. The default configuration processes one request at a time.</p><ul><li><a href="https://github.com/StayLameBro/backburner">Backburner repository and full setup</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/apple-minions-idle-mac-inference-guide">What is Apple Minions? Sharing inference jobs across idle Macs</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/backburner-iphone-mac-local-llm-guide-1.webp" alt="An aluminum laptop connected by USB-C to a smartphone in a stand on a wooden desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Mac runs the model while the iPhone shares long-input processing and context storage.</figcaption></figure><section><h2>The difference appears when reading long inputs</h2><p>Prefill reads the prompt, document, or tool result sent to the model and prepares it to answer. In tests that added a 2,000-token file or tool result to a saved agent session, the Mac-plus-iPhone setup processed more tokens per second and waited less than the Mac alone as the existing context grew. These results were recorded on October 1, 2026, with a 24 GB M4 Pro, iPhone 17 Pro Max, and Qwen3.8-27B IQ4_XS; each depth was read twice.</p><table><caption>Prefill throughput and waiting time when adding 2,000 tokens to a saved session.</caption><thead><tr><th scope="col">Existing context</th><th scope="col">Mac alone</th><th scope="col">Mac + iPhone</th><th scope="col">Less time waiting</th></tr></thead><tbody><tr><th scope="row">16K</th><td>109 tok/s · 18.8 s</td><td>157 tok/s · 13.1 s</td><td>31%</td></tr><tr><th scope="row">32K</th><td>101 tok/s · 20.3 s</td><td>130 tok/s · 15.8 s</td><td>22%</td></tr><tr><th scope="row">48K</th><td>87 tok/s · 23.5 s</td><td>113 tok/s · 18.1 s</td><td>23%</td></tr></tbody></table><p>Existing context is what was already in the conversation before the new input. At 16K, reading approximately the same 2,000 tokens took 13.1 seconds instead of 18.8—about 5.7 seconds less waiting per read. This matters when a coding agent repeatedly reads files or tool results. New inputs shorter than roughly 512 tokens stay on the Mac.</p><ul><li><a href="https://github.com/StayLameBro/backburner#results">Published prefill and session benchmarks with measurement scripts</a></li></ul></section><section><h2>Beyond 64K, iPhone memory holds older context</h2><p>In the default setup up to 64K, the Mac computes layers 1–40 and the iPhone 17 Pro Max computes layers 41–64. Once context exceeds the Mac's 64K cells, the Mac computes all 64 layers, while the iPhone stores older KV pages and calculates attention over them. The iPhone GPU and Neural Engine participate in this older-context computation.</p><p>The Mac-only long-context configuration uses 4-bit KV. Connecting an iPhone can retain 8-bit KV while storing longer context. Published end-to-end tests reached 128K with 8-bit KV and 140K with 4-bit KV. The 196K–229K capacity shown at startup is calculated from the iPhone's free memory.</p><table><caption>Compare KV precision alongside the context lengths actually tested.</caption><thead><tr><th scope="col">Setup</th><th scope="col">Context</th><th scope="col">Evidence</th></tr></thead><tbody><tr><th scope="row">M4 Pro 24 GB, Mac alone</th><td>8-bit 64K</td><td>Measured · 128K uses a 4-bit configuration</td></tr><tr><th scope="row">M4 Pro 24GB + iPhone 17 Pro Max</th><td>8-bit 196K–229K</td><td>Capacity calculated from free memory at startup</td></tr><tr><th scope="row">M4 Pro 24GB + iPhone 17 Pro Max</th><td>8-bit 128K</td><td>End-to-end tested</td></tr><tr><th scope="row">M4 Pro 24GB + iPhone 17 Pro Max</th><td>4-bit 140K</td><td>End-to-end tested</td></tr></tbody></table><ul><li><a href="https://github.com/StayLameBro/backburner#context-you-can-hold">Context capacity and long-context test conditions</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/backburner-iphone-mac-local-llm-guide-2.webp" alt="Close view of a data cable connected to the USB-C ports on a Mac and iPhone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The published prefill comparison used two devices connected with a 10 Gb/s USB-C cable.</figcaption></figure><section><h2>Decode speed was almost unchanged below 64K</h2><p>Decode generates reply tokens in sequence and mainly benefits from the Mac engine's optimizations. In the published 27K–33K comparison, stock llama.cpp recorded 11.3 tok/s, the Backburner fork on Mac alone 25.0 tok/s, and the fork with iPhone 25.1 tok/s. Within the same fork, adding the iPhone barely changed generation speed. Faster input processing and faster answer generation are separate benefits.</p><table><caption>Published decode throughput at the same 27K–33K context.</caption><thead><tr><th scope="col">Runtime setup</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">stock llama.cpp (Homebrew), Mac</th><td>11.3 tok/s</td></tr><tr><th scope="row">Backburner fork, Mac alone</th><td>25.0 tok/s</td></tr><tr><th scope="row">Backburner fork, Mac + iPhone</th><td>25.1 tok/s</td></tr></tbody></table><p>The fork includes optimized Mac kernels and a DFlash2 draft model. Beyond 64K, the iPhone also shares attention over older context; the project recorded 12.6 tok/s at 128K. That long-context result has no Mac-only comparison measured on the same day.</p><ul><li><a href="https://github.com/StayLameBro/backburner#writing-decode">Decode throughput and measurement conditions</a></li></ul></section><section><h2>Check the devices and cable before installing</h2><p>The normal installer targets Apple-silicon Macs with macOS 14 or later and at least 24 GB of unified memory. The phone app supports iPhone 15 Pro or later and M-series iPads; the main published speed tables use an M4 Pro with 24 GB and iPhone 17 Pro Max. iPad performance remains untested. For prefill acceleration, use a USB-C cable rated for 10 Gb/s data transfer rather than the included USB 2 cable.</p><p>The Mac downloads about 24 GB of files including the main and draft models. A fresh install can download or create about 28 GB including tools and files for the phone. The installer checks for at least 24 GB of Mac memory and recommends 30 GB of free space on the home disk. The main model file is about 15.5 GB and the draft model about 1.3 GB.</p><p>A separate split-decode mode can distribute model layers for an 8 GB Mac. The project tested Qwen3.8-27B IQ2_XS on a MacBook Neo with 8 GB and an iPhone Air at roughly 4 tok/s. This is a different experiment with USB 2 and device-temperature conditions, separate from the 24 GB Mac setup below.</p><ul><li><a href="https://github.com/StayLameBro/backburner/blob/main/docs/INSTALL-IPHONE.md">iPhone app installation, signing, and memory budget</a></li><li><a href="https://github.com/StayLameBro/backburner/blob/main/docs/SPLIT-DECODE.md">Split-decode tests and conditions for 8 GB Macs</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/backburner-iphone-mac-local-llm-guide-3.webp" alt="A workstation with a long document open on a Mac beside an iPhone with its screen on" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting a long input between a Mac and iPhone can reduce the wait before the first answer.</figcaption></figure><section><h2>Review the installer, then start the server</h2><p>The Mac installer prepares the latest engine, Qwen3.8-27B IQ4_XS, the DFlash2 draft model, the model-layer file for the phone, and a `backburner` command. Download the script as a file and review it before running it instead of piping it directly from the internet into a shell. The path below fetches the current main-branch script from the official repository.</p><p>Install the iPhone app either through AltStore with a free Apple ID or through Xcode. The AltStore instructions say free accounts must refresh app signing every seven days and recommend AltStore 2.2 or later for Backburner's memory entitlement. Open the app and keep it in front, then copy the phone-side model file from the Mac once. Running `backburner` starts the server at `http://127.0.0.1:8080/v1`; by default, the port is accessible only from the Mac itself.</p><p>The commands below use the default layer-40 split for the iPhone 17 Pro family. For an A18 Pro iPhone 16 Pro, change the install command to `TAIL_L=52 bash "$backburner_setup/install.sh"` to reduce the layers assigned to the phone. The installer does not automatically choose this device-specific split.</p><div><p><strong>Review the installer, then start the Mac server</strong></p><pre><code data-guide-code-block="5-0">backburner_setup="$(mktemp -d)"
curl -fsSL https://raw.githubusercontent.com/StayLameBro/backburner/main/install.sh -o "$backburner_setup/install.sh"
less "$backburner_setup/install.sh"
bash "$backburner_setup/install.sh"

# Connect the phone with Backburner installed and open.
"$HOME/.local/bin/backburner" phone
"$HOME/.local/bin/backburner"</code></pre><p><small>The first `backburner` run loads the model and checks the iPhone connection. After a reboot, the GPU wired-memory limit returns to its default and the command may ask for authorization again.</small></p></div><ul><li><a href="https://github.com/StayLameBro/backburner/blob/main/install.sh">Installer checks and downloaded files</a></li><li><a href="https://github.com/StayLameBro/backburner/blob/main/scripts/serve.sh">Server defaults and Mac-only setting</a></li></ul></section><section><h2>Test a first response and check connection issues</h2><p>Set a compatible client app's server URL to `http://127.0.0.1:8080/v1`. Sending a simple request in Terminal first makes it easier to separate client configuration problems from model-response problems. The server accepts an arbitrary model name, so you can use `backburner-local` as shown.</p><p>Leave the server terminal running and send the request below from another terminal. Successful startup shows `split prefill on`, `remote KV on`, and `ANE pages on`. The first run may spend about a minute transferring Neural Engine files and reopening the app. Check for HTTP 200 with `curl -i http://127.0.0.1:8080/health`, then send a chat request.</p><p>If the connection drops, reopen Backburner in the iPhone foreground and check the cable. Above 64K, the iPhone holds older KV; locking it or switching apps can stop the server after 15 seconds without a response. Reopen the app and restart the Mac server. Guided Access can help prevent accidental locking during a run.</p><p>If the iPhone 17 Pro Max reports an `app budget` near 3,000 MiB instead of approximately 6,000 MiB, check its memory entitlement. Run `scripts/phone-up.sh` from the repository folder to display the value. The official guide recommends AltStore 2.2 or later, while the developers are still verifying entitlement preservation through this path. If the smaller budget remains, review the Xcode route and memory-entitlement settings.</p><p>After a Mac reboot, the `backburner` command can request an administrator password to reset the GPU wired-memory limit. This pins memory for the model, so leave headroom for other apps. Use the command below only if running the repository's `scripts/serve.sh` directly fails with a wired-limit error. The 20,480 MiB value is for this guide's 24 GB Mac configuration.</p><div><p><strong>Check an OpenAI-compatible chat request</strong></p><pre><code data-guide-code-block="6-0">curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"backburner-local","messages":[{"role":"user","content":"로컬 모델이 준비됐는지 한 문장으로 알려줘."}],"max_tokens":64}'</code></pre><p><small>A successful response contains the model's reply inside the JSON `choices` field.</small></p></div><div><p><strong>Set the GPU wired-memory limit after reboot</strong></p><pre><code data-guide-code-block="6-1">sudo sysctl iogpu.wired_limit_mb=20480</code></pre><p><small>This 24 GB Mac configuration uses a 20,480 MiB limit so the GPU can keep the model in memory.</small></p></div><ul><li><a href="https://github.com/StayLameBro/backburner/blob/main/docs/INSTALL-IPHONE.md">iPhone app memory budget and Guided Access setup</a></li><li><a href="https://github.com/StayLameBro/backburner/blob/main/SECURITY.md">App connection scope and security design</a></li></ul></section><section><h2>Know the pre-release limits and test on your devices</h2><p>Backburner is pre-release software under the MIT license. Keep the iPhone app open in the foreground while using its GPU. At 64K context or below, the Mac recomputes if the connection drops. Above 64K, the iPhone stores older KV cache pages, so the Mac cannot continue that conversation after losing the connection. The default processes one request at a time; start with personal use.</p><p>The Mac server and prompt-cache proxy bind only to `127.0.0.1`. Connect the iPhone with USB-C; Wi-Fi requires pairing over the cable first. Use app 0.0.3 or later, which includes these connection protections.</p><p>For an initial test, read the same familiar document at 16K, 32K, and 48K. Record first-input processing time, answer-generation speed, and connection status separately with the Mac alone and the iPhone attached. This shows which wait Backburner reduces in your workflow. Use beyond-64K context only when your work needs it, and account for the phone's memory budget and the time its app must remain in front.</p><p>The SSD prompt cache helps reuse system prompts already processed. Saving a beyond-64K session with KV held on the phone requires app 0.0.4 or later. That save path has only been tested with a Mac loopback substitute, not a real iPhone. Start by comparing reads and connectivity within 64K.</p><ul><li><a href="https://github.com/StayLameBro/backburner/blob/main/LICENSE">Project MIT license</a></li><li><a href="https://github.com/StayLameBro/backburner/blob/main/SECURITY.md">Security notes and app connection scope</a></li><li><a href="https://github.com/StayLameBro/backburner#limits">Long-session saving and current support</a></li></ul></section><aside><h2>Check Backburner setup and current device support</h2><p>Review the current installer, app version, supported devices, and security notes in the repository.</p><a href="https://github.com/StayLameBro/backburner">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Backburner is an experimental llama.cpp fork that connects an iPhone to a Mac over USB-C to process long Qwen3.8-27B inputs faster and keep part of context beyond 64K in the phone's memory. Published measurements are limited to an M4 Pro 24GB paired with an iPhone 17 Pro Max. The guide separates prefill and decode figures and explains the phone's role.</dd></div><div><dt>How much memory does it need?</dt><dd>The Mac-only long-context configuration uses 4-bit KV. Connecting an iPhone can retain 8-bit KV while storing longer context. Published end-to-end tests reached 128K with 8-bit KV and 140K with 4-bit KV. The 196K–229K capacity shown at startup is calculated from the iPhone's free memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What Is Superfluid? Run Multiple Agents on One Local LLM</title><link>https://localai.co.kr/en/guides/superfluid-local-multi-agent-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/superfluid-local-multi-agent-serving-guide</guid><description>Serve GGUF and MLX models through a local API with Superfluid. Follow a Qwen3.8-27B example, prioritize interactive chat, configure concurrency and memory, and interpret the published benchmarks.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What Is Superfluid? Run Multiple Agents on One Local LLM</h1><p>Let a short chat request go first while agents process long documents.</p><p id="guide-page-summary">Superfluid is a server that lets several apps and agents share an LLM on your computer. Apps send prompts through an API; an engine such as llama.cpp or MLX generates the replies, while Superfluid manages request priority and concurrency. It is useful when you want to chat while several document summaries are running.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>GGUF models use llama.cpp; MLX models on Apple Silicon use the MLX engine.</li><li>Mark chat requests as `interactive` so they can be prioritized among agent workloads.</li><li>Start with two concurrent requests and a 4,096-token context, then increase them while checking memory headroom.</li></ol></section><section><h2>When several apps share one model</h2><p>Suppose three agents are summarizing three documents. A short question sent from your chat window may have to wait behind those long inputs. Alongside the model that writes the answers, you need a server that manages how the requests are processed.</p><p>Superfluid batches requests and provides a priority for time-sensitive chat. It also reuses cached prefixes when agents repeatedly send the same instructions or document opening. Instead of starting a separate model for each app, the apps share one server address.</p><p>It supports OpenAI, Anthropic and Ollama API formats, so existing compatible clients can connect. We will start by sending a short question through its OpenAI-compatible API, then separate chat and agent priorities.</p><ul><li><a href="https://github.com/basecompute/superfluid">Superfluid project</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/superfluid-local-multi-agent-serving-guide-scene-1.webp" alt="Chat, code and folder windows sharing one model stack on a laptop screen" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Route several apps' prompts to one local server.</figcaption></figure><section><h2>Start with MLX or GGUF on Mac, and GGUF on Linux</h2><p>Superfluid selects an engine based on the model format. GGUF files run through llama.cpp; MLX models on Apple Silicon use MLX. You can also point it at a downloaded model file or directory.</p><p>Apple Silicon Macs can use Metal and MLX. On Linux x86-64, llama.cpp provides CUDA, ROCm, Vulkan and CPU paths. A Windows installation procedure is not currently provided, so this guide covers Mac and Linux.</p><p>Leave memory for model weights and conversation caches after installation. Before trying Qwen3.8-27B Q4, check that your current machine can run it. If loading the model is the problem, start with the memory and file-format steps in the Qwen3.8-27B guide.</p><table><caption>Choose the engine for your model format</caption><thead><tr><th scope="col">Format</th><th scope="col">Engine</th><th scope="col">Starting point</th></tr></thead><tbody><tr><th scope="row">GGUF</th><td>llama.cpp</td><td>Select a GGUF file on Mac or Linux</td></tr><tr><th scope="row">MLX</th><td>MLX</td><td>Select an MLX directory on Apple Silicon</td></tr><tr><th scope="row">.base</th><td>baseRT</td><td>Prepare the separate engine and its bundle</td></tr></tbody></table><ul><li><a href="https://github.com/basecompute/superfluid/blob/main/docs/getting_started/installation.md">Installation and platform support</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B guide</a></li></ul></section><section><h2>Start Qwen3.8-27B and get the first reply</h2><p>Install Superfluid using its Mac or Linux instructions, then run the commands below. They print the version and start Qwen3.8-27B UD-Q4_K_M with two concurrent requests and a 4,096-token context. The first run downloads the model and llama.cpp runtime, requiring internet access and storage.</p><p>Once the server is ready, query its health and model list from another terminal. A `status` of `ok` from `/health` and the model appearing in `/v1/models` mean it is ready for prompts. Leave the quantization tag `:UD-Q4_K_M` out of the request's model name.</p><p>After receiving a reply, set your client's API base URL to `http://127.0.0.1:8453/v1` and select the same model. This example is accessible only on the same computer. If the client requires a key field, a placeholder can be used with this keyless local server.</p><div><p><strong>Terminal 1 — start the server</strong></p><pre><code data-guide-code-block="2-0">superfluid --version
superfluid serve unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M --http 127.0.0.1:8453 --max-batch 2 --max-context 4096</code></pre><p><small>Keep this terminal running and send the next requests from another terminal.</small></p></div><div><p><strong>Terminal 2 — check health and ask a question</strong></p><pre><code data-guide-code-block="2-1">curl -sS http://127.0.0.1:8453/health
curl -sS http://127.0.0.1:8453/v1/models
curl -sS http://127.0.0.1:8453/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"unsloth/Qwen3.8-27B-GGUF","messages":[{"role":"user","content":"Explain prefix caching in two sentences."}],"max_tokens":128}'</code></pre><p><small>Read the generated answer in the response's `choices` field.</small></p></div><ul><li><a href="https://github.com/basecompute/superfluid/blob/main/docs/getting_started/quickstart.md">Quickstart and API connection</a></li></ul></section><figure><img src="https://localai.co.kr/guides/superfluid-local-multi-agent-serving-guide-scene-2.webp" alt="A terminal on a laptop with memory blocks beside a compact computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave cache space for concurrent conversations as well as model weights.</figcaption></figure><section><h2>Prioritize your chat over agent work</h2><p>Once connected, separate interactive chat from automated work. Superfluid treats HTTP requests as `agent` by default. Add the `x-superfluid-qos: interactive` header to your own questions and use `background` for less urgent batch summaries.</p><p>When all lanes are occupied by agents, a higher-priority request can pause lower-priority work and let chat run first. The waiting work then resumes. If your chat app does not support custom headers, check its connection settings or test the feature with an API request first.</p><p>Put shared instructions at the start in a consistent order to make prefix reuse effective. Keep common instructions, the shared document and the individual question in that order. To check the effect on repeat questions, resend the same document and compare the wait until the first generated text appears.</p><div><p><strong>Set priority on a chat request</strong></p><pre><code data-guide-code-block="3-0">curl -sS http://127.0.0.1:8453/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'x-superfluid-qos: interactive' \
  -d '{"model":"unsloth/Qwen3.8-27B-GGUF","messages":[{"role":"user","content":"Reply with one short sentence."}],"max_tokens":64,"stream":true}'</code></pre><p><small>For a less urgent request, change the same header's value to `background`.</small></p></div><ul><li><a href="https://github.com/basecompute/superfluid/blob/main/docs/features/scheduling.md">Scheduling and priority</a></li></ul></section><figure><img src="https://localai.co.kr/guides/superfluid-local-multi-agent-serving-guide-scene-3.webp" alt="A chat window and task-card trays arranged by priority beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Serve your interactive questions first while background tasks wait.</figcaption></figure><section><h2>Separate total throughput from one reply's speed</h2><p>Batching more requests can increase the total number of tokens completed in a given time. Since several replies are being generated at once, also compare how quickly each individual reply advances. The right configuration depends on whether you want a batch of summaries to finish sooner or your own reply to arrive faster.</p><table><caption>Superfluid with llama.cpp · throughput by concurrency</caption><thead><tr><th scope="col">Concurrent requests</th><th scope="col">Total tok/s</th><th scope="col">Mean tok/s per request</th></tr></thead><tbody><tr><th scope="row">1</th><td>76.7</td><td>76.7</td></tr><tr><th scope="row">2</th><td>87.6</td><td>43.8</td></tr><tr><th scope="row">4</th><td>126.5</td><td>31.6</td></tr><tr><th scope="row">8</th><td>150.8</td><td>18.9</td></tr></tbody></table><p>Published measurement · 2026-10-06 · M1 Max 64GB · Qwen3-4B Q4_K_M · llama.cpp b11284 · 256 output tokens per request · temperature 0 · distinct inputs · median of three rounds. The per-request figures are aggregate throughput divided by concurrency. [Method and full results](https://github.com/basecompute/superfluid/blob/main/docs/performance/benchmarks.md)</p><p>In this comparison, increasing concurrency from one to eight raised total throughput from 76.7 to 150.8 tok/s. The average received by each request fell from 76.7 to 18.9 tok/s. Start with low concurrency for personal chat; for several automated summaries, increase it while comparing total completion time.</p></section><section><h2>If memory runs short or the connection fails</h2><p>If the model will not load, use `superfluid runtimes` to check the engine state and device path. You can supply a downloaded GGUF file path instead of a model ID. If downloads complete but memory runs out, reduce concurrency to one and retry with a 4,096-token context.</p><p>If API access fails, check `/health` first. If health works but the app fails, match the `/v1` suffix and the model-list ID. If another program uses port 8453, stop the old server and change the start option to `--http 127.0.0.1:8455`. Use 8455 for health, model-list and chat requests, and set the app's base address to `http://127.0.0.1:8455/v1`.</p><p>Keep `127.0.0.1` for use on your own computer. Before sharing with other devices, configure an API key and HTTPS. Prompts and replies are stored under `~/.superfluid/sessions` by default, so manage that directory's access permissions and backup scope when processing sensitive documents.</p><p>Superfluid is currently pre-1.0. Keep your existing server setup for important automated work and test on a separate port, expanding from client connection to long documents and concurrent requests. If you are new to agents, start with the local agent guide. For a Mac management interface, also compare oMLX.</p><ul><li><a href="https://github.com/basecompute/superfluid/blob/main/docs/deployment/security.md">Connection and stored-data security</a></li><li><a href="https://github.com/basecompute/superfluid/blob/main/docs/serving/cli.md">Options and exit codes</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">local agent guide</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">oMLX</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Superfluid is a server that lets several apps and agents share an LLM on your computer. Apps send prompts through an API; an engine such as llama.cpp or MLX generates the replies, while Superfluid manages request priority and concurrency. It is useful when you want to chat while several document summaries are running.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</title><link>https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide</guid><description>Underdog Saluki packs Qwen3.8-27B into a 7.89 GB GGUF. Set it up on Mac or NVIDIA, send a first prompt, plan memory for an 8 GB GPU, and explore tool calls and image input.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</h1><p>Before switching to a smaller model, consider smaller weights for a 27B model.</p><p id="guide-page-summary">Underdog Saluki 27B 1.0 compresses Qwen3.8-27B with roughly two-bit mixed quantization. Load its 7.89 GB GGUF in llama.cpp to answer questions locally and serve replies to connected apps. Conversation state needs memory alongside the weights, so start with a short context and expand it after checking available memory.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Leave memory for KV cache and the runner alongside the 7.89 GB GGUF.</li><li>Start with standard llama.cpp; NVIDIA's NInfer uses a separate converted artifact.</li><li>Confirm the setup with a short prompt, then try your documents and tool calls.</li></ol></section><section><h2>Saluki puts Qwen3.8 27B into a smaller file</h2><p>If memory has kept you on smaller models despite wanting to try Qwen3.8-27B, Saluki offers another option. It keeps the 27 billion parameters while reducing the bits used to store their weights. The download is a 7.89 GB GGUF, a format supported by many local runners.</p><p>Here we load the model in llama.cpp and start a server on port 8080 of your own computer. Once ready, it can connect to web chat or an OpenAI-compatible app. The weights are released under Apache 2.0, supporting personal workflows and services that follow the license terms.</p><ul><li><a href="https://huggingface.co/ConwayResearch/Underdog-Saluki-27B-1.0">Saluki download and runtime settings</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li><li><a href="https://localai.co.kr/en/guides/kanana-2-3b-embedding-korean-rag-guide">Building a Korean RAG index with Kakao's Kanana-2 3B embedding</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-saluki-01.webp" alt="A laptop, black PC, connected external SSD, and notebook on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Try a compact 27B GGUF on the computer you already have.</figcaption></figure><section><h2>Budget for conversation state on an 8 GB GPU</h2><p>A 7.89 GB file looks close to an 8 GB graphics card's capacity, but running it uses more than the weights. KV cache for the conversation, intermediate calculations, and display applications share GPU memory. A long document can exhaust the remaining space early.</p><p>The example below limits context to 4,096 tokens and chooses the GPU load automatically. Parts that do not fit in GPU memory can use system RAM, which must also have room for the model and operating system. Start with your existing 8GB GPU, then use Task Manager or Activity Monitor to check RAM and GPU memory use and the time to the first answer.</p><p>On Apple Silicon, the CPU and GPU share unified memory. Close other apps and start with a short prompt to see how much room your Mac has. If longer conversations sharply increase swap or slow replies, reduce the context.</p><ul><li><a href="https://localai.co.kr/en/guides/llm-quantization">Understand quantization and file size</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-saluki-02.webp" alt="A dual-fan graphics card, external SSD, and open notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave room for conversation state and computation after loading the model.</figcaption></figure><section><h2>Prepare a folder and download the model</h2><p>On Mac or Linux, prepare Python 3, Git, and CMake. Mac also needs Xcode Command Line Tools. If you use Homebrew, `brew install git cmake` installs the build tools; run `xcode-select --install` and complete its installation dialog for Xcode tools.</p><p>These commands create a Python environment inside `saluki-local` and save the model under `models`. The weights alone download nearly 8 GB; leave additional disk space for the runner and temporary files. Run the following steps from the same `saluki-local` folder.</p><div><p><strong>Mac/Linux: working folder and GGUF download</strong></p><pre><code data-guide-code-block="2-0">mkdir -p saluki-local
cd saluki-local
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U huggingface_hub
hf download ConwayResearch/Underdog-Saluki-27B-1.0 Underdog-Saluki-27B-1.0-IQ2-mix.gguf --local-dir models</code></pre><p><small>The IQ2-mix.gguf file appears in models when the download finishes.</small></p></div><ul><li><a href="https://huggingface.co/docs/huggingface_hub/guides/cli">Hugging Face download commands</a></li></ul></section><section><h2>Use Metal on Mac and CUDA on NVIDIA</h2><p>Building llama.cpp gives you a runner for your device. Mac builds enable the Metal GPU backend by default. After the Mac commands finish, `llama.cpp/build/bin/llama-server` is the executable for the next step.</p><p>On Linux with an NVIDIA GPU, install the driver and CUDA Toolkit, then use the CUDA build commands instead of the Mac commands. Check that `nvidia-smi` lists the GPU and `nvcc --version` reports the toolkit before building.</p><p>On Windows, extract a CUDA build from the llama.cpp releases and run `llama-server.exe` in PowerShell. Replace the executable path in the server command below. A source build also needs Visual Studio C++ tools and the CUDA Toolkit.</p><div><p><strong>Mac: build the Metal runner</strong></p><pre><code data-guide-code-block="3-0">git clone https://github.com/ggml-org/llama.cpp.git
cmake -S llama.cpp -B llama.cpp/build
cmake --build llama.cpp/build --config Release --target llama-server -j 4</code></pre></div><div><p><strong>NVIDIA Linux: build the CUDA runner</strong></p><pre><code data-guide-code-block="3-1">git clone https://github.com/ggml-org/llama.cpp.git
cmake -S llama.cpp -B llama.cpp/build -DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release --target llama-server -j 4</code></pre></div><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md">Build llama.cpp for your device</a></li><li><a href="https://github.com/ggml-org/llama.cpp/releases">Windows binaries</a></li></ul></section><section><h2>Start the server and send a first prompt</h2><p>Start the server in one terminal. Wait for model loading and the listening message, then open a second terminal. Once `/health` reports a healthy state, send the prompt below. Binding to `127.0.0.1` keeps access on the current computer.</p><p>For this short setup check, thinking is disabled so the answer can arrive directly. A sentence in `choices[0].message.content` confirms generation. Next, replace the question with an excerpt from a document you normally summarize. For tasks needing longer reasoning, set `enable_thinking` to `true` and allow more output tokens.</p><div><p><strong>Terminal 1: local server</strong></p><pre><code data-guide-code-block="4-0">./llama.cpp/build/bin/llama-server -m models/Underdog-Saluki-27B-1.0-IQ2-mix.gguf --alias saluki27b --jinja -ngl auto -fa on -c 4096 --host 127.0.0.1 --port 8080</code></pre><p><small>Leave this terminal running. Ctrl+C stops the server.</small></p></div><div><p><strong>Terminal 2: health check and first request</strong></p><pre><code data-guide-code-block="4-1">curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"saluki27b","messages":[{"role":"user","content":"Explain local AI in two sentences."}],"max_tokens":128,"temperature":0,"chat_template_kwargs":{"enable_thinking":false}}'</code></pre></div><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama.cpp server and API options</a></li></ul></section><section><h2>Test tool calls and math tasks separately</h2><p>If you want Saluki to power an agent as well as summarize documents, test ordinary replies and tool calls separately. In a tool call, the model selects a function name and arguments: for example, a search phrase for a notes function, followed by a reply based on the results returned by the app.</p><p>In the developer's 120-task tool-call run, Saluki passed 88 tasks and the original Qwen3.8-27B passed 84. For complex mathematical reasoning, compare solution quality alongside memory savings. Saluki scored 79.2 on AIME 2025; the original model's public reference score was 96.7.</p><table><caption>Tool-call tasks passed by Saluki and the original</caption><thead><tr><th scope="col">Model</th><th scope="col">Tasks passed</th></tr></thead><tbody><tr><th scope="row">Underdog Saluki 27B 1.0</th><td>88 / 120</td></tr><tr><th scope="row">Qwen3.8-27B</th><td>84 / 120</td></tr></tbody></table><p>Developer evaluation · Tool calls: 120 UnderdogBench tasks, thinking off, temperature 0. AIME 2025: Saluki average@4; the original's public reference uses a different evaluation setup.</p><p>Start with read-only tools such as notes search rather than deletion or payments. Keep roughly ten prompts from your real work so you can compare search phrases, argument formatting, and final replies when changing models.</p><ul><li><a href="https://huggingface.co/ConwayResearch/Underdog-Saluki-27B-1.0#benchmarks">Tool-call, coding, and reasoning evaluations</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-saluki-03.webp" alt="A landscape photo, documents, and pen beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A fixed set of real prompts makes replies and tool calls easier to compare.</figcaption></figure><section><h2>Add a separate file for image input</h2><p>Once text prompts work, you can add image input. Download an mmproj file beside the weights and pass it to the server so images can be encoded for the model. The Q8_0 file is 629 MB; F16 is 928 MB. Q8_0 is a smaller starting option.</p><p>After downloading, stop the running server with Ctrl+C and append `--mmproj models/mmproj-Underdog-Saluki-27B-1.0-Q8_0.gguf` to its command. Restart, attach a simple screenshot in the web chat if image upload is available, and ask for a summary. Add this after checking the memory left by text-only operation, since image processing also consumes memory.</p><div><p><strong>Download the image projection file</strong></p><pre><code data-guide-code-block="6-0">hf download ConwayResearch/Underdog-Saluki-27B-1.0 mmproj-Underdog-Saluki-27B-1.0-Q8_0.gguf --local-dir models</code></pre></div></section><section><h2>Resolve the first-run problems in this order</h2><p>For `hf: command not found`, reactivate the environment with `source .venv/bin/activate`. If the command is still missing, run `python -m pip install -U huggingface_hub` again. For a missing model file, check that the current folder is `saluki-local` and the path begins with `models`.</p><p>If `auto` is not recognized or the model format fails to load, update llama.cpp to a current release first. For GPU memory errors, close GPU-using apps and try a context below 4,096. If loading still fails, replace `-ngl auto` with `-ngl 0` to test from system RAM; the extra CPU work can make replies slower.</p><p>For `connection refused`, check that the server terminal is still running and using port 8080. If another app occupies that port, change both `--port` and the request URL. Ctrl+C stops the server when you finish; the model stays on disk for the next run.</p><p>For faster answer generation on NVIDIA, continue with the NInfer guide. If long documents delay the first answer on Mac, see the Splash guide for ways to reduce input-processing time.</p><ul><li><a href="https://localai.co.kr/en/guides/ninfer-qwen38-nvidia-local-guide">NInfer setup guide</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Splash prefill and cache guide</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Underdog Saluki 27B 1.0 compresses Qwen3.8-27B with roughly two-bit mixed quantization. Load its 7.89 GB GGUF in llama.cpp to answer questions locally and serve replies to connected apps. Conversation state needs memory alongside the weights, so start with a short context and expand it after checking available memory.</dd></div><div><dt>How much memory does it need?</dt><dd>If memory has kept you on smaller models despite wanting to try Qwen3.8-27B, Saluki offers another option. It keeps the 27 billion parameters while reducing the bits used to store their weights. The download is a 7.89 GB GGUF, a format supported by many local runners.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Here we load the model in llama.cpp and start a server on port 8080 of your own computer. Once ready, it can connect to web chat or an OpenAI-compatible app. The weights are released under Apache 2.0, supporting personal workflows and services that follow the license terms.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</title><link>https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide</guid><description>Run Qwen3.8-27B with Splash 1.3.0 on Apple Silicon, then check Neural Engine prefill and cached prompt reuse.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</h1><p>The GPU and Neural Engine share long-prompt prefill to reduce time to the first token; the GPU generates the answer.</p><p id="guide-page-summary">Splash is a local inference server for Apple Silicon Macs. Start it with Qwen3.8-27B and send prompts from its browser chat or a compatible app. Version 1.3.0 can split prefill for supported long prompts between the GPU and Apple Neural Engine to reduce time to the first token; it also manages shared-prefix and SSD caches.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The GPU and Neural Engine share prefill for long Qwen3.8-27B prompts; the GPU generates the answer.</li><li>The Qwen3.8-27B 4-bit example needs at least 36 GB of unified memory, with 48 GB recommended.</li><li>Shared-prefix reuse and SSD caching can reduce repeated input work; SSD caching requires `--max-cache-disk`.</li></ol></section><section><h2>What Splash and Qwen3.8-27B do</h2><p>Starting Splash with the Qwen3.8-27B model ID prepares the weights and matching DFlash2 drafter. Once ready, it handles questions sent to the local address and returns answers.</p><p>When you send long code or a document, the model reads the input before producing its first token. This input-processing stage is called prefill. Decode then generates the answer token by token. For supported dense models, Splash 1.3.0 uses the Neural Engine for long prefill; Qwen3.8-27B answer generation runs on the GPU.</p><p>If the first token is slow after a long prompt, compare Neural Engine prefill; if the answer streams slowly, inspect decode speed separately. At startup, Splash calibrates for the Mac and model, then adjusts the split by prompt length.</p><ul><li><a href="https://github.com/incoai/splash/releases/tag/1.3.0">Splash 1.3.0 changes and measurement conditions</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Understand prefill and decode</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/diffusiongemma-mac-local-applications-guide">What can DiffusionGemma do on a Mac? Documents, images, and voice workflows</a></li><li><a href="https://localai.co.kr/en/guides/transformers-js-browser-local-inference-guide">Run a Local LLM in Your Browser with Transformers.js</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-splash-01.webp" alt="A silver laptop, external SSD, and open notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Give Splash a model checkpoint and its local server can answer app prompts.</figcaption></figure><section><h2>Install Splash and get a first reply</h2><p>You need an Apple M3 or newer Mac, macOS 26.4 or later, and Homebrew. The Qwen3.8-27B 4-bit example needs at least 36 GB of unified memory; 48 GB is recommended. The first run downloads model and draft weights, so allow for disk space and an internet connection.</p><p>Install Splash with Homebrew, then start the server in a first Terminal window. Leave the server command running and wait for `Ready`. Run the API check below in a second Terminal window.</p><p>When the server terminal prints `Ready`, open `http://127.0.0.1:8000` in a browser. Splash's chat page appears; send a prompt and receive an answer. By default, the server listens on a local address on this Mac. Closing the terminal or pressing `Ctrl+C` stops it.</p><p>Send the API request below from a second terminal to check the model connection. If the returned JSON's `choices` array contains answer text, the request was processed.</p><div><p><strong>Terminal 1: install and start the server</strong></p><pre><code data-guide-code-block="1-0">brew install incoai/tap/splash
splash serve --model mlx-community/Qwen3.8-27B-4bit</code></pre><p><small>Leave this terminal open until it prints `Ready`.</small></p></div><div><p><strong>Terminal 2: send the first API request</strong></p><pre><code data-guide-code-block="1-1">curl -sS http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"mlx-community/Qwen3.8-27B-4bit","messages":[{"role":"user","content":"Explain prefill in one sentence."}]}'</code></pre><p><small>The model's answer appears in the response JSON's `choices` array.</small></p></div><ul><li><a href="https://github.com/incoai/splash#quick-start">Splash README quick start</a></li><li><a href="https://github.com/incoai/splash/blob/main/DEVELOPMENT.md#build-and-run">Model formats and serving options</a></li></ul></section><section><h2>Connect Splash as an external engine in oMLX</h2><p>In oMLX 0.7.1rc1, Splash can do inference while oMLX keeps the model list and API. Install Splash 1.3.0 or later and open Settings → Integrations → External engines. Once the detected launcher path and version appear, prepare the Qwen3.8-27B model directory and the `z-lab/Qwen3.8-27B-DFlash2` drafter.</p><p>For 1.3.0, use an affine 4-bit, group-64 MLX checkpoint such as `mlx-community/Qwen3.8-27B-4bit`. Version 1.3.1 also accepts mixed-bit checkpoints. For the oMLX external engine, select a supported MLX checkpoint rather than an older `incoai/*-Splash` prebuilt package.</p><p>Enable Use external engine in Model Settings → Advanced and select Splash. oMLX manages the loopback port and API key for the separate process. Send a short prompt and check prefill progress and generation speed on the dashboard. If it fails to start, check the launcher path in Integrations, the model format, then the drafter files.</p><p>Adjust the memory limit, KV precision, SSD cache and Neural Engine prefill in the Splash integration settings. Splash uses its own DFlash2 and cache settings. Leave Lightning MTP or TurboQuant settings for other oMLX models unchanged and compare TTFT and completion time for the same document on Splash and the default engine.</p><ul><li><a href="https://github.com/jundot/omlx/blob/main/docs/Splash.md">oMLX Splash integration settings</a></li></ul></section><section><h2>Use Neural Engine prefill and read its conditions</h2><p>When you omit `--disable-ane`, Splash 1.3.0 can split FFN computation between the GPU and Neural Engine for supported dense targets. At startup it calibrates the split for the Mac and model, chooses prompt lengths that benefit, and remembers the result. If evaluation fails, times out, or produces a non-finite value, it reruns the affected chunk on the GPU.</p><table><caption>Splash 1.3.0 published results · Qwen3.8-27B prefill TTFT</caption><thead><tr><th scope="col">Mac</th><th scope="col">MLX 4-bit, GPU only</th><th scope="col">GPU + Neural Engine</th></tr></thead><tbody><tr><th scope="row">M5 Max</th><td>14.09 s</td><td>12.36 s</td></tr><tr><th scope="row">M5 Pro</th><td>28.28 s</td><td>21.57 s</td></tr></tbody></table><p>The Splash 1.3.0 release records Qwen3.8-27B measurements comparing prefill and time to first token (TTFT) with MLX 4-bit weights, one request, and a cold 14,096-token prompt. M5 Max took 14.09 seconds on GPU alone and 12.36 seconds with GPU plus Neural Engine; M5 Pro took 28.28 and 21.57 seconds, respectively. TTFT covers input processing through the first token; compare it separately from answer-generation speed.</p><p>Prefill splitting uses some memory that could otherwise hold the KV cache. The context limit for long inputs can be lower than with GPU-only operation, so check the startup summary and `/status` field `maximum_context_tokens` on your Mac. Compare decode throughput separately for the speed of streaming answers.</p><ul><li><a href="https://github.com/incoai/splash/releases/tag/1.3.0">Full prefill results and limits in the release</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-splash-02.webp" alt="A thick stack of documents and stopwatch beside a silver laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure long-prompt waiting separately from answer generation.</figcaption></figure><section><h2>Configure caching for repeated prompts</h2><p>A follow-up prompt that repeats the same document or instructions may require the model to read the opening again. Splash 1.3.0 can reuse a completed prefill checkpoint across conversations with a long shared prefix, resuming near the point where the second conversation diverges. In a published 19K-token shared-prefix case, the second conversation's TTFT fell from 39.6 to 6.3 seconds, reusing 16,384 tokens.</p><p>In that record, one additional reclaimable restore state for the 27B model used 187 MiB. With disk caching enabled, states evicted from memory can be written to the SSD. Set a quota such as `--max-cache-disk 16G` to use SSD caching for the current server session; add `--persistent-cache` to keep it across restarts.</p><p>Start without disk options and send two conversations with the same long document to check shared-prefix reuse. Add disk caching only if memory remains constrained or states are being evicted, after checking available SSD space. SSD caching does not increase the context limit, and a quota smaller than the working set can cause repeated reads and writes.</p><p>How much cache is reused depends on the length of the shared prefix. Send the same model, document, and question twice, then record TTFT for the first and repeated requests separately.</p><div><p><strong>Limit SSD cache to 16 GiB and retain it across restarts</strong></p><pre><code data-guide-code-block="4-0">splash serve --model mlx-community/Qwen3.8-27B-4bit --max-cache-disk 16G --persistent-cache</code></pre><p><small>Adjust `16G` to fit available disk space.</small></p></div><ul><li><a href="https://github.com/incoai/splash/blob/main/DEVELOPMENT.md#ssd-cache">SSD cache behavior and quota</a></li><li><a href="https://github.com/incoai/splash/blob/main/DEVELOPMENT.md#persistent-cache">Prefix cache persistence across restarts</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-splash-03.webp" alt="An external SSD connected to a laptop beside clipped documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A prefix cache can reuse shared input in follow-up questions about the same document.</figcaption></figure><section><h2>Compare results and fall back to GPU-only</h2><p>First match prefix and SSD cache reuse conditions. Record TTFT for the same model and long input with GPU plus Neural Engine, restart with `--disable-ane`, then measure GPU alone. Separate initial and repeated runs in each configuration to identify calibration and compilation costs.</p><p>The first Neural Engine startup can take longer due to program compilation and split calibration. In `/status`, inspect `ane_ffn` for split state, share, minimum input-chunk size, evaluations, and GPU reruns. For short prompts that do not benefit, Splash can select the GPU-only path automatically.</p><p>If the server does not become ready, check the first terminal error and macOS version. If the browser cannot connect, check for `Ready` and whether port 8000 is available. If the model cannot start because of context length, inspect the automatic limit in the startup summary and `/status`, then lower it with `--max-context` if needed. Use `--disable-ane` to return to GPU-only prefill if Neural Engine operation is unstable or you need a fixed baseline.</p><p>Keep the default path when Neural Engine reduces TTFT for your long prompt and the available context still fits your work. Choose GPU-only with `--disable-ane` if context becomes too short or results are unstable.</p><div><p><strong>Return to GPU-only prefill</strong></p><pre><code data-guide-code-block="5-0">splash serve --model mlx-community/Qwen3.8-27B-4bit --disable-ane</code></pre></div><ul><li><a href="https://github.com/incoai/splash/releases/tag/1.3.0">Splash 1.3.0 release notes</a></li></ul></section><section><h2>When the first download stalls or the model will not start</h2><p>The first `splash serve` downloads the selected Qwen weights and their matching DFlash2 draft weights from Hugging Face. The Qwen3.8-27B 4-bit example can use up to about 21 GB for both downloads. If progress appears stalled, check the last progress line in Terminal and your internet connection before stopping the server. A later start reuses files already downloaded.</p><p>If Terminal says it cannot find the model repository, check the value passed to `--model`. The MLX ID in this guide is `mlx-community/Qwen3.8-27B-4bit`. Private or gated repositories require you to sign in to Hugging Face or set `HF_TOKEN`. Correct the model name or access first, then rerun the same command.</p><p>If the weights finish downloading but the memory budget check fails, you do not need to download them again. The selected model and context length exceed the Mac's available memory budget. Restart with a lower `--max-context`; on a 24 GB Mac, choose a smaller supported GGUF variant from the model list.</p><ul><li><a href="https://github.com/incoai/splash/blob/main/DEVELOPMENT.md#model-storage">Download space and model storage</a></li><li><a href="https://github.com/incoai/splash#models">Supported models and GGUF variants for 24 GB Macs</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Splash is a local inference server for Apple Silicon Macs. Start it with Qwen3.8-27B and send prompts from its browser chat or a compatible app. Version 1.3.0 can split prefill for supported long prompts between the GPU and Apple Neural Engine to reduce time to the first token; it also manages shared-prefix and SSD caches.</dd></div><div><dt>How much memory does it need?</dt><dd>You need an Apple M3 or newer Mac, macOS 26.4 or later, and Homebrew. The Qwen3.8-27B 4-bit example needs at least 36 GB of unified memory; 48 GB is recommended. The first run downloads model and draft weights, so allow for disk space and an internet connection.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Qwen3.8 Locally with NInfer: RTX 5090, MTP, and DFlash2</title><link>https://localai.co.kr/en/guides/ninfer-qwen38-nvidia-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ninfer-qwen38-nvidia-local-guide</guid><description>Serve low-bit Qwen3.8 and Underdog Saluki on an NVIDIA GPU with NInfer-all. Follow the model download, Docker server, first API request, and MTP or DFlash2 setup, then read the RTX 5090 community results in context.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run Qwen3.8 Locally with NInfer: RTX 5090, MTP, and DFlash2</h1><p>Download an 11.18 GB NInfer artifact and serve prompts on an RTX 5090.</p><p id="guide-page-summary">NInfer is a CUDA inference engine that runs `.ninfer` model files on NVIDIA GPUs and returns answers through an OpenAI-compatible API. Run Underdog Saluki in a Docker server, send a short query, and compare MTP and DFlash2 draft generation using the same request.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>NInfer `.ninfer` artifacts are not ordinary GGUF files and require an NInfer-all build.</li><li>MTP and DFlash2 propose answer tokens ahead of the main model; select the component included in the artifact.</li><li>The Saluki artifact includes an MTP head, DFlash2 adapter, and Vision tower.</li></ol></section><section><h2>NInfer serves model files through an API</h2><p>NInfer is an inference engine that computes NInfer-format model files on an NVIDIA GPU and returns replies to chat requests sent to its server. Its inputs are a model artifact and a text request; the output is a reply through an OpenAI-compatible API. We will serve Underdog Saluki, a low-bit Qwen3.8-27B derivative, on one RTX GPU and send it a short prompt.</p><p>The converted file preserves the source GGUF tensor blocks and also contains an MTP head and DFlash2 adapter. It uses a mixed-precision layout of about 2 bits per weight and is 11,180,119,296 bytes (10.41 GiB). A stock NInfer build cannot read its `gguf_*` formats, so it needs a build from the consolidated repository.</p><p>MTP (Multi-Token Prediction) uses a separate next-token head to propose several candidates for the main model to verify. DFlash2 uses a separate draft adapter to propose candidates that the main model checks. Accepted proposals can emit more tokens per verification step, but the speed difference depends on the prompt, draft count, and GPU.</p><ul><li><a href="https://github.com/iamwavecut/ninfer-all">NInfer-all repository</a></li><li><a href="https://huggingface.co/satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3">Underdog Saluki model card</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-ninfer-01.webp" alt="A PC with one visible graphics card beside a monitor and keyboard" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model artifact and engine must match before the GPU can generate a reply.</figcaption></figure><section><h2>Download the model and start the Docker server</h2><p>On Linux, install Docker, NVIDIA driver 580 or newer, and NVIDIA Container Toolkit. The Docker image used here runs on CUDA 13. Use the Toolkit's official sample workload to check that the container sees the GPU, then install the Hugging Face CLI command `hf`. Leave storage for the 11.18 GB model and server image, and enough GPU memory for both the model and KV cache.</p><p>The download command saves the 11.18 GB `.ninfer` file in `models`. If `hf download` is unavailable, install the Hugging Face Hub package's CLI and retry.</p><p>The server accepts requests only on `127.0.0.1:8080`. It starts with a 65,536-token context and three MTP drafts. The current directory's `models` folder is mounted at `/models` inside the container.</p><div><p><strong>Terminal 1: download the model</strong></p><pre><code data-guide-code-block="1-0">mkdir -p models
hf download satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3 Underdog-Saluki-27B-1.0-IQ2-mix-ninfer-v3.ninfer --local-dir models</code></pre><p><small>After the download, confirm the file is at `models/Underdog-Saluki-27B-1.0-IQ2-mix-ninfer-v3.ninfer`.</small></p></div><div><p><strong>Terminal 1: start the MTP server</strong></p><pre><code data-guide-code-block="1-1">docker run --rm --gpus all -p 127.0.0.1:8080:8080 --ulimit memlock=-1 \
  -v "$PWD/models:/models" -v ninfer-cache:/cache \
  ghcr.io/iamwavecut/ninfer-all serve /models/Underdog-Saluki-27B-1.0-IQ2-mix-ninfer-v3.ninfer \
  --model-id underdog-saluki --max-context 65536 --kv-capacity 65536 --kv-dtype rk8v4 \
  --gdn-state-fp16 --spec mtp --draft-tokens 3 --lm-head-draft --vision</code></pre><p><small>Wait for the model-load message and port 8080 to appear in the server log, then leave this terminal running.</small></p></div><ul><li><a href="https://github.com/iamwavecut/ninfer-all#running">NInfer-all running instructions</a></li><li><a href="https://huggingface.co/satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3">Files and model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-ninfer-02.webp" alt="A black dual-fan graphics card, external SSD, and USB cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prepare the compute hardware and make its GPU visible to the container.</figcaption></figure><section><h2>Send the first prompt and inspect the reply</h2><p>Keep the server terminal running and open another one. If `underdog-saluki` appears in the model list, the model is ready. The request below sends a short English prompt to the OpenAI-compatible chat endpoint with a 128-token output limit.</p><p>A successful response contains the model's reply in `choices[0].message.content`. `Connection refused` usually means the server is not ready or the port was not mapped; a model-ID error means the request's `model` differs from the server's `--model-id`.</p><div><p><strong>Terminal 2: check the model and send a prompt</strong></p><pre><code data-guide-code-block="2-0">curl -sS http://127.0.0.1:8080/v1/models
curl -sS http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"underdog-saluki","messages":[{"role":"user","content":"Explain why a local model server uses a context window in two sentences."}],"max_tokens":128}'</code></pre><p><small>Read the generated text from the response JSON's `choices` array.</small></p></div><ul><li><a href="https://github.com/iamwavecut/ninfer-all#running">API and server defaults</a></li></ul></section><section><h2>MTP and DFlash2 generate draft candidates differently</h2><p>After the first request works, compare draft modes using the same model and prompt. MTP uses the model's next-token head; DFlash2 uses the separate adapter in the same artifact. Change one setting at a time and restart the server with `--spec dflash2 --draft-tokens 5` instead of `--spec mtp --draft-tokens 3 --lm-head-draft`.</p><p>More drafts can offer more tokens per verification round, but the engine may also spend work on candidates the model rejects. Five DFlash2 drafts can suit short chats, while MTP often does well with three to five; reported MTP acceptance for Saluki ranged from 30% to 100% by request. Different prose, code, and languages can change the result, so compare repeated runs of the same prompt rather than the fastest single run.</p><p>Hold prompt and answer lengths constant when comparing decode speed. Restart the same server and send the same prompt several times, recording output tokens and elapsed time so cache and GPU temperature do not silently change the comparison. To return to ordinary generation, remove `--spec`, `--draft-tokens`, and `--lm-head-draft`, then restart.</p><ul><li><a href="https://huggingface.co/satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3#running">Saluki run configuration</a></li><li><a href="https://localai.co.kr/en/guides/speculative-decoding">Speculative decoding guide</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">Lightning MTP guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-ninfer-03.webp" alt="A monitor, keyboard, compact PC, papers, and pen on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Hold the prompts and materials from your real workload constant when comparing draft modes.</figcaption></figure><section><h2>RTX 5090 community results</h2><p>The table separates Saluki decode and prefill speed from its memory and load time.</p><table><caption>Underdog Saluki NInfer v3 · RTX 5090 community verification</caption><thead><tr><th scope="col">Workload</th><th scope="col">Community result</th></tr></thead><tbody><tr><th scope="row">512-token output · 3 MTP drafts</th><td>223 tok/s</td></tr><tr><th scope="row">512-token output · 5 DFlash2 drafts</th><td>209 tok/s</td></tr><tr><th scope="row">Prefill for ~9.7K input tokens</th><td>3,955 tok/s</td></tr><tr><th scope="row">Idle memory with 65K KV · 3 MTP drafts</th><td>~14.3 GB</td></tr><tr><th scope="row">Model load</th><td>20.2 seconds</td></tr></tbody></table><p>Single community run on October 9, 2026: Windows RTX 5090 (`sm_120a` build), `rk8v4` KV, thinking off. Decode used a 512-token output, prefill used an approximately 9.7K-token prompt, and idle memory used 65K KV with MTP-3.</p><ul><li><a href="https://huggingface.co/satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3#verification-community-run-2026-10-09">Community results and conditions</a></li></ul></section><section><h2>Check the artifact format and GPU connection first</h2><p>For `unsupported model` or block-format errors, check that you are using the NInfer-all engine. This IQ2-mix artifact uses `gguf_*` blocks specific to NInfer-all and will not open in a stock NInfer build. Check container GPU access with the [official NVIDIA Container Toolkit sample workload](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html), then verify the artifact path and `.ninfer` extension.</p><p>A `no CUDA device` or GPU-architecture error points to the container runtime or build target. The supported targets `86`, `89`, and `120a` correspond to GPU architectures. The Windows RTX 5090 result in this guide used an `sm_120a` build, so reproducing it on a 5090 requires that architecture. A native Windows build requires CUDA 13, CMake, Visual Studio C++ tools, and vcpkg dependencies; follow the repository's current build procedure.</p><p>If loading or a long request fails for lack of memory, lower the context limit below 65,536 or reduce `--kv-capacity` to reserve less KV cache. Increasing context while GPU memory is tight can cause the model to unload or the server to fail. Stop the container with `Ctrl+C` in its terminal; the model file remains on disk, so you can restart with adjusted options.</p><ul><li><a href="https://github.com/iamwavecut/ninfer-all#running">Official running and support details</a></li><li><a href="https://github.com/iamwavecut/ninfer-all">Current Windows build notes</a></li></ul></section><section><h2>Try a short run alongside your existing API server</h2><p>Keep your current model server and test NInfer at the local address `127.0.0.1:8080`. Check the model list and a short reply, then expand to Korean prompts, code, and longer documents while recording answer quality and memory use. Compare task accuracy and tool calls alongside speed.</p><p>NInfer artifacts and ordinary GGUF use different runtime formats. To convert another checkpoint, check NInfer-all's model-specific recipe and support for its MTP, DFlash2, or Vision components. Run the prepared Saluki file with the command above.</p><p>After choosing a fast setup, compare its replies with a fixed set of prompts you use often. Record omissions in summaries, code execution results, and tool arguments so the next model update can be checked on the same tasks.</p><p>For another inference engine, see the llama.cpp guide below. The Saluki guide covers standard GGUF setup and choosing a quantized file.</p><ul><li><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">llama.cpp local serving guide</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Underdog Saluki model guide</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>NInfer is a CUDA inference engine that runs `.ninfer` model files on NVIDIA GPUs and returns answers through an OpenAI-compatible API. Run Underdog Saluki in a Docker server, send a short query, and compare MTP and DFlash2 draft generation using the same request.</dd></div><div><dt>How much memory does it need?</dt><dd>Keep your current model server and test NInfer at the local address `127.0.0.1:8080`. Check the model list and a short reply, then expand to Korean prompts, code, and longer documents while recording answer quality and memory use. Compare task accuracy and tool calls alongside speed.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Phonon 2: A Local English Transcription Guide</title><link>https://localai.co.kr/en/guides/phonon-2-local-english-transcription-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/phonon-2-local-english-transcription-guide</guid><description>Install Phonon 2 and the Fermion CLI to turn English recordings into text with optional word timestamps. This guide covers the first model download, JSON output, audio formats, and common setup errors.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Phonon 2: A Local English Transcription Guide</h1><p>Transcribe an English audio file on your computer and save optional word-level timestamps in JSON.</p><p id="guide-page-summary">Phonon 2 is a local ASR model that turns English speech into text. Give an audio file such as WAV to the Fermion CLI to print a transcript; add `--json` to include each word's start and end time. This guide walks through installing the tool in a Python virtual environment and running a first transcription.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Phonon 2 is a 164 MB low-bit QAT model based on Parakeet TDT 0.6B v3.</li><li>The official CLI transcribes audio files and, with `--json`, returns word timestamps measured from the start of the file.</li><li>Published throughput was measured separately on an M5 MacBook Air, an eight-core Zen 5 CPU, and an H100 at batch size 128.</li></ol></section><section><h2>Turn a recording into text and timestamps</h2><p>Phonon 2 is an ASR (automatic speech recognition) model that takes an English recording and returns a transcript. The command-line tool Fermion downloads and runs the model, so you can point it at an audio file in a terminal and get text back. Add `--json` to include each word's start and end time along with the full transcript.</p><p>Use it to draft meeting notes or find where a particular word appears in an interview. Move the transcript into an editor or search tool, and process the JSON further when timestamps matter. Phonon 2 is an English-only speech model.</p><p>Fermion runs the model locally. It prints the transcript to standard output and progress and warnings to standard error. After the first run, the model stays in the local cache for subsequent runs.</p><ul><li><a href="https://github.com/fermionresearch/phonon">Fermion CLI repository</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-phonon-01.webp" alt="A desktop microphone connected to a laptop beside headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Give Phonon 2 an audio recording to produce an English transcript.</figcaption></figure><section><h2>A low-bit model in a small download</h2><p>Phonon 2 downloads at 164 MB. Based on Parakeet TDT 0.6B v3, it uses quantization-aware training (QAT) and represents weights with five learned values at about 2.1 bits per weight. The compact file can transcribe English speech locally.</p><p>In the developer's seven English evaluation sets, Phonon 2 averaged a word error rate (WER) of 5.21%, compared with 4.96% for its uncompressed base model, Parakeet TDT 0.6B v3. The table separates transcription accuracy from hardware-specific processing speed.</p><table><caption>Developer-reported evaluations and throughput</caption><thead><tr><th scope="col">Measure</th><th scope="col">Developer result</th><th scope="col">Run or evaluation conditions</th></tr></thead><tbody><tr><th scope="row">English evaluation WER</th><td>5.21%</td><td>Average across seven public English evaluation sets</td></tr><tr><th scope="row">Teacher model WER</th><td>4.96%</td><td>Parakeet TDT 0.6B v3</td></tr><tr><th scope="row">Mac throughput</th><td>About 174× real time</td><td>M5 MacBook Air</td></tr><tr><th scope="row">CPU throughput</th><td>143× real time</td><td>Eight-core Zen 5</td></tr><tr><th scope="row">Batched GPU throughput</th><td>6,680× real time</td><td>H100 · batch 128</td></tr></tbody></table><p>Developer-reported results · WER is averaged across seven Open ASR Leaderboard English sets · speed: about 20 s per audio hour on M5 MacBook Air (174×), 143× on eight-core Zen 5, and 6,680× on H100 at batch 128. [Results](https://huggingface.co/FermionResearch/Phonon-2).</p><ul><li><a href="https://huggingface.co/FermionResearch/Phonon-2">Phonon 2 per-set results</a></li></ul></section><section><h2>Transcribe one English recording</h2><p>The official Fermion CLI requires Python 3.10 or newer. If your macOS-provided `python3` is 3.9, install a supported version such as Python 3.12 and create a virtual environment in your working folder. The example below uses the Apple Silicon path on Mac.</p><p>In the activated environment, install the package and MLX runtime components. The package is named `fermion-research`; its command is `fermion`. Although the `phonon transcribe` alias also runs Phonon 2, this guide names the model explicitly so you can see what will be downloaded.</p><p>Run these commands in order inside the isolated Python environment.</p><p>After installation, run the command from the folder containing your English WAV recording, replacing `recording.wav` with its actual name. On the first run, Fermion downloads the 164 MB model and prepares the engine, so startup can take longer than later transcriptions. The model is stored in the standard Hugging Face cache.</p><p>The transcription command sends only text to standard output, so append `&gt; transcript.txt` to create a transcript file. Progress and warnings appear on standard error. The first run downloads the 164 MB model and prepares the engine.</p><div><p><strong>Install on Apple Silicon Mac and transcribe English audio</strong></p><pre><code data-guide-code-block="2-0">python3.12 -m venv .venv
source .venv/bin/activate
pip install fermion-research
pip install mlx mlx-audio mlx-lm soundfile scipy zstandard
fermion models
fermion transcribe phonon-2 recording.wav</code></pre><p><small>Replace `recording.wav` with your recording filename and use Python 3.10 or newer.</small></p></div><ul><li><a href="https://github.com/fermionresearch/phonon">Supported platforms and installation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-phonon-02.webp" alt="A portable audio recorder, headphones, and open notebook beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Transcribe a meeting first, then check names and numbers against the audio.</figcaption></figure><section><h2>Save JSON when you need word timestamps</h2><p>Use `--json` to align video captions or locate a statement in a recording. The result object contains the transcript, model ID, processing times, and a word list; each word's `start` and `end` values are seconds from the beginning of the audio.</p><p>The `text` field in `--json` contains the transcript, and the `words` array contains each word's start and end time. Process the JSON to align subtitle timing in a video editor and split sentences into readable lines.</p><p>Accepted formats are WAV, FLAC, OGG, and AIFF decoded by libsndfile. Fermion resamples any sample rate and channel count to 16 kHz mono, but it does not accept MP3 or M4A directly. If the file is rejected, use the ffmpeg conversion command printed by the CLI to make a WAV, then retry.</p><div><p><strong>Export text and word-timestamp JSON</strong></p><pre><code data-guide-code-block="3-0">fermion transcribe phonon-2 recording.wav &gt; transcript.txt
fermion transcribe phonon-2 recording.wav --json &gt; transcript.json</code></pre><p><small>Create both files from the same source. Use the timestamped JSON to edit subtitles.</small></p></div><ul><li><a href="https://www.fermionresearch.com/docs/speech/">CLI details for JSON, audio formats, and timestamps</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-phonon-03.webp" alt="Transcript pages beside a laptop, audio recorder, and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Word start and end times can help create caption intervals.</figcaption></figure><section><h2>Check names and numbers against the recording</h2><p>After transcription, compare people, company and product names, and numbers with the recording. Errors in these details can make a meeting note or interview harder to search or can misstate the record. Listening to the portions where names and amounts occur helps you focus the review against the text.</p><p>If a technical term or proper name is repeatedly misrecognized, list up to 25 frequent terms with `--hotwords`. For example, `fermion transcribe phonon-2 recording.wav --hotwords "Acme, Quillon"` gives those terms preference when they are plausible matches to the speech. The audio determines the words, so check name spellings against the recording.</p><p>When testing different vocabulary lists, save a plain transcription and a hotwords transcription of the same recording so you can compare them. Correct name spellings after reviewing both, and have a person check the final transcript against the audio when amounts, dates, or names matter.</p><ul><li><a href="https://www.fermionresearch.com/docs/speech/">Using hotwords</a></li></ul></section><section><h2>If the first run fails, check the first error</h2><p>If you see `python3.12: command not found`, check that a supported Python version is installed and that its executable is named `python3.12`. If `python3` already points to Python 3.10 or newer, use that executable when creating the environment. You can check the environment's version with `python --version`.</p><p>If `fermion: command not found`, make sure the virtual environment is active and use `pip show fermion-research` to check whether the package is installed there. If Apple Silicon reports missing MLX dependencies, run the additional install command from the official docs and retry. The CLI also prints the command needed when a component is missing.</p><p>For an input-file error, check the path and extension; convert MP3 or M4A to WAV with the command provided by the CLI. If model download stops, check the network connection and rerun the command.</p><p>Finally, check transcription quality on a few recordings you actually plan to use. Compare overlapping speech, background noise, names, and number formatting with the audio to find corrections quickly. Treat the transcript as a draft and have a person review it before using it for an important document.</p><ul><li><a href="https://github.com/fermionresearch/phonon">Official installation and troubleshooting</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local ASR transcription guide</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs. Whisper</a></li><li><a href="https://localai.co.kr/en/guides/orukeet-local-transcription-guide">OrukeeT local transcription guide</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Phonon 2 is a local ASR model that turns English speech into text. Give an audio file such as WAV to the Fermion CLI to print a transcript; add `--json` to include each word's start and end time. This guide walks through installing the tool in a Python virtual environment and running a first transcription.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A 125B model on a 12GB GPU? How Strata runs it</title><link>https://localai.co.kr/en/guides/strata-local-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-local-llm-guide</guid><description>Learn how Strata runs the Qwen3.8-Flash-Next 125B MoE model on Windows and Linux PCs, how the GPU, RAM, CPU, and SSD share the work, and how to choose a model and start it.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">A 125B model on a 12GB GPU? How Strata runs it</h1><p>Even when GPU memory cannot hold the entire 125B model, Strata distributes the work across PC components.</p><p id="guide-page-summary">Strata is a local runtime for Windows and Linux that runs Qwen3.8-Flash-Next and returns answers to a browser or compatible app. The GPU caches frequently used experts, RAM and the CPU handle experts outside the GPU, and the SSD supplies the selected model and PLE data. This guide explains how to choose a setup for your RAM, GPU, and operating system, then send a first question locally.</p><p>Strata is a local runtime for Windows and Linux PCs. It runs Qwen3.8-Flash-Next and returns answers to text prompts or, when enabled, image inputs through a browser or connected app. Its default server address, http://127.0.0.1:8080, is accessible from the PC itself.</p><p>The model's full weights can exceed the memory of one GPU, so Strata assigns different roles to the GPU, system RAM, CPU, and storage. Understanding those roles helps you judge which setup is practical on your PC and where a slow response is coming from.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Strata runs the Qwen3.8-Flash-Next 125B MoE model on a PC by using GPU, RAM, CPU, and storage in different roles.</li><li>For RAM capacity, compare Coder at 32 GB, IQ2_XS or Q2_0 at 48 GB, and start with IQ2_XS at 64 GB.</li><li>Strata's code and model weights may come from different distributors and have different licenses, so check each one separately.</li></ol></section><section><h2>Only part of the 125B model is used for each token</h2><p>Qwen3.8-Flash-Next has a roughly 125B-parameter MoE language-model core. Including PLE embeddings and MTP components brings the full model to about 180B. The core divides its weights into expert groups and selects a subset for each token, so only some experts perform each token's computation.</p><p>Strata caches experts in GPU memory so frequently used parts can be processed quickly, while the CPU and system RAM handle experts that are not loaded on the GPU. When you send a question, the local server passes it to the model and returns the answer to the browser's Chat page or a compatible app. You can use text alone or enable image input; support depends on the GPU and setup.</p><p>As a starting point, plan for at least 12 GB of VRAM on a supported GPU, 32 GB of RAM, and about 80 GB of free disk space. The project documents Windows and Linux, and GPU support may change between versions. Check the current requirements and setup steps in the [Strata repository](https://github.com/Niko1221/Strata) and [installation guide](https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md).</p><ul><li><a href="https://github.com/Niko1221/Strata">Strata project and current requirements</a></li><li><a href="https://huggingface.co/Qwen/Qwen3.8-Flash-Next">Qwen3.8-Flash-Next model information</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md">Windows and Linux installation guide</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-5070-guide">Run Strata on an RTX 5070 12 GB: Model and RAM choices</a></li><li><a href="https://localai.co.kr/en/guides/strata-troubleshooting-guide">Strata troubleshooting: downloads, first launch, and slow responses</a></li><li><a href="https://localai.co.kr/en/guides/strata-vs-llama-cpp-guide">Strata vs llama.cpp: Which Should You Run on Your PC?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules on a warm wood desk indoors" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Strata organizes a PC to run the 125B MoE model locally.</figcaption></figure><section><h2>The GPU, RAM, CPU, and SSD each have a different role</h2><p>In a standard setup, expert weights are kept in system RAM and frequently used experts are cached in GPU memory. The CPU helps calculate experts that are not on the GPU. A larger GPU cache lets the GPU handle more expert work, while the full model weights and working memory still need to fit across the system.</p><p>Low-RAM mode determines whether experts that do not fit in the GPU are supplied from RAM or from a file. If the remaining expert weights fit in available RAM, resident mode pins them in RAM at startup. It therefore does not read experts from the SSD during normal responses.</p><p>If RAM is insufficient, mmap mode maps the file and reads the portions needed by the GPU from the file cache. Generation can slow down when VRAM is small and the GPU frequently needs experts that are not resident there. The installer selects a mode based on available RAM, and `START-HERE.bat --setup --low-ram on|off` changes the low-RAM setting.</p><p>PLE (per-layer embeddings) is a table of embeddings used by the model's layers. In Strata, this data can live on an SSD and be read as needed, leaving more GPU and RAM capacity for weights. Storage performance and the operating system's file cache affect these reads, so an NVMe SSD with enough free space can help. Depending on the setup, PLE file reads take place alongside GPU and CPU computation.</p><p>Watch GPU, CPU, and RAM use in Monitor while a response is running. If RAM is nearly full and disk reads continue, close memory-heavy apps or choose a smaller model. Less GPU memory available for the expert cache can also shift more work to the CPU. The [technical overview](https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works) describes Strata's memory tiers and low-RAM modes.</p><p>For Intel Arc or Radeon on Linux, check XeStrata's setup requirements. Match the GPU and distribution before following the relevant setup path.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works">How Strata uses the GPU, RAM, and low-RAM modes</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#will-it-fit">Memory requirements by model</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-local-llm-guide">XeStrata requirements for Intel, AMD and NVIDIA</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-intel-arc-pro-b70-benchmark">XeStrata results on Arc Pro B70</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-radeon-linux-guide">Match your Radeon GPU and Linux distribution</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a warm wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Consider the GPU cache, RAM and CPU work, and SSD-hosted layer embeddings separately.</figcaption></figure><section><h2>Choose a model variant for your RAM and language needs</h2><p>In the model selector, choose a quantization size that fits your RAM and workload. Q2_0, IQ2_XS, and IQ3_S retain all experts in quantized form. Coder is tuned for coding and keeps 256 of the 512 experts. A smaller model needs less storage and memory, but Coder may produce different results from the full model on general chat and some languages.</p><p>Strata's current model guide suggests Coder for 32 GB RAM, IQ2_XS or the faster Q2_0 for 48 GB, and IQ2_XS as a starting point for 64 GB. A 64 GB PC can run larger variants, though IQ3_S with a long context leaves less room for the OS and apps. With 96 GB or more, consider IQ3_S or Unsloth UD-IQ4_XS; UD-Q4_K_XL is an experimental configuration. Include the context's KV cache and running apps in your RAM budget, not just the model file.</p><p>With 32 GB of RAM and a 24 GB GPU, Q2_0 or IQ2_XS can be run in low-RAM mode. With 32 GB of RAM and a 12–16 GB GPU, Coder is a practical first option. If a setup frequently reads experts that do not fit on the GPU from the SSD, generation can remain slow even with NVMe storage. Consider the languages you use and how long you can wait for a response.</p><p>If you regularly work with Korean or Japanese text and code, compare Q2_0 or IQ2_XS with Coder using the same prompt instead of choosing Coder alone. Swift 1.5 is tuned to reduce the thinking time before a response; its token generation rate is similar to Q2_0, but it may answer sooner. Results and licenses vary by model variant, so check the download page and [model selection guide](https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram).</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Model selection by RAM</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#coder">Coder variant and its intended tasks</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#swift-15">Swift 1.5 overview</a></li></ul></section><section><h2>In 0.1.43.1, enable adaptive overlap only where it helps</h2><p>From 0.1.43.1, `STRATA_ADAPT_OVERLAP` is off by default on every machine after the 0.1.43 default slowed decode on some Linux NVIDIA PCs. You can test `STRATA_ADAPT_OVERLAP=1`: check its state in the startup log and compare the same model and prompt with it off and on. The 0.1.43 results below retain their original measurement conditions.</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43.1">0.1.43.1 hotfix and conditions</a></li></ul></section><section><h2>Read the 0.1.43 gains by GPU and workload</h2><p>Strata 0.1.43 was released on October 11, 2026. The table below summarizes changes to prompt processing and answer generation across NVIDIA, AMD, and Intel setups.</p><table><caption>GPU-specific results reported for Strata 0.1.43</caption><thead><tr><th scope="col">GPU and setup</th><th scope="col">Model and conditions</th><th scope="col">Change in 0.1.43</th></tr></thead><tbody><tr><th scope="row">Radeon AI PRO R9700 32 GB · 16 GB-class cache</th><td>IQ3_XXS</td><td>Decode +21–38%; prompts: +7.5% at 4K, +15.6% at 32K</td></tr><tr><th scope="row">Radeon AI PRO R9700 · 32 GB cache</th><td>Q2_0 / IQ3_XXS</td><td>Decode +2–10%</td></tr><tr><th scope="row">Radeon AI PRO R9700 · 32 GB cache</th><td>IQ3_S</td><td>Decode +6–14%; prompts: +17% at 32K, +27% at 64K</td></tr><tr><th scope="row">RTX 5070 · Windows defaults</th><td>Q2_0 / IQ3_XXS</td><td>No default decode change</td></tr><tr><th scope="row">Arc Pro B70</th><td>IQ3_S · 128K context</td><td>Decode +14–21%; 4K prompt: 8.5→3.3 s; 16K: 27.4→13.4 s</td></tr></tbody></table><p>The R9700 has 32 GB of physical VRAM. The “16 GB-class cache” row limits its expert cache to the size used on a 16 GB card. Results are medians from five interleaved old/new pairs; Arc Pro B70 prompt tests use three pairs.</p><p>On Windows, the RTX 5070 has the same default decode behavior as 0.1.42. Two NVIDIA changes are not enabled by default there. On Linux, adaptive-tier copies overlap the next decode window, and the PCIe share is measured and applied automatically. On Windows, you can opt into the corresponding settings with `STRATA_ADAPT_OVERLAP=1` and `STRATA_PCIE_AUTO_CANON=1`. Adaptive overlap was 2.6% slower for Q2_0 on a Windows RTX 5070, so it remains off by default.</p><p>R9700 results vary with the cache limit and quantization. Reading the limited-cache and actual 32 GB-cache rows separately shows how the number of experts held on the GPU relates to the result. The Arc Pro B70 also improved prompt processing. The table keeps the exact figures with their model and context conditions.</p><p>The full results and test conditions are in the [v0.1.43 release notes](https://github.com/Niko1221/Strata/releases/tag/v0.1.43) and [detailed measurements](https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured).</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">Strata 0.1.43 release notes and complete results</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured">Official detailed benchmarks and conditions</a></li></ul></section><section><h2>Check Monitor and local chat after setup</h2><p>For a new installation, prepare the engine and model with `START-HERE.bat` on Windows or `./setup.sh` from the repository folder on Linux.</p><p>To update a branch-based Git installation without a fixed version tag, use `UPDATE.bat` or `./update.sh` in that same Strata folder.</p><p>For a fixed-tag or ZIP installation, move to a new release ZIP. On first setup, choose a model and context that fit your RAM and VRAM; if you do not need image input, turn off vision to leave more GPU memory for the expert cache. See the [Windows and Linux installation guide](/guides/strata-windows-linux-install-guide) for the file selection and steps.</p><p>After setup, open `http://127.0.0.1:8080` in a browser and send a short question in Chat. When the question and answer appear, the local server and model have processed the request. Compatible apps use `http://127.0.0.1:8080/v1` as the server URL. If another device will connect, follow the address and authentication guidance in the [API documentation](https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#api); exposing a port on the network changes who can reach the service from its local-only default.</p><p>If a first-install download is interrupted, rerun `START-HERE.bat` on Windows or `./setup.sh` on Linux. Use `UPDATE.bat` or `./update.sh` to update a branch-based Git installation; move fixed-tag or ZIP installations to a new release ZIP. If the server does not open, check whether another program is using port 8080. If model loading or a response stops, check free RAM and VRAM, the selected model, and the context length. See the [official troubleshooting guide](https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md) for specific symptoms.</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">0.1.43 update downloads</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#api">Strata API address and connection instructions</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md">Troubleshooting the first Strata run</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Follow the Windows and Linux installation steps</a></li></ul></section><section><h2>Advanced Linux settings for multiple Radeon GPUs</h2><p>Linux `--serve` with several Radeons using layer splitting is an advanced server setup. Strata 0.1.43 enables `--pipeline-windows 2` by default on three or more gfx12 Radeons. With two cards, measured code generation was 3% slower, so it remains off by default and can be enabled manually.</p><p>In a separate test with four cards, each R9700 was set to 225 W and IQ3_S was used for a short story, code, and a 4K document. The pipeline changes the size of expert-row batches sent to the CPU in each window. Because the order of calculations changes, summation and rounding can differ; some answers may vary slightly from serial execution. See the [AMD HIP guide](/guides/strata-amd-hip-guide) and [0.1.43 detailed measurements](https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured) for setup and performance conditions.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-amd-hip-guide">AMD HIP and Radeon measurements</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards and other components installed in an open PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>On a PC with two GPUs, check the GPU list and layer-splitting settings used by the runtime.</figcaption></figure><section><h2>Check the separate licenses for code and model files</h2><p>The Strata repository code is distributed under the MIT License. Model weights follow the terms of their own distributors, so check the model card license before downloading the original Qwen model, Coder, Swift 1.5, or an Unsloth variant. The code license and the model's use or redistribution terms are separate checks.</p><p>License information is available in the [project documentation](https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md#license), the [repository license](https://github.com/Niko1221/Strata/blob/main/LICENSE), and each model distribution page.</p><p>For installation steps, continue with the [Windows and Linux installation guide](/guides/strata-windows-linux-install-guide); for quantization sizes and RAM choices, see the [model selection guide](/guides/strata-model-quantization-guide).</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md#license">Strata and model license information</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/LICENSE">Strata repository MIT License</a></li><li><a href="https://huggingface.co/Qwen/Qwen3.8-Flash-Next">Qwen model distribution page</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Windows and Linux installation guide</a></li><li><a href="https://localai.co.kr/en/guides/strata-model-quantization-guide">Quantization and model selection guide</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata is a local runtime for Windows and Linux that runs Qwen3.8-Flash-Next and returns answers to a browser or compatible app. The GPU caches frequently used experts, RAM and the CPU handle experts outside the GPU, and the SSD supplies the selected model and PLE data. This guide explains how to choose a setup for your RAM, GPU, and operating system, then send a first question locally.</dd></div><div><dt>How much memory does it need?</dt><dd>As a starting point, plan for at least 12 GB of VRAM on a supported GPU, 32 GB of RAM, and about 80 GB of free disk space. The project documents Windows and Linux, and GPU support may change between versions. Check the current requirements and setup steps in the [Strata repository](https://github.com/Niko1221/Strata) and [installation guide](https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md).</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>If you regularly work with Korean or Japanese text and code, compare Q2_0 or IQ2_XS with Coder using the same prompt instead of choosing Coder alone. Swift 1.5 is tuned to reduce the thinking time before a response; its token generation rate is similar to Q2_0, but it may answer sooner. Results and licenses vary by model variant, so check the download page and [model selection guide](https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram).</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Install Strata on Windows or Linux and send a first prompt</title><link>https://localai.co.kr/en/guides/strata-windows-linux-install-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-windows-linux-install-guide</guid><description>Check GPU drivers and disk space before installing Strata 0.1.43, prepare the model with START-HERE.bat on Windows or setup.sh on Linux, and verify a first prompt. Includes first checks for download, port, and memory errors.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Install Strata on Windows or Linux and send a first prompt</h1><p>Choose a model, let the download finish, then verify it in your browser.</p><p id="guide-page-summary">Strata 0.1.43 prepares a Qwen3.8-Flash-Next engine for your GPU on Windows or Linux, then returns answers to a local browser or compatible app. Before setup, check GPU support, at least 32 GB RAM, and about 80 GB of disk space for the model and runtime. Download the repository, run START-HERE.bat on Windows or ./setup.sh on Linux, and verify a short prompt at http://127.0.0.1:8080.</p><p>The Strata installer prepares the engine and model files needed to run Qwen3.8-Flash-Next on your PC. Once setup finishes, the local server receives prompts from a browser or compatible app and returns the model's answers. Run the repository launcher, choose a model, and check the first response at `http://127.0.0.1:8080`.</p><p>Windows and Linux use different launchers, but the initial setup follows the same sequence: check the graphics driver, make sure memory fits the chosen model, and leave enough disk space for downloads. Then run the launcher for your operating system. You can begin with the recommended setup choices and adjust them for your workload.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Run START-HERE.bat on Windows or ./setup.sh from the repository folder on Linux.</li><li>Choose a model and context length for your RAM, then decide whether to enable image input.</li><li>Send a short question in the browser's Chat page; a visible answer confirms the first run.</li></ol></section><section><h2>Before downloading, check the driver and free disk space</h2><p>Strata 0.1.43 runs on Windows 10/11 or Linux. The GPU baseline is an NVIDIA RTX 20/30/40/50-series card or a Radeon family listed in the documentation. NVIDIA driver 580 or newer is recommended. AMD uses a current Adrenalin driver on Windows and the kernel's amdgpu driver on Linux. Check your GPU and driver in Windows Device Manager, AMD Software, or Linux device information.</p><p>RAM needs depend on the model size; 32 GB is a starting point to consider. With 64 GB, every model size in the guide can run, though large variants and long contexts still need room for other apps. Reserve about 80 GB for the roughly 70 GB model, the roughly 6 GB MTP layer, settings, and possible image files. On Linux AMD, setup may need about 10 GB more for ROCm. An NVMe SSD helps reduce the first model load time.</p><p>This guide installs Strata 0.1.43. The Git command below checks out that fixed version. Without Git, download and extract the ZIP from the same v0.1.43 release. The update instructions below distinguish the installation methods. For a new installation, you can choose the 0.1.43.1 ZIP with the Linux NVIDIA regression fix and follow the same steps below.</p><div><p><strong>Get the Strata 0.1.43 repository</strong></p><pre><code data-guide-code-block="0-0">git clone --depth 1 --branch v0.1.43 https://github.com/Niko1221/Strata.git
cd Strata</code></pre><p><small>If you do not use Git, download and extract the v0.1.43 release ZIP.</small></p></div><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">Download Strata 0.1.43</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md#what-you-need">Current installation requirements</a></li><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43.1">Current 0.1.43.1 installation ZIP</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules on a warm wood desk indoors" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the GPU, RAM, and free disk space before choosing a model.</figcaption></figure><section><h2>Run the launcher for your operating system</h2><p>From the repository folder, double-click `START-HERE.bat` on Windows. On Linux, open a terminal in that folder and run `./setup.sh`. If Linux reports a permission error, start it with `bash setup.sh`. Setup prepares the required Python environment, GPU engine, model, and MTP draft layer.</p><p>If the NVIDIA driver is older than 580, update it before setup. If no ready-made NVIDIA engine matches the PC, setup explains the build-tool installation before compiling an engine. AMD Windows uses the Adrenalin driver and bundled HIP engine; AMD Linux also prepares ROCm and compiles an engine for the card.</p><p>The setup questions determine model size and context for your available RAM and GPU memory. Keeping the recommended choices continues setup. If you will not send images, disable the vision option to leave more GPU memory for the expert cache. Longer contexts also use more KV-cache memory, so start with the length you need.</p><div><p><strong>Start installation on Windows</strong></p><pre><code data-guide-code-block="1-0">START-HERE.bat</code></pre><p><small>Choose the model and context in the setup screen.</small></p></div><div><p><strong>Install and start on Linux</strong></p><pre><code data-guide-code-block="1-1">./setup.sh</code></pre><p><small>If execution permission is denied, run `bash setup.sh` from the repository folder.</small></p></div><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md#windows">Windows installation steps</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md#linux">Linux installation steps</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Choose a model by RAM</a></li></ul></section><section><h2>Wait for the download and first model load</h2><p>Setup downloads the roughly 70 GB model and runtime files. If a first-install download is interrupted, rerun `START-HERE.bat` on Windows or `./setup.sh` from the repository folder on Linux. Setup resumes with files already downloaded. During the first load into RAM and GPU memory, the PC may slow down or appear unresponsive for 1–3 minutes. Keep the window open while progress messages continue.</p><p>When setup finishes, the browser opens or the local address appears in the window. Enter a short prompt in Chat at `http://127.0.0.1:8080` and check that an answer appears. The server window shows that the model has started. Later runs do not download the same files again. Close the server window to stop it.</p><p>For the fixed 0.1.43 checkout above or a ZIP installation, move to a new release ZIP. Keep the old Strata folder and extract the new ZIP under the same parent folder, then run `START-HERE.bat` or `./setup.sh`. Finding the adjacent existing `Strata-data` folder avoids downloading the large model again. Settings live inside the old Strata folder, so check the model, context and working folder in the new setup.</p><p>A branch checkout created with `git clone` without pinning a version can update through Windows `UPDATE.bat` or Linux `./update.sh` in that folder. After the script refreshes code, engine, packages and settings, start the model with `START-HERE.bat` or `./setup.sh`. In the fixed-tag checkout above, the updater's `git pull` fails; use the new-ZIP route instead.</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">0.1.43 update and Windows GGUF fix</a></li><li><a href="https://github.com/Niko1221/Strata/blob/v0.1.43/docs/INSTALL.md#updating">Update procedure by installation method</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a warm wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Longer contexts also use more memory for the KV cache.</figcaption></figure><section><h2>If there is no answer, check where the first error occurred</h2><p>If the first download does not finish, check the network connection and free disk space, then rerun `START-HERE.bat` on Windows or `./setup.sh` on Linux. Setup resumes with files already downloaded. Use `UPDATE.bat` or `./update.sh` only when updating a branch-based Git installation; use a new release ZIP for fixed-tag or ZIP installs. If setup says the NVIDIA driver is old, update it, restart the PC, and run the launcher again.</p><p>If you see `port 8080 is already in use`, first check whether a Strata server window is already running. If another program owns the port, consult the installation guide for the port option and start Strata on another port. If the server is running but the browser did not open, enter the local address yourself.</p><p>If model loading stops or you see `engine stopped unexpectedly`, restart the PC, close memory-heavy apps such as browsers, games, or editors, and try again. If it still stops, check free RAM and VRAM and choose a smaller model such as Q2_0 or IQ2_XS, or a shorter context. If Linux AMD fails while installing ROCm or compiling, note the final terminal error and selected GPU architecture, then consult the [official AMD HIP guide](https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md).</p><p>Once the first answer appears, the installation flow is complete. If the reply is slow or stops, check GPU, CPU, and RAM use in Monitor. The stage of failure points to the next check: model size, driver and runtime match, or whether the download completed.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md">Official Strata troubleshooting guide</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md">AMD HIP installation and troubleshooting</a></li></ul></section><section><h2>If Windows GGUF-mmap is slow, check version 0.1.43</h2><p>This is for an existing low-memory Windows setup that is unusually slow, not part of the first installation. When GGUF shards remained mmaped during unbuffered NTFS reads, expert files could be read one at a time. Strata 0.1.43 closes each shard's mapped view when the file tier begins unbuffered reads, restoring parallel expert-file reads.</p><p>To compare after updating, use the same GGUF model and prompt. The release example used IQ3_XXS on an RTX 5070, Ryzen 5 7600, and 64 GB RAM. Short-prompt decode changed from 13.3 to 18.2 tok/s with 22 GiB of experts held in RAM, and from 4.6 to 8.5 tok/s with 12 GiB. These are results for that Windows setup.</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">v0.1.43 Windows GGUF-mmap fix</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards and other components installed in an open PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After setup, use Monitor to see how much GPU memory and RAM the model uses.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata 0.1.43 prepares a Qwen3.8-Flash-Next engine for your GPU on Windows or Linux, then returns answers to a local browser or compatible app. Before setup, check GPU support, at least 32 GB RAM, and about 80 GB of disk space for the model and runtime. Download the repository, run START-HERE.bat on Windows or ./setup.sh on Linux, and verify a short prompt at http://127.0.0.1:8080.</dd></div><div><dt>How much memory does it need?</dt><dd>The setup questions determine model size and context for your available RAM and GPU memory. Keeping the recommended choices continues setup. If you will not send images, disable the vision option to leave more GPU memory for the expert cache. Longer contexts also use more KV-cache memory, so start with the length you need.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Choosing Strata quantization: Q2_0, IQ2_XS, IQ3_S, and Coder</title><link>https://localai.co.kr/en/guides/strata-model-quantization-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-model-quantization-guide</guid><description>Compare the memory and speed tradeoffs of Q2_0, IQ2_XS, and IQ3_S, plus Coder with half the experts and Swift 1.5's shorter reasoning. Choose for your RAM, Korean or Japanese work, and model-license requirements.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Choosing Strata quantization: Q2_0, IQ2_XS, IQ3_S, and Coder</h1><p>Start with a smaller size when RAM is tight; try a full-expert model first for multilingual and general work.</p><p id="guide-page-summary">Strata runs quantized sizes of the Qwen3.8-Flash-Next base model: Q2_0, IQ2_XS, IQ3_XXS, and IQ3_S. Smaller files use less memory and are generally faster; larger sizes need more RAM. Coder removes 256 of 512 experts for coding data, while Swift 1.5 is a fine-tune with shorter pre-answer reasoning. Choose against 32, 48, 64, or 96 GB RAM guidance and your Korean or Japanese quality needs, then test your own prompts.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>At 48 GB RAM compare IQ2_XS or faster Q2_0; at 64 GB, start with IQ2_XS.</li><li>Coder retains 256 of 512 experts for coding and may be weaker on CJK output.</li><li>Swift 1.5 is a fine-tune that shortens pre-answer reasoning; check its distribution license.</li></ol></section><section><h2>Quantization changes weight storage and memory needs</h2><p>A quantized Strata model stores Qwen3.8-Flash-Next weights with fewer bits. The runtime loads the file, takes input tokens, and generates reply tokens. Q2_0, IQ2_XS, IQ3_XXS, and IQ3_S are compressed sizes of the same base model; they differ from variants such as Coder or Swift 1.5, whose training or expert composition changes.</p><p>Strata's total model-memory estimates describe weights placed across RAM and VRAM. The table compares expert-weight capacity and starting RAM for each quantization size.</p><table><caption>Total weight memory and expert size by quantization</caption><thead><tr><th scope="col">Model size</th><th scope="col">Total weights (RAM + VRAM)</th><th scope="col">Expert weights</th><th scope="col">Starting RAM</th></tr></thead><tbody><tr><th scope="row">Q2_0</th><td>37.6 GB</td><td>34 GB</td><td>48 GB</td></tr><tr><th scope="row">IQ2_XS</th><td>39.2 GB</td><td>35.5 GB</td><td>48 GB</td></tr><tr><th scope="row">IQ3_XXS</th><td>47.0 GB</td><td>43 GB</td><td>64 GB</td></tr><tr><th scope="row">IQ3_S</th><td>54.8 GB</td><td>50 GB</td><td>64 GB (few other apps) or 96 GB+</td></tr></tbody></table><p>Expert size is the capacity of the model's expert weights. Strata's RAM estimate adds about 10 GB for the operating system and other programs. On a 32 GB PC with 24 GB VRAM, low-RAM mode can also run Q2_0 or IQ2_XS.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#the-sizes">Model sizes and memory requirements</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-3090-guide">Run Strata on an RTX 3090 24 GB: VRAM, RAM, and long context</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules on a warm wood desk indoors" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose a quantized size for your RAM, then compare replies on real tasks.</figcaption></figure><section><h2>Resident and mmap place non-GPU experts differently</h2><p>Low-RAM resident mode copies the experts not held by the GPU into RAM. Mmap mode maps those experts from a file and uses the operating-system file cache. A larger GPU can hold more experts and reduce disk reads in either mode. With a smaller GPU and little free RAM, mmap may read from disk frequently and slow replies. Check Monitor and disk activity after startup to assess your configuration.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Recommended configurations by RAM</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#a-big-graphics-card-and-little-ram">Low-RAM modes and placement</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a warm wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>RAM headroom and placement vary with model size.</figcaption></figure><section><h2>Consider Coder's scope for Korean and Japanese work</h2><p>Coder is an IQ1_M model that retains 256 of 512 experts in each layer, selected for coding data. Pruning half the experts can weaken non-code work and languages other than English. A project issue reports incorrect or looping Chinese output despite adequate English coding results. If Korean or Japanese documents and general prompts are your main use, compare the same prompts with Q2_0 or IQ2_XS.</p><p>If code generation and repository edits are your main tasks and you have 32 GB of RAM, Coder is worth considering. Because it removes half the experts, results may differ on non-coding tasks and languages other than English.</p><p>If you also chat, translate, or summarize documents, send the same prompts to the original and Coder and compare their language results. If you have a 24 GB GPU that supports Q2_0 low-RAM mode, you can try the original model first for non-coding tasks.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#coder">Coder composition and documented scope</a></li></ul></section><section><h2>Swift 1.5 is tuned to start a reply sooner</h2><p>Swift 1.5 is UkisAI's fine-tune of Qwen3.8-Flash-Next. Its token generation rate is similar to the matching base size, but it tends to spend less time reasoning before replying, so the first answer may arrive sooner. Memory needs are similar to the corresponding original size, such as Q2_0 or IQ2_XS; IQ3_S is not available.</p><p>Try Swift 1.5 if you often ask for short replies and pre-answer waiting is disruptive. For complex coding or analysis where reasoning affects the result, send the same prompt to both the original and Swift, and compare first-reply delay and any missing details. Its weights have a separate license from Strata code; read the Swift 1.5 distribution page.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#swift-15">Swift 1.5 model notes</a></li><li><a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-Flash-Next-GSQ-RCO-GGUF">Swift 1.5 distribution page</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards and other components installed in an open PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare coding-focused Coder with a full-expert model on the same prompt.</figcaption></figure><section><h2>Compare with your prompts and check each file's license</h2><p>Send the same short prompt, typical Korean or Japanese document, and coding task to each model, and record the model size and Strata version. Compare RAM use, time to first reply, output rate, and whether the answer contains what your task needs. Do not transfer a measurement from one RTX 5070 setup to a different GPU or model version.</p><p>The Strata code is under the MIT License, while each model file follows its own distribution terms. The original Qwen page lists the Qwen Community License 1.0.</p><p>The Swift 1.5 page lists the Swift Open License 1.0 for Swift contributions and the Qwen Community License 1.0 for original Qwen components. The Coder page header shows Apache 2.0, but its license section says the weights follow the original model's terms.</p><p>Before modifying or redistributing a model, including Coder, or using it in a service, read the license section on its distribution page and the accompanying NOTICE. UD-Q4_K_XL is experimental.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md">Official model list and sizes</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md#license">Code and model license notes</a></li><li><a href="https://huggingface.co/ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-Coder-GGUF">Coder model distribution and license</a></li><li><a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-Flash-Next-GSQ-RCO-GGUF">Swift 1.5 model distribution and license</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata runs quantized sizes of the Qwen3.8-Flash-Next base model: Q2_0, IQ2_XS, IQ3_XXS, and IQ3_S. Smaller files use less memory and are generally faster; larger sizes need more RAM. Coder removes 256 of 512 experts for coding data, while Swift 1.5 is a fine-tune with shorter pre-answer reasoning. Choose against 32, 48, 64, or 96 GB RAM guidance and your Korean or Japanese quality needs, then test your own prompts.</dd></div><div><dt>How much memory does it need?</dt><dd>Expert size is the capacity of the model's expert weights. Strata's RAM estimate adds about 10 GB for the operating system and other programs. On a 32 GB PC with 24 GB VRAM, low-RAM mode can also run Q2_0 or IQ2_XS.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Try Swift 1.5 if you often ask for short replies and pre-answer waiting is disruptive. For complex coding or analysis where reasoning affects the result, send the same prompt to both the original and Swift, and compare first-reply delay and any missing details. Its weights have a separate license from Strata code; read the Swift 1.5 distribution page.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Strata PC memory guide: choosing a model with 32, 48, 64, or 96 GB RAM</title><link>https://localai.co.kr/en/guides/strata-memory-pc-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-memory-pc-guide</guid><description>Learn how VRAM and RAM divide expert placement in Strata, how resident and mmap low-RAM modes differ, and which sizes suit 32–96 GB RAM. Account for CPU work, NVMe storage, and context cache to avoid memory pressure.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">Strata PC memory guide: choosing a model with 32, 48, 64, or 96 GB RAM</h1><p>RAM must hold more than model weights; leave room for the operating system and context too.</p><p id="guide-page-summary">Strata usually keeps all experts in RAM and caches frequently used copies on the GPU. Resident low-RAM mode copies non-GPU experts into RAM; mmap mode maps the file and reads experts when needed. At 32 GB RAM, candidates are Coder or low-RAM Q2_0/IQ2_XS depending on GPU capacity; at 48 GB, IQ2_XS or Q2_0; at 64 GB, IQ2_XS and larger sizes; and at 96 GB or more, IQ3_S or UD-IQ4_XS. Budget for the operating system, apps, context KV cache, and work handled by the CPU and NVMe drive.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Usually all experts are in RAM while the GPU caches frequently used experts.</li><li>Resident copies non-GPU experts into RAM; mmap reads them from files.</li><li>Longer context needs separate headroom for KV cache and apps.</li></ol></section><section><h2>VRAM holds expert cache; RAM supports CPU work</h2><p>Strata runs Qwen3.8-Flash-Next by placing some weights in GPU memory (VRAM) and distributing expert work across system RAM and the CPU. In the default configuration, RAM holds all experts while the GPU caches copies of frequently used ones. For each token, the GPU computes experts in its cache; the CPU computes experts in RAM that are not on the GPU, alongside GPU work.</p><p>A larger GPU can cache more experts in VRAM and reduce the CPU's share. System RAM is also needed by the operating system, apps such as browsers, the context KV cache, and model loading. Strata's model guide adds about 10 GB beyond expert requirements when estimating RAM. Leave room for other processes instead of comparing only the model file size with RAM.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md#who-does-what">GPU, RAM, and CPU roles</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules on a warm wood desk indoors" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>RAM is shared by the model, operating system, and conversation context.</figcaption></figure><section><h2>Resident and mmap handle low RAM differently</h2><p>Low-RAM resident mode copies the experts not held by the GPU into RAM at startup. It does not read expert weights from disk while answering. The engine cannot use this variant if RAM cannot hold the non-GPU experts plus about 4 GB of headroom. Strata documents Q2_0, IQ2_XS, and Coder in resident mode on a 32 GB RAM, 24 GB VRAM PC.</p><p>Mmap mode maps the expert file into memory addresses and reads parts as needed. The operating system can reclaim cached file data when RAM is short, but if a frequently needed expert is absent from cache, it must be read from the SSD again. With 12–16 GB VRAM and 32 GB RAM, Coder may fit resident while a size such as IQ3_XXS that exceeds available RAM may use mmap. If heavy SSD reads coincide with slow replies, choose a smaller model or close other apps.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#a-big-graphics-card-and-little-ram">Resident and mmap low-RAM details</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a warm wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Resident keeps non-GPU experts in RAM; mmap reads them from a file as needed.</figcaption></figure><section><h2>Narrow model choices by RAM capacity</h2><p>Strata's RAM guide combines model size with GPU capacity. This table summarizes a starting model and its expert-weight capacity for 32, 48, 64, and 96 GB RAM systems.</p><table><caption>Starting models and placement by RAM</caption><thead><tr><th scope="col">System RAM</th><th scope="col">Starting model</th><th scope="col">Configuration notes</th></tr></thead><tbody><tr><th scope="row">32 GB</th><td>Coder</td><td>Starting point for a typical GPU setup; with 24 GB VRAM, low-RAM mode can also run Q2_0 or IQ2_XS</td></tr><tr><th scope="row">48 GB</th><td>IQ2_XS or Q2_0</td><td>IQ2_XS is balanced; Q2_0 is faster</td></tr><tr><th scope="row">64 GB</th><td>IQ2_XS; IQ3_XXS or IQ3_S also fit</td><td>Keep other apps to a minimum for IQ3_S</td></tr><tr><th scope="row">96 GB+</th><td>IQ3_S or UD-IQ4_XS</td><td>UD-IQ4_XS can keep all experts in RAM from about 80 GB RAM</td></tr></tbody></table><p>The RAM tiers are starting points. Allow about 10 GB for the OS and other programs; low-RAM choices on a 32 GB PC depend on GPU capacity. Check the remaining headroom in Monitor with your usual context and apps.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Official RAM selection table</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-4gb-vram-moe-guide">XeStrata beta models and RAM requirements for 4 GB VRAM</a></li></ul></section><section><h2>Context cache and image input also use memory</h2><p>Context length limits the prompt and output the model can handle in one conversation. The KV cache grows as the conversation gets longer. At 64K and above, settings can stream part of the cache through RAM and keep only frequently read portions in GPU memory, changing RAM and VRAM use. If memory is short, reduce context first and choose a length based on whether you need short prompts or long documents.</p><p>Enabling image input adds a vision encoder that uses VRAM and can reduce the space left for expert cache. If you do not need images, turn the option off during setup; if you do, close other GPU apps to free space. If replies stop after loading on a low-RAM system, lower context and image settings one at a time to see which allocation is short.</p></section><section><h2>CPU and NVMe storage handle work beyond GPU memory</h2><p>The CPU computes experts that are not in the GPU cache. A recent desktop CPU with AVX2 is the baseline; some CPUs with AVX-512 can help with CPU-side expert computation. CPU capability and RAM bandwidth affect the speed of expert work outside the GPU, so check RAM channel configuration and actual memory speed in system tools.</p><p>Strata stores a per-layer embedding table on the SSD and reads needed rows for each token. This is separate from resident copies of expert files in RAM. NVMe storage speeds initial model loading and PLE row reads. In mmap low-RAM mode, frequent expert reads from disk also depend on SSD performance and the RAM file cache. If disk activity stays high while output slows, consider a smaller model or a GPU and RAM combination that supports resident mode.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md">How Strata uses PC components</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#a-big-graphics-card-and-little-ram">Low-RAM storage and loading</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards and other components installed in an open PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A GPU that holds more experts can reduce work handled by the CPU and SSD.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata usually keeps all experts in RAM and caches frequently used copies on the GPU. Resident low-RAM mode copies non-GPU experts into RAM; mmap mode maps the file and reads experts when needed. At 32 GB RAM, candidates are Coder or low-RAM Q2_0/IQ2_XS depending on GPU capacity; at 48 GB, IQ2_XS or Q2_0; at 64 GB, IQ2_XS and larger sizes; and at 96 GB or more, IQ3_S or UD-IQ4_XS. Budget for the operating system, apps, context KV cache, and work handled by the CPU and NVMe drive.</dd></div><div><dt>How much memory does it need?</dt><dd>Strata runs Qwen3.8-Flash-Next by placing some weights in GPU memory (VRAM) and distributing expert work across system RAM and the CPU. In the default configuration, RAM holds all experts while the GPU caches copies of frequently used ones. For each token, the GPU computes experts in its cache; the CPU computes experts in RAM that are not on the GPU, alongside GPU work.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How to read Strata speed benchmarks: short chats and long prompts</title><link>https://localai.co.kr/en/guides/strata-speed-benchmark-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-speed-benchmark-guide</guid><description>Separate prompt-processing throughput from answer-generation speed in Strata benchmarks, and review RTX 5070 and Radeon conditions, TTFT, output length, and cache effects.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">How to read Strata speed benchmarks: short chats and long prompts</h1><p>Prompt-reading speed and answer-generation speed measure different work.</p><p id="guide-page-summary">Strata accepts a prompt and conversation history, then generates an answer with Qwen3.8-Flash-Next. Prompt throughput measures input processing; output tok/s measures answer generation. The RTX 5070 Q2_0 figures of 94, 76, and 2,650 tok/s are separate engine 0.1.36 measurements for a short chat, a 128K context, and a 32K prompt. AMD results come from a different PC, so they are not a direct GPU ranking; 0.1.43 figures also require their hardware and setup conditions.</p><p>Strata speed tables separate the stage that reads a prompt from the stage that generates an answer. Distinguishing the wait for the first character after sending long code or a document from the rate at which the answer appears helps identify the bottleneck in your work.</p><p>This guide includes older PC-level measurements and changes reported in 0.1.43 on October 11. Check the model, quantization, GPU, runtime, and prompt length listed for each table, then compare before/after results with matching conditions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Prompt throughput is input-token processing speed; output tok/s is the rate at which the answer is generated.</li><li>Prompt throughput can estimate the input-processing portion, but measure first-token latency (TTFT) with a real request.</li><li>Record version, cache state, answer length, and GPU conditions to compare published and local results.</li></ol></section><section><h2>Separate prompt processing from answer generation</h2><p>Prompt throughput is the rate at which the model reads tokens in the question and conversation history. Output speed is the rate at which it generates the answer after the first token. Both use tok/s: prompt throughput affects the wait for a response, while output speed affects how quickly the answer continues.</p><p>TTFT (time to first token) is the time from sending a request until the first output token arrives. It can include app-side request preparation and server queueing as well as model prompt processing. If you want to know how long a long prompt delays the first answer, record request time and first-token time in the actual app instead of relying only on throughput.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#how-fast-is-each-size">Official Strata speed table by model size</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-5070-guide">Run Strata on an RTX 5070 12 GB: Model and RAM choices</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate short-chat answer speed from long-prompt processing.</figcaption></figure><section><h2>Compare the RTX 5070 and RX 9070 XT by PC</h2><p>The figures below are historical published Q2_0 measurements from an RTX 5070 and RX 9070 XT. They place three different workloads side by side: a short answer, answer generation with a 128K context, and processing a 32K prompt. Even with the same unit, each row represents a different input and generation task.</p><table><caption>Historical Q2_0 measurements: prompt processing and answer generation are separate workloads.</caption><thead><tr><th scope="col">Workload</th><th scope="col">RTX 5070 PC</th><th scope="col">RX 9070 XT PC</th></tr></thead><tbody><tr><th scope="row">Short-chat answer</th><td>94 tok/s</td><td>60 tok/s</td></tr><tr><th scope="row">Answer with 128K context</th><td>76 tok/s</td><td>48 tok/s</td></tr><tr><th scope="row">32K prompt processing</th><td>2,650 tok/s</td><td>1,160 tok/s</td></tr></tbody></table><p>The NVIDIA PC used an RTX 5070 12 GB, Ryzen 5 7600, 64 GB DDR5-5200 RAM, Windows, and Strata 0.1.36. The AMD PC used an RX 9070 XT 16 GB, Ryzen 9 3900X, 47 GB RAM, and Linux. Q2_0 on the AMD system exceeded setup's RAM estimate and was installed with `--model Q2_0 --yes`. These are results from separate PCs, not a controlled test that changed only the GPU.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#how-fast-is-each-size">Speed by model and test conditions</a></li></ul></section><section><h2>A long-prompt calculation covers only part of first-token time</h2><p>Dividing 32,000 tokens by the RTX 5070's 2,650 tok/s prompt throughput gives about 12.1 seconds for input processing. Using the RX 9070 XT's 1,160 tok/s gives about 27.6 seconds. The calculation is prompt-token count divided by throughput, an estimate of the model's input-reading stage.</p><p>The wait for the first token also includes the app's request preparation and server queue. Reusing a prompt cache reduces the input that the model must read again. Send the same prompt through the app and record the request time and first-token arrival to measure TTFT including these stages.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured">Detailed measurements and engine conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM, and an NVMe SSD on a cream-colored wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Short chat, a 32K prompt, and a 128K-context answer are different workloads.</figcaption></figure><section><h2>Record answer length and cache state too</h2><p>Output tok/s measures ongoing answer generation, so a 400-token answer takes longer than a 40-token answer at the same rate. To compare completion time, record the first-token wait, generated-token count, and time of the final token. Speculative decoding can also change output speed because the number of accepted draft tokens varies by answer.</p><p>Separate a prompt sent in a new conversation from one sent as a follow-up in the same conversation. If the prompt cache reuses earlier context, the amount of input the model rereads can change. Record the Strata version, model and quantization, prompt and output lengths, GPU and CPU, context, whether it was a first request or follow-up, and cache state.</p><p>Default Windows RTX 5070 decode in 0.1.43 matches 0.1.42. Linux NVIDIA enables adaptive overlap and automatic PCIe sharing by default. Results for the AMD R9700 and Arc Pro B70 are listed by model, cache, and context. Find the row matching your setup in the relevant GPU guide, then compare the same workload before and after updating.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#how-fast-is-each-size">Official speed table by model</a></li><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">0.1.43 GPU-specific changes and conditions</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured">Detailed speed measurement notes</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards installed inside an assembled PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Repeat measurements with the same prompt and output lengths as your real workload.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata accepts a prompt and conversation history, then generates an answer with Qwen3.8-Flash-Next. Prompt throughput measures input processing; output tok/s measures answer generation. The RTX 5070 Q2_0 figures of 94, 76, and 2,650 tok/s are separate engine 0.1.36 measurements for a short chat, a 128K context, and a 32K prompt. AMD results come from a different PC, so they are not a direct GPU ranking; 0.1.43 figures also require their hardware and setup conditions.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Strata AMD HIP guide: Run Radeon on Windows and Linux</title><link>https://localai.co.kr/en/guides/strata-amd-hip-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-amd-hip-guide</guid><description>Learn how to prepare and install Strata's HIP backend for AMD Radeon on Windows and Linux, verify a first response, and interpret the 0.1.43 measurements.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Strata AMD HIP guide: Run Radeon on Windows and Linux</h1><p>Windows uses the bundled runtime with the AMD driver; Linux prepares a HIP engine for supported cards.</p><p id="guide-page-summary">Strata's HIP backend runs Qwen3.8-Flash-Next on supported AMD Radeon GPUs. Windows uses a current Adrenalin driver and the bundled HIP runtime; Linux uses the kernel's amdgpu driver and prepares ROCm and a card-specific engine. This guide distinguishes card support, validation status, image and multi-GPU limits, and the 0.1.43 results.</p><p>Strata's HIP backend is the execution path that uses a supported AMD Radeon GPU to process Qwen3.8-Flash-Next prompts and generate answers. Setup prepares the model on both Windows and Linux, but the runtime setup and validated combinations differ.</p><p>Windows uses the Adrenalin driver and a prepared HIP runtime. Linux requires the kernel driver, ROCm, and an engine built for the card architecture. Validation of model execution on individual Radeons with the current Windows bundle is limited; the steps below cover driver preparation followed by an actual model-response check.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Windows uses a current Adrenalin driver and the release HIP ZIP; a separate ROCm SDK install is not required.</li><li>Linux needs a supported Radeon and the amdgpu driver; setup handles ROCm selection and engine compilation.</li><li>Read 0.1.43 gains with the R9700 cache setting, model, context, and per-GPU test conditions.</li></ol></section><section><h2>First check the Radeon generation and operating system</h2><p>The official AMD HIP guide lists the RX 7900 XT/XTX (gfx1100), RX 7800 XT/7700 XT (gfx1101), RX 9060 XT (gfx1200), and RX 9070/9070 XT and Radeon AI PRO R9700 (gfx1201) for Linux. The RX 6800/6900 family (gfx1030) has community run reports, with a different validation status from maintainer-validated cards. Match your exact GPU architecture to Strata's support table.</p><p>Integrated Radeon GPUs are currently listed as unsupported in the Linux guide. Instinct MI50/MI60 and Radeon VII (gfx906) use a separate opt-in build; Ryzen AI Max Strix Halo (gfx1151) has a Linux source-build path. A single run cannot mix AMD and NVIDIA GPUs.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md">Official AMD HIP GPU support list</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/STRIX_HALO.md">Strix Halo source-build guide</a></li><li><a href="https://localai.co.kr/en/hardware/amd-ryzen-ai-max-plus-395-128gb">Ryzen AI Max+ 395 128GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Strata connects a Radeon GPU to the local runtime on your PC.</figcaption></figure><section><h2>On Windows, use the driver and bundled ZIP</h2><p>Install a current AMD Software: Adrenalin Edition driver and restart the PC. Run `START-HERE.bat` in the Strata folder; setup can select HIP automatically when there is no usable NVIDIA GPU. If both NVIDIA and AMD cards are present, choose HIP with `START-HERE.bat --backend hip`. Windows uses the runtime and BLAS libraries in the release ZIP, so you do not separately install ROCm, the HIP SDK, or a compiler.</p><p>Setup checks for a HIP device and the bundled engine before downloading the model. The current AMD guide says maintainers have not yet verified the ready-made Windows ZIP running a model on a discrete Radeon. The historical RX 9070 XT Windows result came from a user who compiled version 0.1.34 on that PC. As of 0.1.40.2, the prepared ZIP also lacked a discrete-card model-run validation; its bundle check was limited to device discovery and GEMM on a Ryzen integrated Radeon. Keep those historical measurements separate from validation of the current bundle.</p><p>To test a first prompt, open `http://127.0.0.1:8080` and send a short message in Chat. If a model does not run with the Windows HIP ZIP, first inspect the end of the error log and the device-test results. The official guide requests `engine\strata-device.exe --list-devices` and `engine\strata-device.exe --selftest`; before running them, set `PATH` from the Strata folder with `set PATH=%CD%\engine\rocm\bin;%PATH%`.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md#windows">Windows HIP requirements and validation status</a></li></ul></section><section><h2>Linux setup prepares ROCm and the card-specific engine</h2><p>On Linux, go to the repository folder on a PC with a supported discrete Radeon and the kernel's `amdgpu` driver. HIP is selected automatically when no usable NVIDIA card is present; otherwise, specify the backend with an option.</p><div><p><strong>Start HIP setup on Linux</strong></p><pre><code data-guide-code-block="2-0">./setup.sh --backend hip</code></pre><p><small>Choose the model and context in the setup screen after running this command.</small></p></div><p>If system ROCm 7 with hipcc and hipBLAS is available, setup uses it. Otherwise, or when the installed version is older than 7.0, setup installs AMD TheRock wheels in `.venv`. This route does not install ROCm system-wide or require sudo, but it needs about 10 GB of additional disk space. Setup then compiles an engine for the card architecture using C++ build tools and Git; the first build may take about 10–20 minutes.</p><p>Choose the model and context settings when setup asks; the server then starts. In the browser, send a short prompt in Chat at `http://127.0.0.1:8080`. The displayed answer confirms that the model processed the request. If the page does not open, enter the address shown in the setup window.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md#install-with-setup-recommended">Recommended Linux HIP installation steps</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md#amd-cards">Installation flow for AMD cards</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM, and an NVMe SSD on a cream-colored wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Radeon, RAM, and NVMe SSD are components used to run a local model.</figcaption></figure><section><h2>The 0.1.43 results vary by card and setup</h2><p>The October 11 release of 0.1.43 measured the R9700 with different cache sizes and quantization formats. Gains were larger with a limited cache, while results with the full 32 GB cache varied by model.</p><table><caption>Official Strata 0.1.43 R9700 comparisons</caption><thead><tr><th scope="col">GPU cache setting</th><th scope="col">Quantization and measurement</th><th scope="col">Change from previous build</th></tr></thead><tbody><tr><th scope="row">R9700 32 GB · 16 GB-class cache</th><td>IQ3_XXS · decode</td><td>+21~38%</td></tr><tr><th scope="row">R9700 32 GB · 16 GB-class cache</th><td>IQ3_XXS · 4K / 32K prompt</td><td>+7.5% / +15.6%</td></tr><tr><th scope="row">R9700 32 GB · 32 GB cache</th><td>Q2_0 / IQ3_XXS · decode</td><td>+2~10%</td></tr><tr><th scope="row">R9700 32 GB · 32 GB cache</th><td>IQ3_S · decode</td><td>+6~14%</td></tr></tbody></table><p>The test GPU is an R9700 with 32 GB of physical VRAM. “16 GB-class cache” limits its expert cache to the size used on a 16 GB card. The table contains no measurements for the RX 9070 XT or older RDNA cards.</p><p>The R9700 figures are medians from five interleaved pairs against the previous build. The [v0.1.43 release notes](https://github.com/Niko1221/Strata/releases/tag/v0.1.43) list results by model and cache setting and give the comparison conditions; card configurations are in the [AMD HIP measurements](https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md).</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">Strata 0.1.43 release and conditions</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md">AMD HIP details and more measurements</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards installed inside an assembled PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>AMD measurements make sense only with the card, engine, and context conditions.</figcaption></figure><section><h2>Check Linux support for images and multiple GPUs</h2><p>With image input enabled on Linux AMD, the default image encoder runs on the CPU. A photo prompt therefore includes CPU image processing before answer generation; record its first-response wait separately from text-only prompts. AMD setup does not yet provide automatic calibration. Linux Monitor reads card load, VRAM, temperature, and power through sysfs.</p><p>Linux can split model layers across multiple Radeon cards by specifying them with an option such as `--gpus 1,0`. Adding a second card may not help when one card already holds all experts; a published R9700 plus RX 9070 XT test was slower than the R9700 alone on some tasks. Compare a split when the model's experts do not fit on one card.</p><p>For image work, record the first-response wait using the same photo. For multiple GPUs, compare against one card using the same model, context, and prompt. Keeping Linux Monitor load and memory readings alongside those times helps locate delays in CPU processing or GPU splitting.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata's HIP backend runs Qwen3.8-Flash-Next on supported AMD Radeon GPUs. Windows uses a current Adrenalin driver and the bundled HIP runtime; Linux uses the kernel's amdgpu driver and prepares ROCm and a card-specific engine. This guide distinguishes card support, validation status, image and multi-GPU limits, and the 0.1.43 results.</dd></div><div><dt>How much memory does it need?</dt><dd>The test GPU is an R9700 with 32 GB of physical VRAM. “16 GB-class cache” limits its expert cache to the size used on a 16 GB card. The table contains no measurements for the RX 9070 XT or older RDNA cards.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Strata Multi-GPU Layer Splitting: Setup and Results</title><link>https://localai.co.kr/en/guides/strata-multi-gpu-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-multi-gpu-guide</guid><description>Learn how Strata splits model layers across GPUs, configure automatic or manual splits, decide when another card helps, and interpret RTX 5080/3090 prompt and decode results.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Strata Multi-GPU Layer Splitting: Setup and Results</h1><p>The GPUs take different layer stages; their memory is not simply pooled.</p><p id="guide-page-summary">Strata's multi-GPU mode assigns contiguous model layers to different cards using pipeline/layer parallelism. Select cards with --gpus 0,2 or configure gpu and layer_split. In the RTX 5080 + 3090 Coder results, prompt throughput rose about 18–20%, while decode results differed between story and code tasks. NVLink is not required, but adding a slower card does not guarantee a speedup.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Layer splitting assigns contiguous model ranges to different GPUs.</li><li>NVIDIA multi-GPU does not require NVLink; handoffs pass through host memory.</li><li>Compare prompt processing and answer decode separately while holding model and test conditions constant.</li></ol></section><section><h2>Layer splitting assigns a range of model layers to each card</h2><p>Strata's multi-GPU layer split assigns contiguous ranges of one model's layers to different cards. The first GPU processes early layers and hands results to the next GPU, which processes later layers. Each card keeps an expert cache for its own layers; the last GPU also runs the output head and draft/MTP layer.</p><p>This is layer/pipeline parallelism. Each GPU handles different layers; unlike tensor parallelism, it does not split one layer’s matrices across GPUs.</p><p>Token data crosses between cards once per verify window through host memory. NVLink and GPU peer-to-peer support are not required, so PCIe x4 or x1 can work.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/v0.1.40.2/docs/MULTI_GPU.md">Layer split design and limits</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/polystrata-local-moe-guide">Can an 8GB GPU run Qwen and Gemma faster? Install PolyStrata and use two GPUs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Each GPU handles a different range of model layers.</figcaption></figure><section><h2>Another card helps when one card cannot cache enough experts</h2><p>When two cards split the layers, each caches experts for its own stage. A second card can reduce CPU work during decode when one card cannot hold enough of the frequently used experts. Every card also needs dense weights, the full context's KV state, a verify window, and prompt buffers, so summed VRAM alone does not determine whether a model fits.</p><p>Adding a card also adds PCIe transfer overhead, so a slower GPU does not always make the run faster. With two cards, Strata tests split points and chooses the layout that fits the most expert profiles.</p><p>If the cards use different architectures, check runtime support and build requirements. NVIDIA and AMD cards cannot be mixed in one run.</p><p>The setup tool flags a second card with less than 8 GB of VRAM. Each card needs room for dense weights and the prompt buffer, so limited VRAM can constrain the whole layout.</p><p>Before adding a card, check cache hit rate and CPU use with the current single-card setup. Decide which bottleneck the second card should reduce, then test it.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/v0.1.40.2/docs/MULTI_GPU.md#what-each-card-holds">Per-card memory and requirements</a></li></ul></section><section><h2>Choose GPUs through setup or the config file</h2><p>On Windows, run START-HERE.bat --gpus 0,2 from the Strata folder to select and remember two cards. On Linux, use ./setup.sh --gpus 0,2. NVIDIA device numbers follow nvidia-smi. --gpus all selects every supported card; --gpu 0 selects one card for that start only.</p><p>In the config, set the gpu array and layer_split. For example, gpu [0, 2] with layer_split auto enables automatic placement. A manual layer_split of 26 means the second card starts at layer 26. For three cards, enter the first layer of each later stage in ascending order, such as 18,32. These are boundary indices, not layer counts.</p><p>Strata reports the selected card order in its startup log. The later main/0.1.41 line of the docs and setup.py says auto ordering places the faster card last. That auto-sort and the gpu_order setting are not in v0.1.40.2, so for that version use the order shown by setup and the startup log.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/v0.1.40.2/docs/MULTI_GPU.md#using-it">Card selection and setup in v0.1.40.2</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MULTI_GPU.md#using-it">Later main-branch auto-ordering notes</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/setup.py">Later main-branch card-order code</a></li><li><a href="https://localai.co.kr/en/guides/xestrata-mixed-gpu-guide">Split a model across Intel Arc and RTX GPUs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM, and an NVMe SSD on a cream-colored wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Account for each card's memory and PCIe path when adding a GPU.</figcaption></figure><section><h2>The 5080 + 3090 showed larger gains in prompt processing</h2><p>These Coder results used a Ryzen 9 9950X3D and 32K context. They separate a single RTX 5080 from RTX 5080 + 3090 automatic and manual splits, and report prompt processing at two lengths separately from story and code decode.</p><p>In a separate setup, adding a slower RTX 2080 Ti as a third card lowered story and code decode to 68 and 90 tok/s. Check which workload bottleneck another card would solve rather than relying on card count or summed VRAM.</p><table><caption>Coder results: single RTX 5080 and 5080 + 3090 split</caption><thead><tr><th scope="col">Setup</th><th scope="col">16K prompt tok/s</th><th scope="col">28K prompt tok/s</th><th scope="col">Story decode tok/s</th><th scope="col">Code decode tok/s</th></tr></thead><tbody><tr><th scope="row">RTX 5080 alone</th><td>1,726–2,017</td><td>1,970</td><td>83–87</td><td>88–105</td></tr><tr><th scope="row">5080 + 3090 · auto K=22</th><td>2,037</td><td>2,073</td><td>80</td><td>109</td></tr><tr><th scope="row">5080 + 3090 · manual K=26</th><td>2,039</td><td>2,357</td><td>84</td><td>110</td></tr></tbody></table><p>Source: the Coder results table in Strata v0.1.40.2 MULTI_GPU.md. Prompt throughput and answer decode are different workloads; read the columns separately.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/v0.1.40.2/docs/MULTI_GPU.md#measured">RTX 5080 and 3090 split benchmark</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards installed inside an assembled PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Two graphics cards are installed inside the PC.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata's multi-GPU mode assigns contiguous model layers to different cards using pipeline/layer parallelism. Select cards with --gpus 0,2 or configure gpu and layer_split. In the RTX 5080 + 3090 Coder results, prompt throughput rose about 18–20%, while decode results differed between story and code tasks. NVLink is not required, but adding a slower card does not guarantee a speedup.</dd></div><div><dt>How much memory does it need?</dt><dd>Token data crosses between cards once per verify window through host memory. NVLink and GPU peer-to-peer support are not required, so PCIe x4 or x1 can work.</dd></div><div><dt>When is it better not to choose this?</dt><dd>When two cards split the layers, each caches experts for its own stage. A second card can reduce CPU work during decode when one card cannot hold enough of the frequently used experts. Every card also needs dense weights, the full context's KV state, a verify window, and prompt buffers, so summed VRAM alone does not determine whether a model fits.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Strata troubleshooting: downloads, first launch, and slow responses</title><link>https://localai.co.kr/en/guides/strata-troubleshooting-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-troubleshooting-guide</guid><description>When Strata 0.1.43 setup stalls or the first response is slow, check download resumption, model loading, RAM and SSD access, GPU detection, and port conflicts by stage.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Strata troubleshooting: downloads, first launch, and slow responses</h1><p>The error message and the stage where setup stopped point to the next check.</p><p id="guide-page-summary">Strata prepares the engine and model at startup, loads the model into RAM and GPU memory, and then opens the local server. Resume an interrupted download with the same update file, and keep the progress window open if the PC slows during the first load. Low-RAM resident and mmap modes supply experts differently; PLE is separate data read from storage. Version 0.1.43 also fixes parallel NTFS reads for Windows low-RAM GGUF-mmap setups.</p><p>At startup, Strata's launcher prepares the engine and model, loads the model into memory, and opens the local server. When an error occurs, note the last completed stage and the first error in the window or log. The next check depends on whether setup stopped during download, GPU initialization, model loading, or browser connection.</p><p>Record the OS, GPU model, driver, and Strata version. AMD on Windows requires an Adrenalin driver, and validation of model execution on individual discrete Radeons with the current HIP ZIP remains limited. Consult the [installation guide](https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md) and [AMD HIP documentation](https://github.com/Niko1221/Strata/blob/main/docs/AMD_HIP.md) for your OS to find support status and diagnostic commands.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Resume an interrupted download by rerunning the same launcher or update file.</li><li>Resident mode prepares experts outside the GPU in RAM at startup; mmap supplies them through files and the OS cache.</li><li>Check port 8080, GPU support, and operating-system-specific validation separately.</li></ol></section><section><h2>Distinguish an interrupted download from the first model load</h2><p>If the model download stops during first setup, rerun `START-HERE.bat` on Windows or `./setup.sh` in the same Strata folder on Linux. Setup resumes with files already downloaded. For an update to an existing branch-based Git installation, rerun `UPDATE.bat` or `./update.sh`, then use the launcher to start the model. A fixed-tag installation needs a new release ZIP. If downloads keep failing, check free disk space and the network connection.</p><p>During the first model load, Strata places model experts in RAM and prepares space for the GPU. The official installation guide says the PC may slow down or appear unresponsive for 1–3 minutes on the first run. Keep the window open while progress information changes. Distinguish a brief unchanged screen from repeated error messages in the log.</p><p>If there is no progress for more than 10 minutes and errors continue, restart the PC and close memory-heavy apps such as browsers, games, or editors. Select a smaller model or shorter context in setup and try again. If the error appears during GPU initialization, record the driver version and the end of the Strata log.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md">Installation and first-run guide</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/strata-amd-hip-guide">Strata AMD HIP guide: Run Radeon on Windows and Linux</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC, a blank monitor, and RAM modules beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the download and model-loading stages in order on the first run.</figcaption></figure><section><h2>For slow responses, distinguish resident, mmap, and PLE</h2><p>In low-RAM setups, resident mode copies experts outside GPU memory into RAM at startup and pins them there. If the remaining experts fit, their weights are not read from the SSD during responses. When RAM cannot hold the resident set, setup may use mmap instead. Mmap maps the expert file and supplies data through the OS file cache, so accessing uncached pages involves storage reads.</p><p>In Monitor, watch free RAM and disk reads together. If many experts outside the GPU are being read while RAM is short, test a smaller quantized model, a shorter context, and fewer concurrently running apps, one at a time. Low-RAM mode changes how experts are placed, and an mmap configuration that frequently reads experts from the SSD can be slow with limited VRAM.</p><p>PLE (per-layer embeddings) is an embedding table used by individual model layers. It is read from the SSD, so file access can continue in resident mode. Record available RAM and disk-read timing in Monitor and logs, then check whether the reads supply experts or PLE data.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works">Low-RAM expert placement modes</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#will-it-fit">Choose a model that fits your RAM</a></li></ul></section><section><h2>Check Windows GGUF-mmap reads on 0.1.43</h2><p>In low-memory Windows setups, keeping GGUF shards mmaped while using unbuffered NTFS reads could serialize expert-file reads. Strata 0.1.43 closes each shard's mapping view when the file tier starts unbuffered reads, restoring parallel reads. If GGUF-mmap responses were unusually slow, confirm the log shows the 0.1.43 engine and compare the same files, model, and prompt.</p><table><caption>Strata 0.1.43 Windows GGUF-mmap example · RTX 5070 · IQ3_XXS</caption><thead><tr><th scope="col">Experts in RAM</th><th scope="col">Story decode (tok/s)</th><th scope="col">Code decode (tok/s)</th><th scope="col">Short-prompt decode (tok/s)</th></tr></thead><tbody><tr><th scope="row">22 GiB</th><td>18.9 → 25.5 tok/s</td><td>13.5 → 21.1 tok/s</td><td>13.3 → 18.2 tok/s</td></tr><tr><th scope="row">12 GiB</th><td>9.6 → 16.0 tok/s</td><td>6.5 → 11.6 tok/s</td><td>4.6 → 8.5 tok/s</td></tr></tbody></table><p>Test conditions: RTX 5070, Ryzen 5 7600, 64 GB RAM, Windows, IQ3_XXS GGUF. Results are medians from five interleaved old/new pairs with either 22 GiB or 12 GiB of experts in RAM.</p><ul><li><a href="https://github.com/Niko1221/Strata/releases/tag/v0.1.43">Windows GGUF-mmap fix and original test conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM, and an NVMe SSD on a cream-colored wood desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Version 0.1.43 restores parallel unbuffered NTFS reads for Windows GGUF shards.</figcaption></figure><section><h2>Check GPU detection and port 8080</h2><p>If Strata cannot find the GPU, first check whether the operating system sees the card. On Windows AMD, update the driver in AMD Software: Adrenalin Edition and restart. On Linux AMD, check the `amdgpu` driver and HIP device-detection output in the setup log. For NVIDIA, run `nvidia-smi` in a terminal and check that the GPU and driver appear.</p><p>If you see `port 8080 is already in use`, check whether Strata is already running in another window. If it is, open the existing server at `http://127.0.0.1:8080`. If another app owns the port, use the documented option to select another port, such as `--port 8081`, and update the connected app to use the same port.</p><p>If the issue continues, record the OS, GPU and driver, Strata version, failed stage, and final log lines, then compare them with the [official troubleshooting guide](https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md). Turning off Windows protections or ignoring security warnings can expose the PC without identifying the cause. Start with documented support, memory, driver, and port checks.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md">Official checks by error type</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md">Support requirements and launch options</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards installed inside an assembled PC case" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the GPU driver and server port as separate causes.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata prepares the engine and model at startup, loads the model into RAM and GPU memory, and then opens the local server. Resume an interrupted download with the same update file, and keep the progress window open if the PC slows during the first load. Low-RAM resident and mmap modes supply experts differently; PLE is separate data read from storage. Version 0.1.43 also fixes parallel NTFS reads for Windows low-RAM GGUF-mmap setups.</dd></div><div><dt>How much memory does it need?</dt><dd>In low-memory Windows setups, keeping GGUF shards mmaped while using unbuffered NTFS reads could serialize expert-file reads. Strata 0.1.43 closes each shard's mapping view when the file tier starts unbuffered reads, restoring parallel reads. If GGUF-mmap responses were unusually slow, confirm the log shows the 0.1.43 engine and compare the same files, model, and prompt.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Strata on an RTX 5070 12 GB: Model and RAM choices</title><link>https://localai.co.kr/en/guides/strata-rtx-5070-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-rtx-5070-guide</guid><description>See the RAM and model choices for running Strata’s Qwen3.8-Flash-Next on a 12 GB RTX 5070, with separate short-chat and long-context speeds.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run Strata on an RTX 5070 12 GB: Model and RAM choices</h1><p>An RTX 5070 can run Strata’s 125B MoE by sharing work across GPU, RAM, CPU, and SSD.</p><p id="guide-page-summary">Strata is a local Windows and Linux runtime that takes text and optional image input and returns answers from Qwen3.8-Flash-Next. With 12 GB of VRAM, an RTX 5070 caches the experts the GPU can reach quickly while system RAM holds the full set of experts and runtime data. In the published RTX 5070, Ryzen 5 7600, 64 GB RAM setup, Q2_0 generated 94 tok/s in short chat and 76 tok/s with 128K context. On a 32 GB RTX 5070 system, start by considering Coder; Q2_0 and IQ2_XS low-RAM mode is documented for a 24 GB GPU.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>GPU memory caches the experts it can reach quickly; RAM holds the full expert set and the rest of the runtime.</li><li>On an RTX 5070, Ryzen 5 7600, and 64 GB RAM, Q2_0 generated 94 tok/s in short chat and 76 tok/s at 128K context.</li><li>With 64 GB RAM, compare IQ2_XS, IQ3_XXS, and IQ3_S. Coder fits a 32 GB system but has reported weaknesses outside code and in CJK languages.</li></ol></section><section><h2>Strata turns prompts into answers on the RTX 5070</h2><p>Strata is a local Windows and Linux runtime. It takes a text prompt or an optional image and sends Qwen3.8-Flash-Next’s answer to its browser chat or a connected app. The RTX 5070 has 12 GB of VRAM; Strata combines the GPU, system RAM, CPU, and SSD to run this 125-billion-parameter MoE model.</p><p>VRAM caches experts for fast GPU access, while RAM holds the full set of model experts and runtime data. The CPU calculates experts outside the GPU cache, and the SSD stores the PLE (per-layer embeddings) lookup data. Choose a model by considering VRAM and system RAM together.</p><p>Strata’s general starting requirements are at least 12 GB VRAM, 32 GB system RAM, and about 80 GB of free disk space. An SSD shortens the first model load. The download is about 70 GB, so leave room for the rest of the files as well. Check the official Strata repository for current GPU and OS support.</p><ul><li><a href="https://github.com/Niko1221/Strata">Strata project</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works">How GPU, RAM, CPU, and SSD work together</a></li><li><a href="https://github.com/Niko1221/Strata#what-you-need">official Strata repository</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-3090-guide">Run Strata on an RTX 3090 24 GB: VRAM, RAM, and long context</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC and monitor with RAM modules beside them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The RTX 5070’s 12 GB of VRAM caches part of the model while the PC’s other components handle the rest.</figcaption></figure><section><h2>64 GB RAM gives you more model-size choices</h2><p>The RTX 5070 meets Strata’s general VRAM minimum, but system RAM determines which model sizes fit. The installer recommends a size for your RAM. Coder, which keeps 256 of 512 experts, is the starting choice at 32 GB. At 48 GB, compare Q2_0 and IQ2_XS; at 64 GB, start with IQ2_XS.</p><p>With 64 GB RAM, IQ3_XXS and IQ3_S are also options. IQ3_S is larger, so you may need to close other apps. Windows, your browser, and an editor all use RAM; account for the apps you plan to keep open. Strata’s RAM selection guide says 96 GB or more gives IQ3_S more room.</p><p>Coder is a separate model tuned for coding. Keeping half the experts makes it easier to run with 32 GB RAM, but Strata’s project notes weaker results than the original outside English, including CJK text. For general questions and Korean writing, first compare sizes such as Q2_0 or IQ2_XS that retain all experts.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Strata model choices by RAM</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#coder">Coder’s model design and language limitations</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>GPU memory and system RAM serve different roles, so consider both.</figcaption></figure><section><h2>Short chats and 128K context have different speeds</h2><p>This table shows how output speed and long-prompt processing changed across model sizes in Strata’s published RTX 5070 measurements. It separates short-chat output from output at 128K context; prompt throughput is for reading a 32K input.</p><p>Q2_0 generated about 94 tokens per second in short chat and about 76 at 128K context. IQ3_S reached about 53 and 46 tok/s in those conditions. For a first request containing a document or code history, the 32K prompt-throughput column helps compare how quickly the input is read before the reply begins.</p><table><caption>Published speeds by model size on the RTX 5070</caption><thead><tr><th scope="col">Model size</th><th scope="col">Short-chat output</th><th scope="col">128K-context output</th><th scope="col">32K prompt processing</th><th scope="col">Suggested system RAM</th></tr></thead><tbody><tr><th scope="row">Q2_0</th><td>94 tok/s</td><td>76 tok/s</td><td>2,650 tok/s</td><td>48 GB</td></tr><tr><th scope="row">IQ2_XS</th><td>79 tok/s</td><td>63 tok/s</td><td>2,090 tok/s</td><td>48 GB</td></tr><tr><th scope="row">IQ3_S</th><td>53 tok/s</td><td>46 tok/s</td><td>1,620 tok/s</td><td>64 GB</td></tr></tbody></table><p>Conditions: RTX 5070 12 GB, Ryzen 5 7600, 64 GB DDR5-5200 RAM, Windows. Q2_0 used Strata 0.1.36; IQ2_XS and IQ3 rows used 0.1.26. Output measurements used 4K and 128K prompts; prompt throughput used 32K. The output cap was 256 tokens. Strata detailed measurements.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#speed-measured">RTX 5070 measurement conditions and long-context results</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#how-fast-is-each-size">Published speeds by quantization size</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards installed in an open PC workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Published speeds vary with quantization, context length, and the Strata version measured.</figcaption></figure><section><h2>Install Strata and send a first prompt</h2><p>On Windows, download and unpack Strata, then run START-HERE.bat. On Linux, run ./setup.sh from the project folder. Setup detects the GPU and asks you to choose a model size, context length, and whether to enable image input. With an RTX 5070 and 64 GB RAM, begin with IQ2_XS, then compare IQ3_XXS or IQ3_S using your Korean tasks and available memory as guides.</p><p>The first setup downloads about 70 GB. The initial load can make the PC slow to respond for one to three minutes while the model is read into RAM. Keep the runtime window open until it finishes. Then visit http://127.0.0.1:8080 in a browser and send a short prompt. For an OpenAI-compatible app, use http://127.0.0.1:8080/v1 as the base URL.</p><p>If replies are very slow while the disk stays busy, RAM may be too tight and some experts may be read from the SSD. Close other apps or choose a smaller model to free memory. If a download stops, run the startup file again to resume. If port 8080 is already in use, check whether Strata is already running. See the Windows and Linux installation guide for setup steps and the Strata memory guide for capacity planning.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/INSTALL.md">Strata installation guide</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/TROUBLESHOOTING.md">Troubleshooting the first Strata run</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Windows and Linux installation guide</a></li><li><a href="https://localai.co.kr/en/guides/strata-memory-pc-guide">Strata memory guide</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata is a local Windows and Linux runtime that takes text and optional image input and returns answers from Qwen3.8-Flash-Next. With 12 GB of VRAM, an RTX 5070 caches the experts the GPU can reach quickly while system RAM holds the full set of experts and runtime data. In the published RTX 5070, Ryzen 5 7600, 64 GB RAM setup, Q2_0 generated 94 tok/s in short chat and 76 tok/s with 128K context. On a 32 GB RTX 5070 system, start by considering Coder; Q2_0 and IQ2_XS low-RAM mode is documented for a 24 GB GPU.</dd></div><div><dt>How much memory does it need?</dt><dd>Strata is a local Windows and Linux runtime. It takes a text prompt or an optional image and sends Qwen3.8-Flash-Next’s answer to its browser chat or a connected app. The RTX 5070 has 12 GB of VRAM; Strata combines the GPU, system RAM, CPU, and SSD to run this 125-billion-parameter MoE model.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Strata on an RTX 3090 24 GB: VRAM, RAM, and long context</title><link>https://localai.co.kr/en/guides/strata-rtx-3090-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-rtx-3090-guide</guid><description>Choose Strata model sizes for a 24 GB RTX 3090, compare 32/64/96 GB RAM setups, and understand CPU, PCIe, and long-context KV cache effects.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run Strata on an RTX 3090 24 GB: VRAM, RAM, and long context</h1><p>The RTX 3090’s 24 GB VRAM keeps more experts on the GPU, while RAM, CPU, and PCIe affect practical speed and headroom.</p><p id="guide-page-summary">Strata runs Qwen3.8-Flash-Next locally from text and optional image prompts. The RTX 3090’s 24 GB VRAM can cache more experts than a 12 GB card. Strata’s published 100–140 tok/s range assumes a CPU and 64 GB RAM, with separate estimates by prompt length. A 32 GB system with an RTX 3090 can use low-RAM mode for Q2_0 or IQ2_XS. With 64 GB, start at IQ2_XS; with 96 GB, consider IQ3_S or UD-IQ4_XS.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>24 GB VRAM can cache more experts, but it does not replace CPU work or system-RAM headroom.</li><li>Strata’s RTX 3090 100–140 tok/s range is an estimate under stated CPU and RAM assumptions.</li><li>At 198K context, optional K8V4 KV on Coder reduced KV memory by 23% and raised output speed, while prompt processing was 2–5% slower.</li></ol></section><section><h2>What 24 GB of VRAM does for model inference</h2><p>Strata is a Windows and Linux runtime that takes a prompt or optional image and generates an answer with Qwen3.8-Flash-Next. The RTX 3090 has 24 GB VRAM, allowing it to cache more experts than the 12 GB RTX 5070. RAM holds the remaining experts and runtime data; the CPU computes experts outside the GPU cache; the SSD stores PLE (per-layer embeddings) lookup data.</p><p>Generation speed depends on GPU memory bandwidth, CPU expert throughput, PCIe link width and generation, and available RAM. When moving a 3090 to another PC, check its CPU and motherboard link as well.</p><p>General requirements are at least 12 GB VRAM, 32 GB system RAM, and about 80 GB free disk space. When choosing a model for the RTX 3090, check whether RAM can hold the operating system, apps, and model experts alongside GPU capacity. Official requirements.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works">Strata’s GPU, RAM, and CPU roles</a></li><li><a href="https://github.com/Niko1221/Strata#what-you-need">Official requirements</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC and monitor with RAM modules beside them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>24 GB of VRAM lets the GPU hold more experts.</figcaption></figure><section><h2>Choose a model for 32, 64, or 96 GB RAM</h2><p>With an RTX 3090 and 32 GB system RAM, Strata documents low-RAM configurations for Q2_0, IQ2_XS, and Coder. This mode keeps experts that do not fit on the GPU resident in RAM, avoiding SSD reads during replies. If RAM is too tight for the runtime and other apps, the mmap path uses the OS file cache and may read more from SSD. Check RAM and disk activity in Monitor; close apps or choose a smaller model to free memory.</p><p>At 64 GB RAM, IQ2_XS is the recommended starting point; test IQ3_XXS or IQ3_S with your actual apps and context. IQ3_S may require closing other apps. At 96 GB or more, IQ3_S has more room, and the larger UD-IQ4_XS is also an installer option. On a 64 GB PC, UD-IQ4_XS reads some experts from SSD, so NVMe helps, and it requires more free space than the roughly 80 GB general starting allowance.</p><p>Coder is easier to fit on a 32 GB PC, but it removes half the experts and has reported weaker results than the original outside coding and in languages other than English. For Korean and general multilingual use, first compare full-expert models such as Q2_0 or IQ2_XS.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Model selection by RAM</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#low-ram-mode">Low-RAM mode details</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose model size with both VRAM and available RAM in mind.</figcaption></figure><section><h2>The 3090 speed estimate depends on CPU and PCIe</h2><p>Strata’s RTX 3090 Q2_0 table separates prompt processing and answer generation by prompt length. Estimated output is about 140 tok/s at 4K, 130 at 32K, 100 at 128K, and 85 at 262K. With 128K or 262K context, include the time spent reading the initial prompt.</p><table><caption>Estimated Q2_0 throughput on the RTX 3090</caption><thead><tr><th scope="col">Prompt length</th><th scope="col">Estimated prompt throughput</th><th scope="col">Estimated output</th></tr></thead><tbody><tr><th scope="row">4K</th><td>~491 tok/s</td><td>~140 tok/s</td></tr><tr><th scope="row">32K</th><td>~521 tok/s</td><td>~130 tok/s</td></tr><tr><th scope="row">128K</th><td>~495 tok/s</td><td>~100 tok/s</td></tr><tr><th scope="row">262K</th><td>~453 tok/s</td><td>~85 tok/s</td></tr></tbody></table><p>The estimate carries roughly ±20% uncertainty, and its prompt figures use an older prefill path. The PCIe generation and link width affect how quickly experts reach the GPU. If changing only the GPU does not produce the expected speed, check CPU expert computation and the PCIe link reported by your system or Monitor.</p><p>Conditions: Strata’s published RTX 3090 figures assume a CPU and 64 GB RAM, with roughly ±20% uncertainty; they are estimates rather than measurements. Prompt figures use an older path. Official RTX 3090 estimates.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#other-gpus-estimated">RTX 3090 estimates and methodology</a></li></ul></section><section><h2>Check KV cache options for long context</h2><p>In long coding conversations, the KV cache grows and uses RAM or VRAM. At longer context lengths, Strata can keep KV in RAM and only part resident in VRAM, leaving more room for the expert cache. This changes where the cache lives, not the answer values, and uses system RAM.</p><p>K8V4 is an optional RTX 3090 option. In a reported run of Coder at 198K context, it used 23% less KV memory than 8-bit KV and raised output from 85 to 99 tok/s. Needle-retrieval results were unchanged in that test, while prompt processing was 2–5% slower. K8V4 is optional; check long-document accuracy and your own workload before choosing it.</p><p>If long context exhausts RAM or keeps reading from disk, reduce context and close other apps. Compare the answer, memory use, and completion time with default KV and K8V4 on the same input to choose for your work.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#hybrid-k8v4-kv-cache">K8V4 and the RTX 3090 measurement</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards mounted in an open PC workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Long-context cache settings affect memory use and prompt and output speed.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata runs Qwen3.8-Flash-Next locally from text and optional image prompts. The RTX 3090’s 24 GB VRAM can cache more experts than a 12 GB card. Strata’s published 100–140 tok/s range assumes a CPU and 64 GB RAM, with separate estimates by prompt length. A 32 GB system with an RTX 3090 can use low-RAM mode for Q2_0 or IQ2_XS. With 64 GB, start at IQ2_XS; with 96 GB, consider IQ3_S or UD-IQ4_XS.</dd></div><div><dt>How much memory does it need?</dt><dd>Strata is a Windows and Linux runtime that takes a prompt or optional image and generates an answer with Qwen3.8-Flash-Next. The RTX 3090 has 24 GB VRAM, allowing it to cache more experts than the 12 GB RTX 5070. RAM holds the remaining experts and runtime data; the CPU computes experts outside the GPU cache; the SSD stores PLE (per-layer embeddings) lookup data.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Strata on an RTX 5090 32 GB: RAM choices and published results</title><link>https://localai.co.kr/en/guides/strata-rtx-5090-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-rtx-5090-guide</guid><description>Plan IQ2_XS or IQ3_S with 64 or 96 GB RAM on an RTX 5090, and read the conditions behind long-prompt and community results.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run Strata on an RTX 5090 32 GB: RAM choices and published results</h1><p>The RTX 5090’s 32 GB VRAM keeps more experts on the GPU, while long prompts still need system-RAM headroom.</p><p id="guide-page-summary">Strata is a local runtime that takes text and optional images and returns answers from Qwen3.8-Flash-Next. An RTX 5090 with 32 GB VRAM can keep more experts on the GPU, while system RAM holds the remaining experts and runtime state. Strata recommends IQ2_XS at 64 GB RAM and offers IQ3_S or UD-IQ4_XS at 96 GB or more. A public stock Strata RTX 5090 report used version 0.1.29, IQ2_XS, Linux, and 64 GB RAM to measure three prompt lengths on a synthetic code-explanation task.  </p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>IQ2_XS is Strata’s recommended starting point at 64 GB RAM; 96 GB or more gives IQ3_S more room.</li><li>The stock Strata 0.1.29 report measured separate 4K, 32K, and 128K prompts with IQ2_XS, 64 GB RAM, and Linux.</li><li>The NVFP4 fork’s PLE I/O case is not a stock speed result; read it with its fork and workload conditions.</li></ol></section><section><h2>System RAM still matters with 32 GB VRAM</h2><p>Strata runs on Windows and Linux, taking text and optional image input and returning Qwen3.8-Flash-Next answers to local chat or connected apps. The RTX 5090’s 32 GB VRAM can cache more experts and reduce CPU work during generation. System RAM still holds the full expert set, operating system, apps, and long-context state.</p><p>Long documents, code repositories, and other open apps need additional system RAM and KV cache. Choose your normal apps and context length first, then leave enough RAM headroom when selecting IQ2_XS or IQ3_S.</p><p>General starting requirements are 12 GB VRAM, 32 GB RAM, and about 80 GB free disk space. Downloads and RAM needs vary by model; UD-IQ4_XS is about a 94 GB download and needs more storage. Check the Strata model guide for current recommendations.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#pick-by-ram">Strata model choices by RAM</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC and monitor with RAM modules beside them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The RTX 5090’s VRAM does not remove the need for RAM for the model and long context.</figcaption></figure><section><h2>Starting models at 64 and 96 GB RAM</h2><p>At 64 GB RAM, IQ2_XS is the recommended starting model; Q2_0 is a faster option. At 96 GB or more, consider IQ3_S. It retains every expert and uses a larger model size, giving more room for answers and long-context work, though a 64 GB PC may need other apps closed. UD-IQ4_XS is another option at 96 GB, but its download is about 94 GB and it needs substantial RAM and storage.</p><p>With 32 GB system RAM and a GPU with at least 24 GB VRAM, Strata documents low-RAM configurations for Q2_0 and IQ2_XS. The RTX 5090’s 32 GB VRAM is within that range. Setup offers a mode that keeps the full model in RAM; leave memory for other apps and long prompts or image input.</p><p>Setup also downloads the MTP draft files. They propose tokens that the main model verifies to speed up generation, and the draft layer and head use some VRAM. Long-context KV cache also takes memory, so check VRAM, RAM, and first-request latency in Monitor while running your workload.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/MODELS.md#will-it-fit">RAM and VRAM fit guidance</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#draft-layer">MTP draft layer details</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>RAM headroom affects both model size and long prompts.</figcaption></figure><section><h2>A 32K input took about six seconds to the first token</h2><p>A published stock Strata community report used IQ2_XS on an RTX 5090 32 GB, Core Ultra 9 285K, 64 GB RAM, and Ubuntu Linux. It used engine 0.1.29, a 131,072-token context, INT8 KV, and MTP. The report gives medians from three runs each at 4K, 32K, and 128K prompts. The workload was synthetic code explanations with 256 generated tokens each.</p><p>Reported output speeds were 179.4 tok/s with a 4K prompt, 175.7 at 32K, and 165.0 at 128K. Prompt throughput at those lengths was 4,269.8, 5,543.2, and 5,778.7 tok/s. Although the 128K prompt had higher tokens-per-second throughput, it contained far more tokens and took about 22 seconds to reach the first response.</p><table><caption>Stock Strata RTX 5090 community case: IQ2_XS</caption><thead><tr><th scope="col">Prompt</th><th scope="col">Prompt throughput</th><th scope="col">Answer generation</th><th scope="col">Time to first token</th></tr></thead><tbody><tr><th scope="row">4K</th><td>4,269.8 tok/s</td><td>179.4 tok/s</td><td>0.974 s</td></tr><tr><th scope="row">32K</th><td>5,543.2 tok/s</td><td>175.7 tok/s</td><td>5.950 s</td></tr><tr><th scope="row">128K</th><td>5,778.7 tok/s</td><td>165.0 tok/s</td><td>22.262 s</td></tr></tbody></table><p>Conditions: 2026-09-30 · RTX 5090 32 GB · Core Ultra 9 285K · 64 GB RAM · Ubuntu 24.04.4 · driver 595.84 · Strata 0.1.29 · IQ2_XS · INT8 KV · MTP · synthetic code explanation · fresh prompts · 256-token output cap · median of three runs per length.</p><ul><li><a href="https://github.com/Niko1221/Strata/tree/main/bench/results/2026-09-30-community-rtx-5090">RTX 5090 report and detailed conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards mounted in an open PC workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Read RTX 5090 results with their model, prompt length, and runtime version.</figcaption></figure><section><h2>Keep NVFP4 fork results separate from stock Strata</h2><p>The RTX 5090 fork sergqwer/strata-nvfp4 uses an NVFP4 model pack and a modified engine. Prepare its engine and model files together, and retain results from standard Strata as a baseline when trying the fork.</p><p>A Windows report using sergqwer/strata-nvfp4 used an NVFP4 PLE file. Diverse prompts read the PLE table from disk and processed about 1,240 tokens/s; a synthetic prompt with repeated text reached about 6,500–7,300 tok/s because its rows stayed cached. --ple-io mmap reached about 6,037 tok/s in a warm run, while the first cold pass had different behavior. Prompt type and cache state differed across these measurements.</p><p>If a real long prompt feels slow, check first-request context length, prompt throughput, RAM use, and SSD reads separately from output tok/s. Follow-up turns may reuse prompt state, so their wait differs from the first long request. Monitor can help show whether the GPU is busy while the CPU is idle or the CPU is computing experts.</p><ul><li><a href="https://github.com/Niko1221/Strata/issues/1425">RTX 5090 NVFP4 fork PLE I/O report</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#how-it-works">Stock Strata runtime design</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata is a local runtime that takes text and optional images and returns answers from Qwen3.8-Flash-Next. An RTX 5090 with 32 GB VRAM can keep more experts on the GPU, while system RAM holds the remaining experts and runtime state. Strata recommends IQ2_XS at 64 GB RAM and offers IQ3_S or UD-IQ4_XS at 96 GB or more. A public stock Strata RTX 5090 report used version 0.1.29, IQ2_XS, Linux, and 64 GB RAM to measure three prompt lengths on a synthetic code-explanation task.  </dd></div><div><dt>How much memory does it need?</dt><dd>Strata runs on Windows and Linux, taking text and optional image input and returning Qwen3.8-Flash-Next answers to local chat or connected apps. The RTX 5090’s 32 GB VRAM can cache more experts and reduce CPU work during generation. System RAM still holds the full expert set, operating system, apps, and long-context state.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Connect Strata to coding agents: OpenAI, Anthropic, and Codex APIs</title><link>https://localai.co.kr/en/guides/strata-coding-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-coding-agent-guide</guid><description>Run Strata on localhost and send a real request through OpenAI Chat Completions, Anthropic Messages, or the Responses API used by Codex.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Connect Strata to coding agents: OpenAI, Anthropic, and Codex APIs</h1><p>Strata exposes OpenAI- and Anthropic-compatible APIs on localhost so coding tools can send requests to a local model.</p><p id="guide-page-summary">Strata supports OpenAI Chat Completions and Anthropic Messages, plus the OpenAI Responses API starting in Strata 0.1.39. By default, the server accepts requests at `127.0.0.1:8080` and returns Qwen3.8-Flash-Next answers. A coding agent on the same PC uses the matching base URL; Codex CLI can connect through `/v1/responses`. Check `/health` and `/v1/models`, then send a short real POST request. Keep testing on loopback; do not change the host to `0.0.0.0` to expose it to a network.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The default address is `http://127.0.0.1:8080`, with separate Chat Completions, Anthropic Messages, and Responses API paths.</li><li>The Responses API is supported from Strata 0.1.39, and Codex CLI uses this endpoint.</li><li>First read local health and model endpoints, then verify a real short request and response.</li></ol></section><section><h2>What Strata’s local API accepts and returns</h2><p>Strata runs Qwen3.8-Flash-Next on a local PC and returns API requests as answers. A coding agent sends conversation messages and tool definitions; the response contains model text and, where supported, tool calls. Strata does not install the coding agent itself: configure the model-server address in a client you already use.</p><p>For a client on the same computer, use http://127.0.0.1:8080. Chat Completions uses /v1/chat/completions, Anthropic Messages uses /v1/messages, and Responses API uses /v1/responses. The default loopback address is not reachable from another computer, so testing does not require exposing the server to a network.</p><p>First start the server using the project’s installation guide, then choose an API format supported by your coding tool. Responses API support begins with Strata 0.1.39; on earlier versions, use a client that supports Chat Completions.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#using-it">Strata API paths and compatible clients</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Windows and Linux installation guide</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A black tower PC and monitor with RAM modules beside them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Strata returns local model answers to a coding tool through its server.</figcaption></figure><section><h2>Check health and model listing on localhost</h2><p>After the server window reports that it is ready, run curl http://127.0.0.1:8080/health in a terminal. If it returns a status response, run curl http://127.0.0.1:8080/v1/models to see the loaded model ID. If you configured an API key, include an Authorization: Bearer &lt;key&gt; header with both requests.</p><p>If the model list is empty or the connection fails, check that Strata is still running and that setup did not assign a different port. If another program already uses port 8080, use the port configured for Strata in each request. If no model is loaded, first send a short prompt through browser chat to confirm setup has completed.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#using-it">Health and model-list APIs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, RAM modules, and an NVMe SSD on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First verify that local health and model-list endpoints respond.</figcaption></figure><section><h2>Send a real Chat Completions request</h2><p>Once the model list responds, send a short prompt with the request below. Put the ID returned by /v1/models in model and the conversation in messages. A successful response contains the model answer in choices[0].message.content.</p><div><p><strong>Chat Completions request</strong></p><pre><code data-guide-code-block="2-0">curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"strata","messages":[{"role":"user","content":"이 서버가 답하면 Strata 연결이 된 거예요."}],"max_tokens":128}'</code></pre><p><small>Replace `model` with the ID returned by `/v1/models`.</small></p></div><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#using-it">Chat Completions request example</a></li></ul></section><section><h2>Match the API address and model ID to your client</h2><p>For an OpenAI-compatible client, set the base URL to http://127.0.0.1:8080/v1. Strata accepts the requested model name, but use an ID from the model list if the client validates names first. Claude Code uses the Anthropic /v1/messages path, so set ANTHROPIC_BASE_URL=http://127.0.0.1:8080. It may also require an ANTHROPIC_MODEL name recognized by the client; that is a client-side setting for routing requests to the local endpoint.</p><p>Codex CLI can use the Responses API (/v1/responses) starting with Strata 0.1.39. This API is stateless, so each request must include the conversation input; server-side storage through previous_response_id is not supported. If a client lacks Responses API support or does not interoperate, use another client that supports Chat Completions.</p><p>An API response confirms connectivity. For a coding agent to read or edit files or run commands, the client must provide those tools and the user must authorize them. Start with read-only actions or a small test repository, then inspect tool calls and results.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#the-responses-api-and-codex-cli">Responses API and Codex CLI setup</a></li><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/DETAILS.md#claude-code">Claude Code connection notes</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="Two graphics cards mounted in an open PC workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the API route that matches the client’s supported format.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata supports OpenAI Chat Completions and Anthropic Messages, plus the OpenAI Responses API starting in Strata 0.1.39. By default, the server accepts requests at `127.0.0.1:8080` and returns Qwen3.8-Flash-Next answers. A coding agent on the same PC uses the matching base URL; Codex CLI can connect through `/v1/responses`. Check `/health` and `/v1/models`, then send a short real POST request. Keep testing on loopback; do not change the host to `0.0.0.0` to expose it to a network.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Strata vs llama.cpp: Which Should You Run on Your PC?</title><link>https://localai.co.kr/en/guides/strata-vs-llama-cpp-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/strata-vs-llama-cpp-guide</guid><description>Compare Strata for Qwen3.8-Flash-Next with llama.cpp for GGUF models. Choose by GPU and RAM placement, Mac support, installation, first-answer latency, and your actual workload.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Strata vs llama.cpp: Which Should You Run on Your PC?</h1><p>Start with your goal: a large model on your existing PC, or switching among models.</p><p id="guide-page-summary">Strata distributes Qwen3.8-Flash-Next across the GPU, RAM, and CPU of a Windows or Linux PC. llama.cpp runs GGUF models across a broader set of models and hardware backends. Strata's setup prepares a model and expert cache for your machine; llama.cpp lets you choose the model file and GPU placement. Compare output speed, first-answer latency, and missing information in the result to choose for your workload.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Strata focuses on Qwen3.8-Flash-Next and its variants; llama.cpp is useful for switching among supported GGUF models.</li><li>Strata targets Windows and Linux; llama.cpp includes Apple Silicon Metal and other execution backends.</li><li>Match model, input, output length, and cache state to isolate runner differences.</li></ol></section><section><h2>Both tools run a model on your PC</h2><p>A model produces an answer to your prompt; a runner loads its files and places computation on your PC's hardware. Strata and llama.cpp fill that runner role. A chat interface or coding app sends requests to the server the runner provides and receives the result.</p><p>Strata bundles a GPU expert cache, CPU computation, RAM placement, and MTP around the large MoE model Qwen3.8-Flash-Next. llama.cpp loads many models as GGUF and uses backends such as CUDA, HIP, and Metal. Strata incorporates ggml components from llama.cpp, while maintaining its own setup, model support, and memory placement.</p><ul><li><a href="https://github.com/Niko1221/Strata/blob/main/docs/HOW_IT_WORKS.md">Strata computation and memory placement</a></li><li><a href="https://github.com/ggml-org/llama.cpp">llama.cpp model and hardware support</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A monitor, black PC, and RAM on a wooden desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Run the same workload end to end on your current PC.</figcaption></figure><section><h2>Narrow the choice by model and operating system</h2><p>On Windows or Linux, follow Strata's setup if you want to try a heavily quantized Qwen3.8-Flash-Next. It recommends options for your RAM and GPU, then downloads the model and engine. Published configurations start with a 12 GB GPU and sufficient RAM, giving you a way to try a large model before replacing the graphics card.</p><p>Start with llama.cpp if you use a Mac or often switch between small and image-capable models. Check support for the GGUF's architecture and your GPU backend. If a newly downloaded model fails to load, use a runner version that supports its architecture.</p><table><caption>Choose by model and PC</caption><thead><tr><th scope="col">Decision</th><th scope="col">Strata</th><th scope="col">llama.cpp</th></tr></thead><tbody><tr><th scope="row">Models to run</th><td>Qwen3.8-Flash-Next, Coder, Swift, and supported Unsloth packs</td><td>GGUF models supported by your runner version</td></tr><tr><th scope="row">OS and GPU</th><td>NVIDIA and supported AMD configurations on Windows/Linux</td><td>Multiple backends including CUDA, HIP, and Metal</td></tr><tr><th scope="row">Setup and model preparation</th><td>Setup recommendations and downloads</td><td>Choose a model GGUF and runner build</td></tr><tr><th scope="row">When VRAM is limited</th><td>Expert caching and CPU/RAM computation</td><td>CPU/GPU splitting and model-specific offloading</td></tr></tbody></table><p>Scope follows project documentation as of October 10, 2026. Check current runner documentation for Windows/Linux differences on AMD and newly supported models.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Install Strata</a></li><li><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">Prepare a llama.cpp local server</a></li></ul></section><section><h2>Check where your hardware is waiting</h2><p>In Strata's normal mode, RAM holds all experts and the GPU caches frequently used ones. The CPU computes experts outside the GPU cache. The SSD holds per-layer embedding tables, or PLE, from which the model reads needed rows. Answer speed therefore involves RAM headroom, CPU, and PCIe as well as VRAM.</p><p>With limited RAM, resident mode keeps only non-GPU experts in RAM; mmap maps the file and uses the operating system's cache. A missing cached expert can require an SSD read. If disk activity stays high while generating, try a smaller model or close other apps to free RAM before comparing again.</p><p>In llama.cpp, adjust GPU offloading for the model and backend. GPU placement, context length, and cache settings change speed and memory use even on the same PC. Inspect startup logs for actual GPU use and memory placement in both runners, then test with the apps you normally keep open.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-memory-pc-guide">Strata configurations by RAM capacity</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/development/token_generation_performance_tips.md">llama.cpp generation performance settings</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A desk with a graphics card, two RAM modules, and an NVMe SSD" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>GPU placement and RAM allocation change where the workload waits.</figcaption></figure><section><h2>Separate model differences from runner differences</h2><p>Comparing a large Strata model with a small llama.cpp model helps choose a usable setup. To compare runners themselves, match model family, quantization, and input/output length. A Strata download includes components such as PLE and draft files; prepare a model file supported by the other runner separately.</p><p>Send the first prompt in a fresh conversation after starting the server, then send a follow-up in the same conversation. Reusing cached input can shorten the follow-up wait. Record fresh and cached requests separately to reflect both new-document work and an ongoing conversation about one document.</p><p>Use the same output limit and sampling settings, and record the tokens actually generated. Start around 4K input to check connectivity and memory, then test your normal document length. Record first-answer latency, completion time, output tok/s, and peak RAM/VRAM to identify the source of waiting.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-speed-benchmark-guide">Strata throughput and first-answer latency</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama.cpp server request and cache settings</a></li></ul></section><section><h2>Check whether the fast answer finishes the job</h2><p>For a summary, check that numbers, dates, and main conclusions survive. For coding, use a small test repository and run its tests after edits. A faster answer can take longer overall if it needs extensive repair. Finish one of your repeated tasks end to end before choosing.</p><p>Keep Strata if Qwen3.8-Flash-Next produces the result you need on your PC with RAM headroom. llama.cpp offers useful model and backend choices if you switch among GGUF models or use a Mac. Record model, input, first-answer latency, and correction time before changing runners to make the next choice easier.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">Strata fundamentals and first steps</a></li><li><a href="https://localai.co.kr/en/guides/strata-coding-agent-guide">Connect Strata to a local coding app</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="An open PC with two installed graphics cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check runner splitting support and your PC before adding a card.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Strata distributes Qwen3.8-Flash-Next across the GPU, RAM, and CPU of a Windows or Linux PC. llama.cpp runs GGUF models across a broader set of models and hardware backends. Strata's setup prepares a model and expert cache for your machine; llama.cpp lets you choose the model file and GPU placement. Compare output speed, first-answer latency, and missing information in the result to choose for your workload.</dd></div><div><dt>How much memory does it need?</dt><dd>In Strata's normal mode, RAM holds all experts and the GPU caches frequently used ones. The CPU computes experts outside the GPU cache. The SSD holds per-layer embedding tables, or PLE, from which the model reads needed rows. Answer speed therefore involves RAM headroom, CPU, and PCIe as well as VRAM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5090 Discontinuation Rumors: Should You Buy One for Local AI?</title><link>https://localai.co.kr/en/guides/rtx-5090-discontinued-rumor-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-5090-discontinued-rumor-local-ai-guide</guid><description>Trace the October 2026 RTX 5090 discontinuation rumors, their official status, and what they mean for owners and local-AI buyers. Compare memory needs, alternatives, and Strata.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">RTX 5090 Discontinuation Rumors: Should You Buy One for Local AI?</h1><p>Separate the supply story from the local-AI capability you actually need.</p><p id="guide-page-summary">The RTX 5090 discontinuation rumor spread with an October 10 claim that future GB202 supply would go exclusively to RTX PRO products. The NVIDIA material checked at publication did not announce an RTX 5090 production-end or support-end date. Owners can keep using their existing local-model setup; prospective buyers should compare the memory they need with actual asking prices.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>NVIDIA said on October 16 that the 5090 is not discontinued and will keep shipping, while supply volume and marketplace listings show a pullback.</li><li>Keeping a 5090 you own and buying a new one at a high price are different decisions.</li><li>Strata combines a smaller GPU with system RAM, giving you something to test on your current PC before buying a 5090.</li></ol></section><section><h2>The October 10 claim concerns GB202 allocation</h2><p>The RTX 5090 is an NVIDIA Blackwell graphics card with 32 GB of VRAM. It is used for local LLMs and image generation that load model data into GPU memory. GB202, the chip mentioned in the news, is the GPU used by this card.</p><p>On October 10, MEGAsizeGPU claimed that future GB202 supply would be reserved for RTX PRO products. hongxing2020 also posted about ending RTX 5090 production and a 24 GB RTX 5080; VideoCardz reported those posts.</p><p>There is no official notice yet confirming a production plan or end date. The RTX 5090 reports remain a discontinuation rumor, not a confirmed decision.</p><p>A retailer's out-of-stock notice describes inventory you can buy now. Future factory output and the driver-support schedule are separate manufacturer decisions. If you are shopping, check the retailer's restock estimate and NVIDIA's product announcements separately.</p><ul><li><a href="https://videocardz.com/newz/nvidia-reportedly-discontinuing-rtx-5090-gb202-gpus-to-be-reserved-for-rtx-pro-series">October 10 reporting and cited posts</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/">NVIDIA RTX 5090 product page</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</a></li><li><a href="https://localai.co.kr/en/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai">New RTX 5060 Ti 16GB or used RTX 3090 24GB for local AI?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-02.webp" alt="A graphics card, two RAM modules, and an NVMe SSD on a wooden desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the memory your model needs separately from the supply news.</figcaption></figure><section><h2>On October 16, NVIDIA said the RTX 5090 is not discontinued</h2><p>At the RTX Spark launch event in Taipei on October 16, NVIDIA senior vice president Jeff Fisher told 4Gamers that supply is constrained but the RTX 5090 is not discontinued and will keep shipping. Around the same date the card disappeared from the GPU filters on NVIDIA's US Marketplace, and Micro Center changed its listings to "Not Carried".</p><p>The denial means the chip line continues; it does not mean more cards are shipping. Fisher gave no shipment volume or GB202 allocation figure, and in Germany the cheapest available card was €6,699 on October 15, nearly double the €3,400 January reference price. Decide whether to buy or keep your current card from shelf prices and stock.</p><ul><li><a href="https://videocardz.com/newz/nvidia-says-rtx-5090-is-not-discontinued-but-good-luck-finding-one-for-1999">NVIDIA statement report (VideoCardz)</a></li></ul></section><section><h2>If you own a 5090, keep working with your current setup</h2><p>If your model works with the current driver and runner, you can keep using that setup. Changes to new-card supply leave your installed model files and existing compute features available. Record the driver, runner version, and model filename so you can restore a known working setup after an update.</p><p>Keep the seller details, receipt, and board manufacturer's warranty terms for a card still under warranty. Reduced supply could lengthen replacement availability, so ask the board manufacturer about repair and replacement procedures. Check its warranty alongside NVIDIA's product news.</p><p>If heat and fan noise become a problem during long local-AI sessions, try a power limit. Compare power draw, answer speed, and temperature using the same model and input, then decide whether the performance trade-off works for you. See the GPU power-limit guide for device-specific adjustments including the 5090.</p><ul><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide">GPU power-limit guide</a></li></ul></section><section><h2>Before buying, decide whether your workload needs 32 GB</h2><p>If 32 GB of VRAM is why you want a 5090, choose the model and context length first. A short chat with quantized Qwen3.8 27B, a long-document session, and keeping an image model loaded at the same time use different amounts of memory. Defining the workload lets you decide whether a higher asking price is worth paying.</p><p>Official specifications list 32 GB for the RTX 5090, 16 GB for the RTX 5080, and 24 GB for the RTX 3090. The rumored 24 GB RTX 5080 does not yet have confirmed pricing, availability, and local-AI performance suitable for a purchase comparison. Compare products you can order using their current specifications and prices.</p><table><caption>VRAM on current official products</caption><thead><tr><th scope="col">Graphics card</th><th scope="col">VRAM</th><th scope="col">Use in a comparison</th></tr></thead><tbody><tr><th scope="row">RTX 5090</th><td>32GB</td><td>More room for long context or larger models on one card</td></tr><tr><th scope="row">RTX 5080</th><td>16GB</td><td>Compare actual speed for workloads that fit 16 GB</td></tr><tr><th scope="row">RTX 3090</th><td>24GB</td><td>A baseline when keeping an existing card</td></tr></tbody></table><p>NVIDIA published specifications for the RTX 5090, 5080, and 3090. The unannounced 24 GB RTX 5080 is excluded from the table.</p><p>If 24 GB finishes your workload, keeping your current device is an option. If you repeatedly exceed it and stop working, compare a single 32 GB card, multi-GPU partitioning, and larger-memory devices together with cost and runner support.</p><ul><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/">RTX 5090 specifications</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5080/">RTX 5080 specifications</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090-3090ti/">RTX 3090 specifications</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-03.webp" alt="An open PC with two graphics cards, an empty box, and a notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Adding a card also requires a compatible runner, power supply, and case.</figcaption></figure><section><h2>Include the whole PC in your budget</h2><p>Even a card-only upgrade requires checking case length and thickness, power connectors, and the power supply. NVIDIA lists 575 W total graphics power and a 1,000 W required system power supply for the RTX 5090 reference specifications. Match your purchase to its board manufacturer's dimensions and power requirements.</p><p>Our checked RTX 5090 price range is ₩8,989,320~₩9,289,050, dated 2026-10-12. The retailer's live checkout price can differ. Add any power-supply or case replacement when comparing alternatives; estimate ongoing costs with the electricity tool.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 price, speed, and power</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/">NVIDIA power requirements</a></li><li><a href="https://localai.co.kr/en?tab=electricity">electricity tool</a></li></ul></section><section><h2>If you want a large model, try Strata too</h2><p>Strata runs a large MoE model such as Qwen3.8-Flash-Next using the GPU, system RAM, and CPU together. It caches frequently used expert weights on the GPU and uses RAM and CPU for the remainder. Published setups include a 12 GB GPU with sufficient system RAM, so trying a large model may be possible on your existing PC.</p><p>Match your current RAM and GPU against the Strata hardware guide. After installation, send your actual prompts and long documents and record the first-answer and completion times. If it finishes your work, you can use local AI while waiting for clearer 5090 supply information.</p><p>If you already own a 5090 and want to try Strata, continue with the RTX 5090 Strata guide. It covers model choice for 32 GB of VRAM and your RAM capacity, long-context settings, and published run conditions.</p><ul><li><a href="https://localai.co.kr/en/guides/strata-memory-pc-guide">Strata hardware guide</a></li><li><a href="https://localai.co.kr/en/guides/strata-rtx-5090-guide">RTX 5090 Strata guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct10-strata-01.webp" alt="A blank monitor, black PC, and RAM on a wooden desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test whether your current PC finishes the workload before upgrading.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The RTX 5090 discontinuation rumor spread with an October 10 claim that future GB202 supply would go exclusively to RTX PRO products. The NVIDIA material checked at publication did not announce an RTX 5090 production-end or support-end date. Owners can keep using their existing local-model setup; prospective buyers should compare the memory they need with actual asking prices.</dd></div><div><dt>How much memory does it need?</dt><dd>The RTX 5090 is an NVIDIA Blackwell graphics card with 32 GB of VRAM. It is used for local LLMs and image generation that load model data into GPU memory. GB202, the chip mentioned in the news, is the GPU used by this card.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Jev in Ollama: get classifications and probabilities instead of prose</title><link>https://localai.co.kr/en/guides/jev-ollama-local-decision-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/jev-ollama-local-decision-guide</guid><description>Send choice, true/false and score questions to Nimble or Tev through Ollama 0.35.0's /v1/systemone, then use the returned probabilities to route support tickets.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Run Jev in Ollama: get classifications and probabilities instead of prose</h1><p>Ollama System One classifies a ticket against defined choices and returns their probabilities.</p><p id="guide-page-summary">Ollama 0.35.0's `/v1/systemone` takes a state such as an inquiry and a choice, yes/no, or scoring question, then returns a structured result and probabilities for the candidates. You can classify inquiries with Nimble, then use human-labeled examples to review errors and confidence before setting an automatic routing threshold.</p><p>When staff read each ticket and choose a team, a consistent classification field is easier for automation to use than a long explanatory sentence. The example follows one ticket in a payment queue and decides whether it belongs with billing or technical support.</p><p>System One returns this kind of classification in a defined format. The operator still has to define candidates and validation criteria, so before enabling automatic routing, check which ticket types are missing from the candidates and what misclassifications cost.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>You need Ollama 0.35.0 or later and a compatible local System One model. This endpoint does not stream responses.</li><li>choice returns a candidate key and probabilities, noul returns the probability of true, and score returns a probability-weighted average of zero-based candidate indices.</li><li>confidence indicates concentration based on the entropy of the candidate-probability distribution; validate accuracy separately on test data.</li><li>Use the same validation tickets to measure misclassification and set a review threshold before deciding whether to route tickets automatically.</li></ol></section><section><h2>Prepare Ollama and a classification model</h2><p>This endpoint was added in Ollama 0.35.0, released on September 28, 2026. If your version is older, update Ollama first. The release does not guarantee minimum memory, latency, or accuracy for a particular Mac or GPU, so validate those conditions separately.</p><p>Before starting, make sure the Ollama server is running and that you have disk space for the model and memory to run it. Bespoke Labs lists Nimble 9B's original BF16 weights at about 18 GB, but the format and quantization of the nimble tag pulled by Ollama may differ. Check the downloaded file's SIZE with ollama list, as below, but do not interpret that size as runtime memory use.</p><div><p><strong>Check the Ollama version and model</strong></p><pre><code data-guide-code-block="0-0">ollama --version
ollama pull nimble
ollama list</code></pre><p><small>Check that the version is 0.35.0 or later, pull a compatible System One model, and verify its exact tag and file size in the list.</small></p></div><ul><li><a href="https://github.com/ollama/ollama/releases/tag/v0.35.0">Ollama 0.35.0 official release</a></li><li><a href="https://github.com/bespokelabsai/nimble">Official Bespoke Labs Nimble repository</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/llamacpp-decision-models-julia-laya-kev-guide">Compare Julia, Laya, and Kev decision models in llama.cpp</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-jev-ollama-local-decision-guide-01.webp" alt="A computer sits beside a ticket card and blue and green sorting bins." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Put the ticket in the state once and specify team criteria in the question.</figcaption></figure><section><h2>Define the ticket and candidates, then read the result</h2><p>First fix the ticket input and candidate teams. The example below classifies a report of a 500 error during checkout as either billing or technical. Candidate descriptions distinguish the teams, while instructions states what to decide for this ticket. Use descriptions that match your actual operating rules so the candidate boundaries reflect them.</p><p>A choice question can have 2 to 26 candidates, and the response includes the selected key and probabilities for all candidates. Because this API does not stream, inspect the completed JSON after the curl request finishes. Check that model, answers.route.choice, answers.route.probabilities, answers.route.confidence, and usage have the expected form.</p><p>The choice is the candidate key with the highest probability, and the probabilities are normalized to sum to 1 across the candidates you supplied. A type omitted from the candidate list cannot be recovered by the probability calculation. If you provide only billing and technical, a greeting or account-takeover report will still be assigned to one of those two. Add an exception candidate or a separate rule if those tickets need another queue.</p><table><caption>Each response field supports a different decision.</caption><thead><tr><th scope="col">Response field</th><th scope="col">Meaning</th><th scope="col">What to watch for</th></tr></thead><tbody><tr><th scope="row">choice</th><td>Key of the highest-probability candidate</td><td>An answer absent from the candidates cannot be selected.</td></tr><tr><th scope="row">probabilities</th><td>Normalized probability for each candidate key</td><td>Compare only among candidates included in this request.</td></tr><tr><th scope="row">confidence</th><td>How concentrated the probability distribution is relative to a uniform distribution</td><td>It is not confidence calibrated to the accuracy rate.</td></tr><tr><th scope="row">usage</th><td>Input and output token usage reported by the server</td><td>Token counts alone do not establish latency or quality.</td></tr></tbody></table><div><p><strong>Request inquiry routing</strong></p><pre><code data-guide-code-block="1-0">curl -sS http://127.0.0.1:11434/v1/systemone -H 'Content-Type: application/json' -d '{"model":"nimble","state":"Our checkout has returned 500 errors since this morning.","questions":{"route":{"type":"choice","instructions":"Which team should handle this ticket?","criteria":{"billing":"Payments, charges, and refunds","technical":"Application errors, failed requests, and outages"}}}}'</code></pre><p><small>Send one request to the default local server address and check both the selected team and the probabilities for the two candidates in the output.</small></p></div></section><section><h2>Choose the response field for each question type</h2><p>Use choice to select one candidate, such as a responsible team. A true-or-false question like “Is this an urgent outage?” can use noul, whose default candidates are false and true. You can explain the two values in criteria. The response is the probability of true, not a Boolean, so the application must define a threshold for converting it to true or false.</p><p>You can use score for a priority with several levels. List criteria from the lowest to the highest level. The response is the sum of each zero-based candidate index multiplied by its probability. For example, if the probabilities for levels 0, 1, and 2 are 0.2, 0.3, and 0.5, the score is 0×0.2 + 1×0.3 + 2×0.5 = 1.3. A score of 1.3 is not a separate grade, so the service must define boundaries to convert it into an actual priority.</p><p>Even if one request contains several questions, each evaluates the same state independently. The answer to an earlier question is not automatically passed as input to a later one. You can receive several fields in one network call, but the questions do not form a conversation or dependency chain. Give each question a unique, non-empty key and verify that each candidate list has 2 to 26 choices.</p><div><p><strong>Request routing and urgency for one state</strong></p><pre><code data-guide-code-block="2-0">{
  "model": "nimble",
  "state": "Customer reports repeated checkout failures and requests a refund.",
  "questions": {
    "route": {
      "type": "choice",
      "instructions": "Which team should handle this ticket?",
      "criteria": {
        "billing": "Payments and refunds",
        "technical": "Application errors and outages"
      }
    },
    "urgent": {
      "type": "noul",
      "instructions": "Is the checkout unavailable for multiple customers?",
      "criteria": {
        "false": "No evidence of a broad outage",
        "true": "Multiple customers cannot complete checkout"
      }
    }
  }
}</code></pre><p><small>Each question independently evaluates the same ticket. The routing result does not become input to the urgency question.</small></p></div></section><figure><img src="https://localai.co.kr/guides/oct26-jev-ollama-local-decision-guide-02.webp" alt="Blue and green candidate cards appear beside several counter blocks." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The response fields the application receives depend on the question type.</figcaption></figure><section><h2>Validate probabilities and set an automatic-routing threshold</h2><p>confidence rises when probability mass concentrates on one candidate. It is a concentration measure calculated from the entropy of the candidate distribution, so it differs from accuracy. A model can give high confidence to a misclassified unfamiliar ticket; validate misclassification rates on real tickets before using a threshold such as 0.9 for automatic approval.</p><p>Before using the model in production, build a validation set from past tickets that includes common and exceptional cases. Have a person confirm each ticket's responsible team, then run the model with the same state and candidate descriptions. In addition to overall accuracy, calculate separately how often billing tickets go to technical support and technical outages enter the billing queue. The relative cost of these errors determines thresholds for automatic assignment, human review, or asking for more information.</p><p>As an illustrative calculation, you could count correct results among 100 validation tickets separately from misclassifications among 40 billing tickets. These numbers explain the method; they are not model measurements. To publish actual accuracy or latency, record the dataset, model tag and revision, hardware, Ollama version, and number of repetitions. The Ollama 0.35.0 release does not provide a performance comparison for Nimble on /v1/systemone.</p><p>If the output is unexpected, first check the endpoint address and Ollama version, then confirm that the model tag is a System One-compatible Nimble or Tev. The question type must be choice, noul, or score, and the number of candidates must be supported. Do not infer support for complex candidate descriptions solely from the TypeSafe reference API; use JSON accepted by your Ollama request and documentation for the installed version.</p><ul><li><a href="https://github.com/ollama/ollama-python">System One example in the Ollama Python client</a></li><li><a href="https://github.com/ollama/ollama/blob/main/docs/openapi.yaml">Ollama OpenAPI request and response definitions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-jev-ollama-local-decision-guide-03.webp" alt="Blue and green sorting bins stand beside an ochre bin for human review." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set automatic-routing thresholds from validation data, not from the probability value alone.</figcaption></figure><section><h2>Use a chat API when you need an explanatory response</h2><p>System One is an API for selection and scoring. It does not explain refund policies or draft customer replies. If a reply is needed, pass the classification result to application logic and use a separate chat request to write it. Keeping the steps separate lets you diagnose candidate-selection errors independently from reply-writing problems.</p><p>If existing rules already distinguish every ticket type, there may be no reason to add a model. Consider adoption only after validation data shows recurring language variations that the rules cannot handle and model classification reduces manual work. You can begin in shadow mode: log results without automatically routing tickets, then compare them with staff decisions.</p><p>When comparing speed, separate warm runs, where the model is already in memory, from cold runs that load it for the first time. After a warm-up, send the same fixed request at least three times and record the median and error count. Wall-clock latency per request matters directly for classification, so do not compare this endpoint directly with a general chat model's output tokens per second.</p><ul><li><a href="https://localai.co.kr/en/guides/jev-system-one-model-explained">How System One scores choices</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Hardware requirements for local Jev-style models</a></li><li><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Connect local requests to an Ollama server</a></li><li><a href="https://github.com/ollama/ollama/releases/tag/v0.35.0">Official Ollama v0.35.0 release</a></li><li><a href="https://github.com/ollama/ollama-python">Ollama Python client</a></li><li><a href="https://github.com/ollama/ollama/blob/main/docs/openapi.yaml">Ollama OpenAPI</a></li><li><a href="https://github.com/bespokelabsai/nimble">Official Bespoke Labs Nimble repository</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check the Jev runtime path for your hardware</h2><p>Review memory requirements for the model weights and runtime format.</p><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Ollama 0.35.0's `/v1/systemone` takes a state such as an inquiry and a choice, yes/no, or scoring question, then returns a structured result and probabilities for the candidates. You can classify inquiries with Nimble, then use human-labeled examples to review errors and confidence before setting an automatic routing threshold.</dd></div><div><dt>How much memory does it need?</dt><dd>Before starting, make sure the Ollama server is running and that you have disk space for the model and memory to run it. Bespoke Labs lists Nimble 9B's original BF16 weights at about 18 GB, but the format and quantization of the nimble tag pulled by Ollama may differ. Check the downloaded file's SIZE with ollama list, as below, but do not interpret that size as runtime memory use.</dd></div><div><dt>When is it better not to choose this?</dt><dd>When comparing speed, separate warm runs, where the model is already in memory, from cold runs that load it for the first time. After a warm-up, send the same fixed request at least three times and record the median and error count. Wall-clock latency per request matters directly for classification, so do not compare this endpoint directly with a general chat model's output tokens per second.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run a local LLM across Macs: MLX, JACCL and performance</title><link>https://localai.co.kr/en/guides/mlx-multi-mac-jaccl-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mlx-multi-mac-jaccl-guide</guid><description>Distribute a model across Macs with MLX, MLX-LM and JACCL, then check connectivity and speed. Covers Thunderbolt RDMA preparation and configuration-specific Muse Spark Open measurements.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Run a local LLM across Macs: MLX, JACCL and performance</h1><p>Use MLX-LM and JACCL together to run a model across two Macs.</p><p id="guide-page-summary">JACCL is an MLX communication backend that exchanges data between Macs while they run an AI model. MLX-LM splits and places the model across the Macs, and JACCL transfers the values exchanged during computation. Together they provide a way to run a model that is difficult to fit on one Mac.</p><p>Connect two Macs over Thunderbolt, check communication with a small example, then run a model with MLX-LM. After confirming that the model is distributed across both machines, send the same question to one Mac and to the pair to compare waiting time and memory use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>JACCL is a device-to-device communication backend. It does not automatically support every Mac, OS, or network combination.</li><li>MLX and MLX-LM versions, macOS, the network interface, and model sharding must all match.</li><li>Check model placement across devices in the logs before recording throughput and latency.</li><li>Compare one-Mac and two-Mac runs with the same prompt and model settings.</li></ol></section><section><h2>Prepare two Macs and a supported model</h2><p>MLX 0.30.6 includes changes to JACCL and MLX-LM distributed server inference. Its JACCL update requires macOS 26.3 or later. Check the official documentation to confirm that both machines use Apple Silicon, the MLX and MLX-LM versions provide the JACCL path, and the model supports distributed sharding.</p><p>Both Macs must reach each other on the same local network. If using managed company devices or public Wi-Fi, check administrator guidance before changing network or firewall settings. Speed depends on the model and communication volume, so the steps below first verify connection and execution, then compare performance on your workload.</p><p>Prepare matching MLX and MLX-LM environments on both Macs. The installation block below reproduces the 0.30.6 connectivity example. Create virtual environments at matching paths, install on each machine and check versions. Choose one controlling Mac for the network and RDMA setup in the next section.</p><div><p><strong>Prepare matching Python environments on both Macs</strong></p><pre><code data-guide-code-block="0-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install 'mlx==0.30.6' 'mlx-lm==0.30.6'
python -m pip show mlx mlx-lm</code></pre><p><small>Run on each machine. Match the Python executable used over SSH to the same environment.</small></p></div><ul><li><a href="https://github.com/ml-explore/mlx/blob/main/docs/src/usage/launching_distributed.rst">Official MLX distributed launch and JACCL guide</a></li><li><a href="https://github.com/ml-explore/mlx/blob/main/docs/src/usage/distributed.rst">Official MLX distributed-inference example</a></li><li><a href="https://github.com/ml-explore/mlx/releases/tag/v0.30.6">MLX 0.30.6 JACCL and system-requirement changes</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases/tag/v0.30.6">MLX-LM 0.30.6 distributed server inference changes</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-01.webp" alt="Two Mac desktops are joined by a short direct-connection cable." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify distributed inference separately after checking the device connection.</figcaption></figure><section><h2>Check versions and the Thunderbolt path first</h2><p>The official walkthrough connects two Mac minis over Thunderbolt, then uses MLX’s RDMA setup tool to create a hostfile. After a small distributed check passes with mlx.launch, you can run an MLX-LM example.</p><p>The automatic setup checks SSH between the machines, RDMA support, and the Thunderbolt connection mesh. If the mesh cannot be formed, the Macs use Ethernet only, or the OS is unsupported, use the official ring/Ethernet path or a single Mac instead of forcing JACCL.</p><p>Both Macs need hostname resolution and passwordless SSH, with Python and the test script at matching paths. JACCL `--auto-setup` uses administrative access on each Mac to change Thunderbolt network settings. For managed devices, review the proposed commands and obtain administrator approval first. This JACCL example uses macOS 26.3 or later.</p><p>Because this setup may change network and kernel configuration, run it on dedicated test machines. Do not start a large model until two ranks are confirmed. If both logs do not show ranks 0 and 1 with size=2, stop before proceeding.</p><p>Check macOS, Python and package versions on each Mac. The `ssh mac-mini-2` example queries the other Mac from mac-mini-1; reverse the destination when checking the opposite direction. Match absolute virtual-environment paths, then run network configuration from the controlling Mac. Review the changes and administrator access before `--auto-setup`.</p><div><p><strong>Check versions on both Macs and configure the JACCL connection</strong></p><pre><code data-guide-code-block="1-0"># Check local versions on each Mac. Run SSH and network setup from mac-mini-1.
# Replace both hostnames with your SSH hostnames; review auto-setup changes first.
sw_vers
python3 --version
python3 -m pip show mlx mlx-lm
JACCL_PYTHON="$(mlx.launch --print-python)"
"$JACCL_PYTHON" --version
ssh mac-mini-2 "'$JACCL_PYTHON' --version &amp;&amp; '$JACCL_PYTHON' -m pip show mlx mlx-lm"
mlx.distributed_config --verbose --hosts mac-mini-1,mac-mini-2 --over thunderbolt --dot
mlx.distributed_config --verbose --backend jaccl --hosts mac-mini-1,mac-mini-2 --over thunderbolt --auto-setup --output hosts.json</code></pre><p><small>Replace the hostnames with those configured for SSH. Because auto-setup changes the Thunderbolt network, run it on dedicated test machines.</small></p></div></section><section><h2>Use a small example to verify ranks and model placement separately</h2><p>After creating the hostfile, confirm that both Macs can use the same Python and launch script, then run the rank check first. The JACCL hostfile needs RDMA device information linking the two ranks. If you edit the file manually, compare the RDMA device names and rank order with the setup tool's output.</p><p>First check the two-Mac connection using the rank test without loading a model. The following `mlx-community/DeepSeek-R1-0528-4bit` command is a large-model distributed-chat example. Check that weights and context fit across the Macs before starting with a short prompt. Record per-device loading and runtime logs, then check connectivity, versions and placement if an error occurs.</p><p>If the rank check prints rank=0 size=2 and rank=1 size=2, the two Macs form a distributed group. Then run the MLX-LM chat example and check the logs to confirm the model is actually placed across both devices. Also check the model's official documentation to see whether its architecture supports distributed sharding.</p><p>This block also passes the earlier `JACCL_PYTHON` as `--python`. The trailing `python3` is resolved from the locally activated environment, and its absolute executable path is used remotely. Start with the rank test in the environment that passed the SSH check.</p><div><p><strong>Verify ranks, then run the official MLX-LM example</strong></p><pre><code data-guide-code-block="2-0">mlx.launch --verbose --python "$JACCL_PYTHON" --backend jaccl --hostfile hosts.json -- python3 -c 'import mlx.core as mx; g=mx.distributed.init(backend="jaccl"); print(f"rank={g.rank()} size={g.size()}")'
mlx.launch --verbose --python "$JACCL_PYTHON" --backend jaccl --hostfile hosts.json -- python3 -m mlx_lm chat --model mlx-community/DeepSeek-R1-0528-4bit</code></pre><p><small>The first command checks whether both ranks are connected. The second is the official distributed chat example; verify model sharding and per-device placement in the logs.</small></p></div><ul><li><a href="https://github.com/ml-explore/mlx-lm#distributed-inference">Official MLX-LM distributed-inference guidance</a></li><li><a href="https://github.com/ml-explore/mlx/tree/main/mlx/distributed">MLX distributed-communication API and backend docs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-02.webp" alt="Model-weight blocks are divided across the two Mac screens, with a connection shown between the computers." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use runtime logs to check work distribution and communication across both devices.</figcaption></figure><section><h2>What changes from two M5 Ultras to four?</h2><p>Apple’s October 15 MLX experiment distributes Muse Spark Open NVFP4 across M5 Ultras. Pipeline parallelism splits model layers, while tensor parallelism splits calculations within a layer. Producing tokens requires inter-machine communication, making low-latency RDMA important.</p><table><caption>Muse Spark Open distributed generation on M5 Ultra</caption><thead><tr><th scope="col">Machines and split</th><th scope="col">Generation</th></tr></thead><tbody><tr><th scope="row">2 · pipeline</th><td>15.74 tok/s</td></tr><tr><th scope="row">2 · tensor</th><td>24.99 tok/s</td></tr><tr><th scope="row">4 · tensor</th><td>36.73 tok/s</td></tr></tbody></table><p>M5 Ultra Mac Studio · Muse Spark Open 816B-A42B NVFP4 · 8,192 input tokens followed by 128 generated tokens · mlx_lm.benchmark · Apple measurements</p><p>Tensor parallelism generated faster even on the same two machines, and four reached 36.73 tok/s. For long conversations, compare input-processing time too. TTFT in these configurations was 8.4 seconds for two-machine pipeline, 8.2 for two-machine tensor, and 4.8 for four-machine tensor.</p><p>For the new Muse configuration, update MLX and MLX-LM on every Mac to matching versions supporting the model. The earlier pinned 0.30.6 commands reproduce the JACCL connection example from that release. Confirm ranks with the same virtual-environment paths and hostfile, then use the checkpoint and command in the dedicated Muse guide.</p><ul><li><a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple MLX and RDMA experiment</a></li><li><a href="https://localai.co.kr/en/guides/muse-spark-open-mac-guide">Prepare Muse Spark Open files and runtime</a></li><li><a href="https://github.com/ml-explore/mlx/blob/main/docs/src/usage/launching_distributed.rst">JACCL hostfiles and distributed launch</a></li></ul></section><section><h2>Fix the conditions to compare one Mac with two</h2><p>Keep model version, weights, quantization, prompt, maximum output length and sampling identical. For a model that fits on one Mac, measure it first and repeat distributed runs under the same conditions. Record cold runs including initial download and loading separately from repeated warm runs.</p><p>Record more than completion time: include time to first token, output token count and generation rate, memory and GPU/CPU use on each Mac, network traffic, errors, and retries. If answers differ, check that the seed, sampling, tokenizer, and template match before comparing speed. Distribution changes computation placement and communication, so results can vary with input and output length.</p><p>For example, suppose short replies are slower because of network communication and a difference appears only on long replies. In that case, record interactive queries separately from long batch jobs so one average does not obscure the workload you care about. This is an illustrative assumption, not an MLX measurement.</p><table><caption>Check whether execution works and whether it benefits actual operations as separate questions.</caption><thead><tr><th scope="col">Stage</th><th scope="col">Record</th><th scope="col">Pass criterion</th></tr></thead><tbody><tr><th scope="row">Connection</th><td>OS, package, address, and rank logs</td><td>Both processes can find each other.</td></tr><tr><th scope="row">Placement</th><td>Per-device memory and work logs</td><td>The intended model split and device participation are visible.</td></tr><tr><th scope="row">Correctness</th><td>Output and token count for the same prompt</td><td>Answer quality and completion status are acceptable.</td></tr><tr><th scope="row">Performance</th><td>TTFT, completion time, memory, and transfer volume</td><td>The benefit exceeds the operational complexity for the actual workload.</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/tensorfold-glm53-two-macs-guide">Requirements for GLM-5.3 across two M5 Ultras</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-mlx-multi-mac-jaccl-guide-03.webp" alt="A model loaded on one computer is compared with blocks split across two computers." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare a single-Mac baseline with distributed execution on the same workload.</figcaption></figure><section><h2>Narrow failures down through network and sharding checks</h2><p>If a Mac cannot find its peer, check whether both are on the same network, whether the router blocks device-to-device traffic, and whether a firewall, VPN, or security tool blocks the connection. Inspect OS blocking logs and administrator policies instead of disabling the firewall. Check ports in the current MLX command and official documentation; do not open them arbitrarily.</p><p>If the connection works but initialization fails, compare package versions, macOS requirements, rank count, and address settings. For memory pressure, check weight size, per-device placement, context and KV cache, and memory used by other apps separately. Faster networking does not automatically balance weights across devices.</p><p>If it runs but is slow, use the logs to locate the stage where time increases. For a small model or short prompt, communication and distribution setup can cost more than the computation saved. If the distributed server is unstable or the speed difference is not repeatable, keep one Mac as the default path.</p><ul><li><a href="https://github.com/ml-explore/mlx/releases/tag/v0.30.6">MLX JACCL release notes</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases/tag/v0.30.6">MLX-LM distributed-server release notes</a></li><li><a href="https://github.com/ml-explore/mlx-lm">Official MLX-LM repository</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Estimate available memory on a Mac</h2><p>Separate memory used by weights, context cache, and the operating system.</p><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>JACCL is an MLX communication backend that exchanges data between Macs while they run an AI model. MLX-LM splits and places the model across the Macs, and JACCL transfers the values exchanged during computation. Together they provide a way to run a model that is difficult to fit on one Mac.</dd></div><div><dt>How much memory does it need?</dt><dd>Record more than completion time: include time to first token, output token count and generation rate, memory and GPU/CPU use on each Mac, network traffic, errors, and retries. If answers differ, check that the seed, sampling, tokenizer, and template match before comparing speed. Distribution changes computation placement and communication, so results can vary with input and output length.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3-Omni Local Setup Conditions: Testing Audio and Video Paths</title><link>https://localai.co.kr/en/guides/qwen3-omni-local-conversation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen3-omni-local-conversation-guide</guid><description>Review Qwen3-Omni thinker/talker roles and audio/video paths, then run an official Transformers audio example on supported Linux CUDA hardware.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen3-Omni Local Setup Conditions: Testing Audio and Video Paths</h1><p>Qwen3-Omni is a multimodal model that understands text, audio, and video and answers in text or speech.</p><p id="guide-page-summary">Give Qwen3-Omni Instruct text, an audio recording, or a short video and it can respond in text; with the talker path, it can also answer in speech. The thinker processes the input and forms a response, while the talker handles audio output.</p><p>To turn a meeting recording into notes, submit the audio file with a request for a summary and receive text. To ask about a short clip, submit the video with a question. Deciding whether you need text or spoken output first makes it easier to choose a test path.</p><p>First check the input path with an example that returns text from a short audio file. Then test whether you need spoken answers, and add video questions last; this staged sequence makes it easier to locate problems.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Start on the official Linux NVIDIA and Transformers path with one short WAV file and receive a text answer.</li><li>Once text answers work, test talker audio output and video input separately.</li><li>Change video length, resolution, and frame interval one at a time, recording processing time and memory.</li><li>For real-time conversation, focus on the first response and audio start; for long-recording summaries, consider total time and memory stability.</li></ol></section><section><h2>Prepare the runtime on a Linux NVIDIA GPU</h2><p>On a Linux NVIDIA GPU, use Transformers to load the official Qwen3OmniMoeForConditionalGeneration model and processor for audio files. The model is 30B-A3B in scale. Prepare Transformers 5.2.0 or later, accelerate, qwen-omni-utils, and ffmpeg as listed by Qwen, and install a PyTorch build matched to your GPU.</p><p>With a compatible CUDA GPU and FP16 or BF16, you can also use FlashAttention 2. If you need a server for multiple requests, consider the officially listed option, vLLM-Omni.</p><p>This example uses the Linux and NVIDIA GPU path documented by Qwen. Qwen’s official materials do not list a macOS/MLX support path.</p><p>The official memory table assumes BF16 with Transformers and FlashAttention 2. Memory requirements and functionality can change with a different precision or runtime, so prepare a compatible GPU and CUDA/PyTorch combination and enough space for the checkpoint.</p><div><p><strong>Install the official Transformers environment</strong></p><pre><code data-guide-code-block="0-0">python -m venv .venv
source .venv/bin/activate
python -m pip install -U 'transformers&gt;=5.2.0' accelerate qwen-omni-utils soundfile
# Install a PyTorch build matched to your CUDA and GPU from the official PyTorch selector.
python -m pip install -U flash-attn --no-build-isolation
ffmpeg -version</code></pre><p><small>Install the package versions used by the official example and prepare a short WAV file. These commands set up the environment for a Linux CUDA GPU.</small></p></div><ul><li><a href="https://github.com/QwenLM/Qwen3-Omni/blob/main/README.md">Transformers quick start, version requirements, and audio example</a></li><li><a href="https://github.com/QwenLM/Qwen3-Omni">Official Qwen3-Omni repository and backend guide</a></li><li><a href="https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct">Qwen3-Omni Instruct model card</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-qwen3-omni-local-conversation-guide-01.webp" alt="A local computer desk with a microphone, webcam, and speaker connected." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check model capabilities separately from peripheral and runtime compatibility.</figcaption></figure><section><h2>First check a text answer from a short audio file</h2><p>Save a short WAV file without personal information as sample.wav, then run the code. Add its local path to the conversation input; process_mm_info prepares the audio and the Thinker prints a text response.</p><p>The first run can take time to download and load the large checkpoint, and may use substantial GPU memory. If the file cannot be read, check its codec and sample rate, and confirm ffmpeg and qwen-omni-utils are installed.</p><p>After checking the text answer, test audio output through the talker path. Check whether the same answer is available as text and speech and whether the generated file plays. If only text appears, compare the request format and runtime configuration with the official example. Testing audio input and audio output separately makes it easier to identify which path needs adjustment.</p><p>Record model loading, input processing, time to the first text response, and total response time separately; distinguish cold from warm runs. The code below requests text only and does not include talker audio output.</p><p>This article first runs the Python example that turns WAV input into a text answer. To add speech output, use the talker settings and saving code in the linked official README's audio-generation example. Keep the Instruct model, processor and environment prepared here when comparing.</p><div><p><strong>Submit one local WAV file and receive a text answer</strong></p><pre><code data-guide-code-block="1-0">from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info

model_id = 'Qwen/Qwen3-Omni-30B-A3B-Instruct'
model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    model_id, dtype='auto', device_map='auto', attn_implementation='flash_attention_2'
)
processor = Qwen3OmniMoeProcessor.from_pretrained(model_id)
messages = [{'role': 'user', 'content': [
    {'type': 'audio', 'audio': './sample.wav'},
    {'type': 'text', 'text': 'Summarize the spoken message in one sentence.'},
]}]
text = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(messages, use_audio_in_video=False)
inputs = processor(text=text, audio=audios, images=images, videos=videos,
                    return_tensors='pt', padding=True, use_audio_in_video=False)
inputs = inputs.to(model.device).to(model.dtype)
text_ids, _ = model.generate(**inputs, return_audio=False, thinker_return_dict_in_generate=True)
answer = processor.batch_decode(
    text_ids.sequences[:, inputs['input_ids'].shape[1]:],
    skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(answer)</code></pre><p><small>sample.wav is a local file path. Use the official Transformers example to check that a short audio clip is processed and produces a text answer.</small></p></div><ul><li><a href="https://github.com/QwenLM/Qwen3-Omni/blob/main/cookbooks/speech_recognition.ipynb">Official Qwen3-Omni speech recognition cookbook</a></li><li><a href="https://github.com/QwenLM/Qwen3-Omni/blob/main/README.md">Official audio and video usage guide</a></li></ul></section><section><h2>Increase video length and frame count in small steps</h2><p>After the audio test, ask a question about a short video of about five seconds. The model receives decoded frames and timing information, so the amount of input can vary with frames per second and resolution even when file sizes match. Start with a short clip using the official preprocessing and frame-sampling settings.</p><p>In the official model-card example using BF16, Transformers, and FlashAttention 2, a 15-second video uses about 78.85 GB and a 120-second video about 144.81 GB of memory. These are theoretical figures for that setup, not actual minimums for other runtimes or precisions. Record input frame count and peak memory as you increase the duration.</p><p>Change video length, resolution, or frame interval one at a time. Along with input frame count, check whether small text and objects are visible, actions between frames are missed, or the answer adds details absent from the video. If event order matters, ask about the final scene and the sequence of events using the same clip.</p><p>For video requests, continue with the video example in the official README linked in this section. Replace the local clip path and question, then inspect the preprocessed frame count. The WAV and video examples use the same model but different input preparation; confirm each works before combining them.</p><table><caption>For short-video tests, record input size and answer quality together.</caption><thead><tr><th scope="col">Variable</th><th scope="col">Path to check first</th><th scope="col">Validation question</th></tr></thead><tbody><tr><th scope="row">Text dialogue</th><td>Thinker input/output</td><td>Event order and opening/closing scenes</td></tr><tr><th scope="row">Audio understanding</th><td>Audio-input preprocessing and recognition</td><td>Recognition of small text and objects</td></tr><tr><th scope="row">Frame sampling</th><td>Talker audio output</td><td>Can the generated audio be saved and played?</td></tr><tr><th scope="row">Video question</th><td>Video-frame sampling and thinker</td><td>Are timing and key scenes reflected?</td></tr></tbody></table><ul><li><a href="https://github.com/QwenLM/Qwen3-Omni/blob/main/README.md">Video guidance in the official Qwen3-Omni repository</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-qwen3-omni-local-conversation-guide-02.webp" alt="A video clip, audio waveform, and document page enter a local AI interface." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test one input modality path at a time instead of combining them all at once.</figcaption></figure><section><h2>Inspect latency and memory use separately</h2><p>A multimodal request may pass through file preprocessing, a vision/audio encoder, thinker prefill, answer decoding, and talker audio output. When measuring, record the stage timings available in the runtime logs and total response time. Do not estimate stage-level values that the logs do not provide.</p><p>If memory is insufficient, examine input length, video frame count, the number of concurrent conversations, and memory used by other apps separately. If video is the cause, shorten it and run again; for work that does not require audio and video together, process them separately and compare.</p><p>For real-time conversation, look at time to the first text response and when speech begins. For a batch job that summarizes a long recording, compare total processing time and whether memory remains stable.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct">Modality and memory examples in the official model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-qwen3-omni-local-conversation-guide-03.webp" alt="A local PC workspace showing a graphics processor and available memory." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record memory use as you increase video length and frame count.</figcaption></figure><section><h2>Find the required options in official examples</h2><p>The Qwen3-Omni README and speech-recognition cookbook provide audio-input examples and package versions; video preprocessing and model-memory conditions are in the official repository and model card. For a serving setup that handles multiple requests, consult vLLM-Omni documentation and choose a path that matches the installed version.</p><ul><li><a href="https://github.com/QwenLM/Qwen3-Omni">Qwen3-Omni source repository</a></li><li><a href="https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct">Qwen3-Omni Instruct model card</a></li><li><a href="https://docs.vllm.ai/">Official vLLM serving docs</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Compare local multimodal models</h2><p>Review inputs and runtime paths for speech recognition and synthesis.</p><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Give Qwen3-Omni Instruct text, an audio recording, or a short video and it can respond in text; with the talker path, it can also answer in speech. The thinker processes the input and forms a response, while the talker handles audio output.</dd></div><div><dt>How much memory does it need?</dt><dd>The official memory table assumes BF16 with Transformers and FlashAttention 2. Memory requirements and functionality can change with a different precision or runtime, so prepare a compatible GPU and CUDA/PyTorch combination and enough space for the checkpoint.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The Qwen3-Omni README and speech-recognition cookbook provide audio-input examples and package versions; video preprocessing and model-memory conditions are in the official repository and model card. For a serving setup that handles multiple requests, consult vLLM-Omni documentation and choose a path that matches the installed version.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run a llama.cpp MTP Server on DGX Spark: Qwen3.6 Agent Requests</title><link>https://localai.co.kr/en/guides/dgx-spark-llama-cpp-mtp-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/dgx-spark-llama-cpp-mtp-guide</guid><description>Build llama.cpp with CUDA on DGX Spark and connect the Qwen3.6-35B-A3B MTP GGUF to an OpenAI-compatible endpoint. Configure conversation history to preserve thinking, verify a normal response, and troubleshoot memory and connectivity.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Run a llama.cpp MTP Server on DGX Spark: Qwen3.6 Agent Requests</h1><p>Run a Qwen3.6 MTP server on DGX Spark and continue agent conversations</p><p id="guide-page-summary">The llama.cpp server accepts requests and conversation history from an agent app and returns answers from a local Qwen3.6-35B-A3B MTP model through an OpenAI-compatible API. This guide prepares the CUDA build and compatible GGUF for DGX Spark, then checks MTP initialization and multi-turn history transfer.</p><p>A coding agent can edit a repository, run tests, read the logs, and make a follow-up fix. To preserve the work context, the server must load an MTP-compatible model and the agent must continue sending the earlier conversation and thinking history.</p><p>Here the server is bound to a local address so only apps on the same Spark use it. First check connectivity and a response with a small request, then send a follow-up in the same conversation, and finally distinguish MTP initialization from performance measurement.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Build llama.cpp for Spark with the CMAKE_CUDA_ARCHITECTURES=121a-real setting documented by NVIDIA.</li><li>Use a Q4_K_XL GGUF that includes an MTP head together with the draft-mtp setting.</li><li>preserve_thinking keeps Qwen's thinking record in conversation history for follow-up requests.</li></ol></section><section><h2>Prepare Spark and the MTP model file</h2><p>This setup targets DGX Spark, DGX OS, a GB10 GPU, and 128 GB unified memory. NVIDIA's playbook specifies about 30 GB of free memory for the example model and KV cache, and at least about 40 GB of free disk space for the download and build artifacts. The example download is roughly 35 GB; runtime memory use depends on context length and other running apps.</p><p>The model is the UD-Q4_K_XL tag from unsloth/Qwen3.6-35B-A3B-MTP-GGUF. This compatible GGUF includes an MTP head. Do not assume that other quantized files in the same model family include MTP; verify the repository and tag, and make sure you have Hugging Face access and a network that can resume downloads.</p><ul><li><a href="https://huggingface.co/unsloth/Qwen3.6-35B-A3B-MTP-GGUF">Qwen3.6-35B-A3B MTP GGUF repository</a></li><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/playbook-llama-cpp/README.md">NVIDIA DGX Spark llama.cpp playbook</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><section><h2>Build llama.cpp for Spark</h2><p>In a terminal, confirm that Git, CMake, and the CUDA Toolkit are available, then install the dependencies documented by NVIDIA. CMAKE_CUDA_ARCHITECTURES=121a-real targets GB10, and GGML_CUDA builds the CUDA backend. Record the llama.cpp source revision and executable version to make the build reproducible.</p><p>After building, verify the executable with llama-server --version. If CUDA is not found, check nvcc --version and PATH first. A binary built for another GPU architecture may not recognize the Spark GPU even if compilation completed.</p><div><p><strong>Install dependencies and build the server for Spark</strong></p><pre><code data-guide-code-block="1-0">sudo apt update
sudo apt install -y git clang cmake libcurl4-openssl-dev libssl-dev
git clone https://github.com/ggml-org/llama.cpp ~/llama.cpp
cd ~/llama.cpp
cmake -B build -DGGML_NATIVE=ON -DGGML_CUDA=ON -DGGML_CURL=ON -DGGML_RPC=ON -DCMAKE_CUDA_ARCHITECTURES=121a-real
cmake --build build --config Release --target llama-server -j
./build/bin/llama-server --version</code></pre><p><small>Build with the CUDA settings in NVIDIA's playbook, then verify that the server version prints on Spark.</small></p></div><ul><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/playbook-llama-cpp/README.md">NVIDIA's llama.cpp build commands for Spark</a></li></ul></section><section><h2>Start the server on a local address</h2><p>Because only an agent on the same Spark should connect, bind the server to 127.0.0.1. The address 0.0.0.0 allows other devices to connect. The -hf option downloads a Hugging Face model into the cache and can also load a vision projector for supported models.</p><p>The first startup includes downloading the roughly 35 GB model and loading it into CUDA. Send requests after the server log shows server is listening. CPU and GPU share unified memory, so do not estimate available capacity from model-file size alone; also account for context, the operating system, and other apps.</p><p>The MTP example specifies draft-mtp and a maximum of three draft tokens, as documented for this compatible example in NVIDIA's playbook. preserve_thinking keeps the thinking block created by Qwen's template in later conversation history, allowing the agent to include the earlier reasoning record in a follow-up request.</p><div><p><strong>Run the Spark server with MTP and preserved thinking history</strong></p><pre><code data-guide-code-block="2-0">cd ~/llama.cpp/build
./bin/llama-server -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL --host 127.0.0.1 --port 30000 --chat-template-kwargs '{"preserve_thinking":true}' --spec-type draft-mtp --spec-draft-n-max 3 --alias qwen3.6-35b-a3b --ctx-size 8192 -ngl 99</code></pre><p><small>Select the compatible Q4_K_XL file and wait for the server is listening log.</small></p></div><ul><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/playbook-llama-cpp/README.md">NVIDIA's MTP runtime options</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/speculative.md">llama.cpp speculative decoding documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-01.webp" alt="A small AI computer beside a code-editing screen on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Bind the server to a local address so only an agent on the same Spark can connect.</figcaption></figure><section><h2>Check health and the first JSON response</h2><p>After the server logs show the model loaded and speculative decoding context initialized, query the health endpoint from another Spark terminal. This initialization log means the MTP context is ready. Then send a short request with the model ID to the OpenAI-compatible chat/completions API and check for an assistant response under choices. This confirms connectivity, not performance.</p><p>When testing a follow-up from the agent, include the first question's conversation history and test logs in the same conversation history. preserve_thinking retains records in the model template; if the app deletes or rewrites messages, that content is not sent. Whether the API wrapper actually sends history and exposes thinking content in the raw response also depends on app settings and response format.</p><div><p><strong>Check server health and submit the first chat request</strong></p><pre><code data-guide-code-block="3-0">curl --fail-with-body http://127.0.0.1:30000/health
curl --fail-with-body http://127.0.0.1:30000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"qwen3.6-35b-a3b","messages":[{"role":"user","content":"Review this Python function for empty-list input and suggest a minimal fix: def first_item(items): return items[0]"}],"max_tokens":128,"temperature":0}'</code></pre><p><small>After health succeeds, use the exact model ID and check for an assistant message under choices in the response JSON.</small></p></div><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/speculative.md">Speculative decoding guide for checking MTP initialization</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-02.webp" alt="Small draft-candidate blocks and larger verification blocks beside an AI computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When the main model verifies MTP's candidates, it can accept multiple tokens at once.</figcaption></figure><figure><img src="https://localai.co.kr/guides/oct26-dgx-spark-llama-cpp-mtp-guide-03.webp" alt="A local AI workspace connecting code and conversation screens" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Include the earlier conversation and test results again in a follow-up request.</figcaption></figure><section><h2>Validate follow-up requests and speed separately</h2><p>For the second request, include the earlier messages and test logs from the same conversation, then check that the agent relates its first proposed fix to the test result. NVIDIA's playbook prefers at least 32K context for agentic/coding work and 100K or more when possible. Choose the actual context length based on repository content and memory used by concurrent apps.</p><p>Check MTP use in the initialization log and server timing or speculative statistics. To compare speed, keep the model revision, input, and generation limit the same, warm up, and measure several runs. For the baseline, remove only the MTP options and send the same question; do not mix first-download or model-load time into generation speed. NVIDIA's playbook does not publish a direct tok/s comparison for this combination, so no figure is inferred.</p><ul><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/playbook-llama-cpp/README.md">NVIDIA Spark context recommendations and runtime notes</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-qwen-flash-next-dgx-spark-guide">Qwen Flash-Next on one versus two Sparks</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-glm53-flash-multi-spark-guide">GLM-5.3 Flash setup by Spark count</a></li><li><a href="https://localai.co.kr/en/compare/dgx-spark-vs-rtx-5090-local-llm">Compare DGX Spark and RTX 5090 speed, memory and cost</a></li></ul></section><section><h2>Troubleshoot connection, model, and memory in order</h2><p>If curl cannot connect, check that the server has logged server is listening and that the request uses 127.0.0.1:30000. If the server exits during startup, inspect the error log for the Hugging Face model name, download, CUDA initialization, or OOM messages.</p><p>If the response is missing or unexpected, check that the GGUF is MTP-compatible, the executable initialized draft-mtp, and the agent uses the exact model ID and chat template. Also confirm that messages in the second request include the required earlier turns.</p><p>If memory is insufficient, close other running apps and adjust the context limit. Reducing context in a long agent session also reduces the conversation and code the model can see. If you switch to another quantized file, recheck that it includes an MTP head and is supported.</p><ul><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/playbook-llama-cpp/README.md">NVIDIA Spark troubleshooting guidance</a></li><li><a href="https://huggingface.co/unsloth/Qwen3.6-35B-A3B-MTP-GGUF">Check the compatible model file and tag</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Review the Qwen3.6 serving setup</h2><p>Review model size and runtime paths for other hardware.</p><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The llama.cpp server accepts requests and conversation history from an agent app and returns answers from a local Qwen3.6-35B-A3B MTP model through an OpenAI-compatible API. This guide prepares the CUDA build and compatible GGUF for DGX Spark, then checks MTP initialization and multi-turn history transfer.</dd></div><div><dt>How much memory does it need?</dt><dd>This setup targets DGX Spark, DGX OS, a GB10 GPU, and 128 GB unified memory. NVIDIA's playbook specifies about 30 GB of free memory for the example model and KV cache, and at least about 40 GB of free disk space for the download and build artifacts. The example download is roughly 35 GB; runtime memory use depends on context length and other running apps.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Edit Reference Images with FLUX.2 Klein on Mac</title><link>https://localai.co.kr/en/guides/flux2-klein-mac-editing-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flux2-klein-mac-editing-guide</guid><description>Install FLUX.2 Klein through MFLUX's MLX path and run reference-image editing. This guide covers model sizes, licenses, input images, expected results, and first-line troubleshooting.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Edit Reference Images with FLUX.2 Klein on Mac</h1><p>With FLUX.2 Klein editing, specify what to change and what to preserve</p><p id="guide-page-summary">FLUX.2 Klein editing takes a source photo and reference images, changes the specified details, and saves a result image.</p><p>If you want to change only a mug’s color while keeping its handle and shadow, a prompt for creating a new image is not enough. FLUX.2 Klein editing takes a source image and reference images, then changes the specified details.</p><p>MFLUX is a community project, separate from BFL’s official runner. The 4B model file is about 15 GB and the 9B file about 32 GB, and their licenses differ. First use 4B to check the input path and saved result; compare a 9B variant only if its license and hardware requirements fit your use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The edit command must include the source image path through --image-paths.</li><li>The documentation lists Klein 4B, 9B, and 9B-KV for reference-image editing. 9B-KV uses a KV cache in the image-conditioned editing path.</li><li>File sizes and licenses vary by model. Distinguish the 4B Apache-2.0 license from the 9B family’s non-commercial terms.</li></ol></section><section><h2>Assign a role to each source and reference image</h2><p>To change the cup’s color while keeping its shadow and nearby leaves, include the source mug photo as an editing input. Unlike text-to-image, which creates a new scene, editing tells the model which parts of an existing image to change and which to keep.</p><p>Place the front photo mug-front.png, side photo mug-side.png, and dark-blue swatch blue-swatch.png in the example folder. Name their roles in the prompt—the edit target, shape reference, and color reference—so you can tell which instructions the result followed.</p><p>The MLX Metal path supports macOS 14 or later, so do not assume the steps below work on Intel Macs or earlier macOS versions. BFL’s official FLUX.2 repository documents model families and licenses; MFLUX’s documentation describes its editing CLI, mflux-generate-flux2-edit.</p><ul><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-flux2-klein-mac-editing-guide-01.webp" alt="A desk with a Mac showing the original white mug beside a blue mug of the same shape" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>An edit request names both what to change and what to keep.</figcaption></figure><section><h2>Check model size and usage terms</h2><p>The MFLUX FLUX.2 documentation lists Klein 4B and 9B for editing, plus 9B-KV for reference-image editing. A 4B file of about 15 GB or a 9B file of about 32 GB does not mean that runtime memory use equals the file size. Open apps, image count and resolution, and runtime workspace also use memory. Check unified memory and disk space before downloading.</p><p>Check the license for each model. BFL’s official repository distinguishes Klein 4B under Apache-2.0 from the 9B family under non-commercial terms. For commercial use, review the selected model repository’s license and BFL’s current terms.</p><p>Use flux2-klein-4b for the first run. When comparing 9B or 9B-KV, change only the model option and keep the same source and editing instruction. The 9B-KV cache is used in an editing path that includes reference images.</p></section><section><h2>Install MFLUX and run an edit</h2><p>The MFLUX README describes installing the tool with uv. On an Apple Silicon Mac with Homebrew, run brew install uv, verify it with uv --version, and install MFLUX with uv tool install --upgrade mflux. Check the installation and options with uv tool list and the edit CLI help, then put the three image files in the working folder. The model downloads automatically on first run, so you need a network connection and disk space.</p><div><p><strong>Install MFLUX on an Apple Silicon Mac</strong></p><pre><code data-guide-code-block="2-0">brew install uv
uv --version
uv tool install --upgrade mflux
uv tool list
mflux-generate-flux2-edit --help</code></pre><p><small>This is the documented installation sequence. Check that the CLI appears in the tool list and that its options are shown by the help command.</small></p></div><div><p><strong>Edit reference images with FLUX.2 Klein 4B</strong></p><pre><code data-guide-code-block="2-1">mflux-generate-flux2-edit --model flux2-klein-4b --image-paths mug-front.png mug-side.png blue-swatch.png --prompt 'Change only the mug color to match blue-swatch.png. Preserve the mug shape, handle, table, cast shadow, and nearby leaves.' --steps 4 --seed 42</code></pre><p><small>Use the front and side photos and color swatch as reference inputs. The same seed helps with comparison but does not guarantee pixel-level preservation of the source.</small></p></div></section><figure><img src="https://localai.co.kr/guides/oct26-flux2-klein-mac-editing-guide-02.webp" alt="Mug photos from several angles appear beside an edited image on a Mac" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The prompt distinguishes the role of each reference image.</figcaption></figure><section><h2>Compare the result with the source, then change one condition at a time</h2><p>When the command finishes, check whether the terminal shows an output path and an image file was created, then compare the mug and surrounding shadow in Preview. If the mug did not change, check the file paths and prompt first. If the leaves or shadow changed too, name the details to preserve more specifically and rerun with the same source and seed.</p><p>Changing steps, model size, seed, and reference-image count all at once makes it hard to tell which condition affected the result. First narrow the requested change in the prompt and save another result; compare 9B only if needed. A larger model does not guarantee a better result for every input and needs more memory and disk space.</p><p>If the process exits or reports insufficient memory, close other image-generation apps and browsers and retry with the same 4B settings. If it still fails, check MFLUX’s current macOS, Python, and model support requirements and inspect the error log. Moving to 9B can increase the memory burden when memory is already insufficient.</p></section><figure><img src="https://localai.co.kr/guides/oct26-flux2-klein-mac-editing-guide-03.webp" alt="Two photos with a changed mug color are checked for the surrounding leaves and shadow" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even when the color changes, compare the mug outline and nearby shadow with the source.</figcaption></figure><section><h2>Choose a different workflow when preservation accuracy matters</h2><p>Place the source and result side by side and inspect whether the mug outline, handle, shadow, and leaves remain. Reference-image editing does not guarantee pixel-level preservation. For work where accuracy matters, such as a product color, review the output and consider a separate design-editing step.</p><p>To compare generation time, record the same Mac, MFLUX version, model revision, source, resolution, and prompt, then warm up and time several runs. Generation time is a different metric from a text LLM’s token rate.</p><p>If 4B fits your memory and license requirements, start by testing that setup. Compare 9B or its KV variant only if repeated edits of the same photo fail to preserve the required details and your hardware has room. The starting point is to choose an input path suited to creating a new image or changing part of an existing one.</p></section><section><h2>Official implementation references</h2><p>Check the official references below for installation, support, and model-use terms. Record the model and runner versions when reproducing the workflow.</p><ul><li><a href="https://github.com/black-forest-labs/flux2">Official BFL FLUX.2 repository</a></li><li><a href="https://huggingface.co/black-forest-labs/FLUX.2-klein-4B">FLUX.2 Klein 4B model</a></li><li><a href="https://huggingface.co/black-forest-labs/FLUX.2-klein-9B">FLUX.2 Klein 9B model</a></li><li><a href="https://github.com/mflux-community/mflux/blob/main/src/mflux/models/flux2/README.md">MFLUX FLUX.2 guide</a></li><li><a href="https://github.com/mflux-community/mflux/blob/main/README.md">MFLUX README</a></li><li><a href="https://docs.astral.sh/uv/getting-started/installation/">Official uv installation guide</a></li><li><a href="https://github.com/ml-explore/mlx/blob/main/CMakeLists.txt">Official MLX repository</a></li></ul></section><aside><h2>Compare local image models</h2><p>Compare models suited to image generation and image editing.</p><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>FLUX.2 Klein editing takes a source photo and reference images, changes the specified details, and saves a result image.</dd></div><div><dt>How much memory does it need?</dt><dd>The MFLUX FLUX.2 documentation lists Klein 4B and 9B for editing, plus 9B-KV for reference-image editing. A 4B file of about 15 GB or a 9B file of about 32 GB does not mean that runtime memory use equals the file size. Open apps, image count and resolution, and runtime workspace also use memory. Check unified memory and disk space before downloading.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The MLX Metal path supports macOS 14 or later, so do not assume the steps below work on Intel Macs or earlier macOS versions. BFL’s official FLUX.2 repository documents model families and licenses; MFLUX’s documentation describes its editing CLI, mflux-generate-flux2-edit.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Restore old footage with an RTX 5090: a local SwiftVR guide</title><link>https://localai.co.kr/en/guides/swiftvr-local-video-restoration-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/swiftvr-local-video-restoration-guide</guid><description>Set up and run SwiftVR video restoration on an RTX 5090. Learn how to distinguish its reported 1080p frame rate from H100 results and LightX2V figures, then inspect restored frames and full-file processing time.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Restore old footage with an RTX 5090: a local SwiftVR guide</h1><p>SwiftVR restores contours and texture in existing video</p><p id="guide-page-summary">SwiftVR takes a low-quality video file, restores its frames, and saves an enlarged video file. It is a video-restoration model based on Wan2.2-TI2V-5B.</p><p>The example’s upscale=4 setting multiplies width and height resolution by four each. Check the source aspect ratio and pixel dimensions to decide whether the result fits your target display or editing format.</p><p>First check frame restoration and MP4 output with a short input, then process the full source file with the same settings. Check your own job’s completion time separately from published FPS.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>SwiftVR is a video-restoration model based on Wan2.2-TI2V-5B. Its input and purpose differ from prompt-based creation of a new scene.</li><li>The author reports about 26 FPS at 1080p on an RTX 5090 with BF16, default PyTorch SDPA, and causal chunks.</li><li>Check restored frames and MP4 output on a short clip, then use the same settings to time the full source file by wall clock.</li></ol></section><section><h2>Choose a clip and define what to check</h2><p>If you want to watch an old 480p travel video on a large screen, start by checking whether people’s outlines and the edges of grass and buildings become clearer. SwiftVR is designed to restore contours and texture present in the source. Include motion stability as a criterion, not just still frames.</p><p>The model card is titled Real-Time One-Step Generative Video Restoration. SwiftVR is based on Wan2.2-TI2V-5B and was released in June 2026; this guide follows an example that restores an existing low-quality video.</p><p>Record the source frame rate, resolution, and duration. Match the playback size and clip segment when comparing. Inspecting several still frames along with motion helps separate contour preservation from stability across frames.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/lingbot-world-v2-mac-guide">Run LingBot-World V2 on a Mac: Turn an Image and Camera Path into Video</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-01.webp" alt="A desktop PC beside a monitor showing a road scene" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Along with sharpness, check whether the road scene’s contours remain faithful to the source.</figcaption></figure><section><h2>Read the published FPS together with its hardware and settings</h2><p>The SwiftVR author reports about 26 FPS at 1080p on one RTX 5090 using BF16, default PyTorch SDPA, and causal chunks. This is a frame-processing rate. It does not guarantee the full video completion time, which also includes input reading and decoding, chunk buffering, output encoding, and saving.</p><p>A separate model-card table reports an average of 0.766 seconds, 31.32 FPS, and 38.01 GB peak memory on a single H100 at 2560×1440, with causal streaming and 24 frames. The same card reports about 14 FPS for 4K on an H100. The GPU and resolution differ from the RTX 5090 1080p result, so do not read these as RTX 5090 results.</p><p>The LightX2V repository reports a 1.91× speedup per request and 65.71% lower peak GPU memory on a single H100 when running SwiftVR through its separate runner. Multiplying those figures by the roughly 26 FPS on a 5090 would create an unmeasured result. Establish the official runner as a baseline first; if you use LightX2V, measure it separately on the same RTX 5090, input, and output resolution.</p><table><caption>Published results with different GPUs, resolutions, and runners are not interchangeable.</caption><thead><tr><th scope="col">Published result</th><th scope="col">GPU and settings</th><th scope="col">What it describes</th></tr></thead><tbody><tr><th scope="row">~26 FPS, 1080p</th><td>RTX 5090, BF16, default SDPA, causal chunks</td><td>Model-card result on a consumer GPU</td></tr><tr><th scope="row">31.32 FPS, QHD, 24 frames</th><td>Single H100, causal streaming</td><td>Separate H100 benchmark</td></tr><tr><th scope="row">~14 FPS, 4K</th><td>Single H100</td><td>Reported H100 result at 4K</td></tr><tr><th scope="row">1.91×, 65.71% lower memory</th><td>LightX2V measurement on one H100</td><td>Not applied to a 5090 estimate</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/oct26-swiftvr-local-video-restoration-guide-02.webp" alt="A sequence of film frames shows a person riding past on a bicycle" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect the restoration across several moving frames as well as a still frame.</figcaption></figure><section><h2>Prepare a CUDA 12.8 environment and run a short MP4</h2><p>The repository example includes CUDA 12.4 wheel commands for PyTorch 2.10.0 and torchvision 0.25.0, but that is not the setup to use unchanged on an RTX 5090. Install the same version pair from the official PyTorch CUDA 12.8 wheels, which support Blackwell sm_120, and check that your NVIDIA driver supports them. CUDA wheels include the user-space runtime, separate from a local CUDA Toolkit installation. The weights and inference code are released under Apache-2.0.</p><p>Install the code in a separate environment and download weights from the H-oliday/SwiftVR model ID. The checkpoint folder must contain the ReAE weights, empty-prompt embeddings, and Diffusers-format transformer file directly inside it. In the check below, confirm CUDA reports 12.8, the GPU is an RTX 5090, and its capability is (12, 0); this also helps catch Python importing torch from another environment.</p><div><p><strong>Install and verify CUDA 12.8 wheels for RTX 5090</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/H-oliday/SwiftVR.git
cd SwiftVR
conda create -n swiftvr python=3.10 -y
conda activate swiftvr
python -m pip install torch==2.10.0 torchvision==0.25.0 --index-url https://download.pytorch.org/whl/cu128
python -m pip install -e .
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available()); print(torch.cuda.get_device_name(0), torch.cuda.get_device_capability(0)) if torch.cuda.is_available() else None"
huggingface-cli download H-oliday/SwiftVR --local-dir checkpoints/</code></pre><p><small>Check that the GPU is shown, CUDA is 12.8, and capability is (12, 0).</small></p></div><div><p><strong>Restore a short video</strong></p><pre><code data-guide-code-block="2-1">python scripts/inference.py \
  --input sample_short.mp4 \
  --output restored_short.mp4 \
  --checkpoint checkpoints/ \
  --upscale 4 \
  --clip-len 24 \
  --dtype bfloat16</code></pre><p><small>Restore a short test clip and confirm that the MP4 output is saved through completion.</small></p></div><ul><li><a href="https://huggingface.co/H-oliday/SwiftVR">SwiftVR model card and checkpoint instructions</a></li><li><a href="https://github.com/H-oliday/SwiftVR">SwiftVR official code and inference examples</a></li></ul></section><section><h2>Check restored frames and the completed file separately</h2><p>Play the output MP4 at the same display size as the source and check whether people’s outlines or background patterns changed. For important footage, compare source and restored frames from the same moment, including faces, text, and straight lines.</p><p>clip_len is the number of frames processed together over time; the repository example uses 24. Changing it can affect memory and chunk-boundary behavior. First confirm the default settings produce a complete MP4, then change only the chunk length on another run. If the output is empty or truncated at the end, inspect the log, whether the input was read fully, final-buffer handling, and output duration.</p><p>FPS describes frame computation rate, while total completion time includes startup loading, encoding, and saving. It does not mean a 30-second video finishes in 30 seconds. Record the source duration, start and end times, GPU, output resolution, clip_len, precision, and FPS to compare a repeated run.</p></section><figure><img src="https://localai.co.kr/guides/swiftvr-restoration-workspace-repaired-20261016.webp" alt="A monitor shows a side-by-side coastal scene, with a film reel and a disconnected external SSD beside it." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare edges and fine texture to distinguish improved clarity from newly introduced detail.</figcaption></figure><section><h2>Test whether the reported result applies to your video</h2><p>If the short input preserves the details you need, process the full source file with the same settings and time completion. File duration, input codec, storage location, and preprocessing also affect processing time.</p><p>If the short test preserves the details you need and total processing time fits your schedule, restore the remaining file with the same settings. If you need to adjust output size or chunk length, change one at a time in separate runs and compare the results.</p><ul><li><a href="https://github.com/ModelTC/LightX2V">SwiftVR support and separate optimization conditions in LightX2V</a></li><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local models that create video from text or images</a></li></ul></section><section><h2>Original model and execution documentation</h2><p>Check the following original references for installation and model-use terms.</p><ul><li><a href="https://download.pytorch.org/whl/cu128/torch/">Official PyTorch CUDA 12.8 torch 2.10.0 wheels</a></li><li><a href="https://download.pytorch.org/whl/cu128/torchvision/">Official PyTorch CUDA 12.8 torchvision 0.25.0 wheels</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>SwiftVR takes a low-quality video file, restores its frames, and saves an enlarged video file. It is a video-restoration model based on Wan2.2-TI2V-5B.</dd></div><div><dt>How much memory does it need?</dt><dd>A separate model-card table reports an average of 0.766 seconds, 31.32 FPS, and 38.01 GB peak memory on a single H100 at 2560×1440, with causal streaming and 24 frames. The same card reports about 14 FPS for 4K on an H100. The GPU and resolution differ from the RTX 5090 1080p result, so do not read these as RTX 5090 results.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>A separate model-card table reports an average of 0.766 seconds, 31.32 FPS, and 38.01 GB peak memory on a single H100 at 2560×1440, with causal streaming and 24 frames. The same card reports about 14 FPS for 4K on an H100. The GPU and resolution differ from the RTX 5090 1080p result, so do not read these as RTX 5090 results.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Turn your Mac into a live AI instrument with Magenta RealTime 2</title><link>https://localai.co.kr/en/guides/magenta-realtime-2-local-music-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/magenta-realtime-2-local-music-guide</guid><description>Install Magenta RealTime 2 on an Apple Silicon Mac and make live accompaniment from MIDI input. This guide covers DAW routing, 48 kHz setup, device support by model size, and the difference between control latency and full-song generation.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Turn your Mac into a live AI instrument with Magenta RealTime 2</h1><p>Magenta RealTime 2 is an AI instrument that responds to your playing</p><p id="guide-page-summary">Magenta RealTime 2 (MRT2) is a real-time music model that continues music in response to MIDI, text, or audio input. Unlike a model that generates a finished song file in one go, you change inputs and listen through the Jam Mac app or an AU plug-in in a DAW.</p><p>If you want accompaniment while practicing chord changes on a keyboard, MRT2 continues the music in response to the notes or MIDI signals you play. That makes input-to-audio delay, continuous playback, and how the sound changes with your input or style more relevant than finished-song generation time.</p><p>MRT2 was released on June 4, 2026, with a Python library, an MLX-based C++ inference engine, Jam and Collider apps, and an AU plug-in. This guide tests a single note in the macOS bundle without building code, then connects the plug-in to a DAW MIDI track.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>MRT2 is a real-time music model that responds to MIDI, text, and audio conditions. Its workflow differs from finished-song generation.</li><li>The 230M Small model is listed for real-time use across Apple Silicon MacBooks. For Base, check the official device-by-device support table.</li><li>In a DAW, connect the AU plug-in to a MIDI track and set the project and audio device sample rate to 48 kHz.</li></ol></section><section><h2>Check which devices support real-time Small and Base</h2><p>Small is a 230M-parameter model listed for real-time use across Apple Silicon MacBooks, including MacBook Air. Base is a 2.4B model; the repository’s specific real-time support table lists M2 Max, M3 Max, M4 Pro, and M5 Max. For devices not listed, do not infer support from chip generation or Pro/Max tier; check the current table. The launch page also uses the broader wording “M3 Pro or above, or M2 Max or above,” so this guide follows the device-specific repository table.</p><p>A device missing from the real-time table does not mean every execution path is unavailable. The README says both models can run offline through the Python library on Apple Silicon or an NVIDIA GPU. However, offline file generation differs from streaming in time with keyboard playing, so device support for real-time use matters when live response is your goal.</p><p>The app bundle’s Base weights are about 2.5 GB and Small weights about 450 MB; they download on first launch. Download size differs from runtime memory use. First see whether Small’s sound and input response meet your needs. If you already have a device listed for real-time Base, then compare the models to decide whether new hardware is necessary.</p><table><caption>Check the official device table for real-time streaming support instead of judging by model size alone.</caption><thead><tr><th scope="col">Model</th><th scope="col">Size</th><th scope="col">Official real-time support</th><th scope="col">Offline inference</th></tr></thead><tbody><tr><th scope="row">MRT2 Small</th><td>230M</td><td>Apple Silicon MacBooks, including Air</td><td>Python path on Apple Silicon or NVIDIA</td></tr><tr><th scope="row">MRT2 Base</th><td>2.4B</td><td>Listed in the official table: M2 Max, M3 Max, M4 Pro, M5 Max</td><td>Python path on Apple Silicon or NVIDIA</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/ace-step-vst3-daw-guide">Create and revise ACE-Step music in a DAW: a local VST3 guide</a></li><li><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Compare local music models for songs, instrumentals and sound effects</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-magenta-realtime-2-local-music-guide-02.webp" alt="A desk where music is being worked on with a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Small is listed for real-time use on Apple Silicon MacBooks.</figcaption></figure><section><h2>Check the sound by holding one note in Jam</h2><p>Download and unpack the official Magenta RealTime 2 macOS bundle, then open Jam. On first launch it downloads the model weights, so wait for the roughly 450 MB Small or 2.5 GB Base file to finish. Hold one key or a short chord and check that sound continues; then keep the input fixed and change one style prompt to compare the response.</p><p>Jam provides style presets and MIDI controls. If there is no sound, check in order whether model download completed, whether the Mac’s current output device is selected and unmuted, and whether MIDI input is recognized. Starting with built-in input or a single simple MIDI note helps isolate whether the issue is the model, audio output, or input device. Screen layout and preset names can vary by version, so use the controls shown in the app.</p><div><p><strong>Check basic operation in the app bundle</strong></p><pre><code data-guide-code-block="1-0">1. 공식 Magenta RealTime 2 macOS 번들을 내려받고 압축을 풉니다.
2. Jam 앱을 열어 필요한 모델 다운로드를 마칩니다.
3. 한 음 또는 짧은 코드를 누르고 소리가 계속 이어지는지 확인합니다.
4. 입력은 그대로 두고 스타일 프롬프트 하나만 바꿔 반응을 비교합니다.</code></pre><p><small>Keep the input fixed and check model download, audio output, and style response in sequence.</small></p></div><ul><li><a href="https://magenta.withgoogle.com/mrt2">Download official Magenta RealTime 2 apps and plugins</a></li><li><a href="https://github.com/magenta/magenta-realtime">Model, installation, Python, and MLX documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-magenta-realtime-2-local-music-guide-01.webp" alt="A music desk with a keyboard and studio gear" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>MRT2 continues music in response to MIDI playing.</figcaption></figure><section><h2>In a DAW, connect the AU to a MIDI track</h2><p>Once Jam produces sound, place the bundled MRT2 AU plug-in in the Applications folder and launch it to register. Refresh the AU list in your DAW, create an empty MIDI track, and load MRT2 into its instrument slot. Connect a MIDI keyboard if available; otherwise enter one note in the piano roll and test the same response.</p><p>Set the sample rate to 48 kHz. For the AU plug-in, check the DAW project’s audio settings; for the standalone app, check the device settings in macOS Audio MIDI Setup. If there is no sound or playback behaves oddly in a 44.1 kHz project, duplicate the project, change only the sample rate, and replay the same MIDI segment.</p><p>MRT2 also documents creating playable MIDI instruments from text and using short audio input as a reference, in addition to MIDI Steering. Find where each feature is exposed in your plug-in version and test one input at a time. Changing keyboard input first and style text afterward lets you hear the difference between the two controls.</p><ul><li><a href="https://magenta.withgoogle.com/mrt2">Official AU plugin setup and audio settings</a></li><li><a href="https://github.com/magenta/magenta-realtime">AUv3 examples and model requirements for DAW use</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-magenta-realtime-2-local-music-guide-03.webp" alt="A music setup with a keyboard controller and DAW" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Connect the AU plug-in to a MIDI track and set the project sample rate.</figcaption></figure><section><h2>About 200 ms is the control delay before input affects sound</h2><p>The official comparison lists MRT2 control latency at about 200 ms and audio frame size at 40 ms. The first version is compared at about 3 seconds of control latency and 2-second frames. These figures describe when user input affects music being generated; they are not the total output delay of a system including a DAW buffer, audio interface, and speakers.</p><p>For your own playing, replay a short MIDI segment several times and listen for whether the model keeps following changed input. Record the official figure separately from your own observation, along with the DAW’s 48 kHz sample rate and plug-in and model versions. Audio-device buffers and other system work can affect the playing feel, so do not treat about 200 ms as a fixed delay in every setup.</p><p>MRT2 continues outputting audio while receiving input. Rather than timing how quickly it creates a short file, check whether the accompaniment follows keyboard changes, playback stays continuous over several minutes, and style changes are reflected.</p></section><section><h2>Choose a setup to start with on your Mac</h2><p>If you already have an Apple Silicon Mac, first test Small’s sound and input response in Jam. If it meets your needs, keep using that setup. For real-time Base, check whether your Mac is one of the models listed in the official table—M2 Max, M3 Max, M4 Pro, or M5 Max. In a DAW, start by checking AU plug-in registration and the 48 kHz setting.</p><ul><li><a href="https://magenta.withgoogle.com/magenta-realtime-2">Official launch description and control-latency comparison</a></li><li><a href="https://github.com/magenta/magenta-realtime">Device support table and offline inference path</a></li><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Local music models for making finished songs from lyrics and prompts</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Magenta RealTime 2 (MRT2) is a real-time music model that continues music in response to MIDI, text, or audio input. Unlike a model that generates a finished song file in one go, you change inputs and listen through the Jam Mac app or an AU plug-in in a DAW.</dd></div><div><dt>How much memory does it need?</dt><dd>The app bundle’s Base weights are about 2.5 GB and Small weights about 450 MB; they download on first launch. Download size differs from runtime memory use. First see whether Small’s sound and input response meet your needs. If you already have a device listed for real-time Base, then compare the models to decide whether new hardware is necessary.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Create and revise ACE-Step music in a DAW: a local VST3 guide</title><link>https://localai.co.kr/en/guides/ace-step-vst3-daw-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ace-step-vst3-daw-guide</guid><description>Build the independent C++ implementation acestep.vst3, connect its local server to a DAW, and create an 8-step Turbo track. Covers model files, host routing, setup errors, and the scope of its VAE timing results.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Create and revise ACE-Step music in a DAW: a local VST3 guide</h1><p>Connect the ACE-Step VST3 server to a DAW and edit generated WAVs</p><p id="guide-page-summary">acestep.vst3 is a separate implementation combining a local ACE-Step server, web UI, standalone tool, and JUCE VST3 plugin. First verify that the server generates and saves a WAV; then connect the VST3 to a DAW and edit that file on a track.</p><p>Follow a workflow for generating a background music idea for a 20-second video and editing it in a DAW. First confirm that the server saves a short WAV, then connect the plugin to the DAW. Check server logs for generation problems or the DAW's scanning settings if the plugin is missing. The repository is an independent C++17/GGML implementation using ACE-Step 1.5 weights.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check Metal for Apple Silicon, CUDA for Linux NVIDIA, and the Vulkan build option for Linux Vulkan; verify Windows release files and support separately.</li><li>Specify LM, embedding, DiT, and VAE files to create a WAV on the local server before testing the VST3 connection.</li><li>The M2 Pro’s 18.3 seconds is the VAE decode time for 86.8 seconds of audio, not full-song generation time.</li></ol></section><section><h2>Prepare the runtime path and model files for your OS</h2><p>The CMake path on macOS Apple Silicon enables Metal automatically. The Linux NVIDIA example uses -DGGML_CUDA=ON; Linux Vulkan uses -DGGML_VULKAN=ON. The example’s nproc may not exist in the default macOS shell, so set a small parallel-job count or use a command that reports CPU count. Check Windows release binaries and support rather than pasting macOS/Linux commands unchanged.</p><p>The repository lists Qwen3-Embedding 0.6B Q8_0 at about 748 MB, ACE-Step 5Hz LM 4B Q8_0 at about 4.2 GB, Turbo DiT Q8_0 at about 2.4 GB, and BF16 VAE at about 322 MB. Their roughly 7.7 GB total is download size; runtime memory and temporary space may be additional. Verify paths and filenames, and start with a short output.</p><ul><li><a href="https://localai.co.kr/en/guides/ace-step-local-music-guide">Run ACE-Step 1.5 locally: setup through your first song</a></li><li><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Compare local music models for songs, instrumentals and sound effects</a></li><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Local AI music generation: make songs and background music on your computer</a></li><li><a href="https://localai.co.kr/en/guides/magenta-realtime-2-local-music-guide">Turn your Mac into a live AI instrument with Magenta RealTime 2</a></li></ul></section><figure><img src="https://localai.co.kr/guides/oct26-ace-step-vst3-daw-guide-01.webp" alt="A Mac workstation with a DAW timeline and plugin panel, MIDI keyboard, and audio interface" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After verifying server output, check the DAW track and plugin connection.</figcaption></figure><section><h2>Verify WAV generation on the server first</h2><p>Clone the repository, initialize submodules, and build for your OS. models.sh downloads the Q8_0 Turbo files. Specify paths for all four models when starting the server and open http://localhost:8080. Once the page loads, enter a short description and lyrics, generate, and verify that a WAV file is saved.</p><p>If generation fails, compare model names in the error log with actual filenames in models/. Check case, Turbo/SFT, and Q8_0/BF16 differences. If the process exits, determine whether GPU or system memory ran out. Close heavy apps, retry with a short output, and use server logs to identify whether initialization, /lm, or /synth stalled.</p><div><p><strong>Build the repository and start the server</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/ace-step/acestep.vst3.git
cd acestep.vst3
git submodule update --init
mkdir build &amp;&amp; cd build
cmake ..
cmake --build . --config Release -j4
cd ..
pip install hf
./models.sh
./build/ace-server \
  --lm models/acestep-5Hz-lm-4B-Q8_0.gguf \
  --embedding models/Qwen3-Embedding-0.6B-Q8_0.gguf \
  --dit models/acestep-v15-turbo-Q8_0.gguf \
  --vae models/vae-BF16.gguf \
  --port 8080</code></pre><p><small>Follow the README order and check OS-specific options before running.</small></p></div></section><section><h2>Connect the VST3 to your DAW after the server works</h2><p>After the server generates a WAV, build separately with CMake in plugins/acestep_vst3 and copy the .vst3 bundle to a user plugin location scanned by your DAW. Fully quit and reopen the DAW, then rescan plugins. Check permissions if copying to a system-wide folder, and do not arbitrarily allow unverified binaries.</p><p>Once the plugin appears, load it on a new audio track and check the server connection and health status. The VST3 UI communicates with the ace-server API, so keep the server running. Enter a description, lyrics, and duration, then drag the generated WAV onto the track and listen to its beginning and end. Change only the prompt or duration on the next run to identify the effect of that change.</p></section><figure><img src="https://localai.co.kr/guides/oct26-ace-step-vst3-daw-guide-02.webp" alt="A DAW arrangement with a short generated clip and waveform card beside an existing track" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Place the generated WAV on a track and listen to its beginning and end.</figcaption></figure><section><h2>Separate VAE decode timing from full-song generation time</h2><p>The repository’s M2 Pro 16 GB table reports 18.3 seconds for the VAE decoding stage of 86.8 seconds of 48 kHz stereo audio. Conditions are chunk 1024, overlap 16, and im2col_1d. It excludes language-model processing, DiT 8-step generation, prompt enhancement, server startup, and DAW editing, so it is not the total time to generate a 20-second background track.</p><p>On your hardware, record initial model loading separately from later generation; also note lyrics, duration, seed, backend, and actual output length. Do not directly compare different runtime paths such as CPU, Metal, CUDA, and Vulkan. First verify that a complete WAV is saved and can be edited.</p></section><figure><img src="https://localai.co.kr/guides/oct26-ace-step-vst3-daw-guide-03.webp" alt="A studio comparing generated music takes on a Mac beside headphones, speakers, and an SSD" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Changing one condition at a time makes revisions easier to understand.</figcaption></figure><section><h2>Check the latest release and each component’s license</h2><p>README and release files can change, so recheck available binaries and limitations at installation time. Test DAW-specific behavior such as VST3 WebView input, preferably in a duplicated project. Do not choose a DAW or GPU from one VAE timing figure; first verify server output, plugin discovery, and saved files, then compare backends for your repetition rate and project duration.</p><p>The README notes that code and model terms may differ. Check licenses for the plugin and dependencies, ACE-Step 1.5 weights, generated audio, and input materials separately.</p><ul><li><a href="https://github.com/ace-step/acestep.vst3">ACE-Step VST3 official repository and README</a></li><li><a href="https://github.com/ace-step/acestep.vst3/releases/tag/v0.1.0">ACE-Step VST3 v0.1.0 release and prebuilt platforms</a></li><li><a href="https://github.com/ace-step/ACE-Step-1.5">ACE-Step 1.5 original project</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>acestep.vst3 is a separate implementation combining a local ACE-Step server, web UI, standalone tool, and JUCE VST3 plugin. First verify that the server generates and saves a WAV; then connect the VST3 to a DAW and edit that file on a track.</dd></div><div><dt>How much memory does it need?</dt><dd>The repository lists Qwen3-Embedding 0.6B Q8_0 at about 748 MB, ACE-Step 5Hz LM 4B Q8_0 at about 4.2 GB, Turbo DiT Q8_0 at about 2.4 GB, and BF16 VAE at about 322 MB. Their roughly 7.7 GB total is download size; runtime memory and temporary space may be additional. Verify paths and filenames, and start with a short output.</dd></div><div><dt>When is it better not to choose this?</dt><dd>After the server generates a WAV, build separately with CMake in plugins/acestep_vst3 and copy the .vst3 bundle to a user plugin location scanned by your DAW. Fully quit and reopen the DAW, then rescan plugins. Check permissions if copying to a system-wide folder, and do not arbitrarily allow unverified binaries.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The README notes that code and model terms may differ. Check licenses for the plugin and dependencies, ACE-Step 1.5 weights, generated audio, and input materials separately.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local RAG Setup Guide: Build an AI That Answers from Your Documents</title><link>https://localai.co.kr/en/guides/local-rag-complete-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-rag-complete-guide</guid><description>Follow an example that finds and answers a question from a vacation-policy PDF, then learn the local RAG workflow from text extraction and retrieval to answer checks and hardware selection.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Local RAG Setup Guide: Build an AI That Answers from Your Documents</h1><p>Build a local RAG system that answers questions from your PDF</p><p id="guide-page-summary">Local RAG extracts text from PDFs, splits it into searchable chunks, finds evidence related to a question, and sends that evidence to a local LLM to generate an answer. Using a vacation-policy PDF, this guide follows the flow from extraction checks to retrieval and answer validation, then memory and latency checks.</p><p>For example, suppose you want to answer, “Can an employee in their sixth month take summer leave?” using an internal vacation policy. RAG does not send the entire document to the model each time; it finds relevant passages for the answer.</p><p>First verify that text is extracted correctly from the PDF, then run a small example that shows retrieved evidence alongside the answer. Seeing where results go wrong helps identify whether extraction, retrieval, or answer generation needs work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Compare extracted text with the source PDF before creating an index.</li><li>Check how retrieved chunks are affected by token count and overlap.</li><li>Record retrieved chunks, answers, and time to first token together.</li><li>Assess hardware separately for solo use and concurrent questions.</li></ol></section><section><h2>Connect documents, retrieval, and answers with one question</h2><p>Ask the vacation-policy PDF, “Can an employee in their sixth month use summer leave?” The retriever passes the relevant passage to the answer model. In the first test, display the retrieved chunks alongside the answer. If the answer says “Yes” without evidence for the six-month condition, you can see whether retrieval selected the wrong passage or the model guessed the condition.</p><p>As in LlamaIndex's local-model example, you can use Ollama as the answer model and a Hugging Face embedding model for search. Save the vacation-policy PDF as `data/vacation-policy.pdf`. Start the Ollama app or run `ollama serve` in another terminal, then download the model. If the server is stopped, the CLI returns a connection error; start Ollama and try again.</p><p>This setup uses a local Ollama server and a downloaded embedding model; it does not call hosted answer or embedding APIs. Installation and model downloads still require a network connection. The default llama3.1 model file is about 4.9GB, and inference also needs memory for the weights and context. For sensitive documents, prepare the model and packages first, then check whether processing works with the network disconnected.</p><p>Use the first command block to prepare the virtual environment and packages, then put the PDF in the data folder. Save the Python code below as rag_example.py and run python rag_example.py in the same virtual environment. Extracted text preview, Answer, and Retrieved evidence appear in order. Compare the extracted text and retrieved evidence against the source PDF before adding more documents.</p><p>Save the Python example as `rag_example.py` and run it. It prints the extracted PDF preview and waits for input. Compare it with the source; type `yes` if readable. Otherwise press Enter to exit, fix extraction and rerun. After approval it creates the index and saves it in `storage`.</p><div><p><strong>Prepare packages and the local model</strong></p><pre><code data-guide-code-block="0-0">python -m venv .venv
source .venv/bin/activate
pip install llama-index llama-index-llms-ollama llama-index-embeddings-huggingface llama-index-readers-file
ollama pull llama3.1
mkdir -p data</code></pre><p><small>Use the LlamaIndex local tutorial's connection method; BGE-M3 embeddings download on first run.</small></p></div><div><p><strong>Check PDF retrieval and answer evidence in rag_example.py</strong></p><pre><code data-guide-code-block="0-1">from llama_index.core import Settings, SimpleDirectoryReader, VectorStoreIndex
from llama_index.core.node_parser import SentenceSplitter
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama

Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-m3")
Settings.text_splitter = SentenceSplitter(chunk_size=700, chunk_overlap=100)

documents = SimpleDirectoryReader(
    input_dir="data", required_exts=[".pdf"]
).load_data()
if not documents:
    raise RuntimeError("No PDF was loaded from data/")

# Check this text against the source PDF before indexing it.
print("Extracted text preview:\n", documents[0].text[:1000])
if input("Compare the preview with the PDF. Type yes to index it: " ).strip().lower() != "yes":
    raise SystemExit("Stopped before indexing. Check PDF extraction and rerun.")
index = VectorStoreIndex.from_documents(documents)
index.storage_context.persist(persist_dir="storage")

question = "입사 6개월 차 직원도 여름휴가를 쓸 수 있나요?"
response = index.as_query_engine(similarity_top_k=3).query(question)
print("\nAnswer:\n", response)
print("\nRetrieved evidence:")
for source in response.source_nodes:
    print("-", source.node.get_content()[:600])</code></pre><p><small>Print the extracted-text preview, answer, and supporting chunks, then compare them with the actual eligibility conditions.</small></p></div><ul><li><a href="https://developers.llamaindex.ai/python/framework/getting_started/starter_example_local/">Official LlamaIndex local-model and RAG starter guide</a></li><li><a href="https://developers.llamaindex.ai/python/framework/module_guides/loading/simpledirectoryreader/">LlamaIndex PDF reader documentation</a></li><li><a href="https://huggingface.co/BAAI/bge-m3">BGE-M3 multilingual embedding model card</a></li><li><a href="https://ollama.com/library/llama3.1">Ollama Llama 3.1 model page</a></li><li><a href="https://localai.co.kr/en/guides/open-webui-local-chat-guide">Start local model and document chat with Open WebUI</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-living-weights-rag-guide">Compare document memory in Living Weights and RAG</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-pdf-ai-before-buying-memory">Local AI for PDFs: check the document before buying more memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="Documents are split into searchable chunks and loaded onto a local computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separating ingestion, retrieval, and answering makes it easier to locate failures.</figcaption></figure><section><h2>First check that text is extracted correctly from the PDF</h2><p>For a vacation policy with tables or two-column layouts, compare one extracted page with the source. If a condition such as “six months or more” is missing or table order is scrambled, retrieval will operate on incorrect text. Confirm that headings and table entries remain in reading order before indexing.</p><p>The example sets a chunk-size limit of 700 tokens and an overlap of 100 tokens. SentenceSplitter considers sentence boundaries, so the actual chunk sizes can vary. Overlap helps keep conditions and conclusions together across boundaries. Start by inspecting the retrieved evidence with these settings, then adjust if necessary sentences are split or duplication is excessive.</p><p>Try extracting text from PDF tables and images with the LightOnOCR-3 steps. For audio or video as well as documents in JSON, review Youtu-Parsing-Omni's inputs and outputs.</p><ul><li><a href="https://qdrant.tech/documentation/installation/">Qdrant installation guidance on storage and memory</a></li><li><a href="https://localai.co.kr/en/guides/lightonocr-3-local-pdf-table-guide">Extract scanned PDF tables and passages with LightOnOCR-3</a></li><li><a href="https://localai.co.kr/en/guides/youtu-parsing-omni-local-guide">Document, audio and video JSON from Youtu-Parsing-Omni</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="Search chunks split from a long document with overlapping context." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Overlap reduces the chance that conditions and evidence are split at paragraph boundaries.</figcaption></figure><section><h2>RAG connects extraction, retrieval, and generation</h2><p>A PDF parser extracts text, tables, and page locations; an embedder turns passages into searchable vectors. Retrieval finds relevant evidence, and a separate generation model answers from it. Preserve input and output IDs at each stage so failures can be located.</p><p>Without page numbers and chunk provenance, it is difficult to trace an answer back to its source. Compare parser output with the PDF before indexing.</p></section><section><h2>Send retrieved evidence to the answer model and separate wait times</h2><p>A vacation question needs the top retrieved chunks mentioning summer leave and length of service, not the entire policy. Check that the results contain the relevant condition, then send the needed evidence to the model. If retrieval itself is slow, inspect indexing, filters, or storage; if the first token is delayed, examine prefill as the model reads long evidence; if streaming is slow after it starts, check generation speed.</p><p>For solo use, check whether the answer model fits in memory and measure time to the first token with the actual evidence length you send. With concurrent users, each request adds KV-cache use and queueing. In that case, fitting the model in memory is not enough; also check how the server handles simultaneous requests. Enter document count and concurrent users into the calculator to estimate chunk count, storage, and bottlenecks.</p><ul><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Embedding and reranking example for Korean PDF search</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A desktop running local RAG retrieval sources and an answer model." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For a personal document collection, model memory and long-input processing speed may matter more than index storage.</figcaption></figure><section><h2>Validate extraction, retrieval, and answers with twenty questions</h2><p>Create twenty questions covering direct answers in the policy, exceptions found in tables, and questions the document cannot answer. For each, note the expected answer and required passage or “no evidence.” Store the question, extracted text, top retrieved chunks, final answer, time to first token, and total response time together so you can trace which stage produced an error.</p><p>If results are poor, check source extraction first, then change chunk size or overlap, embeddings, and the answer model one at a time. Rerun the same twenty questions and compare before increasing document or user counts. For a personal collection, measure answer-model memory and evidence-reading time before scaling index storage.</p><ul><li><a href="https://localai.co.kr/en/guides/local-graphrag-document-relations-guide">GraphRAG example for relationships across documents</a></li><li><a href="https://localai.co.kr/en/guides/local-korean-llm-lora-qlora-guide">Korean LoRA example for training a response format</a></li></ul></section><section><h2>Start with a BGE-M3 dense baseline</h2><p>Do not enable all BGE-M3 dense, sparse, and multi-vector features at once. Measure a fixed query set with dense retrieval first, then add sparse fusion or reranking one at a time to relate complexity to quality.</p><p>Record retrieval misses, Recall@k, MRR@k, and the actual index directory size. Keep unanswerable queries out of the Recall denominator and report them separately.</p></section><section><h2>Read scanned text, tables and layout with LightOnOCR-3</h2><p>LightOnOCR-3 is an OCR model that extracts text and tables from document-page images. The 0.8B, 1B and 4B models released on October 8 can be downloaded under Apache 2.0. Use it to turn scanned PDFs into searchable text before adding them to local RAG.</p><p>Leave the text prompt empty for transcription. Send `grounding` when layout is also needed: the model returns region types and positions, and represents extracted chart values as HTML tables. This can help a search interface show the corresponding region on the original page.</p><table><caption>LightOnOCR-3 choices and published serving results</caption><thead><tr><th scope="col">Model</th><th scope="col">Choose it for</th><th scope="col">H100 result</th></tr></thead><tbody><tr><th scope="row">0.8B</th><td>Start with a small model</td><td>Up to 4.78 pages/s</td></tr><tr><th scope="row">1B</th><td>Keep the previous 1B architecture</td><td>2.7 s for one page</td></tr><tr><th scope="row">4B</th><td>Complex-document extraction quality</td><td>Up to 3.36 pages/s</td></tr></tbody></table><p>Developer measurement · one H100 · vLLM 0.30.0 · 512 olmOCR-Bench pages · model-specific rendering settings. The 0.8B and 4B throughput figures are peak rates with a 1,540-pixel long side; the 1B's 2.7 seconds is single-page latency. [Method](https://huggingface.co/blog/lightonai/lightonocr-3)</p><p>Choose 0.8B to start small, or 1B when replacing LightOnOCR-2 with the same architecture. Compare 4B if tables, handwriting or complex-page extraction quality matter most. Check a few real pages for missing lines, table-column alignment and reading order before indexing them.</p><p>For Korean documents, run the same pages through your current OCR and the new model, then compare names and table values. Keep the originals and record extraction results and processing time for the documents you will actually use. The model card below includes local execution code and the `grounding` output format.</p><ul><li><a href="https://huggingface.co/lightonai/LightOnOCR-3-0.8B">LightOnOCR-3-0.8B execution example</a></li><li><a href="https://github.com/lightonai/LightOnOCR">Output conversion and benchmark tools</a></li></ul></section><section><h2>Verify grounded answers separately</h2><p>Whether the gold passage was retrieved and whether the answer follows it are different questions. Review evidence sentences, answer correctness, unsupported claims, and response latency for each query.</p><p>Classify errors on a small 20-question set before expanding document types. Do not infer end-to-end RAG quality from retrieval scores alone; log extraction, retrieval, and answer outcomes separately.</p></section><aside><h2>Calculate my document/RAG conditions</h2><p>Enter document and user counts to estimate chunks, storage, and bottlenecks.</p><a href="https://localai.co.kr/en/decision-lab?view=rag">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local RAG extracts text from PDFs, splits it into searchable chunks, finds evidence related to a question, and sends that evidence to a local LLM to generate an answer. Using a vacation-policy PDF, this guide follows the flow from extraction checks to retrieval and answer validation, then memory and latency checks.</dd></div><div><dt>How much memory does it need?</dt><dd>This setup uses a local Ollama server and a downloaded embedding model; it does not call hosted answer or embedding APIs. Installation and model downloads still require a network connection. The default llama3.1 model file is about 4.9GB, and inference also needs memory for the weights and context. For sensitive documents, prepare the model and packages first, then check whether processing works with the network disconnected.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>When local RAG answer is wrong: Search, chunk, model diagnosis order</title><link>https://localai.co.kr/en/guides/local-rag-failure-diagnosis</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-rag-failure-diagnosis</guid><description>Using a vacation policy PDF as an example, this guide shows how to locate an error in source extraction, retrieved evidence, answer generation, or index updates.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">When local RAG answer is wrong: Search, chunk, model diagnosis order</h1><p>Trace a wrong RAG answer from the evidence sent to the model</p><p id="guide-page-summary">Local RAG searches documents for content relevant to a question, passes it to a language model, and generates an answer from that evidence. If the answer is wrong, inspect the extracted PDF text, retrieved chunks, actual prompt, and response in sequence to locate the failing stage.</p><p>To make the steps concrete, follow a case where someone asks a vacation-policy PDF, “Can I take summer leave after six months of employment?” and gets a wrong answer. Before changing the model, open the response view or logs and check which passages were retrieved and whether they were included in the actual request.</p><p>When the retrieved passages include both the eligibility period and whether leave is allowed, the answer model can use both conditions as evidence. If either is missing, inspect extraction or chunking and retrieval settings first. If both reached the request but the answer differs, check the prompt and generation stage.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Open the retrieved passages that were actually sent to the model in the response view or logs.</li><li>Compare the source page with extracted text for tables and two-column PDFs.</li><li>Change chunking and retrieval settings one at a time, then check again with the same question.</li><li>Record retrieval wait, time to the first token, and answer-generation time separately.</li></ol></section><section><h2>Find the missing condition in the retrieved passages</h2><p>Open the retrieved passages attached to the question in the response view or run logs. Check whether “six months or more after joining” and eligibility to request leave appear together in one passage. When both conditions reach the model, it can connect the service period to whether leave may be requested.</p><p>If either condition is missing from the retrieved passages, open the extracted PDF text and check whether the sentence is present there. If both conditions are in the extracted text but are split or omitted in retrieval, inspect chunk boundaries, embeddings, metadata filters, or the reranker. When both reach the actual prompt, examine how the answer uses that evidence.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/embeddinggemma-2-local-search-guide">How can you search your local photos and recordings with EmbeddingGemma 2?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-first-run-slow-checklist">Local LLM slow on its first run? Five checks before blaming the hardware</a></li><li><a href="https://localai.co.kr/en/guides/local-pdf-ai-before-buying-memory">Local AI for PDFs: check the document before buying more memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-diagnosis.webp" alt="A view comparing the source, retrieved evidence, and answer in sequence" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check whether the required condition was retrieved before revising the answer.</figcaption></figure><section><h2>Align the source PDF with its extracted text</h2><p>For a table or two-column PDF, choose a page where the issue appears and compare the source with the extracted result side by side. Check whether the “six months or more after joining” sentence is missing or whether eligibility and exceptions from a table were mixed together. If text is missing or out of order, adjust the PDF extraction tool or OCR settings and extract that page again.</p><p>Before rebuilding the full index, verify the corrected page text. If retrieval still returns the old result after the condition is extracted correctly, check whether the system is still reading an older extraction or index. The source and extracted text must match in meaning before changes to chunk size or retrieval settings can be interpreted.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-pdf-extraction.webp" alt="A side-by-side comparison of a sentence in the source PDF and extracted text" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For tables and two-column documents, compare extracted conditions and order with the source.</figcaption></figure><section><h2>Change retrieval settings one at a time and compare the results</h2><p>If chunks are too short, “six months after joining” and leave eligibility may land in separate passages. If chunks are too long, several leave policies can be mixed together and irrelevant sentences may also be sent. Mark the sentence that should support the answer and record whether it appears among the top results for the same question.</p><p>If evidence is missing, adjust only the chunk size first and rerun the same question. If the passage is still missing, change overlap, embeddings, document filters, and the reranker one at a time. Changing several settings together makes it hard to identify what changed retrieval. Record retrieval rank and final answer accuracy separately.</p></section><section><h2>Validate a new index after editing a document, then switch over</h2><p>If the old answer persists after replacing a PDF, check its hash, index creation time and version, and cache key instead of looking only at the filename. The content may have changed while the name stayed the same. Confirm that the new document appears in extracted text, then test whether a representative question retrieves the updated clause from the new index.</p><p>Deleting the active index first can leave retrieval unavailable while the replacement is being checked. Build the new index in a separate location, verify it with representative questions, and then point the service to it. Keep the previous index for rollback and record the document hash, index version, question, retrieved passages, and answer.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-index-versions.webp" alt="A new index version being reviewed while the previous index is retained" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Validate the new index before switching so you can return to the previous version if a problem appears.</figcaption></figure><section><h2>When the evidence is right, check the prompt and waiting time</h2><p>If a retrieved passage says summer leave is available after six months but the answer says one year is required, check whether that passage reached the actual prompt unchanged. If it did, instruct the model to answer only from the supplied evidence and say when a condition is absent, then rerun the same input. If it still misreads the condition, compare models or quantizations.</p><p>Break a slow request into three intervals. Record the time from sending the question until retrieval results appear, from retrieval completion until the first token, and from the first token until the answer finishes. A long first interval points to the index or filters; a long middle interval points to evidence length and prefill; a long final interval points to token generation speed. If slowdown occurs only with concurrent users, compare queueing and memory use for one versus four users.</p></section><aside><h2>Find the cause by symptom</h2><p>See which step to check first for the current symptom.</p><a href="https://localai.co.kr/en/decision-lab?view=rag">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local RAG searches documents for content relevant to a question, passes it to a language model, and generates an answer from that evidence. If the answer is wrong, inspect the extracted PDF text, retrieved chunks, actual prompt, and response in sequence to locate the failing stage.</dd></div><div><dt>How much memory does it need?</dt><dd>Break a slow request into three intervals. Record the time from sending the question until retrieval results appear, from retrieval completion until the first token, and from the first token until the answer finishes. A long first interval points to the index or filters; a long middle interval points to evidence length and prefill; a long final interval points to token generation speed. If slowdown occurs only with concurrent users, compare queueing and memory use for one versus four users.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local LLM·RAG quality evaluation: Verifying changed settings with DeepEval</title><link>https://localai.co.kr/en/guides/local-llm-evaluation-deepeval</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-evaluation-deepeval</guid><description>Compare settings before and after a change using the same vacation-policy questions and retrieved evidence. This guide explains how to connect DeepEval to a local Ollama judge and check retrieval misses, unsupported answers, and latency changes.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Local LLM·RAG quality evaluation: Verifying changed settings with DeepEval</h1><p>Verify answer quality separately, even when inference gets faster</p><p id="guide-page-summary">DeepEval evaluates local LLM and RAG configurations by comparing questions, expected answers, retrieved evidence, and actual responses. Keep a fixed question set, assess retrieval context and answer grounding separately, then compare speed and memory only among configurations that meet your quality bar.</p><p>We will use a RAG system searching an internal vacation-policy PDF as an example. Include questions answerable from one sentence, questions requiring an exception in a table, and questions with no answer in the document. That mix helps show whether a configuration change suits real work.</p><p>Use DeepEval scores for automated comparison, while checking correctness against the retrieved evidence and answer text. Recording time to first token, generation time, and peak memory also helps you choose a smaller model or another quantization while preserving quality.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Record the expected answer and passage to retrieve for each question.</li><li>Contextual Recall evaluates retrieved context; Faithfulness evaluates grounding in that context.</li><li>Set Ollama as the evaluation model and run deepeval test run.</li><li>Save retrieval, time to first token, generation time, and peak memory alongside scores.</li></ol></section><section><h2>Choose 20 questions for a baseline run</h2><p>Prepare 20 questions for a RAG system over the vacation-policy PDF, mixing straightforward questions, questions that require a table exception, and questions the document cannot answer. For each, record the expected answer and the passage that must be retrieved, or mark “no evidence in the document.” Use real work questions, but first check whether personal or confidential source text may be sent to the evaluation service.</p><p>Save the baseline results first, then change only one of the model, quantization, or chunk settings. Use the same questions and expected answers for both configurations so changes in the test set are not mistaken for model improvements. If the document or expected answers change, version the question set as well.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/embeddinggemma-2-local-search-guide">How can you search your local photos and recordings with EmbeddingGemma 2?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-question-set.webp" alt="An evaluation list organizing different question types and their evidence" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Mix straightforward and difficult questions in proportions that reflect real use.</figcaption></figure><section><h2>Use separate metrics for retrieval and answers</h2><p>Include the input question, expected answer, actual answer, and retrieved evidence in the evaluation data. ContextualRecallMetric checks whether the retrieved context contains what the expected answer needs. FaithfulnessMetric checks whether the response stays grounded in that context. AnswerRelevancyMetric checks whether it directly addresses the question. Since the metrics measure different things, review per-question scores and their explanations together.</p><p>Do not decide whether a policy was violated from RAG scores alone. The evaluation model is an aid that automatically compares sentence meaning. A person should inspect the retrieved passage and answer for required conditions such as “six months or more.” DeepEval's LLM-based metrics call a separate evaluation model, so running the application locally does not automatically make evaluation local too.</p><ul><li><a href="https://deepeval.com/docs/metrics-introduction">DeepEval metrics documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-human-review.webp" alt="A person reviewing an automated score alongside the source and retrieved passage" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When scores are close or a judgment is unclear, have a person inspect the source and rationale.</figcaption></figure><section><h2>Connect an Ollama evaluator and reproduce the run</h2><p>DeepEval can use Ollama as its evaluation model. Start the Ollama server and install DeepEval in a new Python virtual environment. `ollama pull deepseek-r1:1.5b` downloads the example evaluator, and `deepeval set-ollama --model=deepseek-r1:1.5b` sets it as the default. To use a model you already have, use the name shown by `ollama list`.</p><p>Replace the sample answer and retrieved text in the test code with results from your actual RAG run. Install the packages and download the model in a networked preparation environment. Check your operating requirements because signing in or syncing evaluation records to an external service may send data off the device.</p><p>Save the following code as test_rag.py and run deepeval test run test_rag.py to verify that the Ollama evaluator connects. In an air-gapped environment where you cannot verify the evaluator connection, do not treat the run as confirmed. The code's 0.5 thresholds are examples; set organizational thresholds based on required questions and human review.</p><div><p><strong>Install and configure the local judge model</strong></p><pre><code data-guide-code-block="2-0">python -m venv .venv
source .venv/bin/activate
pip install -U deepeval
ollama pull deepseek-r1:1.5b
deepeval set-ollama --model=deepseek-r1:1.5b</code></pre><p><small>Download an Ollama model locally and set it as DeepEval's default evaluator. Replace the name if using a model already installed.</small></p></div><div><p><strong>test_rag.py</strong></p><pre><code data-guide-code-block="2-1">from deepeval import assert_test
from deepeval.metrics import (
    AnswerRelevancyMetric,
    ContextualRecallMetric,
    FaithfulnessMetric,
)
from deepeval.test_case import LLMTestCase


def test_vacation_policy_answer():
    test_case = LLMTestCase(
        input="입사 6개월 차 직원도 여름휴가를 쓸 수 있나요?",
        actual_output="입사 후 6개월 이상이면 여름휴가를 신청할 수 있습니다.",
        expected_output="입사 후 6개월 이상이면 여름휴가를 신청할 수 있습니다.",
        retrieval_context=[
            "여름휴가는 입사 후 6개월 이상 근무한 직원이 신청할 수 있습니다."
        ],
    )
    assert_test(
        test_case,
        [
            ContextualRecallMetric(threshold=0.5),
            FaithfulnessMetric(threshold=0.5),
            AnswerRelevancyMetric(threshold=0.5),
        ],
    )</code></pre><p><small>This illustrates the evaluation wiring. For a real run, fill actual_output and retrieval_context with RAG execution records. 0.5 is only a starting value, not a business pass threshold.</small></p></div><ul><li><a href="https://deepeval.com/integrations/models/ollama">DeepEval Ollama setup documentation</a></li><li><a href="https://deepeval.com/docs/getting-started">DeepEval quick-start documentation</a></li><li><a href="https://ollama.com/library/deepseek-r1">Ollama DeepSeek-R1 model</a></li></ul></section><section><h2>Set pass criteria, then compare speed and memory</h2><p>For every run, record the answer model and quantization, chunk size, embedding model, evaluator name and version, time to first token, generation speed, retrieval time, and peak memory. Scores alone do not show real waiting time, while speed alone does not reveal whether important conditions were missed.</p><p>Do not choose from a single average score. First set an acceptable failure count or pass rate for mandatory questions, such as leave eligibility, then compare speed and memory among configurations that meet it. A configuration that presents “no evidence” as a supported answer may be excluded even with a high average score. If score differences are small or a judgment looks wrong, inspect the source, retrieved passage, and answer before testing the next setting.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="An evaluation view comparing response speed and evidence grounding side by side" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Among configurations that pass the quality bar, choose one that is faster and uses less memory.</figcaption></figure><aside><h2>Compare execution conditions of the same model</h2><p>Candidates that pass the quality criteria are compared in terms of speed and memory.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepEval evaluates local LLM and RAG configurations by comparing questions, expected answers, retrieved evidence, and actual responses. Keep a fixed question set, assess retrieval context and answer grounding separately, then compare speed and memory only among configurations that meet your quality bar.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not decide whether a policy was violated from RAG scores alone. The evaluation model is an aid that automatically compares sentence meaning. A person should inspect the retrieved passage and answer for required conditions such as “six months or more.” DeepEval's LLM-based metrics call a separate evaluation model, so running the application locally does not automatically make evaluation local too.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Building Fully Offline Local AI: Air-Gap Installation and Update Procedures</title><link>https://localai.co.kr/en/guides/offline-airgapped-local-ai-deployment</link><guid isPermaLink="true">https://localai.co.kr/en/guides/offline-airgapped-local-ai-deployment</guid><description>We explain the air-gap local AI procedure that moves models, runtimes, and packages to an environment without the Internet, and operates verification, updates, and rollback.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Building Fully Offline Local AI: Air-Gap Installation and Update Procedures</h1><p>Prepare an air-gapped local AI system from file transfer through recovery testing</p><p id="guide-page-summary">Air-gapped local AI deployment installs a model and its runtime environment on a computer without internet access so it can answer questions locally. Prepare the runtime, drivers, packages, settings, and licenses along with the model, verify file hashes, and test installation, inference, updates, and recovery without external communication.</p><p>When sending the first question on an internal computer, the model file may be visible while loading fails because the tokenizer or runtime package is still being fetched from the internet. Check in sequence that every installation file was gathered in the online preparation area and transferred, and that the model actually answers inside the internal environment.</p><p>Include dependencies, configuration, licenses, and provenance in the transfer manifest along with the model. Compare file hashes and complete an offline installation in an environment without a cache before testing an update. Install the new version alongside the current environment so you have a place to return to if something goes wrong.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Separate the online preparation area from the internal runtime area and list the required files.</li><li>Record versions and hashes, then transfer files on approved media.</li><li>Test the full path from installation to an answer without external communication or preloaded caches.</li><li>Validate a new version in a separate location and keep the old version for recovery.</li></ol></section><section><h2>List the files required alongside the model</h2><p>In the networked preparation area, make an inventory of the checkpoint, tokenizer, runtime, GPU driver, and packages and configuration files for the target operating system. If you use RAG, include the embedding model and indexing tools.</p><p>If Transformers will load a Hugging Face model directly, download the required revision in advance. Prepare compatible versions of the Python packages and accelerator runtime that the offline machine will use.</p><p>Each app needs different files and an import path. For LM Studio, prepare the app, its runtime, and the model file. You can add an external GGUF to its library with `lms import`.</p><p>With Ollama, point `FROM` in a `Modelfile` to a local GGUF file or supported Safetensors folder, then run `ollama create` to create the model.</p><ul><li><a href="https://lmstudio.ai/docs/app/offline">LM Studio offline features and features that require a network</a></li><li><a href="https://lmstudio.ai/docs/app/advanced/import-model">Import an external GGUF into LM Studio</a></li><li><a href="https://github.com/ollama/ollama/blob/main/docs/import.mdx">Import a model into Ollama</a></li><li><a href="https://huggingface.co/docs/transformers/installation#offline-mode">Transformers offline mode</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-model-backup-restore-guide">How to Back Up and Restore a Local LLM You Already Use</a></li><li><a href="https://localai.co.kr/en/guides/transformers-gguf-apple-silicon-guide">Run GGUF directly in Transformers: how it differs from llama.cpp and MLX</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-transfer.webp" alt="Approved media carrying a file manifest and verification records entering a segregated work area" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Transfer the verified file bundle and its records together from the online preparation area.</figcaption></figure><section><h2>Register the model using the selected runtime’s import path</h2><p>In the online preparation area, download the required Hugging Face Hub repository revision with `snapshot_download`. Set `HF_HUB_OFFLINE=1` or use `from_pretrained(..., local_files_only=True)` so internal code does not contact the Hub, and point the model path to the transferred local directory. Confirm that both model and tokenizer files are present, then disconnect the network and load them.</p><p>When transferring a GGUF into LM Studio, use `lms import &lt;file-path&gt; --copy` to preserve the source file. The default action moves the file, so the copy option keeps the transfer original. In Ollama, set `FROM` in the `Modelfile` to the local file or directory, create the model, and then run it. Every shard of a split GGUF must be present.</p><div><p><strong>Copy a GGUF into the LM Studio library</strong></p><pre><code data-guide-code-block="1-0">lms import /path/to/model.gguf --copy</code></pre><p><small>Replace this with the path to the transferred file. `--copy` registers a copy without moving the original.</small></p></div><div><p><strong>Ollama Modelfile example</strong></p><pre><code data-guide-code-block="1-1">FROM /path/to/model.gguf</code></pre><p><small>In the Modelfile’s `FROM` line, enter the actual path to the model file copied to the internal computer.</small></p></div><div><p><strong>Create and run the model in Ollama</strong></p><pre><code data-guide-code-block="1-2">ollama create local-model -f Modelfile
ollama run local-model</code></pre><p><small>Confirm that the model is created and answers a question. For a split model, transfer every shard.</small></p></div><div><p><strong>Load with Hugging Face Hub access disabled</strong></p><pre><code data-guide-code-block="1-3">HF_HUB_OFFLINE=1 python run_local.py</code></pre><p><small>The script must use the transferred local model path. If a required file is missing from the Hub cache or local directory, loading will fail.</small></p></div><ul><li><a href="https://lmstudio.ai/docs/cli/local-models/import">LM Studio lms import options</a></li><li><a href="https://github.com/ollama/ollama/blob/main/docs/modelfile.mdx">Ollama Modelfile format</a></li><li><a href="https://huggingface.co/docs/huggingface_hub/en/guides/download">Download a Hugging Face Hub repository</a></li><li><a href="https://huggingface.co/docs/huggingface_hub/package_reference/environment_variables#hf_hub_offline">The HF_HUB_OFFLINE environment variable</a></li></ul></section><section><h2>Verify file integrity before and after transfer</h2><p>Record each file’s version and hash before copying it to approved media. Inspect the media according to organizational procedures, then recalculate hashes after transfer and compare them with the manifest. If a value differs, do not install that file; check the source copy and transfer process.</p><p>Keep the file and hash lists, sources and licenses, installation order, and verification date together with the transfer bundle. This record lets you reinstall the same version and trace the source of update files.</p></section><section><h2>Install from scratch in an environment without cached files</h2><p>Prepare a clean test environment with no package cache pre-populated online. With the network disconnected, check dependency installation, model loading, the first request, and a valid answer in order. Review logs for failed download attempts and confirm that the server starts again using the documented procedure after a reboot.</p><p>If you use document RAG, test that embedding and index creation also complete offline. Disable external telemetry and automatic update checks, then use your organization’s inspection methods to check firewall or network records for outbound connection attempts. Separately check whether internal file paths appear in error logs or screens.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-install.webp" alt="A computer installing local AI from storage while disconnected from the network" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check installation and the first answer with no existing cache and no external connection.</figcaption></figure><section><h2>Install and validate updates in a new location</h2><p>Install a new model or runtime in a separate versioned location instead of overwriting the active path. While offline, check representative evaluation questions, answer quality, processing time, and startup after reboot; then point the service to the new location. Because model changes can alter answers, compare both versions with the same inputs.</p><p>If the new version fails, point the service back to the previous version. Preserve settings, prompts, index versions, and driver combinations along with the checkpoint so you can reproduce the same runtime state. Run the rollback procedure in a disconnected test environment and record whether it succeeds and which steps it takes.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="A local AI system keeping new and previous versions in separate locations" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Validate the new version alongside the old one and restore the previous state if a problem occurs.</figcaption></figure><section><h2>Narrow down first-run errors in order: files, format, then connectivity</h2><p>If the app cannot find the model, check the model folder it reads and the import status. In LM Studio, see whether the model appears in the library; in Ollama, check whether its name appears in `ollama list`.</p><p>With Transformers, check that `from_pretrained` receives the local path. If you see a Hub connection error, check the offline setting; if tokenizer or configuration files are missing, compare the files with the preparation inventory.</p><p>If the file is found but fails to load, check its format and whether every shard is present. Then check the runtime version, GPU driver, and memory requirements.</p><p>If it ran only on the networked computer, cached dependencies may have supplied files that were missing from the bundle. Reinstall in a test environment without a cache, and record the error and actual file versions and hashes.</p><p>If the service will not start after an update or cannot answer a representative question, point it back to the previous version and restore the saved settings, index, and driver combination. The rollback procedure is usable only after this recovery completes and the system answers the same representative question.</p></section><section><h2>Set permissions and operational records according to internal policy</h2><p>Keep an internal record of who transferred each file and who checked its hash and installation result. Logs may contain original requests or confidential documents.</p><p>Set log-retention periods and access permissions. If needed, configure logs to keep only request IDs and error stages.</p><p>USB media, administrator accounts, and local execution permissions remain security concerns even on a segregated network. Manage media approval and inspection, least privilege, and administrator activity records under your organization’s security procedures. Regular backup restoration and rollback tests preserve a recovery path that can be used during an incident.</p></section><aside><h2>Review local AI security</h2><p>Review tool permissions and data boundaries together.</p><a href="https://localai.co.kr/en/guides/local-ai-agent-security-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Air-gapped local AI deployment installs a model and its runtime environment on a computer without internet access so it can answer questions locally. Prepare the runtime, drivers, packages, settings, and licenses along with the model, verify file hashes, and test installation, inference, updates, and recovery without external communication.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Keep the file and hash lists, sources and licenses, installation order, and verification date together with the transfer bundle. This record lets you reinstall the same version and trace the source of update files.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Creating a local voice assistant: ASR·LLM·MCP·TTS connection guide</title><link>https://localai.co.kr/en/guides/local-voice-assistant-mcp-pipeline</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-voice-assistant-mcp-pipeline</guid><description>We explain the pipeline that converts speech into text, makes a decision by a local LLM, runs the MCP tool, and then responds back to text, as well as delay and security standards.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Creating a local voice assistant: ASR·LLM·MCP·TTS connection guide</h1><p>Design the connection flow and verification steps for ASR, an LLM, MCP, and TTS using a calendar lookup.</p><p id="guide-page-summary">A local voice assistant uses ASR to turn microphone audio into text, an LLM to organize the request and tool results, and TTS to speak the answer. Using a calendar-reading request, this guide explains how to design tool inputs and outputs, permissions, and response timing. Begin with a read-only tool and require user confirmation for actions that change state.</p><p>When you say, “Read my schedule for this afternoon,” ASR transcribes the request, the LLM selects a calendar lookup tool and turns the returned events into a reply, and TTS speaks it. Let the user first connect calendar reading and inspect the result, then choose which capability to add next.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>ASR converts speech to text, the LLM handles the request and tool result, and TTS turns the reply text into speech.</li><li>An MCP server lets the LLM call tools such as a calendar. Begin with read-only permissions.</li><li>Partial transcripts may change, so wait for a final transcript before changing or deleting files or sending something externally.</li><li>Recording the time until the final audio and the duration of each stage helps locate delays and errors.</li></ol></section><section><h2>A calendar request becomes text, a tool call, and a spoken reply</h2><p>After ASR turns “Read my schedule for this afternoon” into text, the LLM identifies the request and the tool to use. The calendar MCP tool receives the lookup range; the server returns events, which the LLM turns into a reply for TTS. Keeping the microphone input, transcript, tool request, tool result, and audio output in order makes it easier to locate the first incorrect result.</p><p>The MCP TypeScript SDK passes a tool name and JSON arguments to `client.callTool` and returns the result in a `content` list. The example below uses that call pattern to illustrate a read-only calendar tool design. `calendar.read_events`, `startTime`, and `endTime` are illustrative names and fields, not an actual calendar API. Check the connected server's `tools/list` for its real tool name and input schema, then substitute those values.</p><table><caption>Inputs and results at each stage of a calendar lookup</caption><thead><tr><th scope="col">Stage</th><th scope="col">Input</th><th scope="col">Output</th></tr></thead><tbody><tr><th scope="row">ASR</th><td>Spoken request captured by the microphone</td><td>Recognized text</td></tr><tr><th scope="row">LLM decision</th><td>Recognized text</td><td>Calendar tool to call and its arguments</td></tr><tr><th scope="row">MCP calendar lookup</th><td>Tool name and JSON arguments</td><td>Events returned by the tool</td></tr><tr><th scope="row">LLM and TTS</th><td>Event results</td><td>Reply text and audio playback</td></tr></tbody></table><div><p><strong>Design example: read-only calendar call</strong></p><pre><code data-guide-code-block="0-0">const result = await client.callTool({
  name: 'calendar.read_events', // illustrative name; use the server's advertised tool name
  arguments: {
    startTime: '2026-10-08T13:00:00+09:00',
    endTime: '2026-10-08T18:00:00+09:00'
  }
});
console.log(result.content);</code></pre><p><small>Check that the tool name and range fields match the server's schema before sending the read request.</small></p></div><div><p><strong>Design example: events returned for the same time range</strong></p><pre><code data-guide-code-block="0-1">{
  "content": [
    {
      "type": "text",
      "text": "2026-10-08 14:00–14:30 | event_A"
    }
  ]
}</code></pre><p><small>This response shape returns only events within the requested 13:00–18:00 range. event_A is an illustrative placeholder.</small></p></div><ul><li><a href="https://github.com/modelcontextprotocol/typescript-sdk/blob/main/docs/servers/tools.md">Tool input and output example from the MCP TypeScript SDK</a></li><li><a href="https://localai.co.kr/en/guides/fluidaudio-mac-local-voice-toolkit-guide">What is FluidAudio? Local transcription, speakers, and speech on Mac</a></li><li><a href="https://localai.co.kr/en/guides/localai-411-local-meeting-guide">Label Speakers and Inspect Ambient Sounds in Meeting Recordings with LocalAI 4.11</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/voice-pipeline.webp" alt="Audio path from the microphone through ASR, a local LLM, an MCP tool, and TTS to the speaker" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Checking each stage's input and returned result helps locate a failed connection.</figcaption></figure><section><h2>Check the calendar tool's input schema and read result</h2><p>A read-only calendar tool takes a date and time range as input and returns only events within that range. If the tool is implemented for lookup only, it does not need permission to change calendar entries.</p><p>First inspect the tool list and the calendar tool's input schema. Then check whether the ASR transcript matches the request, whether the LLM produced valid arguments, and whether the MCP response contains events. Finally confirm the reply summarizes those events and plays through TTS. Add the next connection only after each result is verified.</p><p>A normal result has a transcript with the intended date and time range, a tool response limited to events within that range, and a spoken reply that accurately conveys them. Compare the requested range with each returned event's start and end times, and check that the spoken reply neither changes nor omits event details.</p><ul><li><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/security">MCP Security and Trust Model</a></li><li><a href="https://github.com/modelcontextprotocol/typescript-sdk/blob/main/docs/servers/tools.md">Official SDK tool call and response structure</a></li></ul></section><section><h2>Record total latency and each stage separately</h2><p>End-to-end response time runs from when the user finishes speaking until the spoken answer ends. For conversational responsiveness, track a separate measure: from the end of the user's speech to the first sound of the reply. Also record ASR transcript completion, LLM response start and finish, MCP tool response, and TTS first sound and playback completion to distinguish a late first answer from a long overall reply.</p><p>Streaming ASR can send partial transcripts before the speaker finishes, and TTS can start when the LLM's first sentence is ready. This can reduce time to first audio, but playback can stall if speech generation cannot keep up. Check time to first sound and uninterrupted playback separately.</p><p>Partial transcripts can change as more speech arrives. You may speak a response early, but schedule edits or file writes that change state should wait until the final transcript is confirmed. Letting the user review and cancel the action prevents a recognition error from immediately becoming a change.</p></section><section><h2>Give each tool only the permissions it needs, then inspect its results</h2><p>A local MCP server runs with the permissions of its account. Implement the calendar lookup handler to read only approved calendars and date ranges, and do not register tools for editing or deletion. The SDK's `readOnlyHint` is a signal for the host; constrain actual access in the server implementation, the account, and the OS sandbox. Check the provider and source code before installation, and configure authentication and allowed clients for network connections.</p><p>Connect search and read tools first. When adding writing or sending, show the action and destination to the user, obtain confirmation, and keep a readable record of the result. For access over an external network, enable authentication and limit connections to the clients that need it.</p><p>Start troubleshooting at the last stage that returned a normal result. If the transcript is empty or differs from the request, inspect microphone input and ASR output. If the text is right but no events appear, check the MCP connection and the tool's returned result. If events appear in the reply text but there is no sound, check TTS input and audio playback. Identifying the missing stage lets you retest only that connection.</p><ul><li><a href="https://github.com/modelcontextprotocol/modelcontextprotocol/security">MCP Security and Trust Model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/mcp-permissions.webp" alt="Tool modules with different read and write permissions connected to local AI" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start with read access, and add tools that change state only after adding a confirmation step.</figcaption></figure><section><h2>Add other tools one at a time after the first path is stable</h2><p>Once calendar reading works repeatedly and you can record stage latency, add document search or home-automation tools one by one. Each tool has its own permissions and input format, so connecting several servers at once makes failures harder to trace. Test read requests whenever you add a tool, and require separate user confirmation for writing, deletion, or sending.</p><p>If a conversation feels slow, first find the longest stage in the timing record. For ASR delay, compare the recognition model and audio length; for tool delay, inspect the MCP server and connection; for late first audio, separate LLM response start from TTS generation. Improve the stage that accounts for the delay and keep confirmation before actions so the assistant responds sooner without carrying out an action the user did not choose.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/voice-workspace.webp" alt="A study with a microphone, local AI computer, and speaker" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Confirm calendar reading before adding other tools one at a time.</figcaption></figure><aside><h2>Explore local speech-processing speed</h2><p>Compare how long ASR and TTS take on different hardware.</p><a href="https://localai.co.kr/en/speech">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local voice assistant uses ASR to turn microphone audio into text, an LLM to organize the request and tool results, and TTS to speak the answer. Using a calendar-reading request, this guide explains how to design tool inputs and outputs, permissions, and response timing. Begin with a read-only tool and require user confirmation for actions that change state.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Holo4 for Local Computer Use: Model, Runner, and Permission Boundaries</title><link>https://localai.co.kr/en/guides/holo4-local-computer-use-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/holo4-local-computer-use-guide</guid><description>Distinguish Holo4-27B and Holo4-35B-A3B architectures, licenses, and runtime paths, then test a computer-use agent safely.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-29</p><h1 id="guide-page-title">Holo4 for Local Computer Use: Model, Runner, and Permission Boundaries</h1><p>Holo4 reads a screen and chooses the next computer action</p><p id="guide-page-summary">Holo4 takes a screen image and task instruction, then suggests the next click location or text to enter. A separate runner such as hai-agents captures the screen and turns tool requests into real input, so review both the model and the runner's permissions.</p><p>For example, to find a refund period on a test website, the runner sends the screen to Holo4. The model selects the next action and returns a tool request, which the runner converts into a click or text input. Prepare the model, connected tools, and operating system permissions so this chain works.</p><p>Start with a read-only task on a test page that contains no sensitive login details. Check where screen captures and tool requests are logged, and leave actions that change external state—such as sending email, paying, changing account settings, or editing important files—out of the initial test.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Holo4 reads screens and proposes actions; a separate runner handles capture and input.</li><li>The 27B is a Qwen3.8-based dense model; the 35B-A3B is a Qwen3.6-based MoE model.</li><li>Verify the connection with read-only tasks, then require human approval for writing, deletion, or payment.</li></ol></section><section><h2>Checkpoint architectures and terms</h2><p>The Holo4-27B model card describes a Qwen3.8-based 27B dense architecture and a 262,144-token context configuration. Execution needs memory for the weights, vision processing of screenshots, and the KV cache holding conversation and action history. Start with short tasks and expand context according to actual memory use.</p><p>Holo4-35B-A3B is a Qwen3.6-based MoE checkpoint. Total weight size differs from the amount activated per token, so it does not mean you only need files equivalent to the active 3B. The 27B's CC BY-NC 4.0 and the 35B-A3B's Apache-2.0 are also different terms. Check the repository ID to avoid confusing it with similarly named Holotron4.</p><table><caption>Choose the model and runner separately</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Official description</th><th scope="col">Also verify</th></tr></thead><tbody><tr><th scope="row">Holo4-27B</th><td>Qwen3.8-based dense, 27B</td><td>CC BY-NC 4.0 and vision memory</td></tr><tr><th scope="row">Holo4-35B-A3B</th><td>Qwen3.6-based MoE, 35B-A3B</td><td>Apache-2.0 and total weight size</td></tr><tr><th scope="row">hai-agents</th><td>Harness that routes model responses to tools</td><td>Code, tools, and runtime permissions</td></tr></tbody></table><ul><li><a href="https://huggingface.co/Hcompany/Holo4-27B">Official Holo4-27B model card</a></li><li><a href="https://huggingface.co/Hcompany/Holo4-35B-A3B">Official Holo4-35B-A3B model card</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/xing4-local-coding-guide">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/holo4-scene-1.webp" alt="A computer setup connecting the model screen to a desktop runner" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model proposes actions; the runner handles the screen and input.</figcaption></figure><section><h2>Match the model format with a compatible runner</h2><p>The runtime path must support both the format offered by the model card and the runner backend. When choosing Transformers, vLLM, or another implementation, confirm it also handles screenshot inputs and tool calls. Successful text generation alone does not establish screen-understanding support.</p><p>GGUF, FP8, and NVFP4 differ in representation and compatible hardware. A published file does not mean every GPU or Mac runner supports it. Check compatible devices and kernels for NVFP4, and model and vision support in the current llama.cpp-family version for GGUF. Use load logs and device usage rather than file size to assess runtime memory.</p><p>Check the hai-agents quickstart for installation steps and supported models, then start in a separate test profile. If the documentation and installation code disagree or checkpoint support is unspecified, do not invent commands; check the official release.</p><ul><li><a href="https://github.com/HCompany/haia">hai-agents installation and tool setup</a></li><li><a href="https://huggingface.co/Hcompany/Holo4-27B">27B model card and formats</a></li><li><a href="https://huggingface.co/Hcompany/Holo4-35B-A3B">35B-A3B model card and formats</a></li></ul></section><figure><img src="https://localai.co.kr/guides/holo4-scene-3.webp" alt="A comparison of dense and MoE model weight and memory structures" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Per-token active parameters differ from total weight size.</figcaption></figure><section><h2>Begin with reading and expand permissions gradually</h2><p>Use a separate browser profile or test account and remove sensitive login sessions. Restrict access to one test-page domain and run a read-only task such as finding and reporting the refund period. Verify that the runner captures the screen, the model finds the relevant text, and tool calls and screens appear in logs.</p><p>Next, try a reversible local task, such as listing files in a temporary folder. Check that the runner does not open paths outside its allowed area, and compare files before and after. Then test constrained writing: for example, allow drafting but block sending, or allow temporary saves but require approval before overwriting.</p><p>Require a person to check the target and content before deletion, payment, sending messages, or changing accounts. Test whether stopping works during a tool call, and configure the runner to halt if an unexpected popup or account information appears.</p><div><p><strong>First safe-test task card</strong></p><pre><code data-guide-code-block="2-0">목표: 테스트 웹페이지에서 환불 가능 기간을 찾아 한 문장으로 보고한다.
허용: 지정 도메인 읽기, 화면 캡처, 텍스트 응답.
금지: 로그인 정보 입력, 링크 열기, 양식 제출, 파일 다운로드, 메시지 발송.
중단: 예상하지 못한 팝업이나 계정 정보가 보이면 멈추고 사람에게 알린다.
검토: 모델 요청, 도구 호출, 캡처 화면, 최종 답을 함께 확인한다.</code></pre><p><small>Set the allowed scope and stop conditions before changing external state.</small></p></div></section><figure><img src="https://localai.co.kr/guides/holo4-scene-2.webp" alt="A person approving or stopping a computer task before it runs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A person reviews actions that change external state before they run.</figcaption></figure><section><h2>Track both success and the impact of failures</h2><p>Repeat the same task five times and record success, misclicks, time to the first action, completion time, and human interventions. Check whether the system keeps acting when layouts or popups change. Speed alone is not useful if it repeatedly hits risky controls.</p><p>Keep passwords, personal information, and session tokens out of model plans and runner logs. Limit screenshot retention and access, and check whether the backend or telemetry sends data externally. Define recovery steps—such as restoring a temporary folder or resetting the browser—in advance to limit damage.</p></section><section><h2>Check whether it saves time on a recurring task</h2><p>Check separately whether the model loads, vision input and tool calls work in the backend, and permission limits take effect. Trace load errors to the checkpoint, format, or memory; screen misreads to the capture path; and tool-call failures to harness compatibility.</p><p>Compare the time across five runs, including human review and correction. If most work consists of summaries or coding questions, a general language model may be simpler. Holo4 is worth considering when it measurably reduces recurring screen-and-tool tasks within safe boundaries.</p><ul><li><a href="https://localai.co.kr/en/guides/local-ai-agent-security-guide">Review local-agent permissions and sandboxing</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Understand model and context memory</a></li><li><a href="https://huggingface.co/blog/Hcompany/holo4">Official H Company introduction to Holo4</a></li><li><a href="https://github.com/HCompany/haia">Official hai-agents runner repository</a></li></ul></section><aside><h2>Review Holo4 runtime conditions by device</h2><p>Review memory requirements and verify runner compatibility separately.</p><a href="https://localai.co.kr/en/speed?model=holo4-27b">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Holo4 takes a screen image and task instruction, then suggests the next click location or text to enter. A separate runner such as hai-agents captures the screen and turns tool requests into real input, so review both the model and the runner's permissions.</dd></div><div><dt>How much memory does it need?</dt><dd>The Holo4-27B model card describes a Qwen3.8-based 27B dense architecture and a 262,144-token context configuration. Execution needs memory for the weights, vision processing of screenshots, and the KV cache holding conversation and action history. Start with short tasks and expand context according to actual memory use.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The runtime path must support both the format offered by the model card and the runner backend. When choosing Transformers, vLLM, or another implementation, confirm it also handles screenshot inputs and tool calls. Successful text generation alone does not establish screen-understanding support.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LFM2.5-VL-3B DSpark: more than 2× faster visual responses on Mac</title><link>https://localai.co.kr/en/guides/lfm2-5-vl-dspark-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lfm2-5-vl-dspark-local-guide</guid><description>We summarize the OCR·image understanding purpose of LFM2.5-VL-3B, M5 Max·M3 Ultra official DSpark speed, and MLX-VLM·llama.cpp·SGLang execution conditions.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">LFM2.5-VL-3B DSpark: more than 2× faster visual responses on Mac</h1><p>LFM2.5-VL-3B reads images and answers; DSpark speeds up answer generation</p><p id="guide-page-summary">LFM2.5-VL-3B is a 3B-class vision-language model that takes a photo and a question and answers about receipt text or a scene. DSpark has a small draft model propose the next token and the main model verify it, shortening generation. Image reading and first-input processing stay the same, so this guide covers both the official per-device figures and how to compare your own run.</p><p>DSpark works during the answer-writing stage. Separating image reading or scene understanding from answer generation makes it easier to see which tasks benefit most.</p><p>This guide first identifies the hardware and runtimes behind the published results, then covers setup paths for Mac and NVIDIA servers and a way to compare timing on your own tasks.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>On M5 Max with MLX-VLM, decode was 2.30–3.13× faster and total completion 1.56–2.62× faster.</li><li>On M3 Ultra with llama.cpp, decode improved by 1.57–2.14× and total time by 1.30–1.77×.</li><li>The roughly 280-million-parameter DSpark draft model also uses extra memory. For short answers, check total time on your actual tasks.</li></ol></section><section><h2>Separate image processing from answer generation</h2><p>An image question involves image encoding, prefill that reads the input context, and decode that generates answer tokens. LFM2.5-VL-3B supports a 32K context. DSpark reduces repeated decode computation by having a small draft model propose tokens and the target model verify them. Image encoding and input reading are still required.</p><p>Extracting short values such as a date and amount from a receipt produces a short answer, so image processing makes up a larger share of the work. Longer answers, such as a photo description or translation, can reflect decode savings more strongly in total response time. A token-generation speedup shown on a speed page and completion time for an actual task are different measures.</p><ul><li><a href="https://huggingface.co/blog/liquidai/lfm2-5-vl-dspark">Liquid AI's official LFM2.5-VL DSpark explanation and measurements</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Mac Studio M3 Ultra 512GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li></ul></section><figure><img src="https://localai.co.kr/guides/lfm25-scene-1.webp" alt="A photo and receipt are fed to a local vision model at a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>LFM2.5-VL-3B reads receipt text or describes a photo.</figcaption></figure><figure><img src="https://localai.co.kr/guides/lfm25-scene-2.webp" alt="A larger target model verifies token candidates proposed by a small draft model." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The main model verifies draft candidates to reduce repeated decoding.</figcaption></figure><section><h2>Read official speedups together with hardware and runtime</h2><p>Across six vision tasks published by Liquid AI, decode on M5 Max with MLX-VLM improved by 2.30–3.13× and total completion time by 1.56–2.62×. On M3 Ultra with llama.cpp, decode improved by 1.57–2.14× and total time by 1.30–1.77×. Results vary with hardware, runtime, and output length even for the same model name.</p><p>The model card lists 228 tok/s for the base LFM2.5-VL-3B on Apple M5 Max and 116 tok/s on AMD Ryzen AI Max+ 395. These are baseline figures for the documented paths, not guaranteed speeds for every quantization or image. Do not transfer the M5 Max or M3 Ultra DSpark multipliers to other hardware.</p><table><caption>Read the published comparison separately by hardware and runtime.</caption><thead><tr><th scope="col">Hardware and runtime</th><th scope="col">Decode improvement</th><th scope="col">Total completion improvement</th></tr></thead><tbody><tr><th scope="row">M5 Max · MLX-VLM</th><td>2.30–3.13×</td><td>1.56–2.62×</td></tr><tr><th scope="row">M3 Ultra · llama.cpp</th><td>1.57–2.14×</td><td>1.30–1.77×</td></tr></tbody></table><ul><li><a href="https://huggingface.co/blog/liquidai/lfm2-5-vl-dspark">Conditions and full results of Liquid AI's published tests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/lfm25-scene-3.webp" alt="A test bench compares the same image question on Apple, AMD, and NVIDIA hardware." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Speedups vary by hardware, runtime, and task, so compare matching conditions.</figcaption></figure><section><h2>Choose a Mac runtime for your workflow</h2><p>For a simple start on M5 Max, specify the main model and DSpark draft model together in the MLX-VLM server. When connecting an app, check the OpenAI-compatible endpoint and save a baseline run with one fixed image and the same output length. After enabling acceleration, confirm the answer is preserved and draft acceptance is recorded.</p><p>For llama.cpp on M3 Ultra, prepare the target model's F16 GGUF, vision projector, and DSpark draft file together. The official example starts with context 8192 and maximum draft length 8. Save the launch command and checkpoint hashes so you can repeat the comparison with the same files and settings.</p><div><p><strong>Start an MLX-VLM server with DSpark</strong></p><pre><code data-guide-code-block="2-0">mlx_vlm.server --model LiquidAI/LFM2.5-VL-3B --draft-model LiquidAI/LFM2.5-VL-3B-DSpark --host 127.0.0.1 --port 8080</code></pre><p><small>Specify the target model and official DSpark draft model together.</small></p></div></section><section><h2>Run the SGLang example on an NVIDIA server</h2><p>The SGLang example specifies the DSpark algorithm, draft model, FlashInfer draft attention, and block size 9. Start with one request and a short context to verify server startup and image input, then compare the same request without acceleration. Record draft proposals and acceptances together with total completion time.</p><p>The draft does not replace the final answer. The main model verifies the candidates, which can preserve the target model's output under greedy-generation settings. Runtime versions or sampling settings change the conditions, so use the same request and generation options in a comparison.</p><div><p><strong>Configure the DSpark draft path in SGLang</strong></p><pre><code data-guide-code-block="3-0">python -m sglang.launch_server \
  --model-path LiquidAI/LFM2.5-VL-3B \
  --speculative-algorithm DSPARK \
  --speculative-draft-model-path LiquidAI/LFM2.5-VL-3B-DSpark \
  --speculative-draft-attention-backend flashinfer \
  --speculative-dspark-block-size 9 \
  --disable-radix-cache --mem-fraction-static 0.8 --host 127.0.0.1 --port 30000</code></pre><p><small>Use the options in the official example and check the requirements for your installed SGLang version and model card before running.</small></p></div></section><section><h2>Compare total time on your image tasks</h2><p>Measure the baseline and DSpark runs three times each with the same image and question. Record image submission to first token, first to final token, and total completion time separately. If image preprocessing takes a long time, reducing image size may have a larger effect on total wait.</p><p>If draft acceptance is low or answers are short, the cost of loading the extra draft model may exceed its benefit. Choose three real OCR, captioning, or translation tasks and compare medians. The reduction in total wait on your own work is a better basis for keeping acceleration than a published multiplier.</p></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare LFM2.5-VL-3B speed</h2><p>Compare baseline decode and DSpark response ranges across hardware.</p><a href="https://localai.co.kr/en/speed?model=lfm2-5-vl-3b&amp;accel=draft_model">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LFM2.5-VL-3B is a 3B-class vision-language model that takes a photo and a question and answers about receipt text or a scene. DSpark has a small draft model propose the next token and the main model verify it, shortening generation. Image reading and first-input processing stay the same, so this guide covers both the official per-device figures and how to compare your own run.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run GGUF directly in Transformers: how it differs from llama.cpp and MLX</title><link>https://localai.co.kr/en/guides/transformers-gguf-apple-silicon-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/transformers-gguf-apple-silicon-guide</guid><description>We explain with practical examples how Transformers on Apple Silicon execute GGUF in compression, memory conditions, and selection criteria for llama.cpp·MLX.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run GGUF directly in Transformers: how it differs from llama.cpp and MLX</h1><p>Load a GGUF directly and generate answers in a Python evaluation workflow</p><p id="guide-page-summary">On Apple Silicon, Transformers can compute with GGUF weights in their quantized form through compatible kernels and answer questions through a Python API or local server. This is useful when you want dataset evaluation, intermediate model outputs, and custom processing in the same Python project.</p><p>If you already use a GGUF model and want to run a list of questions, save the answers, or manage preprocessing and evaluation alongside Python code, you can load the GGUF file directly in Transformers. This path uses compatible kernels on Apple Silicon MPS to compute with quantized weights.</p><p>First prepare compatible packages and files, then load the model with a small input and check the result. Next decide whether you need an API server or whether llama.cpp or MLX would be simpler for your work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>With a compatible kernel, GGUF weights can remain quantized in Metal memory.</li><li>If the kernel is incompatible, dequantization can greatly increase memory use, so inspect the load logs.</li><li>Transformers suits Python experiments, llama.cpp suits local inference, and MLX suits Apple-specific conversion and development workflows.</li><li>After loading the model, check a short generation request and API response before increasing the context length.</li></ol></section><section><h2>Decide which code workflow to connect to the GGUF</h2><p>llama.cpp is a common way to run GGUF. Its many app and server options make it easy to select a model file and start chatting. Transformers offers a familiar API when you want to work with intermediate model outputs, custom logit processing, or evaluation code in the same Python project.</p><p>With the Transformers path, you can work with GGUF through its API without expanding all weights into large floating-point values.</p><p>For a simple chat server, the mature llama.cpp path may be simpler. Transformers may fit better when you need to inspect model internals or continue dataset evaluation and preprocessing in the same code. Choose based on the next task rather than which engine is universally better.</p><ul><li><a href="https://huggingface.co/blog/transformers-llama-cpp-quants">Hugging Face’s official article on GGUF in Transformers</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/offline-airgapped-local-ai-deployment">Building Fully Offline Local AI: Air-Gap Installation and Update Procedures</a></li></ul></section><figure><img src="https://localai.co.kr/guides/transformers-gguf-scene-1.webp" alt="A GGUF model file being loaded in a Python workspace on an Apple laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Select and load a GGUF file directly through the Transformers API.</figcaption></figure><section><h2>Check memory use to see whether the quantized kernel is active</h2><p>The documented path loads ggml and ggml-attn kernels on Apple Silicon MPS to compute with quantized weights. If the PyTorch, Transformers, and kernels versions are incompatible, a regular dequantization path may be used. Read the model-loading logs and check memory use before and after execution.</p><p>The size of a Q4 GGUF file alone does not tell you how much memory execution will need. The KV cache and runtime also use memory. Record a baseline with the compatible kernel active, then check how use changes as you increase context length. If it grows more than expected, inspect kernel activation and data type before blaming the file format.</p></section><figure><img src="https://localai.co.kr/guides/transformers-gguf-scene-3.webp" alt="A comparison of weights remaining quantized versus being dequantized and using more memory" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Without a compatible kernel, even a small GGUF can use more memory at runtime.</figcaption></figure><section><h2>Specify both the repository and the GGUF file</h2><p>A Hugging Face repository may contain several quantized files. Specify both the repository ID and `gguf_file` in `from_pretrained` to select the intended Q4 file. Before this feature is included in a stable release, you may need Transformers main and a compatible version of kernels, as shown in the official article.</p><p>Start with a small model and short prompt, recording CPU and GPU memory and the initial load time. Then move to the model you want and check the same items. If you do not need custom code and would otherwise spend time matching package and kernel versions, llama.cpp or MLX may be easier to operate.</p><div><p><strong>Official installation path</strong></p><pre><code data-guide-code-block="2-0">pip install -U "git+https://github.com/huggingface/transformers.git" kernels</code></pre><p><small>This command installs Transformers main. Once the feature is included in a stable release, prefer the stable-version installation instructions.</small></p></div><div><p><strong>Load a specified GGUF file</strong></p><pre><code data-guide-code-block="2-1">from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "bartowski/Qwen2.5-7B-Instruct-GGUF"
file = "Qwen2.5-7B-Instruct-Q4_K_M.gguf"

tokenizer = AutoTokenizer.from_pretrained(repo, gguf_file=file)
model = AutoModelForCausalLM.from_pretrained(repo, gguf_file=file, device_map="mps")</code></pre><p><small>Pinning the repository and filename makes it easier to rerun and compare the same GGUF.</small></p></div></section><figure><img src="https://localai.co.kr/guides/transformers-gguf-scene-2.webp" alt="A workspace comparing the llama.cpp run path with Python experiments in Transformers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the engine that fits the next task, whether simple inference or Python experimentation.</figcaption></figure><section><h2>First verify a response from the local API</h2><p>`transformers serve` opens an OpenAI-compatible API so existing apps can call the model. The official introduction says its initial implementation focuses on one conversation at a time, with padding and batching still needing refinement. Start at the default local address and verify a response; add authentication and a proxy before allowing external access.</p><p>Once the server starts, check available model IDs at `/v1/models` and send a short request using one of them. A generated result in the JSON response’s `choices` confirms model loading and API connectivity. If multiple users will connect, first verify one request, then measure time to first token and total throughput separately at concurrency levels 2, 4, and 8.</p><p>Python hooks are convenient, but they also expand the user and model-repository code that can execute. Pin the revision and package versions, and separate development from production.</p><div><p><strong>OpenAI-compatible local server</strong></p><pre><code data-guide-code-block="3-0">transformers serve "bartowski/Qwen2.5-7B-Instruct-GGUF:Qwen2.5-7B-Instruct-Q4_K_M.gguf"</code></pre><p><small>The default API is available at http://localhost:8000/v1. Network access is needed the first time if required Hub files must be downloaded.</small></p></div><div><p><strong>Check the model list and first chat request</strong></p><pre><code data-guide-code-block="3-1">curl http://127.0.0.1:8000/v1/models

curl http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"bartowski/Qwen2.5-7B-Instruct-GGUF:Qwen2.5-7B-Instruct-Q4_K_M.gguf","messages":[{"role":"user","content":"로컬 모델이 준비됐는지 한 문장으로 알려줘."}],"max_tokens":32}'</code></pre><p><small>The connection is confirmed when the model list appears and the second request returns an answer in JSON `choices`.</small></p></div><ul><li><a href="https://huggingface.co/docs/transformers/en/serve-cli/serving">Official Transformers serve API and request examples</a></li></ul></section><section><h2>Check in sequence if memory use spikes or a request fails</h2><p>If the file cannot be found, check that the repository ID and `gguf_file` name are exact and that the file exists in that repository. If the download is blocked, check Hub connectivity and access permissions. If memory use grows more than expected after loading the GGUF, check the logs for ggml kernel activation and confirm that the PyTorch, Transformers, and kernels versions are compatible.</p><p>If the server starts but a request fails, use the model ID shown by `/v1/models` exactly and use the first log error to distinguish model loading, request format, and memory issues. If only long inputs fail, lower the context length and resend the same request. If memory is insufficient, check the baseline request with a smaller quantized file. Keep the model file and input fixed when comparing each change.</p></section><section><h2>Choose Transformers, llama.cpp, or MLX for the task</h2><p>If you need a chat or embedding server with broad GGUF support and simple installation, start with llama.cpp. Consider MLX when you want Apple Silicon model conversion and array operations in the MLX development workflow. Choose Transformers to retain Hugging Face evaluation, pipelines, and custom forward logic while using GGUF’s memory advantages.</p><p>Compare speed with the same model file, prompt, and output length. The Transformers figure in the official article includes prefill for a 128-token generation, while llama-bench’s tg128 is decode-focused, so the values cannot be ranked directly. Measure time to first token, decode speed, and peak memory on your own workload.</p></section><aside><h2>Compare with the llama.cpp execution path</h2><p>Compare the simplest way to serve the same GGUF and the differences in installation and operation.</p><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>On Apple Silicon, Transformers can compute with GGUF weights in their quantized form through compatible kernels and answer questions through a Python API or local server. This is useful when you want dataset evaluation, intermediate model outputs, and custom processing in the same Python project.</dd></div><div><dt>How much memory does it need?</dt><dd>The documented path loads ggml and ggml-attn kernels on Apple Silicon MPS to compute with quantized weights. If the PyTorch, Transformers, and kernels versions are incompatible, a regular dequantization path may be used. Read the model-loading logs and check memory use before and after execution.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>vLLM Metal 0.30: turn one Mac into a multi-user local AI server</title><link>https://localai.co.kr/en/guides/vllm-metal-0-30-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/vllm-metal-0-30-serving-guide</guid><description>Describes the Apple Silicon installation conditions for vLLM Metal 0.30, PagedAttention, integrated KV storage, simultaneous request settings, and precautions when distributing multiple Macs.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">vLLM Metal 0.30: turn one Mac into a multi-user local AI server</h1><p>For a Mac server, consider throughput and each user’s wait time together</p><p id="guide-page-summary">vLLM Metal 0.30 connects Metal execution with the vLLM scheduler on Apple Silicon and manages multiple requests’ KV caches in pages. It suits environments where total server throughput and per-request time to first token matter more than one user’s peak tok/s.</p><p>When coding tools, document-search apps, and other users’ questions arrive at one Mac, a single request’s tok/s does not explain the server experience. This guide alternates requests from the three apps to show how per-user wait and overall server throughput change.</p><p>First prepare a supported Mac and Python environment, then verify the first response with a small model. Increase concurrent requests afterward and record both time to first token per request and total server throughput to see whether it fits team usage.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The official requirements are Apple Silicon, macOS 15 or later, and native arm64 Python 3.12.</li><li>Version 0.30 uses the vLLM 0.30 core, unified KV storage, and zero-copy Metal views of MLX memory.</li><li>Across multiple Macs, consider replicating request handling and data parallelism before splitting the model.</li><li>Verify a successful single request before tuning concurrency and the memory budget.</li></ol></section><section><h2>Distinguish total server throughput from one user’s wait</h2><p>For a single generation request, memory bandwidth and kernel efficiency affect speed. When requests overlap, it also matters how well the scheduler fills compute intervals and divides KV cache space. vLLM Metal brings this concurrent request management to Mac servers.</p><p>In the site’s published measurements, Qwen3-0.6B BF16 on an M5 Pro with 64 GB delivered output throughput of 136.3, 445.7, and 497.2 tok/s at concurrency 1, 8, and 16, respectively. These are total server throughput figures for a small model, not directly comparable to the generation speed of another model running alone. For a real decision, measure per-request time to first token and total throughput at the target concurrency.</p><ul><li><a href="https://github.com/vllm-project/vllm-metal/releases/tag/v0.30.0">Official vLLM Metal 0.30.0 release notes</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/vllm-metal-030-scene-1.webp" alt="Requests from several users arriving at one Mac and being handled from a queue" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For a concurrent-request server, check total throughput and per-request wait time together.</figcaption></figure><section><h2>Understand the unified KV memory budget in 0.30</h2><p>In vLLM Metal 0.30, the vLLM scheduler manages KV storage as one pool, and Metal accesses the same memory through MLX views. Hybrid models also share the overall budget rather than allocating a separate duplicate cache pool. PagedAttention is always enabled, so the old environment variable for disabling it no longer applies.</p><p>The old `VLLM_METAL_MEMORY_FRACTION` variable has been removed; set the memory budget with `--gpu-memory-utilization`. A value that is too high leaves less memory for the operating system and other apps, while one that is too low can leave too few KV blocks and make requests wait. Start with a lower value such as 0.70 and adjust while observing swap and memory pressure under concurrent requests.</p></section><figure><img src="https://localai.co.kr/guides/vllm-metal-030-scene-2.webp" alt="A Mac server diagram showing shared KV-cache memory and pages assigned to requests" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Multiple requests share cache space within the unified KV budget.</figcaption></figure><section><h2>Check the installation environment and supported dtypes</h2><p>The official requirements are Apple Silicon, macOS 15 or later, and native arm64 Python 3.12. If an x86 Python running under Rosetta is mixed in, the Metal path may behave differently even if installation succeeds. Choose either the installer script or Homebrew and match the architecture and Python version first.</p><p>Version 0.30 does not accept fp8, int8, or nvfp4 KV-cache dtypes; use `auto` or the TurboQuant path. Copying options from another vLLM server can cause startup rejection. Check the release-note changes and select options for this version.</p><div><p><strong>Install the official stable version</strong></p><pre><code data-guide-code-block="2-0">curl -fsSL https://raw.githubusercontent.com/vllm-project/vllm-metal/main/install.sh | bash -s -- --stable</code></pre><p><small>The installer prepares prebuilt wheels. Review the script before running it and use a separate Python environment.</small></p></div><div><p><strong>Install with Homebrew</strong></p><pre><code data-guide-code-block="2-1">brew tap vllm-project/vllm-metal https://github.com/vllm-project/vllm-metal
brew install vllm-project/vllm-metal/vllm-metal</code></pre><p><small>Use the same installation method across team Macs to reduce version differences.</small></p></div><ul><li><a href="https://github.com/vllm-project/vllm-metal/releases/tag/v0.30.0">0.30.0 requirements and removed options</a></li></ul></section><section><h2>Start the local server and check the first answer</h2><p>After installation, choose a supported small model such as Qwen3-0.6B and start the server. `--gpu-memory-utilization` sets the memory budget, while `--max-num-seqs` sets how many sequences may be processed at once. Begin with one sequence to verify model loading and the API response before increasing concurrency.</p><p>Check the model ID returned by `/v1/models` and send a short chat request with that same ID. A response sentence in JSON `choices` confirms that the model loaded and the API is connected. If a request fails, read the first error in the server terminal and distinguish model loading, memory, and request-format issues.</p><div><p><strong>Start the local API server</strong></p><pre><code data-guide-code-block="3-0">vllm serve Qwen/Qwen3-0.6B --host 127.0.0.1 --port 8000 --gpu-memory-utilization 0.70 --max-num-seqs 1</code></pre><p><small>Check the first run with one sequence and a local connection. If the model files have not been downloaded yet, a Hub connection is required.</small></p></div><div><p><strong>Check the model list and first chat request</strong></p><pre><code data-guide-code-block="3-1">curl http://127.0.0.1:8000/v1/models

curl http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen/Qwen3-0.6B","messages":[{"role":"user","content":"로컬 모델이 준비됐는지 한 문장으로 알려줘."}],"max_tokens":32}'</code></pre><p><small>Check that the first request returns an answer in JSON `choices`. If the model ID differs from the list, use the listed value.</small></p></div><ul><li><a href="https://docs.vllm.ai/en/latest/serving/openai_compatible_server/">vLLM OpenAI-compatible API request format</a></li></ul></section><section><h2>For concurrency tests, track per-user latency and total throughput</h2><p>After confirming a valid answer and memory use with one request, increase concurrency to 2, 4, and 8 in sequence. At each level record total tok/s, per-request time to first token, and inter-token latency. If throughput rises but individual requests become too slow, lower the batch limit or maximum sequence count and compare again.</p><p>A coding agent may send many short calls, while document summarization may send one long input. Mix the two in the proportions used by your real work to expose queueing and prefill contention. Do not use peak throughput from one short prompt as the expected capacity of a team server.</p><p>To test concurrency 2, stop the server with Ctrl+C and restart with `--max-num-seqs 2` instead of `--max-num-seqs 1`. Once the API is ready, send two overlapping requests. Repeat for 4 and 8 after changing the server limit, recording both the limit in startup logs and the actual overlapping request count.</p></section><section><h2>First distinguish memory shortages from startup errors</h2><p>If installation fails, check that Python is arm64 3.12, macOS is version 15 or later, and the virtual environment does not mix other vLLM or MLX versions. If a KV dtype option is rejected at startup, remove fp8, int8, or nvfp4 settings unsupported in 0.30 and choose `auto` or the supported TurboQuant path.</p><p>If the model does not load or an error reports insufficient KV blocks, use a smaller model, shorten the context, and reduce `--max-num-seqs` before retrying with one request. Increase settings one at a time after model loading and a single request succeed. Close other apps and watch memory pressure and swap to distinguish queueing from a memory shortage.</p></section><section><h2>With multiple Macs, consider independent server replicas first</h2><p>vLLM Metal has been developing support for a Ray executor, pipeline parallelism, and data-parallel replicas across Macs. Splitting a model across several Macs can put network synchronization on the token-generation path. If the model fits on one machine, running the same server on each Mac and distributing requests is easier to manage.</p><p>If one server stops, another can receive requests, and you can check updates one machine at a time. Consider pipeline splitting when the model does not fit on one Mac. Choose hardware based on time to first token at the target number of concurrent users and the recovery plan, rather than the peak for a single request.</p></section><figure><img src="https://localai.co.kr/guides/vllm-metal-030-scene-3.webp" alt="Two Macs each running an independent server and receiving a share of requests" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If the model fits on one Mac, replicate the independent server to distribute requests.</figcaption></figure><aside><h2>Compare Mac serving engines</h2><p>Compare how vLLM Metal and other engines handle the same Mac and model conditions.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?view=engines&amp;engineA=vllm-metal&amp;engineB=omlx">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>vLLM Metal 0.30 connects Metal execution with the vLLM scheduler on Apple Silicon and manages multiple requests’ KV caches in pages. It suits environments where total server throughput and per-request time to first token matter more than one user’s peak tok/s.</dd></div><div><dt>How much memory does it need?</dt><dd>After confirming a valid answer and memory use with one request, increase concurrency to 2, 4, and 8 in sequence. At each level record total tok/s, per-request time to first token, and inter-token latency. If throughput rises but individual requests become too slow, lower the batch limit or maximum sequence count and compare again.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>K2 Horizon 0.9B to 36B-A4B: choose the right model for your hardware</title><link>https://localai.co.kr/en/guides/k2-horizon-local-model-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/k2-horizon-local-model-guide</guid><description>Compare context length, Q4 memory, and Mac/NVIDIA device selection and speed experience of K2 Horizon 0.9B·3.7B·7B·32B·MoVA 36B-A4B.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-29</p><h1 id="guide-page-title">K2 Horizon 0.9B to 36B-A4B: choose the right model for your hardware</h1><p>Choose the smallest K2 Horizon model that fits the task</p><p id="guide-page-summary">K2 Horizon is a family of language models that take text and generate classifications, summaries, and coding answers. It includes 0.9B, 3.7B, 7B, and 32B dense models plus a 36B-A4B MoE model. Try your task with a small model first, then compare a larger one if omissions recur.</p><p>For example, start with 0.9B for short email classification and compare 7B for personal-document summaries or simple coding. Consider 32B or 36B-A4B when a smaller model repeatedly misses relationships across files. Give each model the same task and record correctness, evidence, time to first token, and completion time to see whether a larger model is warranted.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 0.9B supports 128K context; 3.7B, 7B, 32B, and 36B-A4B support an official 512K context.</li><li>The 36B-A4B is a MoVA MoE that loads about 36B total and activates about 4B per token.</li><li>Official GGUF runtime paths are available for 3.7B, 7B, 32B, and 36B-A4B.</li></ol></section><section><h2>Test smaller models against real tasks first</h2><p>The 0.9B supports 128K context and has small weights, making it a useful starting point for verifiable tasks such as fixed-format extraction, routing, and draft summaries. The 3.7B offers official 512K context and a GGUF path, but long-input processing time and KV cache add separate costs. Start with 8K or 16K and check whether it finds the needed information.</p><p>The 7B is a practical candidate to compare in Q4 on an 8 GB-class GPU or a device with at least 16 GB of unified memory. On a laptop, leave memory for the operating system and browser. If 3.7B and 7B produce nearly identical work results, keep the faster, lighter model.</p><ul><li><a href="https://huggingface.co/collections/IFM/k2-horizon">Official IFM K2 Horizon collection</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li></ul></section><figure><img src="https://localai.co.kr/guides/k2-horizon-scene-1.webp" alt="A model-size selection graphic from a laptop and GPU to a workstation" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start with a smaller model suited to the task and hardware.</figcaption></figure><section><h2>Check memory headroom and bandwidth for 32B dense</h2><p>A 32B Q4 file may fit on a 24 GB GPU with a short context, but little headroom may remain for runtime memory and KV cache. At 32 GB or more of VRAM or unified memory, it is easier to keep other apps and longer contexts available; once system-RAM offloading begins, speed and usability can change substantially.</p><p>The 32B dense model uses all dense weights for every token, so single-user decoding is strongly affected by memory bandwidth. Two devices with 32 GB can still differ in bandwidth and runtime engine. When comparing hardware, measure model fit and token-generation speed separately.</p></section><section><h2>Active parameters and total load differ for 36B-A4B</h2><p>The 36B-A4B is a MoVA MoE that stores about 36B total weights while activating about 4B per token. The active 4B describes its compute path; it does not reduce storage needs to those of a 4B model. Even in Q4, all expert weights and the KV cache must be available in accessible memory.</p><p>When all weights fit in fast memory, the lower active compute can make decoding faster than 32B dense in some setups. That advantage can disappear if some experts must be fetched from slower RAM or storage. The official vLLM example uses two accelerators and expert parallelism, so it is not directly comparable to desktop GGUF inference.</p></section><figure><img src="https://localai.co.kr/guides/k2-horizon-scene-3.webp" alt="Active-path comparison of 32B dense and 36B-A4B MoE models" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>An MoE still needs memory for all weights even when it computes through only some experts.</figcaption></figure><section><h2>Expand long context gradually from 4K</h2><p>The 0.9B supports 128K context, while 3.7B, 7B, 32B, and 36B-A4B support an official 512K context. A high context limit does not reduce the time to read long documents or the KV cache required. Record quality and speed at 4K, then expand to 16K and 64K and verify that it finds the evidence you need.</p><p>Before buying hardware, compare the median of three runs at the input lengths you use most. If 7B gives the answers you need and 32B adds little quality, there is less reason to buy a larger system. If a particular problem is repeatedly solved only by 32B or 36B-A4B, then compare memory headroom, power, and purchase cost.</p></section><figure><img src="https://localai.co.kr/guides/k2-horizon-scene-2.webp" alt="Memory use and waiting time rising as longer documents enter a model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Increase input length only as needed instead of using the maximum context at once.</figcaption></figure><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare K2 Horizon speeds by size</h2><p>Compare memory use and token-generation speed on the same hardware, from 0.9B to 36B-A4B.</p><a href="https://localai.co.kr/en/speed?model=k2-horizon-7b">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>K2 Horizon is a family of language models that take text and generate classifications, summaries, and coding answers. It includes 0.9B, 3.7B, 7B, and 32B dense models plus a 36B-A4B MoE model. Try your task with a small model first, then compare a larger one if omissions recur.</dd></div><div><dt>How much memory does it need?</dt><dd>The 7B is a practical candidate to compare in Q4 on an 8 GB-class GPU or a device with at least 16 GB of unified memory. On a laptop, leave memory for the operating system and browser. If 3.7B and 7B produce nearly identical work results, keep the faster, lighter model.</dd></div><div><dt>When is it better not to choose this?</dt><dd>When all weights fit in fast memory, the lower active compute can make decoding faster than 32B dense in some setups. That advantage can disappear if some experts must be fetched from slower RAM or storage. The official vLLM example uses two accelerators and expert parallelism, so it is not directly comparable to desktop GGUF inference.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What Is a Local AI Agent? When It Makes Sense to Run One</title><link>https://localai.co.kr/en/guides/local-ai-agent-first-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-ai-agent-first-guide</guid><description>A local AI agent is not the same thing as a local language model. Separate the model, agent runtime, tools, and data routes to decide whether local operation fits your recurring work and privacy needs.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">What Is a Local AI Agent? When It Makes Sense to Run One</h1><p>A local AI agent carries out repeat tasks with approved tools</p><p id="guide-page-summary">A local AI agent sends a task instruction to a model and executes permitted file and tool actions to produce a result. A workflow that finds meeting notes and saves a summary draft lets you check model requests, tool permissions, and where data travels.</p><p>Suppose transcripts and notes from meetings end up in several folders. An agent can reduce repetitive manual steps by finding the files, extracting decisions, and saving a short summary.</p><p>At first, limit the agent to reading copies from a designated folder and saving drafts in a separate output folder. Check which model and tools are connected and where files and requests go before expanding its scope.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The model proposes answers and tool calls; the agent runtime manages sessions and execution.</li><li>Check the agent host, inference model, tools, and data routes separately.</li><li>Start with reading and drafting; keep sending, deletion, and command execution behind approval.</li></ol></section><section><h2>An agent turns model responses into tool actions</h2><p>A meeting-summary agent can find files in an approved folder, send selected content to a model to extract decisions, and save a draft in a designated location. Pasting a transcript into a chat model produces a summary, but a person still finds and supplies the file. An agent connects those steps through tools and repeats them.</p><p>A language model generates text from input and, when tool calling is supported, can structure a request naming a tool and its arguments. The model itself does not open files or sign in to messaging apps; software around the model connects it to tools. The runtime manages sessions, executes a tool request from the model, and returns the result to it.</p><p>The model and server must understand the same tool-call format for the round trip to work. If ordinary questions get answers but file actions stop midway, compare tool descriptions and argument formats and check model-server compatibility.</p><ul><li><a href="https://docs.openclaw.ai/concepts/architecture">OpenClaw architecture and Gateway roles</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/reference/faq">Hermes Agent FAQ on models, tools, and data routes</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person choosing tasks for an agent while viewing file, calendar, and browser cards." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start with repeatable tasks that can be checked against their sources.</figcaption></figure><section><h2>Trace the runtime path to see what is actually local</h2><p>Even when an agent runs on a laptop, model requests may go to a remote API. Conversely, inference may run locally while requests arrive through Telegram or Discord, or data travels to external services for web search, speech conversion, or cloud backup. Asking only whether the model is local does not reveal the data path.</p><p>Check separately which device runs the agent runtime, where the model endpoint is, whether tools use the internet, and where logs and attachments are stored. The OpenClaw Gateway can be self-hosted and connected to a local model, but the complete path including channels and the model does not become local automatically.</p><ul><li><a href="https://docs.openclaw.ai/gateway/local-models">OpenClaw local-model and data-route guidance</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="File, calendar, messaging, and browser paths branch from a local computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the runtime location and the services that receive data separately.</figcaption></figure><section><h2>Start with repeatable tasks whose results can be checked</h2><p>Agents are worth considering for repeatable tasks with a clear input scope and output format. For example, an agent can find this week's meeting notes in a specified folder, extract decisions and owners, and save a draft for a person to compare with the source.</p><p>For one-off writing or questions whose answers can be copied directly, ordinary chat may be simpler. If inputs change each time and results are hard to evaluate, review work may outweigh the effort automation saves. Keep the workflow simple when no one is responsible for managing connected accounts and permissions.</p><ul><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Connect recurring tasks with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/langgraph-local-checkpoint-guide">Save and resume task state with LangGraph</a></li></ul></section><section><h2>Limit tool permissions to reading and drafting first</h2><p>An agent that only reads notes has a different scope from one that edits files or sends them to colleagues. Malicious instructions in a document or web page can influence the model, and broad tool permissions can lead to file changes or data transfer.</p><p>Start with copies or a separate work folder and allow only file reading and drafting. Keep sending, deletion, and shell commands behind human review and approval. Do not assume a service's approval feature is equivalent to operating-system isolation; check documented isolation boundaries, network access, and mounted folders.</p><ul><li><a href="https://docs.openclaw.ai/gateway/security">OpenClaw security and trust boundaries</a></li><li><a href="https://localai.co.kr/en/guides/local-coding-agent-harness-guide">Build edit, test and approval steps for a coding agent</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="An approval device and completed-work tray sit beside a computer running in the evening." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set permissions and a stop method before choosing always-on operation.</figcaption></figure><section><h2>Choose where to run the first version and what to connect</h2><p>A first test may need only desktop chat and a restricted file folder. Choose between running the Gateway on a laptop or a separate server based on whether you need it only while the computer is on or continuously from other locations. A separate server also brings responsibility for access controls, updates, and backups.</p><p>A server located at home still needs authentication and exposure checks if you open a remote access path. Messaging accounts or API keys may be stored on the host. A local-only interface narrows access but sacrifices anywhere access. Weigh the access you need against the risks you can manage.</p><p>Placing the model and runtime on one device can simplify setup, but other apps may slow while the model uses memory. A separate model server adds a network path between agent and server. First state the requirements in one sentence, such as: “Read the meeting-notes folder and save summary drafts; do not send files to an external model; require a person to approve sending.” This makes it easier to leave unnecessary messaging integrations and automatic sending out of the first version.</p><p>Keep these requirements as a checklist when adding tools later. Check that only file reading is allowed, output stays in the draft folder, and test files are removed after trying a remote endpoint. Verify results and storage paths on a small scope before adding tools one at a time.</p></section><aside><h2>Connect OpenClaw to a local model</h2><p>Follow a first connection path that verifies tool calls too.</p><a href="https://localai.co.kr/en/guides/openclaw-local-agent-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local AI agent sends a task instruction to a model and executes permitted file and tool actions to produce a result. A workflow that finds meeting notes and saves a summary draft lets you check model requests, tool permissions, and where data travels.</dd></div><div><dt>How much memory does it need?</dt><dd>Placing the model and runtime on one device can simplify setup, but other apps may slow while the model uses memory. A separate model server adds a network path between agent and server. First state the requirements in one sentence, such as: “Read the meeting-notes folder and save summary drafts; do not send files to an external model; require a person to approve sending.” This makes it easier to leave unnecessary messaging integrations and automatic sending out of the first version.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Connect OpenClaw to a Local Model with Ollama or Managed llama.cpp</title><link>https://localai.co.kr/en/guides/openclaw-local-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/openclaw-local-agent-guide</guid><description>Separate the OpenClaw Gateway from the local inference server, choose Ollama or OpenClaw-managed llama.cpp, and verify chat and real tool calls step by step.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Connect OpenClaw to a Local Model with Ollama or Managed llama.cpp</h1><p>Connect a local model to OpenClaw and verify tool execution</p><p id="guide-page-summary">OpenClaw is an AI agent that reads files and runs tools based on instructions you give in a conversation. When you connect a model on your computer, the model interprets the instructions and OpenClaw carries out the required tasks.</p><p>For example, put meeting notes in a test folder and ask for a summary. This requires an OpenClaw installation, a connected model, and a file-reading tool. We will walk through connecting an existing Ollama setup and choosing managed llama.cpp during onboarding.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The OpenClaw Gateway coordinates requests; Ollama or llama.cpp runs inference.</li><li>The baseline Node versions are 24.16 or later, or 26.1 or later; check current supported versions in the official guide before installation.</li><li>A successful short chat does not verify an agent tool call.</li></ol></section><section><h2>Prepare the Gateway and model server separately</h2><p>OpenClaw Gateway coordinates conversation channels and tool execution. A model server such as Ollama or llama.cpp loads the model to interpret instructions and generate answers. Preparing the Gateway and model server in sequence also makes it clear which status and logs to check if something fails.</p><p>The official installer below can be used for macOS, Linux, and WSL2. On Windows, use the official Windows Hub or PowerShell instructions. This installs OpenClaw; connecting a local model is a separate step.</p><div><p><strong>Installer for macOS, Linux, and WSL2</strong></p><pre><code data-guide-code-block="0-0">curl -fsSL https://openclaw.ai/install.sh | bash</code></pre><p><small>Before running a script fetched from the network, verify the domain and installer details in the official documentation.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/hermes-agent-local-guide">Install Hermes Agent and Connect a Local Model: From Your First Task to Permission Checks</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-local-agent-guide-scene-1.webp" alt="A laptop connected to a local server with separate paths to several work panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Gateway coordinates channels and tools; the model server handles inference.</figcaption></figure><section><h2>Check the Node version and installer details first</h2><p>The official installation guide supports Node.js 24.16 or later, or 26.1 or later, and recommends Node 26. Even if Node is already installed, check its version and SQLite runtime requirements. Supported versions can change, so verify them in the official documentation before installing.</p><p>The curl installer runs a script fetched from the internet in a shell. Verify the official domain and review what the installer does; on managed or sensitive systems, inspect the script or choose another supported installation method.</p><ul><li><a href="https://docs.openclaw.ai/install">Official OpenClaw installation and OS-specific steps</a></li><li><a href="https://docs.openclaw.ai/install/installer">What the installer does</a></li></ul></section><section><h2>Connect an Ollama model you already use</h2><p>Choose Ollama when you want to manage the server and model yourself. Install it from the official source, start it, and download a model. The ollama pull gemma4 command in OpenClaw's guide is an example, not a standing model recommendation; check the exact name, tag, and tool-calling support in Ollama's official catalog.</p><p>In OpenClaw setup, select Ollama authentication and enter the local or LAN endpoint and model ID. A local endpoint without a real secret can use the ollama-local placeholder, but a public remote host or Ollama Cloud needs valid credentials. Do not expose the model server to the public internet for remote access; follow the official networking and authentication guidance.</p><div><p><strong>List Ollama models visible to OpenClaw</strong></p><pre><code data-guide-code-block="2-0">openclaw models list --provider ollama</code></pre><p><small>Shows models registered under the Ollama provider and visible to OpenClaw.</small></p></div><ul><li><a href="https://docs.openclaw.ai/providers/ollama/setup">Official Ollama connection, auth, and model selection</a></li></ul></section><section><h2>Managed llama.cpp guides model and server setup</h2><p>If you do not want to configure each model and runtime option yourself, consider OpenClaw's managed llama.cpp path. The official local-model guide says to install the llama.cpp plugin and choose Managed local server in openclaw onboard. The setup shows the Gateway host, model, download size, and backend, then verifies an actual tool call before changing the default model.</p><p>Memory needs vary with weights, context size, runtime, and other host workloads. The lowest host-memory floor of 8 GiB among the managed catalog's 64K-context recipes applies to that recipe; it is not a universal OpenClaw minimum or a performance guarantee. Check the current hardware assessment in setup along with memory used by other applications.</p><ul><li><a href="https://docs.openclaw.ai/gateway/local-models">Managed llama.cpp, memory floors, and local-model security</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-local-agent-guide-scene-2.webp" alt="A desk with a small Gateway device connected by cable to a separate local model server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Installing the Gateway and preparing the model server are separate steps.</figcaption></figure><section><h2>Test a real tool after direct chat and Gateway responses</h2><p>The model's direct response, a response routed through the Gateway, and an agent tool execution test different stages. Request inference directly first, then send the same prompt through the Gateway. Replace &lt;provider/model&gt; with an ID shown by openclaw models list and check the JSON output for pong.</p><p>After both responses work, make an actual tool call that reads a file from a read-only test folder. Confirm the tool name and result appear in the run log to verify the agent workflow.</p><p>Replace `PROVIDER/MODEL` in both examples with the actual ID from `openclaw models list`. Keep the quotes and replace the text inside them. Run local inference first, then test the Gateway path with the same ID after receiving a response.</p><div><p><strong>Request inference directly from the local model</strong></p><pre><code data-guide-code-block="4-0">openclaw infer model run --local --model "PROVIDER/MODEL" --prompt "Reply with exactly: pong" --json</code></pre><p><small>Check that the model responds before involving the Gateway.</small></p></div><div><p><strong>Request inference through the Gateway</strong></p><pre><code data-guide-code-block="4-1">openclaw infer model run --gateway --model "PROVIDER/MODEL" --prompt "Reply with exactly: pong" --json</code></pre><p><small>Verify an actual response routed through the Gateway, not just a model listing.</small></p></div></section><section><h2>Diagnose the stage where the workflow stops</h2><p>If the model does not load, check its ID, server status, completed download, and available memory. If chat works but tools do not, inspect the tool-calling format, chat template, OpenAI-compatible endpoint, and the full prompt size sent by OpenClaw. An agent request with conversation history and tool descriptions can use more memory or exceed the context limit compared with a short chat.</p><p>Do not set the model as default until an actual tool call has been verified. A local model may not include the safety filters of a hosted provider. Even when documents are read locally, messaging or search requests may go to external services, so check data flows and permissions.</p><ul><li><a href="https://docs.openclaw.ai/gateway/security">Gateway trust boundaries, tool permissions, and sandbox guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-local-agent-guide-scene-3.webp" alt="A person checking permission scopes at three doors representing files, terminal, and network access" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify both that tool calls work and that only necessary permissions are enabled.</figcaption></figure><section><h2>Start with a read-only task and add only needed permissions</h2><p>Choose Ollama if you already manage its model and tag. If you want guided installation and hardware-based model selection, consider the llama.cpp plugin and Managed local server in openclaw onboard. Either way, start by reading one note from a test folder and drafting a summary.</p><p>Check the tool and arguments in the run log, then compare the result with the source. If there is no record of reading the file, the model may have guessed. Even after the test passes, add messaging, automation, or file-writing permissions only when the task needs them.</p><ul><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">Decide whether a local agent fits</a></li><li><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Prepare an Ollama server and model</a></li><li><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">Local serving with llama.cpp</a></li></ul></section><aside><h2>Explore the Hermes Agent local-model path</h2><p>See how the same task is verified in a different agent architecture.</p><a href="https://localai.co.kr/en/guides/hermes-agent-local-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>OpenClaw is an AI agent that reads files and runs tools based on instructions you give in a conversation. When you connect a model on your computer, the model interprets the instructions and OpenClaw carries out the required tasks.</dd></div><div><dt>How much memory does it need?</dt><dd>Memory needs vary with weights, context size, runtime, and other host workloads. The lowest host-memory floor of 8 GiB among the managed catalog's 64K-context recipes applies to that recipe; it is not a universal OpenClaw minimum or a performance guarantee. Check the current hardware assessment in setup along with memory used by other applications.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Install Hermes Agent and Connect a Local Model: From Your First Task to Permission Checks</title><link>https://localai.co.kr/en/guides/hermes-agent-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/hermes-agent-local-guide</guid><description>Distinguish Hermes Agent from Hermes models, then verify local or OpenAI-compatible endpoints, tool calls, memory, MCP, and permissions through one first task.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Install Hermes Agent and Connect a Local Model: From Your First Task to Permission Checks</h1><p>Connect Hermes Agent to a Hermes model and start working with files</p><p id="guide-page-summary">Hermes Agent is a program that sends conversational instructions to a model and runs tools such as file operations and a shell. Prepare and connect model weights such as Hermes 4 separately. Verify a short reply first, then request a read-only file listing to test the model connection and tool execution in sequence.</p><p>First choose the model provider and endpoint for the Agent. Running a model alone can return text, but it does not operate on local files or a shell. Once connected, the Agent sends conversation history and tool results to the model, runs the tools the model requests, and adds their results back to the conversation.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Hermes Agent is the program that runs tools, while Hermes 4 is a model you prepare separately.</li><li>Test a short plain reply followed by a read-only file listing to distinguish connectivity from tool invocation.</li><li>Even with local inference, search, MCP, or messaging integrations may send data externally.</li></ol></section><section><h2>Connect the Agent and model together</h2><p>If you only need a conversation about a project, start by connecting a model. To let it list files or edit code, configure tools and workspace permissions too. Separate read, write, and shell permissions even within one project so the first test stays scoped.</p><ul><li><a href="https://github.com/NousResearch/hermes-agent">Official Hermes Agent repository</a></li><li><a href="https://localai.co.kr/en/guides/openclaw-local-agent-guide">Connect OpenClaw to a Local Model with Ollama or Managed llama.cpp</a></li><li><a href="https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide">Backburner: Accelerate Mac LLM Prefill with an iPhone</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-1.webp" alt="A desk with an empty-screen computer beside a toolbox, notepad, and task cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The Agent connects the model, tools, and memory in one workflow.</figcaption></figure><section><h2>After installation, test a short reply and a read-only tool</h2><p>On macOS, Linux, or WSL2, follow the official CLI installation guide, reopen the terminal, and run `hermes`. On Windows, use the PowerShell installation command; the macOS desktop package supports Apple Silicon. Configure the model provider with `hermes model` and tools with `hermes tools`.</p><p>First send the model a short question and confirm its reply. Then request a read-only listing from a temporary folder with no sensitive files and compare it with the actual contents. A successful reply confirms the endpoint, but not tool invocation.</p><div><p><strong>Install the Hermes CLI on macOS, Linux, or WSL2</strong></p><pre><code data-guide-code-block="1-0">curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash</code></pre><p><small>On Windows, use the separate PowerShell installation command.</small></p></div><ul><li><a href="https://hermes-agent.nousresearch.com/docs/getting-started/installation">Hermes Agent installation guide</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/reference/platform-support">Platform support information</a></li></ul></section><section><h2>Choose managed local models or a custom endpoint</h2><p>Hermes Desktop’s Local Models flow manages the llama.cpp runtime and model downloads together. According to the official guide, this feature is available in Canary builds; other builds may require the `--local` option. If you already run Ollama, llama.cpp, or an MLX server, you can connect it by entering its address and model ID as a custom endpoint.</p><p>Hermes Agent requires a minimum 64K-token context for multi-step work that combines a model with tools. When choosing a local model, verify that the server’s actual context setting is at least 64,000 tokens. A short chat may succeed even when a smaller context cannot hold the conversation history and instructions needed for tool use.</p><p>OpenAI compatibility mainly describes the request format. After connecting, inspect the model list and test a short conversation; separately verify that the model emits tool requests, the server preserves the call format, and the Agent receives the actual execution result.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/local-models">Local model connection guide</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/getting-started/quickstart/">Hermes Agent minimum model requirements</a></li></ul></section><section><h2>Persistent memory and session search work differently</h2><p>Hermes uses `MEMORY.md` and `USER.md` under `~/.hermes/memories/` as its default persistent memory and places their contents in the system prompt at the start of a session. Each file has a character limit, so keep durable preferences and project details concise.</p><p>These files are not a database that stores every conversation indefinitely or performs automatic vector search. If you need to find a past session, check what the separate search feature stores. Memory edits may not affect an already-open session, and connecting an external memory provider can send data to that service.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/memory">Hermes memory structure</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-2.webp" alt="An agent memory workspace separating selected note cards from a closed archive" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Treat short persistent notes and searchable history as separate stores.</figcaption></figure><section><h2>Limit execution permissions when adding tools and MCP</h2><p>Terminal, file operations, browser, skills, and MCP servers expand what the Agent can do. Check an MCP server’s launch command and package origin, and disable unnecessary write or delete functions. Skills can also contain code and external connections, so inspect their actual behavior.</p><p>Start code review with repository read access, and require approval after reviewing the target and proposed changes before allowing file edits. Terminal approval and dangerous-command checks do not replace OS isolation, so use a separate workspace and only the permissions needed.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp">MCP connection guide</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/security">Hermes security settings</a></li></ul></section><section><h2>Check where data goes for each model and tool</h2><p>Even if the Agent runs on your PC, prompts are sent to the provider when you choose a remote model. Search, browser, MCP, and messaging integrations may contact external servers even when the model is local. Check the route taken by prompts, files, and tool results for each feature, and grant API keys only the permissions they need.</p><p>When another device connects to the model server, check authentication and network scope; do not expose it directly to the internet. For sensitive repositories, start with read access and review proposed changes or external transfers before allowing them.</p></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-3.webp" alt="A desk where an agent laptop connects to a local inference server on a separate device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the Agent’s location and the model endpoint’s location separately.</figcaption></figure><aside><h2>Compare OpenClaw, Hermes Agent, and NemoClaw</h2><p>Compare whether their operating models and security boundaries fit your work.</p><a href="https://localai.co.kr/en/guides/openclaw-hermes-nemoclaw-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Hermes Agent is a program that sends conversational instructions to a model and runs tools such as file operations and a shell. Prepare and connect model weights such as Hermes 4 separately. Verify a short reply first, then request a read-only file listing to test the model connection and tool execution in sequence.</dd></div><div><dt>How much memory does it need?</dt><dd>Hermes uses `MEMORY.md` and `USER.md` under `~/.hermes/memories/` as its default persistent memory and places their contents in the system prompt at the start of a session. Each file has a character limit, so keep durable preferences and project details concise.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>OpenClaw, Hermes Agent, and NemoClaw Compared: Which Fits Your Tasks and Operating Style?</title><link>https://localai.co.kr/en/guides/openclaw-hermes-nemoclaw-comparison</link><guid isPermaLink="true">https://localai.co.kr/en/guides/openclaw-hermes-nemoclaw-comparison</guid><description>Compare OpenClaw, Hermes Agent, and NemoClaw by role and operating model, including channels, local models, memory, tool verification, sandboxing, and network boundaries.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">OpenClaw, Hermes Agent, and NemoClaw Compared: Which Fits Your Tasks and Operating Style?</h1><p>Compare OpenClaw, Hermes Agent, and NemoClaw by how they are operated</p><p id="guide-page-summary">OpenClaw is an agent program connecting messaging requests to models and tools. Hermes Agent manages models and tools primarily for terminal and desktop work. NemoClaw is an NVIDIA configuration adding policies and isolation to an OpenClaw deployment. Compare which setup fits file work or a messaging bot.</p><p>If you are choosing an agent for project files, define the workflow before comparing names. The candidates differ depending on whether you need ongoing messaging, personal terminal-based work, or deployment policy in an organization's NVIDIA environment.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>OpenClaw connects channels, sessions, and tools through a Gateway.</li><li>Hermes Agent manages model selection and CLI or desktop tool workflows.</li><li>NemoClaw is an NVIDIA deployment setup that adds OpenShell and policies, not a model.</li></ol></section><section><h2>First distinguish the layer each tool occupies</h2><p>For a continuously running Telegram or Discord bot, begin with OpenClaw's Gateway and channel routing. For personal terminal workflows involving models, memory, and tools, compare Hermes directly. If you already use OpenClaw and need organizational policy and isolation, inspect the NemoClaw deployment environment.</p><table><caption>Compare the starting point and scope of management.</caption><thead><tr><th scope="col">Project</th><th scope="col">Main role</th><th scope="col">First check</th></tr></thead><tbody><tr><th scope="row">OpenClaw</th><td>Connect channels, sessions, models, and tools through the Gateway</td><td>Channel routing, callers, tool permissions</td></tr><tr><th scope="row">Hermes Agent</th><td>Operate models, memory, and tools from CLI or desktop</td><td>Model endpoint, working folder, memory</td></tr><tr><th scope="row">NemoClaw</th><td>Add OpenShell isolation and policies to OpenClaw</td><td>Supported environment, file mounts, network policy</td></tr></tbody></table><ul><li><a href="https://docs.openclaw.ai/concepts/architecture">OpenClaw architecture</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/hermes-agent-local-guide">Install Hermes Agent and Connect a Local Model: From Your First Task to Permission Checks</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-security-guide">Local AI Agent Security: Check Permissions, Network Paths, and Secrets</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-hermes-nemoclaw-comparison-scene-1.webp" alt="Three workbenches centered on messaging, terminal work, and isolated execution" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The three projects differ in their starting point and management scope.</figcaption></figure><section><h2>Channel support and access control matter for messaging</h2><p>OpenClaw manages sessions and routing for multiple channels through its Gateway, while Hermes Agent also offers messaging connections and scheduled runs. Compare not just platform support but also user approval and the tools available to each bot.</p><p>Decide whether the bot will run on a personal computer or an always-on server; it may not respond during sleep or restart. If other people can invoke it, restrict users with pairing or an allowlist and define each bot's tool permissions.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/">Official Hermes Agent documentation</a></li></ul></section><section><h2>Test ordinary answers and tool calls with the same model</h2><p>All three can connect to different model servers. Hermes documents OpenAI-compatible APIs as well as Ollama, vLLM, and llama.cpp; OpenClaw supports managed local models, Ollama, LM Studio, and custom OpenAI-compatible servers. Using the OpenAI-compatible format does not ensure identical tool calling or long-prompt handling.</p><p>Use the same PC, model files, quantization, and context length for a short conversation followed by a read-only tool test. Record installation, model loading, tool calls, and task completion separately, along with version, model ID, and tool settings. NemoClaw provides deployment boundaries but does not guarantee a model's answer quality or speed.</p><ul><li><a href="https://docs.nvidia.com/nemoclaw/latest/about/overview.html">NVIDIA NemoClaw overview</a></li><li><a href="https://docs.nvidia.com/nemoclaw/latest/user-guide/openclaw/reference/architecture">NemoClaw architecture</a></li><li><a href="https://localai.co.kr/en/guides/superfluid-local-multi-agent-serving-guide">Running multiple agents: Superfluid serving setup</a></li></ul></section><section><h2>Compare how memory and personal settings are stored and searched</h2><p>Hermes Agent offers file-based persistent memory, skills, and session search. OpenClaw has agent-specific workspaces, sessions, tool settings, and memory features. File formats, search behavior, when content enters the prompt, and external service dependencies can differ. Test whether a rule carries into a new session and check file access and concurrent edits.</p><p>NemoClaw focuses on OpenClaw deployment policy and execution boundaries. Check the selected OpenClaw configuration to see what is stored, who can read or delete it, and whether content reaches an external memory service.</p></section><figure><img src="https://localai.co.kr/guides/openclaw-hermes-nemoclaw-comparison-scene-2.webp" alt="One task card branching into messaging, terminal, and isolated execution paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the workflow you will operate before comparing feature lists.</figcaption></figure><section><h2>Verify isolation paths and defaults in practice</h2><p>OpenClaw supports sandboxing, but it is disabled by default and is not a complete boundary by itself. Hermes terminal approval is also different from OS isolation. NemoClaw adds OpenShell isolation and policies, so check official requirements, execution location, mounted files, and allowed network paths.</p><p>Separate file reading, writing, deletion, and external transfer, then use a test file to verify that access outside the allowed folder is blocked. Record whether the Gateway and tools run on the host or in isolation and where the model server lives. Do not infer actual data or permission paths from an isolation label alone.</p><ul><li><a href="https://docs.openclaw.ai/gateway/local-models">OpenClaw local model validation path</a></li></ul></section><section><h2>Choose a candidate by reproducing the needed workflow with a small test</h2><p>For a messaging bot, compare OpenClaw and Hermes channel support and access controls; for project files, test tool calls against the same read-only folder. If policy and isolation are needed in an organization's NVIDIA environment, begin with NemoClaw's supported environments and deployment requirements.</p><p>Record each candidate's version, execution location, model ID, task, and permissions. Hermes CLI or desktop, OpenClaw Gateway, and NemoClaw's OpenShell occupy different execution layers, so their results are not automatically equivalent. Whether the model server is on the host or inside isolation also affects data paths.</p><ul><li><a href="https://docs.openclaw.ai/gateway/sandboxing">OpenClaw sandboxing scope</a></li><li><a href="https://docs.nvidia.com/nemoclaw/user-guide/openclaw/reference/network-policies">NemoClaw network policies</a></li></ul></section><figure><img src="https://localai.co.kr/guides/openclaw-hermes-nemoclaw-comparison-scene-3.webp" alt="Three different agent workbenches sharing one central local model server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Tools and permission policies can differ even with the same model endpoint.</figcaption></figure><aside><h2>Choose hardware for your agent workload</h2><p>Separate model-inference needs from agent-operation needs.</p><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>OpenClaw is an agent program connecting messaging requests to models and tools. Hermes Agent manages models and tools primarily for terminal and desktop work. NemoClaw is an NVIDIA configuration adding policies and isolation to an OpenClaw deployment. Compare which setup fits file work or a messaging bot.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</title><link>https://localai.co.kr/en/guides/local-ai-agent-hardware-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-ai-agent-hardware-guide</guid><description>Agent frameworks and model inference place different demands on a computer. Evaluate RAM, VRAM or unified memory, real context, tool round trips, and always-on operation before choosing a setup.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</h1><p>Choose agent hardware based on the model, tools, and workflow</p><p id="guide-page-summary">A local AI agent PC accepts a task, runs model inference and file or search tools in sequence, and returns a result. The runtime and model server can share one computer or be separate. Using meeting summarization as an example, this guide explains how to choose hardware based on real input length, tool round trips, concurrent work, and always-on operation.</p><p>Suppose you want to read one meeting note and summarize its key points. Ordinary chat sends the file to a model and waits, while an agent finds the file, runs a reader tool, and returns the result to the model to produce a summary. The resources needed for model inference and for the full workflow overlap but are not identical.</p><p>First note where the runtime will live, whether the model server is on the same device, and how many times one request will use files, a browser, search, or shell tools. You can put only the runtime on a small PC and connect it to a GPU server, or run everything on one machine.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The agent runtime and model inference server can run on separate hardware.</li><li>Leave memory for context cache, runtime, operating system, and other apps beyond the weights.</li><li>Total wait includes file and search tools and server round trips, not only inference.</li></ol></section><section><h2>Process a meeting note with a model and tools</h2><p>When an agent receives a task, it locates the meeting-note file, reads its contents with a tool, and sends them to the model. The model creates a summary draft, and the runtime can send it to a storage location. This workflow includes not only model computation but file access, tool execution, result round trips, and runtime session handling.</p><p>Programs such as OpenClaw and Hermes Agent are runtimes that manage conversations, sessions, tool calls, channels, and automation flows; they are not model weights. The model that generates text can run on a local server on the same computer, a separate LAN device, or a hosted API. Decide where each component will live instead of choosing by framework name alone.</p><p>An actual request includes tool names and argument formats, conversation history, and file contents alongside the task instructions. Keeping one meeting-note reading and summarization workflow fixed lets you examine input-processing memory and tool wait times separately.</p><ul><li><a href="https://docs.openclaw.ai/gateway/local-models">OpenClaw local-model requirements</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/local-models">Hermes Agent local-model paths</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-1.webp" alt="Different task cards sit beside a small computer, single-GPU desktop, and multi-accelerator workstation." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose hardware for the task, not the framework name.</figcaption></figure><section><h2>Budget for context and runtime beyond the file size</h2><p>File size helps narrow the first model candidates, but it is not the full memory requirement. Weights load into memory, and context cache, inference runtime, the operating system, and other apps use space too. Whether some weights can reside on the GPU and the rest in system RAM depends on the runtime, model format, and hardware.</p><p>OpenClaw's local-model guide likewise says requirements vary with weights, context size, runtime, and other work on the same host. Using the full maximum context can increase cache memory. Agent requests may also include system instructions, tool names and argument formats, conversation history, and excerpts from files, so a model card's maximum context alone does not determine whether a setup will run.</p><p>When comparing the same meeting-note task, keep system instructions, tool descriptions, conversation history, file length, and answer length fixed. After loading the model, check system and GPU memory use, remaining capacity, request failures, and memory reclamation. Read memory figures in a specific official recipe as applying to the conditions it tested, not as general figures for other runtimes and models.</p><ul><li><a href="https://docs.openclaw.ai/help/faq-models">OpenClaw model-selection FAQ</a></li><li><a href="https://localai.co.kr/en/guides/superfluid-local-multi-agent-serving-guide">Serve concurrent requests with Superfluid</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-2.webp" alt="Memory is divided among model weights, context, tool results, and the operating system." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave room for context and runtime after loading the model file.</figcaption></figure><section><h2>Measure model generation and tool waits separately</h2><p>Total response time may include the model reading input during prefill, answer generation, file-tool execution, search-server response, and the agent interpreting results again. The number of model calls in one task also affects total wait.</p><p>For a comparison, match the model file and quantization, runtime version, GPU placement, context, and input/output lengths, then warm up and repeat the same task. Record cold runs that load the model separately from warm runs with the model already in memory. Log start and end times and success for each tool stage to identify whether inference or a connection path is the bottleneck.</p><p>Do not reduce total time to one model tokens-per-second figure. Exclude search wait for tasks that do not use external search, and log each round trip when a browser reads multiple pages. Measuring actual stage times shows how much a change to GPU computation affects the overall task.</p><ul><li><a href="https://localai.co.kr/en/guides/sparkdash-local-llm-benchmark-guide">Record your server's speed with sparkDash</a></li><li><a href="https://localai.co.kr/en/guides/langfuse-local-agent-tracing-guide">Separate model and tool delays with Langfuse</a></li></ul></section><section><h2>Always-on operation also depends on idle behavior and recovery</h2><p>A messaging bot or scheduled report requires the agent runtime to keep running. If the model server unloads the model while idle, the next request includes the reload time. Keeping the model in memory can reduce that delay, but leaves less memory for other apps and produces ongoing power use and heat.</p><p>List the apps you keep open and expected concurrent requests. Sequential handling may be enough when a person starts one meeting summary, while overlapping messaging, scheduled jobs, and multiple users change server queueing and memory peaks. Count actual simultaneous model inferences and contexts rather than bots.</p><p>Plan how the agent and model server restart after a host reboot, what happens when the network is unavailable, and where model files and backups are stored. A separate server also brings responsibility for access controls and updates. Always-on decisions include cooling, noise, reliable storage, and recovery, not just throughput.</p><p>Hermes managed local models and OpenClaw's managed llama.cpp path are features of specific runtimes and releases supported by each project. Check platform and feature requirements against the official documentation for your installed version. Do not treat claims about a managed option as guarantees for every configuration that runs Ollama or LM Studio directly.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-3.webp" alt="An always-on server setup with ventilation, wired networking, backup power, and maintenance notes." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Always-on operation also involves heat, power, and recovery paths.</figcaption></figure><section><h2>Test on your current hardware and decide what to change</h2><p>If you occasionally summarize one meeting note and use only a read tool, start with a small model on your current PC. Check the actual file and quantization, context limit, and runtime support, then test in order: load the model, hold a short conversation, submit the note, call the read tool once, and complete the summary. Record the failing stage to distinguish memory pressure from tool incompatibility.</p><p>For long meeting notes or multiple files, test with your usual apps open and real input lengths. Reducing context saves memory but also reduces the material the model can see. Summarizing documents in parts or retrieving only relevant passages can limit input, but does not guarantee the same result as reading the entire source at once, so a person should check for omissions.</p><p>If memory pressure occurs only with concurrent requests, first test queueing requests or unloading the model while idle. If inference is repeatedly measured as the bottleneck and the wait interrupts work, consider more GPU or unified memory or a separate model server. A GPU change will not fix a search or tool-call problem.</p><p>If you do not need the system always on, start the Gateway and model on a desktop only when needed. For messaging, scheduled reports, or remote access, include power, network, restart, and access-control requirements in the operating setup. Decide after testing the actual task, context, tool round trips, concurrency, and idle operation rather than buying based on model-file size alone.</p><ul><li><a href="https://localai.co.kr/en/speed">Compare device and model speed</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Estimate memory beyond model weights</a></li></ul></section><aside><h2>Check speed for my hardware and model combination</h2><p>Check model loading, prefill, and token-generation speed together.</p><a href="https://localai.co.kr/en/speed">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local AI agent PC accepts a task, runs model inference and file or search tools in sequence, and returns a result. The runtime and model server can share one computer or be separate. Using meeting summarization as an example, this guide explains how to choose hardware based on real input length, tool round trips, concurrent work, and always-on operation.</dd></div><div><dt>How much memory does it need?</dt><dd>File size helps narrow the first model candidates, but it is not the full memory requirement. Weights load into memory, and context cache, inference runtime, the operating system, and other apps use space too. Whether some weights can reside on the GPU and the rest in system RAM depends on the runtime, model format, and hardware.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI Agent Security: Check Permissions, Network Paths, and Secrets</title><link>https://localai.co.kr/en/guides/local-ai-agent-security-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-ai-agent-security-guide</guid><description>A local model does not automatically make tool execution or external connections safe. Review tool allowlists, sandbox limits, API binding, messenger and search data paths, key handling, and incident response.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Local AI Agent Security: Check Permissions, Network Paths, and Secrets</h1><p>Set file, tool, and network permissions separately for a local AI agent</p><p id="guide-page-summary">A local AI agent delegates work to a model on your computer and runs tools such as files, shells, and browsers. Summarization requires different permissions from file editing or message sending. Start with a read-only folder, then configure tool, sandbox, network, and secret access in stages.</p><p>On the first day you delegate a file summary, use a small read-only working folder without sensitive data. Map where messages and files enter, where the agent and model server run, and where search or MCP connections lead; this makes the required boundaries easier to define.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Grant read, write, message-sending, and shell permissions only as separately needed.</li><li>Sandboxing, tool policy, and network policy are separate controls.</li><li>If you suspect an incident, stop execution, rotate tokens, and restore access gradually.</li></ol></section><section><h2>Data can reach other services even when the model is local</h2><p>Local inference describes where the model runs. Telegram and Slack messages pass through messaging servers, and web search may send queries and some context to a search provider. MCP servers, remote model fallbacks, and external memory can each be separate recipients of data.</p><p>Record the message entry point, agent location, model API, each tool's destination, and log and memory storage. This shows which part of the path the word local actually describes. OpenClaw treats its privileged Gateway as a trust boundary and external channel or web content as untrusted input.</p><ul><li><a href="https://docs.openclaw.ai/gateway/security">OpenClaw security and trust boundaries</a></li><li><a href="https://localai.co.kr/en/guides/hermes-agent-local-guide">Install Hermes Agent and Connect a Local Model: From Your First Task to Permission Checks</a></li><li><a href="https://localai.co.kr/en/guides/openclaw-hermes-nemoclaw-comparison">OpenClaw, Hermes Agent, and NemoClaw Compared: Which Fits Your Tasks and Operating Style?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><section><h2>Start tools with read access and require approval for consequential actions</h2><p>File reading, file writing, browser access, search, shell commands, and message sending are distinct capabilities. Start a meeting-notes summary with read access to a folder containing copies, and allow edits only in a separate output folder. Require human review before external transfers, deletion, payment, or permission changes.</p><p>A tool allowlist reduces what the model can request, but it does not itself restrict file permissions or network access. External messages and documents may contain instructions to ignore prior directions; treat them as data, keep permissions narrow, and verify denials with harmless test files.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/guides/secure-hermes-on-a-work-machine">Secure Hermes Agent on a work machine</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-1.webp" alt="A permission cabinet storing separate keys for files, terminal, browser, messaging, and network" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Grant only the permissions each required tool needs.</figcaption></figure><section><h2>Inspect sandboxing and network binding separately</h2><p>Check which tools run inside a sandbox, which host files are mounted, and whether network access or privilege escalation is allowed. If project files or credentials are passed into a container, its tools can access them. Hermes's local terminal may use the user's account permissions, while its Docker backend requires separate configuration.</p><p>127.0.0.1 usually limits access to the host, while 0.0.0.0 can listen on all network interfaces. If you enable LAN access, also configure a firewall, authentication, and an allowlist; do not expose a Gateway or model API directly to the internet. NemoClaw also needs OpenShell isolation and network policies configured, so test the rules actually applied.</p><ul><li><a href="https://docs.openclaw.ai/gateway/sandboxing">OpenClaw sandboxing scope</a></li><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/security">Hermes Agent security settings</a></li><li><a href="https://docs.nvidia.com/nemoclaw/user-guide/openclaw/reference/network-policies">NemoClaw network policies</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="An agent device inside an isolated area, apart from personal files and network" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check which files and network paths the sandbox actually contains.</figcaption></figure><section><h2>Review messaging, search, and secret handling</h2><p>Restrict who can invoke a messaging bot with pairing or a user-ID allowlist, and define what it reads in group conversations and which tools it can use. Check what queries and context a search provider receives, and review domain restrictions that prevent access to internal addresses or cloud metadata. Keep web tools disabled when a task does not need them.</p><p>Check whether an API listens on localhost, a LAN address, or a public address, and apply authentication, TLS, and origin restrictions as appropriate. Do not copy keys or tokens into prompts, logs, or repositories; limit the environment variables and files the agent can read. If exposure is suspected, revoke and rotate the credential, then inspect logs and connected permissions.</p><ul><li><a href="https://hermes-agent.nousresearch.com/docs/user-guide/configuration">Hermes Agent configuration</a></li></ul></section><section><h2>Stop and recover in stages when behavior looks suspicious</h2><p>If you see unexpected file access or message sending, stop the agent and scheduled jobs and disable exposed connections or tokens. Record the time, affected accounts and paths, and recipients; preserve processes and logs for investigation. Logs may contain sensitive content, so restrict access to the investigation copy.</p><p>Compare recent tool calls, shell and Gateway records, file timestamps, and messaging history. Replace exposed credentials for the model API, bot, MCP, and memory services. Narrow network access, disable unnecessary tools, and restart with read-only tests; restore write and sending capabilities one at a time. If the scope is unclear, follow your organization's security process or contact the provider.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-3.webp" alt="A recovery desk with an emergency stop, disconnected network, replacement keys, and preserved records" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For suspicious behavior, stop, block access, preserve records, and rotate keys.</figcaption></figure><aside><h2>Verify OpenClaw with a constrained read-only task</h2><p>Verify an ordinary response, the Gateway, and a real tool call in order.</p><a href="https://localai.co.kr/en/guides/openclaw-local-agent-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local AI agent delegates work to a model on your computer and runs tools such as files, shells, and browsers. Summarization requires different permissions from file editing or message sending. Start with a read-only folder, then configure tool, sandbox, network, and secret access in stages.</dd></div><div><dt>How much memory does it need?</dt><dd>Compare recent tool calls, shell and Gateway records, file timestamps, and messaging history. Replace exposed credentials for the model API, bot, MCP, and memory services. Narrow network access, disable unnecessary tools, and restart with read-only tests; restore write and sending capabilities one at a time. If the scope is unclear, follow your organization's security process or contact the provider.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Do you need an NVIDIA GPU and CUDA for local AI?</title><link>https://localai.co.kr/en/guides/cuda-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cuda-local-ai-guide</guid><description>Understand the different roles of local AI apps, frameworks, the CUDA Toolkit and NVIDIA drivers, and find out when you need an NVIDIA GPU or another compute path.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Do you need an NVIDIA GPU and CUDA for local AI?</h1><p>CUDA is the foundation for running AI computations on NVIDIA GPUs.</p><p id="guide-page-summary">CUDA is a software platform that helps programs use NVIDIA GPU computing units in parallel. Local AI applications use it to run model computations on the GPU. Installing an application and developing your own code require different preparation, so this guide explains the roles of the driver, runtime libraries, and CUDA Toolkit.</p><p>Suppose you install a local AI application to summarize documents. Once the application recognizes your GPU, it can use it for model computation. If its device list shows only the CPU, check the application's GPU support and the driver first, then decide whether development tools are needed.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Applications, frameworks, Toolkit, and drivers have different roles; application use and CUDA development need different installations.</li><li>The CUDA level in nvidia-smi, the nvcc version, and the framework runtime are different values.</li><li>Mac and AMD use non-CUDA backends; GPU detection alone does not confirm model fit or support for every operation.</li></ol></section><section><h2>When the application lists only CPU</h2><p>If a company document-summarization app lists only CPU, check its official support information for GPU paths and settings. Look for the selected device in the interface or logs. Whether the application supports CUDA and whether the PC has CUDA development tools are separate questions.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/cuda-pytorch-gpu-check-guide">When PyTorch seems to use the CPU despite an NVIDIA GPU</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-basics-1.webp" alt="A desk with a monitor showing a bright screen, a desktop with a graphics card, and a closed toolbox" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A packaged app may include its own runtime components; CUDA Toolkit is mainly needed to build CUDA code.</figcaption></figure><section><h2>Separate CUDA requirements for app use and software development</h2><p>A packaged application such as Ollama may bundle or manage its runtime libraries; follow its installation guide, which often does not require a separate CUDA Toolkit. For direct PyTorch work, select the OS, package manager, language, and compute platform in the official installer selector. A PyTorch package may include CUDA runtime components, but its build and driver still need to support the GPU and OS.</p><p>Compiling CUDA code or building an extension may require nvcc from the Toolkit. The driver connects the operating system to GPU recognition and CUDA execution. If the application cannot see the GPU, check the driver and device detection before adding the Toolkit.</p><p>The CUDA Version in nvidia-smi generally indicates the level supported by the driver; nvcc --version reports the development Toolkit compiler found on PATH. The framework's bundled CUDA runtime may be another value. Different numbers do not by themselves mean installation failed; compare what each reports.</p><p>Applications and frameworks often manage libraries such as cuDNN and cuBLAS from the CUDA-X collection. Developers may inspect those components; general users should check GPU requirements in the application's compatibility list.</p><ul><li><a href="https://developer.nvidia.com/cuda/cuda-x-libraries">NVIDIA CUDA-X libraries</a></li><li><a href="https://www.youtube.com/watch?v=w9_GrgPh76k">Andeulgonghak reference video on the CUDA ecosystem</a></li><li><a href="https://github.com/ggml-org/llama.cpp">GPU backends supported by llama.cpp</a></li></ul></section><section><h2>Check GPU detection and actual model placement</h2><p>Applications may load the whole model onto the GPU or run only some layers there. After sending a document summarization request, check the application's GPU offloading settings and the device and layer placement shown in its logs to see where computation runs.</p><p>VRAM also holds KV cache and runtime buffers in addition to weights. If space is insufficient, the application may leave some work in system RAM or on CPU, affecting latency and concurrency. Inspect model placement and remaining memory in logs.</p><p>Required operations depend on GPU generation and compute features, OS, driver, application build, model format, and kernels. Older GPUs may lack newer features or precision support, so compare NVIDIA compatibility information with the app's model support list.</p></section><figure><img src="https://localai.co.kr/guides/cuda-basics-3.webp" alt="Part of a model-sized pile of blocks placed beside a desktop graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>VRAM holds model weights, the conversation's KV cache, and runtime buffers together.</figcaption></figure><section><h2>Local execution paths are available beyond NVIDIA</h2><p>On AMD, check whether the application offers a ROCm or Vulkan backend for the specific card and OS. An AMD GPU does not automatically imply ROCm support; compatibility varies by generation, model, and driver.</p><p>Apple Silicon Macs use applications with Metal or MLX support. Developing a CUDA-specific library requires the NVIDIA hardware and operating system that the library supports.</p><p>CPU, Metal, AMD backends, and browser-based local WebGPU can also be options. Not every browser application computes locally, so check whether model work is sent to a remote server. CPU execution may take longer for large models or long contexts; match supported models to the task.</p><ul><li><a href="https://github.com/ml-explore/mlx">MLX for Apple silicon</a></li><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD ROCm GPU and OS compatibility matrix</a></li><li><a href="https://github.com/ggml-org/llama.cpp">Platform-specific backends in llama.cpp</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-basics-2.webp" alt="Two graphics-card desktops and one laptop using different execution paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Local models can use different backends; CUDA is the path for NVIDIA GPUs.</figcaption></figure><section><h2>Verify support and fit with official documentation and a small task</h2><p>Check the application's OS, GPU, backend, and minimum driver requirements. A laptop GPU can differ in power and memory from a similarly named desktop card, so use the laptop's actual specification. A model card's recommendation does not replace the application's compatibility list.</p><p>For an NVIDIA application, use nvidia-smi to check driver detection and follow the application's installation guide. If the OS cannot see the GPU, resolve the driver and system issue first. For direct PyTorch installation, use the current combination from the official selector rather than an old fixed cuXXX URL.</p><p>Run one small task and inspect application device information, framework CUDA availability, and GPU use during the task together. Short tasks may show low utilization, and VRAM allocation alone does not prove computation, so review logs too.</p><ul><li><a href="https://pytorch.org/get-started/locally/">PyTorch official install selector</a></li><li><a href="https://docs.nvidia.com/deploy/cuda-compatibility/latest/">NVIDIA CUDA driver compatibility</a></li></ul></section><section><h2>Choose software and hardware based on what the checks show</h2><p>If the application detects the GPU and summarizes documents well, there is no need to add the Toolkit. If a CUDA-required application's GPU or driver does not meet its conditions, prepare the environment according to its instructions. For PyTorch development, use the official selector for the framework and driver; for compiling CUDA code, prepare Toolkit and nvcc.</p><p>Keep the current system if speed and supported models are sufficient. Compare hardware changes against documented requirements only when the application lacks a needed backend or model/context memory prevents the task. Do not buy a GPU or Toolkit merely because a guide mentions CUDA.</p></section><aside><h2>Open PyTorch’s official install selector</h2><p>Check the current installation requirements for your app or framework before installing the CUDA Toolkit separately.</p><a href="https://pytorch.org/get-started/locally/">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>CUDA is a software platform that helps programs use NVIDIA GPU computing units in parallel. Local AI applications use it to run model computations on the GPU. Installing an application and developing your own code require different preparation, so this guide explains the roles of the driver, runtime libraries, and CUDA Toolkit.</dd></div><div><dt>How much memory does it need?</dt><dd>VRAM also holds KV cache and runtime buffers in addition to weights. If space is insufficient, the application may leave some work in system RAM or on CPU, affecting latency and concurrency. Inspect model placement and remaining memory in logs.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Check the application's OS, GPU, backend, and minimum driver requirements. A laptop GPU can differ in power and memory from a similarly named desktop card, so use the laptop's actual specification. A model card's recommendation does not replace the application's compatibility list.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>When PyTorch seems to use the CPU despite an NVIDIA GPU</title><link>https://localai.co.kr/en/guides/cuda-pytorch-gpu-check-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cuda-pytorch-gpu-check-guide</guid><description>Diagnose why a GPU is missing or a model runs on CPU by separating nvidia-smi, the PyTorch CUDA build, torch.version.cuda and nvcc.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">When PyTorch seems to use the CPU despite an NVIDIA GPU</h1><p>When PyTorch runs on CPU, diagnose it in the same environment</p><p id="guide-page-summary">An NVIDIA GPU can be visible while a PyTorch model still runs on CPU. In the same terminal or notebook that ran the model, use nvidia-smi to check driver detection, a read-only Python snippet to inspect the PyTorch build and CUDA availability, then examine model placement and application logs. nvidia-smi, torch.version.cuda, and nvcc --version report different things.</p><p>If document summarization in an IDE is slow and CPU-bound while nvidia-smi on the same computer shows a GPU, check the system, Python environment, and model device in sequence. A terminal and IDE may use different Python installations, so run diagnostics in the environment where the failure occurred.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>nvidia-smi reports driver and GPU detection; nvcc --version reports the installed toolkit compiler.</li><li>torch.version.cuda is the CUDA version of the imported PyTorch build; torch.cuda.is_available() reports availability to the current process.</li><li>CUDA availability alone does not show whether the model is computing on GPU; also inspect model placement, application logs, and VRAM.</li></ol></section><section><h2>Check whether the driver detects the GPU</h2><p>Run nvidia-smi to inspect the driver version, GPU detection, and memory use. If the command is missing or no device appears, check the operating system and driver before changing PyTorch packages. In WSL2, the Windows host provides the CUDA GPU driver; do not install a Linux NVIDIA driver inside WSL.</p><p>The CUDA Version shown by nvidia-smi is the level supported by the driver, not the installed development toolkit version. Check the toolkit compiler with nvcc --version. A prebuilt PyTorch package may include CUDA runtime components even when nvcc is absent, but a compatible driver is still required.</p><table><caption>The three CUDA indicators describe different components.</caption><thead><tr><th scope="col">How to check</th><th scope="col">What it tells you</th></tr></thead><tbody><tr><th scope="row">nvidia-smi</th><td>GPU detected by the driver and its supported CUDA level</td></tr><tr><th scope="row">torch.version.cuda</th><td>CUDA build version of the currently imported PyTorch</td></tr><tr><th scope="row">nvcc --version</th><td>Compiler version of the installed CUDA development toolkit</td></tr></tbody></table><ul><li><a href="https://docs.nvidia.com/cuda/cuda-quick-start-guide/">NVIDIA CUDA quick start: checking the GPU and driver</a></li><li><a href="https://docs.nvidia.com/cuda/wsl-user-guide/index.html">NVIDIA CUDA on WSL guide</a></li><li><a href="https://localai.co.kr/en/guides/cuda-local-ai-guide">Do you need an NVIDIA GPU and CUDA for local AI?</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-check-1.webp" alt="A GPU workstation beside a driver card, software box, and compiler toolkit box" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The driver, framework runtime, and development toolkit describe different parts of CUDA.</figcaption></figure><section><h2>Run CUDA diagnostics in the failing Python environment</h2><p>Run the code below in the same terminal or notebook where the model failed. It prints the Python path, PyTorch build, and CUDA availability for the current process; it does not run a model or tensor operation or change files.</p><p>First check that the Python path points to the expected environment. If not, correct the IDE interpreter and rerun. If torch.version.cuda is None, the imported PyTorch is likely not a CUDA build; torch.cuda.is_available() reports whether this process can use CUDA. These values may differ from the driver's CUDA level shown by nvidia-smi.</p><p>From CUDA 11 onward, minor-version compatibility within a major release is available under minimum driver conditions, with some feature limitations. New features, GPU architectures, PTX compilation, and library combinations may have additional requirements. If the result is False or an error identifies the driver, check the PyTorch selector and NVIDIA compatibility table.</p><div><p><strong>Read-only CUDA availability diagnostic</strong></p><pre><code data-guide-code-block="1-0">import sys
import torch

print("Python:", sys.executable)
print("PyTorch:", torch.__version__)
print("PyTorch CUDA build:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))
    print("Device count:", torch.cuda.device_count())</code></pre><p><small>This does not start model computation. Run it in the same Python environment that failed.</small></p></div><ul><li><a href="https://pytorch.org/get-started/locally/">PyTorch official install selector</a></li><li><a href="https://docs.pytorch.org/docs/stable/generated/torch.cuda.is_available.html">Official torch.cuda.is_available() API documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-check-2.webp" alt="An empty device card, graphics card, and development toolkit box in a workspace" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check driver detection before investigating a framework or compiler.</figcaption></figure><section><h2>Check the actual device in model parameters and app logs</h2><p>CUDA available: True and a GPU name show that Python found a device. For a single-GPU model, next(model.parameters()).device can reveal parameter placement, but CPU may still be used if code selects it or tensor devices do not match. For a distributed model, inspect application logs and distribution settings instead of relying on the first parameter.</p><p>Run the same document summary and check whether logs record GPU selection or CPU fallback. A short request may show low GPU utilization, and VRAM use indicates model loading but not necessarily computation. PyTorch ROCm builds can use torch.cuda.* as a compatibility interface; on AMD, distinguish the backend with torch.version.hip and its installation guide. CUDA-specific libraries and custom operations may not work in other builds.</p><ul><li><a href="https://docs.pytorch.org/docs/stable/cuda.html">PyTorch CUDA API reference</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-check-3.webp" alt="A local AI workspace with a monitor showing no text and a graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even when the framework sees the GPU, confirm the actual device in application logs.</figcaption></figure><section><h2>Change one item based on the diagnostic result</h2><p>If nvidia-smi cannot find the GPU, check the card connection and whether the operating-system driver supports the GPU. For WSL2, inspect both host and guest configuration. If the GPU and driver appear but is_available() is False, examine the failing process's Python path and PyTorch build. Select the OS, package manager, Python, and compute platform in the official PyTorch selector, then install its recommended combination in the project environment.</p><p>If CUDA is True but the model remains on CPU, check the application's CUDA backend and GPU offload settings, and whether the model and context fit available VRAM and headroom. Insufficient memory can move some computation to CPU or cause failure. Change one relevant option at a time, rather than changing PyTorch and the application together, then retest with the same document.</p><ul><li><a href="https://docs.nvidia.com/deploy/cuda-compatibility/minor-version-compatibility.html">NVIDIA CUDA minor-version compatibility</a></li></ul></section><section><h2>Rerun the same task and collect error details</h2><p>After changing a setting, rerun the same document summary in the same IDE notebook. Check logs for GPU/backend selection and runtime errors. If the problem persists, collect the GPU model and OS, driver version and CUDA display from nvidia-smi, Python path from the failing notebook, PyTorch version, torch.version.cuda, is_available() result, application device setting, and error message.</p><p>Redact personal directory names from the Python path before sharing it. Full environment variables or a success from another Python session are not needed to explain the current failure.</p></section><aside><h2>Check your environment in PyTorch’s official install selector</h2><p>Choose your OS, Python environment and desired compute platform to see current installation instructions.</p><a href="https://pytorch.org/get-started/locally/">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>An NVIDIA GPU can be visible while a PyTorch model still runs on CPU. In the same terminal or notebook that ran the model, use nvidia-smi to check driver detection, a read-only Python snippet to inspect the PyTorch build and CUDA availability, then examine model placement and application logs. nvidia-smi, torch.version.cuda, and nvcc --version report different things.</dd></div><div><dt>How much memory does it need?</dt><dd>Run nvidia-smi to inspect the driver version, GPU detection, and memory use. If the command is missing or no device appears, check the operating system and driver before changing PyTorch packages. In WSL2, the Windows host provides the CUDA GPU driver; do not install a Linux NVIDIA driver inside WSL.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Will two GPUs make a local LLM twice as fast?</title><link>https://localai.co.kr/en/guides/multi-gpu-local-llm-scaling-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/multi-gpu-local-llm-scaling-guide</guid><description>Learn how multi-GPU memory placement, model parallelism and replica throughput differ, and decide when a second GPU is useful.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Will two GPUs make a local LLM twice as fast?</h1><p>Evaluate multi-GPU capacity, answer speed, and request throughput separately</p><p id="guide-page-summary">Multi-GPU systems can partition one large model across cards or place replicas on each card to distribute requests. VRAM does not merge automatically; runtime support and interconnect determine what is possible. Check model fit, single-answer speed, and multi-request throughput separately.</p><p>When considering a second GPU, first identify whether one model does not fit in memory, one answer is slow, or multiple users need concurrent access. The goal determines the parallel method, metric, and interconnect to evaluate.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The runtime must support partitioning model and cache to use VRAM across cards.</li><li>Layer splitting can expand capacity, but single-request latency does not fall in proportion to card count.</li><li>Replicas serve separate requests; partitioning uses multiple GPUs for one model execution.</li></ol></section><section><h2>Two visible GPUs still have separate memory</h2><p>Seeing both GPUs in the operating system or nvidia-smi does not mean the summarization app uses them. Each card has separate VRAM, and the runtime must be configured to distribute weights and KV cache. Without a multi-GPU build or selection, the second card does not participate.</p><p>Beyond weights, memory is needed for context KV cache, temporary buffers, the framework, and display output. Unequal card capacities can change layer and buffer placement, so test with the actual model format, precision, and context length, then inspect per-GPU memory and any CPU-resident portion.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/multi-gpu.md">llama.cpp multi-GPU splitting guide</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Running local LLMs across two or more GPUs</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-1.webp" alt="An open desktop with one GPU and a blank monitor, with papers on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A second card may not be needed if the current model and context fit on one GPU.</figcaption></figure><section><h2>Check each runtime's supported model partitioning methods</h2><p>llama.cpp documents none, layer, row, and tensor modes. none uses one GPU; layer distributes model layers and KV cache across cards. A document-summary input passes through earlier layers before intermediate results move to the next card, allowing weights that do not fit on one card to be loaded. It does not mean both cards compute the same layer of each token simultaneously.</p><p>Tensor mode splits computation within a layer and may exchange results frequently between cards. llama.cpp marks row as deprecated and does not recommend it for new setups; tensor is experimental with limited architecture and configuration support. vLLM also offers tensor and pipeline parallelism, but GPU, model, and batch requirements must be checked. Do not transfer options directly between runtimes; compare using the actual summary request.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama.cpp server partitioning options</a></li><li><a href="https://docs.vllm.ai/en/latest/serving/parallelism_scaling/">vLLM parallelism and scaling</a></li><li><a href="https://www.youtube.com/watch?v=w9_GrgPh76k">Andeulgonghak video on the CUDA ecosystem and runtime libraries</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-2.webp" alt="An open desktop with two graphics cards and divided stacks of paper on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Layer splitting distributes a model across GPUs but does not automatically halve token-generation time.</figcaption></figure><section><h2>Replicating the model lets you distribute requests.</h2><p>If the model fits on one card, a replica on each GPU can handle different requests. This may increase aggregate throughput for multiple users, but it does not split one request and therefore does not automatically increase generation speed for an individual chat. The server must route requests to replicas, and the model must fit separately in each card's memory.</p></section><figure><img src="https://localai.co.kr/guides/cuda-multi-gpu-3.webp" alt="Several stacks of paper in front of a desktop containing two GPUs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Replicas serve separate requests, so distinguish single-answer speed from aggregate throughput.</figcaption></figure><section><h2>PCIe, NVLink, and NCCL are different components</h2><p>Desktop GPUs are generally connected through PCI Express. Actual bandwidth can depend on slot wiring, CPU/chipset layout, drivers, and GPU peer-to-peer support. NVLink is a separate high-speed interconnect available on some GPUs and systems; NVSwitch expands connections among multiple GPUs. Not all consumer cards support these features, and installing two cards does not create NVLink.</p><p>NCCL is a collective communication library that helps GPUs combine and synchronize results; it is not a cable or the physical GPU connection. The system uses direct communication where available or another transport. Frequent exchanges in tensor parallelism can make communication wait exceed computation, and data-center training figures cannot be applied to personal inference speed.</p><ul><li><a href="https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/troubleshooting/gpu_troubleshooting.html">NCCL GPU direct communication and P2P guide</a></li><li><a href="https://www.youtube.com/watch?v=lr5kzD67O_U">Andeulgonghak video on CUDA, NVLink, and Mellanox systems</a></li></ul></section><section><h2>Test the same request before buying a second GPU</h2><p>Run the target document summary on one GPU first and inspect model placement per GPU, layers left on CPU, KV cache, and context headroom. For a two-card setup, check official documentation for model/method support and required build options. Verify case, power supply, motherboard, PCIe link, and P2P support; slot shape alone does not reveal bandwidth.</p><p>For model capacity, test supported layer splitting; for single-answer latency, test a supported tensor or pipeline method for that model; for queued users, test replicas. Keep the document, prompt, output tokens, context, precision, runtime version, and concurrency the same while comparing latency and per-card memory. Because cost, power, and heat also increase, revisit supported settings and interconnect if the target does not improve.</p></section><aside><h2>Read the official llama.cpp multi-GPU guide</h2><p>Check which split modes and limitations apply to your model and build.</p><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/multi-gpu.md">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Multi-GPU systems can partition one large model across cards or place replicas on each card to distribute requests. VRAM does not merge automatically; runtime support and interconnect determine what is possible. Check model fit, single-answer speed, and multi-request throughput separately.</dd></div><div><dt>How much memory does it need?</dt><dd>Seeing both GPUs in the operating system or nvidia-smi does not mean the summarization app uses them. Each card has separate VRAM, and the runtime must be configured to distribute weights and KV cache. Without a multi-GPU build or selection, the second card does not participate.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run local AI with MLX on Apple Silicon: frameworks and model tools explained</title><link>https://localai.co.kr/en/guides/mlx-apple-silicon-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mlx-apple-silicon-local-ai-guide</guid><description>MLX, MLX-LM, Metal, PyTorch MPS and GUI apps play different roles. Check Apple Silicon versus Intel Mac, unified-memory limits and model-specific support before choosing a runtime.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run local AI with MLX on Apple Silicon: frameworks and model tools explained</h1><p>Check the chip and checkpoint before running a model with MLX on Apple silicon</p><p id="guide-page-summary">MLX is a framework for computing AI models on Apple Silicon CPUs and GPUs. To use a language model in conversation, pass a compatible model and a question to a tool such as MLX-LM. This guide explains how to check your Mac and model format, then choose a tool.</p><p>Running a language model requires matching the Mac's chip with the file format in the model repository. This guide covers loading an MLX checkpoint with MLX-LM on Apple silicon and starting a short conversation.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>MLX is the compute framework; MLX-LM is the language-model runtime tool.</li><li>Even though CPU and GPU share unified memory, the OS, apps, weights, and KV cache all use it.</li><li>CUDA code and Intel Macs do not automatically switch to the MLX path.</li></ol></section><section><h2>Distinguish MLX from the tools around it</h2><p>MLX-LM is a Python package that uses MLX for language-model inference and fine-tuning. Load a model, enter a question, and it generates an answer. Choose a compatible checkpoint with the required model implementation and configuration.</p><p>Metal is macOS technology for parallel GPU computation and underlies MLX on Mac. PyTorch MPS is a backend for using Apple GPUs from PyTorch, so model packages and execution paths differ. GUI apps such as LM Studio are another option; check supported formats and controls for the specific app version.</p><ul><li><a href="https://github.com/ml-explore/mlx">Official MLX project</a></li><li><a href="https://github.com/ml-explore/mlx-lm">Official MLX-LM repository</a></li><li><a href="https://developer.apple.com/documentation/metal/mtldevice/hasunifiedmemory">Apple Metal unified-memory documentation</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mlx-platform-basics-2.webp" alt="A desk with a notebook, turned laptop, metal ruler, hand tools, and closed file" width="1536" height="768" loading="lazy" decoding="async"><figcaption>Framework, model tool, and GPU foundation are separate layers.</figcaption></figure><section><h2>Choose an installation path for the Mac chip</h2><p>MLX's Mac installation and optimization assume Apple silicon. Check About This Mac for an M-series chip. The same commands do not follow the same path on Intel Macs, so compare llama.cpp tools or GUI engines that explicitly support Intel.</p><p>Changing .to("cuda") or an NVIDIA device setting to mlx does not make CUDA code run on Mac. The MLX project also documents a separate Linux CUDA backend, but it does not automatically convert PyTorch CUDA models, extensions, or operations to MLX. Check model implementation, weight format, kernels, and dependencies individually.</p><p>A model may load successfully but run out of memory with longer input. [MLX-LM memory and speed settings](/guides/mlx-lm-memory-speed-guide) explains how to adjust quantization and the KV cache.</p><ul><li><a href="https://ml-explore.github.io/mlx/build/html/install.html">MLX installation and Linux CUDA backend guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mlx-platform-basics-3.webp" alt="Three work areas with two laptops and a desktop showing a graphics card" width="1536" height="768" loading="lazy" decoding="async"><figcaption>Choose model files and runtime paths that match the chip.</figcaption></figure><section><h2>Account for non-model use of unified memory</h2><p>Apple Silicon CPUs and GPUs share physical memory. MLX arrays use it to reduce copies between CPU and GPU. macOS, apps, model weights, intermediate computations, and the growing conversation KV cache all use the installed memory.</p><p>A 24 GB Mac cannot devote all 24 GB to weights. Long inputs need working space during processing, and the KV cache grows during generation. Quantization can reduce weight size but does not remove loading workspace, computation memory, or cache. Check headroom with the applications you actually use rather than relying on file size alone.</p></section><figure><img src="https://localai.co.kr/guides/mlx-platform-basics-1.webp" alt="Blocks divided among a tray and small bowls beside a closed laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The operating system and running apps use the same memory pool.</figcaption></figure><section><h2>Check the model card and MLX-LM support</h2><p>Find an MLX checkpoint on the Hugging Face model card and check the architecture in MLX-LM's support list. Start with a short text generation. For community conversions, also check the conversion date, original model version, tokenizer configuration, and license.</p><p>Some models may require custom tokenizer code or permission to run repository code. Review the source and code before enabling that permission; test image input and tool calling separately from basic generation on the current version.</p></section><section><h2>Choose a terminal, GUI, or PyTorch path for the task</h2><p>MLX-LM is a starting point for directly loading a model from Python or testing it quickly. If you want to select models and manage APIs and conversation history in a visual interface, compare GUI apps that offer an MLX engine. A GUI using MLX does not necessarily expose every MLX-LM option or model.</p><p>For an existing PyTorch project, first check whether its model and code run on MPS. The same Mac does not determine a performance ranking: model implementation, operations, library version, input length, and memory state all matter. For comparison, align model family, quantization, and input/output lengths, and record runtime differences.</p><p>To move a CUDA project to Mac, first look for an MLX checkpoint and example; if none exists, retain the CUDA environment or find another supported runtime. For image or audio models, do not infer support from MLX-LM documentation; check the relevant ecosystem tool.</p></section><aside><h2>View the official MLX-LM installation and model guide</h2><p>Check current MLX-LM installation steps and support for the model you want.</p><a href="https://github.com/ml-explore/mlx-lm">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MLX is a framework for computing AI models on Apple Silicon CPUs and GPUs. To use a language model in conversation, pass a compatible model and a question to a tool such as MLX-LM. This guide explains how to check your Mac and model format, then choose a tool.</dd></div><div><dt>How much memory does it need?</dt><dd>A model may load successfully but run out of memory with longer input. [MLX-LM memory and speed settings](/guides/mlx-lm-memory-speed-guide) explains how to adjust quantization and the KV cache.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Find an MLX checkpoint on the Hugging Face model card and check the architecture in MLX-LM's support list. Start with a short text generation. For community conversions, also check the conversion date, original model version, tokenizer configuration, and license.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run a 3B Model with MLX-LM and Read Its Speed: First Load, Prefill, Decode, and KV Cache</title><link>https://localai.co.kr/en/guides/mlx-lm-memory-speed-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mlx-lm-memory-speed-guide</guid><description>Run the official MLX-LM default 3B 4-bit model in a separate Python environment, then examine model loading, prompt processing, token generation, and memory pressure separately. No speed ranking is asserted without measurements.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Run a 3B Model with MLX-LM and Read Its Speed: First Load, Prefill, Decode, and KV Cache</h1><p>Separate model loading, prompt processing, and generation speed in MLX-LM</p><p id="guide-page-summary">MLX-LM is a Python tool that loads MLX-format language models on Apple Silicon Macs, reads an input, and generates an answer. This guide runs the official example model, mlx-community/Llama-3.2-3B-Instruct-4bit, in a virtual environment and separates first model loading, prompt prefill, answer decoding, and the KV cache that grows during a conversation.</p><p>A first run also spends time downloading model files and loading weights into memory. A follow-up question in the same process reuses the prepared model, so combining the two timings makes it difficult to identify the slow stage.</p><p>First confirm that a short basic generation works, then use the input and answer lengths you expect in practice. To evaluate Korean answer quality, test separately with real Korean material rather than the English prompt in the command.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>3B 4-bit identifies the official starter model; it does not guarantee it will run on every Mac.</li><li>Record prefill and decode, and cold starts and warm sessions, as separate stages.</li><li>Longer inputs and outputs can increase KV-cache and memory use, so check answer quality too.</li></ol></section><section><h2>Run the official 3B model in a virtual environment</h2><p>The MLX-LM repository uses mlx-community/Llama-3.2-3B-Instruct-4bit as its default example. Its model card and configuration identify the Llama 3.2 3B Instruct architecture and 4-bit quantization. It is a starting point for learning the run path, not a proxy for other models' speed or memory requirements.</p><p>Installing MLX-LM in a project-specific Python virtual environment keeps its packages separate from existing work. The commands below create the environment, install the official package, and check operation with a short generation. The --max-tokens 128 option caps answer tokens; it is not the total context limit including the prompt.</p><p>A successful run prints an answer to the prompt in the terminal. If the model download fails, check the network connection and cache disk space. If the command is not found, verify the installation in the shell where `.venv` is active with `python -m pip show mlx-lm`. If memory pressure rises, close other apps first and retry with a shorter prompt to isolate the cause.</p><div><p><strong>Install MLX-LM in a virtual environment and generate a first answer</strong></p><pre><code data-guide-code-block="0-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx-lm
mlx_lm.generate --model mlx-community/Llama-3.2-3B-Instruct-4bit --prompt "Explain why prompt length affects generation time in two sentences." --max-tokens 128</code></pre><p><small>Check a short answer with the official default model ID.</small></p></div><ul><li><a href="https://github.com/ml-explore/mlx-lm">Official MLX-LM repository and supported models</a></li><li><a href="https://huggingface.co/mlx-community/Llama-3.2-3B-Instruct-4bit">Example 3B 4-bit model card</a></li><li><a href="https://ml-explore.github.io/mlx/build/html/install.html">Official MLX installation requirements</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><section><h2>Context and runtime need memory beyond the weights</h2><p>3B is an approximate parameter scale, and 4-bit describes weight precision. Quantization reduces weight storage, but execution also needs metadata and temporary compute space. Generation adds a KV cache, and long inputs need room during prefill too. Disk space for model files and unified memory during execution are separate resources.</p><p>Do not infer memory fit from the model name alone. macOS and apps such as browsers and development tools also use unified memory. Start with a short input while watching memory pressure in Activity Monitor; if pressure stays high or apps freeze, reduce context or close other apps to isolate the cause.</p><ul><li><a href="https://github.com/ml-explore/mlx-lm">MLX-LM installation and CLI guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mlx-platform-memory-1.webp" alt="Wooden blocks, a thick notebook, and a phone sit on one tray." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Weights, context, and other apps share unified memory.</figcaption></figure><section><h2>Measure prefill and decode separately</h2><p>Prefill is the stage where the model reads the prompt and computes its internal representations. It can lengthen the wait for the first token in a long-document summary. Decode follows, generating the answer token by token. A long input can delay the first answer, while a long requested output can extend generation; these feel like slowness for different reasons.</p><p>For comparisons, hold the model, prompt, and output cap constant, and record a cold start that downloads and loads files separately from a warm question in an active mlx_lm.chat session. Follow-up questions may include conversation history, so different input lengths are not equivalent prefill conditions.</p><p>If prompt-processing and generation rates are displayed, record them separately in input-token and output-token terms. Also note the MLX-LM version, macOS, Mac chip and memory, and apps running alongside it so you can reproduce the conditions later.</p></section><figure><img src="https://localai.co.kr/guides/mlx-platform-memory-2-repaired-20261016.webp" alt="Three panels show a closed laptop, a laptop displaying a document, and a laptop beside documents and prints." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record model loading, input processing, and answer generation times separately.</figcaption></figure><section><h2>KV-cache settings trade memory against retained context</h2><p>As a conversation grows, its KV cache, which stores key and value information for earlier tokens, can grow too. That is why success on a short question does not establish the same headroom for a long document. More output tokens can also increase cache and runtime, so expand input and output one at a time.</p><p>The --prefill-step-size option controls the chunk size for processing long inputs, while --max-kv-size sets a limit for supported cache configurations. Official documentation says smaller prefill chunks can lower peak memory during input processing but may slow it down. A lower rotating-cache limit can save RAM while dropping older context and changing answer quality.</p><p>The command below shows both settings together, but when diagnosing behavior, change one setting at a time and record the result before testing the other. For each run, check prefill time, memory pressure, and whether the model retains earlier instructions; revert the setting if the required context or answer quality is not maintained.</p><div><p><strong>Example using the options</strong></p><pre><code data-guide-code-block="3-0">mlx_lm.generate --model mlx-community/Llama-3.2-3B-Instruct-4bit --prompt "Summarize this short note." --max-tokens 128 --prefill-step-size 512 --max-kv-size 4096</code></pre><p><small>This example uses both options. When diagnosing behavior, change one value at a time.</small></p></div><ul><li><a href="https://github.com/ml-explore/mlx-lm/blob/main/mlx_lm/generate.py">MLX-LM generation options and KV cache</a></li></ul></section><section><h2>Judge performance by the waits you encounter most</h2><p>If you close the app or restart the computer each time, model loading matters most. If you ask several questions in one session, prefill and decode are more noticeable. Summarizing a long report briefly and generating a long draft from a short prompt also spend time in different stages. One average speed cannot describe every workflow.</p><p>After a warm-up, measure the same conditions three times and record the median to reduce the influence of an outlier. Separate cold start, warm session, prefill, decode, and peak memory, and note the model, input, output cap, version, and apps running alongside it. Check answer quality using the inputs and outputs you actually need.</p><p>If a short test runs out of memory or the model is unsupported, consider a smaller supported model or another runtime at that stage. Whether the real wait is acceptable while preserving needed context and answer quality is the evidence for choosing hardware.</p></section><figure><img src="https://localai.co.kr/guides/mlx-platform-memory-3.webp" alt="A notebook, equal-sized cards, and small trays are neatly arranged." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep conditions fixed and measure each wait stage separately.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Read the official MLX-LM installation and usage guide</h2><p>Check supported models and command options, then start with a short input.</p><a href="https://github.com/ml-explore/mlx-lm">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MLX-LM is a Python tool that loads MLX-format language models on Apple Silicon Macs, reads an input, and generates an answer. This guide runs the official example model, mlx-community/Llama-3.2-3B-Instruct-4bit, in a virtual environment and separates first model loading, prompt prefill, answer decoding, and the KV cache that grows during a conversation.</dd></div><div><dt>How much memory does it need?</dt><dd>3B is an approximate parameter scale, and 4-bit describes weight precision. Quantization reduces weight storage, but execution also needs metadata and temporary compute space. Generation adds a KV cache, and long inputs need room during prefill too. Disk space for model files and unified memory during execution are separate resources.</dd></div><div><dt>When is it better not to choose this?</dt><dd>Do not infer memory fit from the model name alone. macOS and apps such as browsers and development tools also use unified memory. Start with a short input while watching memory pressure in Activity Monitor; if pressure stays high or apps freeze, reduce context or close other apps to isolate the cause.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The MLX-LM repository uses mlx-community/Llama-3.2-3B-Instruct-4bit as its default example. Its model card and configuration identify the Llama 3.2 3B Instruct architecture and 4-bit quantization. It is a starting point for learning the run path, not a proxy for other models' speed or memory requirements.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI with ROCm and Radeon: Reading Support Combinations and Runtime Paths</title><link>https://localai.co.kr/en/guides/rocm-amd-local-ai-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rocm-amd-local-ai-guide</guid><description>Learn how ROCm/HIP differs from CUDA, how to check GPU, OS, driver and framework combinations in AMD’s support matrices, and how to distinguish Windows, WSL and Linux paths.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Local AI with ROCm and Radeon: Reading Support Combinations and Runtime Paths</h1><p>Check Radeon support across the GPU, operating system, and ROCm combination</p><p id="guide-page-summary">ROCm is a software stack for computing AI workloads on AMD GPUs. It connects drivers, runtimes, libraries, and frameworks such as PyTorch to run image-generation or language-model tasks. Find a supported combination for your GPU and operating system, then choose the app’s installation path.</p><p>To run PyTorch image workloads on a Radeon, match the operating system and application as well as the GPU model. This guide first checks one supported combination, then tests the connection with a small workload.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Use HIPIFY to convert supported calls in CUDA source to HIP form, then build for AMD.</li><li>Choose an installation path from the separate support matrix for the Radeon or Instinct product family.</li><li>Follow the documented installation and execution path for Windows, WSL, Linux, or Vulkan.</li></ol></section><section><h2>Distinguish the ROCm stack from HIP porting</h2><p>ROCm includes drivers, runtimes, compilers, math libraries, and framework integration. Image generation with PyTorch requires a compatible PyTorch build, ROCm version, and GPU kernels. Install a version combination listed in the official support matrix.</p><p>HIP is a C++ runtime API and GPU kernel language. Use HIPIFY to convert supported CUDA source calls to HIP, build for AMD, and connect libraries such as cuBLAS to their ROCm counterparts. After building, test an input and inspect the output and errors.</p><ul><li><a href="https://rocm.docs.amd.com/projects/HIP/en/latest/how-to/hip_porting_guide.html">AMD HIP porting guide</a></li><li><a href="https://rocm.docs.amd.com/projects/HIPIFY/en/latest/">AMD HIPIFY documentation</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/cuda-pytorch-gpu-check-guide">When PyTorch seems to use the CPU despite an NVIDIA GPU</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/cuda-to-rocm-porting-performance-guide">If you port CUDA code to AMD, will it run just as fast?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-basics-1.webp" alt="A wooden desk with a code notebook, a graphics card, and a separately packed disk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Port CUDA source to AMD with HIP and match the corresponding libraries.</figcaption></figure><section><h2>Find the product family and complete software combination in the support matrix</h2><p>AMD provides separate support paths for Radeon, Instinct, and Ryzen APUs. Find consumer Radeon cards in the ROCm on Radeon matrix; for data-center Instinct, check the server distribution, kernel, and software combination. Select the device, then follow the release listed for its product family and OS.</p><p>The latest AMD ROCm Core SDK is 10.1.0 and provides an integrated compatibility matrix. Find a row that supports your GPU, operating system, driver, kernel, ROCm, and framework together. Match the version in app installation instructions such as PyTorch to that row, then run the documented command.</p><ul><li><a href="https://rocm.docs.amd.com/en/latest/about/release-notes.html">AMD ROCm Core SDK 10.1.0 release notes</a></li><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD ROCm 10.1.0 compatibility matrix</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-basics-2.webp" alt="Two different graphics cards on a workbench beside paper and a calendar" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the OS, driver, ROCm, and framework along with the GPU.</figcaption></figure><section><h2>Choose the Windows, WSL, or Linux path based on the app</h2><p>On Linux, install a supported distribution, kernel, and driver combination. For native Windows PyTorch and WSL, follow the support scope and configuration documented for each. The WSL path may include a ROCDXG setup between the Windows host and Linux guest. Choose an OS/GPU combination supported by the app’s installation procedure.</p><p>When using Docker, prepare the host driver and pass the GPU into the container as described in the official container guide. Check that the device is visible inside the container, then install libraries and the model to isolate environment issues step by step.</p><ul><li><a href="https://rocm.docs.amd.com/en/latest/about/release-notes.html">AMD ROCm operating-system guidance</a></li><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD GPU and OS compatibility matrix</a></li><li><a href="https://rocm.docs.amd.com/en/latest/install/docker-containers.html">ROCm containers and host GPU access</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-basics-3.webp" alt="A laptop showing a landscape beside two desktop computers on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Windows, WSL, and Linux have different procedures and support conditions.</figcaption></figure><section><h2>Read PyTorch’s cuda naming together with the actual build</h2><p>PyTorch ROCm retains the `torch.cuda` namespace and `"cuda"` device label so existing APIs and code can be reused. To check whether the installed build uses ROCm, inspect `torch.version.hip` too; this value indicates whether the framework is built for the AMD HIP runtime.</p><p>If PyTorch cannot find the GPU, check the installed build, supported combination, and device connection in sequence. If the GPU is detected but one app fails, look in its logs for a required operation or extension package. Complete a small basic PyTorch operation, then test app features one at a time to locate the failure.</p><ul><li><a href="https://docs.pytorch.org/docs/main/notes/hip.html">PyTorch HIP and ROCm API guidance</a></li></ul></section><section><h2>Vulkan is a separate backend from ROCm</h2><p>llama.cpp provides a Vulkan backend for Radeon GPUs. Match the Vulkan driver and llama.cpp build options, then run the model using the app’s Vulkan instructions. Configure PyTorch image workloads that use ROCm through their separate execution path.</p><p>Run a small GGUF chat and PyTorch image workload to completion to check each feature. When comparing backend speed, use the same model, quantization, and input conditions.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md#vulkan">llama.cpp Vulkan backend build guide</a></li></ul></section><section><h2>Run a small workload to completion before buying</h2><p>If you already have a Radeon, prepare the app and model using a support-matrix installation path, then complete a small image workload through saving the output. Reopen the app, repeat the same input, and record quality, memory, and run time. When choosing a new GPU, select the model and app first, then compare VRAM and power requirements for supported cards.</p><p>When considering a combination absent from official documentation, plan for community configuration and maintenance work together. To reduce that burden, choose another GPU or backend officially supported by the app.</p></section><aside><h2>Check whether PyTorch detects your Radeon GPU</h2><p>Follow a diagnostic sequence to see whether your installed PyTorch finds the GPU.</p><a href="https://localai.co.kr/en/guides/rocm-radeon-pytorch-check-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ROCm is a software stack for computing AI workloads on AMD GPUs. It connects drivers, runtimes, libraries, and frameworks such as PyTorch to run image-generation or language-model tasks. Find a supported combination for your GPU and operating system, then choose the app’s installation path.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Install PyTorch ROCm on AMD Radeon and verify GPU operation</title><link>https://localai.co.kr/en/guides/rocm-radeon-pytorch-check-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rocm-radeon-pytorch-check-guide</guid><description>Using an RX 9070 XT and Ubuntu as an example, follow AMD's PyTorch installation path, understand torch.cuda versus HIP, and verify GPU discovery and a real image workload.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Install PyTorch ROCm on AMD Radeon and verify GPU operation</h1><p>Verify step by step that PyTorch uses a ROCm GPU on Radeon</p><p id="guide-page-summary">PyTorch takes image or text data, performs training or inference computations on a GPU, and returns result tensors or model output. ROCm builds on Radeon also retain the torch.cuda device API name, so verify the AMD-supported combination, install in an isolated Python environment, check the HIP build, and then test the actual app.</p><p>Using an RX 9070 XT Ubuntu desktop as an example, this guide checks device discovery separately from real computation. If the setup is outside a supported combination, align it first and repeat the checks.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check that the exact GPU, distribution, kernel, driver, ROCm, and PyTorch share a supported matrix row.</li><li>Inspect torch.cuda.is_available() together with torch.version.hip.</li><li>After a basic tensor calculation, test the workload in the actual model and app.</li></ol></section><section><h2>Match the exact GPU and supported combination first</h2><p>Identify whether the device is an RX 9070 XT, RX 9070, or integrated GPU. In AMD's unified compatibility matrix, match the GPU, Ubuntu version and kernel, driver, ROCm, and PyTorch along one supported path. As of September 27, 2026, ROCm Core SDK 10.0.0 had been released on August 26. Do not assemble versions from separate guides; if no matching row exists, start with a supported OS and version.</p><ul><li><a href="https://rocm.docs.amd.com/en/latest/about/release-notes.html">ROCm Core SDK 10.0.0 release notes</a></li><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD ROCm Unified Compatibility Matrix</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li><li><a href="https://localai.co.kr/en/guides/strata-windows-linux-install-guide">Install Strata on Windows or Linux and send a first prompt</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-check-1.webp" alt="A plant, paper, and magnifying glass sit beside a graphics card." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Before installation, match the GPU, OS, and driver in one support row.</figcaption></figure><section><h2>Install test Python packages in a virtual environment</h2><p>A virtual environment installs Python packages such as PyTorch in a project-specific space, separate from other work. This manages Python libraries; it does not install the host GPU driver. Follow AMD's OS-specific driver procedure, and check whether the selected package path includes user-space ROCm libraries or requires separate setup.</p><div><p><strong>Virtual environment for isolating Python packages</strong></p><pre><code data-guide-code-block="1-0">python3.12 -m venv ~/venvs/rocm-pytorch
source ~/venvs/rocm-pytorch/bin/activate
python -m pip install --upgrade pip wheel</code></pre><p><small>This isolates Python packages only. Follow the host installation guide for the GPU driver.</small></p></div><ul><li><a href="https://rocm.docs.amd.com/en/latest/deploy/linux/installer/install.html">AMD ROCm Linux installation guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-check-2.webp" alt="A small box and file organizer sit on a desk beside a closed desktop computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A virtual environment keeps test packages separate from existing Python setups.</figcaption></figure><section><h2>Select the official PyTorch wheel for your GPU</h2><p>This versioned example comes from AMD's selector with RX 9070 XT (gfx1201), Linux, ROCm 10.0, and PyTorch 2.13.0 selected. It uses torch 2.13.0+rocm10.0.0, torchvision 0.28.0+rocm10.0.0, torchaudio 2.11.0.2+rocm10.0.0, and AMD's wheel index. Do not copy it unchanged to another GPU or OS; select those again in the selector. A generic pip install torch from PyPI does not guarantee an AMD build.</p><div><p><strong>Example PyTorch installation for RX 9070 XT on Linux</strong></p><pre><code data-guide-code-block="2-0">python -m pip install --index-url https://stable.repo.amd.com/rocm/whl-next/ \
  "torch[device-gfx1201]==2.13.0+rocm10.0.0" \
  "torchvision[device-gfx1201]==0.28.0+rocm10.0.0" \
  "torchaudio==2.11.0.2+rocm10.0.0"</code></pre><p><small>These are example versions. Check your combination in the selector and matrix before installing.</small></p></div><ul><li><a href="https://rocm.docs.amd.com/projects/ai-ecosystem/en/latest/frameworks/pytorch/install.html?fam=radeon&amp;gfx=gfx1201&amp;gpu=rx-9070-xt&amp;i=pip&amp;os=linux&amp;pytorch-ver=2.13.0&amp;w=compute">AMD Radeon PyTorch selector for RX 9070 XT</a></li></ul></section><section><h2>Check the installed build and HIP runtime</h2><p>collect_env gathers the Python, OS, GPU, and runtime information detected by PyTorch. A HIP version shown in torch.version.hip is an indicator of a ROCm build. Redact personal paths, tokens, API keys, and other secrets before sharing the output.</p><div><p><strong>Print PyTorch environment information</strong></p><pre><code data-guide-code-block="3-0">python -m torch.utils.collect_env</code></pre><p><small>Redact personal paths and secrets before sharing.</small></p></div><ul><li><a href="https://docs.pytorch.org/docs/main/notes/hip.html">PyTorch HIP and ROCm API guide</a></li></ul></section><section><h2>Run a basic GPU calculation after device discovery</h2><p>In a ROCm build, torch.version.hip may have a value while torch.version.cuda is usually None. Even if torch.cuda.is_available() is True, it means PyTorch found a GPU through its shared device API. The tensor sum below checks a GPU calculation and transfers the result back to the CPU, but does not guarantee a large model or every operation will work.</p><div><p><strong>Check HIP and a GPU tensor calculation</strong></p><pre><code data-guide-code-block="4-0">python -c 'import torch; print("PyTorch:", torch.__version__); print("HIP:", torch.version.hip); print("CUDA build:", torch.version.cuda); print("GPU available:", torch.cuda.is_available()); print("Device:", torch.cuda.get_device_name(0) if torch.cuda.is_available() else "not detected"); print("2x2 sum:", torch.ones((2,2), device="cuda").sum().item() if torch.cuda.is_available() else "skipped")'</code></pre><p><small>Check torch.version.hip alongside the torch.cuda API.</small></p></div></section><section><h2>Reproduce the workload in the actual model and app</h2><p>If the GPU is not detected, first check whether python and pip point to the same virtual environment and whether the GPU, Linux kernel, driver, ROCm, and PyTorch match the matrix. Use Windows-specific documentation for native Windows and the WSL compatibility matrix and ROCDXG path for WSL. If installed, rocminfo can provide more device detail, but its absence does not by itself mean unsupported; seeing a GPU there also does not guarantee PyTorch or the app can compute with it.</p><p>Finally, open the model and program you plan to use, run a small input, restart the app session, and reproduce the same task. Model format, precision, kernels, memory, and extensions can change actual behavior. If it fails, record whether it stopped during model loading, GPU computation, or memory allocation, then inspect the documentation and logs for that stage.</p><div><p><strong>Optional: check rocminfo on an installed Linux system</strong></p><pre><code data-guide-code-block="5-0">rocminfo</code></pre><p><small>Do not determine support from the absence of this command alone.</small></p></div><ul><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD ROCm Unified Compatibility Matrix</a></li><li><a href="https://rocm.docs.amd.com/projects/ai-ecosystem/en/latest/frameworks/pytorch/install.html?fam=radeon&amp;gfx=gfx1201&amp;gpu=rx-9070-xt&amp;i=pip&amp;os=linux&amp;pytorch-ver=2.13.0&amp;w=compute">AMD Radeon PyTorch selector</a></li><li><a href="https://docs.pytorch.org/docs/main/notes/hip.html">PyTorch HIP semantics</a></li><li><a href="https://rocm.docs.amd.com/en/latest/deploy/linux/installer/install.html">AMD ROCm Linux installation and recovery guide</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rocm-platform-check-3.webp" alt="A graphics card, green box, paper, and magnifying glass sit on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After GPU discovery, test computation in the actual model and framework.</figcaption></figure><section><h2>Verify a representative task in a fresh session</h2><p>For the RX 9070 XT Ubuntu example, proceed from checking the supported combination to installing the selected wheel, verifying HIP and GPU discovery, running a small tensor calculation, and processing a representative image in the actual image tool. Reopen the app to confirm the same input works, then increase to normal size. Saving the failed stage and full logs helps narrow the configuration or operation involved.</p><ul><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">Check AMD supported combinations</a></li><li><a href="https://rocm.docs.amd.com/projects/ai-ecosystem/en/latest/frameworks/pytorch/install.html?fam=radeon&amp;gfx=gfx1201&amp;gpu=rx-9070-xt&amp;i=pip&amp;os=linux&amp;pytorch-ver=2.13.0&amp;w=compute">AMD Radeon PyTorch installation selector</a></li><li><a href="https://docs.pytorch.org/docs/main/notes/hip.html">PyTorch HIP guide</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Check AMD supported combinations</h2><p>Before purchase or installation, match the supported GPU, OS, ROCm, and framework path.</p><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>PyTorch takes image or text data, performs training or inference computations on a GPU, and returns result tensors or model output. ROCm builds on Radeon also retain the torch.cuda device API name, so verify the AMD-supported combination, install in an isolated Python environment, check the HIP build, and then test the actual app.</dd></div><div><dt>How much memory does it need?</dt><dd>Finally, open the model and program you plan to use, run a small input, restart the app session, and reproduce the same task. Model format, precision, kernels, memory, and extensions can change actual behavior. If it fails, record whether it stopped during model loading, GPU computation, or memory allocation, then inspect the documentation and logs for that stage.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>If you port CUDA code to AMD, will it run just as fast?</title><link>https://localai.co.kr/en/guides/cuda-to-rocm-porting-performance-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/cuda-to-rocm-porting-performance-guide</guid><description>Source conversion, correctness, and long-session stability must each be verified separately. Learn how to check HIP/HIPIFY and official AMD paths, then assess a Radeon purchase using the same image task.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">If you port CUDA code to AMD, will it run just as fast?</h1><p>After porting CUDA code to Radeon, test correctness, stability, and speed separately</p><p id="guide-page-summary">To run a CUDA project on Radeon, use an AMD build or port the source to HIP and build it. HIPIFY helps convert some source APIs. This guide explains how to find an app's support path, then validate its output, repeated-run stability, and completion time with the same image task.</p><p>If you are considering a Radeon with more memory, first check whether the image application you plan to use has an AMD execution path. Whether the program starts, returns correct results, stays stable in a long session, and finishes quickly are separate questions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>HIPIFY source conversion does not automatically provide binary compatibility or optimization.</li><li>Validate correctness, repeat-session stability, and runtime separately.</li><li>Align input, output resolution, processing steps, and quality criteria.</li></ol></section><section><h2>First look for the application's official AMD path</h2><p>Before buying a GPU, look for a ROCm or HIP build in the project's installation guide, release files, or support list. A CUDA-only listing does not establish AMD support. HIP is a similar GPU programming API, and HIPIFY helps convert some source calls to corresponding HIP forms. The effort and validation burden differ depending on whether an official binary exists or source must be ported manually.</p><ul><li><a href="https://rocm.docs.amd.com/projects/HIP/en/latest/how-to/hip_porting_guide.html">AMD HIP porting guide</a></li><li><a href="https://rocm.docs.amd.com/projects/HIPIFY/en/latest/">AMD HIPIFY documentation</a></li><li><a href="https://localai.co.kr/en/guides/rocm-amd-local-ai-guide">Local AI with ROCm and Radeon: Reading Support Combinations and Runtime Paths</a></li><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-rocm-porting-1.webp" alt="A wooden desk with a code notebook, graphics card, and packaged box" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check source porting and finished-app AMD support separately.</figcaption></figure><section><h2>Review operations and libraries after source conversion</h2><p>Changing CUDA API calls in an image-processing app does not by itself create a finished AMD application. Work-unit size, data layout, memory copies and reuse, and synchronization affect kernel performance. If the app uses libraries such as cuBLAS, check the corresponding ROCm library and function behavior. Automated conversion may change function syntax but does not automatically optimize kernel structure or algorithms.</p><ul><li><a href="https://rocm.docs.amd.com/projects/HIP/en/latest/how-to/hip_porting_guide.html">HIP API and execution model porting guide</a></li><li><a href="https://rocm.docs.amd.com/projects/HIPIFY/en/latest/reference/hipify-clang.html">HIPIFY conversion tool documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/cuda-rocm-porting-2.webp" alt="An open notebook, tools, and parts box beside a graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After conversion, check operations, memory, and libraries too.</figcaption></figure><section><h2>Align output correctness before measuring speed</h2><p>Process the same input and check whether outputs fall within the application's tolerance. Floating-point kernel order can change final digits, so decide whether bitwise equality is required or an allowed error is sufficient for the task. Even with the same seed and settings, image generation need not be pixel-identical on every GPU; compare quality criteria and failure modes. Speed measurements cannot guide a purchase if the result is incorrect.</p></section><section><h2>Test stability with a new session and representative images</h2><p>After one small input succeeds, process representative images repeatedly and restart the app to see whether the same workflow recurs. Increase resolution gradually to your normal level and watch for accumulating memory use, errors only on larger inputs, and resource release after exit. Match the model, precision, resolution, and other open applications to real conditions to distinguish one success from repeatable operation.</p></section><section><h2>Compare total time using the same task and completion criteria</h2><p>CUDA and ROCm use different runtimes, libraries, and kernel implementations, so similar-looking code does not imply equal execution time. Fix the input image, output resolution, processing steps, application version, and quality criteria. If only one setup needs CPU offload, record that setting and whether it reflects your actual workflow.</p><p>Separate model preparation from image processing. Record model loading, the first image, repeated images, and result saving, and also measure end-to-end completion if that is what matters to your workflow. If the app's completion indicator may precede saving, check the output file timestamp or completion log. Keep driver, ROCm and app versions, settings, output images, and logs to trace condition differences.</p><p>A HIP runtime or AMD GPU entry in the logs helps identify the execution path. Device detection and runtime initialization can succeed while the app still fails, so check model initialization, memory allocation, kernel execution and result saving.</p></section><figure><img src="https://localai.co.kr/guides/cuda-rocm-porting-3.webp" alt="Two computers with landscape screens, blank color cards, and a magnifier on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare correctness, stability, and completion time separately on the same task.</figcaption></figure><section><h2>Base a purchase on the application's verifiable support path</h2><p>If an official ROCm build exists, match the GPU, OS, driver, ROCm, and framework combination and repeat the representative task across restarts. If only source is available, review converted code and libraries and consider whether you can own correctness, stability, performance validation, and maintenance. If there is no official AMD path and you do not plan to port it yourself, defer a GPU purchase for that application.</p><p>For background, consult the Andeul Engineering video and AMD's HIP documentation. The video is introductory; use AMD's official guidance for actual API and execution-model porting.</p><ul><li><a href="https://www.youtube.com/watch?v=yLgoMXRZhZU">Andeol Gonghak CUDA video</a></li><li><a href="https://rocm.docs.amd.com/en/latest/compatibility/compatibility-matrix.html">AMD ROCm Unified Compatibility Matrix</a></li><li><a href="https://rocm.docs.amd.com/projects/HIP/en/latest/how-to/hip_porting_guide.html">AMD HIP porting guide</a></li><li><a href="https://rocm.docs.amd.com/projects/HIPIFY/en/latest/">AMD HIPIFY documentation</a></li></ul></section><aside><h2>Review the HIP porting path</h2><p>Before porting, review API and execution-model differences in AMD's documentation.</p><a href="https://rocm.docs.amd.com/projects/HIP/en/latest/how-to/hip_porting_guide.html">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>To run a CUDA project on Radeon, use an AMD build or port the source to HIP and build it. HIPIFY helps convert some source APIs. This guide explains how to find an app's support path, then validate its output, repeated-run stability, and completion time with the same image task.</dd></div><div><dt>How much memory does it need?</dt><dd>Changing CUDA API calls in an image-processing app does not by itself create a finished AMD application. Work-unit size, data layout, memory copies and reuse, and synchronization affect kernel performance. If the app uses libraries such as cuBLAS, check the corresponding ROCm library and function behavior. Automated conversion may change function syntax but does not automatically optimize kernel structure or algorithms.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Pruna-Qwen-Image-2.1 locally: choosing its 5- or 8-step adapter</title><link>https://localai.co.kr/en/guides/pruna-qwen-image-2-1-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/pruna-qwen-image-2-1-local-guide</guid><description>Run the few-step LoRA adapters for Qwen-Image-2.1 with CUDA and Diffusers. Compare the 5-step speed option with the 8-step quality option, and check the H100 benchmark conditions, code and license.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Run Pruna-Qwen-Image-2.1 locally: choosing its 5- or 8-step adapter</h1><p>Draft images quickly with the Pruna adapter, then review at 8 steps</p><p id="guide-page-summary">Pruna-Qwen-Image-2.1 is a LoRA adapter connected to the Qwen-Image-2.1 image model. Its additional weights are trained for few-step generation, enabling quick trials of prompt lighting and composition. This guide explores selecting candidates with 5 steps and comparing details with the quality-first 8-step adapter or 40-step base model.</p><p>Suppose you are comparing soft window light with a dark studio look on a ceramic mug. Using 5 steps to draft alternatives can make composition exploration quicker. After choosing a scene, review details such as the rim and handle with 8 steps or the base model. Five steps are faster than eight but visibly lower in quality, and the creator says v0.1 is below the base model in quality.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Use 5 steps for fast drafts and 8 steps as the adapter's quality-first default.</li><li>The adapter runs with the Qwen-Image-2.1 base model and its full pipeline.</li><li>The up-to-6.3× figure was measured under specific conditions on an H100 80 GB.</li></ol></section><section><h2>What 5 and 8 steps are for</h2><p>This is not simply the base Qwen-Image-2.1 with its 40 steps reduced. The Pruna adapter adds weights trained separately to generate images in fewer iterations. Each step updates an image representation from noise; this version uses either 5 or 8 steps. Counting steps alone makes 8 steps one-fifth and 5 steps one-eighth of the base model's 40, but total generation time does not shrink by the same ratio. Prompt encoding, image reconstruction, and computation within each step also take time.</p><p>Each adapter file is about 335.6 MB. The pipeline, text encoder, and VAE remain from the base model, so this file size does not represent total GPU memory requirements. Intermediate computation space also depends on resolution. The model card does not establish VRAM savings or prove that smaller GPUs can run it.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local video generation: workflows and PC requirements</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-local-guide">Qwen-Image 2.1: local image generation and editing</a></li></ul></section><figure><img src="https://localai.co.kr/guides/pruna-qwen-draft-selection.webp" alt="Several ceramic-mug still-life drafts with different lighting and compositions on a monitor at a warm studio desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose lighting and composition first, then inspect details in the selected scene.</figcaption></figure><section><h2>Test both versions under the same CUDA setup</h2><p>The official example targets CUDA GPUs. Generate one image at 8 steps first to verify the installation and settings; for the next run, changing STEPS to 5 also selects the matching file and sigma list. Using the same prompt and seed 42 aligns the starting-noise condition, but does not make the compositions identical. Begin at 1024×1024, compare lighting, spacing, and mug position, then inspect details. Run the installation commands, save the generation code as pruna_mug.py, then run python pruna_mug.py. The first generation is complete when mug-8-step.png appears in the working directory.</p><p>Image editing can use the same pipeline. Start by changing the background with one reference photo and check whether the mug shape is preserved. Training covered 1K resolution and up to three reference images. Begin with one photo you provide and a 1024×1024 output; test more references or higher resolutions separately. Append the editing example to the same script and prepare your reference photo as mug-reference.png. Running it saves the result as mug-edited.png.</p><div><p><strong>Install the CUDA packages and pinned Diffusers version</strong></p><pre><code data-guide-code-block="1-0">pip install 'torch&gt;=2.4.0' 'transformers&gt;=5.17' accelerate peft pillow
pip install git+https://github.com/huggingface/diffusers@6256aa7666cedd47443adc8f82da9a10e110b09c</code></pre><p><small>The official example assumes a CUDA GPU setup.</small></p></div><div><p><strong>Generate a 1024×1024 image: pruna_mug.py</strong></p><pre><code data-guide-code-block="1-1">import torch
from diffusers import FlowMatchEulerDiscreteScheduler, QwenImage21Pipeline

STEPS = 8  # 8: quality-first default; 5: faster candidate selection
SIGMAS = {
    5: [1.0, 0.94, 6 / 7, 2 / 3, 0.4],
    8: [1.0, 14 / 15, 6 / 7, 10 / 13, 2 / 3, 6 / 11, 0.4, 2 / 9],
}[STEPS]

pipe = QwenImage21Pipeline.from_pretrained(
    "Qwen/Qwen-Image-2.1", torch_dtype=torch.bfloat16
).to("cuda")
pipe.load_lora_weights(
    "PrunaAI/Pruna-Qwen-Image-2.1",
    weight_name=f"p_qwen_image_2.1_{STEPS}step_v0.1.safetensors",
)
pipe.scheduler = FlowMatchEulerDiscreteScheduler.from_config(
    pipe.scheduler.config, use_dynamic_shifting=False, shift=1.0, shift_terminal=None
)

image = pipe(
    prompt=(
        "A ceramic mug on a small table, soft window light from the left, "
        "warm neutral background, three-quarter view, realistic still life"
    ),
    width=1024, height=1024,
    generator=torch.Generator("cuda").manual_seed(42),
    num_inference_steps=STEPS, sigmas=SIGMAS,
    true_cfg_scale=1.0, use_kv_cache=True,
).images[0]
image.save(f"mug-{STEPS}-step.png")</code></pre><p><small>Verify the setup at 8 steps first. Switching to 5 selects its matching file and sigmas.</small></p></div><div><p><strong>Optional image-editing example using the same pipeline</strong></p><pre><code data-guide-code-block="1-2">from PIL import Image

source = Image.open("mug-reference.png").convert("RGB")
edited = pipe(
    prompt="Keep the ceramic mug shape; change the background to a warm gray studio.",
    image=source,
    width=1024, height=1024,
    generator=torch.Generator("cuda").manual_seed(42),
    num_inference_steps=STEPS, sigmas=SIGMAS,
    true_cfg_scale=1.0, use_kv_cache=True,
).images[0]
edited.save("mug-edited.png")</code></pre><p><small>Optional: append this after the first script and place mug-reference.png in the same folder; it reuses pipe and STEPS.</small></p></div><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1">Base Qwen-Image-2.1 model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/pruna-qwen-base-and-adapter.webp" alt="A workbench with books and a small expansion card beside a desktop fitted with a graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even a small adapter file still needs memory for the base model.</figcaption></figure><section><h2>Conditions behind the official 6.3× figure</h2><p>The model card's up-to-6.3× result used one H100 80 GB, BF16, and batch size 1. It used a Qwen model-card prompt and reported the median of three generations after one warm-up. Prompt encoding, denoising, and decoding were included, while PNG saving, model loading, and warm-up were excluded. This figure cannot predict total time until a file is saved on a personal GPU.</p><p>The chart compared the 40-step base with KV cache on against Pruna at 5 and 8 steps with KV cache off. It also used no LoRA merging, CFG, compilation, or CPU offloading. The quick-start code uses use_kv_cache=True for Pruna, so running it does not reproduce the chart conditions exactly.</p><p>For a local comparison, hold prompt, resolution, seed, runtime, and save method constant, then inspect the images. Separate model loading and the first warm-up from repeated generation, and record the median across runs. A CPU timer stopped before CUDA work completes can underreport time, so do not time without synchronizing the GPU.</p><ul><li><a href="https://huggingface.co/PrunaAI/Pruna-Qwen-Image-2.1">Pruna official model card and benchmark conditions</a></li></ul></section><section><h2>Check fine details and runtime support separately</h2><p>After narrowing the options at 5 steps, zoom in on the mug rim, handle-to-body junction, and glaze highlights in an 8-step or base-model output. Eight steps do not mean base-model quality. If detail matters, compare against the original 40-step base. The published 2K chart compares speed, not verified 2K quality; training used 1K resolution.</p><p>The official quick start uses .to("cuda") and a CUDA random generator, so it targets CUDA. The model card does not establish Mac Metal, MLX, or GGUF integration, but that alone does not prove other implementations are impossible. If you choose another runtime, verify support for the Pruna adapter and its version. The site's /generate page shows estimated times for base Qwen-Image, not Pruna.</p><ul><li><a href="https://localai.co.kr/en/generate?model=qwen-image-2.1">Estimated generation time for base Qwen-Image 2.1</a></li></ul></section><figure><img src="https://localai.co.kr/guides/pruna-qwen-detail-review.webp" alt="Three mug outputs on a table being compared under a magnifier for rim and handle details" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Zoom in to inspect the rim ellipse and handle connection.</figcaption></figure><section><h2>Match the weight terms to your intended use</h2><p>The Pruna adapter is derived from Qwen-Image-2.1, and its model card and license refer to the Qwen Research License. Section 1 defines non-commercial use as research or evaluation; Section 2 limits permitted use to those non-commercial purposes. Commercial use requires a separate license. This summarizes the published terms, so read the full license and current model card before use.</p><p>Non-commercially evaluating a mug scene differs in purpose from creating product images for sale. Access to this guide or website does not expand the permitted use of the weights. Review rights for inputs and outputs separately before distribution.</p><ul><li><a href="https://huggingface.co/PrunaAI/Pruna-Qwen-Image-2.1/raw/main/LICENSE">Full Qwen Research License</a></li><li><a href="https://huggingface.co/PrunaAI/Pruna-Qwen-Image-2.1">Official Pruna model card</a></li></ul></section><aside><h2>Get the adapter from Pruna’s official model card</h2><p>Check the latest files, CUDA settings, and Qwen Research License.</p><a href="https://huggingface.co/PrunaAI/Pruna-Qwen-Image-2.1">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Pruna-Qwen-Image-2.1 is a LoRA adapter connected to the Qwen-Image-2.1 image model. Its additional weights are trained for few-step generation, enabling quick trials of prompt lighting and composition. This guide explores selecting candidates with 5 steps and comparing details with the quality-first 8-step adapter or 40-step base model.</dd></div><div><dt>How much memory does it need?</dt><dd>Each adapter file is about 335.6 MB. The pipeline, text encoder, and VAE remain from the base model, so this file size does not represent total GPU memory requirements. Intermediate computation space also depends on resolution. The model card does not establish VRAM savings or prove that smaller GPUs can run it.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The model card's up-to-6.3× result used one H100 80 GB, BF16, and batch size 1. It used a Qwen model-card prompt and reported the median of three generations after one warm-up. Prompt encoding, denoising, and decoding were included, while PNG saving, model loading, and warm-up were excluded. This figure cannot predict total time until a file is saved on a personal GPU.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI speech recognition: transcribe on your own PC</title><link>https://localai.co.kr/en/guides/local-asr-transcription-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-asr-transcription-guide</guid><description>What should you install to transcribe recordings without uploading them? Learn how Whisper, faster-whisper, whisper.cpp, and Qwen3-ASR handle languages, Mac/NVIDIA/CPU runtimes, and performance measurement.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Local AI speech recognition: transcribe on your own PC</h1><p>Choose a transcription model by testing the same recording under matching conditions</p><p id="guide-page-summary">Local automatic speech recognition (ASR) takes an audio recording and converts speech into text. Whisper, faster-whisper, whisper.cpp, and Qwen3-ASR differ in language coverage and Mac, CPU, or NVIDIA execution paths, so compare them on the same recording and check how well names, dates, and numbers are transcribed.</p><p>A list of supported languages is not enough to choose a model. If a Korean interview includes English product names, dates, or prices, check whether the phrases that matter are recognized in your recording. Fix one file similar to your real work and keep the same segment and reference transcript as you change models or programs.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>In Qwen3-ASR’s official table, 52 counts 30 languages together with Chinese dialects.</li><li>The published faster-whisper speed is for processing 13 minutes of audio with Large-v2 on an RTX 3070 Ti. It is not a Turbo result.</li><li>Installation and model downloads may require internet access. After downloading, disconnect and run the workflow again to verify offline operation.</li></ol></section><section><h2>Fix the recording and the details that matter</h2><p>Consider a Korean interview containing English product names, dates, and prices. Choose a segment and write a reference transcript by listening to it, including passages with product names and numbers. Giving every model the same segment lets you compare omissions and changes to the important expressions.</p><p>Note recording conditions such as noise, accent, and overlapping voices beside each error. If errors cluster in noisy passages, improving the recording may take priority over changing model settings. After narrowing down candidates on a short segment, process the longer file to check whether omissions and timestamps remain stable through the end.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-streaming-asr-local-guide">Transcribe Korean speech live and save text with Nemotron 3.5 ASR</a></li><li><a href="https://localai.co.kr/en/guides/moonshine-cpu-streaming-asr-guide">Transcribe English speech in real time with Moonshine on CPU</a></li><li><a href="https://localai.co.kr/en/guides/whisperx-word-alignment-srt-guide">Align Korean subtitles and speaker labels with WhisperX</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="A wooden desk with a recorder, mini computer and open notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start with a short test using audio similar to your own work.</figcaption></figure><section><h2>Choose between transcription, alignment, and live recognition</h2><p>For transcribing recordings into meeting notes, choose a file-based ASR such as Whisper or Granite Speech. Granite Speech 5.0 TurboCTC supports English only. [Granite Speech](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc)</p><p>For live transcription from an English microphone, you can try Moonshine Voice; its current Korean Tiny model is not streaming. Nemotron 3.5 can take Korean microphone input through NeMo-Speech.cpp. [Moonshine](https://moonshine-voice.readthedocs.io/en/stable/models/available-models/) · [Nemotron](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)</p><p>WhisperX is a post-processing tool that aligns word-level timings to a transcript and exports SRT. Choose a file transcription, live input, or word alignment path according to the task. [WhisperX](https://github.com/m-bain/whisperX)</p></section><section><h2>Use language coverage to narrow the candidates</h2><p>Whisper Large-v3-Turbo is listed as a 99-language model, including Korean, English, and Japanese. The Qwen3-ASR table names Korean, Arabic, Hindi, Indonesian, Vietnamese, Persian, and others; its count of 52 includes 30 languages and Chinese dialects. A support list is a starting point for candidate selection, not a guarantee of equal quality across accents and specialist vocabulary.</p><p>Compare product names, dates, numbers, and self-corrections against the reference transcript. If an item is missed, note the input condition—such as noise or overlapping speech—where the error occurred. This separates language support from the accuracy your file actually needs.</p></section><section><h2>Check the runner and hardware combination</h2><p>whisper.cpp documents Metal and Core ML on Apple Silicon, CPU, and NVIDIA CUDA paths. Qwen3-ASR’s official guide recommends the vLLM GPU path for fast server execution. Whether a model can run on a computer and whether it has an officially accelerated path are separate questions.</p><p>Initial setup may download Python packages and model weights. Confirm that the app uses the local file you selected; for sensitive recordings, check network requests and storage locations from microphone input through saved transcript. After installation, disconnect from the internet and transcribe again to verify offline operation.</p><table><caption>After choosing a model, available acceleration paths still depend on the runner.</caption><thead><tr><th scope="col">Runtime</th><th scope="col">Documented execution paths</th><th scope="col">What to check</th></tr></thead><tbody><tr><th scope="row">whisper.cpp</th><td>Apple Silicon Metal·Core ML, CPU, NVIDIA CUDA</td><td>Device and acceleration settings</td></tr><tr><th scope="row">faster-whisper</th><td>CPU, NVIDIA CUDA</td><td>No official Metal path found</td></tr><tr><th scope="row">Qwen3-ASR</th><td>vLLM GPU path recommended</td><td>Server execution conditions</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-2.webp" alt="A recorder and headphones on a folded blanket beside a notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The same model can use different acceleration paths in different runners.</figcaption></figure><section><h2>Verify installation and transcription with the same WAV</h2><p>Install faster-whisper in a Python virtual environment and verify it with a short WAV file. For CPU-only use, select compute_type=int8. Replace the filename with your WAV path. The first run downloads model weights and may require internet access. NVIDIA GPU use requires cuBLAS for CUDA 12 and cuDNN 9; the original Whisper installation requires FFmpeg.</p><p>Record the filename, model, language, device, compute type, setup time, and transcription time. The first run can take longer while downloading the model, so rerun the same file after the download and separate setup time from transcription time. Keep the file, model, language, and beam_size fixed, and change only one condition at a time.</p><div><p><strong>Install a CPU int8 environment</strong></p><pre><code data-guide-code-block="4-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install faster-whisper</code></pre><p><small>Example for a macOS/Linux shell. On Windows, run Scripts\Activate.ps1 in the virtual environment.</small></p></div><div><p><strong>Transcribe a short WAV</strong></p><pre><code data-guide-code-block="4-1">from faster_whisper import WhisperModel

model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("sample.wav", language="ko", beam_size=5)
for segment in segments:
    print(f"{segment.start:.2f}–{segment.end:.2f}  {segment.text}")</code></pre><p><small>Prepare sample.wav. language=ko selects Korean; use en, ja, or another language as needed. Record the initial download separately from transcription time.</small></p></div></section><section><h2>Read published speed with its hardware and batch conditions</h2><p>SYSTRAN tested faster-whisper on 13 minutes of audio with an RTX 3070 Ti 8GB and CUDA 12.4. Large-v2 FP16 took 63 seconds and used 4,525 MB of VRAM at batch 1; at batch 8, it took 17 seconds and used 6,090 MB.</p><p>Here, batch 8 means processing eight audio segments together. This result is for Large-v2, a different model from Turbo. Processing time and memory use also change with input length, quantization, and model version.</p><p>In that measurement, batch 8 finished in 17 seconds instead of 63 seconds. Dividing 63 by 17 gives about 3.7: completion was roughly 3.7 times faster, saving 46 seconds. VRAM use rose by 6,090−4,525=1,565 MB, about 1.6 GB. These calculations use SYSTRAN's RTX 3070 Ti, 13-minute audio, and Large-v2 FP16 results.</p><p>If you process recordings one at a time, compare the time to finish a full file. A service handling many recordings simultaneously also needs a concurrency or throughput measure. Define the workload first so metrics with different units are not mixed into one ranking.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A mini computer and desktop tower with headphones between them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record model, input, and batch conditions alongside processing time.</figcaption></figure><section><h2>Check speed and accuracy on the same file</h2><p>English is commonly compared with word error rate (WER), while Korean and Japanese use character error rate (CER). Record how spacing, numbers, and punctuation are normalized so the score can be reproduced. A public benchmark describes a particular dataset, so also inspect names, product terms, and multilingual passages that matter in your own files.</p><p>Whisper Turbo is designed for transcribing speech in its original language. If you also need English translation, consider Large or Medium as recommended in OpenAI's official guidance. When comparing model size and processing speed, distinguish transcription from translation.</p><p>For each error, record the reference text, model output, error type, and downstream impact. Check whether a product name became a common word, a date was transcribed incorrectly, or overlapping speech disappeared; this reveals practical risks that an overall WER or CER may hide. If important numbers need correction every time, include that editing work in your choice even when transcription itself is fast.</p><ul><li><a href="https://github.com/openai/whisper">OpenAI Whisper models and language guide</a></li><li><a href="https://github.com/ggml-org/whisper.cpp">whisper.cpp official build and runtime guide</a></li><li><a href="https://github.com/SYSTRAN/faster-whisper">faster-whisper installation and usage</a></li></ul></section><aside><h2>Try Qwen3-ASR on a shared audio sample</h2><p>Check first output and processing time on the reference clip.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=qwen3-asr-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local automatic speech recognition (ASR) takes an audio recording and converts speech into text. Whisper, faster-whisper, whisper.cpp, and Qwen3-ASR differ in language coverage and Mac, CPU, or NVIDIA execution paths, so compare them on the same recording and check how well names, dates, and numbers are transcribed.</dd></div><div><dt>How much memory does it need?</dt><dd>SYSTRAN tested faster-whisper on 13 minutes of audio with an RTX 3070 Ti 8GB and CUDA 12.4. Large-v2 FP16 took 63 seconds and used 4,525 MB of VRAM at batch 1; at batch 8, it took 17 seconds and used 6,090 MB.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3-ASR vs Whisper: which local transcription model should you choose?</title><link>https://localai.co.kr/en/guides/qwen3-asr-vs-whisper</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen3-asr-vs-whisper</guid><description>Compare local ASR for Korean, English, Japanese, and languages around the world. Separate language coverage, runtimes, licenses, and speed metrics for Qwen3-ASR, Whisper Turbo, and Nemotron 3.5.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Qwen3-ASR vs Whisper: which local transcription model should you choose?</h1><p>Compare Qwen3-ASR and Whisper by language needs and execution path</p><p id="guide-page-summary">Qwen3-ASR and Whisper are local speech-recognition models that convert recordings into text. They differ in language coverage, runners, and GPU or Mac acceleration paths, so compare product-name and date errors and file completion time on the same audio.</p><p>For searchable meeting notes after a call, file transcription and review time matter more than real-time caption throughput. Test candidates on the same audio with Korean and English product names, and check other languages such as Japanese or Arabic against their own support level and samples.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Whisper Turbo lists 99 languages and about 6 GB VRAM guidance. For speech translation, check multilingual Large or Medium.</li><li>Qwen3-ASR’s official count of 52 combines 30 languages with Chinese dialects. Read the language and dialect lists separately.</li><li>Of Nemotron 3.5’s 40 locales, 32 are transcription-ready and 8 require adaptation. Korean is in the ready tier.</li></ol></section><section><h2>Separate language coverage from accuracy on your recording</h2><p>Start by identifying the languages and recording types you use most often. For Korean meetings, choose a passage containing English product names, dates, and prices. If you also process Japanese or Arabic recordings, prepare separate samples in those languages for comparison.</p><p>Put product names, dates, and prices in a reference transcript and use the same recording and transcript for every candidate. Note whether errors occur with overlapping speakers, pronunciation, or noise. A public score from news-reading data does not directly establish accuracy on meeting conversations, so compare its dataset, normalization, and metric with your own task.</p><ul><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li><li><a href="https://localai.co.kr/en/guides/orukeet-local-transcription-guide">Orukeet local transcription: transcribe English and European-language audio</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-models-1.webp" alt="A laptop showing two audio waveforms beside a microphone and books" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Language counts and transcription quality are different measures.</figcaption></figure><section><h2>Check support readiness for the languages you need</h2><p>Whisper Large-v3-Turbo is listed as a 99-language model including Korean, English, and Japanese. Qwen3-ASR lists Arabic, Indonesian, Hindi, Malay, Filipino, Persian, Thai, and Vietnamese among its supported languages. The 52 in Qwen's official table combines 30 languages with Chinese dialects. First shortlist models that list the languages you need.</p><p>Use the language support lists to narrow down the models to test. If you are adding Arabic recordings, check recognition errors with a reference sample in Arabic. The accuracy you need also depends on whether the output is a draft for review or a record to search and share immediately.</p></section><section><h2>Check the model and runner’s acceleration paths</h2><p>Whisper weights are released under the MIT license. whisper.cpp documents Metal and Core ML on Apple Silicon, CPU, and NVIDIA CUDA paths. Conversion format, memory use, and speed can vary by runtime even with the same model.</p><p>Check the installation and CUDA dependency versions listed in the faster-whisper README and start in a new virtual environment. Copying CUDA and cuDNN combinations from an older environment can cause conflicts. whisper.cpp converts models to GGML format, so its file size is not directly comparable with the original Hugging Face checkpoint.</p><table><caption>Verify the execution path on the hardware you will use instead of inferring it from the model name.</caption><thead><tr><th scope="col">Model and runner</th><th scope="col">Documented path or condition</th><th scope="col">What to check</th></tr></thead><tbody><tr><th scope="row">Whisper + whisper.cpp</th><td>MIT weights; Apple Silicon Metal/Core ML, CPU, CUDA</td><td>GGML-converted file</td></tr><tr><th scope="row">Whisper + faster-whisper</th><td>CTranslate2; CUDA·CPU·int8</td><td>No official Metal path found</td></tr><tr><th scope="row">Qwen3-ASR</th><td>Official vLLM GPU server path recommended</td><td>Distinguish Python implementation from third-party ports</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/speech/asr-models-2.webp" alt="A recorder connected to a mini computer beside note cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check model and runner conditions separately.</figcaption></figure><section><h2>Distinguish Qwen3-ASR models, official paths, and third-party ports</h2><p>Qwen3-ASR 0.6B and 1.7B are Apache-2.0 models and include Korean. The official implementation provides offline and streaming examples and recommends vLLM for fast GPU-server execution. The 0.6B Hugging Face files total 1.88 GB, but that is not the runtime memory requirement.</p><p>qwen3-asr-rs is a community port that runs Qwen weights with Rust/Candle and Metal. Its published short English and Chinese measurements were made on an M4 Mac mini with 16 GB of memory. They represent this port, not the official Python implementation or Korean transcription.</p><p>The site's Mac demo is an estimate adjusted from observations of this port. Check processing time with the implementation you install and your actual audio.</p><p>Record the command, model ID, device, language setting, initial setup time, and repeated processing time. Start with a short segment from the same recording and check product names and numbers; then change one setting at a time. Verify separately that the runner executes and that the transcript is adequate for the work.</p><ul><li><a href="https://github.com/QwenLM/Qwen3-ASR">Qwen3-ASR official weights and languages</a></li><li><a href="https://github.com/alan890104/qwen3-asr-rs">Third-party Rust/Metal runner used for the M4 measurement</a></li></ul></section><section><h2>Nemotron and Parakeet differ in how they process audio</h2><p>Nemotron 3.5 supports cache-aware streaming across 40 locales: 19 are transcription-ready, 13 broad-coverage, and 8 adaptation-ready. The first two tiers can be used for transcription, and Korean is in this ready tier. Parakeet TDT v3 processes full utterances in 25 European languages and has no cache-aware streaming in this runtime. Parakeet CTC 1.1B is English-only.</p><p>If you organize notes after recording, start by checking Korean and Japanese samples and an installable execution path. For captions during a meeting, time to first caption and streaming support become selection criteria. Defining when the transcript is needed helps determine whether Nemotron streaming or Parakeet’s full-utterance processing fits.</p></section><section><h2>Read speed numbers in terms of the workload they measure</h2><p>The faster-whisper RTX 3070 Ti result measures completion time and VRAM for a 13-minute file. NVIDIA’s H100 Nemotron result measures simultaneous real-time streams under different settings. Time to finish one file and the number of concurrent server connections are different metrics, so compare the one your workload needs.</p><p>RTF is inference time divided by audio duration. Below 1 means processing took less time than the recording’s duration. Initial download and model loading are often excluded from RTF, so distinguish first-run waiting from repeated processing time. If you need live captions, also record time to the first text.</p><p>If you process recordings one at a time after a meeting, record transcription and review time. Check whether product names and dates are preserved in Korean and Japanese, and test again on an Arabic reference recording if Arabic becomes part of the work. Add streaming conditions if live meeting captions become necessary.</p><ul><li><a href="https://github.com/QwenLM/Qwen3-ASR">Qwen3-ASR official implementation and runtime examples</a></li><li><a href="https://github.com/NVIDIA/NeMo-Speech.cpp">Install and use the local Nemotron and Parakeet CLI</a></li><li><a href="https://github.com/SYSTRAN/faster-whisper">faster-whisper installation and usage</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-models-3.webp" alt="A magnifying glass over transcript pages beside a recorder and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Clip processing time and server concurrency are different measures.</figcaption></figure><aside><h2>Try Whisper transcription on a shared audio sample</h2><p>Check Large-v2 processing time and memory.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=whisper-large-v2">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen3-ASR and Whisper are local speech-recognition models that convert recordings into text. They differ in language coverage, runners, and GPU or Mac acceleration paths, so compare product-name and date errors and file completion time on the same audio.</dd></div><div><dt>How much memory does it need?</dt><dd>Qwen3-ASR 0.6B and 1.7B are Apache-2.0 models and include Korean. The official implementation provides offline and streaming examples and recommends vLLM for fast GPU-server execution. The 0.6B Hugging Face files total 1.88 GB, but that is not the runtime memory requirement.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Create local meeting notes with transcripts, timestamps, and speakers</title><link>https://localai.co.kr/en/guides/local-meeting-transcription-workflow</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-meeting-transcription-workflow</guid><description>Learn a local workflow for transcribing meetings and organizing speakers and timestamps. Check total time, first output, diarization, subtitles, and hardware needs for long recordings.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Create local meeting notes with transcripts, timestamps, and speakers</h1><p>Turn a meeting recording into a transcript with speaker labels to review</p><p id="guide-page-summary">Local meeting transcription converts a recording into text and can add timestamps and speaker segments to create a reviewable record. Transcription, speaker diarization, and summarization are separate operations, so review their outputs separately.</p><p>First decide whether you need a searchable transcript after the meeting or captions during it. Batch processing can work when later review is acceptable; live captions make streaming support and time to first caption important. Test transcription on a short WAV, then add diarization and output formats one at a time to isolate errors.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Transcription turns speech into text; diarization segments speakers. A person must map those segments to names.</li><li>Nemotron 3.5 documents cache-aware streaming, while Parakeet TDT v3 processes full utterances.</li><li>Restrict local services to 127.0.0.1, and check access and retention policies for sensitive recordings.</li></ol></section><section><h2>Decide what kind of meeting record you need</h2><p>A searchable transcript with timestamps helps when you need to find who decided what after a meeting. If people must follow along while it happens, processing the recording later is too late; you need low-latency captions. Suppose someone in a meeting about a release date says, “Share the draft by Friday, and set the release date after legal review.” This sentence illustrates the workflow; it is not an actual meeting record.</p><ul><li><a href="https://localai.co.kr/en/guides/nemotron-3-diarization-local-meeting-guide">Nemotron 3 Diarization: who said what in your meeting?</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-streaming-asr-local-guide">Transcribe Korean speech live and save text with Nemotron 3.5 ASR</a></li><li><a href="https://localai.co.kr/en/guides/moonshine-cpu-streaming-asr-guide">Transcribe English speech in real time with Moonshine on CPU</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A microphone and laptop on a round table in an empty meeting room" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First decide between a post-meeting transcript and live captions.</figcaption></figure><section><h2>Review transcription and diarization separately</h2><p>ASR turns speech into text; diarization segments who spoke when. Audio alone does not reveal people’s names, so map labels such as “Speaker 1” and “Speaker 2” to attendees. Replay overlapping speech and microphone changes. “Friday” can be transcribed correctly but assigned to the wrong speaker, or the speaker can be right while the date is wrong.</p><p>The Sortformer v2 documentation lists support for up to four speakers. Do not assume it will reliably separate everyone in a larger meeting; replay the relevant timestamp to verify deadlines, amounts, and owners.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-2.webp" alt="A laptop with three colored audio tracks beside matching notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A person should verify speaker labels before mapping them to attendees.</figcaption></figure><section><h2>Treat live captions and post-meeting transcripts as separate stages</h2><p>Live captions process microphone input as the meeting happens. For a post-meeting record, transcribe the saved recording and review it. Start English live transcription with `moonshine-voice mic --language en`.</p><p>For Korean, select Nemotron 3.5 in NeMo-Speech.cpp and run `nemo-speech pull nemotron-3.5` to download the model. Then start live transcription with `nemo-speech transcribe --live --model nemotron-3.5 --output live-ko.txt`. The chunk setting range is 80–1120 ms. [NeMo-Speech.cpp CLI](https://github.com/NVIDIA/NeMo-Speech.cpp/blob/main/docs/cli.md)</p></section><section><h2>Choose a local runtime path for your device</h2><p>NVIDIA NeMo-Speech.cpp documents Metal on Apple Silicon, NVIDIA CUDA, and CPU paths. You can start installation with the documented command curl -fsSL https://github.com/NVIDIA/NeMo-Speech.cpp/raw/main/scripts/install.sh | sh; models must be downloaded separately. Internet access is needed for setup and model downloads, but processing can run offline after the files are available.</p><p>Finishing installation and being ready to transcribe are separate steps. Record the runtime path, model, and version for your device, then compare using the same WAV so differences are not mistakenly attributed to the audio or execution conditions. After a short file succeeds, disconnect the network and run it again to check offline operation. This does not verify file storage or other network behavior by the app.</p></section><section><h2>Add one capability at a time on a short WAV</h2><p>First transcribe a short WAV and compare the text with the audio. Then add diarization and an output format such as JSON or SRT. The NeMo CLI documents a workflow such as nemo-speech transcribe meeting.wav --diarize --json. SRT can be convenient for video captions, while JSON with speaker and timestamp data may be more useful for reviewing meeting decisions. The example command outputs JSON; check the CLI options for other formats.</p><p>Changing several settings at once on a long recording makes it hard to locate an error. Verify transcription first, then enable diarization and file formats separately. That helps distinguish a misheard date from an incorrect speaker boundary.</p></section><section><h2>Measure completion time and first-result time separately</h2><p>For long recordings, record both the time from starting the run until the whole file finishes and the time until the first text appears. Throughput may matter for searchable post-meeting records, while first-result latency matters for live captions. Batch processing time and concurrent real-time stream counts in public benchmarks are different metrics; compare the one that fits your work.</p><p>RTF is inference time divided by audio duration. Below 1 means the audio was processed in less than its duration. Initial downloads and model loading may be excluded, so record setup and repeated runs separately. Check names, dates, and amounts against the audio, and do not treat an automatic summary as final until an attendee verifies it.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-3.webp" alt="A recorder and transcript screen in a home office at dusk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record first-result latency separately from full-file completion time.</figcaption></figure><section><h2>Check recording permissions and storage locations</h2><p>Start with audio that is safe to use for testing, and check access rights and retention policies before processing sensitive meetings. Restrict the local server to 127.0.0.1 rather than exposing it to an external network. Offline processing does not automatically make transcript storage safe; check where audio and results are stored, their backups, and who can access them.</p><p>Transcripts and backups can remain even when processing is offline. Confirm permission to process the meeting and decide how to remove source audio and results after the retention period. In the final human review, distinguish statements confirmed in the recording from information clarified with attendees afterward.</p></section><aside><h2>Try a meeting transcription candidate with a shared audio sample</h2><p>This demo provides a speed reference for transcription; speaker diarization is a separate capability.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=qwen3-asr-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local meeting transcription converts a recording into text and can add timestamps and speaker segments to create a reviewable record. Transcription, speaker diarization, and summarization are separate operations, so review their outputs separately.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Make speech on your own computer: a local TTS guide</title><link>https://localai.co.kr/en/guides/local-tts-voice-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-tts-voice-generation-guide</guid><description>Start with the text and languages you need, then choose a Kokoro, Qwen3-TTS or Chatterbox workflow that fits your task and hardware.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Make speech on your own computer: a local TTS guide</h1><p>Turn a script into natural Korean, English, and Japanese speech</p><p id="guide-page-summary">Local TTS turns text into speech on your computer. You can select a language and voice and save the generated audio as a WAV file. This guide explains how to choose models and refine pronunciation when producing the same announcement in Korean, English, and Japanese.</p><p>If a product-update announcement contains dates and product names, test a short passage first. Prepare a script in each language and listen using a supplied voice to locate pronunciation errors. Once the delivery is right, generate the full script to reduce the need to recreate long files after corrections.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Narrow candidates by language coverage, then check pronunciation with equivalent sentences containing product names, numbers, and dates.</li><li>Compare built-in voices first; verify the need and explicit permission before using a specific person’s voice.</li><li>Measure model loading, full synthesis, and time to first audio separately, and record quality checks too.</li></ol></section><section><h2>Check actual pronunciation, not just language lists</h2><p>The Qwen3-TTS README lists 10 languages, the Kokoro model card lists 8 languages and multiple voices, and Chatterbox Multilingual V3 lists more than 23 languages. These are each project’s stated coverage, not results from a shared evaluation. Kokoro notes that training and pronunciation support may be uneven outside English, so use language lists to shortlist candidates and judge with real sentences.</p><p>Prepare Korean, English, and Japanese versions of the same sentence with the product name and date. Decide how numbers should be read and whether to keep the product’s original spelling or use a localized pronunciation; keep versioned scripts. Listen to each WAV and separately note pronunciation errors, hard-to-understand phrases, and voice preference so revisions are targeted.</p><ul><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Compare local TTS models: languages, hardware and speed evidence</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/supertonic-3-korean-local-tts-guide">Generate Korean speech on CPU with Supertonic 3</a></li><li><a href="https://localai.co.kr/en/guides/auk-local-audio-editing-guide">Edit Audio Locally with AuK: Speech Revisions, Cleanup, and TTS</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/mlx-audio-local-speech-toolkit-guide">mlx-audio: TTS and STT from a single install</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book on a stand beside a mini computer and speaker" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Defining the script and languages first makes shortlisting easier.</figcaption></figure><section><h2>Choose candidates by language and voice features</h2><p>Kokoro 82M can be considered for simple speech in its listed languages, including English, Japanese, and Chinese, but Korean is not on its official list. If Korean output is required, Qwen3-TTS CustomVoice’s Korean voice Sohee is a candidate to test. Chatterbox Multilingual V3 is another option when you plan to use a reference voice for multilingual speech. Qwen VoiceDesign is available only in the 1.7B checkpoint, so consider it only if designing a voice is part of the task.</p><p>First compare equivalent short sentences using built-in voices or presets. Test full scripts and multiple files only with candidates whose pronunciation and delivery meet your needs; this avoids mixing up differences in language, content, and voice. Before using a person’s voice as a reference, confirm it is your own voice or a recording used with explicit permission; otherwise, do not use it.</p></section><section><h2>Check license and runtime before choosing newer TTS models</h2><p>Higgs Audio v3 supports conversational TTS and voice cloning in more than 100 languages. Its public weights use the Boson Higgs Audio v3 Research and Non-Commercial License; commercial production requires a separate commercial license. [Higgs Audio v3](https://github.com/boson-ai/higgs-audio)</p><p>CosyVoice 3 supports nine major languages, including Korean and Japanese, and streaming from text input to audio output. Its public example downloads the repository and model into a Python 3.10 virtual environment. [CosyVoice](https://github.com/FunAudioLLM/CosyVoice)</p></section><section><h2>Match the operating system with a supported runtime</h2><p>Qwen3-TTS’s official Python setup documents Python 3.12 and a CUDA example using BF16 with optional FlashAttention 2. This is setup guidance, not a speed guarantee for every GPU. Check PyTorch configuration and hardware compatibility before adding FlashAttention so dependency errors are not mistaken for model failures.</p><p>On Apple Silicon, Kokoro’s official PyTorch path documents an MPS fallback setting. For MLX, MLX-Audio provides converted Kokoro, Qwen3-TTS, and Chatterbox models. These community checkpoints are distinct from upstream model distributions, so record the runtime and checkpoint together. The command below is MLX-Audio’s documented example using Qwen’s built-in Korean voice Sohee.</p><div><p><strong>Qwen example with MLX-Audio on Apple Silicon</strong></p><pre><code data-guide-code-block="3-0">pip install mlx-audio
mlx_audio.tts.generate --model mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-8bit --text '안녕하세요.' --voice Sohee --lang_code Korean</code></pre><p><small>This is a package, CLI, and community-converted checkpoint example, not the official Qwen CUDA path or its performance result.</small></p></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A recording desk with a microphone, pop filter, headphones and waveform screen" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check runtime support separately from measurements on your own device.</figcaption></figure><section><h2>Start by checking a short request and its WAV output</h2><p>Check the official instructions for the Python version, package, and checkpoint name, then start with one runtime path. The Qwen3-TTS demo accepts an IP address option; if you launch a local UI, bind it to 127.0.0.1 rather than a public address. Kokoro and Chatterbox provide library-call examples, so you can test with a script instead of opening a service port.</p><p>Generate one sentence in one language and play the saved WAV. Match each script with its language code and keep the voice setting unchanged. If a product name is mispronounced, hold the voice and language constant while changing spelling or punctuation one at a time. If playback fails, check model and voice names, save path, and output format in order. If speech cuts off, inspect token limits and chunking before submitting a long script.</p><p>Record the filenames, sample rates, and durations before and after changes. This helps distinguish playback problems from synthesis problems and identify the final file. Once the first sentence works, test the same path with your actual script and batch of files.</p></section><section><h2>Record synthesis speed alongside pronunciation review</h2><p>Measure model loading, synthesis after loading, and time to finish saving the file separately. Also record time to first audio (TTFA). RTF is elapsed time divided by audio duration; the real-time speed multiple is its inverse.</p><p>Total completion time matters for producing a long narration file, while time to first audio matters for interactive speech. Repeat the same text, voice, and execution path three times, compare each result and the median, and keep results by language.</p><p>Along with speed, evaluate pronunciation accuracy by language, listening comfort, and whether the voice suits the script. If you correct a product name or date and regenerate, record the number of revisions and editing time to see whether synthesis speed reduces the total work time.</p><p>Qwen's README lists 97 ms for the first streaming packet. That is different from the time to synthesize complete scripts in three languages. Use published figures to select candidates for a direct comparison under the same conditions.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="A portable audio player displaying a waveform beside headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record time to first audio separately from full synthesis completion.</figcaption></figure><aside><h2>Start with local speech generation</h2><p>Check the required languages and official runtime path, then start with a short audio sample.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=qwen3-tts-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local TTS turns text into speech on your computer. You can select a language and voice and save the generated audio as a WAV file. This guide explains how to choose models and refine pronunciation when producing the same announcement in Korean, English, and Japanese.</dd></div><div><dt>When is it better not to choose this?</dt><dd>First compare equivalent short sentences using built-in voices or presets. Test full scripts and multiple files only with candidates whose pronunciation and delivery meet your needs; this avoids mixing up differences in language, content, and voice. Before using a person’s voice as a reference, confirm it is your own voice or a recording used with explicit permission; otherwise, do not use it.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Higgs Audio v3 supports conversational TTS and voice cloning in more than 100 languages. Its public weights use the Boson Higgs Audio v3 Research and Non-Commercial License; commercial production requires a separate commercial license. [Higgs Audio v3](https://github.com/boson-ai/higgs-audio)</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Qwen3-TTS? Turn text into speech on your computer</title><link>https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide</guid><description>Learn how Qwen3-TTS turns text into speech, choose CustomVoice, VoiceDesign or Base, compare RTF and streaming, and run it on Mac or NVIDIA hardware.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">What is Qwen3-TTS? Turn text into speech on your computer</h1><p>Qwen3-TTS is an AI that reads text aloud. Give it a script and it produces a human-like voice. You can save the audio and use it as narration in a video.</p><p id="guide-page-summary">The technology that turns text into speech is called TTS. Qwen3-TTS can read scripts in several languages, including Korean.</p><p>You can also choose the voice that reads your script. Use one of Qwen3-TTS’s preset voices, describe a new voice in words, or provide a recording of your own voice as a reference. The model you need depends on how you want to prepare that voice.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>TTS turns scripts into speech. Qwen3-TTS supports several languages, including Korean.</li><li>Choose CustomVoice, VoiceDesign or Base according to how you prepare the voice.</li><li>For narration, compare file completion time; for conversation, compare the wait to the first sound and playback interruptions.</li></ol></section><section><h2>LLMs write the words; TTS gives them a voice</h2><p>For example, let’s give Qwen3-TTS this meeting announcement.</p><p>“The meeting starts at three this afternoon. Please review the materials beforehand.”</p><p>Qwen3-TTS reads the announcement aloud. If you also want help writing it, use an LLM. To transcribe something a person has said, use ASR.</p><p>For video narration, you can have TTS read a prepared script like this one. A voice assistant instead uses ASR to transcribe speech, an LLM to write a reply, and TTS to read the reply aloud. Qwen3-TTS handles that final step: turning the answer into audio.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/fish-drama-3-int4-local-tts-guide">Fish Audio Drama 3 int4: 41.5 GB down to 22 GB</a></li></ul></section><section><h2>Voice quality and delivery can change separately</h2><p>The announcement sounds different depending on who reads it. One person might have a deep, full voice; another might have a higher, lighter voice. This character of a sound is called timbre. It also helps us recognize who is speaking.</p><p>The same person can change their delivery too. Calmly announcing a meeting and urging someone not to be late call for different emphasis, pace and pauses. Features such as pitch, stress and sound duration are called prosody. When comparing voices, listen separately to their timbre and to how the delivery changes the emphasis and pace.</p><p>With Qwen3-TTS 1.7B CustomVoice, you can choose a voice and then instruct its delivery. Keep the announcement unchanged and ask it to read in a calm, informative tone.</p><p>Keep the script and voice the same and change only the delivery instruction to hear the difference. You can also keep the voice and edit the script. Change “three” to “four” and the same voice reads the updated announcement.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice">1.7B CustomVoice documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-qwen-1.webp" alt="A monitor showing an audio waveform beside a wooden speaker and an open script notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the script unchanged and change the voice and delivery one at a time to hear their differences.</figcaption></figure><section><h2>Choose a model for the voice you want</h2><p>The model depends on how you prepare the voice. First decide whether you want a preset voice, a newly described voice, or a voice based on a recording.</p><table><caption>How would you like the script to sound?</caption><thead><tr><th scope="col">What you want to do</th><th scope="col">Model to use</th><th scope="col">What to prepare</th></tr></thead><tbody><tr><th scope="row">Read in a preset voice</th><td>CustomVoice</td><td>Script · language · speaker</td></tr><tr><th scope="row">Create a new voice</th><td>VoiceDesign</td><td>Script · voice description</td></tr><tr><th scope="row">Read in a recorded voice</th><td>Base</td><td>New script · reference recording · its transcript (default setup)</td></tr></tbody></table><p>CustomVoice lets you choose from preset voices. Select the text, language and speaker. Among Qwen’s speakers, Sohee’s native language is Korean, so you can use her voice for the meeting announcement. You do not need a reference recording, making it a straightforward way to start with a script.</p><p>Use 1.7B CustomVoice if you want to instruct the delivery as well. The 0.6B model can read your script using a preset speaker, but it does not apply the instruct delivery instruction.</p><p>VoiceDesign creates a voice from a written description. You might ask for an adult voice with a low register, clear pronunciation and calm delivery. The model creates the voice from that description without a reference recording.</p><p>Base uses a recorded voice as a reference to read a new script. Provide your own recording of the announcement along with the new text. If the new text says “four this afternoon,” it reads the updated announcement using the recorded voice as a reference. The default setup takes both reference audio and its transcript. There is also an option that uses only speaker information without a transcript. Quality can vary with the input method.</p><p>If you like a voice created with VoiceDesign, you can reuse it for another script. Give the first generated audio to Base as a reference recording, and it uses that voice as a reference for the new text.</p><p>For voice cloning, use your own voice or one you have permission to use. When publishing the result, disclose that it is synthesized speech.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice#supported-speakers">Preset speaker list</a></li><li><a href="https://github.com/QwenLM/Qwen3-TTS/blob/022e286b98fbec7e1e916cb940cdf532cd9f488e/qwen_tts/inference/qwen3_tts_model.py#L799">0.6B handling in the official code</a></li><li><a href="https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign">VoiceDesign documentation</a></li><li><a href="https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-Base">Reference audio inputs for Base</a></li><li><a href="https://github.com/QwenLM/Qwen3-TTS#voice-design-then-clone">Reuse a designed voice</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-qwen-2.webp" alt="A screen displaying two audio tracks beside an audio interface and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen to audio made from the same script to compare pronunciation and similarity to the reference voice.</figcaption></figure><section><h2>How the script becomes speech</h2><p>Given a script and a voice, Qwen3-TTS generates speech with the requested delivery. The same phrase, “the meeting is starting,” can be read calmly or urgently.</p><p>Qwen3-TTS reads the text and generates tokens that represent compressed audio. These audio tokens contain information about the voice and pronunciation. A decoder reconstructs that information into an audio waveform we can listen to.</p><p>The 12Hz label in the model name identifies the audio codec. The codec divides speech into short time segments and compresses them. The technical report’s 12.5Hz means it processes 12.5 time segments per second of audio. The decoder unpacks the compressed information to reconstruct the waveform.</p><ul><li><a href="https://arxiv.org/html/2601.15621v1#S3.SS1">Architecture in the Qwen3-TTS technical report</a></li></ul></section><section><h2>Write numbers and names as you want them read</h2><p>Once the audio is ready, listen to whether it follows your script. In Korean scripts, pay particular attention to product names and abbreviations. Edit awkward pronunciations in the script and generate the audio again.</p><p>For example, “10/3, 3PM” is compact on a screen. For narration, you can spell it out as “October third, three in the afternoon.” Writing “three this afternoon” in the meeting announcement also makes the intended reading clear.</p><p>A sentence that strings together many details makes it harder to tell where to pause. Try breaking up a script such as “The meeting starts at three this afternoon, and attendees should review the materials beforehand and…” into shorter sentences. Break where a person would take a breath to make the message easier to follow.</p><p>After editing, listen again for omitted words, the intended pronunciation of names and numbers, and suitable emphasis and pauses. Spell out awkward terms the way you want them pronounced. If the delivery needs work, change the instruction or voice and compare the results.</p><p>You can revise English and Japanese scripts in the same way. Listening closely to names, abbreviations and numbers makes it easier to find what needs editing.</p></section><section><h2>How should you compare speech generation speed?</h2><p>For video narration, what matters is how quickly the complete audio file is ready. You use the finished file in the video, so faster generation lets you continue editing sooner.</p><p>You can compare speech generation speed using RTF. Divide the time spent generating audio by the playback length of the finished audio. The two examples below both assume generation took four seconds.</p><table><caption>RTF calculation examples · hypothetical values</caption><thead><tr><th scope="col">Finished audio length</th><th scope="col">Generation time</th><th scope="col">RTF calculation</th><th scope="col">What the time means</th></tr></thead><tbody><tr><th scope="row">10 seconds</th><td>4 seconds</td><td>4 ÷ 10 = 0.4</td><td>Generated in less than playback time</td></tr><tr><th scope="row">2 seconds</th><td>4 seconds</td><td>4 ÷ 2 = 2</td><td>Took twice the playback time</td></tr></tbody></table><p>Even when generation takes the same four seconds, RTF changes with the length of the audio. To compare TTS speed, use the same script and compare both audio duration and generation time.</p><p>For a voice assistant, the important delay is from the end of your question to the first sound of the answer. A long wait interrupts the conversation.</p><p>Streaming can shorten that wait. Playback starts with the first generated audio instead of waiting for the complete file. If later audio is not generated in time, however, playback can stop midway. For conversational TTS, check both the delay to the first sound and interruptions during playback.</p><p>On Mac, MLX-Audio’s --stream option can play speech while it is being generated. You can hear the audio before the file is complete.</p><p>The first run also takes time to download the model and load it into memory. If you keep the program open and revise the script, compare the time from submitting text to generating audio. If you restart the program for every task, also compare the time from launch to hearing the audio.</p><ul><li><a href="https://github.com/Blaizzy/mlx-audio#command-line">MLX-Audio streaming documentation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-qwen-3.webp" alt="A workspace with a microphone beside a monitor displaying three differently colored audio tracks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For video narration, compare time to finish the audio file. For conversation, check the wait to the first sound and interruptions during playback.</figcaption></figure><section><h2>How can you run it on your computer?</h2><p>You can download Qwen3-TTS and run it on your own computer. Once you have the model files and software ready, you can reuse the downloaded model to turn new scripts into speech.</p><p>Choose the model based on the voice feature you decided to use. The 0.6B and 1.7B labels identify model size; 0.6B is the smaller model.</p><p>For announcements using a preset voice, you can choose 0.6B CustomVoice. Use 1.7B CustomVoice to instruct the delivery too. Use 1.7B VoiceDesign to describe a new voice in words, or Base to generate speech from a recorded voice reference.</p><p>You need storage for the model files and memory to run them. During generation, memory also holds the audio decoder and working buffers, not just the weights. The format used to store the weights affects actual memory use too.</p><p>Your computer performs the calculations needed to generate speech. Before installing, check that it has enough memory and that the software supports the model file format.</p><p>On Mac, you can use MLX-Audio with models converted to MLX format. The MLX community distributes a 4-bit version of 0.6B CustomVoice. Quantization stores model values with fewer bits to reduce memory use. Compare settings by listening to the same script and timing generation.</p><p>On an NVIDIA PC, you can install Qwen’s official Python package and run it with CUDA. Our local TTS setup guide covers installation commands and saving audio files.</p><p>If you want to keep your script on your computer, check whether the app uses a remote API or cloud storage. Enabling external storage may send your script to that service.</p><ul><li><a href="https://huggingface.co/mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-4bit">MLX converted model</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Local TTS setup guide</a></li></ul></section><section><h2>Keep the same voice when the script changes</h2><p>If the meeting time changes from three to four, generate the announcement again with the same voice. Keep selecting the same preset speaker or reuse your reference audio. To announce it in your own voice, prepare a recording of yourself as that reference. Import the finished audio into your editor and add it to the video.</p><p>Generate audio from the script you actually plan to use, then listen to the pronunciation and pauses. If anything sounds awkward, edit the script or delivery instruction and generate it again.</p><p>If your current computer produces speech you like without slowing down your work, start with that setup. If processing several scripts takes too long or conversational playback keeps stopping, compare hardware using the same script and execution method.</p><p>For other voices and ways to run them, see our local TTS model comparison. To get a sense of generation time, try the speech generation time simulation.</p><ul><li><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Local TTS model comparison</a></li><li><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=qwen3-tts-0.6b">Speech generation time simulation</a></li></ul></section><section><h2>Sources</h2><ul><li><a href="https://github.com/QwenLM/Qwen3-TTS">Qwen official repository</a></li><li><a href="https://arxiv.org/html/2601.15621v1">Technical report</a></li><li><a href="https://github.com/Blaizzy/mlx-audio">MLX-Audio</a></li><li><a href="https://github.com/QwenLM/Qwen3-TTS#overview">Qwen official overview</a></li></ul></section><aside><h2>Try the Qwen3-TTS time simulation</h2><p>Explore how long speech generation may take on your hardware.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=qwen3-tts-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The technology that turns text into speech is called TTS. Qwen3-TTS can read scripts in several languages, including Korean.</dd></div><div><dt>How much memory does it need?</dt><dd>You need storage for the model files and memory to run them. During generation, memory also holds the audio decoder and working buffers, not just the weights. The format used to store the weights affects actual memory use too.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Compare local TTS models: languages, hardware and speed evidence</title><link>https://localai.co.kr/en/guides/local-tts-model-comparison</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-tts-model-comparison</guid><description>Compare Kokoro-82M, Qwen3-TTS and Chatterbox Multilingual by workflow and documented runtime, separating published timing claims from missing conditions.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Compare local TTS models: languages, hardware and speed evidence</h1><p>Compare multilingual speech samples and runtime paths together</p><p id="guide-page-summary">Local TTS generates audio from a script, language, and voice setting and saves it as a file. Use language lists to shortlist candidates, then compare pronunciation and file completion on a supported runtime using equivalent text. Time to first audio and full-file synthesis time are different metrics.</p><p>For a product update in Korean, English, and Japanese, prepare equivalent sentences containing the product name and date. Narrow the options using the supported languages of Kokoro, Qwen3-TTS, and Chatterbox Multilingual V3, then listen to the generated audio. Compare product-name pronunciation, dates, and pauses to choose a model for your script.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Kokoro 82M does not list Korean, and Qwen3-TTS and Chatterbox document different runtime paths; check by OS.</li><li>Standard RTF is elapsed generation time divided by actual audio duration. Some repositories may label its inverse as RTF, so verify the definition.</li><li>Published Qwen-related figures are author benchmarks, not measurements by this site or an official Qwen-team comparison.</li></ol></section><section><h2>Shortlist candidates by language and runtime path</h2><p>Kokoro 82M is an option for simple reading tasks. Its README includes CPU and CUDA examples and an MPS fallback example for Apple Silicon M1–M4. Qwen3-TTS offers CustomVoice for selecting a voice, VoiceDesign for creating one, and Base for using a reference recording. Its official quick start uses Python 3.12 and CUDA. For CPU or MPS use, first find an execution path that supports that device.</p><p>Chatterbox Multilingual V3 is a 500M multilingual model. The repository's Python example lets you select CPU, CUDA, or MPS. On a Mac, try a short sentence with MPS and check pronunciation, generation time, and memory use.</p><ul><li><a href="https://github.com/hexgrad/kokoro/blob/main/README.md">Kokoro official runtime guide</a></li><li><a href="https://github.com/QwenLM/Qwen3-TTS/blob/main/README.md">Qwen3-TTS official repository</a></li><li><a href="https://github.com/resemble-ai/chatterbox/blob/master/README.md">Chatterbox official repository</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/supertonic-3-korean-local-tts-guide">Generate Korean speech on CPU with Supertonic 3</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-models-1.webp" alt="A speaker, field recorder and microphone arranged on a wooden shelf" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review each model’s documented runtime path separately.</figcaption></figure><section><h2>Narrow TTS choices by language, hardware, and license</h2><p>For Korean speech synthesis on a CPU, consider Supertonic 3, which has a public ONNX example and M1–M5 and F1–F5 voice presets. Its public repository has been archived since September 2026. VoxCPM2 is an option for generating speech in 30 languages, including Korean, on a CUDA GPU. [Supertonic](https://huggingface.co/supertone-oss-archive/supertonic-3) · [VoxCPM2](https://huggingface.co/openbmb/VoxCPM2)</p><p>OmniVoice lists a broader range of languages and dialects, but its CC-BY-NC weights are for non-commercial use. Fish Audio S2 Pro supports tag-based control of expression and has research and non-commercial conditions. [OmniVoice](https://huggingface.co/k2-fsa/OmniVoice) · [Fish S2 Pro](https://huggingface.co/fishaudio/s2-pro)</p><p>Pocket TTS is CPU-focused and supports English, French, German, Portuguese, Italian, and Spanish. Korean and Japanese are not on its supported language list. [Pocket TTS](https://huggingface.co/kyutai/pocket-tts)</p></section><section><h2>Separate time to first audio from full-file completion</h2><p>The 97 ms in the Qwen README describes a possible time to first audio packet (streaming TTFA). The statement does not specify device, input length, precision, batch, or completion boundary. If you deliver WAVs in multiple languages, measure full file completion as well as time to first audio.</p><p>The faster-qwen3-tts author reports RTX 4090 CUDA Graph RTF values of 4.78/4.22 and TTFA of 156/174 ms for 0.6B/1.7B, but the table omits input length and repetition conditions. The Triton repository specifies RTX 5090, BF16, batch 1, two Korean and English sentences, three warm-ups, and 20 measured runs. Its RTF uses the inverse definition, so higher is faster—the opposite of standard RTF.</p><p>The Triton table separately lists initial model load as 6.0 seconds for Hybrid and 17.5 seconds for default PyTorch. It does not report actual output duration for the two test sentences, so do not apply its RTF or request times directly to scripts of different lengths. Record post-load request time separately from the first launch through file saving.</p><table><caption>Author-published figures for Qwen-derived CUDA runtimes, not a controlled model ranking.</caption><thead><tr><th scope="col">Environment and conditions</th><th scope="col">Request latency</th><th scope="col">Initial load</th><th scope="col">Repository RTF*</th><th scope="col">First audio</th></tr></thead><tbody><tr><th scope="row">RTX 4090 · faster-qwen3-tts · 0.6B · CUDA Graph</th><td>Not reported in table</td><td>Not reported in table</td><td>4.78</td><td>156 ms</td></tr><tr><th scope="row">RTX 4090 · faster-qwen3-tts · 1.7B · CUDA Graph</th><td>Not reported in table</td><td>Not reported in table</td><td>4.22</td><td>174 ms</td></tr><tr><th scope="row">Qwen3-TTS-Triton · RTX 5090 · 1.7B Hybrid · BF16 · batch 1 · KO/EN · 3 warm-ups + 20 runs</th><td>886 ms KO / 1,042 ms EN</td><td>6.0 s</td><td>4.20 KO / 4.26 EN</td><td>Not reported separately</td></tr><tr><th scope="row">Triton benchmark default PyTorch path · same RTX 5090 conditions</th><td>4,615 ms KO / 5,081 ms EN</td><td>17.5 s</td><td>0.88 KO / 0.90 EN</td><td>Not reported separately</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/speech/tts-models-2.webp" alt="A laptop with connected headphones and a notebook on a desk by a window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure time to first audio, synthesis completion, and file saving separately.</figcaption></figure><section><h2>RTF and TTFA answer different questions</h2><p>Standard RTF is elapsed time T divided by actual audio duration A (T÷A). If synthesis time equals audio length, RTF is 1. A÷T is the real-time speed multiple, also 1 in that case; when synthesis is faster, standard RTF is below 1 and the multiple above 1. Include the formula in the table heading to clarify direction.</p><p>TTFA can matter for interactive responses, while delivery of a long announcement needs the time through full synthesis and saving. Record whether cold loading, preprocessing, synthesis, vocoder/decoder, chunk joining, and file saving are included; also distinguish latency for one batch request from throughput across multiple requests.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-models-3.webp" alt="A screen comparing two audio waveforms beside headphones and colored folders" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Standard RTF is elapsed time divided by actual audio duration.</figcaption></figure><section><h2>Run a small comparison under matched conditions</h2><p>Within supported capabilities, match text, language, target length, and voice type. Record model ID and revision, OS, CPU/GPU, Python and library versions, backend, precision, batch size, and sample rate. Measure loading and synthesis separately in a fresh process, then repeat the same request after warm-up. Test one language at a time with its script and settings fixed.</p><p>Calculate standard RTF using the actual saved WAV duration and retain each run’s values. Record mispronounced product names, awkward pauses, and regeneration count in separate quality fields. Include time spent revising a product name and regenerating to judge whether the actual delivery workflow became shorter.</p></section><section><h2>Choose hardware from verified runtime results and license terms</h2><p>First check the execution paths documented for your operating system and device. MPS support does not imply the same speed as CUDA. If performance is slower than expected, inspect CPU fallback, unsupported operations, saving time, and memory use in the logs, then change one condition at a time.</p><p>The Kokoro model card lists Apache-2.0 and the Chatterbox repository lists MIT. Qwen’s repository Apache-2.0 notice applies to code, so check the selected checkpoint’s card separately. Before public or commercial use, review terms for code, weights, input audio, and generated output. Use only your own or authorized reference voice and check where a demo uploads and stores files.</p><ul><li><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=qwen3-tts-0.6b">Explore generation speed across speech models</a></li></ul></section><aside><h2>Compare runtime paths and languages with your own text</h2><p>Check official runtime support and test with a short sentence.</p><a href="https://localai.co.kr/en/speech?mode=tts&amp;model=qwen3-tts-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local TTS generates audio from a script, language, and voice setting and saves it as a file. Use language lists to shortlist candidates, then compare pronunciation and file completion on a supported runtime using equivalent text. Time to first audio and full-file synthesis time are different metrics.</dd></div><div><dt>How much memory does it need?</dt><dd>Chatterbox Multilingual V3 is a 500M multilingual model. The repository's Python example lets you select CPU, CUDA, or MPS. On a Mac, try a short sentence with MPS and check pronunciation, generation time, and memory use.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>OmniVoice lists a broader range of languages and dialects, but its CC-BY-NC weights are for non-commercial use. Fish Audio S2 Pro supports tag-based control of expression and has research and non-commercial conditions. [OmniVoice](https://huggingface.co/k2-fsa/OmniVoice) · [Fish S2 Pro](https://huggingface.co/fishaudio/s2-pro)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Nemotron 3 Diarization: who said what in your meeting?</title><link>https://localai.co.kr/en/guides/nemotron-3-diarization-local-meeting-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-3-diarization-local-meeting-guide</guid><description>Add speaker labels to local meeting transcripts with Nemotron 3 Diarization. Compare Mac, Windows and Linux paths, latency settings and benchmark meaning.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Nemotron 3 Diarization: who said what in your meeting?</h1><p>Track meeting speakers with Nemotron 3 diarization</p><p id="guide-page-summary">Nemotron 3 Diarization segments speech in a recording and labels voices in order of appearance as speaker_0, speaker_1, and so on. Paired with ASR transcripts, it helps align text and speaker segments for review, but a person must map labels to attendees’ real names.</p><p>Suppose one person in a three-person meeting says, “I’ll send the draft tomorrow,” and another says, “I’ll check the figures.” If both sentences appear under speaker_0 in the transcript, replay those sections before assigning an owner. ASR turns speech into text; diarization segments when each voice speaks. Treating them as separate steps helps identify a misheard sentence versus a wrongly assigned speaker label.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>speaker_0 and speaker_1 indicate order of appearance, not real names or job titles.</li><li>Overlapping speech may have two labels, but this does not separate clean audio tracks for each speaker.</li><li>Published DER and throughput figures come from English evaluation and specific server settings; they are not meeting-transcript accuracy or personal-PC speed.</li></ol></section><section><h2>What support for eight speakers and speaker labels means</h2><p>Nemotron 3 Diarization is an approximately 100M-parameter open-weight model. It labels voices in order of appearance as speaker_0, speaker_1, and outputs speech segments. You can follow a label to find a person’s turns, but the label itself does not reveal a real name or role; map names using attendee information and the recording.</p><p>The official description lists support for up to eight speakers. Listen to verify whether a voice returning after silence or briefly interrupting is the same person. Overlapping speech may produce two labels at the same time, but this is not source separation into clean individual tracks. Conversations with more than eight speakers are outside the stated range.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-meeting-transcription-workflow">Create local meeting notes with transcripts, timestamps, and speakers</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/localai-411-local-meeting-guide">Label Speakers and Inspect Ambient Sounds in Meeting Recordings with LocalAI 4.11</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-meeting.webp" alt="A wooden meeting table with a central microphone surrounded by four empty chairs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Meeting records need to show who spoke as well as what was said.</figcaption></figure><section><h2>Check ASR and diarization separately on the same short meeting</h2><p>Transcription errors differ for Korean meetings with English product names and for Japanese interviews. Select an ASR such as Qwen3-ASR, Whisper, or Nemotron 3.5 that fits the language, and check whether it provides word-level timestamps to align transcript words with speaker segments more precisely.</p><p>Include introductions, brief interruptions, and a speaker returning after silence in a test segment; prepare a reference transcript. Separately record whether “draft,” “tomorrow,” and “figures” were transcribed correctly, when speaker labels change, and whether overlap is marked. Combining ASR and diarization into one score makes the failing step harder to identify.</p></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-timeline.webp" alt="A laptop with three colored audio tracks, headphones, and a portable recorder" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Replay overlapping sections to verify speaker labels.</figcaption></figure><section><h2>Match the runtime path to Mac, GPU PC, or CPU</h2><p>NVIDIA’s NeMo Python guide focuses on Linux and NVIDIA GPUs. NeMo-Speech.cpp provides Apple Silicon Metal, CPU, and CUDA paths with OS-specific setup. On Mac, use doctor to verify Metal support in the build; on NVIDIA PCs, check CUDA and runtime versions; without a GPU, time a short file first. Developers building Mac/iPhone apps can evaluate the separate Argmax Pro SDK 3 and its terms and integration method.</p><table><caption>Runtime path and first checks by environment</caption><thead><tr><th scope="col">Environment</th><th scope="col">Runtime</th><th scope="col">First check</th></tr></thead><tbody><tr><th scope="row">Apple Silicon Mac</th><td>NeMo-Speech.cpp · Metal</td><td>Metal support in the build and model selection</td></tr><tr><th scope="row">NVIDIA GPU PC</th><td>NeMo-Speech.cpp · CUDA / NeMo Python</td><td>Driver/runtime versions and concurrent ASR memory</td></tr><tr><th scope="row">PC without a GPU</th><td>NeMo-Speech.cpp · CPU</td><td>Processing time for a short recording</td></tr><tr><th scope="row">Mac/iPhone app</th><td>Argmax Pro SDK 3</td><td>SDK terms and app integration</td></tr></tbody></table><ul><li><a href="https://github.com/NVIDIA/NeMo-Speech.cpp/blob/main/docs/install.md">NeMo-Speech.cpp installation by OS</a></li></ul></section><section><h2>Specify the model and check the first WAV and speaker labels</h2><p>After installation, open a new terminal and use doctor to check device detection, model list to inspect the current catalog, and pull to fetch weights. The example commands specify the diarization alias. If nemotron-3-diarization is absent from your installed version, check the version rather than guessing another name. Confirm you have permission to process the recording.</p><p>Put a short segment in meeting.wav. Use diarize for speaker segments alone, or combine transcribe with --diar-model to add speaker information to a Nemotron 3.5 transcript and save JSON. Comparing the outputs distinguishes an ASR error such as mishearing “tomorrow” from a correct sentence assigned to the wrong speaker number.</p><p>With `--json`, the result is printed to the terminal. To keep a file, also specify `--output meeting-transcript.json` as below. Open it in the folder where the command ran, inspect the transcript and `speaker` labels, and compare segments while playing `meeting.wav` in that folder.</p><div><p><strong>Check models and run NeMo-Speech.cpp</strong></p><pre><code data-guide-code-block="3-0">nemo-speech doctor
nemo-speech model list
nemo-speech pull nemotron-3-diarization
nemo-speech diarize meeting.wav --model nemotron-3-diarization
nemo-speech transcribe meeting.wav --model nemotron-3.5 --diar-model nemotron-3-diarization --json --output meeting-transcript.json</code></pre><p><small>The first run may download weights. CUDA, Metal, or CPU is selected according to the build and detected device.</small></p></div><ul><li><a href="https://github.com/NVIDIA/NeMo-Speech.cpp/blob/main/docs/cli.md">NeMo-Speech.cpp JSON and file-output options</a></li></ul></section><section><h2>Choose input buffers for recorded files or live processing.</h2><p>The input buffer is the length of audio sent to the model at once. Published settings are 0.32, 0.64, 1.04, and 30.4 seconds. Model computation, ASR, result assembly, and display add time, so measure end-to-end latency separately. Start comparisons with the offline 30.4-second buffer for recorded meetings, or 1.04 seconds and shorter for live captions. Check the current C++ CLI help for corresponding options rather than copying Python setting names.</p><table><caption>NeMo input-buffer lengths and use cases</caption><thead><tr><th scope="col">Setting</th><th scope="col">Input buffer</th><th scope="col">Starting point</th></tr></thead><tbody><tr><th scope="row">Offline style</th><td>30.4 s</td><td>Process a file after recording</td></tr><tr><th scope="row">Low latency</th><td>1.04 s</td><td>Starting point for live processing</td></tr><tr><th scope="row">Very low latency</th><td>0.64 s</td><td>Compare faster updates</td></tr><tr><th scope="row">Lowest recommended latency</th><td>0.32 s</td><td>Evaluate total latency and accuracy</td></tr></tbody></table></section><section><h2>Keep English DER and server throughput separate from your meeting results</h2><p>The initial VoiceArena evaluation reported DER 14.72% across 139 English conversations, about 22 hours. It included overlap and used no boundary collar. DER combines missed speech, false speech, and speaker confusion; it is not transcription accuracy. English results cannot be used to calculate error rates for a three-person Korean meeting.</p><p>The 15,113× throughput figure is a benchmark under RTX PRO 5000, BF16, batch 32, and torch.compile. It is neither the time to process one recording on a personal PC nor ASR recognition time, and batch 32 does not mean 32 meeting attendees. Do not apply it to a Mac mini or RTX 4090; compare after matching recording, runtime, precision, and batch conditions.</p></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-review.webp" alt="A small desktop computer beside an audio-track monitor, blank notebook, and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Expand from a checked short segment to a longer recording.</figcaption></figure><section><h2>Record statements and names verified by a person</h2><p>Prepare a reference transcript for a 2–5-minute segment and compare ASR and diarization outputs side by side, checking introductions, interruptions, and a speaker returning after silence. Separately record whether “I’ll send the draft tomorrow” is accurate, when labels change, and whether overlap is marked. Replay decisions involving owners or numbers and mark uncertain labels for review. If the test is stable, process the full meeting with the same settings and recheck decision/owner sections.</p><p>Confirm permission to process the meeting, attendee consent, storage location, and retention period. Initial weight downloads or updates may require internet; check app synchronization and storage too. OpenMDW 1.1 applies to model weights, while associated apps and SDKs have separate terms. Keeping human-verified names and owners alongside transcript and timestamps makes it easier to recover the basis for decisions.</p><ul><li><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=qwen3-asr-0.6b">Try the shared ASR transcription sample</a></li></ul></section><aside><h2>Explore ASR transcription wait time</h2><p>This is a shared Qwen3-ASR sample and excludes Nemotron diarization time.</p><a href="https://localai.co.kr/en/speech?mode=asr&amp;model=qwen3-asr-0.6b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Nemotron 3 Diarization segments speech in a recording and labels voices in order of appearance as speaker_0, speaker_1, and so on. Paired with ASR transcripts, it helps align text and speaker segments for review, but a person must map labels to attendees’ real names.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>M5 Ultra SSD: faster loading or faster local AI?</title><link>https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai</link><guid isPermaLink="true">https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai</guid><description>Separate the M5 Ultra SSD's effects on model loading, prefill and token generation. Use a documented offload example to decide where to spend on memory and storage.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">M5 Ultra SSD: faster loading or faster local AI?</h1><p>Which local AI waiting times can the M5 Ultra SSD reduce?</p><p id="guide-page-summary">An SSD stores model files and reads them into memory. Its speed matters when you first open a model or switch models frequently; once loaded, memory and GPU performance matter as the model processes documents and generates answers. M5 Ultra reviews and a PLE-offloading example help explain how to divide a budget between SSD and memory.</p><p>When you use the same model every day, question processing repeats more often than model loading. Switching repeatedly between image, coding and document models also repeats file reads. Identify where you wait, then calculate how much a faster SSD could help.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Model loading, prefill before the first answer, and later decode are distinct waiting stages.</li><li>PLE SSD offload reads needed table entries rather than moving the whole model, and does not replace memory.</li><li>Reserve enough memory for daily models first, then choose SSD speed and capacity for model switching and file storage.</li></ol></section><section><h2>An SSD reduces the time to read a model file</h2><p>Imagine keeping a local model on a Mac Studio and writing work notes from several PDFs. Before accepting a question, the app reads the model file from storage into memory. Tom’s Guide measured 13,902 MB/s read and 14,283 MB/s write on an M5 Ultra configured with a 4TB SSD. Those results apply to the 4TB configuration in that review.</p><p>At a constant read speed, reading a 70 GB model takes 10 seconds at 7 GB/s or 5 seconds at 14 GB/s. Actual model loading also includes preparation after the file is read.</p><p>Consider the share of a task spent reading files. A hypothetical 10 seconds of file reading, 20 seconds of input processing, and 30 seconds of generation total 60 seconds. If only SSD reading doubles in speed, reading takes 5 seconds and the total falls to 55 seconds, about 8.3% less. This illustration keeps processing and generation unchanged and excludes separate setup time.</p><p>Assume ten questions take 50 seconds each while the model stays in memory. Adding a 10-second initial load gives 510 seconds; a 5-second load gives 505 seconds, about 1% less. If you close and reload the model for every question, the total falls from 600 to 550 seconds. The same five-second saving matters differently depending on loading frequency. Question processing and cache effects are held constant in this example.</p><table><caption>Waiting stages shown in the app and the SSD's role</caption><thead><tr><th scope="col">What you see</th><th scope="col">Main task</th><th scope="col">Role of the SSD</th></tr></thead><tbody><tr><th scope="row">Opening the model</th><td>Read weights and prepare execution</td><td>Directly affects actual disk reads</td></tr><tr><th scope="row">Waiting for the first answer after a question</th><td>Prefill and cache handling</td><td>After model loading, compute and context conditions matter</td></tr><tr><th scope="row">The answer keeps appearing</th><td>Decoding successive tokens</td><td>In ordinary memory-resident runs, memory and compute matter more than SSD</td></tr></tbody></table><ul><li><a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review">Tom’s Guide M5 Ultra 4TB SSD test conditions</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/m5-ssd-model-loading.webp" alt="A computer showing a model-loading bar beside materials taken from a shelf" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate the initial model-file load from processing later questions.</figcaption></figure><section><h2>The first answer to a PDF and answer generation are different stages</h2><p>After the model is in memory and you submit a PDF, the app extracts text or processes pages to form model input. Prefill is the stage in which the question, conversation history, and retrieved passages are processed before the first answer. Decode is the stage that continues the answer after the first token. Both differ from the initial read of the model file from the SSD.</p><p>When you ask an 80-page PDF for its renewal terms, the app may send all extracted text or retrieve relevant passages. Increasing it to 400 pages raises prefill work and context use in a full-text workflow. Retrieval can reduce the input, but check that it also found exceptions attached to the renewal clauses.</p><p>If the first token is slow, separate file preparation, retrieval, and prefill. If the answer continues slowly after the first token, inspect decode speed. Identifying the waiting stage helps decide whether replacing the SSD will help.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Distinguish first-answer wait from token generation speed</a></li></ul></section><section><h2>PLE offload reads selected embedding tables from the SSD</h2><p>Qwen3.8-Flash-Next contains PLE (Per-Layer Embedding) and a large n-gram embedding table. Supported engines can keep the table on SSD and fetch the entries they need. Ordinary execution reads model files at startup, whereas this PLE path also fetches selected data during answers, so SSD reads and file cache can affect generation too.</p><p>MacStories reported a median generation rate of 86.8 tok/s with an M5 Ultra 256 GB, 80-core GPU, Qwen Flash-Next oQ8e, oMLX 0.7.0.dev2, qwen4_ple_ssd_offload, and MTP depth 3. MTP is a generation method that predicts future token candidates; PLE offload reads required table entries from the SSD. The reported result used both together.</p><p>The observed process-memory peak in the same oQ8e configuration was about 187GB, sampled for the whole process including the model and working space. Compare purchase candidates using that model, oMLX, PLE and MTP combination with your usual inputs and apps. To isolate the SSD effect, keep the other settings fixed and vary the storage conditions.</p><p>When memory is under pressure, macOS can swap data to SSD and read it back. Repeated movement of active data can delay responses. PLE fetches a table chosen by the runtime, while swap is the operating system’s response to memory pressure. Record Activity Monitor’s memory pressure and SSD reads over the same interval to locate the waiting path.</p><ul><li><a href="https://www.macstories.net/stories/m5-ultra-mac-studio-review-the-dream-mac-for-local-ai-agents/">MacStories M5 Ultra PLE offload run conditions</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">PLE RAM and SSD offload settings and requirements</a></li></ul></section><figure><img src="https://localai.co.kr/guides/m5-ssd-selective-offload.webp" alt="Selected index cards taken from a drawer and placed beside a computer and storage device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>PLE offload reads needed table entries from SSD, not the entire model.</figcaption></figure><section><h2>Choose 256 GB or 512 GB memory for the models you keep open</h2><p>When choosing 256GB or 512GB, include weights, working space, KV cache and your usual apps. The Mac’s CPU, GPU and macOS share unified memory. Load the intended model and send follow-up questions on a long document to find whether that work needs extra capacity.</p><p>Moving from 256 GB to 512 GB makes room for larger models, longer conversations, and more simultaneous apps. If the current model and context already fit, GPU performance and memory bandwidth influence speed. To diagnose insufficient capacity, check whether memory pressure or swapping coincides with delayed responses.</p><p>Frequent model changes increase file reads, making SSD speed more important; storing many models also requires capacity. Test external storage as a complete drive, enclosure, connection, cable and thermal setup. The 13,902MB/s read and 14,283MB/s write figures above belong to Tom’s Guide’s internal 4TB configuration; look for results for the capacity or external setup you intend to buy.</p><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Review M5 Ultra 256 GB model and memory configurations</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-512gb">Check the M5 Ultra 512GB configuration and availability</a></li></ul></section><figure><img src="https://localai.co.kr/guides/m5-ssd-memory-budget.webp" alt="Desk space for a computer and working materials, with stored files and an external drive on a shelf" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave memory headroom for context and apps as well as the model.</figcaption></figure><section><h2>Measure loading, first-token wait, and generation separately</h2><p>On your current Mac, keep model, runtime, and quantization fixed and record three times: first, initial model-file loading; second, time from submitting an 80-page PDF to the first token; third, answer generation after that. When increasing the document to 400 pages, keep the other settings unchanged and compare only the input change.</p><p>In Activity Monitor, record memory pressure and swap at the time of the delay. Data retained in file cache can make a second model load faster. Prompt cache reuses previous input computation to shorten first-answer waits. Also record the time oMLX takes to restore KV cache from SSD separately. The comparison tool below opens M3 Ultra 512GB against M5 Ultra 256GB with Qwen3.8 Flash-Next, 16,384 tokens and full mode.</p><ul><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-studio-m3-ultra-512gb&amp;right=mac-studio-m5-ultra-256gb&amp;model=qwen-3.8-flash-next&amp;context=16384&amp;mode=full">Compare estimated prefill and decode on M3 Ultra and M5 Ultra</a></li><li><a href="https://github.com/jundot/omlx#features">oMLX memory/SSD-tiered KV-cache feature</a></li></ul></section><section><h2>Budget for memory first, then SSD</h2><p>If you work daily with the same model on an 80-page PDF and follow-up questions, first check that there is room to keep the model in memory. When it remains loaded, file loading does not repeat with every question, so memory headroom can matter more directly for this workflow. If you often switch among coding, image, and document models, SSD speed may help with repeated reads; if storage is running out, compare capacity first.</p><p>If you intend to use PLE offloading, test your usual work in 256GB with the intended checkpoint and oMLX combination. Keep other apps open and finish follow-up questions while checking memory and waits. Compare the extra cost of 512GB with the space you actually need for concurrent models or long context.</p><p>Before buying, reproduce the bottleneck with your current task. In the illustrative 70 GB calculation, cutting file reading in half reduces a 60-second total to 55 seconds; when keeping the same model open, the saved five seconds occur only on the initial load. First fit the model and context into memory, then compare SSD speed if model switching is frequent or capacity if files are numerous. Prefill/decode experience in a speed tool and initial storage loading are different values, so measure them separately.</p></section><section><h2>SSD test and model-run configurations</h2><p>The SSD read and write figures come from Tom’s Guide’s internal 4TB setup; 86.8 tok/s comes from MacStories’s model-run configuration. The sources below detail the hardware and settings for each test.</p><ul><li><a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review">Tom’s Guide: M5 Ultra review and 4TB SSD measurement</a></li><li><a href="https://www.macstories.net/stories/m5-ultra-mac-studio-review-the-dream-mac-for-local-ai-agents/">MacStories: M5 Ultra PLE offload run</a></li><li><a href="https://www.apple.com/mac-studio/specs/">Apple Mac Studio technical specifications</a></li><li><a href="https://ml-explore.github.io/mlx/build/html/usage/unified_memory.html">MLX unified-memory documentation</a></li><li><a href="https://github.com/jundot/omlx">oMLX project and tiered KV cache</a></li></ul></section><aside><h2>View estimated Flash-Next speed on M5 Ultra</h2><p>Change input length to review first-answer wait and generation speed. Model-file loading time is not included.</p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m5-ultra-256gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=16384&amp;accel=mtp">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>An SSD stores model files and reads them into memory. Its speed matters when you first open a model or switch models frequently; once loaded, memory and GPU performance matter as the model processes documents and generates answers. M5 Ultra reviews and a PLE-offloading example help explain how to divide a budget between SSD and memory.</dd></div><div><dt>How much memory does it need?</dt><dd>The observed process-memory peak in the same oQ8e configuration was about 187GB, sampled for the whole process including the model and working space. Compare purchase candidates using that model, oMLX, PLE and MTP combination with your usual inputs and apps. To isolate the SSD effect, keep the other settings fixed and vary the storage conditions.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI music generation: make songs and background music on your computer</title><link>https://localai.co.kr/en/guides/local-music-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-music-generation-guide</guid><description>Choose a local music workflow for your PC or Mac: YuE2, ACE-Step and HeartMuLa, lyrics and prompts, memory requirements, generation time and refining your first track.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Local AI music generation: make songs and background music on your computer</h1><p>Create local background music that fits your video</p><p id="guide-page-summary">Local music generation takes a description of style, instruments, and mood, then creates an instrumental or song and saves audio. For video background music, decide whether vocals are needed, the target duration, and where dialogue occurs; then place a short result against the video and review it.</p><p>Imagine adding calm background music to a 30-second walking video for family while keeping the location audio audible. That duration is a creative target, not a claim that every model generates it in one pass. Describing audible requirements—soft acoustic guitar and light piano under speech, no vocals, a quiet start that grows slightly brighter—makes it easier to choose a model and output.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Songs, instrumentals, and sound effects are different outputs; check the model and interface for your goal.</li><li>Record prompt, model, runtime, output duration, and retries to compare your own workflow.</li><li>Before sharing, separately check code, weight, output-use terms, and rights to any reference audio.</li></ol></section><section><h2>Choose a music model for the output you need</h2><p>Music generators do not all produce the same kind of output. Some plan a vocal song from lyrics and style; others are suited to short instrumentals or sound effects. Since the walking video already has location speech, first check paths that can produce vocals-free instrumentals.</p><p>YuE2 plans and generates a song from lyrics and style, while ACE-Step offers several paths for local music generation and editing. HeartMuLa is another vocal-song option using lyrics and music tags. For short instrumentals or effects, consider Stable Audio Open or MusicGen. Check supported duration and vocal-free options in both the model card and the interface you will actually use.</p><ul><li><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Compare music-model use cases and runtime requirements</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/magenta-realtime-2-local-music-guide">Turn your Mac into a live AI instrument with Magenta RealTime 2</a></li><li><a href="https://localai.co.kr/en/guides/ace-step-vst3-daw-guide">Create and revise ACE-Step music in a DAW: a local VST3 guide</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-hub-workspace.webp" alt="A home music desk with a computer, small keyboard and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First define the video’s purpose, duration, and whether vocals are needed.</figcaption></figure><section><h2>Check model files and the runtime together</h2><p>A browser can be just the control interface while computation runs on your GPU. Conversely, a program that appears local may call an external service, so check network behavior before installation if privacy or offline use matters. Internet access may also be needed to download packages and model files initially.</p><p>A Mac’s 32 GB of unified memory and a graphics card’s 32 GB of VRAM have the same capacity number but different execution conditions. CUDA-only code may not run unchanged on a well-equipped Mac, while Apple Silicon-supported software can run without a separate NVIDIA PC. Match the supported OS, runtime, and checkpoint, generate a short output, and verify both successful installation and the result you need.</p><ul><li><a href="https://localai.co.kr/en/guides/ace-step-local-music-guide">Check ACE-Step runtime requirements on PC and Mac</a></li></ul></section><section><h2>Describe the role the instrumental should play</h2><p>When vocals are not needed, describe the role of the instrumental in the video rather than writing lyrics. For a vocal song, put the words to be sung in the lyric field and genre, instruments, tempo, and voice qualities in the style field. Input fields and segment notation vary by model, so do not copy another tool’s prompt format unchanged.</p><p>A first prompt could read: “Background instrumental for a 30-second personal walking video. No vocals. Soft acoustic guitar and light piano, with a steady understated beat. Leave space so it does not cover location speech; start quietly, grow a little brighter, then end naturally.” This is a creative target. In the output, check for vocal leakage, instruments masking speech, and an abrupt ending; change one condition at a time.</p></section><figure><img src="https://localai.co.kr/images/guides/music-hub-prompt.webp" alt="A lyrics notebook and section cards beside an audio waveform display" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate lyrics from style notes to review the words and arrangement direction independently.</figcaption></figure><section><h2>Listen to short candidates and adjust one condition at a time</h2><p>If the mood fits but the beat is too strong, keep instruments and genre fixed and adjust only the percussion or rhythm description. If the mood itself is wrong, change the genre or emotional cues. Changing many conditions together makes it hard to tell which revision improved the balance with speech.</p><p>A seed can help record regeneration conditions, but it does not guarantee the same waveform across versions or devices. Save original and revised candidates separately and record the prompt, model, runtime version, and settings. Before editing a segment, check whether that feature preserves the rest or regenerates the full piece, then choose the edit scope.</p><ul><li><a href="https://localai.co.kr/en/guides/yue-local-music-generation-guide">See YuE2’s song-planning and regeneration workflow</a></li></ul></section><section><h2>Measure speed against setup time and music duration</h2><p>Distinguish synthesis after the model is loaded from a first run that includes download, loading, and file saving. Outputs of different durations cannot be compared by waiting time alone. Record model, runtime, input, output duration, preparation state, processing time, interruptions, and retries needed to obtain a usable candidate.</p><p>Do not convert a language model’s token-generation rate into music duration. Music-generation workload varies with the requested style and length, model stages, and audio decoding. Listen to the same points—such as the opening and the start of dialogue—in each candidate, and assess whether speech remains clear and loops sound natural separately from generation speed.</p><ul><li><a href="https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide">Review music-generation speed and memory comparison criteria</a></li></ul></section><section><h2>Finalize duration and volume in the video</h2><p>For a 30-second video, trim a longer piece to the needed section; for a shorter piece, test whether looping sounds natural. An abrupt cut can interrupt a beat or instrument, so edit at a phrase boundary or use a fade. This is an editing step, not music generation.</p><p>Play the video from beginning to end. Check that guitar and piano do not obscure speech and that volume does not jump at scene changes. Listen not only on headphones but also on the small speaker of the phone used for viewing. Keep the original and edited audio separate so volume or duration revisions do not require generating the music again.</p></section><figure><img src="https://localai.co.kr/images/guides/music-hub-listening.webp" alt="A quiet workspace for listening to two candidate tracks through speakers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check whether the music supports dialogue and scenes in addition to generation speed.</figcaption></figure><section><h2>Check licenses and source materials before sharing</h2><p>Before publishing or delivering work to a client, check the terms for code, weights, and generated output separately; keep the version and terms you used. YuE2’s code and model weights do not have identical terms, so read those notices separately. Free downloads do not necessarily permit every use, and terms can vary by project version.</p><p>You can describe the desired direction through scene, instruments, rhythm, brightness, and the music’s role without uploading another person’s unreleased audio or unlicensed lyrics as reference material. For client work, check whether generated music is allowed and whether license evidence is required; separately review policies and rights-holder permission for personal posts, advertising, or paid distribution.</p></section><aside><h2>Choose a music model for your project</h2><p>Compare songs, instrumentals, sound effects, and PC/Mac runtime conditions.</p><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local music generation takes a description of style, instruments, and mood, then creates an instrumental or song and saves audio. For video background music, decide whether vocals are needed, the target duration, and where dialogue occurs; then place a short result against the video and review it.</dd></div><div><dt>How much memory does it need?</dt><dd>A Mac’s 32 GB of unified memory and a graphics card’s 32 GB of VRAM have the same capacity number but different execution conditions. CUDA-only code may not run unchanged on a well-equipped Mac, while Apple Silicon-supported software can run without a separate NVIDIA PC. Match the supported OS, runtime, and checkpoint, generate a short output, and verify both successful installation and the result you need.</dd></div><div><dt>When is it better not to choose this?</dt><dd>When vocals are not needed, describe the role of the instrumental in the video rather than writing lyrics. For a vocal song, put the words to be sung in the lyric field and genre, instruments, tempo, and voice qualities in the style field. Input fields and segment notation vary by model, so do not copy another tool’s prompt format unchanged.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>YuE2 plans and generates a song from lyrics and style, while ACE-Step offers several paths for local music generation and editing. HeartMuLa is another vocal-song option using lyrics and music tags. For short instrumentals or effects, consider Stable Audio Open or MusicGen. Check supported duration and vocal-free options in both the model card and the interface you will actually use.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>YuE2 local music generation: make vocal songs and arrangements from lyrics</title><link>https://localai.co.kr/en/guides/yue-local-music-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/yue-local-music-generation-guide</guid><description>Install YuE2, the current default version in the YuE repository, on Linux with an NVIDIA GPU. Create vocal songs from lyrics and style prompts, then inspect the editable score and saved generation artifacts.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">YuE2 local music generation: make vocal songs and arrangements from lyrics</h1><p>Create a vocal song from lyrics and style with YuE2</p><p id="guide-page-summary">YuE2 takes lyrics and musical style, creates a melody-and-chord plan, then outputs a 48 kHz stereo song with vocals and accompaniment combined. You can inspect and revise the score plan, but revisions rerender the whole song rather than editing only part of the waveform.</p><p>If you want a short song for a video using your own lyrics, first identify whether you are using YuE v1 or YuE2. The current repository main is YuE2; its README says the original YuE code, documentation, and license are preserved on the YuE-v1 branch. The setup steps, Python API, 24 GB VRAM, and RTX 4090 figures below refer to YuE2.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>YuE2 and YuE v1 differ in code, checkpoints, and runtime requirements; keep their setup guides and licenses separate.</li><li>Check Korean lyric pronunciation and syllable alignment on a short phrase; input support alone does not establish quality.</li><li>The RTX 4090 result of 71.04 seconds generated 214.85 seconds of audio in a warm run and excludes download, initial loading, and saving.</li></ol></section><section><h2>Check official runtime and memory requirements</h2><p>The official quick start specifies Linux, Python 3.12, and a BF16-capable NVIDIA GPU with 24 GB; the Hugging Face quick start documents CUDA and recommends 24 GB of available system RAM. The model card’s roughly 11 GiB peak for a typical generation is not a minimum card capacity. The RTX 4090 full-mode measurement used 11.18 GiB; the maximum-context test used 14.08 GiB. Memory varies with input length, runtime, and other GPU workloads.</p><p>The current official quick start does not include Apple Silicon Metal, AMD ROCm, or native Windows paths. That does not prove other environments are impossible, but the commands and figures here do not establish that they work there. Find a separate upstream runtime path and test it directly.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Compare local music models for songs, instrumentals and sound effects</a></li><li><a href="https://localai.co.kr/en/guides/ace-step-local-music-guide">Run ACE-Step 1.5 locally: setup through your first song</a></li></ul></section><section><h2>Install in a Python virtual environment and check the first output</h2><p>Install in a Python 3.12 virtual environment so packages do not mix with other music tools. Weights download on first use, requiring network access and disk space. If no request file is specified, the repository’s default request is used, so specify a new output path. Check the truncated indicator along with the completion message and distinguish incomplete output from a finished song.</p><p>After the first run, play outputs/first-song/audio.flac and check whether it matches the lyrics and style. The folder also contains score.abc, semantic tokens, acoustic latents, generation settings, and model identifiers.</p><div><p><strong>Download and install YuE2</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/multimodal-art-projection/YuE.git
cd YuE
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install .</code></pre><p><small>Run on Linux with the new virtual environment activated.</small></p></div><div><p><strong>Generate the first song</strong></p><pre><code data-guide-code-block="1-1">python examples/generate.py --output outputs/first-song</code></pre><p><small>Model weights download on the first run.</small></p></div></section><section><h2>Understand the default path that combines vocals and accompaniment</h2><p>The default text-to-music path combines vocals and accompaniment from lyrics and style. Keep genre, instruments, vocal character, and tempo consistent in the style; mark the sung words and sections in the lyrics. Example: “soulful low-mid vocal, slow neo-soul, Rhodes and bass, 82 BPM.” The default output is 48 kHz stereo, not separated vocal and accompaniment stems.</p><p>If you need an instrumental, do not assume that writing “instrumental” in the style removes vocals; test a short sample. If vocals leak into the result, consider a dedicated instrumental path or another program.</p></section><figure><img src="https://localai.co.kr/images/guides/music-yue-lyrics.webp" alt="A workspace with a lyric sheet beside style notes for genre, tempo, instruments, and vocal character" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate lyrics and style to review the sung words and arrangement independently.</figcaption></figure><section><h2>Review Korean input separately from actual singing</h2><p>The README mentions multiple languages and publishes English and Chinese examples, while the model-card language tags are Chinese and English. No Korean-specific checkpoint or quality evaluation was found. Korean input is separate from pronunciation and lyric accuracy: generate one or two lines before a full song and check for omissions, substitutions, final consonants, liaison, and syllable alignment.</p><p>For the first comparison, keep genre and runtime fixed and replay the phrase where pronunciation matters. If there is a problem, adjust lyric syllable count or spacing one at a time and record the input. Have a person review Korean lyrics with important pronunciation requirements before public delivery.</p></section><figure><img src="https://localai.co.kr/images/guides/music-yue-stems.webp" alt="Concept illustration contrasting a finished stereo waveform with separate vocal and accompaniment tracks in a mixer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The default output combines vocals and accompaniment in stereo; check stems separately.</figcaption></figure><section><h2>Distinguish the roles of full, melody, and off modes</h2><p>For a new song, full plans melody and chords before generation. For a cover arrangement, the official documentation recommends melody mode, which plans only the melody and creates accompaniment in a new style. Off generates from lyrics and style without score planning; you can supply your own score as ABC input if it uses supported syntax.</p><p>The Python API is plan() → generate_semantic() → synthesize() → decode(). plan() creates score.abc and plan files; semantic creates music tokens, synthesize creates acoustic latents, and the VAE decoder reconstructs the stereo waveform. This differs from YuE v1’s 7B Stage 1, 1B Stage 2, and XCodec Mini path. Do not mix v1 checkpoints into the YuE2 description.</p></section><figure><img src="https://localai.co.kr/images/guides/music-yue-stages.webp" alt="Diagram showing lyrics and a style prompt passing through score planning, music tokens, and audio rendering into a stereo song" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping the score plan lets you regenerate a song from a revised plan.</figcaption></figure><section><h2>Revise a score copy and regenerate the whole song</h2><p>To revise a chorus, keep the original score.abc and change one element in a copy—pitch, rhythm, harmony, or section length. The score edits a plan; it is not a tool for painting over part of an existing waveform, so a revised score rerenders the whole song. You can also resume from a saved plan at the semantic stage.</p><p>Rather than overwriting files inside a saved plan, pass a copy of score.abc as the abc argument in a new request. Keep the settings, model identifier, tokens, latents, and truncated status saved by save_artifacts(); store original audio, score, and revisions separately for comparison.</p><div><p><strong>Save the plan and intermediate artifacts</strong></p><pre><code data-guide-code-block="5-0">import json
from pathlib import Path
from yue2 import YuE2Pipeline

request = json.loads(Path("examples/song.json").read_text(encoding="utf-8"))
with YuE2Pipeline.from_pretrained("m-a-p/YuE2-3B", device="cuda") as pipe:
    song = pipe(**request)
    song.save_artifacts("outputs/my-song")
    print(song.truncated)</code></pre><p><small>The official Python pipeline form for a GPU environment.</small></p></div></section><section><h2>Read published speed and VRAM within their conditions</h2><p>The model card’s RTX 4090 full run generated 214.85 seconds of audio in 71.04 seconds, about 3.02× real time. It is the average of 32 warm requests after model preparation. Conditions were PyTorch 2.10, Transformers 4.57.6, CUDA graphs, FlashAttention, unquantized BF16 AR/NAR, FP32 VAE, and default YuE2-Vae. Initial path resolution and saving are excluded.</p><p>Melody generated 214.67 seconds in 68.68 seconds (11.02 GiB); off generated 196.88 seconds in 57.91 seconds (11.09 GiB). H800 full was a single run generating 224.96 seconds of audio in 54.74 seconds with 10.34 GiB.</p><table><caption>YuE2 model-card audio duration, generation time, calculated RTF, and peak memory</caption><thead><tr><th scope="col">Device and mode</th><th scope="col">Audio</th><th scope="col">Generation</th><th scope="col">RTF</th><th scope="col">Peak memory</th></tr></thead><tbody><tr><th scope="row">RTX 4090 · full</th><td>214.85 s</td><td>71.04 s</td><td>0.331</td><td>11.18 GiB</td></tr><tr><th scope="row">RTX 4090 · melody</th><td>214.67 s</td><td>68.68 s</td><td>0.320</td><td>11.02 GiB</td></tr><tr><th scope="row">RTX 4090 · off</th><td>196.88 s</td><td>57.91 s</td><td>0.294</td><td>11.09 GiB</td></tr><tr><th scope="row">H800 · full (one run)</th><td>224.96 s</td><td>54.74 s</td><td>0.243</td><td>10.34 GiB</td></tr></tbody></table></section><section><h2>Explore broader speed and hardware comparisons</h2><p>When comparing model-card measurements with your own workflow, align preparation, warm-up, and saving conditions. A separate guide covers how to compare figures across music models.</p><ul><li><a href="https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide">Local music-generation speed and hardware comparison</a></li><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Local music model selection criteria</a></li></ul></section><section><h2>Check weight terms separately from lyric and recording rights</h2><p>The official terms dated September 16, 2026 apply Apache 2.0 to code and documentation, and CC BY-NC 4.0 plus additional creator permission to YuE2-3B/VAE weights. Individual content creators and musicians may publish, distribute, sell, license, and monetize generated work without a separate commercial license or rights-holder fee/royalty. Commercial use of the weights themselves by a company is not covered and requires a separate license.</p><p>These terms do not grant rights to supplied lyrics, compositions, recordings, or a particular singer’s voice and identity. Check each applicable term when combining other checkpoints, tools, or data or redistributing weights; record the version, license, and necessary permissions before release.</p><ul><li><a href="https://github.com/multimodal-art-projection/YuE/blob/main/MODEL_LICENSE">Official YuE2 weight license</a></li></ul></section><aside><h2>Check current setup instructions and models in the official YuE repository</h2><p>The main-branch README and generation guide can change; check requirements, API, and license before running.</p><a href="https://github.com/multimodal-art-projection/YuE">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>YuE2 takes lyrics and musical style, creates a melody-and-chord plan, then outputs a 48 kHz stereo song with vocals and accompaniment combined. You can inspect and revise the score plan, but revisions rerender the whole song rather than editing only part of the waveform.</dd></div><div><dt>How much memory does it need?</dt><dd>The official quick start specifies Linux, Python 3.12, and a BF16-capable NVIDIA GPU with 24 GB; the Hugging Face quick start documents CUDA and recommends 24 GB of available system RAM. The model card’s roughly 11 GiB peak for a typical generation is not a minimum card capacity. The RTX 4090 full-mode measurement used 11.18 GiB; the maximum-context test used 14.08 GiB. Memory varies with input length, runtime, and other GPU workloads.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The official terms dated September 16, 2026 apply Apache 2.0 to code and documentation, and CC BY-NC 4.0 plus additional creator permission to YuE2-3B/VAE weights. Individual content creators and musicians may publish, distribute, sell, license, and monetize generated work without a separate commercial license or rights-holder fee/royalty. Commercial use of the weights themselves by a company is not covered and requires a separate license.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The README mentions multiple languages and publishes English and Chinese examples, while the model-card language tags are Chinese and English. No Korean-specific checkpoint or quality evaluation was found. Korean input is separate from pronunciation and lyric accuracy: generate one or two lines before a full song and check for omissions, substitutions, final consonants, liaison, and syllable alignment.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run ACE-Step 1.5 locally: setup through your first song</title><link>https://localai.co.kr/en/guides/ace-step-local-music-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ace-step-local-music-guide</guid><description>A practical guide to running ACE-Step 1.5 on your computer and shaping lyrics, style tags and duration. It distinguishes ACE Studio, explains Mac and NVIDIA memory requirements, and puts published speed figures in context.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Run ACE-Step 1.5 locally: setup through your first song</h1><p>Create an ending song from your own lyrics with ACE-Step 1.5</p><p id="guide-page-summary">ACE-Step 1.5 runs from its publicly available code and weights and creates song candidates from lyrics and a music-style description. ACE Studio is a separate commercial production program that combines AI singers, instruments, and vocal editing. Distinguish the two, then check Korean pronunciation and arrangement on a short chorus first.</p><p>Suppose you want an ending song with your own short lyrics for a 30-second video. Verse25 or AI Credit features described in ACE Studio documentation are not features or license terms of the ACE-Step model.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>ACE-Step 1.5 is a model project you run yourself; ACE Studio is a separate commercial music-production program.</li><li>Do not infer Korean quality from a list of more than 50 languages; check pronunciation and syllable alignment on a short lyric.</li><li>The published second-based speed claims lack full measurement conditions, so measure separately on your runtime path.</li></ol></section><section><h2>Choose a model size that fits disk space and VRAM</h2><p>Start with Python 3.11–3.12 and about 10 GB of free disk space for core models. Disk stores files; VRAM holds the model and working data during generation, so they are not interchangeable. Keep memory headroom even when the stated VRAM requirement is met if other apps are running.</p><p>The base 2B DiT starts at about 4 GB VRAM for DiT-only and about 6 GB for LM+DiT. XL is a separate 4B DiT. The guidance specifies at least 12 GB with offloading and quantization, or at least 20 GB without offloading. The table shows official recommended tiers for NVIDIA hardware.</p><table><caption>Recommended ACE-Step configurations by NVIDIA VRAM</caption><thead><tr><th scope="col">VRAM</th><th scope="col">Official recommendation</th></tr></thead><tbody><tr><th scope="row">6GB or less</th><td>2B turbo · DiT-only</td></tr><tr><th scope="row">6–8GB</th><td>0.6B LM</td></tr><tr><th scope="row">8–16GB</th><td>0.6B / 1.7B LM</td></tr><tr><th scope="row">16–20GB</th><td>2B SFT or CPU-offloaded XL turbo</td></tr><tr><th scope="row">20–24GB</th><td>Without offloading: XL turbo/SFT + 1.7B LM · 4B LM optional</td></tr><tr><th scope="row">24GB or more</th><td>XL SFT + 4B LM</td></tr></tbody></table><p>Apple Silicon has a separate MLX path documented for M1/M2/M3/M4. CPU execution is also available, but the official documentation describes it as much slower. Check generation-length and batch limits for the selected model in the GPU Compatibility Guide.</p><ul><li><a href="https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/INSTALL.md">Official installation and current VRAM recommendations</a></li><li><a href="https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/GPU_COMPATIBILITY.md">GPU compatibility guide</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Local AI music generation: make songs and background music on your computer</a></li></ul></section><section><h2>Launch the local UI from the official repository</h2><p>Clone the repository, install dependencies with uv, and launch the UI in the order shown by the official Quick Start. Use a separate environment so its Python packages do not mix with other music tools. The first UI launch may download model weights, requiring network access and additional disk space. The default UI binds to 127.0.0.1:7860; keep that address for personal use and do not enable public sharing. The browser is the control interface; check settings for any feature that calls an external service during operation.</p><div><p><strong>Quick Start commands from the official repository</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/ACE-Step/ACE-Step-1.5.git
cd ACE-Step-1.5
uv sync
uv run acestep</code></pre><p><small>Commands from the official installation guide; check the OS-specific instructions first.</small></p></div><ul><li><a href="https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/INSTALL.md">Official install guide</a></li><li><a href="https://github.com/ACE-Step/ACE-Step-1.5/blob/main/start_gradio_ui_macos.sh">Apple silicon MLX launcher</a></li></ul></section><section><h2>Make a short chorus from your own lyrics</h2><p>Enter the words to be sung in the lyrics field, and describe the genre, mood, instruments, and vocal qualities in the style field. For example: “bright indie pop, warm electric piano, soft vocals, drums build in the chorus.” You can mark verses and choruses with tags such as `[Verse]` and `[Chorus]`; generate one or two lines first and listen to the pronunciation and syllable alignment.</p><p>The target length for the video is 30 seconds. First check the available generation lengths and continuation options in the current UI, then test that a short clip saves before increasing its length. The model card lists generation up to 10 minutes, though the practical length depends on the device and settings. If the chorus pronunciation or build differs from what you want, adjust one part of the prompt and listen again.</p><ul><li><a href="https://ace-step.github.io/ACE-Step-1.5/en/ace_step_musicians_guide">Official musician's guide</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-ace-workbench.webp" alt="Laptop showing a music generation interface beside lyrics and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Enter lyrics and style separately to review sung words and arrangement independently.</figcaption></figure><section><h2>Save the seed and settings, then revise one element at a time</h2><p>If the chorus drums mask the lyrics, keep the genre and lyrics fixed and reduce only percussion intensity. Changing lyrics, tempo, duration, and seed all at once makes the effect of each revision unclear. If the UI exposes a seed, record it to compare similar conditions, but do not treat it as a guarantee of identical audio across model or code versions.</p><p>Save the model name, duration, seed, prompt, and revision date with a usable output. If pronunciation is unclear, shorten the syllable count in one lyric line; if the arrangement is busy, reduce instrument instructions. If the UI only regenerates the whole song, keep the original and create a new candidate. Store the generated source and video edit separately so duration or volume changes do not require regeneration.</p><ul><li><a href="https://localai.co.kr/en/guides/yue-local-music-generation-guide">Lyrics-focused local generation with YuE</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-ace-controls.webp" alt="Music generation screen with separate fields for style, lyrics and length" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Change settings one at a time to see how the result changes.</figcaption></figure><figure><img src="https://localai.co.kr/images/guides/music-ace-revision.webp" alt="Editing view with a music waveform beside lyric revisions" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record the seed and settings to compare new candidates.</figcaption></figure><section><h2>Separate published speed claims from your own workflow</h2><p>The model card lists generation times under 2 seconds on an A100 and under 10 seconds on an RTX 3090, with less than 4 GB of VRAM. It does not specify the song length, model settings, precision, warm-up, or measurement code, so these figures are difficult to compare directly with generation times on other devices.</p><p>For a local comparison, generate several times with the same short lyrics, tags, and output duration; record initial model loading separately from generation. Include output duration, memory use, and runtime path such as MLX, MPS, or CUDA so the conditions are interpretable.</p><ul><li><a href="https://huggingface.co/ACE-Step/Ace-Step1.5">ACE-Step model card</a></li><li><a href="https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide">Music-generation speed and hardware comparison criteria</a></li></ul></section><section><h2>Check code, weight, and input-material terms</h2><p>The ACE-Step 1.5 model card lists MIT. Code and weights may not be distributed under the same path or version, so also check the LICENSE in the repository you downloaded and the model card you used. These terms do not replace ACE Studio’s product terms or rights in lyrics and reference audio you provide.</p><p>Before public or commercial use, review rights for supplied lyrics, reference vocals, and prompts naming a specific artist. Requirements may differ for personal video, client work, advertising, and paid distribution, so check platform policy and rights-holder permission. Choose a candidate with clear delivery of your own lyrics and a chorus that closes the scene naturally, then finish it in a video editor. If you need integrated vocal editing or AI singers, evaluate ACE Studio as a separate product.</p><ul><li><a href="https://huggingface.co/ACE-Step/Ace-Step1.5">Official model card</a></li><li><a href="https://docs.acestudio.ai/getting-started">ACE Studio getting started</a></li><li><a href="https://github.com/ACE-Step/ACE-Step-1.5">ACE-Step official repository</a></li></ul></section><section><h2>DiffSynth-Music steers generation with input audio</h2><p>If you want to add audio conditioning to the existing ACE-Step 1.5 workflow, DiffSynth-Music is a separate option. Released by ModelScope on September 14, 2026, it builds on ACE-Step 1.5 and accepts beats, vocals, accompaniment, prosody, or reference audio in addition to a text prompt. It generates music conditioned on those inputs rather than simply copying the supplied audio as an editor would.</p><p>The conditioning differs depending on whether you want to keep an accompaniment and change vocals or use only a beat as a reference for a new song. Decide which parts of the input to follow and which to regenerate before comparing outputs.</p><table><caption>Choose one input element to preserve first</caption><thead><tr><th scope="col">Condition</th><th scope="col">Input to prepare</th><th scope="col">Useful when</th></tr></thead><tbody><tr><th scope="row">Beat</th><td>Beat or rhythm reference</td><td>You want to retain rhythm while changing arrangement</td></tr><tr><th scope="row">Vocals</th><td>Vocal input</td><td>You want generation conditioned on a vocal input</td></tr><tr><th scope="row">Accompaniment</th><td>Accompaniment input</td><td>You want to build vocals or a new arrangement around accompaniment</td></tr><tr><th scope="row">Prosody</th><td>A reference carrying stress, pace, and pitch</td><td>You want to guide intonation or phrasing</td></tr><tr><th scope="row">Reference audio</th><td>A style or texture reference</td><td>You want a broader timbral or textural reference for a new piece</td></tr></tbody></table></section><section><h2>Install it and test one audio condition at a time</h2><p>Official examples run on CUDA with BF16. General generation uses 50 steps and CFG 4, while the reference-audio example uses 100 steps. Install the audio dependencies, then start with the 30-second beat-conditioned example below.</p><p>A successful run creates `beat_conditioned_output.wav` at 48 kHz. Keep prompt and duration fixed and vary the beat condition to compare how closely the result follows it. This example follows the official execution method; device-specific processing time and minimum memory need separate measurement.</p><div><p><strong>Install the official repository and audio dependencies</strong></p><pre><code data-guide-code-block="7-0">git clone https://github.com/modelscope/DiffSynth-Studio.git
cd DiffSynth-Studio
python -m pip install -e ".[audio]"</code></pre></div><div><p><strong>Generate with beat conditioning on CUDA BF16</strong></p><pre><code data-guide-code-block="7-1">import torch, torchaudio
from diffsynth.pipelines.diffsynth_music import DiffSynthMusicPipeline, ModelConfig
from diffsynth.diffusion.template import TemplatePipeline
from diffsynth.utils.music_tools import generate_click

pipe = DiffSynthMusicPipeline.from_pretrained(
    torch_dtype=torch.bfloat16, device="cuda",
    model_configs=[
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="transformer/model.safetensors"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="conditioner/model.safetensors"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="text_encoder/model.safetensors"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="vae/model.safetensors"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="track_separator/model.safetensors", computation_dtype=torch.float32),
    ],
    tokenizer_config=ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="text_encoder/"),
)
template = TemplatePipeline.from_pretrained(
    torch_dtype=torch.bfloat16, device="cuda",
    model_configs=[
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="template_control/"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="template_prosody/"),
        ModelConfig(model_id="DiffSynth-Studio/DiffSynth-Music", origin_file_pattern="template_reference/"),
    ],
)
prompt = "Acoustic pop with a warm lead vocal and a steady rhythm."
lyrics = "[Verse]\nMorning light crosses the bay\nWe find a new road today"
bpm, duration = 120, 30
beats = generate_click(bpm, duration=duration)
audio = template(
    pipe, prompt=prompt, negative_prompt=pipe.default_negative_prompt,
    lyrics=lyrics, duration=duration, seed=42, tiled=True,
    cfg_scale=4, num_inference_steps=50, bpm=bpm,
    template_inputs=[{"model_id": 0, "audio": beats}],
    negative_template_inputs=[{"model_id": 0, "audio": beats * 0}],
)
torchaudio.save("beat_conditioned_output.wav", audio, 48000)</code></pre></div><ul><li><a href="https://huggingface.co/DiffSynth-Studio/DiffSynth-Music">Official DiffSynth-Music model card and examples</a></li><li><a href="https://arxiv.org/abs/2609.12774">DiffSynth-Music technical report and evaluation</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ACE-Step 1.5 runs from its publicly available code and weights and creates song candidates from lyrics and a music-style description. ACE Studio is a separate commercial production program that combines AI singers, instruments, and vocal editing. Distinguish the two, then check Korean pronunciation and arrangement on a short chorus first.</dd></div><div><dt>How much memory does it need?</dt><dd>Start with Python 3.11–3.12 and about 10 GB of free disk space for core models. Disk stores files; VRAM holds the model and working data during generation, so they are not interchangeable. Keep memory headroom even when the stated VRAM requirement is met if other apps are running.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The target length for the video is 30 seconds. First check the available generation lengths and continuation options in the current UI, then test that a short clip saves before increasing its length. The model card lists generation up to 10 minutes, though the practical length depends on the device and settings. If the chorus pronunciation or build differs from what you want, adjust one part of the prompt and listen again.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Compare local music models for songs, instrumentals and sound effects</title><link>https://localai.co.kr/en/guides/local-music-model-comparison</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-music-model-comparison</guid><description>ACE-Step, HeartMuLa, YuE2, Stable Audio Open and MusicGen do different jobs. Compare them by whether you need a lyric-led song, instrumental passage or sound effect, along with hardware and license terms.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Compare local music models for songs, instrumentals and sound effects</h1><p>Songs with lyrics and background audio need different models.</p><p id="guide-page-summary">Local music models take lyrics or sound descriptions and create audio files on your computer. Compare ACE-Step, HeartMuLa, and YuE2 for turning lyrics into songs, or Stable Audio Open and MusicGen for short backing tracks and effects. First define the input and required duration, then examine performance evidence and usage terms.</p><p>Suppose you want your own chorus in a video's title sequence and an instrumental beneath dialogue. The first job depends on lyrics, pronunciation, and song structure; the second on duration, prompt, and whether vocals are present. Rather than rank both tasks with one score, identify the result each scene needs and narrow the candidates accordingly.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>For complete songs requiring lyrics and structure, begin with ACE-Step, HeartMuLa, and YuE2.</li><li>Stable Audio Open documents music clips up to 47 seconds; MusicGen offers text and melody conditioning.</li><li>Public benchmarks are meaningful only alongside their prompts, hardware, and evaluation procedures.</li></ol></section><section><h2>Compare the inputs and outputs of lyric-to-song models</h2><p>ACE-Step 1.5 takes a description and lyrics, generates a song, and also describes cover and editing functions. Its card lists support for more than 50 languages and durations up to 10 minutes, but this does not guarantee pronunciation quality in each language or execution on every PC. Start with a short Korean verse and listen for pronunciation and syllable alignment.</p><p>HeartMuLa 3B uses lyrics and a music-tag file, with a default maximum duration of 240,000 ms. The repository reports current inference around RTF 1.0, so generation may take roughly as long as the audio itself. Lazy loading reduces memory pressure by loading a model when needed; it does not guarantee generation speed.</p><p>YuE2 plans a score from lyrics and then synthesizes 48 kHz stereo audio; it also shows score editing and cover examples. Its official baseline path is Linux, Python 3.12, and a 24 GB BF16-capable NVIDIA GPU. The RTX 4090 24 GB card reports generating 214.85 seconds of audio in 71.04 seconds: a 32-run warm average, 11.18 GiB peak VRAM, and unquantized PyTorch 2.10. Initial loading and saving are excluded, and it processes one song at a time.</p><table><caption>Automated WildSongBench evaluation on 192 prompts</caption><thead><tr><th scope="col">Model setting</th><th scope="col">SongBench Avg ↑</th><th scope="col">Phoneme error rate (PER) ↓</th><th scope="col">Condition</th></tr></thead><tbody><tr><th scope="row">YuE2 (lower PER of two candidates)</th><td>6.7316</td><td>8.44%</td><td>YuE2-Vae-legacy decoder</td></tr><tr><th scope="row">HeartMuLa</th><td>6.2483</td><td>10.71%</td><td>Same 192-prompt table</td></tr><tr><th scope="row">ACE-Step 1.5</th><td>6.0118</td><td>7.46%</td><td>Higher SongBench and lower PER are better</td></tr><tr><th scope="row">YuE 1</th><td>4.9165</td><td>36.38%</td><td>Previous-generation model</td></tr></tbody></table><ul><li><a href="https://github.com/HeartMuLa/heartlib">HeartMuLa official repository</a></li><li><a href="https://github.com/multimodal-art-projection/YuE">YuE and YuE2 official guide</a></li><li><a href="https://github.com/multimodal-art-projection/YuE/blob/main/docs/benchmarks.md">YuE benchmark and evaluation protocol</a></li><li><a href="https://huggingface.co/m-a-p/YuE2-3B">YuE2 model card and performance conditions</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-model-vocals.webp" alt="Music-model selection for lyrics and vocal songs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare songs with sung lyrics separately from backing tracks beneath dialogue.</figcaption></figure><section><h2>Choose between full-song generation, instrument editing, and separation</h2><p>To create a new finished song, compare the models and execution paths for ACE-Step 1.5 and YuE 2, then choose according to your target song length and VRAM. [ACE-Step 1.5](https://github.com/ace-step/ACE-Step-1.5) · [YuE repository](https://github.com/multimodal-art-projection/YuE)</p><p>To edit MIDI or musical parts in a DAW, consider a plugin such as ACE-Step VST3 instead of a generation model. To separate vocals or instruments from a recording, use a source-separation tool such as SAM Audio rather than a music generator. [ACE-Step VST3 guide](https://github.com/ace-step/acestep.vst3)</p></section><section><h2>Read automated scores with their procedure and purpose</h2><p>YuE's official WildSongBench material and the YuE2 model card published an automated evaluation of 192 prompts on September 12, 2026. Standard YuE2 and public baselines each produced two candidates; each candidate underwent four ASR evaluations, and the lower-PER option was selected. This is neither a human preference survey nor a compute-matched model comparison.</p><p>The separate best-of-8 procedure selected candidates using musicality, prompt control, and PER, reporting SongBench Avg 6.9632 and PER 9.79%. It differs from the standard two-candidate method and used the YuE2-Vae-legacy decoder. The default for ordinary use is YuE2-Vae, described as perceptually better sounding. Automated metrics are not universal human judgments of audio quality.</p></section><section><h2>Choose video background audio by duration and input type.</h2><p>Stable Audio Open 1.0 generates up to 47 seconds of 44.1 kHz stereo audio from text, with sound effects and music material among its documented use cases. Its card provides prompts in English. You must agree to the Hugging Face license terms before downloading the weights.</p><p>MusicGen offers 300M, 1.5B, and 3.3B sizes, with text- and melody-conditioned variants. Its card says realistic vocals are difficult and performance may be weaker in languages other than English. AudioCraft documentation lists at least 16 GB VRAM for the medium model. It can be a candidate for short backing tracks or sound ideas, but not a substitute for a complete lyric-driven song.</p><ul><li><a href="https://huggingface.co/stabilityai/stable-audio-open-1.0">Stable Audio Open model card</a></li><li><a href="https://github.com/facebookresearch/audiocraft/blob/main/docs/MUSICGEN.md">MusicGen official documentation</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-model-instrumental.webp" alt="Interface for working with short instrumental and effect waveforms" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose short audio clips using duration criteria distinct from full songs.</figcaption></figure><section><h2>Read device recommendations within each model's runtime</h2><p>ACE-Step lists 4 GB/6 GB starting configurations for the standard 2B DiT and also offers an XL 4B DiT. Its current NVIDIA table recommends CPU offloading for XL at 16–20 GB, no offloading at 20 GB or more, and a 4B LM at 24 GB or more. Apple Silicon has a dedicated MLX start script in addition to MPS.</p><p>YuE2's baseline path calls for Linux and a 24 GB BF16 NVIDIA GPU; MusicGen medium documentation lists at least 16 GB VRAM. Official documentation does not provide a universal minimum VRAM for Stable Audio Open or HeartMuLa. These are path-specific recommendations, not measured memory tables for every song and setting. Do not directly compare Apple Silicon MLX results with NVIDIA VRAM figures.</p></section><figure><img src="https://localai.co.kr/images/guides/music-model-selection.webp" alt="Selection notes separating vocal songs, instrumentals and effects" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Narrow candidates by considering task, hardware, and usage terms together.</figcaption></figure><section><h2>Record licenses and direct-comparison conditions</h2><p>The YuE2 README distinguishes Apache 2.0 for code and documentation from CC BY-NC 4.0 plus additional creator permission for YuE2-3B/VAE weights. Do not apply earlier YuE announcements to YuE2. MusicGen uses MIT for code and CC BY-NC 4.0 for weights. Stable Audio Open uses the Stability AI Community License and points commercial users to a separate license. HeartMuLa lists Apache 2.0 for code and related weights; the ACE-Step 1.5 card lists MIT. Check the terms for the exact checkpoint version you downloaded.</p><p>Rights to use lyrics, reference audio, and a particular voice may be separate from the model-file terms. For comparison, prepare the same short lyrics and genre, or the same sound-effect description and target duration, adapting to each model's supported input. Record download and initialization separately from warm generation. Note output duration, sample rate, channels, hardware, settings, peak memory, listening impressions, and any failures, OOMs, or truncations.</p><ul><li><a href="https://github.com/multimodal-art-projection/YuE/blob/main/MODEL_LICENSE">YuE2 weight license</a></li><li><a href="https://github.com/facebookresearch/audiocraft/blob/main/model_cards/MUSICGEN_MODEL_CARD.md">MusicGen model card</a></li><li><a href="https://huggingface.co/stabilityai/stable-audio-open-1.0">Stable Audio license information</a></li><li><a href="https://localai.co.kr/en/guides/yue-local-music-generation-guide">Follow local YuE2 generation</a></li><li><a href="https://localai.co.kr/en/guides/ace-step-local-music-guide">ACE-Step 1.5 local setup</a></li><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Get started with local music generation</a></li><li><a href="https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide">How to measure local music hardware</a></li></ul></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local music models take lyrics or sound descriptions and create audio files on your computer. Compare ACE-Step, HeartMuLa, and YuE2 for turning lyrics into songs, or Stable Audio Open and MusicGen for short backing tracks and effects. First define the input and required duration, then examine performance evidence and usage terms.</dd></div><div><dt>How much memory does it need?</dt><dd>HeartMuLa 3B uses lyrics and a music-tag file, with a default maximum duration of 240,000 ms. The repository reports current inference around RTF 1.0, so generation may take roughly as long as the audio itself. Lazy loading reduces memory pressure by loading a model when needed; it does not guarantee generation speed.</dd></div><div><dt>When is it better not to choose this?</dt><dd>The YuE2 README distinguishes Apache 2.0 for code and documentation from CC BY-NC 4.0 plus additional creator permission for YuE2-3B/VAE weights. Do not apply earlier YuE announcements to YuE2. MusicGen uses MIT for code and CC BY-NC 4.0 for weights. Stable Audio Open uses the Stability AI Community License and points commercial users to a separate license. HeartMuLa lists Apache 2.0 for code and related weights; the ACE-Step 1.5 card lists MIT. Check the terms for the exact checkpoint version you downloaded.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>YuE2 plans a score from lyrics and then synthesizes 48 kHz stereo audio; it also shows score editing and cover examples. Its official baseline path is Linux, Python 3.12, and a 24 GB BF16-capable NVIDIA GPU. The RTX 4090 24 GB card reports generating 214.85 seconds of audio in 71.04 seconds: a 32-run warm average, 11.18 GiB peak VRAM, and unquantized PyTorch 2.10. Initial loading and saving are excluded, and it processes one song at a time.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local music generation speed and hardware: how to read RTF correctly</title><link>https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-music-speed-and-hardware-guide</guid><description>Separate official speed evidence from supported runtime paths for YuE, ACE-Step, HeartMuLa, Stable Audio Open and MusicGen, then measure music generation fairly on your own hardware.</description><content:encoded><![CDATA[<header><p>Local music generation</p><h1 id="guide-page-title">Local music generation speed and hardware: how to read RTF correctly</h1><p>Compare music-generation speed with matched models and timing scopes</p><p id="guide-page-summary">Waiting for a finished music file may include model loading, audio generation, decoding, and saving. Check which stages a public benchmark measured and the actual output duration, then compare RTF and real-time speed using consistent definitions.</p><p>Suppose you are making a 30-second instrumental synth-pop loop for a video. Songs with lyrics and sound effects follow different inputs and generation paths, so this comparison focuses on runtimes that can produce the same kind of instrumental. For a new file, record first loading, generation after warm-up, and save completion separately to see where the wait occurs.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>RTF is generation time divided by actual audio duration. RTF 0.5 is twice real-time; RTF 2 takes twice the audio duration to generate.</li><li>Stage timings differ from total waiting time; check whether loading, planning, synthesis, decoding, and saving are included.</li><li>YuE2 card results on RTX 4090 and H800, and public ACE-Step and YuE2-Turbo claims, use different test conditions.</li></ol></section><section><h2>Calculate RTF from output duration and generation time</h2><p>RTF (real-time factor) is wall-clock generation time divided by the actual playback duration of the output audio. Generating 60 seconds of audio in 30 seconds gives RTF 0.5, or twice real-time. Taking 120 seconds gives RTF 2, slower than playback. Some repositories call the reciprocal, such as ‘34×’, RTF; check the definition and recalculate from seconds when needed.</p><p>Use the playback duration shown in the file immediately after generation as the denominator—not the prompt asking for 30 seconds. If you trim the start or end in an editor, record original generation duration and editing time separately. Listening for a smooth loop boundary matters, but that judgment is distinct from a timing measurement.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-music-model-comparison">Compare local music models for songs, instrumentals and sound effects</a></li></ul></section><section><h2>Time music generation with matched settings</h2><p>Tokens or generation steps per second alone do not show how long it takes to finish a song. Match the prompt, target length, sampling settings, and output duration, then record model loading and generation time separately.</p><p>The ACE-Step 1.5 and YuE 2 measurements apply to the devices and settings listed on their respective pages. [ACE-Step 1.5](https://github.com/ace-step/ACE-Step-1.5) · [YuE](https://github.com/multimodal-art-projection/YuE)</p></section><section><h2>Read public speed figures with version, device, and scope</h2><p>The table below pairs speed figures from official repositories and model cards with their execution conditions. Check the version, device, and measured stage to find results close to your setup. The table marks conditions that were not published.</p><table><caption>Official speed evidence and unspecified test conditions</caption><thead><tr><th scope="col">Model and source</th><th scope="col">Device and runtime</th><th scope="col">Published figures</th><th scope="col">Unspecified conditions</th></tr></thead><tbody><tr><th scope="row">Earlier ACE-Step version</th><td>RTX 4090 and MacBook M2 Max; repository script</td><td>27 steps: 4090 34.48× (1-minute render in 1.74 s), M2 Max 2.27× (26.43 s). 60 steps: 4090 15.63× (3.84 s), M2 Max 1.03× (58.25 s)</td><td>Model/commit, sample, batch, prompt, warm-up, and run variance unspecified</td></tr><tr><th scope="row">ACE-Step 1.5</th><td>README claim: A100 ‘full song’ &lt;2 s (some 0.5–10 s), RTX 3090 &lt;10 s; CUDA/MPS/CPU profiler and macOS MLX documentation</td><td>Profiler measures duration, batch, thinking, steps, and planning/DiT/VAE/save/total time; no reproducible device-by-device table published</td><td>Song duration, checkpoint, cold/warm status, definition, and variance unspecified</td></tr><tr><th scope="row">YuE2-3B HF pipeline</th><td>Linux, Python 3.10+, 24 GB BF16 NVIDIA GPU; PyTorch 2.10, Transformers 4.57.6, CUDA graphs/FlashAttention, BF16 AR/NAR + FP32 VAE, unquantized</td><td>RTX 4090: full 71.04 s/214.85 s, melody 68.68/214.67 s, off 57.91/196.88 s (32 runs after setup). H800 full 54.74/224.96 s (one run)</td><td>One-GPU results, one candidate per call; initial path exploration and saving excluded</td></tr><tr><th scope="row">YuE2-Turbo</th><td>RTX 5090 32GB, warm; PyTorch 2.10/CUDA 12.8/vLLM 0.19/BF16</td><td>Single-request RTF 0.290→0.173 (1.68×); concurrent four-request system RTF 0.317→0.096 (3.31× throughput). Claims same YuE2 weights and 32 flow steps</td><td>Self-reported README tests: 3 songs × 3 runs for one request; 4 requests × 3 waves concurrently. Not original YuE2 or 4090 results</td></tr><tr><th scope="row">HeartMuLa-oss-3B</th><td>CUDA baseline with device selection and lazy-load example</td><td>Only RTF ≈ 1.0 stated</td><td>Device, duration, sample, cold/warm status, and Apple path unspecified</td></tr><tr><th scope="row">Stable Audio Open 1.0</th><td>Card examples use CUDA or CPU PyTorch; no MPS/MLX table</td><td>Up to 47 s, 44.1 kHz stereo; tools example 100 steps/30 s, diffusers example 200 steps/10 s</td><td>Examples are not speed tests; GPU, timing, warm-up, and end-to-end scope unspecified</td></tr><tr><th scope="row">MusicGen / AudioCraft</th><td>GPU-focused guidance; about 16 GB recommended for medium. No official Apple MLX path</td><td>300M/1.5B/3.3B models; no device-specific timing table</td><td>GPU, output duration, steps/tokens, decoding scope, and cold/warm status unspecified</td></tr></tbody></table></section><section><h2>Separate total waiting from stage-level bottlenecks</h2><p>Music generation may include lyric or text planning, audio-token or diffusion generation, vocoder/VAE decoding, and file saving or conversion. End-to-end time is the total wait experienced by the app user; stage times diagnose bottlenecks. The ACE-Step 1.5 profiler records LLM planning, DiT diffusion, VAE decoding, saving, and total wall-clock time separately.</p><p>A slow completion time does not prove GPU computation is the only cause. Stage records show whether planning, audio generation, decoding, or saving is delayed and help select the right remedy. If profiler stages overlap, do not simply add their times and call that the total.</p></section><figure><img src="https://localai.co.kr/images/guides/music-benchmark-timeline.webp" alt="A timeline splitting music generation into planning, audio synthesis, decoding, and saving" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Total waiting may include several stages, from model setup through saving.</figcaption></figure><section><h2>RTX 4090 measurements in the YuE2-3B card</h2><p>The model card specifies Linux/Python 3.10+ and a 24 GB BF16 NVIDIA path. Its HF setup uses PyTorch 2.10, Transformers 4.57.6, CUDA graphs/FlashAttention, BF16 AR/NAR with FP32 VAE, and no quantization. The generation times below average 32 runs after setup; H800 full is one run. They time a synchronized pipeline call and exclude initial path exploration and saving. GPU memory is the full-run peak measured by NVML.</p><table><caption>Audio duration, generation time, and GPU peak in the YuE2-3B card</caption><thead><tr><th scope="col">Device and mode</th><th scope="col">Audio duration</th><th scope="col">Generation time</th><th scope="col">RTF</th><th scope="col">Peak GPU memory</th></tr></thead><tbody><tr><th scope="row">RTX 4090 · full</th><td>214.85 s</td><td>71.04 s</td><td>0.331</td><td>11.18 GiB</td></tr><tr><th scope="row">RTX 4090 · melody</th><td>214.67 s</td><td>68.68 s</td><td>0.320</td><td>11.02 GiB</td></tr><tr><th scope="row">RTX 4090 · off</th><td>196.88 s</td><td>57.91 s</td><td>0.294</td><td>11.09 GiB</td></tr><tr><th scope="row">H800 · full (one run)</th><td>224.96 s</td><td>54.74 s</td><td>0.243</td><td>10.34 GiB</td></tr></tbody></table><ul><li><a href="https://huggingface.co/m-a-p/YuE2-3B">YuE2-3B official model card: Speed and resources</a></li></ul></section><section><h2>Reproduce a repeatable test on your hardware</h2><p>Hold prompts and lyrics, output duration, sample rate, channels, and quality settings constant. Record checkpoint, code version, backend, precision, steps, operating system, driver, and framework versions. Separate the first run from repeated runs after warm-up, and note the median and range. Include failures, OOMs, and truncated outputs.</p><p>For short outputs, fixed costs such as planning and loading may dominate; for longer ones, DiT or audio-token generation may dominate. Larger batches can improve throughput without reducing single-song latency. Record faster results from reduced settings separately from the original configuration.</p><ul><li><a href="https://localai.co.kr/en/guides/local-music-generation-guide">Get started with local music generation</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-benchmark-listening.webp" alt="A desk with two audio waveforms on a laptop, headphones and a listening notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Listen separately to decide whether the result is the music you want.</figcaption></figure><section><h2>Test on devices with a verified runtime path</h2><p>CUDA, Apple MPS, and MLX are not interchangeable labels; each project must implement the backend. ACE-Step 1.5 documents CUDA/MPS and vLLM, PyTorch, and MLX paths for its LLM. YuE2 specifies Linux and a 24 GB BF16 NVIDIA GPU as its baseline; HeartMuLa examples use CUDA by default. Unified memory in a Mac or the RTX 5090 specification alone cannot establish compatibility or throughput on an unsupported backend.</p><p>Confirm that your operating system and device appear in the model's official runtime path, then generate a short test file to completion. Record actual duration and total wait. Consider changing hardware only if repeated generation disrupts the editing workflow, using supported backends and measured bottlenecks as evidence.</p><ul><li><a href="https://github.com/ace-step/ACE-Step">Earlier ACE-Step repository speed table</a></li><li><a href="https://github.com/ace-step/ACE-Step-1.5">Official ACE-Step 1.5 repository</a></li><li><a href="https://github.com/ace-step/ACE-Step-1.5/blob/main/docs/en/BENCHMARK.md">ACE-Step 1.5 official profiler</a></li><li><a href="https://github.com/multimodal-art-projection/YuE/blob/main/docs/generation.md">YuE generation settings</a></li><li><a href="https://github.com/NOIZAI/YuE2-Turbo">YuE2-Turbo benchmark notes</a></li><li><a href="https://github.com/HeartMuLa/heartlib">HeartMuLa official repository</a></li><li><a href="https://huggingface.co/stabilityai/stable-audio-open-1.0">Stable Audio Open model card</a></li><li><a href="https://github.com/facebookresearch/audiocraft/blob/main/docs/MUSICGEN.md">MusicGen official documentation</a></li></ul></section><figure><img src="https://localai.co.kr/images/guides/music-benchmark-memory.webp" alt="Cards for CUDA, MPS, and MLX runtime paths beside a laptop and graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the model's supported backend before looking at device specifications.</figcaption></figure><aside><h2>Measure your hardware with the official profiler</h2><p>Record warm-up, output duration, batch size, and stage timings.</p><a href="https://github.com/ace-step/ACE-Step-1.5/blob/main/docs/en/BENCHMARK.md">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Waiting for a finished music file may include model loading, audio generation, decoding, and saving. Check which stages a public benchmark measured and the actual output duration, then compare RTF and real-time speed using consistent definitions.</dd></div><div><dt>How much memory does it need?</dt><dd>The model card specifies Linux/Python 3.10+ and a 24 GB BF16 NVIDIA path. Its HF setup uses PyTorch 2.10, Transformers 4.57.6, CUDA graphs/FlashAttention, BF16 AR/NAR with FP32 VAE, and no quantization. The generation times below average 32 runs after setup; H800 full is one run. They time a synchronized pipeline call and exclude initial path exploration and saving. GPU memory is the full-run peak measured by NVML.</dd></div><div><dt>When is it better not to choose this?</dt><dd>A slow completion time does not prove GPU computation is the only cause. Stage records show whether planning, audio generation, decoding, or saving is delayed and help select the right remedy. If profiler stages overlap, do not simply add their times and call that the total.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The table below pairs speed figures from official repositories and model cards with their execution conditions. Check the version, device, and measured stage to find results close to your setup. The table marks conditions that were not published.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Jev-Omni: multimodal decisions on local GPUs</title><link>https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide</guid><description>Understand Jev-Omni's Gemma 4 12B classifier, CUDA and memory requirements, Python examples and published H200 results, and how it differs from other local JEV-style projects.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Jev-Omni: multimodal decisions on local GPUs</h1><p>Jev-Omni reads media and chooses a defined answer</p><p id="guide-page-summary">Jev-Omni is an open classifier that accepts text, images, audio, or video together with a question and choices, then returns a probability for each choice. It fits workflows that need a result such as received, not confirmed, or unclear, rather than a long generated description.</p><p>To classify whether a doorway is open in a photo, you may need one state such as Open, Closed, or Cannot tell. Jev-Omni takes the photo, question, and options and returns the selected text and index, confidence, and per-option probabilities. An application can use the result to record a state or flag photos for human review.</p><p>This is an independent open project built by a separate developer on Gemma 4 12B IT. It is separate from TypeSafe AI's Jev and provides its own Python execution code. We start with text to learn the result format, then test photos and other media.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It returns probabilities for choices about text, images, audio, or video instead of generating prose.</li><li>The default public loader is CUDA-only and needs about 47.63 GB for FP32 text weights, plus memory for initialization and multimodal components.</li><li>The published H200 figures are warm-state latency, not RTX or Mac performance and not end-to-end time from download to result.</li></ol></section><section><h2>Classify a state using defined choices</h2><p>One predict call handles a question and a list of distinct choices. The option text is used as a key in the result dictionary, so every option needs a unique name. Repeating a label such as received would make it unclear which state a probability belongs to.</p><p>Some existing Qwen-based JEV-style implementations read internal scores for candidate next tokens. Jev-Omni instead adds a separately trained classification head to Gemma 4 12B IT. After processing the input, it uses the final-position hidden representation to score the choices, returning a classification without a token-by-token decoding loop.</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-local-jev-projects">Local JEV-style projects built with Qwen</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/jev-system-one-model-explained">What is Jev? A System One model that decides instead of writing</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/recipe-gemma4-12b-artifact-editorial.webp" alt="Pencil illustration of document, photo and audio inputs connected to one model and its memory" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Classifying different inputs is distinct from generating new media.</figcaption></figure><section><h2>Start with a photo and check audio and video input limits</h2><p>For the first image test, choose a question whose answer is visually checkable, such as whether a door is open. Include Cannot tell for an obscured door or dark photo. Compare results with human labels and record error situations to define which cases can be classified automatically.</p><p>The audio helper uses ffmpeg to trim at most the first 30 seconds. An announcement later in the recording may not be processed, and the ffmpeg executable must be installed separately from Python packages. The video path selects 16 frames by default and passes them as images; it does not process the audio track. A brief event between sampled frames can be missed.</p></section><section><h2>Jev-Omni uses a separate decision head on Gemma 4</h2><p>Jev-Omni is a decision classifier built on Gemma 4 12B IT for text, image, audio, and video inputs. It applies a separately trained head to the final representation and returns choice probabilities; do not port the next-token-logit path from Qwen projects unchanged.</p></section><section><h2>Check memory and device requirements before running it</h2><p>The public checkpoint's text-weight index is 47,629,401,280 bytes (about 47.63 GB) and contains 11,907,350,272 parameters. The model card says about 50 GB is needed before runtime headroom. The default example is not guaranteed to run unchanged on a 24 GB RTX 3090 or 4090, or a 32 GB RTX 5090; the memory size of a 4-bit 12B model does not apply to this setup.</p><p>The loader first places the FP32 backbone on CUDA. The multimodal helper then converts some linear layers to BF16 and also loads the original Gemma model to replace components. Using BF16 autocast during inference does not mean initialization needs only half the memory, so peak initialization memory matters. The function rejects non-CUDA devices and does not automatically distribute the model across multiple GPUs.</p><ul><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">JEV-style execution options by hardware</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-omni-memory-workbench.webp" alt="A workbench with an open GPU workstation and memory modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Memory needs depend on the storage format and initialization path, not just the model name.</figcaption></figure><section><h2>Inspect dependencies and code in an isolated Python environment</h2><p>The helper lists torch 2.10 or later and transformers 5.17.0, along with accelerate, huggingface_hub, safetensors, numpy, Pillow, opencv-python-headless, and soundfile in requirements.txt. Audio also needs the ffmpeg executable. First confirm that CUDA-enabled PyTorch sees the GPU, then inspect the downloaded Python files before installing the dependencies.</p><p>The first load downloads not only Jev-Omni but also the original Gemma multimodal components, so allow for network access and disk space. You can inspect the public files and begin setup inside a virtual environment.</p><div><p><strong>Prepare the environment and review the public code</strong></p><pre><code data-guide-code-block="4-0">python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip huggingface_hub
hf download akhilaaa3/Jev-Omni requirements.txt jev_omni.py load_model.py --local-dir jev-omni
# Review the downloaded Python files before continuing.
python -m pip install -r jev-omni/requirements.txt
python -c "import torch; print(torch.cuda.is_available())"</code></pre><p><small>This uses a Linux shell. The final output must be True to continue with the default CUDA path. This step does not download model weights.</small></p></div><ul><li><a href="https://huggingface.co/akhilaaa3/Jev-Omni/tree/main">Public Jev-Omni files</a></li></ul></section><section><h2>Check each modality's input limits</h2><p>The official example sets `modality="image"`, `"audio"`, or `"video"` for the corresponding media. Audio is capped at 30 seconds and video uses 16 frames; the video audio track is not processed, so relevant moments or sound may be absent.</p><p>The model weights and decision head require about a 24 GB download. The card reports warm H200 latencies of 83 ms for ~2K-token text, 26 ms for image, 31 ms for 13-second audio, and 504 ms for 16-frame video; these are different conditions, not measurements for your device.</p></section><section><h2>Test text classification, then try an image</h2><p>The example below checks the question, choices, and result format with one text case, then shows how to call the local image path. The image helper reads a local file, but internet access is needed to fetch the model and configuration on first use. Its sample question and options are in English, so Korean workflows need separate testing with Korean prompts, choices, and human-verified answers.</p><p>For photo classification, define distinct states such as Open, Closed, and Cannot tell. Compare confidence and errors using human-labelled photos, then set a rule that routes uncertain results to a review queue.</p><div><p><strong>Get probabilities for your options</strong></p><pre><code data-guide-code-block="6-0">import sys
from pathlib import Path

sys.path.insert(0, str(Path("jev-omni").resolve()))
from jev_omni import load_jev_omni

classifier = load_jev_omni()
result = classifier.predict(
    state="The parcel arrived yesterday. The customer confirmed receipt.",
    question="Has the customer received the parcel?",
    options=["Yes", "No", "Not enough information"],
)
print(result)

# After the text test succeeds, set an existing local image path.
# result = classifier.predict(
#     state="This is a photo of a doorway.",
#     question="What is the state of the door?",
#     options=["Open", "Closed", "Cannot tell from this image"],
#     media="/absolute/path/door.jpg",
#     modality="image",
# )
# print(result)</code></pre><p><small>This demonstrates the public loader; it is not a GPU run verified by this site. For audio or video, set modality and media for the actual file.</small></p></div></section><section><h2>Read published speed and evaluations with their conditions</h2><p>The creator's H200 figures are median latency across 20 warm requests on an optimized backend: 83 ms for about 2,000 text tokens, 26 ms for one image, 31 ms for 13 seconds of audio, and 504 ms for 16 video frames. Preprocessing and networking are excluded, so these are not end-to-end times including file loading, frame extraction, and initial weight loading.</p><p>Because the model classifies fixed fields instead of writing long answers, latency from input preprocessing to result and concurrent throughput matter more than tokens per second. The figures below are the vendor's reported merged-model results, not measurements taken on an RTX or a Mac.</p><table><caption>Creator-reported evaluation of the merged model</caption><thead><tr><th scope="col">Evaluation</th><th scope="col">Reported score</th><th scope="col">Condition</th></tr></thead><tbody><tr><th scope="row">DecisionBench Medium</th><td>87.57%</td><td>80 scenarios, 293 questions; equal-weight scenario average</td></tr><tr><th scope="row">JevBench</th><td>86.15%</td><td>195 matched groups and 231 judgments; equally weighted by group</td></tr><tr><th scope="row">MMAU</th><td>63.10%</td><td>Micro accuracy on 1,000 questions</td></tr><tr><th scope="row">MVBench</th><td>53.10%</td><td>14 tasks and 2,786 questions; averaged by task</td></tr></tbody></table><ul><li><a href="https://huggingface.co/akhilaaa3/Jev-Omni">Jev-Omni model card and evaluations</a></li></ul></section><figure><img src="https://localai.co.kr/guides/recipe-gemma4-12b-verify-editorial.webp" alt="Illustration of a computer handling document, image, and audio tasks with times for each" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Preparation differs by input type; distinguish inference latency from end-to-end time.</figcaption></figure><section><h2>Verify the complete path, including the head</h2><p>The public repository includes `head.pt`, `decision_config.json`, and `jev_omni.py`. Review the code and pin the checkpoint revision before running it. Try one example for each modality and check that input preprocessing, option order, and the probability dictionary keys match.</p><p>Log gold labels, success rate by modality, uncertain cases, input size, and warmed latency separately. Include low light, small text, long audio, and events between sampled frames when setting the automation boundary.</p><ul><li><a href="https://huggingface.co/akhilaaa3/Jev-Omni">Official Jev-Omni model card</a></li></ul></section><section><h2>Validate labels before using classification in a real workflow</h2><p>When reading evaluation tables, examine how scores are aggregated. DecisionBench Medium averages scenarios with equal weight, while micro accuracy combines all questions and gives more weight to tasks with more questions. For your photo classification, prepare a separate human-labelled test and record errors and confidence for obscured or dark doors as well.</p><p>The classification head accepts up to 256 choices, but the model is mainly validated with 20 or fewer. Start with a small set of clear states and set automation thresholds using labeled tests. The repository and base Gemma 4 are listed under Apache-2.0, but that does not resolve rights to people or places in photos and recordings. Check both whether you may install the weights and whether you may collect and process the media. For descriptions or long dialogue, choose a conversational multimodal model instead.</p></section><aside><h2>Find a project for the hardware you own</h2><p>Explore Qwen-based classification projects that can also be tried on a Mac or a smaller GPU.</p><a href="https://localai.co.kr/en/guides/qwen-local-jev-projects">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Jev-Omni is an open classifier that accepts text, images, audio, or video together with a question and choices, then returns a probability for each choice. It fits workflows that need a result such as received, not confirmed, or unclear, rather than a long generated description.</dd></div><div><dt>How much memory does it need?</dt><dd>The public checkpoint's text-weight index is 47,629,401,280 bytes (about 47.63 GB) and contains 11,907,350,272 parameters. The model card says about 50 GB is needed before runtime headroom. The default example is not guaranteed to run unchanged on a 24 GB RTX 3090 or 4090, or a 32 GB RTX 5090; the memory size of a 4-bit 12B model does not apply to this setup.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The classification head accepts up to 256 choices, but the model is mainly validated with 20 or fewer. Start with a small set of clear states and set automation thresholds using labeled tests. The repository and base Gemma 4 are listed under Apache-2.0, but that does not resolve rights to people or places in photos and recordings. Check both whether you may install the weights and whether you may collect and process the media. For descriptions or long dialogue, choose a conversational multimodal model instead.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen-Image 2.1: local image generation and editing</title><link>https://localai.co.kr/en/guides/qwen-image-2-1-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-image-2-1-local-guide</guid><description>Explore Qwen-Image 2.1 generation and editing on Mac or NVIDIA hardware, including LightX2V’s September 20, 2026 day-zero support, RTX 5090 measurement conditions, transparency, reference editing, and its research license.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Qwen-Image 2.1: local image generation and editing</h1><p>Create an image with Qwen-Image 2.1, then edit what you need</p><p id="guide-page-summary">Qwen-Image 2.1 generates images from written scene descriptions and edits existing images using references and edit instructions. Run the generator together with the Qwen3-VL-8B encoder and its dedicated VAE.</p><p>Suppose you want a green ceramic teapot on a wooden shelf with room for a title on the right. Generate one image from text first; if the product shape and composition work, use reference editing to change only a detail such as the background color. Changing one condition at a time makes it easier to see whether the handle, shadow, or product position shifted.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The model card describes text-to-image, editing, transparent backgrounds, and up to 10 reference images.</li><li>On September 20, 2026, LightX2V published day-0 support and an RTX 5090-specific path.</li><li>The official 1K/2K table reports a three-run median after initial loading, using PyTorch 2.11/cu130 and 40 steps.</li></ol></section><section><h2>Create one image from text and edit only what needs changing</h2><p>The official model card describes text-to-image, image editing, transparent-background output, and up to 10 reference images. Apps and nodes do not necessarily expose the same features, so verify that your installed version supports 2.1 editing and alpha output. If you plan to composite a PNG, check that its alpha channel remains and that edges look clean against both light and dark backgrounds.</p><p>Version 2.1 consists of a 7B image-generation model, a Qwen3-VL-8B text encoder, and a dedicated VAE. Do not relabel the earlier 2512 checkpoint and VAE; use the app's 2.1 workflow and model configuration. A GGUF distribution may contain only the generation model, so check whether the runtime requires separate encoder and VAE paths.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-first-image-guide">Make your first image locally with FLUX.3 Klein</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-creative-desk.webp" alt="A creative desk with a monitor and a printed still-life image" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Create a usable first image, then check its text and layout.</figcaption></figure><section><h2>On an RTX 5090, start with the dedicated LightX2V container</h2><p>LightX2V announced day-0 support on September 20, 2026. Pull the CUDA 13.0 container tag for RTX 5090, download the model, then align repository and script paths inside the container. Update the repository/model paths and the quantized-checkpoint paths in the JSON first.</p><p>The official single-5090 example uses FP16 accumulation for FP8 DiT, FP8 QwenVL weights, text-encoder offload, and VAE compilation. This is not a generic recipe for FP8 files from another framework or the 2511 Lightning LoRA. Conversion expects the qwen_image_21_dit format and an SM120 FP16-accumulation kernel, so container, kernel, and conversion settings must match.</p><p>Prepare Git, Docker, the Hugging Face CLI and NVIDIA Container Toolkit on the host PC first. The first block downloads the repository and model into a workspace and mounts that folder at `/workspace` in the container. Run the second block inside the container. Set the script's `lightx2v_path` to `/workspace/LightX2V` and `model_path` to `/workspace/Qwen-Image-2.1`, and save the JSON's quantized checkpoint paths to match the actual files. Results are in `LightX2V/save_results`.</p><div><p><strong>Prepare on the host PC and open the container</strong></p><pre><code data-guide-code-block="1-0">mkdir -p qwen-image21-workspace
cd qwen-image21-workspace
git clone https://github.com/ModelTC/LightX2V.git
hf download Qwen/Qwen-Image-2.1 --local-dir ./Qwen-Image-2.1
docker pull lightx2v/lightx2v:26062001-cu130-5090-fix-260921
docker run --rm --gpus all --ipc=host -it -v "$PWD:/workspace" -w /workspace/LightX2V --entrypoint /bin/bash lightx2v/lightx2v:26062001-cu130-5090-fix-260921</code></pre><p><small>When this opens a container shell, continue the next block in that shell.</small></p></div><div><p><strong>Generate inside the container after saving paths</strong></p><pre><code data-guide-code-block="1-1">cd /workspace/LightX2V
# Save lightx2v_path, model_path and quantized checkpoint paths in the script/config first.
bash scripts/qwen_image_21/qwen_image_21_t2i_5090_1k.sh
# For reference-image editing, use qwen_image_21_i2i_5090_1k.sh</code></pre><p><small>Follow the linked LightX2V guide for FP8 converted files and SM120 kernels. Generated files also remain in the host workspace.</small></p></div><ul><li><a href="https://github.com/ModelTC/LightX2V/tree/main/scripts/qwen_image_21">LightX2V Qwen-Image 2.1 deployment guide</a></li></ul></section><section><h2>Check the scope behind the published RTX 5090 timings</h2><p>LightX2V reports 5.586 seconds for 1024×1024 T2I and 6.804 seconds for I2I on one RTX 5090. At 2048×2048 the figures are 30.333 and 42.787 seconds. Conditions are PyTorch 2.11.0+cu130, 40 steps, seed 42, and CFG disabled; the figures are medians of three runs after the initial request. Image saving is included, while model loading and first initialization are excluded. Your reference image or CFG settings may differ.</p><table><caption>Figures from LightX2V's official RTX 5090 documentation, not measurements by this site.</caption><thead><tr><th scope="col">GPU</th><th scope="col">Workload</th><th scope="col">Output size</th><th scope="col">Median after initialization</th></tr></thead><tbody><tr><th scope="row">RTX 5090 ×1</th><td>T2I</td><td>1024×1024</td><td>5.586 s</td></tr><tr><th scope="row">RTX 5090 ×1</th><td>I2I</td><td>1024×1024</td><td>6.804 s</td></tr><tr><th scope="row">RTX 5090 ×1</th><td>T2I</td><td>2048×2048</td><td>30.333 s</td></tr><tr><th scope="row">RTX 5090 ×1</th><td>I2I</td><td>2048×2048</td><td>42.787 s</td></tr></tbody></table><ul><li><a href="https://github.com/ModelTC/LightX2V/blob/main/scripts/qwen_image_21/qwen_image_21_t2i_5090_1k.sh">LightX2V RTX 5090 T2I example</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-transparent-layers.webp" alt="A transparent plant illustration composited over different backgrounds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the alpha channel so a white box does not remain when changing backgrounds.</figcaption></figure><section><h2>Verify saving and editing with a single 1K image</h2><p>In the T2I script, set the prompt, seed, and output path, then generate one image. For I2I, set image_path and the prompt. To size output automatically to the input aspect ratio, the documentation says to remove --size. When specifying it manually, use --size HEIGHT WIDTH; each dimension is rounded down to a multiple of 32. After the file saves, run an edit that changes only the background and compare product shape and edges.</p><p>If an error occurs, check that the container can access the GPU and that the model root and JSON paths for dit_quantized_ckpt and text_encoder_quantized_ckpt exist. Initialization can fail if the SM120-specific FP16-accumulation kernel or converted text encoder is missing. RUN pipeline cost in the logs marks elapsed runtime after execution begins. Errors before that point call for checking kernels, checkpoints, and paths first.</p><ul><li><a href="https://github.com/ModelTC/LightX2V/tree/main/scripts/qwen_image_21">Qwen-Image-2.1 T2I/I2I scripts and configuration</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-reference-edit.webp" alt="Two images showing the same vase against different backgrounds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Changing one instruction at a time makes it easier to check whether the product shape is preserved.</figcaption></figure><section><h2>Check Mac support and usage rights separately</h2><p>LightX2V timings use the RTX 5090 CUDA path. On a Mac, check a separate route such as ComfyUI GGUF or stable-diffusion.cpp, and verify that the installed version supports 2.1, its encoder, and dedicated VAE. Do not apply CUDA-container or RTX 5090 timings to Apple Silicon. Earlier 2512 guidance and LightX2V acceleration claims for Qwen-Image-Edit-2511 are not 2.1 measurements.</p><p>Qwen-Image 2.1 was released on September 20, 2026, under the Qwen Research License. Unlike the earlier Qwen-Image Apache-2.0 terms, it is limited to non-commercial research and evaluation. Commercial projects require a separate license; check the weights and tools independently. Identify whether your use needs background replacement, transparent PNGs, or text rendering, and review that output quality directly.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1">Official Qwen-Image-2.1 model card</a></li><li><a href="https://github.com/QwenLM/Qwen-Image-2.1/blob/main/LICENSE">Full Qwen Research License</a></li><li><a href="https://github.com/ModelTC/LightX2V/tree/main/scripts/qwen_image_21">LightX2V deployment and benchmark guide</a></li></ul></section><aside><h2>Experience Qwen-Image 2.1 generation time</h2><p>Compare how long one image takes on different hardware.</p><a href="https://localai.co.kr/en/generate?model=qwen-image-2.1&amp;hardware=nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen-Image 2.1 generates images from written scene descriptions and edits existing images using references and edit instructions. Run the generator together with the Qwen3-VL-8B encoder and its dedicated VAE.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The official model card describes text-to-image, image editing, transparent-background output, and up to 10 reference images. Apps and nodes do not necessarily expose the same features, so verify that your installed version supports 2.1 editing and alpha output. If you plan to composite a PNG, check that its alpha channel remains and that edges look clean against both light and dark backgrounds.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen-Image 2.1 GGUF download: choosing Q4_K_M, Q8_0 and the VAE</title><link>https://localai.co.kr/en/guides/qwen-image-2-1-gguf-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-image-2-1-gguf-guide</guid><description>This guide covers Q4 and Q8 file sizes for Unsloth Qwen-Image 2.1 GGUF, its encoder and dedicated VAE, and the stable-diffusion.cpp command. It also explains memory considerations for 12–16 GB systems and notes for running on Mac.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen-Image 2.1 GGUF download: choosing Q4_K_M, Q8_0 and the VAE</h1><p>Prepare the Qwen-Image 2.1 GGUF model, encoder, and VAE together</p><p id="guide-page-summary">This guide shows how to generate images from text with Unsloth's Qwen-Image 2.1 GGUF and, if needed, move on to editing a reference photo. Prepare the Q4 files and check that the generated image is saved locally.</p><p>First, use a text prompt to generate a 20-step, 1024×1024 image and confirm that the output file is saved locally. For reference-photo editing, prepare the required vision files and test the generation and editing input paths separately.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The Q4_K_M model file is 4.2 GB; the Q8_0 model file is 7.64 GB.</li><li>The recommended GGUF text encoder is Qwen3-VL-8B-Instruct-UD-Q4_K_XL.</li><li>For image editing, check the dedicated VAE and vision projector separately.</li></ol></section><section><h2>A first generation needs three different files</h2><p>For text-to-image generation with Qwen-Image 2.1, specify the Q4_K_M model, Qwen3-VL-8B-Instruct-UD-Q4_K_XL encoder, and the dedicated qwen_image_2.1_vae_bf16.safetensors VAE. Do not substitute a VAE from older Qwen-Image or Wan 2.2. A mismatched role or version can prevent loading or produce unintended output.</p><table><caption>Use these file sizes to plan storage; assess runtime memory separately.</caption><thead><tr><th scope="col">Component</th><th scope="col">File</th><th scope="col">File size</th></tr></thead><tbody><tr><th scope="row">Q4 generation model</th><td>qwen-image-2.1-Q4_K_M.gguf</td><td>4.2GB</td></tr><tr><th scope="row">Q4 text encoder</th><td>Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf</td><td>5.15GB</td></tr><tr><th scope="row">Image-decoding VAE</th><td>qwen_image_2.1_vae_bf16.safetensors</td><td>0.68GB</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-three-components.webp" alt="Modules are separated across three stands on a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model, encoder, and VAE each handle a different stage.</figcaption></figure><section><h2>Distinguish file size from runtime memory</h2><p>Unsloth's model files are 4.2 GB for Q4_K_M, 5.39 GB for Q5_K_M, 6.27 GB for Q6_K, and 7.64 GB for Q8_0. These are disk sizes for the model alone. During execution, the encoder, bf16 VAE, image-size-dependent buffers, and applications need additional space. macOS and other apps also share unified memory.</p><p>Quantization shrinks the weights but does not fix total runtime memory. Comparing lettering, kettle outlines and background patterns with the same prompt and seed shows output differences. The published Mac Q4/Q8 timing difference also involved different encoder precision, so it does not isolate the effect of the main model's bit width.</p></section><section><h2>Download only the three required files</h2><p>If the hf tool is installed, use these commands to download only the required files into the models folder. Complete any required authentication or license agreement on the repository page first. The files total 4.2+5.15+0.68=10.03 GB, so allow about 10 GB of disk storage for the downloads. This total is not a runtime-memory estimate.</p><div><p><strong>Download the three required files</strong></p><pre><code data-guide-code-block="2-0">hf download unsloth/Qwen-Image-2.1-GGUF qwen-image-2.1-Q4_K_M.gguf --local-dir models
hf download unsloth/Qwen3-VL-8B-Instruct-GGUF Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf --local-dir models
hf download unsloth/Qwen-Image-2.1-FP8 vae/qwen_image_2.1_vae_bf16.safetensors --local-dir models</code></pre><p><small>The VAE is saved in the models/vae subfolder.</small></p></div></section><section><h2>Save a first image with the Q4 setup</h2><p>Prepare a CUDA or Metal build of stable-diffusion.cpp's sd-cli that supports Qwen-Image 2.1. The command below uses the Unsloth card's example settings: 20 steps, CFG 6.0, Euler, and a 1024-square image. On Windows, specify the actual path to sd-cli.exe. It saves qwen21-first.png locally rather than starting an external server.</p><p>After generation, confirm that the file exists, is non-empty, and opens in an image app. Check that the third file is in models/vae and that the command path matches. To compare with a 40-step timing report, match the runtime and measurement interval too.</p><div><p><strong>Q4 text-to-image generation</strong></p><pre><code data-guide-code-block="3-0">sd-cli --diffusion-model models/qwen-image-2.1-Q4_K_M.gguf \
  --vae models/vae/qwen_image_2.1_vae_bf16.safetensors \
  --llm models/Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf \
  -p "A green ceramic teapot on an oak table, soft window light, simple cream background" \
  --steps 20 --cfg-scale 6.0 --sampling-method euler \
  -W 1024 -H 1024 --diffusion-fa -o qwen21-first.png</code></pre><p><small>If memory is tight, check supported CPU offloading and test with a lower resolution.</small></p></div></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-memory-room.webp" alt="Blocks and a drawer with free space are shown beside a computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave compute workspace after loading the components.</figcaption></figure><section><h2>On lower-memory GPUs, account for the encoder and workspace too</h2><p>On a 12–16 GB GPU, start with Q4, one image, and no more than 1024 resolution, then check logs for encoder placement and CPU offloading. A larger encoder and intermediate buffers still use memory even if the model is quantized further. Check separately whether the model loads and whether it can be run repeatedly within an acceptable time.</p><p>Offloading can add transfer and computation time between RAM and GPU. If unified memory runs short on a Mac, SSD swapping can increase delays. Close other GPU workloads and start with one image, judging repeatable speed and output quality as well as whether it runs at all.</p></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-local-first-image.webp" alt="A teapot image and printout sit on a laptop desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Complete one image first, then change conditions one at a time.</figcaption></figure><section><h2>Connect a vision projector for reference-image editing</h2><p>Even when text-to-image works, reference-image editing may need a separate mmproj vision file in addition to the encoder. The stable-diffusion.cpp editing path connects it with --llm_vision. Use a file matching the model family and provide the photo with -r. Start with one image to check the model and app's image-input path.</p><p>Test changing a reference photo's background and check the runtime logs to confirm the photo was read. If you need transparency, check that the alpha channel is retained in PNG or a supported WebP output.</p><ul><li><a href="https://github.com/leejet/stable-diffusion.cpp/blob/master/docs/qwen_image_2.1.md">sd.cpp Qwen-Image 2.1 editing setup</a></li></ul></section><section><h2>Record conditions and license, then compare again</h2><p>When starting sd-cli from scratch each time, include model loading in total wait. If you send requests to a server with the model already loaded, record request time separately after setup. Note the three filenames, runtime version, prompt, seed, resolution, steps, offloading, and memory to compare changes in quantization or editing input.</p><p>The installation example carries no performance measurements of its own. For commercial use, check how the research license applies to the model and its distribution.</p><ul><li><a href="https://huggingface.co/unsloth/Qwen-Image-2.1-GGUF">Unsloth GGUF files</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-speed-guide">Compare speed by runtime</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside><h2>Compare estimated waits by device</h2><p>Compare GGUF and GPU-optimized paths separately.</p><a href="https://localai.co.kr/en/generate?model=qwen-image-2.1&amp;hardware=macbook-pro-m5-max-64gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>This guide shows how to generate images from text with Unsloth's Qwen-Image 2.1 GGUF and, if needed, move on to editing a reference photo. Prepare the Q4 files and check that the generated image is saved locally.</dd></div><div><dt>How much memory does it need?</dt><dd>Unsloth's model files are 4.2 GB for Q4_K_M, 5.39 GB for Q5_K_M, 6.27 GB for Q6_K, and 7.64 GB for Q8_0. These are disk sizes for the model alone. During execution, the encoder, bf16 VAE, image-size-dependent buffers, and applications need additional space. macOS and other apps also share unified memory.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The installation example carries no performance measurements of its own. For commercial use, check how the research license applies to the model and its distribution.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen-Image 2.1 speed on RTX 5090 and Mac</title><link>https://localai.co.kr/en/guides/qwen-image-2-1-speed-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-image-2-1-speed-guide</guid><description>Compare the RTX 5090 LightX2V 5.93-second result, FP4 and NF4 runs and Mac GGUF timings, keeping resolution, steps and runtime conditions separate.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Qwen-Image 2.1 speed on RTX 5090 and Mac</h1><p>Measure Qwen-Image 2.1 through image saving under matched conditions</p><p id="guide-page-summary">Compare Qwen-Image 2.1 generation time alongside resolution, step count, and runtime. Separating model loading, image generation, and saving makes configuration changes on the same hardware easier to assess. This guide examines the published 5.930-second RTX 5090 result and Mac test conditions, then explains how to time completion through saving the PNG on your hardware.</p><p>The 5.930-second result is a median for generating an image and saving a PNG after model setup. Initial memory loading was excluded; prompt encoding, denoising, VAE decoding, and PNG saving were included. Conditions were 1024×1024, 40 steps, seed 42, and CFG disabled, across three generations.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 5090's 5.93 seconds were measured at 1K and 40 steps on a dedicated LightX2V FP8 path.</li><li>FP4, NF4, and GGUF Q4 are not the same runtime path even when their bit labels look similar.</li><li>In the public Mac results Q8 was faster than Q4, but encoder precision also differed.</li></ol></section><section><h2>Public results differ in settings and stop points</h2><p>The 5.930-second result used LightX2V on an RTX 5090 with FP8 weights, FP16 accumulation, SM120 operators, SageAttention2, and CPU offloading of the text encoder. The same GPU can produce different results with a standard Diffusers setup. Public reports also stop at different points, so check whether saving is included as well as runtime and precision.</p><table><caption>All are public 40-step text-to-image results, but conditions differ.</caption><thead><tr><th scope="col">Hardware</th><th scope="col">Setup</th><th scope="col">Size</th><th scope="col">Reported time</th></tr></thead><tbody><tr><th scope="row">RTX 5090</th><td>LightX2V FP8 / FP16 accumulation</td><td>1024×1024</td><td>5.930 s</td></tr><tr><th scope="row">RTX 5090</th><td>Mesmer FP4 rank 128</td><td>1024×1024</td><td>7.40 s</td></tr><tr><th scope="row">RTX 5090</th><td>Diffusers NF4</td><td>1024×1024</td><td>19.2 s</td></tr><tr><th scope="row">RTX 4070 Ti SUPER 16GB</th><td>Mesmer INT4 rank 128</td><td>1024×1024</td><td>22.82 s</td></tr><tr><th scope="row">M5 Max 36GB</th><td>ComfyUI GGUF Q8 + INT8 encoder</td><td>1024×1024</td><td>156 s</td></tr><tr><th scope="row">M5 Max 36GB</th><td>ComfyUI GGUF Q4 + W4A8 encoder</td><td>1024×1024</td><td>218 s</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-timing-bench.webp" alt="A stopwatch and matching printouts sit beside a computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Repeat with matching conditions to compare wait times.</figcaption></figure><section><h2>On Mac, Q4's smaller file took longer in one report</h2><p>ComfyUI Metal results on an M5 Max 36 GB reported 156 seconds for Q8 and 218 seconds for Q4 at 1K. Both model quantization and encoder precision differed (INT8 versus W4A8), so Q4 alone cannot explain the gap. At 1536 the reports were both around eight minutes; at 2048 they were around eighteen minutes. The Q4 2048 result was one cold run, not a precise ranking.</p></section><section><h2>The 5090 path also requires matching conversion and configuration</h2><p>LightX2V provides a CUDA image and FP8 conversion example for RTX 5090. Point separately to the original model folder and converted DiT checkpoint, and set dit_quantized_ckpt in the configuration plus lightx2v_path and model_path in the script to real paths. Replace /path/to; the commands do not download the entire model automatically.</p><p>This path requires a supported environment and lightx2v-kernel with SM120 operators. Copying the script to an RTX 3090 or DGX Spark does not provide the same acceleration; check support and measurement conditions for each device.</p><div><p><strong>LightX2V conversion and run example</strong></p><pre><code data-guide-code-block="2-0">python tools/convert/converter.py \
  --source /path/to/Qwen-Image-2.1/transformer \
  --output /path/to/Qwen-Image-2.1-fp8-f16-accum \
  --output_name qwen_image_21_fp8_f16_accum \
  --model_type qwen_image_21_dit \
  --quantization_profile qwen-image-21-fp8-f16-accum \
  --quantized --linear_type fp8 --device cuda:0 --single_file

# Set the checkpoint path in the JSON config and model paths in the script first.
bash scripts/qwen_image_21/qwen_image_21_t2i_fp8_f16_accum_5090.sh</code></pre><p><small>This public path from September 23, 2026, runs after preparing the environment and configuration.</small></p></div><ul><li><a href="https://github.com/ModelTC/LightX2V/blob/main/scripts/qwen_image_21/README.md">LightX2V 5090 environment and configuration</a></li></ul></section><section><h2>Resolution and GPU count affect the total task differently</h2><p>Doubling width and height makes four times as many pixels, but public runtimes can grow by more. Diffusers NF4 rose from 19.2 seconds at 1K to 118.8 at 2K; Mac Q8 rose from 156 to 1094 seconds. The site's high-resolution RTX 5090 figures are estimates using a 1K result and scaling from another run, not 2K measurements for that setup. Compose at 1K first and render only final candidates at larger sizes.</p><p>Two GPUs may help process multiple images in parallel, but do not automatically halve one image's time. The model and runtime must support distributed inference, and device transfers add cost. This comparison uses single-GPU paths, so it does not assume summed memory or half the time per image.</p></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-resolution-prints.webp" alt="The same plant is printed in a small and a large square." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Doubling each side produces four times the pixels.</figcaption></figure><section><h2>Measure the same task through PNG saving</h2><p>Record initial model loading separately. After a warm-up, run the same prompt, seed, resolution, and step count three times and calculate the median. Note offloading and encoder precision and verify them in logs. Keep the stop point consistent: computation-log completion or a saved PNG that opens.</p><p>The site's RTX 5090 reference uses the public LightX2V result; other NVIDIA devices use relative estimates from standard NF4, while Mac uses separate GGUF reports and chip-specific estimate ranges. No figure was invented for GB10 or swap-dominated conditions without evidence. Before buying, look for raw results or reproducible demonstrations with the same configuration and settings.</p><ul><li><a href="https://mesmer.tools/benchmarks/qwen-image-2-1">Public FP4 and INT4 results by resolution and step count</a></li><li><a href="https://huggingface.co/Qwen/Qwen-Image-2.1/discussions/32">Diffusers 5090 results by resolution</a></li><li><a href="https://www.kgptalkie.com/tutorials/llm-benchmarking/qwen-image-2-1-macbook-pro-m5-max-comfyui">Mac GGUF Q4 and Q8 run reports</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-image-21-mac-gpu-choice.webp" alt="A silver compact computer and a dark GPU PC share a desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Image volume and frequency affect hardware choice.</figcaption></figure><section><h2>Compare Qwen image variants by steps and quantization</h2><p>Qwen-Image 2.1 base, Turbo, GGUF, and Pruna are different execution paths with different file formats and step counts. Do not compare figures unless resolution, steps, runtime, and GPU are all stated. First verify that the variant and application support the output you need, such as rendered text, reference editing, or transparency. Do not transfer timings or optimization ratios from 2512 to 2.1.</p></section><section><h2>Read official timings only within their stated setup</h2><p>For every repository timing, record the GPU, resolution, steps, precision, and whether warm-up is excluded. When Pruna’s 5 or 8 steps, Turbo’s 8, and Base’s 40 differ, compare output quality and task alongside runtime. Leave any metric the source does not publish blank or marked ‘not reported’; do not infer it.</p></section><aside><h2>Compare Qwen-Image 2.1 wait times by device</h2><p>Compare 1K and 2K to see the wait for your repeated workflow.</p><a href="https://localai.co.kr/en/generate?model=qwen-image-2.1&amp;hardware=nvidia-rtx-5090-32gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Compare Qwen-Image 2.1 generation time alongside resolution, step count, and runtime. Separating model loading, image generation, and saving makes configuration changes on the same hardware easier to assess. This guide examines the published 5.930-second RTX 5090 result and Mac test conditions, then explains how to time completion through saving the PNG on your hardware.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Crane? Run LLM, OCR and audio models behind a local Rust API</title><link>https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide</guid><description>Starting from the hassle of separate Python environments for chat, OCR and audio, learn how Crane's Candle-based Rust project builds, runs Qwen3.5, connects through a localhost API and handles Bonsai 2.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is Crane? Run LLM, OCR and audio models behind a local Rust API</h1><p>Crane connects local AI models to Rust applications</p><p id="guide-page-summary">Crane is a Rust project built on Hugging Face Candle for running text, OCR, and speech models and connecting them to applications through the crane-serve HTTP API. Developers embedding inference in Rust or managing their own server can verify the chat path with a small Qwen3.5 model, then add the capabilities they need.</p><p>An app that adds chat, receipt OCR, and speech transcription can end up with conflicting Python dependencies or separate environments for each feature. Crane brings text, image, and audio examples together in a Rust/Candle repository and exposes them through the local crane-serve API. Start with one text model, verify requests between the app and server, then add other models so issues remain easier to isolate.</p><p>Rust catches many errors at compile time and makes it convenient to package an application as an executable. Candle provides tensor operations and model components in Rust. These are development and deployment benefits; changing languages alone does not make a model faster or guarantee support for every checkpoint.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Crane is a Candle-based Rust project that connects text, image, and speech capabilities to applications through an HTTP API.</li><li>Verify the chat server first with Qwen/Qwen3.5-0.8B, then set the client to http://127.0.0.1:8080/v1 and model name crane-local.</li><li>Bonsai 2 Prism GGUF is documented for CPU and NVIDIA CUDA. Check project-level Metal support separately from support for a particular model.</li></ol></section><section><h2>How Crane differs from other local runtimes</h2><p>Ollama simplifies downloading and running models behind an API. MLX is a compute framework for Apple Silicon, with applications such as oMLX built on top of it. Crane provides Rust model implementations through Candle and CPU, Metal, and CUDA execution paths. It generally loads one model per process, so separate chat and speech models can run as separate servers on different ports.</p><p>An existing program sends requests to crane-serve and receives responses through an OpenAI-compatible chat API. Crane does not replace desktop-app features such as file management or conversation history. Project-level Metal support does not mean every model runs on Metal, so check the device support for each checkpoint.</p><ul><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Compare local model runtimes</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Explore MLX runtimes on Mac</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Ollama: connecting a model on your computer to other apps</a></li></ul></section><figure><img src="https://localai.co.kr/guides/crane-local-workbench.webp" alt="A small computer showing a chat screen, with a microphone and a photo beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Adding speech to an app also requires checking the speech model and request path.</figcaption></figure><section><h2>Pin the commit and build for your device</h2><p>The build below pins the commit reviewed on September 23, 2026. You need the Rust toolchain; macOS also needs Xcode Command Line Tools, while Linux with NVIDIA CUDA needs a compatible CUDA toolkit. Choose one Cargo command for your device rather than running all three.</p><p>Choose Metal and Accelerate on Apple Silicon Mac, CUDA on Linux with an NVIDIA GPU, or the CPU build for a first check without a GPU. Model weights are not part of compilation, so download a model separately after building the executable.</p><div><p><strong>Clone the repository and pin its version</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/lucasjinreal/Crane.git
cd Crane
git checkout --detach 99a60887bdca16b4852b7bc953ca03c1df374e88</code></pre><p><small>Start from the commit reviewed for this guide.</small></p></div><div><p><strong>Build for Apple Silicon Mac</strong></p><pre><code data-guide-code-block="1-1">cargo build --release -p crane-serve --features "metal,accelerate"</code></pre><p><small>Choose this command on Mac.</small></p></div><div><p><strong>Build for NVIDIA CUDA</strong></p><pre><code data-guide-code-block="1-2">cargo build --release -p crane-serve --features cuda</code></pre><p><small>Use on Linux with a compatible CUDA toolkit.</small></p></div><div><p><strong>Build for CPU</strong></p><pre><code data-guide-code-block="1-3">cargo build --release -p crane-serve</code></pre><p><small>Choose this to check functionality without a GPU.</small></p></div></section><figure><img src="https://localai.co.kr/guides/crane-model-backend.webp" alt="Concept illustration of differently shaped wooden blocks and a fitting jig, with a laptop and graphics card behind them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose an execution path for the model file; device support varies by model.</figcaption></figure><section><h2>Check the chat path with a small Qwen model</h2><p>The server executable needs model weights separately. Start with Qwen/Qwen3.5-0.8B, which is listed in the README and model card. This checkpoint also includes a vision encoder, but the first test is a text request summarizing meeting notes, so use the --text-only server option. Enabling one capability at a time makes failures easier to isolate.</p><p>Use hf download and confirm that the model directory contains configuration, tokenizer, and weight files. If uv is already installed, uvx hf runs the download tool in an isolated uv-managed environment, so a separate Python virtual environment is not needed. Otherwise, follow Hugging Face's OS-specific CLI installation instructions.</p><div><p><strong>Download the official model files</strong></p><pre><code data-guide-code-block="2-0">uvx hf download Qwen/Qwen3.5-0.8B --local-dir models/Qwen3.5-0.8B</code></pre><p><small>Run this from the Crane directory and wait for the download to finish.</small></p></div><ul><li><a href="https://huggingface.co/Qwen/Qwen3.5-0.8B">Official Qwen model card and license</a></li><li><a href="https://huggingface.co/docs/huggingface_hub/en/guides/cli">Hugging Face CLI installation and download guide</a></li></ul></section><section><h2>Keep the test server accessible only on this computer</h2><p>The --model-name crane-local value is the name used in API requests, and --context 4096 sets the context limit for this test. Setting --host 127.0.0.1 accepts requests from this computer only. Crane's default host is 0.0.0.0, which listens on all network interfaces, so local testing should expose only the required scope.</p><p>Check the server log for its address and model-loading status. If the interface does not open automatically, visit http://127.0.0.1:8080/ in a browser; --ui provides the web interface. First test whether a short note receives a complete answer. If it fails, inspect the model path, text-only option, and logs before adding longer inputs or OCR.</p><div><p><strong>Qwen3.5 text chat server</strong></p><pre><code data-guide-code-block="3-0">./target/release/crane-serve --model-path models/Qwen3.5-0.8B --model-type qwen3_5_vl --text-only --model-name crane-local --host 127.0.0.1 --port 8080 --context 4096 --ui</code></pre><p><small>Use the downloaded model directory and omit vision components with --text-only.</small></p></div></section><section><h2>Send requests from an app through the OpenAI-compatible API</h2><p>Calling the API directly with curl separates server checks from client configuration. curl -N displays streamed content without buffering, so you can see the first token and subsequent output. The request's model value must match crane-local from the server command. Supported Qwen templates can disable thinking mode with enable_thinking set to false.</p><p>Set the OpenAI-compatible client base URL to http://127.0.0.1:8080/v1 and the model name to crane-local. This example accepts unauthenticated requests only on localhost. If the app requires an API key and you enter a placeholder such as local, it does not become a server password or enable authentication. Use a non-sensitive note or short code explanation to verify the app reaches the same server as the browser test.</p><div><p><strong>Request a streaming response</strong></p><pre><code data-guide-code-block="4-0">curl -N http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"crane-local","messages":[{"role":"user","content":"Say hello in one short sentence."}],"stream":true,"max_tokens":256,"temperature":0,"chat_template_kwargs":{"enable_thinking":false}}'</code></pre><p><small>Keep the server running and execute this in another terminal to see response chunks arrive.</small></p></div><ul><li><a href="https://github.com/lucasjinreal/Crane/tree/99a60887bdca16b4852b7bc953ca03c1df374e88/crane-serve">crane-serve API docs at the pinned commit</a></li></ul></section><section><h2>Add OCR, ASR, and TTS after chat works</h2><p>After confirming chat, review the repository's PaddleOCR-family, Qwen3-ASR, and Qwen3-TTS paths separately. OCR reads text from images, ASR converts speech to text, and TTS produces audio from text, so they use different model types and inputs. For meeting transcription, process a short sample through a separate server using the model type and API format in its README. Separate ports reduce the chance that changing one feature interrupts another.</p><p>Use a non-sensitive sample before real recordings or receipts. Test separately whether OCR reads image text, ASR captures Korean speech, and TTS produces the needed language. A model's startup log and output quality are separate checks.</p></section><section><h2>Recheck file format and GPU support for Bonsai 2</h2><p>The Bonsai 2 Prism release is a designated GGUF containing PTQ1_0 or PQ2_0 ternary weights, not an ordinary GGUF. Crane adds an implementation that reads this special type and applies the TernaryLinear path. Use the specified Prism file rather than substituting a regular Q4 GGUF.</p><p>The official instructions describe CPU and NVIDIA CUDA execution for Bonsai 2; they do not say that Qwen3.5's Metal path applies unchanged. A successful Crane build on Mac does not guarantee Mac GPU acceleration for this model. Check memory use with the selected Prism file and context 4096 rather than estimating from the 27B parameter count alone.</p><div><p><strong>Switch the server to Bonsai 2 GGUF</strong></p><pre><code data-guide-code-block="6-0">./target/release/crane-serve \
  --model-path /absolute/path/Ternary-Bonsai-2-27B-PTQ1_0.gguf \
  --model-name bonsai-local --host 127.0.0.1 --port 8080 \
  --context 4096 --ui</code></pre><p><small>Stop the existing server with Ctrl+C, then run this CPU/CUDA example. Change the file path and client model name.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/bonsai-2-27b-local-guide">Bonsai 2 27B files and memory requirements</a></li><li><a href="https://github.com/lucasjinreal/Crane">Bonsai 2 instructions in the Crane repository</a></li></ul></section><section><h2>Compare runtimes using the same task and conditions</h2><p>For comparison with another runtime, use the same meeting note and separate initial model loading and warm-up from the main measurements. After warm-up, run the same request three times and record the median, with time to first token, generation speed, and total completion time kept distinct. This helps locate differences in input processing versus answer generation.</p><p>Match thinking mode, output limit, model, quantization, and context length before attributing a speed difference to the backend. Record new requests separately from continuing conversations, and note different formats such as MLX and GGUF. Faster output is not a reason to switch if meeting summaries omit decisions; also consider whether required tasks complete reliably and environment-management time decreases.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Time to first token and answer generation speed</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">VRAM, unified memory, and headroom</a></li></ul></section><figure><img src="https://localai.co.kr/guides/crane-server-workflow.webp" alt="A desk with a connected laptop and computer beside a run log notebook and stopwatch" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record latency and answer quality side by side for the same request.</figcaption></figure><aside><h2>Review the Crane revision and its supported models</h2><p>Check the pinned revision's build options, model list and API examples before using the same setup.</p><a href="https://github.com/lucasjinreal/Crane/tree/99a60887bdca16b4852b7bc953ca03c1df374e88">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Crane is a Rust project built on Hugging Face Candle for running text, OCR, and speech models and connecting them to applications through the crane-serve HTTP API. Developers embedding inference in Rust or managing their own server can verify the chat path with a small Qwen3.5 model, then add the capabilities they need.</dd></div><div><dt>How much memory does it need?</dt><dd>The official instructions describe CPU and NVIDIA CUDA execution for Bonsai 2; they do not say that Qwen3.5's Metal path applies unchanged. A successful Crane build on Mac does not guarantee Mac GPU acceleration for this model. Check memory use with the selected Prism file and context 4096 rather than estimating from the 27B parameter count alone.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The server executable needs model weights separately. Start with Qwen/Qwen3.5-0.8B, which is listed in the README and model card. This checkpoint also includes a vision encoder, but the first test is a text request summarizing meeting notes, so use the --text-only server option. Enabling one capability at a time makes failures easier to isolate.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Husky on Mac: Woof, MLX and the 730 tok/s result</title><link>https://localai.co.kr/en/guides/husky-woof-apple-silicon-inference</link><guid isPermaLink="true">https://localai.co.kr/en/guides/husky-woof-apple-silicon-inference</guid><description>Understand Husky's Woof-specific inference, Flash drafting and MLX comparison, how to try it on Mac, and why the result does not transfer to every model.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Husky on Mac: Woof, MLX and the 730 tok/s result</h1><p>Husky is a Woof-specific engine: see the conditions behind 730 tok/s</p><p id="guide-page-summary">Husky is an engine running the Woof language model on Mac. Enter a question or text to edit in Underdog: Woof produces the answer and Husky executes it. The announced maximum 730 tok/s comes from a function-editing task using 4-bit Woof 4B on M5 Max.</p><p>Husky tunes the runtime for one model rather than requiring a larger computer. Editing that reuses existing text differs from writing new copy from scratch, so first compare your workload with the published conditions rather than focusing on the peak speed.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Husky is an Apple silicon engine for Woof, not a setting that speeds up every LLM.</li><li>With Flash, reported speeds were 730 tok/s for function editing and 260 tok/s for short email writing.</li><li>Verify the engine selected in the app and assess Korean output quality yourself.</li></ol></section><section><h2>The three names refer to an app, model, and engine</h2><p>Underdog is the Mac app, Woof is the answer-generating model, and Husky is the runtime engine. The September 20, 2026 announcement compared the same 4-bit Woof 4B weights on an M5 Max with a 40-core GPU and 128 GB memory. Speed does not establish Korean editing accuracy; check that dates, meeting duration, and polite style remain intact after a venue-change request.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide">Backburner: Accelerate Mac LLM Prefill with an iPhone</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/husky-model-specific.webp" alt="An illustration comparing tools for many shapes with one designed for a single shape" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A model-specific engine and a general runtime are different choices.</figcaption></figure><section><h2>The 730 tok/s and email figures came from different tasks</h2><p>The developer reported medians of three runs per task using the same weights and greedy decoding. Function editing measured 163 tok/s for MLX, 614 tok/s for Husky, and 730 tok/s for Husky with Flash. Short email writing measured 151, 164, and 260 tok/s. Relative to MLX, the function-editing ratios were about 3.8x and 4.5x with Flash, while email was about 1.1x and 1.7x. These ratios are calculated from reported results, not new benchmarks. The function-editing peak does not apply to long Korean explanations or other models.</p><p>One possible difference is how much existing input can be reused. Changing only a date leaves more reusable text than rewriting an announcement from scratch.</p><table><caption>Developer-reported medians of three runs per task: M5 Max 40-core GPU, 128GB, 4-bit Woof 4B, greedy decoding.</caption><thead><tr><th scope="col">Workload</th><th scope="col">MLX</th><th scope="col">Husky</th><th scope="col">Husky + Flash</th></tr></thead><tbody><tr><th scope="row">Function edit</th><td>163 tok/s</td><td>614 tok/s</td><td>730 tok/s</td></tr><tr><th scope="row">Short email</th><td>151 tok/s</td><td>164 tok/s</td><td>260 tok/s</td></tr></tbody></table></section><section><h2>Flash proposes next-token candidates for Woof to verify</h2><p>Husky can find reusable tokens in the input or use a small draft model trained for Woof to propose candidates. Woof verifies the final candidates. Reuse may help when the answer resembles existing text; new wording may lead to rejected candidates and added computation. Increasing candidate count therefore does not always improve speed.</p><ul><li><a href="https://localai.co.kr/en/guides/mtp-multi-token-prediction">How multiple tokens are proposed and verified</a></li></ul></section><figure><img src="https://localai.co.kr/guides/husky-lookup.webp" alt="A source document, a partial revision, and wooden pieces representing tokens" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Edits that preserve source text may have content to reuse.</figcaption></figure><section><h2>Record model loading, first token, and generation separately</h2><p>Initial model loading, the wait for the first token after processing input, and generation tok/s are different stages. Repeated questions may reuse context cache, while a new document may need processing again. Reported generation rate alone does not tell you total wait after clicking.</p><p>Record the model, engine, and version selected in Underdog. Use a short Korean notice to test typo correction, style adjustment, and action-item extraction separately. Check that dates, venue, polite tone, and key details are preserved. This evaluates your task rather than reproducing the developer's figures.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill, decode, and time to first token</a></li></ul></section><figure><img src="https://localai.co.kr/guides/husky-cache.webp" alt="A bookmarked book beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Existing conversation context differs from reading a new document.</figcaption></figure><section><h2>Compare existing models and hardware with real tasks</h2><p>If your Qwen server or oMLX already works well, the Husky announcement alone is not a reason to switch. Woof-specific optimization and a general runtime for multiple models serve different purposes. Check the supported OS for Underdog on Mac and grant only necessary permissions when connecting mail or calendar. External-service communication may remain even when inference runs on the Mac.</p><p>Assess a new Mac by everyday output quality and total completion time. Compare the time to finish and review a short announcement against your current machine to see how generation gains help real work.</p><ul><li><a href="https://underdog.ai/">Underdog for Mac</a></li></ul></section><aside><h2>View other model speeds on your Mac</h2><p>Compare memory, prefill, and decode at the same input length.</p><a href="https://localai.co.kr/en/speed">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Husky is an engine running the Woof language model on Mac. Enter a question or text to edit in Underdog: Woof produces the answer and Husky executes it. The announced maximum 730 tok/s comes from a function-editing task using 4-bit Woof 4B on M5 Max.</dd></div><div><dt>How much memory does it need?</dt><dd>Underdog is the Mac app, Woof is the answer-generating model, and Husky is the runtime engine. The September 20, 2026 announcement compared the same 4-bit Woof 4B weights on an M5 Max with a 40-core GPU and 128 GB memory. Speed does not establish Korean editing accuracy; check that dates, meeting duration, and polite style remain intact after a venue-change request.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is a local LLM? From installation and PC specifications to model selection and speed checks</title><link>https://localai.co.kr/en/guides/local-llm-start</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-start</guid><description>Learn what a local LLM does, choose Ollama or LM Studio, check RAM and VRAM, and pick a model. Try a real browser chat and compare hardware response times.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">What is a local LLM? From installation and PC specifications to model selection and speed checks</h1><p>Ask your first question to a small language model on your computer</p><p id="guide-page-summary">A local LLM runs a language model on your computer or a server you manage. Download the model files and open a runtime to edit text, summarize or explain code on your own hardware.</p><p>Start with a short text and inspect the answer. Check that the model runs and follows the request; then move on to larger tasks such as summarizing documents or coding. This makes it easier to locate a problem if one occurs.</p><p>For example, enter: ‘We will review the materials for 30 minutes in Room B at 10:30 a.m. next Tuesday. If you cannot attend, please send your comments by Monday.’ Then ask: ‘Revise this in no more than three sentences, keeping the date, place, meeting time, and deadline unchanged.’ Compare the original and answer to check that all four details remain intact.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>You can try a short Korean question in a browser demo before installing anything.</li><li>Start with LM Studio if you want to choose models through a graphical interface; consider Ollama if you want to rerun commands or call a model from another program.</li><li>Check available memory and start with a small model and short input.</li></ol></section><section><h2>Check the result with a short request whose answer you know</h2><p>Start by making a short notice containing a date and place easier to read without changing its meaning. Use the preceding example and ask: 'Rewrite this in no more than three sentences. Keep the date, time, place and deadline unchanged.' Compare the original with the reply and check that every required detail remains.</p><p>To try this before installing an app, open the browser LLM. It runs Qwen 3.5 0.8B Q4 through WebGPU in a supported browser. The first model download needs internet access. Try a short question with this small model, then check your regular tasks in the installed app too.</p><p>For evidence from a long PDF, connect document retrieval; for pictures, use an image-generation model. Start with a task whose result you can check immediately, such as editing text, and add the features you need after the model responds correctly.</p><ul><li><a href="https://localai.co.kr/en/demo">Ask your first question in the browser</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li></ul></section><figure><img src="https://localai.co.kr/guides/start-local.webp" alt="A workspace where a question is entered and answered by a language model on the computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use a short request to check that questions and answers work on this device.</figcaption></figure><section><h2>Check memory and choose an app to run the model</h2><p>On Windows, check system memory and dedicated GPU memory separately in Task Manager. Do not add shared GPU memory as if it were separate VRAM. On a Mac, check the chip and unified memory in About This Mac. Because the CPU and GPU share that pool, the full displayed capacity cannot be assigned to the model.</p><p>Besides the model file, memory is needed for the runtime workspace and conversation context. Longer documents and continued conversations require more context memory, while the browser and editor use memory too. Begin with a short input while your usual apps are open, then increase input length or add one app at a time to find the conditions that run short.</p><p>Try LM Studio first if you want to find models and chat through a graphical interface; try Ollama if you want to rerun commands by model name or call a model from another program. You do not need to install both. Choose one, prepare a model, and send the same request used in the browser to compare whether the installed route preserves the same information.</p><table><caption>Ways to send your first question</caption><thead><tr><th scope="col">What you want to do</th><th scope="col">Where to start</th><th scope="col">Check your first success</th></tr></thead><tbody><tr><th scope="row">Try a short question before installing</th><td>Browser LLM</td><td>A reply appears after the model download</td></tr><tr><th scope="row">Choose a model and chat in an app</th><td>LM Studio</td><td>Load the downloaded model in chat and receive a reply</td></tr><tr><th scope="row">Run commands or connect another app</th><td>Ollama</td><td>The setup guide's run command returns a reply</td></tr></tbody></table><p>For LM Studio, find a model in the search screen, download a file suited to your hardware and load it in chat. With Ollama, run the command in its setup guide to ask questions in the terminal. Follow the guide for the app you chose and send the same notice as before. A complete reply gives you a starting point for longer documents or connecting another app.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Why memory use grows with context length</a></li><li><a href="https://localai.co.kr/en/guides/lm-studio-local-serving-guide">Choose a model and chat in LM Studio</a></li><li><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Get your first Korean answer after installing Ollama</a></li></ul></section><figure><img src="https://localai.co.kr/guides/start-memory.webp" alt="Memory space used by model files, conversation context, and other apps" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave memory for context, runtime work, and other apps in addition to the model file.</figcaption></figure><section><h2>Check answer quality separately from the slow part</h2><p>Check separately whether the output is within three sentences and whether the date, place, 30-minute meeting, and Monday deadline remain unchanged. Following the requested format is not enough if an important fact changes. Save the original and prompt so you can compare under the same conditions after changing the model or hardware.</p><p>Record which stage is slow. If the wait occurs only when opening the app, it may include loading the model file. If the first text appears slowly after the model is ready, check the prefill stage that processes the input; if text begins promptly but continues slowly, check decoding. Record an app's response time separately from estimates in a speed tool because they are not the same measurement.</p><p>If the model answers short texts but stalls on long documents or reports a memory error, first check the input context and memory available to the runtime. If the information is accurate but the wait is too long, compare execution speed using the same model and input. If your current setup gives you the answers you need within an acceptable wait, you do not need new hardware.</p><ul><li><a href="https://localai.co.kr/en/guides/local-llm-first-run-slow-checklist">What to check when a model is slow on its first run</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Review memory, speed, and cost before choosing hardware</a></li><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison">Compare wait times on two systems using the same model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/start-compare.webp" alt="The same recorded question used to compare answers from different models" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping the request the same makes it easier to compare models.</figcaption></figure><section><h2>Check the data path before adding documents or external connections</h2><p>After downloading the model and runtime, local inference can work with the internet disconnected. Web search, external APIs, and cloud models use separate internet connections. Before submitting sensitive documents, check which model receives the request and whether search or external tools are enabled.</p><ul><li><a href="https://docs.ollama.com/faq">Ollama FAQ: local use and cloud settings</a></li><li><a href="https://lmstudio.ai/docs/app/offline">LM Studio documentation: offline use</a></li></ul></section><aside><h2>Ask a first question on your computer</h2><p>Load a small model in your browser and ask it a question.</p><a href="https://localai.co.kr/en/demo">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM runs a language model on your computer or a server you manage. Download the model files and open a runtime to edit text, summarize or explain code on your own hardware.</dd></div><div><dt>How much memory does it need?</dt><dd>Besides the model file, memory is needed for the runtime workspace and conversation context. Longer documents and continued conversations require more context memory, while the browser and editor use memory too. Begin with a short input while your usual apps are open, then increase input length or add one app at a time to find the conditions that run short.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>ComfyUI first image: install, load a model and fix common errors</title><link>https://localai.co.kr/en/guides/comfyui-install-first-image</link><guid isPermaLink="true">https://localai.co.kr/en/guides/comfyui-install-first-image</guid><description>Install Comfy Desktop, locate the SD 1.5 checkpoint and open a downloadable 512px workflow, with checks for missing models and memory errors.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">ComfyUI first image: install, load a model and fix common errors</h1><p>Verify the basic ComfyUI path by saving your first image</p><p id="guide-page-summary">ComfyUI runs workflow nodes to create an image from a checkpoint and prompt, then saves it through a Save Image node. On a first run, verify that it finds the model, completes the graph, and produces a file you can open.</p><p>Install Comfy Desktop for your operating system—Windows, Apple Silicon Mac, or Linux—and wait for its new runtime environment to be ready. This guide focuses on saving a cup image through the default workflow. If you already use a Portable or manual installation, you do not need to reinstall; add the model and workflow there and follow the same checks.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The checkpoint and workflow JSON serve different roles; both are needed.</li><li>Confirm the first image by saving it through Save Image, not just by seeing a preview.</li><li>Changing one prompt condition while keeping the seed fixed makes two results easier to compare.</li></ol></section><section><h2>Start with the official Desktop and default workflow</h2><p>Choose Comfy Desktop for Windows, Apple Silicon Mac, or Linux from the official download page. Once the new runtime is created, verify that the default workflow opens and runs. Adding many third-party nodes at the start makes it harder to distinguish setup issues from extension conflicts. The supplied workflow needs no custom nodes or API-key-based cloud nodes, so verify the basic path first.</p><ul><li><a href="https://www.comfy.org/download">Official Comfy Desktop download</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li></ul></section><section><h2>Prepare the checkpoint and workflow JSON separately</h2><p>The image-model file is v1-5-pruned-emaonly-fp16.safetensors. Review the distribution page’s terms, download it, and place it in the models/checkpoints folder read by the active ComfyUI environment. If Desktop is configured to use a shared model folder, use that location. The checkpoint supplies the image model; the JSON contains node connections and settings, so the JSON alone cannot generate an image.</p><p>Drag the workflow JSON into the interface or open it through Workflows → Open. Select the safetensors file in Load Checkpoint to connect it to the graph. If it is missing from the list, check that you placed it in the folder used by the active environment, then refresh or restart the app. Renaming the extension does not move the file or make it compatible.</p><ul><li><a href="https://localai.co.kr/downloads/comfyui-first-image/workflow.json">Download the first-image workflow JSON</a></li><li><a href="https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive">SD 1.5 model file and terms</a></li></ul></section><figure><img src="https://localai.co.kr/guides/comfy-pipeline.webp" alt="A conceptual illustration of prompt, model and finished image" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The first run is complete when the graph finishes and Save Image creates a file.</figcaption></figure><section><h2>Keep the default settings for the first image</h2><p>Keep 512×512, batch 1, seed 42, 20 steps, CFG 7, euler·normal, and denoise 1, then press Run. The prompt is a short English sentence describing a ceramic cup on a wooden table with light from a window. Leaving the settings unchanged makes it easier to see how far the default path works.</p><p>The first run may include checkpoint loading. After the nodes finish and Save Image runs, check that a file was actually written. A preview and a result saved on disk are different; reopen the file and inspect the cup, table, and window light. If no file exists, first check whether execution reached the save node rather than changing the prompt.</p></section><section><h2>Change only one prompt condition on the second run</h2><p>After the first file is saved, keep the model, resolution, step count, and seed 42 fixed and change only the lighting description. For example, describe softer window light to isolate what changed. Changing the sampler or model at the same time makes it hard to explain a different cup shape. A fixed seed does not guarantee identical pixels across models or environments.</p><p>If the second image is not to your taste but was saved successfully, that is not an installation failure. A different style may call for another model, which requires its own checkpoint and settings. Keep the first default image as a baseline for later comparisons.</p><ul><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">Choose the next image model and workflow</a></li></ul></section><figure><img src="https://localai.co.kr/guides/comfy-seed.webp" alt="Two pictures of the same cup and plant in cool and warm light, with an adjustment knob between them" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the seed and model fixed and change one prompt condition to isolate the difference.</figcaption></figure><section><h2>Diagnose a stall from its symptoms</h2><p>If the checkpoint is missing, check its filename, models/checkpoints location, and shared-folder setting. For a red node or missing-node warning, verify that you opened the supplied workflow JSON; this path needs no custom node. If CUDA reports out of memory, close other GPU workloads and return to batch 1 at 512×512. Do not reduce several values at once; revert the last change first.</p><p>If the image saves but takes a long time, check the log for the actual GPU path. This ComfyUI path on Apple Silicon uses PyTorch MPS and differs from an MLX-based LLM runtime. Keep the successful default settings as a baseline, then add workload requirements one at a time to continue isolating delays.</p></section><section><h2>Record the saved file and runtime conditions together</h2><p>The measurement template records GPU, dedicated VRAM, system RAM, OS/ComfyUI/PyTorch versions, backend, model filename and SHA-256, resolution, and sampling settings. Record initial checkpoint loading as coldLoadSeconds; after the specified warm-up with seed 41, generate three times with seeds 42, 43, and 44 and calculate the median. Repeatedly pressing Run may not execute sampling each time, so verify logs and progress and record samplingExecuted.</p><p>The JSON demonstrates node connections and settings; it is not a speed table for a particular GPU. Before measurement, fields for coldLoadSeconds, warm-up completion, actual sampling, totalSeconds, peakVramGB, and file/log locations are empty. Null means unmeasured, not zero seconds. Consider an upgrade only when the required resolution or feature causes errors or repeated delays, and compare current and candidate hardware with the same model and settings.</p><ul><li><a href="https://localai.co.kr/downloads/comfyui-first-image/measurement-template.json">Download the measurement template</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Next workload by VRAM capacity</a></li></ul></section><figure><img src="https://localai.co.kr/guides/comfy-record.webp" alt="A desk with a notebook containing a landscape sketch, a stopwatch, and a box holding GPU, CPU, and memory components" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record the saved file and runtime settings together to compare equivalent runs.</figcaption></figure><aside><h2>Compare image-generation time on your hardware</h2><p>Choose a model for your next task and get a feel for expected time on different hardware.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ComfyUI runs workflow nodes to create an image from a checkpoint and prompt, then saves it through a Save Image node. On a first run, verify that it finds the model, completes the graph, and produces a file you can open.</dd></div><div><dt>How much memory does it need?</dt><dd>The JSON demonstrates node connections and settings; it is not a speed table for a particular GPU. Before measurement, fields for coldLoadSeconds, warm-up completion, actual sampling, totalSeconds, peakVramGB, and file/log locations are empty. Null means unmeasured, not zero seconds. Consider an upgrade only when the required resolution or feature causes errors or repeated delays, and compare current and candidate hardware with the same model and settings.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MiMo V2.6 Pro and Flash launched together: how strong are they?</title><link>https://localai.co.kr/en/guides/mimo-v2-6-pro-flash-performance</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mimo-v2-6-pro-flash-performance</guid><description>A practical reading of MiMo V2.6 Pro and Flash: their 1.02T and 309B sparse MoE designs, published coding and agent results, 1M context, multimodal input and real serving scale.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-22</p><h1 id="guide-page-title">MiMo V2.6 Pro and Flash launched together: how strong are they?</h1><p>Choose MiMo V2.6 Pro or Flash by whether quality or concurrency is the bottleneck</p><p id="guide-page-summary">MiMo V2.6 has two sparse MoE models, Pro and Flash, with different coding/agent evaluation results and deployment memory scales. Pro has 1.02T total and about 42B active parameters per token; Flash has 309B total and about 15B active, with official weights of about 573.5 GB and 177.7 GB respectively.</p><p>When deploying a coding agent for a team, first decide whether you need higher success on one request or capacity for more simultaneous requests. Pro and Flash differ by benchmark task, and Flash is still too large for a typical single desktop GPU. Looking at scores and server configurations separately clarifies what to test.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Both models support text, image, video, and audio input with a 1M context.</li><li>Pro has 70 layers and 384 routed experts; Flash has 48 layers and 256 experts, selecting 8 per token.</li><li>Public agent scores show that the gap between the models varies by task.</li></ol></section><section><h2>Separate single-request quality from server throughput</h2><p>Both models were announced together on September 22, 2026. Both are sparse MoEs: Pro activates about 42B parameters per token out of 1.02T, and Flash about 15B out of 309B. They retain all expert weights and select some for each computation. Assess memory using total weights and per-token computation using active parameters.</p><p>Pro has 70 layers and 384 routed experts; Flash has 48 layers and 256 experts, selecting 8 per token. Both interleave global-attention layers with short-window attention and use a 5-layer MTP decoder. Flash is not simply a Pro with features removed; it is an operational alternative with different total weights and active compute.</p><ul><li><a href="https://github.com/XiaomiMiMo/MiMo-Code/releases/tag/v0.1.15">Xiaomi's September 22 announcement</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-1017-vs-opus-5-glm-53-guide">DeepSeek 1017 vs Opus 5 vs GLM-5.3: scores and cost together</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mimo-v26-pro-flash-scale.webp" alt="A workspace showing only some expert modules active in two sparse models of different sizes" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Pro and Flash share a sparse MoE family but differ in total storage and per-token compute.</figcaption></figure><section><h2>Compare evaluations closest to your team's work</h2><p>Pro generally scores higher on coding and tool-use evaluations, though the gap varies by test. DeepSWE v1.1 scores 71.9 for Pro and 67.9 for Flash. ProgramBench is 26.5 vs. 26.0, AutomationBench 53.1 vs. 52.3, and Toolathlon 76.9 vs. 73.6.</p><p>The scores are closer on computer-use tasks: OSWorld Verified is 82.0 vs. 80.8, JobBench 62.0 vs. 61.2, Terminal Bench 2.1 89.9 vs. 87.6, and Visual Coding 72.3 vs. 71.5. The gap widens on Terminal Bench 4.0, at 34.9 vs. 28.8.</p><p>CyberGym reports 95.1 for Flash and 94.0 for Pro. These are Xiaomi's published scores without independent reproduction, and one evaluation cannot settle which model is better at security analysis overall.</p><table><caption>Pro and Flash results in the official performance table</caption><thead><tr><th scope="col">Evaluation</th><th scope="col">Pro</th><th scope="col">Flash</th></tr></thead><tbody><tr><th scope="row">DeepSWE v1.1</th><td>71.9</td><td>67.9</td></tr><tr><th scope="row">ProgramBench</th><td>26.5</td><td>26.0</td></tr><tr><th scope="row">AutomationBench</th><td>53.1</td><td>52.3</td></tr><tr><th scope="row">Toolathlon</th><td>76.9</td><td>73.6</td></tr><tr><th scope="row">OSWorld Verified</th><td>82.0</td><td>80.8</td></tr><tr><th scope="row">JobBench</th><td>62.0</td><td>61.2</td></tr><tr><th scope="row">Terminal Bench 2.1</th><td>89.9</td><td>87.6</td></tr><tr><th scope="row">Visual Coding</th><td>72.3</td><td>71.5</td></tr><tr><th scope="row">Terminal Bench 4.0</th><td>34.9</td><td>28.8</td></tr><tr><th scope="row">CyberGym</th><td>94.0</td><td>95.1</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/mimo-v26-agent-workbench.webp" alt="An agent workbench connecting code editing, browser control, and task verification tools" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Public results vary by task, including code editing, tool use, and computer control.</figcaption></figure><section><h2>Active parameters alone do not determine speed or throughput</h2><p>Flash has about 30% of Pro's total weights and about 36% of its active parameters per token. Scores do not shrink in the same proportion on some tasks, but active counts alone cannot predict time to first token or serving cost. Weight precision, expert/tensor parallelism, interconnect bandwidth, MTP acceptance rate, and concurrent requests all affect latency and throughput.</p><p>The Flash card includes SGLang TP8·DP2 and vLLM TP4 examples. These are server configurations using multiple accelerators, not guarantees of maximum speed on one ordinary GPU. Single-request latency and team-wide throughput are different metrics; compare them under the same parallelism and load.</p></section><section><h2>Multimodal input and 1M context also consume memory</h2><p>Both models accept text, image, video, and audio, with a native context of 1,048,576 tokens. They also include an approximately 681M vision encoder and audio tokenizer and patch encoder. This input range may matter to an agent that needs to use a code repository, screenshots, and short video descriptions together.</p><p>A 1M context is not cost-free capacity for every request. Longer inputs increase prefill work and KV cache, while image, video, and audio tokens also use memory. Plan for the actual document lengths, attached media, and concurrent users on your team.</p></section><figure><img src="https://localai.co.kr/guides/mimo-v26-multi-accelerator.webp" alt="A server workbench distributing large weight groups across multiple accelerator modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Flash weights are about 177.7 GB, making a multi-accelerator server more realistic than one GPU card.</figcaption></figure><section><h2>Plan multi-accelerator deployment starting with weight size</h2><p>Hugging Face file metadata checked on September 22, 2026, lists Flash weight shards at about 177.7 GB and Pro at about 573.5 GB. KV cache, runtime buffers, and operating-system memory are additional. Sparsity does not let you load only the active 15B and discard the other experts; all weights must remain accessible. A single 32 GB or 48 GB graphics card cannot hold the complete files.</p><p>The official Pro SGLang example uses TP16·EP16 across two nodes, and its vLLM example uses TP8. Flash examples also use TP4 or more. Local inference here can mean running public weights on an organization's internal server instead of sending data to an external API. Distributing weights across accelerators also requires suitable interconnect bandwidth and communication setup, so hardware cannot be chosen from the model name alone.</p></section><section><h2>Test Pro and Flash side by side on real team tasks</h2><p>Use Pro as a quality reference when complex repository changes matter most. If agent requests overlap and your main tasks resemble benchmarks where the scores are close, Flash is worth testing on an existing cluster or rented server. If work resembles tasks with a larger gap, such as Terminal Bench 4.0, evaluate Pro under the same conditions too.</p><p>Build an evaluation set from repository edits, browser actions, and security analyses that have failed in your team's work. Record success, human review time, request latency, concurrent throughput, and operating cost. Flash becomes a defensible choice if it preserves the needed quality while reducing waits or cost. Without that evidence—or if Pro better fits critical tasks—keeping the current setup may be preferable to buying a new server.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Review hardware for server-scale open-weight models</h2><p>Continue with active parameters, total weights, and multi-accelerator deployment.</p><a href="https://localai.co.kr/en/guides/server-scale-open-weight-models-2026">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MiMo V2.6 has two sparse MoE models, Pro and Flash, with different coding/agent evaluation results and deployment memory scales. Pro has 1.02T total and about 42B active parameters per token; Flash has 309B total and about 15B active, with official weights of about 573.5 GB and 177.7 GB respectively.</dd></div><div><dt>How much memory does it need?</dt><dd>A 1M context is not cost-free capacity for every request. Longer inputs increase prefill work and KV cache, while image, video, and audio tokens also use memory. Plan for the actual document lengths, attached media, and concurrent users on your team.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Bonsai 2 27B: what to check before the 6 GB headline</title><link>https://localai.co.kr/en/guides/bonsai-2-27b-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/bonsai-2-27b-local-guide</guid><description>A practical look at Bonsai 2 27B's ternary weights, the 5.95 GB and 7.21 GB packs, its custom runtime, and published RTX 4090, 5090 and M5 Pro performance.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-20</p><h1 id="guide-page-title">Bonsai 2 27B: what to check before the 6 GB headline</h1><p>Run Bonsai 2 27B with an engine matching its compressed format</p><p id="guide-page-summary">Bonsai 2 27B is a compressed Qwen3.8-27B-based model that answers questions in text. It reduces file size by representing most weights with three values. Run it in a dedicated llama.cpp or MLX runtime and add vision components for image understanding.</p><p>First choose whether to test a coding question or image understanding, then send a short prompt through a runtime supported by the official demo. Even if the 5.95 GB PTQ1_0 language-weight file fits on disk, KV cache and runtime workspace are additional. Being able to store a file is not the same as being able to generate answers reliably.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>PTQ1_0 language weights are 5.95 GB and PQ2_0 is 7.21 GB; the vision projector is separate.</li><li>Use patched llama.cpp or a Bonsai-specific MLX loader, not a generic Q2 loader.</li><li>Published PQ2_0 decode figures are 129.9 tok/s on RTX 5090, 81.2 on RTX 4090, and 28.1 on M5 Pro.</li></ol></section><section><h2>Distinguish file size from the complete runtime setup</h2><p>Bonsai 2 27B is based on Qwen3.8-27B and represents most weights as −1, 0, or +1. It uses groups of 128 and Hadamard rotations to reduce bits while aiming to preserve accuracy. The complete model has 27.36B parameters: a 24.35B language backbone, 2.54B embeddings and output head, and a 0.46B vision tower.</p><p>The smallest PTQ1_0 language weights are 5.95 GB; the official demo defaults to PQ2_0 at 7.21 GB. The MLX bundle is 8.60 GB including a 0.92 GB vision tower, while the GGUF vision projector is a separate file of about 0.63 GB. These are disk sizes of files or bundles, not total runtime memory.</p><p>As prompts are processed, KV cache grows to hold context; Apple Silicon also uses unified memory for the model buffers and operating system. A model file fitting on the SSD of an 8 GB device does not establish that conversations will run reliably. Image tasks also need vision components and a runtime that connects them, beyond the language file.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide">What is Crane? Run LLM, OCR and audio models behind a local Rust API</a></li></ul></section><figure><img src="https://localai.co.kr/guides/bonsai-2-ternary-compression.webp" alt="A workbench arranging many memory modules into three small bins beside a bonsai" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compress the weights and budget separately for KV cache and runtime space.</figcaption></figure><section><h2>Start with a short text prompt in the dedicated runtime</h2><p>Bonsai 2 applies a Hadamard rotation to activations before linear layers. The runtime must handle this transform together with the compressed weights to produce valid output. A Q2 label does not mean the GGUF file can be opened by any Q2 loader.</p><p>The official demo installer prepares a patched llama.cpp build with the required support. Standard llama.cpp may reject the file or load it while producing corrupted text. MLX also requires a dedicated loader that understands the Bonsai conversion. Before downloading again or changing GPUs, verify that the checkpoint and runtime form a supported pair.</p><p>Begin with a short text question and verify that the answer is coherent; only then add a long document or image. Passing the text test first makes later failures easier to diagnose as memory issues, vision setup, or runtime incompatibility.</p></section><figure><img src="https://localai.co.kr/guides/bonsai-2-hadamard-runtime-repaired-20261016.webp" alt="A dual-fan graphics card on a mat, a laptop, and an external SSD on a wooden workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The runtime must handle compressed weights and the Hadamard transform together.</figcaption></figure><section><h2>Separate prompt processing from generation in vendor timings</h2><p>PrismML publishes separate PQ2_0, batch-1 figures for generating 128 tokens and processing a 512-token prompt. Generation tok/s is not time to first token, so both measurements are needed to understand latency from submitting a prompt through response completion.</p><p>These vendor tests exclude the vision tower. Results on a personal setup vary with operating system, concurrent requests, actual prompts, and model configuration. Test a typical short question and long document separately, distinguishing time to first token from completion. For inputs of 4K tokens or more, the speed display shows a broader range.</p><table><caption>PrismML vendor measurements for PQ2_0</caption><thead><tr><th scope="col">Device</th><th scope="col">128-token generation (tok/s)</th><th scope="col">512-token prefill (tok/s)</th></tr></thead><tbody><tr><th scope="row">RTX 5090</th><td>129.9</td><td>3,893</td></tr><tr><th scope="row">RTX 4090</th><td>81.2</td><td>3,124</td></tr><tr><th scope="row">RTX PRO 6000 Blackwell</th><td>124.8</td><td>4,020</td></tr><tr><th scope="row">Apple M5 Pro</th><td>28.1</td><td>387</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/bonsai-2-hardware-speed.webp" alt="A comparison of the same model's response length across a laptop and two GPU desktops" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The same PQ2_0 generates at different speeds on M5 Pro, RTX 4090, and RTX 5090.</figcaption></figure><section><h2>Validate compression and public averages on your own tasks</h2><p>PTQ1_0 is 1.75 bits/weight and 5.95 GB; PQ2_0 is 2.13 bits/weight and 7.21 GB. The files differ by 1.26 GB, but a smaller file does not always decode faster.</p><p>On the published devices, PTQ1_0 generated at a similar or slightly higher rate, but PQ2_0 processed prompts faster on every device tested. Start with PQ2_0 when more than 8 GB of memory is available; compare PTQ1_0 on the same prompts when memory is tight or you need a smaller file.</p><p>PrismML reports averages across 14 reasoning evaluations of 84.78 for PQ2_0 Bonsai 2 and 86.32 for FP16 Qwen3.8-27B, claiming 98.2% by the ratio of average scores. This is a vendor evaluation, not a guarantee of 98.2% quality on every prompt. Compare typical code reviews, bug fixes, or documents under the same conditions and record correctness, omissions, consistency, time to first token, and completion time.</p><p>If the official demo's PQ2_0 and patched runtime work on your computer and answer real prompts adequately, keep that setup. If memory is the actual bottleneck, test PTQ1_0 on the same ten questions and compare answer quality with the space saved. Image tasks need a separate check including the vision projector.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-20">2026-09-20</time><p><strong>Added the dedicated Bonsai 2 runtime path and published performance</strong></p><p>The guide now separates Ternary PQ2_0 from ordinary Q2 GGUF and requires a Hadamard-aware runtime. Vendor-published prefill and decode measurements are connected only to matching speed experiences.</p></li></ol></details><aside><h2>Compare Bonsai 2 speed</h2><p>Compare prefill and decode time across hardware, starting with RTX 4090.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-4090-24gb&amp;model=bonsai-2-27b&amp;quant=TERNARY_PQ2&amp;context=4096&amp;accel=none">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Bonsai 2 27B is a compressed Qwen3.8-27B-based model that answers questions in text. It reduces file size by representing most weights with three values. Run it in a dedicated llama.cpp or MLX runtime and add vision components for image understanding.</dd></div><div><dt>How much memory does it need?</dt><dd>The smallest PTQ1_0 language weights are 5.95 GB; the official demo defaults to PQ2_0 at 7.21 GB. The MLX bundle is 8.60 GB including a 0.92 GB vision tower, while the GGUF vision projector is a separate file of about 0.63 GB. These are disk sizes of files or bundles, not total runtime memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Jev? A System One model that decides instead of writing</title><link>https://localai.co.kr/en/guides/jev-system-one-model-explained</link><guid isPermaLink="true">https://localai.co.kr/en/guides/jev-system-one-model-explained</guid><description>How Jev differs from a general LLM, why it returns typed choices and probabilities, and what local Jev-like projects actually reproduce.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What is Jev? A System One model that decides instead of writing</h1><p>Jev returns choices and confidence instead of a written answer</p><p id="guide-page-summary">Jev is a decision model that takes documents or inquiries and returns predefined choices with confidence scores. It supplies values such as departments or risk levels for other programs to use directly. Automate repeated classification and leave explanations to an LLM or a person.</p><p>If you want to know whether a Jev-style model can run locally on your PC or Mac, start with what the model returns. For example, when an inquiry should go to one of billing, access or security, a single department value can be more useful to the next step than a written explanation. A Jev-style request fixes the decision fields and options first, then takes the inquiry. The short output format is where the speed comes from; it is not simply writing shorter answers.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Input can be free text while output remains within a defined type and choice set.</li><li>Structured output avoids generating and then validating lengthy JSON.</li><li>A valid format does not guarantee a semantically correct decision.</li></ol></section><section><h2>Turn an inquiry into a value the next program can use</h2><p>Consider classifying an inquiry that says this month's plan seems to have been charged twice. Define billing, access, and security as department choices, then enter the inquiry. Route a returned billing value to the billing queue and send low-confidence cases for human review.</p><p>A classification step differs from explaining a refund or asking follow-up questions to resolve ambiguity. If the next program only needs the department, it need not reinterpret prose; completing the support interaction still requires explanation and dialogue.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/qwen-local-jev-projects">Local Jev-like decisions with Qwen: SemIf, Simple Jev and openjev-sglang</a></li><li><a href="https://localai.co.kr/en/guides/jev-35b-nvfp4-decision-inference-guide">How to evaluate JEV-35B NVFP4 inference on B200</a></li><li><a href="https://localai.co.kr/en/guides/jev-ollama-local-decision-guide">Run Jev in Ollama: get classifications and probabilities instead of prose</a></li><li><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Jev-Omni: multimodal decisions on local GPUs</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A desk showing several decision cards from one long document" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>It returns predefined choices and probabilities instead of a long answer.</figcaption></figure><section><h2>Compute predefined decisions together</h2><p>Even in JSON mode, a general LLM generates braces, keys, and values token by token. Jev defines output structure and choices in advance and can compute multiple decisions in parallel, changing what must be generated. TypeSafe describes end-to-end latency of 70–500 ms for its service, but that is the provider's reported range, not a guarantee across regions, input lengths, or question counts.</p><p>For a comparison, use the same inquiry and number of choices and include network wait consistently on both sides. Comparing a general LLM's JSON-generation time with Jev's end-to-end time uses different measurement scopes. This guide interprets the published range; it adds no latency measurements or universal ranking.</p></section><figure><img src="https://localai.co.kr/guides/jev-prefill-without-decoding.webp" alt="Comparison of long token generation with a decision returned after input processing" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Input processing and choice scoring work differently from generating many tokens.</figcaption></figure><section><h2>JEV scores choices instead of writing an answer</h2><p>A JEV-style decision model receives a state, question, and allowed choices, then returns a score or probability for each choice. It fits repeated ticket routing or status decisions; use a separate generator when free-form explanation is required.</p><p>The published RTX PRO 6000 single-question medians are Julia-1 3 ms, Laya 5 ms, Kev-4B 12 ms, lev 36 ms, and OpenJev 43 ms. Keep each model name with its size and language in the table, separate from service latency at other input lengths or concurrency.</p></section><section><h2>Define correct outcomes and review rules</h2><p>Fixed choices can reduce malformed JSON or values outside billing, access, and security. But if the inquiry omits whether both charges completed, one is pending, or account access is abnormal, a billing label can still be wrong. Format validity and business correctness are separate.</p><p>High confidence still does not guarantee correctness. Route low-confidence or closely competing choices to a person, and do not automate high-impact permission or payment approvals. Have people label test cases first, compare model results to the reference, and track misclassification separately from human review.</p></section><section><h2>Use Jev-style models for repeated routing and LLMs for explanations</h2><p>Structured values pass readily to the next step in tasks with a fixed output range, such as department routing, risk scoring, ranking candidates, or checking policy eligibility. Explaining a duplicate charge, outlining a refund, or asking for missing facts requires free-form language. Jev and a general LLM can serve different classification and explanation stages, but connecting them does not guarantee accuracy or speed.</p><p>Map how each classification affects the next step. A value that selects a queue differs from one that automatically approves a refund in acceptable error and review requirements. Even with the same model, automation scope depends on downstream permissions.</p></section><figure><img src="https://localai.co.kr/guides/jev-chat-versus-automation.webp" alt="An open-ended chat model beside an automation panel with fixed choices" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Explanatory conversation and repeated classification are different tasks.</figcaption></figure><section><h2>Distinguish a decision head from candidate-token scoring</h2><p>Some Qwen implementations read candidate-token logits directly; Jev-Omni uses a separately trained classification head over Gemma 4 12B IT representations. Both can avoid long text generation, but their scoring paths and model artifacts differ.</p><p>Define allowed choices, tie handling, and human review for uncertain cases before exposing an API. Log the schema version because changing option labels can disconnect existing ground-truth labels.</p></section><section><h2>Compare Qwen-based local implementations</h2><p>TypeSafe keeps Jev's weights and training private. Local projects can read candidate logits from public Qwen checkpoints or prefill shared documents before branching into questions. They implement Jev-style decision outputs through separate approaches.</p><p>Models, prompts, input processing, and parallelism can differ between implementations. Evaluate accuracy, probability calibration, and latency using the same data and conditions. Describe them as implementations aiming to reproduce Jev-style decisions rather than claiming they are equivalent to Jev.</p><p>To try this locally, start with the [Qwen-based local Jev implementation comparison](/guides/qwen-local-jev-projects). It covers CPU experiments and projects for Mac and NVIDIA GPUs.</p><ul><li><a href="https://localai.co.kr/en/guides/darwin-27b-ztc-local-decision-guide">Darwin-27B-ZTC decision inputs and requirements</a></li></ul></section><section><h2>JEV-27B-VL returns choice probabilities for images</h2><p>AutoTrust released `autotrust/JEV-27B-VL` to apply Jev-style decisions from text inquiries to images and screenshots. System 1 accepts images and text, then returns probabilities for yes/no, a choice among 2–256 options, or a 0–5 rating in one forward pass.</p><p>System 2 uses the Qwen3.8-27B backbone for ordinary image-input text and reasoning. The model is Apache-2.0 and contains 28B BF16 weights. [Official model card](https://huggingface.co/autotrust/JEV-27B-VL) and [2026-09-30 announcement](https://huggingface.co/blog/autotrust/autotrustjev-27b-vl-a-decision-model-that-learned)</p><p>Consider classifying a product photo as `electronics`, `clothing`, or `home`. Put the image and seller title in `state`, describe the classification question in `question`, and read the probability for each option. Use `choice` when you need a selected category, and `noul` when you need the probability that a property is true, such as whether an item is safe. Do not automate payment or permission decisions based only on a high probability; first evaluate errors and review thresholds on a human-labeled image set.</p><p>When the command completes, the JSON response includes the options and a `probabilities` array. For `hf: command not found`, check that the Hugging Face CLI is installed. If the image request is rejected, first check the `state` array’s `{"image": URL}` form and that the image URL is reachable. For a `/v1/decide` route error, check the server log to confirm `serve_decide.py` started in the required vLLM development environment. [Official decision API and image input format](https://huggingface.co/autotrust/JEV-27B-VL)</p><table><caption>The new model path has different requirements from the existing small Ollama example.</caption><thead><tr><th scope="col">Path</th><th scope="col">Suitable input</th><th scope="col">Published run condition</th></tr></thead><tbody><tr><th scope="row">Ollama `/v1/systemone`</th><td>Text choices, yes/no, and scores with Nimble/Tev</td><td>Ollama 0.35.0+ and a supported model</td></tr><tr><th scope="row">JEV-27B-VL `/v1/decide`</th><td>Choice probabilities from text and images</td><td>vLLM development build, 80 GB+ GPU recommended</td></tr></tbody></table><div><p><strong>Terminal 1 — download the model and start the local server</strong></p><pre><code data-guide-code-block="7-0">python -m pip install -U huggingface_hub
hf download autotrust/JEV-27B-VL --local-dir JEV-27B-VL
python3 JEV-27B-VL/serve_decide.py --model JEV-27B-VL --served-model-name autotrust/JEV-27B-VL --host 127.0.0.1 --port 8000 --enable-lora --max-lora-rank 32 --lora-modules jev-decision=JEV-27B-VL/adapter_vllm --logprobs-mode processed_logprobs --max-model-len 32768 --enable-prefix-caching --mamba-cache-mode align --limit-mm-per-prompt '{"image": 8}' --max-num-seqs 8 --trust-request-chat-template</code></pre><p><small>This adds `--host 127.0.0.1` to the model card’s `serve_decide.py` quickstart so the server binds only to the local interface. Start on a GPU with at least 80 GB; `/v1/decide` needs the development vLLM build specified by the card. Check the card’s install and serving notes, and verify host binding separately if using the default `serve.sh`. For product classification, replace the image URL with a reviewed photo. [vLLM host option](https://docs.vllm.ai/en/latest/cli/serve/)</small></p></div><div><p><strong>Terminal 2 — send an image classification request after the server is ready</strong></p><pre><code data-guide-code-block="7-1">curl http://127.0.0.1:8000/v1/decide -H 'Content-Type: application/json' -d '{"kind":"choice","state":["Photo: ", {"image":"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}],"question":"Which category fits this image?","options":["food","electronics","clothing","home"]}'</code></pre><p><small>Leave the first terminal running the server and send this request from a new terminal. Inspect `probabilities` in the response.</small></p></div></section><section><h2>Measure accuracy and latency on the same workload</h2><p>Include a gold action and an ‘unable to decide’ option for 100 tickets, then calculate exact-match accuracy, error types, and empty responses for each model. Repeat latency measurements by input length on the same device and record p50 and p95.</p><p>Route low-confidence, high-cost decisions to a person. Do not deploy based on speed alone; compare the cost of a wrong automated action with the review cost.</p></section><section><h2>Read computer-use scores with their input and task setup</h2><p>In a 2026-10-03 card update, AutoTrust reports completing 95% of 60 random multi-step tasks in headless Chromium, at about 0.26 seconds per click. Tasks involved three to seven clicks across shopping, settings, and email screens. The model received both numbered boxes and the text of screen elements. Under a separate condition with numbered boxes only, completion was 10%, so the 95% result is not a general GUI success rate from screenshots alone. [Computer-use conditions in the official card](https://huggingface.co/autotrust/JEV-27B-VL)</p><p>The robot-arm result is also a simulation, not a physical robot test: 75% completion across 20 random MuJoCo scenes, at about 240 ms per decision. Its control loop and environment differ from browser clicks, so the two latency figures are not directly comparable. The vLLM memory notes list 52 GB for BF16 weights plus about 17 GB for the KV cache at a 256K prompt, measured on a 183 GB B200. The card recommends starting at `--max-model-len 131072` on an 80 GB GPU.</p><table><caption>Each figure comes from a self-reported demo under its stated scene and input setup.</caption><thead><tr><th scope="col">Test</th><th scope="col">Published result</th><th scope="col">Conditions and limit</th></tr></thead><tbody><tr><th scope="row">Browser computer use</th><td>95% of 60, about 0.26 s/click</td><td>headless Chromium, 3–7 clicks, boxes plus element text</td></tr><tr><th scope="row">MuJoCo robot arm</th><td>75% of 20, about 240 ms/decision</td><td>Simulation, not a physical robot test</td></tr><tr><th scope="row">256K text prompt</th><td>About 8,700 prompt tok/s</td><td>One B200, one request at a time, 250K prompt</td></tr></tbody></table></section><aside><h2>Compare local Jev-style implementations</h2><p>Compare Qwen 0.8B and 4B implementations with the 35B server setup.</p><a href="https://localai.co.kr/en/guides/qwen-local-jev-projects">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Jev is a decision model that takes documents or inquiries and returns predefined choices with confidence scores. It supplies values such as departments or risk levels for other programs to use directly. Automate repeated classification and leave explanations to an LLM or a person.</dd></div><div><dt>How much memory does it need?</dt><dd>The robot-arm result is also a simulation, not a physical robot test: 75% completion across 20 random MuJoCo scenes, at about 240 ms per decision. Its control loop and environment differ from browser clicks, so the two latency figures are not directly comparable. The vLLM memory notes list 52 GB for BF16 weights plus about 17 GB for the KV cache at a 256K prompt, measured on a 183 GB B200. The card recommends starting at `--max-model-len 131072` on an 80 GB GPU.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>System 2 uses the Qwen3.8-27B backbone for ordinary image-input text and reasoning. The model is Apache-2.0 and contains 28B BF16 weights. [Official model card](https://huggingface.co/autotrust/JEV-27B-VL) and [2026-09-30 announcement](https://huggingface.co/blog/autotrust/autotrustjev-27b-vl-a-decision-model-that-learned)</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local Jev-like decisions with Qwen: SemIf, Simple Jev and openjev-sglang</title><link>https://localai.co.kr/en/guides/qwen-local-jev-projects</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-local-jev-projects</guid><description>Compare direct-logit Qwen projects, a small CPU implementation, an SGLang server and trained Jev-like models without mistaking them for official Jev.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Local Jev-like decisions with Qwen: SemIf, Simple Jev and openjev-sglang</h1><p>Qwen-based Jev-style projects differ in logits, API experiments, and server throughput</p><p id="guide-page-summary">Qwen-based Jev-style projects take documents and choices and return classifications and candidate scores. SemIf targets 4B personal-machine experiments, Simple Jev demonstrates a 0.8B CPU API, and openjev-sglang focuses on 35B parallel server processing. Choose a starting point for your hardware and decision task.</p><p>Local projects for Jev-style decisions start from different goals: reading scores, demonstrating an API, dedicated training, or server throughput. Identify the model and runtime first, then evaluate choice accuracy and latency separately on data relevant to your use.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>SemIf tests Qwen3.5-4B logits and shared-prefill reuse.</li><li>Simple Jev demonstrates the API flow with a Qwen3.5-0.8B CPU example.</li><li>openjev-sglang is a baseline serving Qwen3.6-35B-A3B on B200.</li></ol></section><section><h2>Read candidate-token scores to produce decisions</h2><p>Define department choices such as billing, access, and security, then provide an inquiry. Reading the model's next-position logits and applying softmax yields relative probabilities within that choice set. The model need not generate prose or lengthy JSON; server code constructs the response. Still verify tokenization of each label, semantic distinctions, and whether confidence matches actual accuracy.</p><p>For illustration, logits of 2, 1, and 0 yield softmax values of about 66.5%, 24.5%, and 9.0%. These are normalized scores within the three choices, not a guarantee that the first choice has that probability of being correct.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/jev-omni-local-multimodal-guide">Jev-Omni: multimodal decisions on local GPUs</a></li><li><a href="https://localai.co.kr/en/guides/jev-system-one-model-explained">What is Jev? A System One model that decides instead of writing</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-qwen-direct-logits.webp" alt="Reading choice probabilities from a Qwen model's next-token scores" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Some implementations read candidate scores without generating a written answer.</figcaption></figure><section><h2>SemIf is aimed at 4B comparisons on personal hardware</h2><p>SemIf continues the earlier renamed OpenJev repository and reads candidate logits from Qwen3.5-4B. It can reuse a shared-document prefill and evaluate question branches in parallel; CUDA experiments on RTX 3090 and an Apple silicon MLX backend are also published. It is a closer starting point than a server-scale setup for reproducible personal-hardware comparisons.</p><p>Because choices from the faster shared path may differ from basic scoring, record agreement alongside latency. Fix the inquiry and model revision and compare fresh and shared paths on the same evaluation data. Agreement between paths does not establish correctness; count errors against human-labeled references.</p></section><figure><img src="https://localai.co.kr/guides/jev-shared-prefix-branches.webp" alt="A cache structure branching multiple questions in parallel from shared text" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Shared prefill reuse is relevant when processing multiple questions.</figcaption></figure><section><h2>Simple Jev is an example for learning the API on CPU</h2><p>Rather than retraining a classification head, Simple Jev reads logits from an open model through Transformers and PyTorch. Its Qwen3.5-0.8B CPU example lets you inspect request and response structure without a high-end GPU. Start with a small choice set and verify the output shape.</p><p>A successful request confirms the API flow, not decision accuracy for your business. You can also check whether compatible routes /v1/classifier and /v1/systemone call the same implementation. Separate interface compatibility from quality, collect semantic errors, and then decide whether a 4B model is needed.</p></section><section><h2>Choose a project by its implementation path</h2><p>Simple Jev is a small entry point for learning a decision API on CPU; SemIf explores Qwen 4B-class models on personal hardware. openjev-sglang targets parallel execution on B200 servers, not the same setup as a desktop tutorial.</p><p>A candidate-scoring library and a `/v1/systemone` server request are different execution methods. Keep the ticket and action names fixed for comparison, but adapt input fields and option order to each project’s example.</p></section><section><h2>openjev-sglang is a parallel-serving baseline for B200</h2><p>openjev-sglang serves the Qwen3.6-35B-A3B NVFP4 checkpoint through SGLang and uses radix cache and parallel requests. Its published baseline uses one B200, so it should not be read as an installation recipe for a personal GPU. The relevant design is reuse of a shared prefix across questions.</p><p>The published throughput for 64 questions depends on accelerator, input length, and concurrency. Throughput differs from one request's latency. For example, the hypothetical completion of 64 questions in four seconds would mean 16 per second, not that each request took 1/16 second. This is an illustrative assumption, not a restatement of the B200 measurement.</p></section><figure><img src="https://localai.co.kr/guides/jev-open-project-scale.webp" alt="A small laptop, single-GPU desktop, and server accelerator compared by scale" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The goals differ from 0.8B CPU experiments to 4B local decisions and 35B server serving.</figcaption></figure><section><h2>Check each repository with the same choices and inputs</h2><p>Use the same ticket and action candidates across the projects. Convert each request to the project’s documented interface, then record its response keys and which choice each probability belongs to.</p><p>For CPU tests, record load time and per-query latency; for personal 4B GPU runs, record VRAM and batch limits; for servers, log concurrency and accelerator use. Do not combine measurements from different conditions into one ranking.</p></section><section><h2>Choose trained projects by data coverage and error cost</h2><p>kev adds LoRA and a small readout head to Qwen2.5-0.5B to handle a document and multiple questions in one sequence. qwen-rlcd trains Qwen3.5-0.8B for Choice, Score, and Noul decisions. These adapt more to decision structure than direct score-reading baselines, but performance can be limited by training and evaluation coverage.</p><p>Test whether results hold across phrasings such as 'charged twice' and 'seems to be a duplicate payment,' and whether confidence is useful for review. The baseline, small CPU API, and B200 server use different models and tasks, so do not rank them directly; measure accuracy, calibration, and latency on the same business data.</p></section><section><h2>Validate open implementations in the real workflow</h2><p>Even a good score on sample tickets may not cover long context, duplicate choices, or missing fields in production inputs. Keep a fixed test set containing those cases and record model revision and dependency versions.</p><p>For training-focused projects, inspect data provenance, licensing, and correction workflows. If a misclassification is costly, limit automation and keep human review as the default path.</p></section><section><h2>Route an inquiry with a llama.cpp decision model</h2><p>The `/v1/systemone` API in llama.cpp 0.6.0 can run Kev-4B, based on Qwen3.5-4B. Send an inquiry and candidate teams; the selected team is returned in `answers.route.choice`. This example uses the Q4_K_M file. [Kev-4B model card](https://huggingface.co/ggml-org/Kev-4B-GGUF)</p><p>Prepare `llama-server` version 0.6.0 or later and run the first command. When the server reports that it is ready, send the second command from another terminal. Describing each team's responsibilities alongside its label makes the classification criteria clearer.</p><p>Inspect the selected value and each option's `probabilities`. If the connection fails, check `/health` first. For a 501 error, verify that a decision model is loaded; for a 400 error, check the `state` and `questions` input format. Before routing real inquiries automatically, test against human-labeled inquiries and set a threshold for sending uncertain cases to a person. [Official API documentation](https://github.com/ggml-org/llama.cpp/blob/v0.6.0/tools/server/README.md#post-v1systemone-typesafe-compatible-system-one-api)</p><div><p><strong>Terminal 1 — start the Kev-4B server</strong></p><pre><code data-guide-code-block="8-0">llama-server -hf ggml-org/Kev-4B-GGUF:Q4_K_M --host 127.0.0.1 --port 8080 --ctx-size 4096</code></pre><p><small>The first run downloads the model. The server binds to a local address so only this computer can connect.</small></p></div><div><p><strong>Terminal 2 — check readiness and classify the team</strong></p><pre><code data-guide-code-block="8-1">curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:8080/v1/systemone -H 'Content-Type: application/json' -d '{"state":"I was charged twice for my subscription.","questions":{"route":{"type":"choice","instructions":"Which team should handle this inquiry?","criteria":{"billing":"payments, charges and refunds","access":"login and account access","security":"suspicious activity and account protection"}}}}'</code></pre><p><small>Send the inquiry and options together. Read the selected value and probabilities in `answers.route`.</small></p></div></section><aside><h2>Choose a starting point for your hardware</h2><p>Compare CPU, Apple silicon, 24 GB GPU, and server configurations.</p><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen-based Jev-style projects take documents and choices and return classifications and candidate scores. SemIf targets 4B personal-machine experiments, Simple Jev demonstrates a 0.8B CPU API, and openjev-sglang focuses on 35B parallel server processing. Choose a starting point for your hardware and decision task.</dd></div><div><dt>How much memory does it need?</dt><dd>For CPU tests, record load time and per-query latency; for personal 4B GPU runs, record VRAM and batch limits; for servers, log concurrency and accelerator use. Do not combine measurements from different conditions into one ranking.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The `/v1/systemone` API in llama.cpp 0.6.0 can run Kev-4B, based on Qwen3.5-4B. Send an inquiry and candidate teams; the selected team is returned in `answers.route.choice`. This example uses the Q4_K_M file. [Kev-4B model card](https://huggingface.co/ggml-org/Kev-4B-GGUF)</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</title><link>https://localai.co.kr/en/guides/local-jev-hardware-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-jev-hardware-guide</guid><description>Learn how Jev-style models read a state and return probabilities for choices, then choose among CPU, Apple silicon, RTX 3090, and B200 server setups for your workload.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</h1><p>Test decision models that score states and choices instead of generating prose</p><p id="guide-page-summary">A Jev-style local decision model reads a state such as a support ticket or document and returns probabilities or scores for predefined questions. Small Qwen-based implementations are useful for trying the request flow on a CPU, personal Mac, or RTX system; 27B OpenJev and Clef models require more memory and server capacity. Check results on a small set of real work examples before choosing hardware for your request volume and latency needs.</p><p>Before choosing a GPU, decide how often a document is read and how many questions must be handled at once. Reusing shared input and the number of questions affect memory and latency, so start with existing hardware and scale after identifying a real bottleneck.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The System One API accepts a `state` and `choice`, `score`, or `noul` questions, then returns probabilities or decisions.</li><li>Use a CPU to check request structure, a Mac or RTX 3090 for 4B experiments, and a B200 as a starting point for 27B server-load planning.</li><li>Do not assume probabilities are calibrated to your work data; set thresholds using your own labeled examples.</li><li>oMLX 0.7.1.dev1 and llama.cpp v0.6.0 provide a `/v1/systemone` path for supported OpenJev-family decision models.</li></ol></section><section><h2>What does a Jev-style decision model take in and return?</h2><p>A standard chat model reads a request and generates a response. A Jev-style decision model takes a request or event record as `state` and evaluates predefined questions and choices. `choice` returns probabilities for each option and the top choice; `score` returns a score calculated from probabilities across levels; `noul` returns the probability that a yes/no statement is true. Results are usually JSON, so they can feed steps such as ticket routing, safety checks, or selecting a next action without generating a prose answer.</p><p>For example, send an order inquiry as the `state` and receive a choice among `billing`, `shipping`, and `technical`, with a probability for each option. These probabilities differ from task accuracy, so compare them with human-labeled answers, set a threshold, and route low-probability or borderline cases for review.</p><p>oMLX 0.7.1.dev1 and llama.cpp v0.6.0 support the TypeSafe-compatible `POST /v1/systemone` endpoint. A regular `/v1/chat/completions` request generates tokens and returns prose; `/v1/systemone` returns structured results for `choice`, `score`, or `noul` questions. Confirm that the selected model is a supported decision model before calling this endpoint.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">oMLX 0.7.1.dev1 decision models and API guide</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama.cpp `/v1/systemone` request and response format</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/mlx-apple-silicon-local-ai-guide">Run local AI with MLX on Apple Silicon: frameworks and model tools explained</a></li><li><a href="https://localai.co.kr/en/guides/dual-dgx-spark-what-actually-improves">What actually improves when you connect two DGX Sparks?</a></li><li><a href="https://localai.co.kr/en/guides/laya-mlx-typed-decision-guide">Laya-MLX: a decision model that answers in 13 ms on a Mac</a></li></ul></section><section><h2>On a CPU, classify one inquiry with the Simple Jev server</h2><p>Simple Jev reads logits from a regular Qwen model and builds the choice result as JSON. Here, run Qwen3.5-0.8B on a CPU to route a duplicate-charge inquiry. The later oMLX section uses separately trained OpenJev or Clef checkpoints.</p><p>Prepare Git and Python 3.12 or newer. The installation commands below use a macOS or Linux terminal with Python 3.13. Clone the repository, create a virtual environment in that folder, and install the server package.</p><div><p><strong>Install Simple Jev</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/featherless-ai/simple-jev.git
cd simple-jev
python3.13 -m venv .venv
source .venv/bin/activate
python -m pip install -e './hf-server'</code></pre></div><p>Start the CPU server in the same virtual environment. The first run downloads the model from Hugging Face, so wait for download and loading to finish. Use port 8001 to keep it separate from the oMLX server later in this guide.</p><div><p><strong>Start the Qwen3.5-0.8B CPU server</strong></p><pre><code data-guide-code-block="1-1">python hf-server/hf_server.py --model Qwen/Qwen3.5-0.8B --device cpu --dtype float32 --classifier-prompt-policy baseline --max-model-len 4096 --max-batch-size 4 --max-batch-tokens 4096 --port 8001</code></pre></div><p>Keep the server terminal open and query health and models from a new terminal. A ready status and the Qwen3.5-0.8B model ID mean you can send a short classification request.</p><div><p><strong>Query CPU server health and models</strong></p><pre><code data-guide-code-block="1-2">curl http://127.0.0.1:8001/health
curl http://127.0.0.1:8001/v1/models</code></pre></div><p>The request below sends a duplicate-charge inquiry as `state` and asks for a team among `billing`, `shipping`, and `technical`. Start with an example containing no sensitive data, and remove personal information before testing work samples.</p><div><p><strong>Classify the team for one inquiry</strong></p><pre><code data-guide-code-block="1-3">curl http://127.0.0.1:8001/v1/classifier \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen/Qwen3.5-0.8B","state":"Customer message: I was charged twice for my order last week.","questions":{"route":{"type":"choice","instructions":"Which team should handle this?","criteria":{"billing":"Payments, invoices, and refunds","shipping":"Delivery or tracking issues","technical":"Product or account errors"}}}}'</code></pre></div><p>Read the selected team and each candidate's `probabilities` in `answers.route`. Compare with a human-labeled team, then add rephrased inquiries and cases with missing information. Use the errors to adjust choice descriptions and human-review rules.</p><p>If the connection fails, check model download/loading in the server terminal and port 8001. For HTTP 422, read the error details and compare `state`, `questions`, and `criteria` with the example. If package installation fails, check the Python version and virtual environment first. When finished, stop the server with Ctrl+C in its terminal.</p><ul><li><a href="https://github.com/featherless-ai/simple-jev#running-the-hf-server">Simple Jev local server setup</a></li><li><a href="https://github.com/featherless-ai/simple-jev/blob/main/hf-server/README.md#api">Classifier API and error responses</a></li></ul></section><section><h2>Watch memory use in Qwen 4B experiments on Apple silicon</h2><p>On Mac, the oMLX API section below provides the OpenJev/Clef execution path. Use the SemIf MLX experiment here to compare memory capacity and shared-input reuse. The SemIf-OpenJev MLX path supports experiments that score Qwen3.5-4B directly on Apple silicon. The public browser demo's Q4 weight file is about 3 GB. macOS, the runtime, per-question workspace, and caches also use memory, so check Memory Pressure in Activity Monitor and leave headroom for repeated requests after the model loads.</p><p>A small request may run on a 16 GB unified-memory Mac, but a browser and development tools can reduce headroom. Process one item with your usual apps open and check memory pressure and completion time. If multiple questions share a long state, compare a shared path that reads the common state once with a fresh path that reads it for each question.</p><p>With 24 GB or more unified memory, you may have room to test more questions and larger inputs. Run the same task samples individually and concurrently, recording choices, probabilities, processing time, and memory in each case.</p><ul><li><a href="https://github.com/TheoLeeCJ/SemIf-OpenJev">SemIf-OpenJev repository and MLX instructions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-mac-mlx-workbench-repaired-20261016.webp" alt="A monitor beside a silver compact desktop shows a three-item list, with a keyboard and a card tray on the desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>On Apple silicon, record model loading separately from shared-input reuse.</figcaption></figure><section><h2>Choose hardware after defining the request</h2><p>Memory needs for a 35B model vary by checkpoint precision and serving runtime. For example, the JEV-35B NVFP4 card lists 25.6 GB (23.3 GiB) of weights and says it was tested on B200. Check the card’s runtime requirements against the intended device and workload.</p><p>The published RTX PRO 6000 single-question medians are Julia-1 3 ms, Laya 5 ms, Kev-4B 12 ms, lev 36 ms, and OpenJev 43 ms. Keep each model name with its size and language in the table, separate from service latency at other input lengths or concurrency.</p></section><section><h2>On an RTX 3090, track VRAM and reuse paths together</h2><p>Raw BF16 weights for Qwen3.5-4B take about 8 GB: 4 billion parameters × 16 bits ÷ 8 bits per byte. A simple subtraction from the RTX 3090's 24 GB VRAM leaves about 16 GB, but that space is not all available for question caches. The runtime, CUDA driver, temporary buffers, and KV cache also use VRAM. Q4 files reduce download size and weight memory but use a different numeric representation from BF16.</p><p>The SemIf repository provides examples comparing direct, prefix-reuse, and parallel-suffix execution on an RTX 3090. When several questions branch from one shared state, reuse can reduce repeated prefill work. Follow the linked repository README for SemIf installation and execution. Once that environment is ready, record three direct runs with the same checkpoint and question set, then compare prefix reuse and parallel suffix one at a time.</p><p>For each path, save the model revision, quantization, input-token count, number of questions, GPU use, and result. Record the first run separately because it may include model loading. If choices differ, review the original state and each option's probability, then compare both paths against human-labeled examples.</p><table><caption>What to compare when testing the same 4B decision task on each system</caption><thead><tr><th scope="col">Hardware</th><th scope="col">Starting model and path</th><th scope="col">Record alongside it</th></tr></thead><tbody><tr><th scope="row">CPU</th><td>Qwen3.5-0.8B-class local baseline</td><td>Request shape, result JSON, single-item time</td></tr><tr><th scope="row">Apple Silicon Mac</th><td>Qwen3.5-4B Q4 · SemIf MLX</td><td>Unified-memory pressure and fresh/shared results</td></tr><tr><th scope="row">RTX 3090 24GB</th><td>Qwen3.5-4B · SemIf CUDA</td><td>VRAM, question latency, and direct/reuse results</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/jev-rtx3090-parallel-scoring.webp" alt="An RTX 3090 processes several question branches and compares their results." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Track VRAM use and parallel-question results together on the RTX 3090.</figcaption></figure><section><h2>Plan input size and memory load separately for OpenJev 27B servers</h2><p>OpenJev 27B is a Qwen3.8-27B-based decision model that also accepts image input. Support in llama.cpp and oMLX varies by checkpoint and project version. First confirm that the model appears as a decision type and that a `/v1/systemone` request works. Its published language list is English, German, French, Hindi, Chinese, and Japanese. Before using it for Korean work, evaluate choices and errors on a sample of Korean inquiries.</p><p>oMLX 0.7.1.dev1 supports Clef, Clef-Flash, and OpenJev decision models. The release says Clef-family models accept text and images, while OpenJev 27B accepts text and one image. These models return probabilities for choices instead of generating a prose response, so a regular chat API may not return the structure you expect.</p><p>If several users share a 27B server, plan for concurrent requests, long inputs, image use, and resident model memory, not just average single-request time. First check requests and results with a Q4 4B workload on an RTX 3090, then estimate the capacity needed for a 27B server from labeled samples and expected workload.</p><ul><li><a href="https://huggingface.co/ggml-org/OpenJev-GGUF">OpenJev GGUF model card</a></li><li><a href="https://huggingface.co/ggml-org/Clef-GGUF">Clef GGUF model card</a></li><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">oMLX decision-model inputs and supported versions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-sglang-server-branches.webp" alt="A server receives multiple states and question branches and returns OpenJev decisions." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Plan a 27B server around concurrent requests and input size, not only single-request latency.</figcaption></figure><section><h2>Consider memory alongside the cost of mistakes</h2><p>On Apple unified memory, reserve space for the operating system and apps. On a GPU, budget not only weights but also KV cache, activations, and concurrency. Weight size alone does not guarantee stable execution.</p><p>Errors can be costly if ticket routing skips an agent or approves a refund incorrectly. Route low-confidence outputs to review and shortlist hardware only when latency and review rates meet your target.</p></section><section><h2>Use labeled examples to set review rules and decide whether to upgrade</h2><p>Collect recurring work inquiries and have a person label the correct answer. Thirty cases can serve as a small initial check. To assess accuracy or impact across the workflow, add more clear and borderline cases, and record each model's choices, probabilities, processing time, and errors using the same criteria. Add examples when new error types appear.</p><p>Set probability thresholds according to the cost of errors in your task. First define when low-probability or close-choice requests should go to a person. OpenJev probabilities use the temperature configuration in the model file. Check the threshold on separate validation samples before automating the evaluated cases.</p><p>For one-at-a-time workflows, measure per-request latency; for batches of inquiries, measure throughput and completion time. If answers are correct but requests queue up, consider GPU headroom or more parallel questions. If answers are often wrong, first improve the state, choices, or language support. Compare upgrades when repeated workloads and input sizes show that more capacity is needed.</p></section><section><h2>Measure p50 and p95 on your own query mix</h2><p>Repeat each device with the same query set and model revision; log p50, p95, peak memory, and errors. Separate model loading, first-request, and warmed-request times so startup delay is not mixed with steady-state latency.</p><p>Increase concurrency gradually before scaling a small-batch configuration to service load. Consider a setup only when quality, latency, and memory limits all fit together.</p></section><section><h2>Make a first API call and inspect the decision result</h2><p>Download an OpenJev or Clef decision checkpoint in oMLX or a supported server and start it. Replace `YOUR_OMLX_API_KEY` in both requests below with the server key. If the server uses no authentication, omit the `Authorization` header from both requests. First query the model list.</p><div><p><strong>Find the server model ID</strong></p><pre><code data-guide-code-block="9-0">curl http://127.0.0.1:8000/v1/models -H 'Authorization: Bearer YOUR_OMLX_API_KEY'</code></pre></div><p>Copy the decision model ID from `data[].id` in the response into `YOUR_DECISION_MODEL_ID`. Then send the choice request asking which team should handle the duplicate charge.</p><div><p><strong>Send a choice question to a decision model</strong></p><pre><code data-guide-code-block="9-1">curl http://127.0.0.1:8000/v1/systemone \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_OMLX_API_KEY' \
  -d '{"model":"YOUR_DECISION_MODEL_ID","state":"Customer message: I was charged twice for my order last week.","questions":{"route":{"type":"choice","instructions":"Which team should handle this?","criteria":{"billing":"The customer reports a duplicate charge or refund issue","shipping":"The customer reports a delivery or tracking issue","technical":"The customer reports a product or account technical issue"}}}}'</code></pre></div><p>If `answers` contains the `route` question, selected choice, and probabilities, the request was processed. Evaluate it against human-labeled examples from the actual workflow. HTTP 501 can indicate an unsupported model type or input format; HTTP 400 can indicate invalid request JSON. For a load error, check the first server-log error and available memory.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">oMLX model types and decision responses</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">System One API request fields and error codes</a></li></ul></section><aside><h2>See the difference between prefill and decode</h2><p>See how shared-state processing and per-question response time differ.</p><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A Jev-style local decision model reads a state such as a support ticket or document and returns probabilities or scores for predefined questions. Small Qwen-based implementations are useful for trying the request flow on a CPU, personal Mac, or RTX system; 27B OpenJev and Clef models require more memory and server capacity. Check results on a small set of real work examples before choosing hardware for your request volume and latency needs.</dd></div><div><dt>How much memory does it need?</dt><dd>On Mac, the oMLX API section below provides the OpenJev/Clef execution path. Use the SemIf MLX experiment here to compare memory capacity and shared-input reuse. The SemIf-OpenJev MLX path supports experiments that score Qwen3.5-4B directly on Apple silicon. The public browser demo's Q4 weight file is about 3 GB. macOS, the runtime, per-question workspace, and caches also use memory, so check Memory Pressure in Activity Monitor and leave headroom for repeated requests after the model loads.</dd></div><div><dt>When is it better not to choose this?</dt><dd>On Apple unified memory, reserve space for the operating system and apps. On a GPU, budget not only weights but also KV cache, activations, and concurrency. Weight size alone does not guarantee stable execution.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Running DeepSeek V4.1 Flash locally: the numbers beyond 552B</title><link>https://localai.co.kr/en/guides/deepseek-v4-1-flash-local-requirements</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-v4-1-flash-local-requirements</guid><description>A buyer-focused guide to DeepSeek V4.1 Flash's 552B backbone, 196B Engram, 475.2 GiB official checkpoint and early local-runtime support.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-12</p><h1 id="guide-page-title">Running DeepSeek V4.1 Flash locally: the numbers beyond 552B</h1><p>Check the full checkpoint and runtime before active parameters</p><p id="guide-page-summary">DeepSeek V4.1 Flash is a large MoE model generating answers from documents and questions. Its official checkpoint is roughly 475.2GiB and includes backbone, Engram tables, and speculative-decoding components. This guide covers reported personal-machine streaming experiments through multi-Spark configurations.</p><p>If you want to review a set of contracts on a Mac, check not only whether the files fit on the SSD but whether the runtime can place all components in memory. Storage, system and GPU placement, and the exact runtime branch come before public scores.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>552B is the backbone figure, with a separate 196B Engram component.</li><li>Beyond space for the ~475.2 GiB checkpoint and ~189 GiB Engram tables, runtime headroom and KV cache are needed.</li><li>Measurements on M3 Ultra, RTX 5090 plus RAM, and multi-Spark systems use different conditions.</li></ol></section><section><h2>Backbone, Engram, and active parameters describe different scales</h2><p>DeepSeek V4.1 Flash has a 40-layer 552B backbone plus 196B Engram. The stated 8B input and 16B generation describe paths activated during token computation. Unselected expert weights still reside in storage and memory, so 16B active does not translate to 16 GB VRAM.</p><p>The official mixed-precision checkpoint combines FP8, FP4, and BF16 components and is about 475.2 GiB. It also contains a vision encoder/projector and speculative-decoding components. Plan separately for SSD storage and memory for the backbone, runtime buffers, and KV cache.</p><p>Engram is learned memory that hashes token n-grams, retrieves rows from FP8 tables, and combines them with the residual stream. Even if one computation reads only selected rows, the complete tables occupy about 189 GiB. This is not temporary prompt cache or ordinary PLE, and a short input does not shrink the resident table to match context length.</p><ul><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash">DeepSeek V4.1 Flash model card</a></li><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/tree/main">Official checkpoint files</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li></ul></section><section><h2>A 1017 update has arrived</h2><p>A 1017 checkpoint for the same slot was released on October 17, 2026. The architecture and file sizes are unchanged, but all 48 shards were rewritten, including Engram and vision files. The 475.25 GiB and runtime conditions in this guide still apply to 1017, but download into a new folder instead of overwriting the files you already have.</p><p>The [1017 update guide](/guides/deepseek-v4-1-flash-1017-update-local-guide) continues with what changed and which runtimes read it.</p><ul><li><a href="https://api-docs.deepseek.com/news/news261017/">DeepSeek 1017 release note</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-1.webp" alt="A large cabinet filled with colored blocks and a few blocks placed separately on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>All weights are stored, but only some participate in each token's computation.</figcaption></figure><section><h2>Budget offloaded memory and remaining space</h2><p>The early SGLang implementation can move Engram tables into host memory. That reduces GPU residency but requires substantial system RAM and transfers across the CPU-GPU interconnect. Backbone weights and context-dependent KV cache remain. Do not assume that a 256 GB unified-memory system has ample space merely because offloading exists; check where every component is placed.</p><p>A third-party Q2_K file of about 246.3 GiB has also been published, but the verified evidence is a short-text smoke test on a limited fork. A smaller file is not evidence of reliable long-document handling.</p></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-2.webp" alt="Two document drawers and a machine holding a black board on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Engram lookup tables also need memory during execution.</figcaption></figure><section><h2>Read published runtime measurements with their hardware and scope</h2><p>Personal-hardware reports range from short tests to multi-Spark servers, with different setups and inputs. A user MLX 2-bit path on M3 Ultra 256 GB reported 8.8 tok/s over 23 decode steps after a 16-token input, with a 128-token context cap. An RTX 5090 setup with 128 GB RAM and PCIe 5 NVMe streamed the original mixed FP4/FP8 weights and reported 5.1 tok/s on a new input. Neither report measured prefill, so time to first read a long contract set is unknown.</p><p>Spark results are not the same test either. A single-Spark CUDA-cmoe run reading Q2_K through CPU mmap reported 1.9 tok/s prefill and 2.8 tok/s decode. A three-Spark distributed-runtime setup with original mixed FP4/FP8 weights reported 37.9 tok/s decode; a four-Spark setup reported 43.12 tok/s decode plus a separate cold-prefill reference. Do not infer time to first token from measurements that omit prefill.</p><table><caption>Published DeepSeek V4.1 Flash runtime cases and scope</caption><thead><tr><th scope="col">Setup</th><th scope="col">Input and runtime conditions</th><th scope="col">Published result</th></tr></thead><tbody><tr><th scope="row">M3 Ultra 256 GB, user MLX 2-bit</th><td>16-token input, 23 decode steps, 128-token context cap</td><td>8.8 tok/s; prefill not measured</td></tr><tr><th scope="row">RTX 5090, RAM 128GB, PCIe 5 NVMe</th><td>Original mixed FP4/FP8 streaming, new input</td><td>5.1 tok/s; prefill not measured</td></tr><tr><th scope="row">1 Spark, CUDA-cmoe, Q2_K CPU mmap</th><td>Single-system test</td><td>prefill 1.9, decode 2.8 tok/s</td></tr><tr><th scope="row">3 Spark systems, original mixed FP4/FP8 distributed</th><td>Distributed runtime</td><td>decode 37.9 tok/s</td></tr><tr><th scope="row">4 Spark systems</th><td>Separate cold-prefill reference</td><td>decode 43.12 tok/s</td></tr></tbody></table><ul><li><a href="https://huggingface.co/TensorFold/DeepSeek-V4.1-Flash-MLX-2bit-MTP">M3 Ultra MLX 2-bit execution record</a></li><li><a href="https://github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks">Three-Spark execution record</a></li><li><a href="https://github.com/tonyd2wild/DeepSeek-V4.1-Flash-vLLM-DGX-Spark">Four-Spark execution record</a></li></ul></section><section><h2>Development runtimes and speculative decoding still have limits</h2><p>The main paths immediately after release were dedicated development images or branches for SGLang and vLLM, targeting multi-GPU servers such as H200, B300, and GB300 systems. Model-page installation commands are starting guidance, not proof that tool calls, images, and long contexts work on every stable release and device. Record the exact development commit and deployment recipe, then test each capability.</p><p>DSpark is speculative decoding: the checkpoint's multi-token prediction component proposes candidates that the main model verifies. Initial SGLang results show the feature working on four B300 GPUs, a specific development branch, and a fixed repeating weather-note input. They are not measurements for other prompts or a single consumer GPU.</p><p>Combination limits also matter. SGLang's encoder SWA bounded replay cannot be used with speculative decoding, and prefill/decode disaggregation with DSpark integration is in progress. An error has been reported for CPU KV offloading with DSpark enabled in vLLM. Choose hardware only after the required offloading, context, and image input work together in one configuration.</p></section><figure><img src="https://localai.co.kr/guides/deepseek-v41-3.webp" alt="A small computer connected by cables to four servers, with a checklist and caliper in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Storing the files is different from serving real requests comfortably.</figcaption></figure><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-12">2026-09-12</time><p><strong>Single-Spark execution paths for new models</strong></p><p>The speed experience now uses published single-Spark measurements for DeepSeek and Ling. The same speeds and commands are not applied to unverified hardware.</p></li></ol></details><aside><h2>Compare DeepSeek V4.1 Flash speed</h2><p>Compare the short MLX 2-bit test on M3 Ultra 256 GB with published results for other hardware.</p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m3-ultra-256gb&amp;model=deepseek-v4-1-flash&amp;quant=MLX_2BIT&amp;context=128&amp;accel=none">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepSeek V4.1 Flash is a large MoE model generating answers from documents and questions. Its official checkpoint is roughly 475.2GiB and includes backbone, Engram tables, and speculative-decoding components. This guide covers reported personal-machine streaming experiments through multi-Spark configurations.</dd></div><div><dt>How much memory does it need?</dt><dd>DeepSeek V4.1 Flash has a 40-layer 552B backbone plus 196B Engram. The stated 8B input and 16B generation describe paths activated during token computation. Unselected expert weights still reside in storage and memory, so 16B active does not translate to 16 GB VRAM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Running Ling-3.0-flash-VL locally: what the 70.87 GiB INT4 build means</title><link>https://localai.co.kr/en/guides/ling-3-0-flash-vl-local-requirements</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ling-3-0-flash-vl-local-requirements</guid><description>A practical guide to Ling-3.0-flash-VL's 124.85B total and 5.1B active structure, 256K context, multimodal scope, official INT4 and FP4 files, and early server-runtime requirements.</description><content:encoded><![CDATA[<header><p>new model · 2026-09-12</p><h1 id="guide-page-title">Running Ling-3.0-flash-VL locally: what the 70.87 GiB INT4 build means</h1><p>Read images and video frames with Ling-3.0-flash-VL</p><p id="guide-page-summary">Ling-3.0-flash-VL is an approximately 124.85B MoE model that reads images and video frames and answers in text. SGLang's 5.1B figure is the amount activated per token, not total weight size. Read the official BF16, INT4, and FP4 files and Spark measurements in their respective conditions.</p><p>To find a logo in a product video or ask about a box's color and position, provide relevant frames and receive a text answer. Start with a short test using only the frames needed for the question. This is different from automatically processing an entire video or generating a new one.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>124.85B is the total parameter count; 5.1B is activated per token.</li><li>Official weight sizes are 232.55 GiB for BF16, 70.87 GiB for INT4, and 64.81 GiB for FP4.</li><li>DGX Spark results cover single-request INT4 and MXFP4; MXFP4 is not the same format as NVFP4.</li></ol></section><section><h2>Total 124.85B and active 5.1B describe different scales</h2><p>Total parameters are 124.85B; SGLang's 5.1B refers to the portion active per token. MoE selects experts for computation but needs access to all expert weights. Budget storage and runtime memory using the full distribution.</p><p>The SGLang configuration defaults to 128K context; 256K uses a YaRN extension. Long documents, video frames, questions, runtime buffers, and KV cache share memory. The context limit is a supported range, not a promise that every request processes the same volume, so start with the frame count and text length you actually need.</p><ul><li><a href="https://huggingface.co/inclusionAI/Ling-3.0-flash-VL">Ling-3.0-flash-VL model card</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ling-vl-1.webp" alt="A monitor shows a person riding a bicycle beside three sequential images from the same scene." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Supply relevant frames and ask about objects and actions.</figcaption></figure><section><h2>Choose quantized files and a compatible runtime together</h2><p>Official weight files are about 232.55 GiB in BF16, 70.87 GiB in INT4, and 64.81 GiB in FP4. These are download and storage sizes; runtime headroom and input-processing memory are additional. If converting a file, allow space for both the source and converted copy.</p><p>Official FP4 does not mean NVIDIA NVFP4 or GGUF, and INT4 is not compatible with every 4-bit loader. Scaling methods and kernels may differ, so confirm that the runtime supports the checkpoint format and model architecture. If a file fails to open, check format and kernel support before concluding memory is insufficient.</p><ul><li><a href="https://huggingface.co/inclusionAI/Ling-3.0-flash-VL/tree/main">Official Ling BF16 files</a></li><li><a href="https://huggingface.co/inclusionAI/Ling-3.0-flash-VL-int4/tree/main">Official Ling INT4 files</a></li><li><a href="https://huggingface.co/inclusionAI/Ling-3.0-flash-VL-fp4/tree/main">Official Ling FP4 files</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ling-vl-2.webp" alt="Three open boxes of different sizes hold books, documents, and colored blocks separately." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>File size and runtime path differ by quantization format.</figcaption></figure><section><h2>Video input depends on frame selection and verification</h2><p>Ling-3.0-flash-VL answers in text after viewing images or video frames; it does not generate video. To ask when a logo appears in a product video, start with a few key frames and a specific question. Setting a 256K context does not automatically submit the full video; frame count, resolution, and description text all use memory.</p><p>Open the original frame at the time cited in the answer and verify that the object or action is visible. Distinguish whether the model read a product name in subtitles or actually saw the logo. If you extract frames separately, record their original timestamps in filenames or inputs so another reviewer can find the same scene.</p></section><figure><img src="https://localai.co.kr/guides/ling-vl-3.webp" alt="A sequence of landscape images sits in front of a computer with two graphics cards visible." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even after weights load, memory must remain for input processing and KV cache.</figcaption></figure><section><h2>Compare DGX Spark speed within its specified text conditions</h2><p>The official SGLang guide compares INT4 and MXFP4 on one DGX Spark. The test used an 8,192-token input, 1,024 output tokens, and one concurrent request. Median inter-token latency was 44.18 ms for INT4 and 30.18 ms for MXFP4.</p><p>Generation speed was about 22.6 tok/s and 33.1 tok/s, respectively. MXFP4 is a different format from NVFP4, so the two names do not refer to the same setting.</p><p>Median time to first token was about 2.89 seconds for INT4 and 2.54 seconds for MXFP4. That wait includes input prefill, while later token intervals describe decode speed. The test used text input and excludes image preprocessing; it cannot be generalized to other GPUs or Macs. A one-request measurement also cannot establish capacity for multiple team members.</p><p>Test video tasks separately with short clips whose answers you know. If the model says the logo is on the right side of the box around 00:12, compare that with the original frame and check whether it read a subtitle or saw the logo itself. Keep runtime format, prompt, output budget, and input-token count constant, and record time to first token separately from generation.</p><table><caption>Official SGLang text measurements on one DGX Spark</caption><thead><tr><th scope="col">Format</th><th scope="col">Median inter-token latency</th><th scope="col">Converted generation speed</th><th scope="col">Median time to first token</th></tr></thead><tbody><tr><th scope="row">INT4</th><td>44.18ms</td><td>about 22.6 tok/s</td><td>about 2.89 s</td></tr><tr><th scope="row">MXFP4</th><td>30.18ms</td><td>about 33.1 tok/s</td><td>about 2.54 s</td></tr></tbody></table><ul><li><a href="https://docs.sglang.io/cookbook/autoregressive/InclusionAI/Ling-3.0-flash-VL">SGLang Ling execution and measurement conditions</a></li></ul></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-12">2026-09-12</time><p><strong>Single-Spark execution paths for new models</strong></p><p>The speed experience now uses published single-Spark measurements for DeepSeek and Ling. The same speeds and commands are not applied to unverified hardware.</p></li></ol></details><aside><h2>View Ling-3.0-flash-VL model details</h2><p>Check model specifications and supported runtime formats.</p><a href="https://localai.co.kr/en/models/ling-3-0-flash-vl">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Ling-3.0-flash-VL is an approximately 124.85B MoE model that reads images and video frames and answers in text. SGLang's 5.1B figure is the amount activated per token, not total weight size. Read the official BF16, INT4, and FP4 files and Spark measurements in their respective conditions.</dd></div><div><dt>How much memory does it need?</dt><dd>Total parameters are 124.85B; SGLang's 5.1B refers to the portion active per token. MoE selects experts for computation but needs access to all expert weights. Budget storage and runtime memory using the full distribution.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A safe local starting point for MiniCPM5-2B Q4_K_M</title><link>https://localai.co.kr/en/guides/minicpm5-2b-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/minicpm5-2b-serving-recipe</guid><description>Download the official GGUF, start a local server with a 4,096-token context, and keep the MLX and DSpark paths distinct.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">A safe local starting point for MiniCPM5-2B Q4_K_M</h1><p>Summarize meeting notes locally with MiniCPM5-2B</p><p id="guide-page-summary">MiniCPM5-2B is a language model that takes text and returns summaries or details such as owners and dates. Download the official GGUF Q4_K_M file and run a llama.cpp server with a 4,096-token context on a local address, then check whether the meeting-note summary matches the source.</p><p>Given a three-page meeting note, the model reads it and generates a summary and possible action items. Comparing whether decisions are preserved and owners and due dates actually appear in the source gives you a small baseline task.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check the official filename and actual storage path.</li><li>Start the first test with a 4,096-token context and a local-only address.</li><li>MLX and DSpark are separate runtime paths, not options for the GGUF server.</li></ol></section><section><h2>Download just one official GGUF file</h2><p>MiniCPM5-2B is a dense model with 2.51675648B parameters. Official distributions include GGUF, 4-bit MLX for Apple Silicon, and GPTQ; this starting path pairs MiniCPM5-2B-Q4_K_M.gguf with llama.cpp's llama-server. Keeping format and runtime fixed makes issues easier to diagnose.</p><p>Downloading only Q4_K_M instead of the whole repository avoids storing duplicate F16 and Q8 variants. After the download, match the file path and name to the server command below. Confirm model loading and request readiness in startup logs, then send a question.</p><div><p><strong>Download the official GGUF file</strong></p><pre><code data-guide-code-block="0-0">hf download openbmb/MiniCPM5-2B-GGUF MiniCPM5-2B-Q4_K_M.gguf --local-dir ./models/minicpm5-2b</code></pre></div><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li></ul></section><figure><img src="https://localai.co.kr/guides/minicpm5-1.webp" alt="A monitor beside a small computer shows a structure made of green blocks." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start by processing a real note with a small model.</figcaption></figure><section><h2>Start a local server with a 4,096-token context</h2><p>In current llama.cpp, set the model path and use -c 4096 as the initial context size. This runtime setting is shared by input and output; it differs from the model's native context limit of 131,072 tokens. Increase it for real document lengths after a short note works reliably.</p><p>--host 127.0.0.1 restricts access to the same computer. Once the server is listening, open http://127.0.0.1:8080 in that computer's browser. The -ngl 99 option requests GPU loading, so use a CUDA or Metal build and check the backend and number of GPU-placed layers in the logs.</p><div><p><strong>Start a local-only server</strong></p><pre><code data-guide-code-block="1-0">llama-server -m ./models/minicpm5-2b/MiniCPM5-2B-Q4_K_M.gguf -ngl 99 -c 4096 --host 127.0.0.1 --port 8080</code></pre></div></section><figure><img src="https://localai.co.kr/guides/minicpm5-2.webp" alt="A notebook and colored blocks sit between a desktop and laptop." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose a file format supported by the runtime.</figcaption></figure><section><h2>Check startup wait and summary accuracy separately</h2><p>The first run reads model files and loads them into memory, so measure server startup separately from response time. After one warm-up request, submit the meeting note and distinguish initial setup, first request, and follow-ups on a ready server. Record whether you are measuring cache effects in one session or starting a new process for each request.</p><p>For speed, fix the question, input length, output budget, and backend, run the same request three times, and record the median. Separate prefill, which reads input, from decode, which generates the answer. Separately verify that the answer adds no unsupported decisions and that owners and due dates appear in the note.</p></section><figure><img src="https://localai.co.kr/guides/minicpm5-3.webp" alt="Four green blocks and assorted colored blocks sit on a stand and tray." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check response speed and source accuracy separately.</figcaption></figure><section><h2>MLX and DSpark use dedicated runtime paths</h2><p>On Apple Silicon, you can choose the openbmb/MiniCPM5-2B-MLX 4-bit distribution, but it is not a GGUF file and should not be passed to llama-server. Use its model ID in an MLX-compatible runtime. For comparison, keep the note, question, context length, and backend recorded; different formats and kernels make one path's speed inapplicable to another.</p><p>DSpark is a separate distribution requiring a dedicated MiniCPM5-2B-DSpark checkpoint and compatible SGLang path. Establish a baseline with the GGUF server first, then test the checkpoint, engine version, and command together. Do not apply acceleration multipliers without verified hardware-specific figures.</p></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>148.3 ~ 164.8 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>579.9 ~ 644.3 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>579.9 ~ 644.3 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>507.4 ~ 561.5 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Memory fits</td><td>llama.cpp (multi-GPU)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>615.1 ~ 854.3 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>938.1 ~ 1034.3 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>131.9 ~ 146.6 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Memory fits</td><td>llama.cpp (ROCm/HIP)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>120.3 ~ 134 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-12">2026-09-12</time><p><strong>MiniCPM5 setup recipe added</strong></p><p>The guide distinguishes official GGUF launch commands from the MLX release. DSpark speedups are not applied until device-specific measurements are verified.</p></li></ol></details><aside><h2>View MiniCPM5-2B model information</h2><p>Review model specifications and runtime formats.</p><a href="https://localai.co.kr/en/models/minicpm5-2b">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MiniCPM5-2B is a language model that takes text and returns summaries or details such as owners and dates. Download the official GGUF Q4_K_M file and run a llama.cpp server with a 4,096-token context on a local address, then check whether the meeting-note summary matches the source.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini 24GB or 32GB: is more memory worth it for local AI?</title><link>https://localai.co.kr/en/guides/mac-mini-24gb-vs-32gb-local-ai</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mac-mini-24gb-vs-32gb-local-ai</guid><description>A buying guide to Mac mini memory that weighs document length, the apps you keep open and replacement costs—not model size alone.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">Mac mini 24GB or 32GB: is more memory worth it for local AI?</h1><p>Choose 24 GB or 32 GB for working headroom, not speed alone</p><p id="guide-page-summary">A Mac mini's unified memory is shared by model weights, KV cache, working space, the operating system, and open apps. If 24 GB handles short chats and editing selected passages, more memory is not essential. Choose 32 GB when memory pressure interrupts work with long documents and several apps, and the larger configuration resolves that issue.</p><p>Suppose you revise selected passages in a proposal PDF while keeping a browser and editor open. Asking a local model for help is only part of the workflow; the other apps also use memory. A demo that handles one short question does not show whether 24 GB fits your normal work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Decide with your usual apps open.</li><li>Check short chats and long-document work separately.</li><li>More memory does not automatically increase token generation speed.</li></ol></section><section><h2>The model and your usual apps share memory</h2><p>A Mac's unified memory holds more than model weights: it also needs KV cache for conversation context and temporary space for computation. The operating system, browser, and document editor use the same memory, so the model download's file size alone does not tell you how much remains.</p><p>Suppose the weights use 12GB, cache and workspace 3GB, and the system and apps 6GB. The total is 21GB. Under this illustrative assumption, 24GB leaves 3GB arithmetically and 32GB leaves 11GB. That margin is available for longer documents and follow-up questions. Check actual needs with your model, usual apps and inputs.</p><table><caption>Memory margin assuming 21GB in use</caption><thead><tr><th scope="col">Setup</th><th scope="col">Assumed use</th><th scope="col">Arithmetic margin</th></tr></thead><tbody><tr><th scope="row">24GB</th><td>21GB</td><td>3GB</td></tr><tr><th scope="row">32GB</th><td>21GB</td><td>11GB</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/orca-connect-local-gpu-guide">Orca Connect: attach your own GPU to Claude Code</a></li><li><a href="https://localai.co.kr/en/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai">Mac mini M6 vs M4: which 24GB or 32GB setup should you buy for local AI?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-1.webp" alt="Two open cabinets with colored blocks and documents filled to different heights." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model and your usual open apps also share unified memory.</figcaption></figure><section><h2>Some workflows fit comfortably in 24 GB</h2><p>If you send selected proposal passages to the model, revise the wording, and can browse and edit while waiting, you may have no memory problem to solve on 24 GB. Check that this workflow completes with short inputs and your usual apps open.</p><p>If a summary gets amounts or conditions wrong, inspect the text sent to the model first. Check whether PDF tables were extracted and relevant exceptions were included. If the same mistakes persist with correct input, try a larger model or higher precision, then calculate memory for that candidate.</p><p>The parameter count in “8B model” alone cannot determine whether 24 GB is enough. Quantization file, runtime, and context length also affect memory. If selected-passage editing works and you do not plan to process entire long documents, 24 GB may be a suitable choice.</p></section><section><h2>32 GB adds headroom for long inputs and several apps</h2><p>Comparing requirements near the beginning of a proposal with estimates later in the document, then asking follow-up questions, can increase both input size and conversation state. If the model runs alone but you need to close other apps after adding the document, check whether the same task and app mix works smoothly in 32 GB; that is the practical value of the extra memory.</p><p>The goal is not the number 8 GB itself but headroom that may reduce closing and reopening the browser or unloading and reloading a model. If you alternate between two models, check whether they need to remain resident together, and include each model's KV cache and runtime space as well as weights. A 32 GB option alone does not guarantee both models can run simultaneously.</p><p>If the workload exceeds the usable capacity of 32 GB, the mid-tier option may leave the same constraint. First check whether a smaller quantized file produces adequate answers or whether you can provide only the needed passages. If memory is sufficient but answer generation is slow, adding memory to the same chip does not increase compute performance or bandwidth in the same proportion.</p></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-2.webp" alt="Colored paths extend from a block box beside a compact computer to picture and waveform cards." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Test whether 32 GB of headroom helps with long inputs and several open apps.</figcaption></figure><section><h2>Check memory use alongside memory pressure</h2><p>On your current Mac, record memory with your usual apps open, after loading the model, and while generating an answer from the proposal. Keep the document length and model filename too, so you can compare with other settings.</p><p>In Activity Monitor’s Memory tab, examine memory pressure, swap and app responsiveness together. If higher pressure repeatedly coincides with stalled window switching or model reloads, headroom is insufficient. If apps and answers remain smooth despite a high usage graph, continue the current work. Record document length and concurrent apps to compare purchase candidates.</p><p>If an error occurs as the model starts, check the runtime's allocation request and context limit. A particular allocation can fail even when some physical memory appears free, so read the error message separately from the usage graph and change one setting at a time.</p></section><section><h2>Separate today's option cost from possible future costs</h2><p>The added price to choose 32 GB today rather than 24 GB differs from the cost of replacing the whole computer later if memory proves insufficient. Future resale proceeds are uncertain, so calculate the amount you pay now separately from possible recovery later.</p><p>If editing proposal passages and searching for references work well on the current configuration, choosing 24 GB leaves budget for other needs. If long inputs force you to close apps and evidence shows the same task runs smoothly in 32 GB, the added memory pays to reduce recurring friction. If the model is too demanding for either configuration, 32 GB alone does not resolve the decision.</p><p>Before checkout, confirm the chip, unified memory, and SSD capacity match the configuration you compared. Do not mistake a larger SSD for more memory or count a different chip's price premium as a memory cost. Choose for the work you do now—reading, editing, and saving proposals—rather than vague future-proofing.</p><table><caption>Decide whether another 8GB solves your problem</caption><thead><tr><th scope="col">Usual work</th><th scope="col">Start with</th></tr></thead><tbody><tr><th scope="row">Model, documents and apps run smoothly in 24GB</th><td>Keep 24GB and retain the extra budget</td></tr><tr><th scope="row">You must close apps for every long document</th><td>Check whether the same work runs smoothly in 32GB</td></tr><tr><th scope="row">Memory remains but generation is slow</th><td>Compare runtimes, acceleration and chip performance</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-3.webp" alt="Blocks labeled 24GB and 32GB beside a compact computer and a notebook with plug and clock drawings." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Calculate today's added price separately from a possible future replacement cost.</figcaption></figure><aside><h2>Compare the two Mac mini configurations</h2><p>Compare memory headroom and estimated speed with the same model.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-24gb&amp;right=mac-mini-m4-32gb&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A Mac mini's unified memory is shared by model weights, KV cache, working space, the operating system, and open apps. If 24 GB handles short chats and editing selected passages, more memory is not essential. Choose 32 GB when memory pressure interrupts work with long documents and several apps, and the larger configuration resolves that issue.</dd></div><div><dt>How much memory does it need?</dt><dd>A Mac's unified memory holds more than model weights: it also needs KV cache for conversation context and temporary space for computation. The operating system, browser, and document editor use the same memory, so the model download's file size alone does not tell you how much remains.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</title><link>https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai</guid><description>Reduce memory shortages and waiting when running Qwen3.8-27B on an RTX 3090. Compare the cost and response speed of keeping, adding, or replacing a GPU.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</h1><p>I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</p><p id="guide-page-summary">If you already have an RTX 3090, first summarize a typical document with a Q4 model and measure how long the answer takes. Keep using it if the model fits on the GPU and handles your work. Compare adding a GPU with replacing it with a 5090 only when you need a larger model or the wait disrupts your work.</p><p>You can wait to consider an upgrade until something is genuinely inconvenient. If the full document will not fit, adding a GPU can increase capacity. If waiting for answers keeps interrupting your work, a faster card may be worth it. If you can process the documents you need and the wait is acceptable, you do not need to spend money now.</p><p>When summarizing documents with Qwen3.8-27B, should you keep, add to, or replace your GPU? Let's compare the time to finish a 500-token answer with the prices currently listed for sale.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>First, check whether the GPU is actually being used.</li><li>Separate the wait for long-input processing from the time it takes to generate an answer.</li><li>Compare total costs by separating required parts from uncertain resale proceeds.</li></ol></section><section><h2>Start with Q4 on an RTX 3090</h2><p>When downloading Qwen3.8-27B, start with the smaller Q4 file, which uses quantization to reduce its size. It is about 3.3GB smaller than Q5, leaving more room to process documents and continue the conversation.</p><table><caption>Qwen3.8-27B file sizes by quantization</caption><thead><tr><th scope="col">Model file</th><th scope="col">File size</th><th scope="col">When to choose it on an RTX 3090</th></tr></thead><tbody><tr><th scope="row">UD-Q4_K_M</th><td>About 16.5GB</td><td>Choose for the first run</td></tr><tr><th scope="row">UD-Q5_K_M</th><td>About 19.8GB</td><td>When comparing answer quality with Q4</td></tr><tr><th scope="row">Q8_0</th><td>About 29GB</td><td>When adding GPU capacity or splitting the model across GPUs</td></tr></tbody></table><p>Qwen3.8-27B file list · Unsloth</p><p>Within the 24GB, the runtime and KV cache use the space not occupied by the model file. The KV cache grows as documents get longer and conversation history accumulates. If Q4 summarizes short documents well but stops on long ones, check whether the runtime and KV cache have enough room.</p><p>Before switching to Q5, ask the same question about the same document. Compare whether the summary omits important points, whether dates and numbers are correct, and whether follow-up answers are grounded in the source. If Q4 already gives you what you need, there is no need to switch to a larger file.</p><p>The Q8 file alone is about 29GB, which exceeds the VRAM on a single RTX 3090. To run Q8 fully loaded on the GPU, you would need to add another GPU or replace the card with one that has more VRAM.</p><ul><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090-3090ti/">RTX 3090 specifications</a></li><li><a href="https://huggingface.co/unsloth/Qwen3.8-27B-GGUF/tree/main">Qwen3.8-27B file list · Unsloth</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide">GPU power limits for local AI: RTX 3090, 4090, 5090 and DGX Spark</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-1.webp" alt="A scene showing an RTX 3090 computer beside a monitor with a branching diagram made of connected colored blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If Q4 can summarize the documents you need and answer follow-up questions, you can keep using the 3090.</figcaption></figure><section><h2>If it feels slow, first check whether the model is loaded on the GPU</h2><p>After sending a prompt in Ollama, open another terminal and enter the command below.</p><table><caption>Ollama PROCESSOR status and GPU usage</caption><thead><tr><th scope="col">PROCESSOR indicator</th><th scope="col">Runtime state</th><th scope="col">What to do first</th></tr></thead><tbody><tr><th scope="row">100% GPU</th><td>The entire model is loaded on the GPU</td><td>Record the time to the first response and to completion</td></tr><tr><th scope="row">CPU/GPU split</th><td>Execution is split between the CPU and GPU</td><td>Close unused models and apps, then run it again</td></tr><tr><th scope="row">100% CPU</th><td>Running on the CPU</td><td>Check GPU detection and available VRAM</td></tr></tbody></table><p>Check Ollama's runtime status</p><p>If part of the model is in system RAM, the CPU also performs computation and exchanges data with the GPU. Close models or apps you are not using; if more of the model then fits on the GPU and answers get faster, you have reduced the wait without buying a new card.</p><p>If it stops only on long documents, check the context-length setting too. If it is set far above the length needed for the document, try reducing it. Keep enough room for the document and follow-up questions. Consider adding or replacing a GPU only if the required document still will not fit after adjusting the setting.</p><div><pre><code data-guide-code-block="1-0">ollama ps</code></pre></div><ul><li><a href="https://docs.ollama.com/faq#how-can-i-tell-if-my-model-was-loaded-onto-the-gpu">Check Ollama's runtime status</a></li></ul></section><section><h2>How long will you wait for the same 500-token answer?</h2><p>For Qwen3.8-27B Q4_K_M on an RTX 3090, the site's calculator estimates a generation rate of 42.3~46.9 tok/s. Generating 500 tokens takes about 11~12 seconds, with document processing time on top.</p><p>Matching input and output lengths makes it easier to compare how much waiting an upgrade could save. The example below processes a 4,096-token input and then generates a 500-token answer. The model is already loaded, requests are sent one at a time, and cached prompt computation is not reused.</p><table><caption>Completion time for a 500-token response by hardware</caption><thead><tr><th scope="col">Hardware and runtime configuration</th><th scope="col">Time to first response</th><th scope="col">Time to answer completion</th></tr></thead><tbody><tr><th scope="row">RTX 3090 · llama.cpp CUDA · Q4_K_M</th><td>About 4.3~7.5 seconds</td><td>About 15.0~19.3 seconds</td></tr><tr><th scope="row">RTX 5090 · vLLM 0.28.0 · NVFP4 · MTP-2</th><td>About 0.26~0.38 seconds</td><td>About 2.6~3.8 seconds</td></tr></tbody></table><p>Calculator estimate · 4,096 input tokens / 500 output tokens · completion time = input-processing time + generation time for the remaining 499 tokens. RTX 3090 settings · RTX 5090 settings</p><p>Using representative speeds, the estimates are about 17 seconds and 3 seconds. If you wait for an answer to finish before sending the next question 30 times a day, that is about 14 seconds saved each time—or roughly 7 minutes per day. It may feel minor if you leave a summary running while doing other work, but noticeable if you edit a document as soon as each answer arrives.</p><p>If the first character appears slowly after a long document is submitted, compare prompt-processing (prefill) speed. If the answer starts quickly but the text streams slowly, compare decode speed, which produces the answer tokens. To finish document summaries and follow-up questions faster, compare both the wait to the first response and the time until the full answer is complete. Prefill and decode</p><ul><li><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-3090-24gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;accel=none&amp;context=4096&amp;prefill_accel=none">RTX 3090 settings</a></li><li><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;quant=NVFP4&amp;accel=mtp&amp;context=4096&amp;prefill_accel=none">RTX 5090 settings</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill and decode</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-2.webp" alt="Colored blocks sit on a conveyor in front of an RTX 3090 computer, with blocks and picture cards sorted on a nearby shelf" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Count how many times a day you wait for the next answer. The same speed difference can justify an upgrade differently depending on how often you use it.</figcaption></figure><section><h2>The fast RTX 5090 setup also requires changing the runtime</h2><p>When upgrading to an RTX 5090, consider the work of moving to a different runtime along with the card price. The fast configuration used above runs an NVFP4 model with MTP-2 in vLLM. You will need model files compatible with vLLM's NVFP4 and MTP setup instead of the GGUF file you currently use with Ollama.</p><p>Published RTX 5090 run</p><table><caption>RTX 5090 response times by input length</caption><thead><tr><th scope="col">Input tokens</th><th scope="col">Time to first response</th><th scope="col">Time to answer completion</th></tr></thead><tbody><tr><th scope="row">8,255 tokens</th><td>0.63 seconds</td><td>2.02 seconds</td></tr><tr><th scope="row">32,831 tokens</th><td>3.63 seconds</td><td>5.09 seconds</td></tr></tbody></table><p>Published measurements · 2026-09-05 · 256-token output budget · vLLM 0.28.0 / NVFP4 / FP8 KV cache / MTP-2 / driver 610.43.02 · GPU-only execution · 1 concurrent request · prompt cache disabled · median of 3 runs per condition. Benchmark and runtime configuration</p><p>With roughly 8,000 tokens, the answer finished in about 2 seconds; with roughly 30,000 tokens, it took about 3.6 seconds just to begin the first response. If you often process long documents, check whether the wait also decreases at the lengths you use.</p><p>The RTX 5090 has 32GB of VRAM, 8GB more than the 3090. Rather than choosing Q8 based only on file size, check whether enough room remains for documents and conversation after loading the model. If you want the fast NVFP4·MTP configuration, first read the published installation steps and list what you need to prepare for your operating system. RTX 5090 specifications · Compare both GPUs with different input lengths</p><ul><li><a href="https://github.com/devbauerflorian/qwen3.8-27b-rtx5090/blob/main/README.md#mtp-override-dedicated-card">Benchmark and runtime configuration</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/">RTX 5090 specifications</a></li><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-3090-24gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Compare the two GPUs at different input lengths</a></li></ul></section><section><h2>If capacity is the only limitation, you could add another GPU</h2><p>If you keep the existing 3090 and add another NVIDIA GPU, llama.cpp can distribute the model across both cards. Adding a 16GB GPU gives you 40GB of physical VRAM in total; adding a 24GB GPU gives you 48GB. That creates an option for splitting the roughly 29GB Q8 file across the cards.</p><p>When splitting a model, leave room on each card for the runtime and KV cache. Use llama.cpp's --split-mode layer and --tensor-split to distribute the model according to each card's available memory. The connection and split ratio also affect answer speed. llama.cpp GPU-splitting settings</p><p>Before adding a GPU, check the slots, cooling, and power supply.</p><p>1. Check that the motherboard has an available PCIe slot and how many lanes the second slot uses.</p><p>2. Check that both cards fit in the case without blocking each other's fans.</p><p>3. Check that the power supply has enough capacity and the connectors needed to power both cards and the CPU.</p><p>Adding a GPU can help when the model file is too large to run. By contrast, if Q4 already fits entirely on the GPU and you want faster answers, compare a faster single GPU first. Before buying an additional GPU, also check whether your app can be configured to use both cards together.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama.cpp GPU-splitting settings</a></li></ul></section><section><h2>Adding a GPU and replacing the card with a 5090 have very different costs</h2><p>Let's compare scenarios that reuse the existing RTX 3090 PC and assume $0 for additional parts and installation. GPU purchase costs use the lowest listed price among verified new products; shipping and personal discounts are excluded. Prices for both options were checked on 2026-10-12.</p><table><caption>Component costs for adding or replacing a GPU</caption><thead><tr><th scope="col">Option</th><th scope="col">Total physical VRAM</th><th scope="col">GPU purchase cost</th></tr></thead><tbody><tr><th scope="row">Keep current setup</th><td>24GB</td><td>KRW 0</td></tr><tr><th scope="row">Add a GPU</th><td>24GB + 16GB = 40GB</td><td>₩994,240</td></tr><tr><th scope="row">Replace the GPU</th><td>32GB</td><td>₩8,989,320</td></tr></tbody></table><p>“Add” means adding one 16GB RTX 5060 Ti; “replace” means switching to a 32GB RTX 5090.</p><p>Looking only at the card purchase prices, the difference between the two options is ₩7,995,080. If your goal is to run a model split across 40GB, adding a GPU is worth considering. If you want faster answers from your current model, look at the wait-time difference discussed earlier rather than VRAM capacity.</p><p>For the final estimate, add the new GPU price plus the cost of parts and installation you actually need to change. If you sell the 3090 as part of a replacement, subtract the amount you actually receive after the sale is complete. For an added GPU, include any parts needed for slots and cooling; for a replacement, include only parts that must change to fit the new card and meet its power requirements.</p><p>Check the power supply too. Rated GPU power is 350W for the RTX 3090, 180W for the 5060 Ti, and 575W for the 5090 Founders Edition. The rated total for a 3090 plus a 5060 Ti is 530W; two 3090s total 700W. When choosing a PSU, account for the CPU and other components as well, and check the power requirements of the specific card you plan to buy. RTX 3090 specifications · RTX 5060 Ti specifications · RTX 5090 specifications</p><p>If electricity use and fan noise are a concern, you can also try a power limit. This setting lowers the maximum power the GPU can draw. In a published comparison running Qwen3.8 27B on an RTX 3090, lowering the limit from 350W to 300W retained about 95% of generation speed while measured GPU power fell by about 14%. The power-by-power results, model, and runtime settings are in the power-limit guide.</p><p>A power limit can reduce heat and power draw while leaving the card's VRAM available. Compare how much slower answers become and choose a limit that works for you. Size the PSU and cables for the card's rated power requirements, since a reboot or cleared setting can restore the default power limit.</p><p>If you plan to run the system for long periods, estimate electricity and cooling costs as well as the purchase price. Enter the actual power draw after applying the limit and daily hours of use to compare the operating costs of keeping, adding, or replacing a GPU. How to apply and restore the setting</p><ul><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090-3090ti/">RTX 3090 specifications</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5060-family/">RTX 5060 Ti specifications</a></li><li><a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/">RTX 5090 specifications</a></li><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide#guide-section-2">Power-limit guide</a></li><li><a href="https://localai.co.kr/en?tab=electricity">Electricity and cooling costs</a></li><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide">How to apply and restore the setting</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-3.webp" alt="An RTX 3090 computer beside two notebooks with diagrams and a green check mark" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Add only the parts you actually need to the GPU price. Separate estimates for adding a second card and replacing the existing card make costs easier to compare.</figcaption></figure><section><h2>Before buying, run your own workload three times</h2><p>First, use a document and prompt you normally work with. Load the model once, run the same task three times, and record the wait to the first response, time to completion, and actual output-token count. Sort the three results and compare the middle value.</p><p>Also judge whether the summary captures the document and whether the answer helps with your work. When comparing Q4 and Q5, use the same document and record input length, output length, and whether prompt caching is used. Record initial model-loading time separately from the wait for each prompt.</p><p>To save runtime measurements to a file, you can use the site's local measurement tool. It requires Node.js 20 or later and an OpenAI-compatible server running the model. If you use LM Studio or a similar app, start its local server and note the displayed address and model name.</p><p>1. Save the measurement tool and metadata file in the same folder.</p><p>2. Replace the null values in the metadata file with your hardware, model, and runtime details. Set outputTokens to 500 and enter the context length configured on the server.</p><p>3. Validate the metadata file with the first command, then run the measurement. Replace 1234 and SERVED_MODEL in the example with the port and model name shown by your server.</p><p>The tool runs a fixed sample once as a warm-up, then measures three runs. It saves runtime conditions, actual input/output token counts, and timings to measurement.json. Requests go only to the server on your computer; results are not automatically submitted to the site. Use it to record baseline response speed, separately from tests with your own documents.</p><div><pre><code data-guide-code-block="6-0">node collect-serving-benchmark.mjs --metadata serving-benchmark-metadata.json --check-metadata
node collect-serving-benchmark.mjs --url http://127.0.0.1:1234/v1 --model SERVED_MODEL --metadata serving-benchmark-metadata.json --output measurement.json --consent</code></pre></div><ul><li><a href="https://localai.co.kr/tools/collect-serving-benchmark.mjs">Measurement tool</a></li><li><a href="https://localai.co.kr/tools/serving-benchmark-metadata.json">Metadata file</a></li></ul></section><section><h2>What do you need more: capacity or less waiting?</h2><p>If Q4 can summarize the documents you need and handle follow-up questions, keep the RTX 3090. If waiting for the next answer is not disruptive, you do not need to spend money on an upgrade.</p><p>If you must run Q8 or a larger model and VRAM is the limitation, start by pricing an additional GPU. First check the slots, power, and cooling in your existing PC, and confirm that your runtime can split execution across two GPUs.</p><p>If your desired model already runs well but waiting for answers repeatedly interrupts your work, a faster GPU may be worth considering. Compare the wait-time reduction for documents of your usual length with a real quote. Whether the new card solves the problem you have matters more than its product tier.</p></section><aside><h2>Compare your RTX 3090 with an upgrade candidate</h2><p>See the estimated difference after an upgrade, including input processing.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-3090-24gb&amp;right=nvidia-rtx-5090-32gb&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>If you already have an RTX 3090, first summarize a typical document with a Q4 model and measure how long the answer takes. Keep using it if the model fits on the GPU and handles your work. Compare adding a GPU with replacing it with a 5090 only when you need a larger model or the wait disrupts your work.</dd></div><div><dt>How much memory does it need?</dt><dd>The Q8 file alone is about 29GB, which exceeds the VRAM on a single RTX 3090. To run Q8 fully loaded on the GPU, you would need to add another GPU or replace the card with one that has more VRAM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI for PDFs: check the document before buying more memory</title><link>https://localai.co.kr/en/guides/local-pdf-ai-before-buying-memory</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-pdf-ai-before-buying-memory</guid><description>Find whether PDF problems come from extraction, OCR, context length or retrieval before changing hardware.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Local AI for PDFs: check the document before buying more memory</h1><p>Check what the PDF reader extracted before adding memory</p><p id="guide-page-summary">A local AI system for PDFs extracts or searches document text to produce answers. If a summary is wrong, first check whether a page of extracted text preserves the source's headings, sentence order, and table values. A larger model or more memory cannot repair corrupted input; compare retrieval methods and hardware only after the document is read correctly.</p><p>Imagine reviewing an 80-page service contract. Copy one page containing both body text and a table, then check whether headings, sentence order, and amounts remain attached to the correct entries. Do not just scan the numbers: verify that the value beside “annual fee” still belongs to that label. If reading order or table structure is already broken, the model will answer from misarranged content.</p><p>If copying produces nothing or only a page image, first check OCR or visual-input processing. Compare a scanned value with the source, for example, to see whether an 8 was read as a 3. You can test this step on a public document with a similar layout instead of a sensitive contract. Use successful extraction of a page's headings, sentences, and table as the pass condition; that makes later failures easier to separate from extraction problems.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Compare extracted text sent to the model with the source first.</li><li>Test whole-document summarization and finding evidence for a clause as different tasks.</li><li>Check answers against dates and numbers in the document, and record file-processing and response time separately.</li></ol></section><section><h2>Separate a full-document summary from a specific question</h2><p>“Summarize all obligations in the contract” asks about the document's overall flow and relationships between sections. “When must I give notice to cancel auto-renewal?” asks for the relevant clause and any exception that changes its conditions. A retrieval-augmented generation (RAG) system finds relevant passages and supplies them to the answer instead of sending every page each time. If retrieval finds the cancellation clause but misses an exception elsewhere, a fluent answer can still be wrong.</p><p>Check not only whether a retrieved clause answers the question, but also whether it includes exceptions and related conditions elsewhere. If the notice period and required notice method appear in different sections, one passage may not be enough. Conversely, sending the whole document at once does not guarantee a complete summary: definitions and exceptions may become separated when chapter summaries are combined. Decide whether you need an overview or a specific answer with evidence before choosing input scope and retrieval.</p><ul><li><a href="https://localai.co.kr/en/guides/local-rag-complete-guide">How document-retrieval local AI works</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-failure-diagnosis">Diagnose off-target retrieval results</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-1.webp" alt="A document page copied into a text editor beside a computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Copy one page first and verify that headings, sentences, and table values match the source.</figcaption></figure><section><h2>Separate waiting stages to locate the cause</h2><p>The time from submitting a PDF to the first text may include file reading, text extraction, and prefill, where the model processes input. Answer generation is the later decode stage. If pasted extracted text is quick but PDF upload is slow, inspect file handling or extraction first. If prepared text still produces a long first-answer wait as input grows, examine prefill.</p><p>The site's prefill comparison estimates how model input processing may feel; it does not reproduce PDF reading or OCR. In your app, record the time from selecting the PDF to answer completion separately from the time for submitting extracted text directly. Also separate time to first text from time to full completion to see whether file handling, input processing, or generation needs attention.</p></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-2.webp" alt="Hourglasses representing processing stages between a document stack and a computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record time separately from PDF extraction to first text and answer completion.</figcaption></figure><section><h2>Record known-answer questions with their source evidence</h2><p>Choose three repeatable questions from the contract: the renewal notice date, a specific amount and unit in the fee table, and a support hour that the contract does not state. Locate the answers in the source in advance. For the last question, check whether the model explains that the information is absent instead of inventing a time. Reusing the same questions and answers lets you compare changes to models or retrieval scope.</p><p>Even when an answer includes a page or clause number, open that location and verify it. In a retrieval-based setup, check that the clause actually reached the model's input. If the date is correct but the fee is wrong, inspect table extraction and the association between values and labels. If the model invents an answer to an unlisted question, check instructions, retrieval omissions, and evidence delivery before changing model size. Record whether each answer matches the source, whether its evidence was included, and whether the model acknowledged missing information.</p></section><section><h2>Choose hardware after identifying a recurring document-work bottleneck</h2><p>First record how long your current setup takes to extract one document, answer the necessary questions, and verify the evidence. If you need to submit the whole document every time, input processing and runtime memory may matter. For a workflow that retrieves only a few clauses, retrieval of exceptions and handling of questions absent from the source come first. SSD space for storing files is a different requirement from memory used while the model runs.</p><p>Keep the extracted text and questions fixed while changing only one setting. Adjust either context length or retrieval scope, then compare the answer and waiting stages. Confirm normal operation with a short request, then increase input from a representative page to relevant clauses and the full contract; this reveals where memory or latency becomes a burden. If a scanned number was extracted incorrectly, increasing model size leaves the cause unchanged. Hardware expansion becomes relevant when accurate source text and retrieval still repeatedly hit input or memory limits.</p><p>If you choose local execution for privacy, also check where OCR, embeddings, retrieval, and file upload are processed. Run one document end to end and record memory use and errors while the app starts, the PDF is submitted, and follow-up questions are asked. If full contracts are a daily workload and input processing or memory is consistently the bottleneck, consider an upgrade. If you only occasionally inspect a few clauses, the current retrieval workflow may be sufficient. Base the decision on recurring document work, not maximum context length.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">How context length affects memory use</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Understand VRAM and unified memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-pdf-ai-before-buying-memory-scene-3.webp" alt="Several document inputs converge through a dotted path into a computer's document workflow" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose memory or hardware to fit recurring document tasks and their actual bottlenecks.</figcaption></figure><aside><h2>Compare wait times for long inputs</h2><p>Compare prefill experience with an input length similar to a document.</p><a href="https://localai.co.kr/en/speed?context=16384">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local AI system for PDFs extracts or searches document text to produce answers. If a summary is wrong, first check whether a page of extracted text preserves the source's headings, sentence order, and table values. A larger model or more memory cannot repair corrupted input; compare retrieval methods and hardware only after the document is read correctly.</dd></div><div><dt>How much memory does it need?</dt><dd>First record how long your current setup takes to extract one document, answer the necessary questions, and verify the evidence. If you need to submit the whole document every time, input processing and runtime memory may matter. For a workflow that retrieves only a few clauses, retrieval of exceptions and handling of questions absent from the source come first. SSD space for storing files is a different requirement from memory used while the model runs.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A computer for local coding AI: autocomplete and agents need different tests</title><link>https://localai.co.kr/en/guides/local-coding-ai-choose-by-workflow</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-coding-ai-choose-by-workflow</guid><description>Choose local coding hardware by separating autocomplete, function edits and repository-level tasks, then compare through passing tests.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">A computer for local coding AI: autocomplete and agents need different tests</h1><p>Compare coding AI on real tasks, from autocomplete to repository edits</p><p id="guide-page-summary">Local coding AI can suggest the next code in an editor, revise a function, or work across multiple files. Decide which task you need, then run the same real task on your current device and record test results along with review time to narrow down the model and memory you need.</p><p>Producing code quickly is not the same as finishing an edit and its review. The model's context and execution permissions differ depending on whether you need a short suggestion, a one-function change, or coordinated edits across repository files. Choosing a repository agent from autocomplete scores or chat response speed alone can misrepresent the real workflow.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>For autocomplete, check whether suggestions arrive in time and fit the editing flow.</li><li>For function edits, inspect boundary-case tests and the diff.</li><li>Give an agent only the context and file/command permissions it needs, starting with the narrowest scope.</li></ol></section><section><h2>Check whether autocomplete suggestions are useful while typing</h2><p>While writing a TypeScript form, autocomplete proposes a short continuation after the cursor. Even a correct suggestion helps less if it arrives after you have already typed the next line. In the same file, record when suggestions arrive, whether you accept them, and what you edit afterward. Generating a complete function in chat means reviewing and inserting the whole result; using autocomplete means judging whether a short suggestion fits the current line and variable flow.</p><p>First check that your editor supports the model, then see whether suggestions follow the project's variable names and code style. Pasting a complete function and then renaming variables has different review needs from receiving a bracket or conditional one line at a time. Open a typical file in your actual editor, accept suggestions, and record how much you change to see whether autocomplete helps your workflow.</p><ul><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-coding-ai-choose-by-workflow-scene-1.webp" alt="A choice between a small code suggestion and a task needing more context" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For autocomplete, check whether a short suggestion fits the current cursor and code flow.</figcaption></figure><section><h2>Pair each function edit with its input and expected result</h2><p>For an invitation-code validator, define the expected behavior: reject an empty string and three spaces, but accept AB-12 unchanged. A length-only check could accept three spaces, so trim surrounding whitespace before checking whether the value is empty. The normalized value used for this check does not have to replace the stored value. Changing the case of a valid code or its storage format would go beyond the request.</p><p>Give the model the reproducing inputs, current behavior, expected behavior, and only the relevant function and caller. In the diff, check which files changed and how broad the edit is; in tests, check the actual outcome for all three cases. If there are no automated tests, create a small reproduction with those inputs. One passing case does not validate the whole form: check the validator separately from the screen's submit and error-message behavior. Confirm that the screen prevents submission and clears its error when appropriate so users experience the policy correctly.</p><p>When a test fails, distinguish a validator bug from a problem in how the screen passes the value. If both layers need changes, decide which layer owns the rule and limit edits to the necessary files. This reduces the risk that handling an exception in one screen changes another form's behavior.</p></section><section><h2>Give an agent relevant context instead of the whole repository</h2><p>An agent editing multiple files uses the request, code, earlier responses, and tool results as context. If the invitation-code rule spans a screen and tests, locate and provide those relevant files together. Sending the entire repository can add unrelated code and make the needed locations harder to identify. A longer context can hold more material, but it does not automatically find the right files.</p><p>Locate the function containing the rule, the screen that calls it, and the existing tests. If the agent edited a different form with a similar name, correct the search path first. If it read the right files but missed how the function and screen connect, break the plan into steps: edit the validator, inspect the caller, and check the error display. Existing tests may capture exception policies that are not obvious from a function name, so read them before editing and verify that the agent's explanation matches the files it actually inspected.</p></section><figure><img src="https://localai.co.kr/guides/local-coding-ai-choose-by-workflow-scene-2.webp" alt="A diagram selecting relevant files between a repository and an agent" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Give the agent the function, its calling screen, and relevant tests.</figcaption></figure><section><h2>Grant file-edit and command permissions separately</h2><p>Reading files, applying edits, and running tests or package-install commands have different effects on the repository and environment. Do not enable the entire repository, terminal, and installation permissions at once. Start with read access to locate the necessary files. Review the diff before applying edits, and run tests only after understanding what the command affects. Using a local model does not mean search tools or external APIs also operate locally.</p><p>Test an invitation-code change in a copy or separate branch, and do not provide secrets or real customer data. If tests require network access or installation, inspect the runtime environment separately from file-edit permissions. For sensitive repositories, exclude tools that may transmit data externally and test execution permissions only in a reversible copy.</p></section><section><h2>Measure completion time from the start of work through testing</h2><p>Compare candidates on the same TypeScript form task. For autocomplete, check whether suggestions fit the typing flow; for a function edit, confirm that empty and whitespace-only input is rejected while AB-12 is preserved; for an agent, inspect edit scope and test results. If you plan to use multiple roles, test the model combination and concurrency you will actually use. Short-suggestion speed does not predict completion time for a multi-file task.</p><p>Consider two hypothetical edits. A takes 15 seconds to generate and another 90 seconds of human editing, for 105 seconds total. B takes 30 seconds to generate and 20 seconds of editing, for 50 seconds total. The slower generator finishes the overall task first. These illustrative numbers are not measurements of specific models; tests and review effort must also be comparable for a fair comparison. Use speed comparisons to narrow candidates, then complete the real form task through testing. If editing and review work well on your current device, you can postpone a purchase.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Understand context length and runtime memory</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Compare local model runtimes</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Distinguish input processing from token generation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-coding-ai-choose-by-workflow-scene-3.webp" alt="A diagram comparing results and completion time across two task paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Include tests and human edits in addition to model response time.</figcaption></figure><aside><h2>Compare coding input and generation speed</h2><p>Include the wait before the first response.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?context=16384&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local coding AI can suggest the next code in an editor, revise a function, or work across multiple files. Decide which task you need, then run the same real task on your current device and record test results along with review time to narrow down the model and memory you need.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local LLM slow on its first run? Five checks before blaming the hardware</title><link>https://localai.co.kr/en/guides/local-llm-first-run-slow-checklist</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-first-run-slow-checklist</guid><description>Use the app’s status and a short prompt to distinguish downloading, model loading, and slow response generation.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Local LLM slow on its first run? Five checks before blaming the hardware</h1><p>When the first answer is slow, check each stage from download to generation</p><p id="guide-page-summary">A local LLM reads questions and produces answers using a model stored on your computer. When you select a new model for the first time, the app first downloads its files and loads them into memory. It can process your question and generate a reply once that preparation is complete.</p><p>A long wait for the first question can be followed by a much quicker start on the next one. The downloaded files are already available, and keeping the model in memory also avoids loading it again. Start by identifying whether the wait comes from preparing the model, reading the document, or generating the answer.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Record download and inference time separately.</li><li>Change one setting at a time.</li><li>Distinguish long inputs from long outputs.</li></ol></section><section><h2>Use the progress display to distinguish download from loading</h2><p>A download percentage or transferred-byte count means the app is still receiving the model files. If the count keeps rising, wait for it to finish. If transfer stops, check the connection and error message, then use the app's retry control. Context length and output settings do not resolve a download problem.</p><p>After download, the app loads the model from disk into memory. If “loading model” stays visible for a long time, examine file loading and memory use. Progress displays vary by app; if detailed logs are unavailable, start with the visible stage and any error. The next section covers the wait after the model is ready and a question has been sent.</p><ul><li><a href="https://localai.co.kr/en/guides/local-llm-start">Local LLM basics, installation, and model selection</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Set up Qwen3.8-27B prefill and caching with Splash 1.3.0</a></li><li><a href="https://localai.co.kr/en/guides/local-rag-failure-diagnosis">When local RAG answer is wrong: Search, chunk, model diagnosis order</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-llm-first-run-slow-checklist-scene-1.webp" alt="Colored blocks leaving a cloud with papers and network lines and landing in separate trays" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Downloading files and generating an answer are different stages.</figcaption></figure><section><h2>Long documents can increase the wait for the first response</h2><p>Before writing an answer, the model processes the question and any document sent with it. This input-processing stage is prefill. Ask “Tell me the application deadline and exceptions” about the same policy document. First supply an excerpt containing both details, then the full document, and compare the wait until the first response.</p><p>Keep the model and settings unchanged, and use a new conversation for each test. Adding documents to one conversation also carries earlier questions and answers into later inputs. Starting a new chat reduces that history; input-cache state is something to check separately in the app. Keep all evidence needed for the answer in the excerpt so the results remain comparable.</p><p>If the first response starts at a similar time but a longer answer finishes much later, examine output length. Compare the wait before the first response to understand the input burden, and the interval from that response to completion to understand answer generation.</p></section><section><h2>Check memory availability and where the model runs</h2><p>On a PC with a discrete GPU, use the runtime's memory display or logs to check how much of the model is on the GPU. A configuration that processes part of the model on the CPU can have a different speed from GPU-only execution. On a Mac, the model, operating system, and browser share unified memory, so other open apps reduce the space available to the model.</p><p>First keep the model unchanged, close other apps, and try both a short question and one with the document. Then switch to a smaller model and ask the same question. Changing one condition at a time helps separate the effects of available memory and model size. A smaller model also changes computation and execution, so check that it still answers the policy exceptions correctly as well as running faster.</p></section><figure><img src="https://localai.co.kr/guides/local-llm-first-run-slow-checklist-scene-2.webp" alt="Colored blocks extending from a monitor toward a storage cabinet and scale" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check whether the model runs on GPU, CPU, or unified memory.</figcaption></figure><section><h2>Keeping the model loaded can reduce preparation time</h2><p>There are several reasons a second question may be faster. Files already on disk do not need another download. If the app keeps the model in memory, it can avoid loading again. Reusing a cached prefix of the same input also reduces repeated prefill computation.</p><p>If you normally leave the app open, compare requests with the model already loaded; if you open it only when needed, compare after restarting. Operating-system file caches can remain after closing an app, and input-cache clearing differs between programs. Note the starting conditions and repeat with the same app, model, and version to understand your normal wait.</p><p>To compare the wait you experience on screen, time from sending the question until the answer appears. Server logs may record only computation, so also keep the user-side interval that includes queueing, loading, and display.</p></section><section><h2>If an answer stops early, check its stop reason</h2><p>If an answer ends in the middle of a sentence, check the stop reason shown by the app or server logs. If it reached the output limit, raise only that limit and rerun the same question. The limit sets how long an answer the model may generate in one request. Increasing it allows longer answers but can also change completion time and memory needs.</p><p>Finally, check that the answer includes both the application deadline and exceptions. With the required content preserved, record request, first-token, and completion times along with the stop reason. If the first response remains slow after preparation, compare input processing and memory; if it starts quickly but finishes late, examine answer length and decode speed. Knowing which interval needs improvement gives you a concrete basis for choosing hardware.</p></section><figure><img src="https://localai.co.kr/guides/local-llm-first-run-slow-checklist-scene-3.webp" alt="A monitor beside a block-filled computer showing a broken row of colored blocks and a connection diagram" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the stop reason and output limit to distinguish delay from early termination.</figcaption></figure><aside><h2>Try a short question in the browser</h2><p>This small-model demo is separate from desktop apps and requires a supported browser and a model download.</p><a href="https://localai.co.kr/en/demo">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM reads questions and produces answers using a model stored on your computer. When you select a new model for the first time, the app first downloads its files and loads them into memory. It can process your question and generate a reply once that preparation is complete.</dd></div><div><dt>How much memory does it need?</dt><dd>After download, the app loads the model from disk into memory. If “loading model” stays visible for a long time, examine file loading and memory use. Progress displays vary by app; if detailed logs are unavailable, start with the visible stage and any error. The next section covers the wait after the model is ready and a question has been sent.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Before buying a GPU for ComfyUI, decide on one image you need to make</title><link>https://localai.co.kr/en/guides/comfyui-first-workflow-before-gpu-upgrade</link><guid isPermaLink="true">https://localai.co.kr/en/guides/comfyui-first-workflow-before-gpu-upgrade</guid><description>A way to choose local image-generation hardware by separating base generation, partial edits and upscaling, then checking time and memory across the whole task.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Before buying a GPU for ComfyUI, decide on one image you need to make</h1><p>Finish the workflow through saving before changing GPUs</p><p id="guide-page-summary">ComfyUI is an image-generation program that connects a model, sampler, and image-saving functions through nodes. Enter a prompt and the connected workflow generates an image, which you can then edit or enlarge. Before replacing a GPU, save the workflow you actually need and compare the time taken to finish the final file.</p><p>Suppose you want an image of a desk lamp on the right with room for a title on the left. First see whether basic generation gives you the composition; once the result is usable, add only the needed edits or upscaling. Starting with inpainting, control models, and batches all at once makes it hard to tell whether a change came from the workflow or the hardware.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Save one basic generation, then add needed edits and upscaling in sequence.</li><li>Record generation, retries, editing, upscaling, and saving separately.</li><li>Diagnose missing files or nodes separately from GPU speed issues.</li></ol></section><section><h2>Basic generation and product-photo editing are different workflows</h2><p>First decide whether you are generating a new background or editing part of an existing product photo. The same product task needs different components if you must preserve people or details from a photo, such as inpainting or added controls. A single goal for the first test makes it easier to verify the model, encoder, decoder, and custom nodes are connected correctly.</p><p>If the composition is wrong, review the prompt and model choice. If the graph stops or cannot find a file or node, check the setup. An unwanted image and a workflow that fails to run need different fixes.</p><ul><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-first-image-guide">Make your first image locally with FLUX.3 Klein</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-8gb-speed-guide">Does FLUX.3 Klein run in 8 GB? 5090, 5070 and Spark generation times</a></li><li><a href="https://localai.co.kr/en/guides/llada-image-base-turbo-local-generation">Make and edit images locally with LLaDA-Image: choosing Base or Turbo</a></li></ul></section><figure><img src="https://localai.co.kr/guides/comfyui-first-workflow-before-gpu-upgrade-scene-1.webp" alt="A mug on a photo table, a monitor showing the same mug, a forest-lake image, and a colored-node diagram appear together." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Generating a new background and editing an existing product photo are different tasks.</figcaption></figure><section><h2>Change resolution and batch size one at a time</h2><p>Once the base graph works, decide whether composition or detail needs improvement. If title space is too narrow, adjust aspect ratio or layout; if composition is right but surface detail is lacking, test resolution. Raising output size alone will not create negative space, so save the working graph and change only one setting while keeping batch size and controls fixed.</p><p>Not every model produces good results at arbitrary lower resolutions. Stay within the workflow's documented range and inspect changes to composition and detail. If an error occurs, revert the last setting and see whether the graph works again. If only that option fails, investigate compatibility before assuming the GPU is insufficient.</p></section><section><h2>Upscale to final size after choosing a candidate</h2><p>Choose a candidate with the right composition and product position, then upscale it to the required output size. Selecting from smaller drafts can avoid repeatedly generating large images you will reject, but an upscaler or tiled processing adds time and memory.</p><p>After enlarging the image, check the product's outline and surface details and the space left for the title. Save the final file and view it at the size you will use on the page; this reveals any editing or enlargement that needs another pass.</p></section><figure><img src="https://localai.co.kr/guides/comfyui-first-workflow-before-gpu-upgrade-scene-2.webp" alt="An arrow leads from a pixelated landscape to a larger image, which a hand inspects with a magnifier." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Recheck product outlines and title space after upscaling.</figcaption></figure><section><h2>Time the complete edit-and-save workflow under matched conditions</h2><p>When comparing hardware, use the same model files, node graph, prompt, resolution, and batch size. Record basic generation, retries, partial editing, upscaling, and saving separately to identify where waiting accumulates. Errors, OOMs, and long waits have different causes; note the node that stopped and the last setting added.</p><p>If you decide after each image, latency until you can inspect and revise the next candidate may matter most. For queued batches, throughput may matter more. Custom nodes execute code, so verify their source and version; do not confuse missing-node or model-file issues with a GPU comparison.</p><p>Save the workflow and the model files and custom-node sources and versions, then complete a page-ready output from start to finish. Consider an upgrade when repeated waits interrupt editing or a required feature cannot run because of memory. Reproduce the saved graph on candidate hardware through editing, upscaling, and saving before comparing.</p></section><figure><img src="https://localai.co.kr/guides/comfyui-first-workflow-before-gpu-upgrade-scene-3.webp" alt="A colored-block path leads to an image on a computer in front of a person examining a landscape card." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Run the saved graph through the final file before deciding on a purchase.</figcaption></figure><section><h2>Check the full model stack before upgrading hardware</h2><p>The FLUX.3 Klein distilled template needs a diffusion model, text encoder, and VAE. Its optional prompt upsampler loads a separate Qwen3.5 9B file. The stated 8 GB RTX path is for INT8. If memory is tight, first try disabling the upsampler node and writing the subject, setting, composition, and lighting directly in the prompt. [ComfyUI FLUX.3 Klein guide](https://docs.comfy.org/tutorials/flux/flux-3-klein)</p></section><section><h2>Record first and repeat runs separately</h2><p>Time the first Queue run and a second run with the exact same prompt, canvas size, and batch setting separately. Record `first-run elapsed`, `second-run elapsed`, and the settings as distinct entries. After the second run finishes, open `ComfyUI/output/` and confirm the PNG was saved. Before replacing the GPU, adjust output size, batch count, or upsampler one at a time and note which change resolves the memory error.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Preview the image-generation wait</h2><p>Review estimated times by device, then verify them with your saved workflow.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ComfyUI is an image-generation program that connects a model, sampler, and image-saving functions through nodes. Enter a prompt and the connected workflow generates an image, which you can then edit or enlarge. Before replacing a GPU, save the workflow you actually need and compare the time taken to finish the final file.</dd></div><div><dt>How much memory does it need?</dt><dd>Choose a candidate with the right composition and product position, then upscale it to the required output size. Selecting from smaller drafts can avoid repeatedly generating large images you will reject, but an upscaler or tiled processing adds time and memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini M6 vs M4: which 24GB or 32GB setup should you buy for local AI?</title><link>https://localai.co.kr/en/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai</guid><description>Compare the available Mac mini M6 and M4 in 24GB and 32GB configurations by local AI workload, memory bandwidth and actual extra cost. Check your runtime settings first and narrow the options with matching configurations.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">Mac mini M6 vs M4: which 24GB or 32GB setup should you buy for local AI?</h1><p>Choose the memory capacity you need before the chip generation</p><p id="guide-page-summary">Mac mini M4 and M6 both offer 24 GB and 32 GB unified-memory configurations. First choose the capacity needed for your model, documents, and other apps, then compare chip generations and prices at that capacity. M6 officially launched on September 22, 2026.</p><p>If buying now, compare the actual checkout price of remaining M4 stock with an M6 configuration matching its memory and SSD. If you already own an M4, identify the task that is limiting you: insufficient memory that forces you to split documents calls for a different upgrade from slow generation when the model already fits.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Choose the required capacity—24 GB or 32 GB—first.</li><li>M6 launched on September 22, 2026; compare speed and checkout prices at matching configurations.</li><li>If you already own an M4, compare the reduced wait on the same work with the extra purchase cost.</li></ol></section><section><h2>Set capacity first to make the generation comparison clear</h2><p>For long proposals or reports, keep the browser and editor open while processing the document. Check whether the workflow completes without closing apps or shortening the input. This helps choose between 24 GB and 32 GB before comparing chip generations.</p><p>After choosing a capacity, match memory, such as M4 24GB against M6 24GB. Match SSD capacity too and record the actual purchase prices. Comparing M4 24GB directly with M6 32GB mixes the chip difference with the cost of more memory.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai-scene-1.webp" alt="Two small computers beside stacks of colored blocks at different heights" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose memory capacity first so you can compare generation differences separately.</figcaption></figure><section><h2>Work that can fit in 24 GB</h2><p>For short questions and one or two small-to-medium models loaded as needed, 24 GB may be enough. Do not check only whether a model starts; see whether your normal flow of finding sources, submitting the report, and moving the answer into an editor continues without closing other apps. Initial model loading, time to the first answer after a long document, and generation speed are separate intervals.</p><p>If the selected quantized model loads with room, handles long documents, and lets you keep using a browser and editor, an M6 announcement alone is a weak reason to pay for 32 GB. If 24 GB forces you to close apps or shorten context each time, being able to start a model differs from using it comfortably every day. Extra capacity addresses recurring constraints, not an expectation of future speed.</p></section><section><h2>When 32 GB gives work time back</h2><p>If you submit the same long document repeatedly or close the browser and editor whenever you load a model, 32 GB may change the workflow. The difference is 8 GB (32−24), shared by apps and the runtime as well as the model. Long context, conversation history, and the operating system also need memory, so file size alone does not show the available runtime headroom.</p><p>Keep the document and model unchanged, then compare a run with other apps closed against one with your usual apps open. If the combined workload repeatedly stalls or forces you to unload an app, and 32 GB improves it, the value of extra capacity is concrete. If the model fits comfortably in 24 GB but generation alone is slow, look at chip generation, runtime, and settings instead.</p><p>If you often use a long report, browser, document editor, and photo editor together, do not decide from model-file size alone. Check whether that combination repeatedly forces you to split documents or close apps; if it does not, you need not pay for 32 GB expecting a speed boost.</p></section><figure><img src="https://localai.co.kr/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai-scene-2.webp" alt="Dotted boxes and up/down arrows surround two differently sized stacks of papers beside a monitor" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>32 GB can add headroom when long inputs and several apps overlap.</figcaption></figure><section><h2>M6 also increases the rate of data transfer from memory</h2><p>Memory bandwidth is 170GB/s on the M6 24GB and 32GB configurations, versus 120GB/s on the M4 Mac mini, about a 42% specification increase. This data supply matters when generation repeatedly reads model data. Compare the same model and runtime settings to see how much the actual wait changes.</p><p>Prefill for long inputs also depends on compute performance and runtime optimization. Compare time to first answer and decode rate separately using the same model file and input length. Apple's maximum improvement figures for specific AI tasks apply to those tests, while this site's local LLM comparison uses the selected model and settings.</p><p>M6 launched on September 22, 2026 and is now available. If memory shortages make you close apps often, choose sufficient capacity first. If your model already fits comfortably, compare prefill and decode improvements with the same input.</p><ul><li><a href="https://www.apple.com/kr/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">Apple's official M6 Mac mini launch announcement</a></li><li><a href="https://support.apple.com/ko-kr/128108">M6 Mac mini technical specifications</a></li></ul></section><section><h2>Compare M4 stock and M6 at matching configurations</h2><p>Remaining M4 stock is an option if your reporting or coding model runs comfortably and the matching configuration is sufficiently cheaper. Match unified memory and SSD as well as the chip when comparing prices, and check delivery dates and return terms.</p><p>If you already use an M4, first check runtime and acceleration settings while keeping the model and document unchanged. When long-input processing or generation delays repeatedly interrupt work, compare how much the new machine reduces that interval to decide whether upgrading helps.</p><table><caption>Compare in the order that matches your situation</caption><thead><tr><th scope="col">Current situation</th><th scope="col">Compare first</th></tr></thead><tbody><tr><th scope="row">Buying new; required memory unknown</th><td>Model, long input and concurrent apps → 24GB or 32GB</td></tr><tr><th scope="row">Long documents often stall on M4</th><td>Input tokens and memory pressure → required capacity</td></tr><tr><th scope="row">Model fits on M4 but answers are slow</th><td>Current runtime and acceleration → same-memory M6 speed</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/mac-mini-m6-vs-m4-24gb-32gb-local-ai-scene-3.webp" alt="Two compact computers and a third dotted outline beside colored blocks and a checklist." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If you already use an M4, compare waiting time saved against upgrade cost.</figcaption></figure><section><h2>Match capacity and generation separately in the comparison</h2><p>Select the same model and input length and compare M4 24 GB with M6 24 GB. Repeat with the 32 GB configurations to examine memory capacity and chip generation separately. Record the recommended quantization and acceleration settings shown on screen.</p><p>For a slow first answer after a long PDF, choose the comparison including input processing. For faster answer generation, compare decode rate. If both generations handle your task, weigh the actual price difference against the waiting time saved, then verify that the order's chip, memory, and SSD match the compared configuration.</p></section><aside><h2>Compare M4 and M6 at the same memory capacity</h2><p>Start with 24GB, then compare the 32GB pair. Pre-release M6 speed is estimated.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-24gb&amp;right=mac-mini-m6-24gb&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Mac mini M4 and M6 both offer 24 GB and 32 GB unified-memory configurations. First choose the capacity needed for your model, documents, and other apps, then compare chip generations and prices at that capacity. M6 officially launched on September 22, 2026.</dd></div><div><dt>How much memory does it need?</dt><dd>After choosing a capacity, match memory, such as M4 24GB against M6 24GB. Match SSD capacity too and record the actual purchase prices. Comparing M4 24GB directly with M6 32GB mixes the chip difference with the cost of more memory.</dd></div><div><dt>When is it better not to choose this?</dt><dd>If you often use a long report, browser, document editor, and photo editor together, do not decide from model-file size alone. Check whether that combination repeatedly forces you to split documents or close apps; if it does not, you need not pay for 32 GB expecting a speed boost.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>New RTX 5060 Ti 16GB or used RTX 3090 24GB for local AI?</title><link>https://localai.co.kr/en/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai</link><guid isPermaLink="true">https://localai.co.kr/en/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai</guid><description>Compare 16GB and 24GB VRAM, the whole-PC cost of power and case changes, and the checks that matter when buying a used GPU.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">New RTX 5060 Ti 16GB or used RTX 3090 24GB for local AI?</h1><p>Check whether your documents and model fit in 16 GB first</p><p id="guide-page-summary">A new RTX 5060 Ti 16 GB and a used RTX 3090 24 GB differ in VRAM, power requirements, warranty, and total PC cost. First check whether your model and context fit in 16 GB, then compare expected waits for the same task alongside power, case, cooling, and used-card condition.</p><p>To search and summarize an internal product guide with a local model, the model file and document context must fit in the GPU's VRAM. The RTX 5060 Ti is sold with 8 GB and 16 GB options; this guide covers the 16 GB version and compares it with the RTX 3090's official 24 GB VRAM specification.</p><p>VRAM capacity alone does not decide which card is better. When a workload exceeds 16 GB, some processing may move to system RAM, and each used 3090 must be checked individually. Compare the workload and actual cost, including power, case, and cooling beyond the card price.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check whether the model and context fit in 16 GB of VRAM.</li><li>Add power, case, and cooling costs to the card price.</li><li>Check load testing and return terms for a used card.</li></ol></section><section><h2>Check whether the model and context fit within 16 GB</h2><p>Choose the model file and context length first, then check available VRAM with your browser and editor open. A 24 GB card is worth considering if longer documents push usage past 16 GB and move some processing to system RAM.</p><p>If the model and context fit comfortably within 16 GB, the 3090 is not faster just because it has more VRAM. It also needs memory headroom for other apps and the runtime.</p><p>Starting the model is not enough. Check whether it can read the guide and finish the summary, and whether shortening context omits important clauses. If a smaller quantized file is needed to fit, also verify that answer quality remains adequate for the task.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li><li><a href="https://localai.co.kr/en/guides/rtx-5090-discontinued-rumor-local-ai-guide">RTX 5090 Discontinuation Rumors: Should You Buy One for Local AI?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-1.webp" alt="Rows of green blocks of different lengths rest on top of a single-fan and a dual-fan graphics card" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The difference between 16 GB and 24 GB appears when you choose the model and context you need.</figcaption></figure><section><h2>Fix the workload before comparing speed</h2><p>First compare the same model and guide input when both cards have sufficient headroom. Then examine separately the case where the workload exceeds 16 GB and some processing moves to system RAM. That result can reflect VRAM capacity and execution path as well as GPU generation.</p><p>For a comparison, use the same model and input length, and record each card's recommended quantization and acceleration settings. Time to the first answer after a long guide also includes input processing.</p><p>Generation speed measures the stage that produces text after input processing. If the recommended settings differ by card, note that difference alongside the results.</p><p>The comparison shows expected waiting time with settings suited to each device and model. After narrowing down candidates, inspect the actual configuration and card condition. Used 3090 cards in particular vary in cooling condition, warranty, and return terms.</p></section><section><h2>Add required PC component costs to the card price</h2><p>NVIDIA reference specifications list 180W graphics power and a recommended 600W system supply for RTX 5060 Ti, versus 350W and 750W for RTX 3090. Check the vendor card’s dimensions and connectors against your PC’s supply and cables. Calculate electricity costs separately using whole-system measured power and operating time.</p><p>If the existing power supply and case work, add only shipping and installation to the card price. Add replacement parts only when needed. For heat or noise during long runs, try a power limit with the standard supply, cable and cooling requirements satisfied, and compare the slowdown on the same work.</p><ul><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide">Power caps and restoration by device</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-2.webp" alt="Arrows branch from cards with two and three fans toward two trays with different contents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Include power, case, and cooling to see the full PC cost.</figcaption></figure><section><h2>Check the individual used 3090 and its return terms</h2><p>A seller's “working normally” statement does not confirm the card can sustain a long guide-processing workload. Check the manufacturer and exact model to verify length, thickness, and power connectors. Cards in the same 3090 family can differ in dimensions and connections and may not fit the case.</p><p>If possible, request a video or test opportunity to check temperature, fan noise, and output errors under load. Also check repair history, warranty transfer, and the seller's and platform's return periods.</p><p>For an in-person sale, arrange an installation test on site; for shipping, decide what to test on arrival and keep the return terms in writing. Factor limited testing or return options into the price decision.</p></section><section><h2>A new 16 GB card and a used 24 GB card fit different needs</h2><p>The 5060 Ti 16 GB can fit if the model and input leave headroom in 16 GB of VRAM and your image-generation work repeats at medium resolution. It is also an option if you want a new-card warranty and returns without changing your PC's power supply or case.</p><p>Check the product listing for the 16 GB model; an 8 GB version is also sold. Card dimensions, power connectors, and warranty terms vary by manufacturer.</p><p>Consider the 3090’s 24GB if your model exceeds 16GB and smaller quantization does not deliver useful answers. Choose the model file and context first, and measure full response completion when RAM offloading is involved. Large models such as 70B can involve long waits depending on format and placement, so compare speed with your usual questions.</p></section><figure><img src="https://localai.co.kr/guides/rtx-5060-ti-16gb-vs-used-3090-24gb-local-ai-scene-3.webp" alt="Three circular close-ups show a graphics card fan, power connector, and gold contacts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For a new card, verify the 16 GB SKU, dimensions, and connectors.</figcaption></figure><section><h2>Decide using the same question and total cost</h2><p>Test both cards with the same guide and prompts, and record the model file, quantization, and context length. Compare time to the first answer, which includes input processing, separately from generation speed.</p><p>Compare the purchase price of a new 5060 Ti 16 GB with the used 3090's total cost, including parts, shipping, and installation. Results can also depend on the used card's condition.</p><p>If the guide completes within 16 GB and the new-card cost and warranty make sense, there is a case for the 5060 Ti. If the required model and context are blocked, smaller files do not meet quality needs, and you find a 3090 whose condition can be verified, consider its 24 GB. Before paying, check VRAM, manufacturer and model, case and PSU fit, and return terms.</p><table><caption>Record these alongside the prices</caption><thead><tr><th scope="col">Aspect</th><th scope="col">RTX 5060 Ti 16GB</th><th scope="col">RTX 3090 24GB</th></tr></thead><tbody><tr><th scope="row">Card condition</th><td>New-product warranty and returns</td><td>Listing-specific condition, warranty and returns</td></tr><tr><th scope="row">Extra cost for your PC</th><td>Add only parts actually replaced</td><td>Add only parts actually replaced</td></tr><tr><th scope="row">Workload test</th><td>Complete the document and follow-up in 16GB</td><td>Complete the same model and context in 24GB</td></tr></tbody></table></section><aside><h2>Compare the 5060 Ti 16GB and 3090 24GB</h2><p>Use the same model and input length, then calculate the whole-PC cost.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-5060-ti-16gb&amp;right=nvidia-rtx-3090-24gb&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A new RTX 5060 Ti 16 GB and a used RTX 3090 24 GB differ in VRAM, power requirements, warranty, and total PC cost. First check whether your model and context fit in 16 GB, then compare expected waits for the same task alongside power, case, cooling, and used-card condition.</dd></div><div><dt>How much memory does it need?</dt><dd>Choose the model file and context length first, then check available VRAM with your browser and editor open. A 24 GB card is worth considering if longer documents push usage past 16 GB and move some processing to system RAM.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Make and edit images locally with LLaDA-Image: choosing Base or Turbo</title><link>https://localai.co.kr/en/guides/llada-image-base-turbo-local-generation</link><guid isPermaLink="true">https://localai.co.kr/en/guides/llada-image-base-turbo-local-generation</guid><description>A practical path through LLaDA-Image Base and Turbo for generation and editing, including what to test before buying hardware.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Make and edit images locally with LLaDA-Image: choosing Base or Turbo</h1><p>Compare LLaDA-Image Base and Turbo on the same generation and editing tasks</p><p id="guide-page-summary">LLaDA-Image is a model family that creates new images from prompts or edits reference photos using an editing request. Official examples sample Base in 50 steps and Turbo in 4. Run both on the same request to compare composition, details, and the time taken to finish the final image.</p><p>A cafe post introducing a seasonal drink needs two different results: an atmospheric illustration and an edited menu photo that preserves the logo and drink color. Test the illustration through text-to-image and the photo through reference editing separately, then check composition and preservation on each.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Compare text-to-image generation and reference-image editing as separate tasks.</li><li>Turbo's 4 steps and Base's 50 are settings, not a real-world speed ratio or quality guarantee.</li><li>Editing mode uses a reference image and output size, with dimensions that must be multiples of 32.</li></ol></section><section><h2>Test new-image generation and photo editing separately</h2><p>For a new illustration, check whether the subject reads clearly and leaves room for a title. For product-photo editing, focus on details that must not change, such as the cup logo and drink color. Do not judge both outputs with one generic ‘looks good’ score; define what each task must preserve.</p><p>For an illustration, check that there is room for a title rather than asking the image to render exact lettering. For editing, specify what to change and preserve in one instruction, then compare against the original for changes to logo text, cup rim, or fingers.</p><ul><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/comfyui-first-workflow-before-gpu-upgrade">Before buying a GPU for ComfyUI, decide on one image you need to make</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/llada-image-base-turbo-local-generation-scene-1.webp" alt="Arrows connect four stages as a mountain-and-lake scene changes from simple shapes to a detailed image." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First decide whether the task is text-to-image or editing an existing photo.</figcaption></figure><section><h2>Draft with Turbo and check Base when needed</h2><p>The official examples use 50 steps for Base and 4 for distilled Turbo. Use Turbo drafts to explore color and layout, then submit a preferred prompt to Base as well to compare composition and detail.</p><p>Total time also includes model loading, text processing, resolution-dependent computation, and file saving. Record both sampling time and end-to-end time. Compare whether composition, color, and shadows meet your needs, changing one condition at a time when adjusting the result.</p></section><section><h2>Check preserved details and size requirements in editing</h2><p>For reference-photo editing, state both what should change and what should remain. For example, request a bright indoor background while keeping the cup logo and drink color. Change only the background first, then add another element such as a shadow if needed; this makes changes easier to trace.</p><p>The official pipeline's editing mode takes an input image and output size; each dimension must be a multiple of 32. For a size error, check that requirement. If the size is accepted but the logo changes, inspect the instruction and content preservation separately. Passing the size check and preserving source details are different tests.</p></section><figure><img src="https://localai.co.kr/guides/llada-image-base-turbo-local-generation-scene-2.webp" alt="An analog clock sits between a simple mountain-and-lake image and a more detailed version." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>In editing, check both what changes and what stays intact.</figcaption></figure><section><h2>Verify the runtime path and memory placement together</h2><p>The official repository provides a Diffusers pipeline and Base and Turbo checkpoints. Its example environment uses PyTorch with Python 3.11 and CUDA. Select text mode for new-image generation and editing mode for reference edits; record checkpoint, precision, size, and step count.</p><p>A ComfyUI workflow may differ from simply translating official commands into a graph. Check required nodes, filenames, and application versions, and save the first working graph as a baseline. Weights fitting on disk does not establish enough memory for the text encoder, image generator, intermediate data, and resolution. Test repeated generation and editing with your usual apps open.</p></section><figure><img src="https://localai.co.kr/guides/llada-image-base-turbo-local-generation-scene-3.webp" alt="Three small images of a mountain, forest, and water and a magnifier sit beside a larger mountain-and-lake scene." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check weight files and runtime memory headroom separately.</figcaption></figure><section><h2>Compare until one publishable image is complete</h2><p>Run the same request three times, separating initial loading from subsequent generation and editing. Compare the middle result to reduce the influence of a single temporary delay. Judge illustrations by the Turbo draft's composition and mood, and compare product photos with the original to check the logo and drink color.</p><p>Custom nodes execute code, so verify their source and version. The site's wait-time experience simulates results by device; it is not a speed or quality measurement of LLaDA-Image. If the required generation and editing run reliably alongside your usual apps, an immediate upgrade may not be necessary. Compare candidate hardware under the saved graph's conditions when repeated waiting or memory limits actually block work.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Preview the image-generation wait</h2><p>Compare estimated waits by device, then test LLaDA-Image directly.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LLaDA-Image is a model family that creates new images from prompts or edits reference photos using an editing request. Official examples sample Base in 50 steps and Turbo in 4. Run both on the same request to compare composition, details, and the time taken to finish the final image.</dd></div><div><dt>How much memory does it need?</dt><dd>A ComfyUI workflow may differ from simply translating official commands into a graph. Check required nodes, filenames, and application versions, and save the first working graph as a baseline. Weights fitting on disk does not establish enough memory for the text encoder, image generator, intermediate data, and resolution. Test repeated generation and editing with your usual apps open.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Animate a photo locally with Wan-Animate-2: what to check first</title><link>https://localai.co.kr/en/guides/wan-animate-2-local-video-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/wan-animate-2-local-video-guide</guid><description>Understand Wan-Animate-2's reference-image and driving-video workflow, runtime choices and hardware checks.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Animate a photo locally with Wan-Animate-2: what to check first</h1><p>Transfer motion from a video to a character in a reference image</p><p id="guide-page-summary">Wan-Animate-2 takes a character reference image and a video containing motion, then applies that motion to the appearance in the image to create a new clip. Save the result, play it to check continuity in face, clothing, and movement, and extend duration only after a short segment works.</p><p>Suppose you want a hand-drawn character to wave in a product video. The character image provides the appearance to preserve; a short motion video provides the movement to transfer. As in the official examples, you can add a sentence describing face, clothing, and background, but text does not replace the roles of the reference image and motion video.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Wan-AI/Wan2.2-Animate-2-14B is the model identifier used in the official download example.</li><li>The official example uses eight A800 GPUs for 720p and tests 480p with two A800 GPUs; this is not a guarantee for one consumer GPU.</li><li>The ComfyUI template can join 81-frame motion-transfer blocks into a longer video; check appearance and motion at joins.</li></ol></section><section><h2>Choose one clear motion from the source video</h2><p>To transfer a wave into a product clip, choose a short source segment where the motion is clear. Avoid cuts and occlusion, and make sure the relevant hand and expression are visible. Start with a clearly visible wave rather than a full-body dance with several movements at once.</p><p>If person size or camera angle differs greatly between reference image and motion video, or the body is often cropped, the input mismatch can affect the result. Decide in advance which features to preserve—face, clothing, background—and which motion to transfer, such as a wave. Then review both appearance and movement, not just whether the character moved.</p><ul><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local video generation: workflows and PC requirements</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li></ul></section><figure><img src="https://localai.co.kr/guides/wan-animate-2-local-video-guide-scene-1.webp" alt="Three scenes show a yellow circle moving from left to right on a green background, joined by arrows" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The reference image provides appearance; the motion video provides movement.</figcaption></figure><section><h2>Start with either the official repository or ComfyUI template</h2><p>The official Wan-Animate-2 repository provides an inference script, checkpoint-download instructions, and examples specifying reference-image and motion-video paths. Its download example uses the model identifier Wan-AI/Wan2.2-Animate-2-14B. If you use the repository path, follow its instructions and verify that a short input completes.</p><p>ComfyUI has a separate template connecting the image, motion video, description, and save nodes. It is not simply the official repository commands displayed as a graph, so align the ComfyUI version, custom nodes, and model files separately. Verify one path from input to saved output before comparing another runtime; this keeps setup, input, and saving problems distinct.</p></section><figure><img src="https://localai.co.kr/guides/wan-animate-2-local-video-guide-scene-2.webp" alt="Six consecutive scenes of a yellow cube moving right above a timeline with three colored segments" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check requirements separately for the repository and ComfyUI template paths.</figcaption></figure><section><h2>Understand the scope of the 14B model and published hardware figures</h2><p>The 14B parameter count alone does not determine VRAM needs. Reference images, video frames, intermediate data, output size, and runtime batching use memory in addition to weights. The repository says its default 720p setup was configured on eight A800 GPUs and 480p was tested on two A800 GPUs. Do not treat these server examples as guarantees for one consumer GPU.</p><p>Even if the ComfyUI template allows precision or cache changes, verify quality, speed, and memory with those settings. Simply adding memory capacities across GPUs or offloading does not imply the same runtime path or processing time. Look for a completed run on your hardware; without evidence, first test shorter motion and lower resolution rather than upgrading.</p></section><section><h2>Save a short result and review appearance and motion together</h2><p>For the first test, run a short segment, save the final video file, and play it. Seeing an intermediate preview does not verify the saved file. Check whether face and clothing remain consistent with the reference, whether the wave follows the source motion, and whether the opening and ending cut off abruptly.</p><p>The ComfyUI template can also join 81-frame motion-transfer blocks into a longer video. A successful block does not establish continuity across the full sequence. If a join looks awkward, save and compare the blocks around the point where it changes instead of extending the whole sequence; adjust the reference image or description for appearance issues and the relevant segment for continuity issues.</p></section><figure><img src="https://localai.co.kr/guides/wan-animate-2-local-video-guide-scene-3.webp" alt="A film strip linked by a dotted arrow beside a display with a moving ball and play icon" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Save and review a short file before joining motion blocks to extend it.</figcaption></figure><section><h2>Evaluate the workflow including generation, saving, and review</h2><p>For frequent revisions of short clips, check whether repeated runs reach a saved output; for a long sequence, account for joining blocks. Do not choose hardware from the time for one generation alone—include input selection, playback review, revisions and regeneration, and file saving.</p><p>The site’s video interface simulates differences in hardware waiting time; it is not a measured speed or quality evaluation of Wan-Animate-2. Do not compare results from another text-to-video model as if they were this model’s results. Increase resolution and duration one at a time on a supported path. Without a verified hardware example, do not buy based only on server-class A800 figures; test a shorter, lower-resolution path first.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Explore estimated video-generation wait times</h2><p>Explore differences in estimated waiting across hardware; these are not measured Wan-Animate-2 times.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Wan-Animate-2 takes a character reference image and a video containing motion, then applies that motion to the appearance in the image to create a new clip. Save the result, play it to check continuity in face, clothing, and movement, and extend duration only after a short segment works.</dd></div><div><dt>How much memory does it need?</dt><dd>The 14B parameter count alone does not determine VRAM needs. Reference images, video frames, intermediate data, output size, and runtime batching use memory in addition to weights. The repository says its default 720p setup was configured on eight A800 GPUs and 480p was tested on two A800 GPUs. Do not treat these server examples as guarantees for one consumer GPU.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Transcribe Korean recordings on your own computer with whisper.cpp</title><link>https://localai.co.kr/en/guides/offline-korean-transcription-whisper-cpp</link><guid isPermaLink="true">https://localai.co.kr/en/guides/offline-korean-transcription-whisper-cpp</guid><description>A practical path from one Korean recording to a reviewed local transcript, then to a sensible hardware decision.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Transcribe Korean recordings on your own computer with whisper.cpp</h1><p>Transcribe a Korean recording locally with whisper.cpp</p><p id="guide-page-summary">whisper.cpp takes an audio recording and converts speech to text. For Korean, choose a multilingual model rather than an English-only .en model, process it on your computer, and compare the transcript with the recording to verify names, numbers, and dates. Complete one file first, then measure both processing and review time across your recurring work to decide whether new hardware is needed.</p><p>Instead of replaying an entire meeting to find a person or date, a transcript lets you search for a word and return to that part of the audio. Treat it as an index for finding where to listen again, not as a summary that replaces the recording. A search for “Friday” may find a misheard weekday, and finding “estimate” does not verify its number or unit; check those in the audio.</p><p>For example, imagine searching a weekly Korean meeting for lines such as “Share the Haesol draft by Friday” and “I will recheck the estimate.” This is an illustrative scenario for explaining transcription and review. Record how long file preparation, audio processing, and checking important phrases against the recording take to decide whether the workflow is worthwhile.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>For Korean recordings, choose a multilingual model without .en in its name.</li><li>Transcribe one file, compare it with the original audio, then time the recurring workflow.</li><li>Decide whether to buy a GPU only after checking model loading and actual wait time.</li></ol></section><section><h2>Choose a multilingual model for Korean speech</h2><p>Files with similar names, such as base and base.en, can support different languages. A file with .en is English-only, so use a multilingual model such as base, small, or medium for a meeting that includes Korean. First take a five-minute segment from a typical recording and test it with small. Choose reference terms such as “Haesol,” “Friday,” and the estimate amount to check names and dates as well as ordinary sentences.</p><p>This short segment helps screen candidates; it does not guarantee accuracy across a long meeting. If proper names are repeatedly wrong, compare a larger multilingual model such as medium using the same audio and reference phrases. A larger model may need more storage and runtime memory, so also determine whether errors are limited to a particular company name and whether a person can review them.</p><ul><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">What is a local LLM? From installation and PC specifications to model selection and speed checks</a></li><li><a href="https://localai.co.kr/en/guides/apple-neural-engine-local-ai-guide">Can a Mac Neural Engine run local AI? GPU, MLX, and ANE roles</a></li></ul></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-1.webp" alt="A flow from a recorder through an audio waveform on a laptop to a printed transcript" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the transcript to locate passages, then verify names, numbers, and dates in the audio.</figcaption></figure><section><h2>Build the program, prepare a model, and transcribe a first file</h2><p>With the whisper.cpp repository ready, run these commands in its folder. The first two build the program; the last downloads multilingual small weights and may require internet access. For build errors, check the official repository's tools and executable paths for your OS.</p><p>In an environment that prohibits external uploads, prepare the weights first and then verify that the local command works under its network-isolation policy. This guide does not claim to have verified every part of the setup offline. Before using a recording that contains personal information, check whether the audio and transcript are stored in a synchronized folder and whether the app or tools connect externally.</p><p>For a first setup, prepare Git, CMake and your OS's C++ build tools. The first two lines below fetch the official repository and enter it. Use Xcode Command Line Tools on macOS, a C++ compiler on Linux, or the repository's Visual Studio and CMake path on Windows. Run the model-download script in a Bash-capable environment when following this shell example.</p><div><p><strong>Build whisper.cpp and prepare the multilingual small model</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
cmake -B build
cmake --build build -j --config Release
sh ./models/download-ggml-model.sh small</code></pre><p><small>Build the repository and download a multilingual model for Korean.</small></p></div><ul><li><a href="https://github.com/ggml-org/whisper.cpp#quick-start">whisper.cpp initial setup and OS-specific builds</a></li></ul></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-2.webp" alt="Audio and documents lead to a locked computer, with an X on the path to a cloud" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate model preparation from audio processing and verify the path against network policy.</figcaption></figure><section><h2>Run on a supported WAV file and inspect the result</h2><p>The official quick-start example uses 16 kHz, mono, 16-bit WAV audio. Once your recording is in that format, the command below uses -m for the model file, -f for the recording, -l ko for Korean, and -otxt and -of transcript for the text output format and name. When it finishes, compare transcript.txt with the recording and check the important passages.</p><div><p><strong>Transcribe Korean WAV audio to a text file</strong></p><pre><code data-guide-code-block="2-0">./build/bin/whisper-cli -m models/ggml-small.bin -f recording.wav -l ko -otxt -of transcript</code></pre><p><small>Process the prepared recording locally, then inspect transcript.txt.</small></p></div></section><section><h2>For MP3 or phone recordings, listen to the converted file first</h2><p>A file-opening failure is different from a speech-recognition error. You can convert MP3 to 16 kHz, mono, 16-bit WAV with the example below, then run transcription again. Renaming the extension to .wav does not change the audio format. Play the converted file to check that its duration is preserved and voices are still audible before comparing transcripts.</p><p>If a participant's voice is present on only one of two channels, check that it remains after converting to mono. Changing model size will not fix a playback or path error during file preparation. Starting with a representative segment makes it easier to locate whether the issue is the build, file path, or conversion.</p><div><p><strong>Convert MP3 to the WAV format used by the whisper.cpp example</strong></p><pre><code data-guide-code-block="3-0">ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le recording.wav</code></pre><p><small>Convert the audio to 16 kHz mono PCM WAV, then play it back to verify.</small></p></div></section><section><h2>Review names, numbers, and dates against the recording</h2><p>Do not paste a fluent-sounding transcript straight into meeting minutes. First flag company names, numbers, dates, and negations. Find the corresponding audio and listen again to see whether text was added without support or an important phrase was omitted. Long pauses and overlapping speakers can make a plausible sentence difficult to verify. If the speaker is unclear, mark it for review instead of guessing a name.</p><p>In a review sheet, place the reference phrase, transcript, and corrections confirmed against the audio side by side. Include human review time to distinguish time saved by transcription from added verification effort. When sharing externally, label whether the text is an unchecked draft or a human-reviewed record. Retain the source recording so passages can be checked again.</p></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-3.webp" alt="A transcript marked with waveform and edits proceeds through review into a clean document" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Select important phrases in the automatic transcript and verify them against the audio.</figcaption></figure><section><h2>Measure processing and review time on your device before buying</h2><p>On Apple Silicon you can use whisper.cpp's Metal path; for NVIDIA GPUs, choose a build with CUDA enabled. A GPU name alone cannot predict processing time for an hour-long recording. Model size, actual speech duration and silence, and runtime settings all matter. Run the same five-minute audio repeatedly with small, separate the first-run time from later runs, and record time spent correcting names and numbers. This is an observation for that recording and setup, not a performance guarantee for a full meeting or another device.</p><p>Record audio preparation, model execution, error review, and time until the transcript is ready to share as separate stages. LLM token-generation speed is not a proxy for speech-recognition throughput. If your current computer handles weekly files and leaves time for review, an LLM speed chart alone is not a reason to buy a GPU for audio. Compare hardware after confirming that waiting delays recurring work or that a larger model actually reduces important corrections on the same recording.</p></section><aside><h2>Choose hardware based on speech-processing results</h2><p>Compare configurations for speech and other local AI tasks.</p><a href="https://localai.co.kr/en/guides/local-llm-hardware">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>whisper.cpp takes an audio recording and converts speech to text. For Korean, choose a multilingual model rather than an English-only .en model, process it on your computer, and compare the transcript with the recording to verify names, numbers, and dates. Complete one file first, then measure both processing and review time across your recurring work to decide whether new hardware is needed.</dd></div><div><dt>How much memory does it need?</dt><dd>This short segment helps screen candidates; it does not guarantee accuracy across a long meeting. If proper names are repeatedly wrong, compare a larger multilingual model such as medium using the same audio and reference phrases. A larger model may need more storage and runtime memory, so also determine whether errors are limited to a particular company name and whether a person can review them.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Granite 4.2 at home: choose between 3B, 8B and 30B</title><link>https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice</link><guid isPermaLink="true">https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice</guid><description>Choose among IBM Granite 4.2's three sizes by task, usable memory and the cost of the whole setup.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Granite 4.2 at home: choose between 3B, 8B and 30B</h1><p>Start with Granite 4.2 3B and choose a size from real answers</p><p id="guide-page-summary">IBM Granite 4.2's 3B, 8B, and 30B are dense reasoning models that take questions and produce text answers. Rather than choose a configuration from the size number alone, start with 3B on a familiar task such as return inquiries, check for missed conditions, and compare memory and hardware only if a larger model actually reduces errors.</p><p>Customer support answers need the return deadline and conditions about opening and included parts. Send the same inquiries to all three sizes and compare omissions. Keep the original questions and policy text when trying a larger model.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Start by testing real questions with 3B and record errors and missed conditions.</li><li>For tool-using tasks, check the runtime and tool connection as well as model size.</li><li>128K context support does not mean every device can process long documents comfortably.</li></ol></section><section><h2>All three sizes are dense reasoning models</h2><p>IBM's Granite 4.2 reasoning models come in 3B, 8B, and 30B sizes, and all use a dense architecture. They do not select only a subset of experts per input as an MoE model does; they use the dense parameter path. All three support thinking modes and tool calling and are released under the Apache 2.0 license. Shared feature support does not mean memory needs or suitability for your inquiries are identical, so test each model.</p><p>For an initial comparison, ask each model to find the return deadline, opened-item status, and accessory condition and answer in one or two sentences. Give the same source and questions to 3B, 8B, and 30B; record whether each required condition is omitted or unsupported details are added. Keeping this small task fixed reveals differences that matter to the work rather than differences in model names or response speed.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-harness-local-model-guide">DeepSeek Harness: the agent harness that runs 1017</a></li><li><a href="https://localai.co.kr/en/guides/lfm3-1-7b-local-agent-guide">LFM3-1.7B: a 1.1 GB agent model on a Mac</a></li></ul></section><figure><img src="https://localai.co.kr/guides/granite-4-2-3b-8b-30b-local-choice-scene-1.webp" alt="Cubes and block stacks of different sizes represent models in front of a monitor and computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check shared features of 3B, 8B, and 30B separately from their differences on real inquiries.</figcaption></figure><section><h2>Test 3B first with questions your team actually asks</h2><p>Ask the model to find return deadlines and conditions in a short policy, and prepare ten questions reflecting the wording your team actually uses. For each answer, mark whether a required condition is missing or an unsupported claim was made. Korean is among the languages listed as tested in IBM's model card, but this does not verify your internal product names, abbreviations, or legacy policy wording.</p><p>If the model interprets an internal phrase such as “accessory set” as a different item, include the phrase in several questions and see whether the mistake repeats. A support agent should compare the cited evidence directly with the policy source. If 3B consistently captures required conditions with little correction, there may be no need to move to a larger model. Save the questions and reference answers to reuse with the next candidate if results are unclear.</p></section><figure><img src="https://localai.co.kr/guides/granite-4-2-3b-8b-30b-local-choice-scene-2.webp" alt="A workflow from model answers through tests and evidence checks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Review 3B against the same reference questions and record any missing conditions.</figcaption></figure><section><h2>Check the model and runtime together for tool-using workflows</h2><p>IBM describes additional agent-task training for 8B and 30B, including tool use for code editing, terminal commands, and search. For a returns inquiry, first identify whether the flow breaks while finding evidence, summarizing key points, or drafting a response. Tool-use training does not automatically connect a model to a customer-support application, so inspect each stage's input and output.</p><p>The runtime must support the model's chat template and tool-call format, and it needs separate permission to access search or ticket-writing tools. Give the same inquiry to 8B and 30B; check that calls use a format the runtime understands and that the resulting evidence appears in the answer. A model proposing tool use and a runtime actually performing a search are distinct stages.</p></section><section><h2>For 30B, account for runtime memory beyond the weights</h2><p>At two bytes per BF16 weight, 30 billion weights require 30,000,000,000×2=60,000,000,000 bytes, about 60 GB. A simple four-bit calculation gives about 15 GB. Both figures are theoretical lower bounds for weights alone, not the total runtime memory required by the model.</p><p>Runtime use also includes format metadata, buffers, a KV cache that grows with context, the operating system, and other apps. Therefore, the fact that a four-bit file can be opened on a 24 GB device does not show that long inquiry documents will fit comfortably. Choose the actual model file, runtime, and inquiry length, then test the full path from retrieval to completed answer with your usual apps open. CPU offloading may allow a run to finish while making it slow, so also inspect memory use, logs, time to first token, and completion time.</p></section><section><h2>128K and 512K inputs need more memory and processing</h2><p>IBM lists a default 128K context and extension to 512K. Long inputs require supported extension settings and memory headroom. A short return policy can be supplied in full; long files mixing multiple policies also process irrelevant text, potentially delaying the first answer.</p><p>Longer input means more tokens to process before the first answer and affects KV-cache use. If you need to find opening, accessory, and time-limit conditions across pages, compare sending the full document with retrieving only relevant passages. Retrieval can reduce context but may miss an exception, so confirm that selected passages contain the evidence a support agent needs. Keep questions and reference passages fixed, and record time to first token separately from answer generation to guide changes to input scope and runtime settings.</p></section><figure><img src="https://localai.co.kr/guides/granite-4-2-3b-8b-30b-local-choice-scene-3.webp" alt="Cubes of different sizes alongside a checklist for evaluating a purchase" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate the listed 128K/512K context from practical input and memory headroom.</figcaption></figure><section><h2>Compare models, quantization, and modes on the same inquiries</h2><p>Granite 4.2 offers thinking, non-thinking, and low-effort modes that think briefly. Finding a condition in one policy sentence differs from handling an inquiry with several exceptions. Keep the model and questions fixed while changing only the mode, and compare both whether the answer preserves key conditions and how long it takes.</p><p>A BF16 original and a four-bit conversion do not have identical memory or quality characteristics. Converted files can differ by publisher and quantization method, so do not infer answer quality or a speed multiplier from the filename. Record model ID, file format, runtime, context length, thinking mode, and the same ten inquiries so you know which condition changed. Then you can investigate whether quality or time changed because of quantization, mode, or runtime settings.</p></section><section><h2>Compare hardware when it reduces recurring work errors</h2><p>If 3B handles short inquiries but repeatedly misses combined conditions, use the same questions to check whether 8B reduces those errors. If a real tool-using workflow stops at 8B and 30B improves evidence and results, then evaluate the memory configuration that model needs. If differences among the three models do not change the outcome of support work, the case for larger hardware is not clear.</p><p>In the final comparison, record model ID, file format, runtime, context length, mode, question set, and answers that needed correction. If you identify whether the gap is Korean terminology, tool calling, or long context, revising policy wording or retrieval may be better than replacing hardware. Do not treat general device-speed charts as Granite 4.2-specific measurements; choose hardware after verifying that a larger model reduces a recurring failure in your actual work.</p><ul><li><a href="https://localai.co.kr/en/guides/llm-quantization">What changes with quantization formats</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Understand VRAM and unified memory</a></li><li><a href="https://localai.co.kr/en/guides/local-coding-ai-choose-by-workflow">Choose coding AI for your workflow</a></li></ul></section><aside><h2>Distinguish model files from runtime memory</h2><p>Review memory headroom based on the model file and context length you tested.</p><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>IBM Granite 4.2's 3B, 8B, and 30B are dense reasoning models that take questions and produce text answers. Rather than choose a configuration from the size number alone, start with 3B on a familiar task such as return inquiries, check for missed conditions, and compare memory and hardware only if a larger model actually reduces errors.</dd></div><div><dt>How much memory does it need?</dt><dd>IBM's Granite 4.2 reasoning models come in 3B, 8B, and 30B sizes, and all use a dense architecture. They do not select only a subset of experts per input as an MoE model does; they use the dense parameter path. All three support thinking modes and tool calling and are released under the Apache 2.0 license. Shared feature support does not mean memory needs or suitability for your inquiries are identical, so test each model.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>IBM's Granite 4.2 reasoning models come in 3B, 8B, and 30B sizes, and all use a dense architecture. They do not select only a subset of experts per input as an MoE model does; they use the dense parameter path. All three support thinking modes and tool calling and are released under the Apache 2.0 license. Shared feature support does not mean memory needs or suitability for your inquiries are identical, so test each model.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-27B release: Can it run on a 32 GB system?</title><link>https://localai.co.kr/en/guides/qwen-3.8-27b-release-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-3.8-27b-release-local-guide</guid><description>An overview of the open-weight Qwen3.8-27B model's 27B dense architecture, Q4 memory needs, 256K context, image and video input, and MTP from the perspective of choosing local hardware.</description><content:encoded><![CDATA[<header><p>New model · 2026-09-04</p><h1 id="guide-page-title">Qwen3.8-27B release: Can it run on a 32 GB system?</h1><p>Read code and screenshots together with Qwen3.8-27B: Q4 memory and runtime requirements</p><p id="guide-page-summary">Learn how to test the model with code and an error screenshot, then decide whether its Q4 file and context memory fit your hardware.</p><p>Qwen3.8-27B is a 27B dense model that accepts text, images, and video and returns explanations or code as text. For example, you can send a failing function together with a screenshot and ask for the cause and a fix. To decide whether it is useful for your work, compare its result with your current model on the same task, then check whether your hardware can handle the required context and answer length.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>This dense model uses all 27B parameters for each token and has a native context of 262,144 tokens.</li><li>A Q4 file is roughly around 17 GB, but actual inference needs additional memory for cache and the runtime.</li><li>Check whether image/video input and MTP are supported by the specific model file, conversion, and runtime combination.</li></ol></section><section><h2>Compare the new model on the same coding problem</h2><p>Select the function that fails on empty input and the code that calls it. Ask for the cause, a minimal fix, and whether the return format stays the same. Sending the same code range to each model reduces differences caused by the input itself.</p><p>Once the text request works, add an error screenshot and ask which line caused the problem. Send the same function, error description, and requested scope to your current model and Qwen3.8-27B. Use project tests to check whether both suggestions preserve empty-input behavior and the calling code. This comparison identifies the actual problem before you change hardware.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-dense.webp" alt="A 27B dense model represented by uniform memory modules connected across one compute board" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A dense model needs room for all weights as well as sufficient memory bandwidth.</figcaption></figure><section><h2>Separate parameter count, file size, and runtime memory</h2><p>27B is the model's parameter count. BF16 weights and Q4 conversions differ in precision and file size, so check the actual format and size of the download. Q4 is described as roughly around 17 GB, but sizes vary by conversion format and file. The original Qwen model card lists the 27B parameter count and BF16 checkpoint; each quantization card lists the actual files for that runtime format.</p><p>Multiplying 27B by 4 bits and dividing by 8 gives 13.5 GB as a raw-weight arithmetic estimate. Actual Q4 files include block scales, extra information, and component differences, so their file size may not match that calculation. The 7 GB left after subtracting about 17 GB from 24 GB of VRAM is not all available for the KV cache; the runtime, operating system, and other GPU work also use memory.</p><p>On a PC with a discrete GPU, VRAM and system RAM are separate; on a Mac, CPU, GPU, the operating system, and apps share unified memory. Processing a short function requires less than reading a large repository alongside a browser and editor. A 32 GB label alone does not establish that a long context will run.</p><ul><li><a href="https://huggingface.co/Qwen/Qwen3.8-27B">Official Qwen3.8-27B model card</a></li><li><a href="https://huggingface.co/mlx-community/Qwen3.8-27B-4bit">MLX 4-bit converted model card</a></li><li><a href="https://huggingface.co/ggml-org/Qwen3.8-27B-GGUF">GGUF quantized file list</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-workstation.webp" alt="A high-memory compact computer and a graphics-card desktop on a workstation by a window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave runtime memory for context and other apps in addition to the Q4 file.</figcaption></figure><section><h2>Check maximum context and option support with the actual model file</h2><p>The native context limit is 262,144 tokens. When examining code, start with the function and its caller, then add the repository files you need while recording input tokens, time to first token, and memory use. Separating prefill time from decode time helps identify both the context size your task needs and its bottleneck.</p><p>To test MTP, use a converted model that includes the relevant weights together with a runtime that supports them. Save a baseline generation, enable MTP, and send the same request. Check the runtime log for activation, then compare the two results for speed and code-test behavior.</p><p>When adding a screenshot, verify that the image is actually included in the request and record its result separately from the text baseline. Passing the text-only test first makes it easier to isolate whether a difference comes from the file, vision input, or runtime.</p></section><figure><img src="https://localai.co.kr/guides/release-qwen38-27b-multimodal.webp" alt="Photos, diagrams, and long documents spread beside a local workstation" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check memory needs and runtime support when sending images or video.</figcaption></figure><section><h2>Decide whether your current hardware can handle the task</h2><p>Send the same function and error description to your current model and Qwen3.8-27B, then verify the suggested code with your project's tests. If the current model already preserves the return format and empty-input behavior, there is little reason to change hardware for the new model. Consider more memory or a different system only if Qwen3.8-27B repeatedly gives more useful fixes and your current setup cannot handle the required input.</p><p>Hardware speed estimates are reference values for comparing prefill and answer-generation stages with the same Q4 file and input length. If you already own a system, test with the same file and request, and record the app, context, and other open programs. If your current setup gives you the answers you need, you do not need to upgrade.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare Qwen3.8-27B generation speed</h2><p>Review prefill and answer generation with Q4 on a 32 GB GPU.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Learn how to test the model with code and an error screenshot, then decide whether its Q4 file and context memory fit your hardware.</dd></div><div><dt>How much memory does it need?</dt><dd>Multiplying 27B by 4 bits and dividing by 8 gives 13.5 GB as a raw-weight arithmetic estimate. Actual Q4 files include block scales, extra information, and component differences, so their file size may not match that calculation. The 7 GB left after subtracting about 17 GB from 24 GB of VRAM is not all available for the KV cache; the runtime, operating system, and other GPU work also use memory.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>27B is the model's parameter count. BF16 weights and Q4 conversions differ in precision and file size, so check the actual format and size of the download. Q4 is described as roughly around 17 GB, but sizes vary by conversion format and file. The original Qwen model card lists the 27B parameter count and BF16 checkpoint; each quantization card lists the actual files for that runtime format.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-Flash-Next: why 6B active still needs 180B resident</title><link>https://localai.co.kr/en/guides/qwen-3.8-flash-next-release-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-3.8-flash-next-release-local-guide</guid><description>Distinguish between Qwen3.8-Flash-Next's 180B resident weights, 6B active MoE, 51B PLE table and 4B MTP, and illustrate the feasibility of DGX Spark and 256GB equipment.</description><content:encoded><![CDATA[<header><p>New model · 2026-09-04</p><h1 id="guide-page-title">Qwen3.8-Flash-Next: why 6B active still needs 180B resident</h1><p>Run Qwen3.8-Flash-Next locally: MoE, PLE, MTP, and memory</p><p id="guide-page-summary">Qwen3.8-Flash-Next is a MoE model that generates answers from code or documents. It chooses expert paths for the request, computing with about 6B parameters per token. The full configuration totals about 180B: a 125B core LM, 51B PLE component, and 4B MTP component. How those weights are placed in memory and SSD storage affects hardware suitability and response speed.</p><p>For a shared code-review server, decide where the full weights will reside and how required data will be read. Consider full-memory loading separately from a configuration that reads PLE tables from an SSD.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 125B core LM, 51B PLE tables, and 4B MTP add up to roughly 180B.</li><li>Moving data to RAM or SSD can reduce pressure on high-speed memory, but may add transfer latency.</li><li>Treat the single-DGX-Spark path as an experimental setup using an NVFP4 checkpoint and PLE SSD offload.</li></ol></section><section><h2>6B describes the computation used for each token</h2><p>An MoE model selects some expert paths to compute the next token for a given input. About 6B active parameters describe the amount involved in computation for each token. A later token may need different experts, so the runtime must be able to access the full set of selectable weights.</p><p>The published configuration consists of a roughly 125B core LM, about 51B in PLE tables, and about 4B in MTP. Together they make roughly 180B; PLE and MTP are components of that total, not separate models to add on top. Estimating the load size from 6B would therefore miss much of the weight set that must be prepared.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-qwen38-flash-archive.webp" alt="A workshop with some modules active under work lights beside a wall of large weight stores" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even with about 6B computed per token, the runtime needs access to the roughly 180B configuration.</figcaption></figure><section><h2>PLE offload and MTP serve different purposes</h2><p>If the full data set does not fit in GPU memory, a supported runtime path may place PLE tables in RAM or on SSD and fetch the needed portions. This reduces what must stay in high-speed memory, but adds data lookup and transfer, so check feasibility separately from response wait time.</p><p>MTP concerns token generation, not storage placement. It proposes candidate next tokens for the main model to verify. Check PLE SSD offload and MTP support separately in the runtime.</p><p>A request that first reads data from SSD may wait differently from one whose data remains cached. Record first and repeated requests separately, along with runtime logs and cache state, to evaluate conditions closer to the team's normal use.</p></section><figure><img src="https://localai.co.kr/guides/release-qwen38-flash-memory-tiers.webp" alt="A large-model loading bench divided into accelerator, system-memory, and storage tiers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Moving PLE data to RAM or SSD reduces high-speed memory pressure but adds fetch time.</figcaption></figure><section><h2>A single DGX Spark is an experimental path that needs specific files and a patch</h2><p>The single-Spark example used a 128 GB machine with a specific NVFP4 checkpoint and a mmap patch for PLE SSD offloading. Reproducing it means preparing the checkpoint, patch, and runtime together. See the serving recipe for commands.</p><p>DGX Spark's 128 GB unified memory is shared by CPU and GPU. Moving data from the GPU side to host RAM does not increase physical memory, and pages read from SSD may occupy that same memory when cached. Account for the space used together by weights, KV cache, runtime, and operating system.</p><p>To check reproducibility, inspect settings and logs to confirm that the intended NVFP4 file was opened and PLE lookups use the NVMe mmap path through the patch. Merely preparing the file or running a command does not show that the path was applied. Restart the server, test the same request, and check whether the configuration can be restored before judging its operational suitability.</p></section><section><h2>Two nodes change capacity and response speed in different ways</h2><p>Splitting the model across two nodes can make room for a configuration that is difficult to place on one machine. Distributed execution adds communication between nodes, however, so a single answer does not become faster in proportion to the node count. Measure concurrent request throughput separately from the completion time of one request.</p><p>Keep model files, quantization, MTP settings, input length, and concurrent request count as similar as possible. Recording both single-request completion time and the number of requests completed in the same interval helps show whether two nodes solved a capacity problem or changed throughput.</p></section><figure><img src="https://localai.co.kr/guides/release-qwen38-flash-dual-node.webp" alt="Two matching compact AI computers connected by a short high-speed cable" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Two nodes can split the model, but communication means a single response does not speed up in proportion to node count.</figcaption></figure><section><h2>Compare the experimental path and daily server with real team requests</h2><p>If the goal is to test an NVFP4 checkpoint and PLE mmap patch, the single-Spark path may be useful as an experiment. For daily team requests, also check whether updates preserve the patch, whether the service recovers after clearing cache or restarting, and whether the first request's SSD wait is acceptable.</p><p>For 256 GB-class systems, do not rely on total capacity alone; check how the chosen runtime places the full weights and concurrent-request cache. Then run the same frequent coding questions through the current model and compare whether suggested fixes pass tests, along with first-response and completion times. Consider it an operational candidate when the weights can be accessed and the wait and maintenance burden fit the team.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>View single-Spark run conditions</h2><p>Review estimated prefill and decode ranges with PLE SSD offload.</p><a href="https://localai.co.kr/en/speed?hardware=nvidia-dgx-spark-128gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=16384&amp;accel=ple_ssd">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen3.8-Flash-Next is a MoE model that generates answers from code or documents. It chooses expert paths for the request, computing with about 6B parameters per token. The full configuration totals about 180B: a 125B core LM, 51B PLE component, and 4B MTP component. How those weights are placed in memory and SSD storage affects hardware suitability and response speed.</dd></div><div><dt>How much memory does it need?</dt><dd>If the full data set does not fit in GPU memory, a supported runtime path may place PLE tables in RAM or on SSD and fetch the needed portions. This reduces what must stay in high-speed memory, but adds data lookup and transfer, so check feasibility separately from response wait time.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4: choosing 12B or 26B-A4B for your hardware</title><link>https://localai.co.kr/en/guides/gemma-4-release-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gemma-4-release-local-guide</guid><description>Focusing on the 12B dense type and 26B-A4B MoE of the Gemma 4 open weight model, we explain multimodal input, 256K context, Q4 memory, and 16GB·24GB equipment selection.</description><content:encoded><![CDATA[<header><p>New model · 2026-09-04</p><h1 id="guide-page-title">Gemma 4: choosing 12B or 26B-A4B for your hardware</h1><p>Choose Gemma 4 for the way it handles images and documents together</p><p id="guide-page-summary">Gemma 4 is a family of open-weight models that handles text and image or audio inputs. You can provide a machine warning-light photo and its manual and ask for inspection steps, but the chosen app and model file must support passing the image through.</p><p>The family includes E2B, E4B, 12B, 26B-A4B, and 31B sizes, with context up to 256K. This guide uses the 12B dense and 26B-A4B MoE models for a photo-and-manual task to show how to check input delivery and memory conditions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 12B model is dense; 26B-A4B is an MoE with about 4B of its roughly 26B active per token.</li><li>16 GB is a starting point for 12B Q4; 24 GB or more is a starting point to examine 26B-A4B Q4.</li><li>The roughly 24 GB official 12B source weights and a desktop Q4 file are different formats.</li></ol></section><section><h2>Bring the photo and manual together in one question</h2><p>If a machine shows a warning light, provide its photo and the relevant manual section, then ask what indicator is visible and what inspection order the manual specifies. Check that the response distinguishes what appears in the image from the manual's procedure.</p><p>First send only the manual text and check whether the model finds the needed procedure. Then add the photo and test whether the app passes image input to the model. Family-level image and audio support does not ensure that every size, converted file, and runtime combination handles those inputs. If the response behaves as though it received text only, inspect the input path.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/xing4-local-coding-guide">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-gemma4-multimodal.webp" alt="A camera, microphone, and headphones beside a laptop and compact computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The smaller Gemma 4 models are worth examining for document, image, and audio input on laptops and compact desktops.</figcaption></figure><section><h2>Dense and MoE models differ in weights and computation</h2><p>The 12B dense model uses its full model path to compute a token. The roughly 26B MoE activates about 4B per token. The active count describes computation for that token, not the full file size; later tokens may need other experts, so the runtime needs access to the full weights.</p><p>The roughly 24 GB official 12B source-weight figure is not the size of a desktop Q4 conversion. The storage precision and file format differ. Check the actual file size and allow additional runtime space for the KV cache, which depends on context, and other runtime needs.</p><p>A rough calculation assuming only raw 4-bit weights is parameter count × 4 ÷ 8. In decimal GB, that gives 6 GB for 12B and 13 GB for 26B, but these are not actual download sizes or runtime memory. Block metadata and scales, components stored at other precisions, vision input, and runtime needs are not included.</p></section><figure><img src="https://localai.co.kr/guides/release-gemma4-dense-moe.webp" alt="A model showing a single continuous compute unit beside a larger unit with multiple expert modules" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the 12B dense and 26B-A4B MoE by separating total weights from per-token active computation.</figcaption></figure><section><h2>On 16 GB, start by testing 12B Q4 with your usual apps</h2><p>A 16 GB-class system is a starting point for examining 12B Q4. Whether it loads depends on the file, runtime, and other programs sharing memory. Begin with a short manual excerpt and one request, then try the same question with your usual browser and document apps open. A Mac's unified memory is shared by CPU, GPU, operating system, and apps.</p><p>The same 16 GB figure means different things for discrete-GPU VRAM and Mac unified memory. A PC has separate system RAM, but display output or other GPU work may use some VRAM; on a Mac, CPU and GPU share unified memory. Before changing models, use the runtime's display and logs to see which memory is constrained.</p></section><figure><img src="https://localai.co.kr/guides/release-gemma4-hardware-choice.webp" alt="A slim laptop and a desktop with large ventilation openings side by side on a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>On 16 GB-class systems, start testing 12B Q4; at 24 GB or more, try 26B-A4B Q4 with the actual input.</figcaption></figure><section><h2>At 24 GB or more, compare 26B-A4B using the same photo</h2><p>At 24 GB or more, 26B-A4B Q4 is a starting point for comparison. Give both candidates the same photo and manual section, and check whether each correctly identifies the visible indicator and the document's inspection steps. Do not judge by a longer response or larger model name alone; define the required answer criteria first.</p><p>Record the model file and app, manual excerpt, whether the image reached the model, and which evidence each answer missed. If one candidate never received the image, the result does not compare model sizes. A larger candidate is worth examining when the input path is consistent, 12B repeatedly misses an important condition, and the runtime has memory headroom.</p><p>The model is an assistant for finding information in photos and manuals. It does not replace diagnosis or repair decisions, so verify safety-related steps against the manufacturer's manual and a responsible person's judgment.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Try the Gemma 4 12B starting point</h2><p>Check input processing and response speed for 12B Q4 on a 24 GB unified-memory system.</p><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-24gb&amp;model=gemma-4-12b&amp;quant=Q4_K_M&amp;context=4096">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Gemma 4 is a family of open-weight models that handles text and image or audio inputs. You can provide a machine warning-light photo and its manual and ask for inspection steps, but the chosen app and model file must support passing the image through.</dd></div><div><dt>How much memory does it need?</dt><dd>A rough calculation assuming only raw 4-bit weights is parameter count × 4 ÷ 8. In decimal GB, that gives 6 GB for 12B and 13 GB for 26B, but these are not actual download sizes or runtime memory. Block metadata and scales, components stored at other precisions, vision input, and runtime needs are not included.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GLM-5.3 and DeepSeek-V4: open weights, but for a personal PC?</title><link>https://localai.co.kr/en/guides/server-scale-open-weight-models-2026</link><guid isPermaLink="true">https://localai.co.kr/en/guides/server-scale-open-weight-models-2026</guid><description>Using GLM-5.3-Flash 320B and DeepSeek-V4-Flash-0731 304B, this guide explains the difference between open weights and personal local inference, active parameters, distributed loading, and the conditions for running compressed conversions.</description><content:encoded><![CDATA[<header><p>New model · 2026-09-04</p><h1 id="guide-page-title">GLM-5.3 and DeepSeek-V4: open weights, but for a personal PC?</h1><p>What you need for a team server using large open-weight models</p><p id="guide-page-summary">GLM-5.3-Flash and DeepSeek-V4-Flash are large open-weight models whose weights can be downloaded to generate text answers to questions and code on your own server. A team-operated deployment needs memory for the full weights, hardware and a runtime supporting parallel execution, and server settings to receive requests.</p><p>If you want a team server that does not send code to an external service, distinguish the availability of weights from practical execution on your hardware. Check the model files, accelerators and runtime needed for distributed execution, and whether you can operate requests from multiple users.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>GLM-5.3-Flash is described as about 320B total and 18B active; DeepSeek-V4-Flash-0731 as about 304B total and 13B active.</li><li>A 256 GB unified-memory run is a separate experiment using a compatible compressed conversion, not the official server path.</li><li>Prioritize actual inputs, concurrency, model files, and parallel execution conditions over maximum context.</li></ol></section><section><h2>Your team manages data and access on its own server</h2><p>Running a model on an organization-managed server without connecting an external inference service lets code and documents be processed internally. Local here includes both personal PCs and team-managed servers. Match memory and runtime so the server can access and compute with the full model weights.</p><p>When you manage the server, the team also owns access scope, logs, and permissions. Read each model's license for the planned use and assign responsibility for updates, file storage, and incident response. An occasional personal setup and an always-on multi-user server have different model needs and operational responsibilities.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/xing4-local-coding-guide">Run Xing4.0 Locally: Install the Coding Model and Plan GPU Memory</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-release-local-guide">Qwen3.8-27B release: Can it run on a 32 GB system?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-release-local-guide">Qwen3.8-Flash-Next: why 6B active still needs 180B resident</a></li></ul></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="An open server fitted with four large accelerators and thick power and cooling cables" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose memory and server configuration for the weight size and concurrent request volume.</figcaption></figure><section><h2>Active parameters and total weights are different quantities</h2><p>GLM-5.3-Flash is listed at about 320B total with 18B active; DeepSeek-V4-Flash-0731 at about 304B total with 13B active. MoE models select some experts for each token, so the active count is smaller than the total. Other tokens or requests may select different experts, so the runtime needs access to all weights.</p><p>With a simplified assumption that all weights are raw 4-bit values, decimal arithmetic gives 160 GB for GLM's 320B and 152 GB for DeepSeek's 304B. These are not measured file sizes or runtime memory. The calculation omits block metadata, mixed precision, KV cache, and runtime space, so check the actual compressed file and execution conditions.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-sharding.webp" alt="A distributed-loading model with four groups of model modules connected to compute devices" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A large MoE needs a path that splits weights and gathers results from the experts selected for each token.</figcaption></figure><section><h2>Check the parallel execution requirements of official checkpoints</h2><p>Official checkpoints may assume a runtime that distributes weights across accelerators and exchanges results between nodes during computation. The official DeepSeek-V4-Flash-0731 example uses 4×GB300 nodes. This is not an installation recipe for one consumer GPU, so first check the server and parallel-execution requirements in the model card.</p><p>Matching the accelerator count alone does not reproduce the same run. Weight partitioning, per-card memory, node interconnect, and the parallel path supported by the runtime must also align. Check that your hardware supports the configuration and that the required software path is available before following the launch command.</p></section><section><h2>A 256 GB unified-memory experiment is a separate compressed-model path</h2><p>A 256 GB unified-memory system may make it possible to test a compatible compressed conversion, but this is not the official checkpoint's server path. The operating system, apps, and conversation cache also use unified memory, and being able to store a file does not prove that the chosen runtime can execute that conversion.</p><p>First check the experiment file's format and size and whether the same model has been run with that app and runtime version. Test loading and a basic response with a short request, then increase to the code or document length the team will actually use. A very long maximum context does not need to be the default. Increasing input gradually helps locate failures in loading, context, or cache.</p></section><figure><img src="https://localai.co.kr/guides/release-server-model-scale.webp" alt="A compact computer in a workshop with several accelerator racks visible beyond a doorway" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Q4 conversions versus official checkpoints, and personal use versus server operation, require different hardware scales.</figcaption></figure><section><h2>Choose the scale that matches the team's operational goal</h2><p>If the goal is to serve internal requests from multiple users continuously, and data control or throughput matters, evaluate an accelerator server together with a maintenance plan. Incident response, updates, model-file storage, and concurrent-request handling are part of the cost. If one person only asks about documents or code occasionally, a smaller model can test the value of a local setup first.</p><p>Send the same repository questions to the current and candidate models, then compare code-review usefulness, single-request completion time, and the number of concurrent requests handled. Data control, quality, and operating cost are different criteria and cannot be replaced by one speed figure. Choose a server and model that match the weights actually needed and the team's maintenance capacity.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>View DeepSeek-V4 hardware conditions</h2><p>Check estimated Q4 memory and which listed systems may fit the model.</p><a href="https://localai.co.kr/en/models/deepseek-v4-flash">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>GLM-5.3-Flash and DeepSeek-V4-Flash are large open-weight models whose weights can be downloaded to generate text answers to questions and code on your own server. A team-operated deployment needs memory for the full weights, hardware and a runtime supporting parallel execution, and server settings to receive requests.</dd></div><div><dt>How much memory does it need?</dt><dd>With a simplified assumption that all weights are raw 4-bit values, decimal arithmetic gives 160 GB for GLM's 320B and 152 GB for DeepSeek's 304B. These are not measured file sizes or runtime memory. The calculation omits block metadata, mixed precision, KV cache, and runtime space, so check the actual compressed file and execution conditions.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Official checkpoints may assume a runtime that distributes weights across accelerators and exchanges results between nodes during computation. The official DeepSeek-V4-Flash-0731 example uses 4×GB300 nodes. This is not an installation recipe for one consumer GPU, so first check the server and parallel-execution requirements in the model card.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local AI speed report — September 2026</title><link>https://localai.co.kr/en/guides/monthly-local-ai-speed-2026-09</link><guid isPermaLink="true">https://localai.co.kr/en/guides/monthly-local-ai-speed-2026-09</guid><description>As of September 2026, we compare the prefill and token generation speeds of major Macs, NVIDIA GPU, DGX Spark, and AMD integrated memory equipment under the same conditions.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Local AI speed report — September 2026</h1><p>Compare September device speeds with the same model and input</p><p id="guide-page-summary">The monthly local AI speed table compares prefill, token generation, and total completion time across hardware using the same model and input. The September 2026 table uses Qwen3.6 35B-A3B at 4-bit, 4,096 input tokens, and 302 output tokens. Explore hardware according to which waiting stage you want to shorten.</p><p>For example, when reading a code repository and asking for a short fix suggestion, the model processes the input before generating an answer. Tokens per second mainly describe generation, so a higher figure does not mean the repository is read faster or the request finishes first.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Compare using Q4 quantization and the same input length.</li><li>Prefill, decode, and total completion are different intervals.</li><li>Keep model and input conditions fixed when comparing two devices.</li></ol></section><section><h2>Check the model and input fixed in this month's table</h2><p>The September table compares devices using Qwen3.6 35B-A3B 4-bit, 4,096 input tokens, and 302 answer tokens. Since changing input or output length changes the wait profile, this is not a ranking of peak records but a way to narrow candidates under one assumed task.</p><p>The figures are estimates based on hardware specifications and benchmark adjustments, not direct measurements of every device with the same request. Use them to see which stage may favor a device under the same assumptions.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/prefill-can-reverse-speed-ranking">Long prompts can reverse a local LLM speed ranking</a></li></ul></section><figure><img src="https://localai.co.kr/guides/monthly-local-ai-speed-workbench.webp" alt="A workbench for checking several local AI devices under the same conditions." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare using the same model, quantization, and input length.</figcaption></figure><section><h2>Check that the model loads with room for context</h2><p>Even if weights barely load, insufficient room for context cache, runtime, OS, and other apps can prevent the table's task from running as configured. The labeled capacity of Mac unified memory or NVIDIA VRAM is not all available to the model.</p><p>35B-A3B is an MoE model. Even if only some experts compute each token, the runtime path must be able to access the full weights, so do not treat it as a small model based only on active parameters. Do not generalize this comparison to other models; first check whether your chosen file and context length fit.</p></section><section><h2>Separate first-token wait from answer generation</h2><p>For a long repository and short answer, input processing and time to first token may matter most. A long code review also depends on decode after the first text appears. Do not treat prefill time, TTFT, generation rate, and completion time as interchangeable.</p><p>For illustration, assuming 302 output tokens at 50 tokens per second gives about 6.04 seconds of generation; at 100 tokens per second it is about 3.02 seconds. This assumes a constant rate, excludes model loading and queues, and is not a device measurement. Input processing before the first token adds to total time.</p><p>If the app reports input tokens, record the count and compare it with the 4,096-token baseline. If not, send the same file, instruction, and conversation context to both candidates and note the input used. File size alone does not reveal token count.</p></section><figure><img src="https://localai.co.kr/guides/monthly-local-ai-speed-lanes.webp" alt="Two lanes separate prompt prefill from answer decoding." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Long-input processing and continued answer generation are distinct stages.</figcaption></figure><section><h2>Read monthly comparisons alongside feature support</h2><p>This table is a calculated record saved on September 5, 2026. When comparing it with later tables, check that model, precision, input and answer lengths, and runtime match. Changed conditions can affect rankings, so read older figures with their dates.</p><p>No blanket MTP multiplier was applied. Multi-device configurations are estimates assuming a supported runtime splits the model. They do not apply unchanged to paths without MTP or model-splitting support, so check feature-specific conditions.</p><p>For a direct comparison, start with the same Q4 file and 4,096-token input, and record first-token time, generated length, and completion separately. If you change the input or runtime next, note that condition so you can identify what changed the result.</p></section><figure><img src="https://localai.co.kr/guides/monthly-local-ai-speed-lineup.webp" alt="A Mac, single- and dual-GPU systems, and a compact AI system line up on a workbench." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>More devices and memory do not scale single-request speed and throughput by the same ratio.</figcaption></figure><section><h2>Compare the remaining two candidates with your workflow</h2><p>If you send long requests many times daily, decode differences may be noticeable. For a single repository read and short answer, prefill and model loading may matter more. Keep model and input length fixed in the comparison and inspect total flow and generation separately.</p><p>Site figures are estimated experiences. Before buying, repeat runs with the model file and runtime you plan to use and check fit and answer quality. Consider whether the wait interrupts work to decide if a more expensive device's advantage merits the cost.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare two devices side by side</h2><p>Change device and model to compare from prefill through answer completion.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The monthly local AI speed table compares prefill, token generation, and total completion time across hardware using the same model and input. The September 2026 table uses Qwen3.6 35B-A3B at 4-bit, 4,096 input tokens, and 302 output tokens. Explore hardware according to which waiting stage you want to shorten.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Long prompts can reverse a local LLM speed ranking</title><link>https://localai.co.kr/en/guides/prefill-can-reverse-speed-ranking</link><guid isPermaLink="true">https://localai.co.kr/en/guides/prefill-can-reverse-speed-ranking</guid><description>This guide explains, from a hardware-selection perspective, why decode rankings in short chats can differ from prefill and end-to-end completion rankings for long documents.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Long prompts can reverse a local LLM speed ranking</h1><p>For long documents, generation and completion rankings can differ</p><p id="guide-page-summary">A language model takes text, processes its content, and then generates an answer. A device with twice the decode rate can still finish a summary later if it waits longer before the first token on a long document. Using a 16K meeting record and 300-token answer, this guide adds prefill wait and generation time to compare completion.</p><p>When summarizing meeting notes in a few paragraphs, the user's wait lasts until the final sentence appears. It includes both the wait before the first token while the model reads the document and the time to generate the summary. Tokens per second, commonly shown in device tables, describes generation after the answer begins—not total completion time.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Decode tok/s describes generation after the first answer token.</li><li>With long inputs, prefill and TTFT can take a larger share.</li><li>Perceived rankings can change with input and answer length, even for the same devices.</li></ol></section><section><h2>For a short question, the faster decoder finishes first</h2><p>Assume the same model produces an answer of about 300 tokens. Hypothetical device A takes 4 seconds to first token and then generates at 60 tok/s; B takes 6 seconds and generates at 30 tok/s. These are assumptions for illustrating the calculation, not product measurements.</p><p>Generation alone takes about 5 seconds for A (300÷60) and 10 seconds for B (300÷30). Adding first-token wait gives about 9 seconds for A and 16 for B, so A finishes first on this short task. Even with twice the generation speed, total completion is not exactly half.</p><p>This illustrative calculation assumes a constant token rate and excludes model loading and queueing. First-token wait is added separately from decode speed.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/monthly-local-ai-speed-2026-09">Local AI speed report — September 2026</a></li><li><a href="https://localai.co.kr/en/guides/specprefill-ttft-guide">SpecPrefill: reducing the wait before the first token</a></li></ul></section><figure><img src="https://localai.co.kr/guides/finding-prefill-long-input.webp" alt="A stack of long documents leads through first-token wait to a stream of answer tokens." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A long input can extend pre-answer wait even with fast decoding.</figcaption></figure><section><h2>For a long input, prefill wait can reverse the ranking</h2><p>Keep the same model and 300-token answer, but use a 16K meeting record. In this hypothetical example, time to first token is 40 seconds for A and 10 seconds for B; generation still takes 5 seconds for A and 10 for B. Total time is about 45 seconds for A and 20 for B, so B finishes first despite A's twice-faster generation.</p><p>Prefill is the stage in which the model processes a long input. TTFT covers the whole wait for the first token, including prefill, queuing, and execution preparation. The calculation changes only TTFT to 40 and 10 seconds to show how total completion time changes with a longer input.</p><p>The hardware did not change; the input length of the compared task did. A can lead on a short question while B finishes a long meeting record first.</p><table><caption>Input waiting time can change which device finishes first even with unchanged generation speeds.</caption><thead><tr><th scope="col">Workload</th><th scope="col">Illustrative device A · 60 tok/s</th><th scope="col">Illustrative device B · 30 tok/s</th></tr></thead><tbody><tr><th scope="row">Short input · about 300 output tokens</th><td>4 s + 5 s = about 9 s</td><td>6 s + 10 s = about 16 s</td></tr><tr><th scope="row">16K input · about 300 output tokens</th><td>40 s + 5 s = about 45 s</td><td>10 s + 10 s = about 20 s</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/finding-prefill-ranking-reversal.webp" alt="A race shows different devices leading with short and long inputs." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Generation rankings for short chats may differ from completion rankings for long documents.</figcaption></figure><section><h2>Match answer length and cache state too</h2><p>If you only ask for dates and owners, the short answer makes first-token wait a large share of total time. A long draft extends the generation stage, so decode differences continue to matter. Comparison prompts should therefore match both the source document and expected answer length.</p><p>Separate a meeting record opened for the first time from one already processed. A repeated request with cached input can have a different processing profile from the first request. Keeping a process running and reusing an input cache are also distinct conditions, so record them separately.</p></section><figure><img src="https://localai.co.kr/guides/finding-prefill-workload-shapes.webp" alt="Side-by-side tasks show short-input/long-output and long-input/short-output workloads." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Input and answer lengths determine whether to focus on prefill or decode.</figcaption></figure><section><h2>Compare devices by completion time for your workload</h2><p>In the comparison view, select both 4K and a 16K input closer to your usual documents while keeping the model fixed. Review estimated end-to-end flow including prefill, then compare with generation-only to see which wait causes the difference. Account for different recommended formats or acceleration settings across devices.</p><p>Before buying, if possible, run the model file and runtime you plan to use with your meeting-note input and answer length. Record first-token time, completion, and generated token count separately to distinguish estimates from measurements.</p><p>Even while A remains at 60 tok/s and B at 30 tok/s, a longer first-token wait at 16K can change the end-to-end ranking. If A leads on your real 16K task and preserves the decisions you need, that may justify a purchase. If your current device finishes on time with adequate quality, a higher ranking alone may not justify the expense.</p><ul><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=16384&amp;mode=full">Compare completion times with 16K input</a></li></ul></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare waits for 16K input</h2><p>Compare prefill and token generation with the same model and input.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=16384&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A language model takes text, processes its content, and then generates an answer. A device with twice the decode rate can still finish a summary later if it waits longer before the first token on a long document. Using a 16K meeting record and 300-token answer, this guide adds prefill wait and generation time to compare completion.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What actually improves when you connect two DGX Sparks?</title><link>https://localai.co.kr/en/guides/dual-dgx-spark-what-actually-improves</link><guid isPermaLink="true">https://localai.co.kr/en/guides/dual-dgx-spark-what-actually-improves</guid><description>Distinguish between model load, single request creation rate, and multiple request throughput for one and two DGX Spark configurations.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">What actually improves when you connect two DGX Sparks?</h1><p>Two DGX Spark systems add memory and room for concurrent work</p><p id="guide-page-summary">With two DGX Sparks, you can split a large model across the machines or let each one handle different requests. The appropriate setup depends on whether the model fits on one machine and how many people will use it at once.</p><p>Consider model splitting if one machine lacks enough memory, or replication if requests from several people create a long queue. These approaches assign different jobs to the machines. First check which setups the runtime supports, then compare performance for the problem you want to solve.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Memory across two nodes can hold a larger model when the runtime supports distributed loading.</li><li>Partitioning one request adds communication and synchronization between nodes.</li><li>Aggregate throughput can benefit when separate requests can be routed to model replicas.</li></ol></section><section><h2>Identify why a second system is needed</h2><p>If one system lacks enough available memory for the weights and conversation KV cache, a supported runtime can partition the model across two nodes. The first benefit is running a model that would not fit on one node, not necessarily generating an answer faster.</p><p>Each Spark is specified with 128 GB, for 256 GB nominally across two systems. This does not create one 256 GB device in the application. The runtime must distribute weights and cache and exchange results between nodes. If components or workspace are concentrated on one node, that node can run out first even when aggregate memory remains; check per-node use and placement during execution.</p><p>If the model fits on one unit, first define what the second unit should do. The setup differs depending on whether you split one answer across two nodes or replicate the model to handle separate requests.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/finding-dual-spark-capacity.webp" alt="Illustration contrasting model capacity and processing paths with one and two DGX Spark systems" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Distributed loading may help fit a larger model; replication may help distribute multiple requests.</figcaption></figure><section><h2>Partitioning one answer adds communication to computation</h2><p>Splitting a model can reduce the computation assigned to each node, but intermediate results must be transferred for the next step and the nodes must synchronize. A single user's answer gets faster only if the saved compute time outweighs communication and waiting.</p><p>Placing earlier and later layers on different nodes differs from splitting computation within a layer: the timing and volume of data exchange change. That is why network bandwidth or device specifications cannot simply be added to predict single-response speed. Prefill for a long input and token-by-token decode also have different patterns, so one phase's figure does not describe an entire document task.</p></section><figure><img src="https://localai.co.kr/guides/finding-dual-spark-sync.webp" alt="Illustration of two AI nodes exchanging computation results and synchronizing" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Model partitioning requires inter-node communication and synchronization, so device performance does not simply add up.</figcaption></figure><section><h2>Match comparison conditions to isolate the configuration difference</h2><p>When you see a claim that two systems were faster, check whether the model file, quantization, runtime version, MTP setting, input length, and concurrency were held constant. If only the two-system setup used a different quantization or MTP, the result may compare real purchase configurations, but it does not isolate the effect of adding one system.</p><p>Run two comparisons: first use shared settings to isolate node count and model partitioning; then apply each system's practical optimized settings. Record the model file and format, input/output conditions, time to first token, and completion time. Mark any option available on only one side as a configuration difference.</p><p>Also verify packages for Spark's ARM64 environment, a supported QSFP cable, inter-node communication settings, and that the program recognizes the partitioned execution path. Without these checks, an unsupported setup can be confused with the inherent cost of two-node communication.</p></section><section><h2>With multiple requests, replication and partitioning behave differently</h2><p>If a model fits on one system, identical copies can be placed on both nodes. If the scheduler sends request A to one and request B to the other, the systems may serve different users concurrently. The relevant measures then include completed requests over time and queueing, not just the speed of one answer.</p><p>By contrast, when request A is partitioned across two nodes, both nodes work together on A. Do not assume request B will automatically be assigned independently to a free node. Partitioning a model that cannot fit on one system and replicating a model to distribute requests solve different problems.</p><p>Time to first token, generation speed, and multi-request throughput are distinct metrics. Aggregate throughput can improve while an individual request or the longest-waiting user still sees delay. A single-request comparison does not replace a concurrent-load test.</p></section><figure><img src="https://localai.co.kr/guides/finding-dual-spark-throughput.webp" alt="Server illustration of two AI nodes distributing and processing multiple requests concurrently" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Throughput for multiple requests may improve when model replication and request routing are supported.</figcaption></figure><section><h2>Decide what work the second system will handle</h2><p>If one system cannot fit the desired model and cache, a second Spark may expand what you can run. If the required model already works well and single-user waits are acceptable, consider whether another system has enough work to justify its connection and management overhead. Actual request queues or a need for a larger model provide a concrete reason.</p><p>Diagnose the stage of the bottleneck. If loading fails, inspect memory placement and supported paths. If the model loads but long inputs or concurrent requests wait too long, check what partitioning, replication, or request scheduling features are available. Then compare the target model and runtime directly.</p><p>The source comparison tool estimates the experience of one versus two Spark systems with Qwen3.8 27B and a 4K input. Recommended formats and acceleration can differ by device, and this is not a concurrent-load test. Toggle whether prefill is included to inspect one user's wait, then measure the actual target configuration before buying.</p></section><aside><h2>Compare one and two Sparks with 27B</h2><p>An estimated experience with the same model and 4K input. Check the format and acceleration recommended for each setup, and switch prefill on or off.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-dgx-spark-128gb&amp;right=nvidia-dual-dgx-spark-256gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>With two DGX Sparks, you can split a large model across the machines or let each one handle different requests. The appropriate setup depends on whether the model fits on one machine and how many people will use it at once.</dd></div><div><dt>How much memory does it need?</dt><dd>Each Spark is specified with 128 GB, for 256 GB nominally across two systems. This does not create one 256 GB device in the application. The runtime must distribute weights and cache and exchange results between nodes. If components or workspace are concentrated on one node, that node can run out first even when aggregate memory remains; check per-node use and placement during execution.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Why a 35B MoE can be faster than a smaller dense model</title><link>https://localai.co.kr/en/guides/why-moe-can-be-faster-than-dense</link><guid isPermaLink="true">https://localai.co.kr/en/guides/why-moe-can-be-faster-than-dense</guid><description>By distinguishing between total and active parameters, we describe the combinations and memory conditions under which large MoE models are generated faster than small Dense models.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">Why a 35B MoE can be faster than a smaller dense model</h1><p>35B MoE and 27B Dense differ in computation per token.</p><p id="guide-page-summary">MoE selects only some experts for computation. A model with 35B total and about 3B active weights is large to store but can reduce per-token work. Hardware that executes this path efficiently can produce combinations where it generates faster than a smaller 27B Dense model.</p><p>Let's compare two models fixing a function that fails on an empty string. Giving both the same code and request lets you compare first response and generation speed. Including the time until tests pass shows which model helps more with your coding task.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Total size informs loading requirements; active size informs per-token computation.</li><li>Routing, memory placement, and kernel efficiency affect speed.</li><li>For coding assistants, compare time until the tests pass too.</li></ol></section><section><h2>MoE computes only selected expert paths.</h2><p>Dense uses most weights in each layer for a new token. MoE routes the token to selected experts and shared components. With 35B total and about 3B active, a smaller part of the full model participates for that token. A larger total model can therefore do less per-token work.</p><p>If the runtime supplies selected weights quickly and processes expert operations efficiently, less work becomes higher decode speed. Routing and irregular data access also cost time, so examine actual results on the same hardware.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/finding-moe-expert-drawers.webp" alt="A workshop processing tokens with only some expert-weight drawers open" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The full model is retained while some experts compute each token.</figcaption></figure><section><h2>Prepare a setup that can access all weights.</h2><p>The next token may select different experts. The runtime must be able to access all weights, so check the actual distribution size and quantization. Leave room for KV cache, the runtime, editor, and browser to compare under your usual working conditions.</p><p>A model entirely in VRAM and one partly offloaded to RAM have different data paths. Offloading expands the runnable size but adds transfer time. Record filenames and placement to understand reduced computation alongside data movement.</p></section><figure><img src="https://localai.co.kr/guides/finding-moe-active-compute.webp" alt="Dense paths through all blocks compared with MoE paths through selected experts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A smaller active size can reduce computation per token.</figcaption></figure><section><h2>Compare the first response with the same code and input conditions.</h2><p>Send the same function, related callers, and error logs to both models. Specify the scope, such as handling empty input safely while preserving the return format. Start each from the same baseline commit or copy rather than the first model's modified files, and keep logs and diffs separately.</p><p>Record model files, quantization, runtime, thinking mode, input, output limit, and concurrency. Separate prefill from decode and record time to first token and total completion. Tokenization differs by model, so compare tok/s alongside task completion time.</p><p>For a personal coding assistant, start with one request. For a team server, separately test concurrent requests: different inputs can select different experts and change memory access and scheduling. Record each user's latency as well as aggregate throughput.</p></section><figure><img src="https://localai.co.kr/guides/finding-moe-memory-speed.webp" alt="Selected expert paths within a large memory cabinet" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Secure enough loading capacity, then compare speed on your actual coding task.</figcaption></figure><section><h2>Record time until the fix passes its tests.</h2><p>Test empty and normal inputs and existing callers. Check that the return format is preserved and the error is fixed. If tests fail, send the logs to the same model, review the revised diff, and rerun the tests. Including that follow-up time shows whether your task actually became faster.</p><p>The site's comparison screen lets you keep the hardware and input length while switching between 35B MoE and 27B Dense. Recommended formats and acceleration can differ by model, so use it to explore the setups you would actually use. Then choose from candidates that fit with cache space and produce the required fix on your code.</p></section><aside><h2>Compare MoE and Dense on the same hardware</h2><p>Switch between 35B MoE and 27B Dense while keeping hardware and input length.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.6-35b-a3b&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MoE selects only some experts for computation. A model with 35B total and about 3B active weights is large to store but can reduce per-token work. Hardware that executes this path efficiently can produce combinations where it generates faster than a smaller 27B Dense model.</dd></div><div><dt>How much memory does it need?</dt><dd>For a personal coding assistant, start with one request. For a team server, separately test concurrent requests: different inputs can select different experts and change memory access and scheduling. Record each user's latency as well as aggregate throughput.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Choosing local LLM hardware: memory, speed and power</title><link>https://localai.co.kr/en/guides/local-llm-hardware</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-hardware</guid><description>We explain in what order you should look at VRAM and integrated memory, prefill, token generation speed, electricity costs and TCO when choosing local LLM equipment.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Choosing local LLM hardware: memory, speed and power</h1><p>Choose local LLM hardware by memory needs and acceptable wait</p><p id="guide-page-summary">A local LLM processes questions, documents, and code on your computer to generate answers. Hardware choice depends on memory capacity and response time. Start with your usual PDF and coding tasks on the current machine, identify bottlenecks, then compare two candidates.</p><p>If the model cannot load on the device, you have a capacity problem. If it loads and answers correctly but takes a long time before the first text, examine input-processing wait; if text arrives slowly after the answer begins, examine generation speed. If a quick answer gets the PDF date wrong or breaks code, first review the prompt or model. Adding a GPU does not automatically improve answer quality.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>First check whether model files, context, and runtime space fit available device memory.</li><li>Separate prefill, the wait for the first answer, from decode, the generation that follows.</li><li>Compare total cost by including power, depreciation, and required components with the purchase price.</li></ol></section><section><h2>Try both tasks on your current computer before buying</h2><p>If your goal is to find a renewal date and evidence in a 20-page work PDF and occasionally fix a function error, assess hardware by whether it can finish those tasks. You do not have to start by targeting the highest specifications capable of running every public model. Run the same PDF question and code request on your current computer. Check the date and evidence in the PDF answer, existing tests for the code edit, and record model name, quantization, and input length.</p><p>The important check differs by task.</p><table><caption>Choose what to check based on recurring tasks</caption><thead><tr><th scope="col">Workload</th><th scope="col">First result to verify</th><th scope="col">Measure if it becomes a bottleneck</th></tr></thead><tbody><tr><th scope="row">PDF summary and evidence retrieval</th><td>Whether the date and evidence passage match the source</td><td>First-answer wait for long input and memory headroom</td></tr><tr><th scope="row">Function bug fix</th><td>Whether the requested change passes tests</td><td>Generation time and amount of rework</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/local-llm-start">Start with a local LLM installation and first question</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">RTX 3090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/llmfit-local-model-fit-guide">llmfit: find the models your Mac can actually run</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p01-workload-choice.webp" alt="Document summarization, chat, and code generation lead to different hardware choices" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Defining recurring tasks and input/output length narrows memory and speed requirements.</figcaption></figure><section><h2>Loading a model file and completing the task need different memory</h2><p>Even after weights load into memory, the runtime needs working space and a KV cache for input and answers. Long documents require more context than a short greeting, and answer generation also needs space. A successful short prompt therefore does not establish that the same setup can process a 20-page PDF. Check the full path through model loading, document input, and answer completion.</p><p>A Mac's unified memory is shared with the operating system and apps, while a discrete GPU's VRAM is separate from system RAM. A 32 GB label on each does not mean the same amount is available exclusively to the model. If you plan to keep a browser and document editor open, leave room for them too. Do not assume all displayed memory can be assigned to the model; verify with the workload.</p><ul><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Understand the difference between VRAM and unified memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p01-model-fit.webp" alt="A cabinet illustrating whether model weights, KV cache, and runtime headroom fit in device memory" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave space for the operating system and KV cache in addition to the model files.</figcaption></figure><section><h2>Measure first-answer wait and answer generation separately</h2><p>A model can fit in memory and still be unpleasant to use if the wait is long. Time from document submission to the first answer is affected by prefill, which processes the input; time from the start of the answer to completion is affected by decode. Measuring them separately helps determine whether to reduce long input or seek a configuration with faster generation.</p><p>Use the site's speed-experience comparison to narrow candidates, then look for run records with conditions close to the model you will use. Matching model names alone is insufficient if quantization, input length, and runtime mode differ. Treat estimated experience as a starting point for exploration and keep it separate from measurements on your own documents.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Understand prefill and decode speed</a></li></ul></section><section><h2>With a 2–3 million won budget, first assess upgrades to your current PC</h2><p>Start by checking the GPU and VRAM in your current PC and whether the intended model and input fit. See whether you can add a graphics card alone. Check the power supply capacity and connectors, case length/thickness and slot clearance, supported RAM type and free slots on the motherboard, and SSD space for model files.</p><p>Separate quotes for upgrading the current PC and buying a new system, then compare like with like. Add the GPU and any required power supply, case, RAM, storage, or cooling costs to the upgrade option. Include the full PC or Mac and its memory/SSD options for a new system. For used GPUs, note warranty and return terms beside the price. Market listings are not final quotes, and components omitted from the TCO calculation must be added separately.</p><p>For a 2–3 million won budget, check whether both quotes fit and compare estimated wait with the same model, quantization, and input length. The example comparison URL uses RTX 3090 24 GB versus Mac mini M4 32 GB, Qwen 3.8 27B, and a 4096 context. Do not equate VRAM and unified memory by their numbers alone, and check whether your app supports CUDA or macOS. If both options exceed budget, first test with a smaller model or shorter input, identify the actual limit, and then quote again.</p><ul><li><a href="https://localai.co.kr/en?tab=market">View reference prices for standalone GPUs and complete systems</a></li><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-3090-24gb&amp;right=mac-mini-m4-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Compare estimated waits: RTX 3090 vs M4 32GB</a></li><li><a href="https://localai.co.kr/en?tab=tco">Calculate ownership cost from purchase, electricity, and depreciation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hardware-choice-tco.webp" alt="Unified-memory computers and single- or dual-GPU systems compared by memory, speed, power, and cost" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare memory and speed needs alongside power and purchase cost, not just device type.</figcaption></figure><section><h2>For hard-to-upgrade devices, size headroom around recurring tasks</h2><p>For hardware whose memory is difficult to upgrade later, list the task you do now and the next one you definitely plan to try, then check their memory needs. If you try a large model once a month but use a small document model on other days, decide whether that occasional experiment justifies sizing your daily device around it. A possible future use and a weekly recurring blockage are not the same reason to buy.</p><p>On the other hand, if each additional document hits the same limit and shortening the input removes necessary evidence, more memory may be required to finish the task. Record the document types and what you had to omit so you can resolve recurring problems without oversizing the next configuration.</p></section><section><h2>Make a final check of both candidates on the same task</h2><p>Once you have two candidates, keep the PDF and code prompts, model file, quantization, and input length from the initial test unchanged. Do not assume that a device with more memory finishes both tasks faster; check first-answer wait, generation speed, and task results together. Before buying, confirm that RAM, VRAM or unified memory, and SSD match the quoted product.</p><p>If your current computer completes both tasks correctly, keep using it. If memory runs short only when adding the PDF, look for a configuration that fits the model and context; if answers are correct but slow, compare configurations that actually accelerate the same model. If neither stage is blocked, you do not need to spend the remaining budget.</p></section><aside><h2>Narrow hardware options for your use case</h2><p>Answer six questions to define the memory and device type you need.</p><a href="https://localai.co.kr/en">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM processes questions, documents, and code on your computer to generate answers. Hardware choice depends on memory capacity and response time. Start with your usual PDF and coding tasks on the current machine, identify bottlenecks, then compare two candidates.</dd></div><div><dt>How much memory does it need?</dt><dd>Even after weights load into memory, the runtime needs working space and a KV cache for input and answers. Long documents require more context than a short greeting, and answer generation also needs space. A successful short prompt therefore does not establish that the same setup can process a 20-page PDF. Check the full path through model loading, document input, and answer completion.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Prefill vs decode: should you look at TTFT or tok/s?</title><link>https://localai.co.kr/en/guides/prefill-vs-decode</link><guid isPermaLink="true">https://localai.co.kr/en/guides/prefill-vs-decode</guid><description>For long-document summaries, start with prefill and TTFT; for long outputs, start with decode tok/s. This guide explains how the three metrics divide the wait.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">Prefill vs decode: should you look at TTFT or tok/s?</h1><p>Long inputs make TTFT matter; long answers make decode speed matter</p><p id="guide-page-summary">When you send code and an error description, an LLM first reads the input and then produces a review. The input-processing stage is prefill; the stage that generates answer tokens one by one is decode. The first answer appears after prefill, and the rest streams during decode.</p><p>Long code and error descriptions can increase the wait before the first answer. Asking for a detailed response can also lengthen the time the answer takes to stream. Even the same code review can have different waiting stages depending on input and output length. Understanding the two stages helps you compare the speed that matters for your work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Prefill processes input tokens and prepares the model to answer.</li><li>TTFT is the total time from sending a request until receiving its first output token.</li><li>Decode generates the answer tokens after the first token.</li></ol></section><section><h2>The model reads input before the first character appears</h2><p>A code-review request contains code, the error situation, and the scope of the answer you want. Before writing, the model processes the input as tokens and calculates relationships among them to prepare the state used for answering. This is prefill. Decode then generates answer tokens in sequence. Attaching multiple files increases input tokens and can delay the first answer.</p><p>For prefill comparisons, matching the actual input-token count matters more than matching file or line counts. Code tokenization varies, and an app may send only relevant files or include a wider portion of the repository. Checking the input length the review app actually sent makes processing speed easier to compare accurately.</p><ul><li><a href="https://localai.co.kr/en/guides/local-llm-start">Guide to installing a local LLM and choosing a model</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide">Nemotron Bolt vs Qwen3.8-27B: which is faster for agent work?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p02-prefill-decode-timeline.webp" alt="The prefill stage for processing long input is separated from decode after the first token." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Waiting for the first token and generating the answer afterward are separate stages.</figcaption></figure><section><h2>The wait for the first token is called TTFT</h2><p>TTFT (time to first token) is the time from sending a request until the first output token appears on screen. It can include app-side input preparation, queueing, tokenization, and runtime setup in addition to prefill. Prefill throughput measures how quickly input tokens are processed; TTFT measures the user’s wait from request to first token.</p><p>Use input tokens per second to compare prefill throughput, and TTFT to track the wait for the first answer. An app may not show queueing or preprocessing separately, so also record the time you measure until the first token appears on screen.</p><table><caption>What each metric measures in a code-review request</caption><thead><tr><th scope="col">Stage or metric</th><th scope="col">What happens</th><th scope="col">When the user waits</th></tr></thead><tbody><tr><th scope="row">Prefill</th><td>Processes input tokens and context to prepare an answer.</td><td>After sending code and error details, before the first token</td></tr><tr><th scope="row">TTFT</th><td>Total latency from the request to the first output token.</td><td>Until the first part of the answer appears</td></tr><tr><th scope="row">Decode</th><td>Generates output tokens in sequence after the first token.</td><td>While the answer continues appearing on screen</td></tr><tr><th scope="row">Completion time</th><td>The time until both pre-token latency and answer generation have finished.</td><td>Until the full review is complete</td></tr></tbody></table><ul><li><a href="https://docs.nvidia.com/dynamo/dev/reference/glossary">Official NVIDIA Dynamo glossary</a></li></ul></section><section><h2>Compare the streaming answer speed with decode</h2><p>The speed of answer generation after the first token is expressed in tokens per second (tok/s). For answers with the same token count, higher tok/s means less decode time. Korean character count does not map one-to-one to tokens, however, so tok/s alone cannot predict exact completion time.</p><p>If you ask for only one line about an error, the short output can make the wait for the first token feel more significant. Asking for fixes and evidence across several files produces a longer answer, which can take time to finish even if it starts quickly. The metric to prioritize depends on the answer length you need.</p></section><figure><img src="https://localai.co.kr/guides/p02-workload-shapes.webp" alt="A side-by-side comparison of long-input/short-output and short-input/long-output tasks." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Document summarization and writing or coding have different input/output balances and require different metrics.</figcaption></figure><section><h2>Calculate the time from first response to completion</h2><p>For example, if TTFT is 8 seconds, the answer is 500 tokens, and decode runs at 50 tok/s, generation takes 500÷50=10 seconds. Adding the wait for the first token gives about 18 seconds to completion. If prefill improvement reduces TTFT to 4 seconds, the estimate is about 14 seconds; at 100 tok/s decode it is about 13 seconds. Actual completion time combines pre-token latency with the remaining answer generation. These figures simplify the calculation and are not hardware measurements.</p><table><caption>Estimated completion time for a hypothetical 500-token answer</caption><thead><tr><th scope="col">Scenario</th><th scope="col">TTFT</th><th scope="col">Decode speed</th><th scope="col">Time to completion</th></tr></thead><tbody><tr><th scope="row">Criterion</th><td>8 sec</td><td>50 tok/s</td><td>About 18 sec (8+500÷50)</td></tr><tr><th scope="row">Prefill improvement</th><td>4 seconds</td><td>50 tok/s</td><td>About 14 sec (4+500÷50)</td></tr><tr><th scope="row">Decode improvement</th><td>8 sec</td><td>100 tok/s</td><td>About 13 sec (8+500÷100)</td></tr></tbody></table></section><section><h2>Repeated input and new input are handled differently</h2><p>When continuing the same code review, a prompt cache can reuse computed state for a repeated prefix and reduce TTFT. This is different from loading model files again from an SSD. Reuse depends on whether the cache remains available and how much of the question prefix matches.</p><p>SpecPrefill aims to reduce the amount the main model computes by selecting tokens to process from a long new input. A prompt cache reuses common input from an earlier request; SpecPrefill selects parts of new input to process. In code review, a skipped part could contain the cause of an error, so compare the answer with the original code to ensure necessary evidence remains.</p><p>A follow-up may include different document passages or more of the earlier conversation, so total input does not necessarily get shorter. Newly retrieved passages still need processing, while the cache may reuse a shared prefix. Record the document, question, document-processing method, model, and app version to make the result easier to reproduce.</p><ul><li><a href="https://arxiv.org/abs/2502.02789">SpecPrefill research paper</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p02-cache-hit.webp" alt="A comparison between processing input from scratch and reusing a saved cache." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match cache state to measure how reuse of shared input affects TTFT.</figcaption></figure><section><h2>Compare the waiting stages in your own work</h2><p>Keeping code and question fixed lets you distinguish a slow first answer from slow streaming. Run several trials under the same conditions, record TTFT and completion time separately, and mark whether each run is a first request in a new conversation or a follow-up with a warm cache.</p><p>In the comparison interface, you can vary input length or choose full mode versus decode-only mode. Full mode combines pre-token latency and answer generation; decode-only mode compares the streaming output rate. Displayed values are estimates for the selected conditions and may differ from running the same code in an actual app.</p><ul><li><a href="https://localai.co.kr/en?tab=speed">Speed comparison tool</a></li><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=16384&amp;mode=full">Hardware speed comparison</a></li></ul></section><aside><h2>Compare two devices with prefill included</h2><p>Compare first-token wait and answer-generation time with a 16K input.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?model=qwen-3.8-27b&amp;context=16384&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>When you send code and an error description, an LLM first reads the input and then produces a review. The input-processing stage is prefill; the stage that generates answer tokens one by one is decode. The first answer appears after prefill, and the rest streams during decode.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MTP: how multi-token prediction works and when to use it</title><link>https://localai.co.kr/en/guides/mtp-multi-token-prediction</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mtp-multi-token-prediction</guid><description>We explain how Multi-Token Prediction (MTP) proposes and verifies multiple future tokens, why you need a supporting model and runtime, and when it gets faster.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">MTP: how multi-token prediction works and when to use it</h1><p>MTP proposes future tokens and the main model verifies the matching span</p><p id="guide-page-summary">MTP prepares candidates for upcoming answer tokens and verifies multiple tokens together. Additional prediction heads propose candidates, and the main model incorporates the accepted consecutive sequence into the answer. Its speed depends on how well candidates match, so this guide compares it with standard generation on the same code modification request.</p><p>Suppose you request a code change that renames a function and handles empty input. Standard generation chooses a next token, then computes another token using that result. MTP prediction heads prepare likely future candidates so the main model can verify several positions together. Proposing three candidates does not mean all three appear in the answer.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>MTP refers both to a model training structure and an inference-acceleration path.</li><li>Both an MTP-weighted checkpoint and a supporting runtime are required.</li><li>Few accepted candidates or high verification cost can erase the speed benefit.</li></ol></section><section><h2>The main model accepts a matching consecutive span of candidates</h2><p>For example, if only the first of three candidates matches, it can be retained while the next two are discarded. The model continues from the mismatch instead of outputting rejected candidates, but proposing and checking them still used computation. If all three match in sequence, the main model may reduce some sequential steps.</p><p>A deeper proposal is therefore not always faster. Frequent mismatches increase discarded work, while frequently accepted consecutive candidates can reduce sequential computation. Compare completion time on the actual request rather than the number of proposed tokens.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/husky-woof-apple-silicon-inference">Husky on Mac: Woof, MLX and the 730 tok/s result</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-26b-a4b-serving-recipe">Gemma 4 26B-A4B MTP: How Speed Changes Between One and Many Requests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mtp-speculative-concept.webp" alt="The baseline one-token path is compared with a candidate-verification path." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Proposed tokens remain only when accepted by the main model.</figcaption></figure><section><h2>Check model files and runtime support before enabling a setting</h2><p>The checkpoint must retain MTP weights, and the runtime must support that structure. Conversion can remove prediction weights even from a model with the same name. Fix the file and quantization and check runtime version and supported paths so you can connect result changes to whether MTP was applied.</p><p>If enabling MTP changes nothing, inspect logs to distinguish a fallback to standard generation because of an incompatible checkpoint or runtime from a working MTP path with few accepted candidates. Keep a known-working model as a baseline while checking support, and avoid changing several files at once.</p></section><figure><img src="https://localai.co.kr/guides/p03-mtp-heads.webp" alt="Several future-token branches from the main model converge after verification." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prediction heads prepare future candidates for a verification batch.</figcaption></figure><section><h2>Compare before and after MTP on the same code edit</h2><p>First establish a baseline answer with MTP off using the same file, question, and request length. Then change only the MTP setting on the same model file. After warm-up, measure each state three times and compare medians; record model reload cost separately. Match conversation-cache state and other running apps across both tests.</p><p>First determine whether input processing or answer generation is slow. MTP primarily targets the generation stage. If the first answer is delayed after PDF retrieval or a long input, measure prefill and document delivery separately too.</p><p>Separate time to first token (TTFT), decode after that, and total completion. Calculate decode tok/s by dividing generated tokens after the first token by decode time; do not include loading or TTFT. Also check whether both answers contain a similar edit scope and token count.</p><p>Check the function name and call sites, empty-input error, and normal-input handling in the resulting code. Candidate-token verification does not test user requirements; if the edit is incomplete, reduced time is not faster completion of the same task.</p></section><figure><img src="https://localai.co.kr/guides/p03-acceptance-depth.webp" alt="Only the consecutively accepted prefix of proposed tokens enters the answer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>More consecutive accepted tokens can reduce sequential computation.</figcaption></figure><section><h2>When there is no speed benefit, adjust the failing stage</h2><p>If the path is active but decode time is unchanged, no benefit was observed for this request. For a delayed first answer after a long PDF, inspect prefill and retrieval; for memory errors, check input length and cache first.</p><p>If repeated tests show MTP reduces actual completion time and the code meets requirements, you may be able to keep using the current device. If MTP is unsupported or results are similar, do not base a purchase on advertised peak acceleration; first address the other stage interrupting your work.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare before and after MTP</h2><p>Review baseline decode and MTP estimates separately on a supported model.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MTP prepares candidates for upcoming answer tokens and verifies multiple tokens together. Additional prediction heads propose candidates, and the main model incorporates the accepted consecutive sequence into the answer. Its speed depends on how well candidates match, so this guide compares it with standard generation on the same code modification request.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</title><link>https://localai.co.kr/en/guides/lightning-mtp</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lightning-mtp</guid><description>How Lightning MTP proposes tokens for target verification and how to configure it. Separates oMLX 0.7.1rc1 Qwen3.8 and TurboQuant measurements from earlier development-release results.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</h1><p>Lightning MTP verifies candidate tokens together to reduce sequential generation steps.</p><p id="guide-page-summary">Lightning MTP is a generation path in oMLX for Apple Silicon that uses an MTP head in supported models to propose next-token candidates, then includes the consecutive candidates confirmed by the main model in the answer. Check that the checkpoint retains MTP weights, then compare first-token, generation, and completion times and answer quality with the same input used for standard generation.</p><p>When asking about a PDF, first distinguish a long wait before the first text appears from slow generation after the answer begins. Lightning MTP primarily targets the latter stage. Check document processing and initial model loading separately.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The draft path proposes candidate tokens, which the main model verifies.</li><li>The checkpoint and oMLX must be a supported combination. Check the runtime path in the logs.</li><li>The 1.5 to 2 times faster result in 0.7.1.dev1 came from file-editing tasks on an M3 Ultra.</li><li>Compare first-token latency, answer generation, total completion time, and output quality separately.</li></ol></section><section><h2>MTP prepares next-token candidates while an answer is being generated</h2><p>When an app that asks questions about PDFs connects to the oMLX API, oMLX runs the model and returns an answer. In standard generation, the model selects one next token, adds it to the context, and calculates the next token again. Multi-Token Prediction (MTP) uses an auxiliary prediction head trained with the model to propose several next-token candidates, which the main model checks in one pass. The main model includes consecutive candidates it confirms in the answer, discards candidates from the first mismatch onward, and continues with standard generation.</p><p>Proposing and checking candidates also requires computation. Models and requests that often accept proposed tokens can reduce sequential calculations, while a lower acceptance rate can reduce the savings. Compare total completion time and the answer for the same question instead of judging by draft depth alone.</p><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Mac Studio M3 Ultra 512GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/ngram-prompt-lookup">Prompt Lookup and n-gram speculative decoding explained</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p04-native-pipeline.webp" alt="MTP candidate generation and verification take place within a unified-memory chip." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Lightning MTP proposes and verifies candidate tokens on supported models.</figcaption></figure><section><h2>Prepare a checkpoint that retains MTP weights</h2><p>To choose a supported combination, check the version and architecture in the oMLX release model list. Review the file format in the checkpoint instructions and confirm that the converted file retains MTP-head tensors. Then check whether the model settings show an MTP option for that checkpoint.</p><p>For an initial comparison, keep a file that returns a normal answer with standard generation as your baseline, then add one supported MTP checkpoint. If the model does not load, check the file path, memory, and checkpoint format before changing MTP settings. If both standard and MTP versions of the same model are available, check for MTP tensors as well as file size.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">oMLX 0.7.1.dev1 release</a></li><li><a href="https://github.com/jundot/omlx">oMLX supported models and settings</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p04-checkpoint-support.webp" alt="The model file with added MTP weights is structurally different from one without them." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose a checkpoint that retains MTP tensors after conversion.</figcaption></figure><section><h2>The 0.7.1.dev1 result is a file-editing test on M3 Ultra</h2><p>The table gathers the file-editing scope and completion results reported in the development release published on October 9, 2026. It measures time to finish a request, so to see how it applies to your work, compare with matched model and input conditions as described below.</p><table><caption>Lightning MTP comparison reported in the 0.7.1.dev1 release</caption><thead><tr><th scope="col">Model families</th><th scope="col">Task and conditions</th><th scope="col">Release report</th></tr></thead><tbody><tr><th scope="row">Qwen · Gemma 4 · GLM-5.3 · MiMo</th><td>File editing · temperature 1.0 · M3 Ultra</td><td>Completion 1.5 to 2 times faster than standard generation</td></tr></tbody></table><p>To apply the result to your work, match the model and checkpoint, input, output length, and temperature. After a warm-up, alternate the same file-edit request between standard generation and MTP. Record total completion time and whether the resulting code meets the requirement. For PDF questions or short chats, test that workload directly instead of using file-edit results.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Original release measurements and version details</a></li></ul></section><section><h2>Generation gains with TurboQuant at longer contexts</h2><p>The 0.7.1rc1 release also improves the combination of a TurboQuant 4-bit KV cache and Lightning MTP. Qwen3.8-27B on M3 Ultra generated faster after 16K and 32K inputs. If you already use this model, this gives you a specific long-context configuration to compare.</p><table><caption>Qwen3.8-27B decode before and after on M3 Ultra</caption><thead><tr><th scope="col">Input length</th><th scope="col">Before</th><th scope="col">After</th></tr></thead><tbody><tr><th scope="row">16K</th><td>39.9 tok/s</td><td>68.8 tok/s</td></tr><tr><th scope="row">32K</th><td>39.0 tok/s</td><td>66.2 tok/s</td></tr></tbody></table><p>M3 Ultra · Qwen3.8-27B · TurboQuant 4-bit KV + Lightning MTP · maintainer measurements against the code immediately preceding each change · repetitions and full sampling settings are not specified in the release table</p><p>At 16K, the measured gain was about 29 generated tokens per second. For your own work, reuse one document and fix the response length, then measure time to first token and full completion separately. TurboQuant changes KV-cache representation while Lightning MTP changes candidate generation, so record both settings.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1rc1">0.7.1rc1 performance changes and conditions</a></li></ul></section><section><h2>Compare from first token through answer review with the same input</h2><p>If you test MTP with the PDF question introduced at the beginning, use the same file, page, and question. That workload differs from the file-editing results in the previous section, so measure a task you actually do. Time from document loading to the first token includes prefill and request wait; the rate of subsequent tokens shows generation. Also record total time through the final sentence. MTP changes the generation path, so track input-reading and initial model-loading time separately.</p><p>Run a warm-up for standard generation and MTP, then alternate three trials each and compare the medians to reduce the effect of brief background activity. Keep input-token count, answer length, temperature, KV-cache setting, and number of concurrent requests the same. Check that the answer preserves the evidence in the question. For a server handling several requests, measure one request and concurrent requests separately to see how load changes the results.</p><p>If generation remains slow with MTP enabled, inspect the selected Lightning MTP path, draft depth and acceptance behavior in the logs. If it falls back to ordinary generation, check the architecture and cache combination. If Lightning MTP runs with low acceptance, compare draft depth and checkpoints one at a time on the same request.</p></section><figure><img src="https://localai.co.kr/guides/p04-cache-compat.webp" alt="The MTP verification path connects to a compatible KV cache and falls back to standard generation when they do not match." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the cache combination and actual generation path in the logs.</figcaption></figure><section><h2>Check KV cache and batching conditions too</h2><p>The KV cache retains computed information about processed tokens for subsequent generation. Reuse of common input across separate requests depends on the server’s prefix-cache settings. When comparing MTP, record fresh conversations and follow-ups on the same document separately, matching input lengths and request order.</p><p>Concurrent requests change engine batching and memory use. To evaluate MTP on a server, first record a normal response and throughput baseline with one request. Then reproduce the actual concurrent-request pattern and compare errors and total throughput with the same inputs. Run this measurement with the model and checkpoint you use.</p><p>If MTP is consistently faster and answer quality holds, use that checkpoint with the corresponding oMLX version. If you change models often or the converted file lacks an MTP head, use standard generation as your baseline. Check the actual runtime path in the server log, and record before-and-after time and answer accuracy for the same request.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">All changes in oMLX 0.7.1.dev1</a></li></ul></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare generation time on your model</h2><p>Compare standard generation and a supported MTP path with the same input.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Lightning MTP is a generation path in oMLX for Apple Silicon that uses an MTP head in supported models to propose next-token candidates, then includes the consecutive candidates confirmed by the main model in the answer. Check that the checkpoint retains MTP weights, then compare first-token, generation, and completion times and answer quality with the same input used for standard generation.</dd></div><div><dt>How much memory does it need?</dt><dd>If you test MTP with the PDF question introduced at the beginning, use the same file, page, and question. That workload differs from the file-editing results in the previous section, so measure a task you actually do. Time from document loading to the first token includes prefill and request wait; the rate of subsequent tokens shows generation. Also record total time through the final sentence. MTP changes the generation path, so track input-reading and initial model-loading time separately.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run DFlash and DSpark with llama.cpp: A Qwen3-4B Walkthrough</title><link>https://localai.co.kr/en/guides/speculative-decoding</link><guid isPermaLink="true">https://localai.co.kr/en/guides/speculative-decoding</guid><description>Learn how to convert and run DFlash and DSpark drafts paired with a Qwen3-4B target in llama.cpp, verify the baseline server and responses, and compare performance.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Run DFlash and DSpark with llama.cpp: A Qwen3-4B Walkthrough</h1><p>DFlash and DSpark propose tokens for the main model to verify</p><p id="guide-page-summary">Speculative decoding is a generation method in which a smaller draft model proposes future tokens and the main model verifies them, accepting a matching consecutive span. With Qwen3-4B in llama.cpp, prepare a compatible DFlash or DSpark draft GGUF and compare them one at a time.</p><p>If a code-review answer is slow after it begins, generation is a useful stage to test. If the wait is long before the first text appears, PDF retrieval, input processing, or memory may be responsible; adding draft candidates alone may not reduce it.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>DFlash and DSpark require separate draft GGUFs matched to the Qwen3-4B target. MTP is a different path using supported heads in the main model.</li><li>Match draft candidate length to the trained block size and verify the actual value in logs.</li><li>Compare baseline and accelerated runs with the same greedy request, and inspect accepted tokens and completion time.</li></ol></section><section><h2>Verify a baseline server with Qwen3-4B first</h2><p>Send the same request to baseline and draft runs: edit one repository function and handle both empty and normal input. Check the diff and tests against the requested behavior. Draft proposals and multi-position verification also cost computation, so judge the result on the actual task.</p><p>Run these commands after preparing a llama.cpp build supporting the model and convert_hf_to_gguf.py in its source directory. From that directory, download the Hugging Face model, convert it to GGUF, and start the target server. Fix the baseline at 4,096 context tokens and one request. If the baseline does not answer, check the model path, build support, and memory first.</p><div><p><strong>Qwen3-4B server without a draft</strong></p><pre><code data-guide-code-block="0-0">hf download Qwen/Qwen3-4B --local-dir ./hf-models/Qwen3-4B
python convert_hf_to_gguf.py ./hf-models/Qwen3-4B --outfile ./models/Qwen3-4B.gguf --outtype bf16
llama-server -m ./models/Qwen3-4B.gguf --alias qwen3-4b --host 127.0.0.1 --port 8080 --ctx-size 4096 --parallel 1 --n-gpu-layers auto</code></pre><p><small>Prepare and convert the Hugging Face source, then launch the server. Check GPU placement in startup logs.</small></p></div><div><p><strong>Check readiness and send a short request</strong></p><pre><code data-guide-code-block="0-1">curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"qwen3-4b","messages":[{"role":"user","content":"Reply with one short sentence."}],"temperature":0,"max_tokens":64,"stream":false}'</code></pre><p><small>Check server readiness, then send a short prompt to test the baseline connection.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/ninfer-qwen38-nvidia-local-guide">Run Qwen3.8 Locally with NInfer: RTX 5090, MTP, and DFlash2</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p05-draft-target.webp" alt="A small draft model proposes tokens for a larger target model to verify together." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Only consecutive draft proposals verified by the target enter the answer.</figcaption></figure><section><h2>Choose DFlash or DSpark matched to the target</h2><p>In the official example, z-lab/Qwen3-4B-DFlash is paired with the Qwen/Qwen3-4B target. DFlash uses a block-diffusion draft; DSpark adds a Markov head to the draft structure. Do not substitute an arbitrary small model—use a draft trained for the target.</p><p>The commands assume both model source directories are already prepared. Keep the Qwen3-4B target fixed and attach one converted draft at a time. Example draft limits are 15 for DFlash and 7 for DSpark; the trained block size may impose a lower limit. Check the model card and conversion output for other models.</p><p>Run one server at a time for each comparison; they all use port 8080. Stop the baseline server with Ctrl+C in its terminal, then start DFlash. When it is ready, send the same prompt from another terminal and record the result.</p><p>Stop DFlash, then test DSpark in the same way. Download and convert both draft models before starting the servers.</p><div><p><strong>Attach DFlash or DSpark draft to the target</strong></p><pre><code data-guide-code-block="1-0">hf download z-lab/Qwen3-4B-DFlash --local-dir ./hf-models/Qwen3-4B-DFlash
python convert_hf_to_gguf.py ./hf-models/Qwen3-4B-DFlash --target-model-dir ./hf-models/Qwen3-4B --outtype bf16 --outfile ./models/Qwen3-4B-DFlash.gguf
# Stop the previous server with Ctrl+C before starting this one.
llama-server -m ./models/Qwen3-4B.gguf -md ./models/Qwen3-4B-DFlash.gguf --spec-type draft-dflash --spec-draft-n-max 15 -fa on --jinja --host 127.0.0.1 --port 8080 --ctx-size 4096 --parallel 1

hf download deepseek-ai/dspark_qwen3_4b_block7 --local-dir ./hf-models/dspark_qwen3_4b_block7
python convert_hf_to_gguf.py ./hf-models/dspark_qwen3_4b_block7 --target-model-dir ./hf-models/Qwen3-4B --outtype bf16 --outfile ./models/Qwen3-4B-DSpark.gguf
# Stop the previous server with Ctrl+C before starting this one.
llama-server -m ./models/Qwen3-4B.gguf -md ./models/Qwen3-4B-DSpark.gguf --spec-type draft-dspark --spec-draft-n-max 7 -fa on --jinja --host 127.0.0.1 --port 8080 --ctx-size 4096 --parallel 1</code></pre><p><small>Change one draft type at a time with the same target and request. Model downloads and conversion setup are separate prerequisites.</small></p></div><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/speculative.md">llama.cpp speculative decoding guide</a></li><li><a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp releases and support changes</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">DGX Spark Qwen3.6 MTP model recipe</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p05-tree-verify.webp" alt="Branching token candidates narrow to one path after verification." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Tree proposals also retain only the consecutive path accepted by the target.</figcaption></figure><section><h2>Check logs and responses to confirm the draft path</h2><p>Check each server log for the draft file opening and DFlash or DSpark initialization. Do not treat a run where only the main model answered as an acceleration comparison. Once ready, send the same request, confirm a response in choices[0].message.content, and inspect model identifier and error logs.</p><p>Keep model file, prompt, sampling, context, output limit, and device state the same as the baseline. After warm-up, repeat runs and record median and range; distinguish a fresh server start from runs with the model loaded. Compare answers using a greedy request and check code diff and tests for edit scope.</p><p>Record completion time, generated tokens, draft/accepted lengths in speculative statistics, and memory. Accepted-token counts alone do not prove user wait decreased; compare decode and total completion for the same request. If draft initialization or memory fails, remove the draft, confirm the baseline server answers again, then inspect file, backend, and block limit one at a time.</p></section><section><h2>Weigh added memory against gains on the real task</h2><p>A draft model uses additional memory. If code-answer generation repeatedly improves, the requested edit and tests remain correct, and memory is sufficient, record that target/device/backend combination. If first-token wait on a long input is the bottleneck or memory headroom is tight, adding a draft may have limited value.</p><p>Do not assume the same result on another target, quantization, or device. Whenever the model or runtime changes, recheck official support, load logs, and completion time for the same request.</p></section><figure><img src="https://localai.co.kr/guides/p05-overhead-balance.webp" alt="A balance compares draft-and-verification cost with gains from accepted tokens." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A lightweight draft and well-accepted proposals can offset extra computation.</figcaption></figure><aside><h2>Compare speed for supported acceleration settings</h2><p>Review speculative-decoding configurations available for your device and model.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Speculative decoding is a generation method in which a smaller draft model proposes future tokens and the main model verifies them, accepting a matching consecutive span. With Qwen3-4B in llama.cpp, prepare a compatible DFlash or DSpark draft GGUF and compare them one at a time.</dd></div><div><dt>How much memory does it need?</dt><dd>Record completion time, generated tokens, draft/accepted lengths in speculative statistics, and memory. Accepted-token counts alone do not prove user wait decreased; compare decode and total completion for the same request. If draft initialization or memory fails, remove the draft, confirm the baseline server answers again, then inspect file, backend, and block limit one at a time.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Prompt Lookup and n-gram speculative decoding explained</title><link>https://localai.co.kr/en/guides/ngram-prompt-lookup</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ngram-prompt-lookup</guid><description>Describes how Prompt Lookup finds and validates subsequent tokens in repeated phrases (n-grams) of the prompt and creation history without an additional draft model, and how it differs from model weight offloading.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Prompt Lookup and n-gram speculative decoding explained</h1><p>Use repeated source text as next-token candidates</p><p id="guide-page-summary">Prompt Lookup finds repeated token sequences in the input and previous output, then uses their continuations as candidates. The main model verifies them and keeps matching tokens. It can reduce generation time when code edits or document rewrites preserve much of the source.</p><p>When renaming a function and reprinting its code, much of the answer already exists in the input. Prompt Lookup finds these repeated spans and proposes several tokens together. You can try it without downloading a separate draft model.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It builds candidates from n-grams in the input and output history.</li><li>Test gains on repetitive code and document tasks.</li><li>Its role differs from offloading a PLE table to RAM or SSD.</li></ol></section><section><h2>Find continuations of earlier tokens</h2><p>An n-gram is a consecutive token sequence. If the input says the contract runs through March 31, 2027, and the answer repeats that sentence, tokens after a matching sequence can become candidates. It uses the input and generated history available to the model, rather than searching an entire contract separately.</p><p>Lookup creates candidates, then the model evaluates them. It outputs the consecutive span accepted for the current context and resumes generation at the first mismatch. Requests with long repeated spans make useful candidates easier to find.</p><p>If a document app sends only retrieved clauses, lookup can use only that material. Other pages must first be retrieved by the app. Prompt Lookup optimizes generation by reusing delivered text; the app still handles missing retrieval results.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p06-ngram-lookup.webp" alt="A lookup process finding continuations of repeated token sequences" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Continuations of existing text become candidates for the main model.</figcaption></figure><section><h2>It suits tasks that retain the source</h2><p>Start with renaming a function while retaining its body, rewriting a table in the same format, or quoting a contract clause. Matching input and output tokens may produce longer accepted candidates. Include the source code or relevant clauses in the request.</p><p>New explanations or interpretations across clauses require new wording. There may be fewer reusable candidates and smaller gains. Compare repetitive rewrites separately from new interpretations to judge usefulness for your work.</p></section><figure><img src="https://localai.co.kr/guides/p06-repeated-code.webp" alt="Repeated spans identified in code and tables" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Source-preserving requests make long candidates easier to find.</figcaption></figure><section><h2>Check changed code and tests</h2><p>For example, rename get_renewal_date to find_renewal_date. A candidate with the old name can be rejected when the main model selects the new name. Unchanged input checks and date-parsing code afterward may still be reusable.</p><p>Acceptance logs explain the token-generation path. Use a diff and tests to check whether the code meets the request. Look for callers still using the old name or unintended changes to input validation.</p><p>Start with default n-gram and candidate lengths. Short sequences match often but may find different contexts; long sequences are more specific but tolerate fewer wording changes. Record a baseline, then change one setting at a time.</p></section><section><h2>Separate it from PLE offloading</h2><p>The term n-gram also appears in descriptions of Flash-Next's large PLE table. Choose by what the feature changes: Prompt Lookup finds output candidates, while PLE offloading changes where a model table is stored.</p><table><caption>Choose according to the cost you want to reduce.</caption><thead><tr><th scope="col">Feature</th><th scope="col">Target</th><th scope="col">Main purpose</th></tr></thead><tbody><tr><th scope="row">Prompt Lookup</th><td>Tokens in input and output history</td><td>Reduce repetitive generation time</td></tr><tr><th scope="row">PLE offloading</th><td>Model embedding table</td><td>Use RAM/SSD to reduce VRAM residency</td></tr></tbody></table></section><section><h2>Compare on the same task</h2><p>Find Prompt Lookup in your runtime's supported features and start with a model that already works. Prepare function-renaming, clause-quoting, and new-explanation requests. Record enabled and disabled runs with identical inputs, keeping model-loading time separate.</p><p>After warm-up, repeat under the same conditions and compare medians. Record time to first token, subsequent generation time, and output tokens to distinguish gains caused by shorter answers. Check code tests and missing quoted clauses as well.</p><p>Use it for repetitive tasks that get faster while retaining correct results. If memory prevents loading the model, first assess quantization or supported offloading. Resolve residency problems before comparing generation optimizations.</p></section><figure><img src="https://localai.co.kr/guides/p06-lightweight-compare.webp" alt="Memory comparison of token lookup and a separate draft model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Start without a draft model and compare actual completion times.</figcaption></figure><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare other drafting approaches</h2><p>Compare how Prompt Lookup, MTP, and separate draft models create candidates.</p><a href="https://localai.co.kr/en/guides/speculative-decoding">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Prompt Lookup finds repeated token sequences in the input and previous output, then uses their continuations as candidates. The main model verifies them and keeps matching tokens. It can reduce generation time when code edits or document rewrites preserve much of the source.</dd></div><div><dt>How much memory does it need?</dt><dd>Use it for repetitive tasks that get faster while retaining correct results. If memory prevents loading the model, first assess quantization or supported offloading. Resolve residency problems before comparing generation optimizations.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</title><link>https://localai.co.kr/en/guides/qwen-flash-next-ple-offload</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-flash-next-ple-offload</guid><description>Learn how Qwen3.8-Flash-Next PLE data can reside in RAM or on SSD, what storage and memory conditions matter, and how to interpret oMLX and DGX Spark measurements in context.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</h1><p>Keeping Flash-Next PLE data on SSD or in RAM can ease pressure on high-speed memory</p><p id="guide-page-summary">PLE offload keeps Qwen3.8-Flash-Next per-layer embeddings in RAM or on an NVMe SSD and looks up values as needed. The oMLX MLX path and the single-DGX-Spark NVFP4/SGLang setup are separate runtime combinations. Check the model files and free storage, then record load time, first-request time, repeat-request time, and memory separately.</p><p>If Flash-Next exceeds GPU memory, examine which weights can live elsewhere. PLE is a model component that supported paths can place separately. Once the model loads, check table-access latency and answer-generation speed.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Flash-Next PLE data serves a different role from the core language-model weights.</li><li>RAM offload, Mac oMLX SSD mmap, and single-DGX-Spark SSD paths are distinct setups.</li><li>The +61% 32K prefill result in 0.7.1.dev1 compares an expert-weight offload change on M3 Ultra.</li><li>Separate first-page access from later cached requests when evaluating your workload.</li></ol></section><section><h2>What does the Flash-Next PLE table do?</h2><p>Qwen3.8-Flash-Next uses both a core language model and PLE (per-layer embeddings) to answer prompts. Its published configuration contains about 180B parameters: roughly 125B in the core LM, 51B in PLE, and 4B related to MTP.</p><p>Per-layer embeddings are tables that each model layer looks up using token IDs. A runtime with offload support can keep this data in system RAM or on an SSD instead of loading all of it into fast GPU memory, then read values as needed. Quantizing the core weights and placing the embedding data are separate settings. Check where the core weights reside and where the embedding files are read from.</p><p>Prompt Lookup also uses n-gram candidate search, but it is a different feature from PLE. It finds repeated token patterns in earlier input and output and proposes candidate next tokens. Flash-Next PLE looks up embedding tables associated with model layers during execution. If memory is limited, check which PLE offload path your runtime provides.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/acceleration-stage-map.webp" alt="A Flash-Next request moves through PLE lookup, prompt processing, and token generation before producing an answer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>PLE table lookup, prefill, and token generation are separate stages.</figcaption></figure><section><h2>Choose an offload location for your hardware and runtime</h2><p>On a PC with a discrete GPU, a supported path can keep PLE tables in system RAM and pass needed values to the GPU. Plan VRAM and system RAM as separate capacities. On Apple silicon, the CPU and GPU share unified memory, so check model headroom after accounting for macOS and the runtime within total system memory.</p><p>Qwen3.8-Flash-Next is the public model name; `model_type: qwen4_exp` in its config is the internal type oMLX uses to recognize it. In oMLX 0.7.1.dev1, download a compatible MLX checkpoint such as `Jundot/Qwen3.8-Flash-Next-oQ4e-mtp`, then enable `qwen4_ple_ssd_offload` in that model's settings to read PLE through SSD mmap. The runtime may also select mmap automatically when resident loading exceeds the model-memory limit but mmap loading fits.</p><p>After changing the setting, reload the model and send a short first request. In the model log, look for entries identifying Qwen4-Exp and its PLE mmap/SSD path to confirm the selected mode. If the path is absent or loading fails, check whether the setting was saved, confirm the checkpoint type, and inspect the first log error. Record the first-read and repeat-request times separately.</p><table><caption>Offload paths for running Flash-Next PLE by environment</caption><thead><tr><th scope="col">Environment</th><th scope="col">PLE placement</th><th scope="col">Required combination</th></tr></thead><tbody><tr><th scope="row">Discrete-GPU PC</th><td>Supported system RAM</td><td>Runtime and checkpoint with PLE RAM support</td></tr><tr><th scope="row">Apple Silicon Mac</th><td>oMLX SSD mmap</td><td>Flash-Next MLX loader and supported distribution</td></tr><tr><th scope="row">Single DGX Spark</th><td>SGLang file-backed PLE</td><td>nvidia/Qwen3.8-Flash-Next-NVFP4 and merged patch</td></tr></tbody></table><ul><li><a href="https://github.com/sgl-project/sglang/pull/39126">SGLang patch for DGX Spark NVFP4 and file-backed PLE</a></li><li><a href="https://docs.sglang.io/">Official SGLang installation and serving docs</a></li><li><a href="https://huggingface.co/Qwen/Qwen3.8-Flash-Next/blob/de4b8e4d43b917e7706784d8bb445c9af86a3540/config.json">Model name and internal type config</a></li><li><a href="https://huggingface.co/Jundot/Qwen3.8-Flash-Next-oQ4e-mtp">Flash-Next checkpoint for oMLX</a></li></ul></section><section><h2>Check SSD space and the page cache</h2><p>SSD mmap maps a large file into a process's address space and reads pages when referenced. Reading table pages for the first time can add SSD latency. The OS may keep them in the RAM file cache for faster later access, but other apps can displace them and force another storage read.</p><p>Record model load time, first-request completion, and the time for a repeated identical request separately. On a Mac, watch Memory Pressure and SSD activity in Activity Monitor. On a GPU PC, track VRAM, RAM, and storage reads. If only the first request is slow, file caching may help; repeated reads may point to limited memory headroom or cache eviction.</p></section><figure><img src="https://localai.co.kr/guides/ple-storage-tiers.webp" alt="Flash-Next PLE pages are shown across unified memory, the RAM cache, and an SSD." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Actual latency on the SSD path depends on how many pages remain in the RAM cache.</figcaption></figure><section><h2>Reference: 32K prefill result for expert offload</h2><p>The oMLX 0.7.1.dev1 release, published on October 9, 2026, records Qwen3.8-Flash-Next 32K prefill throughput on M3 Ultra at 396 tok/s before and 636 tok/s after an expert-offload change. This measures the expert-weight offload change, not the effect of placing PLE tables on SSD or RAM.</p><p>To check your own system, keep the Flash-Next checkpoint, 32K input, engine settings, and cache state fixed. Measure the first run and warmed repeats separately. Record prefill throughput, time to first token, and generation speed as distinct measures, and note whether the SSD cache was warm.</p><p>The oMLX release also includes Flash-Next group-size-32 decode comparisons on M3 Ultra: 39→91 tok/s with MTP off and 98→134 tok/s with MTP on. Keep the before-and-after conditions distinct and use them as a reference when testing the matching checkpoint and MTP combination.</p><table><caption>Different Flash-Next measurements in the oMLX 0.7.1.dev1 release</caption><thead><tr><th scope="col">Workload and setting</th><th scope="col">Hardware</th><th scope="col">Before → after</th></tr></thead><tbody><tr><th scope="row">32K prefill · expert offload</th><td>M3 Ultra</td><td>396 → 636 tok/s (+61%)</td></tr><tr><th scope="row">Group size 32 · decode, MTP off</th><td>M3 Ultra</td><td>39 → 91 tok/s (+133%)</td></tr><tr><th scope="row">Group size 32 · decode, MTP on</th><td>M3 Ultra</td><td>98 → 134 tok/s (+37%)</td></tr></tbody></table><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Release hardware and workload conditions</a></li></ul></section><section><h2>Test PLE and MTP in sequence when supported</h2><p>On oMLX, first apply `qwen4_ple_ssd_offload` to a Qwen4-Exp checkpoint and confirm the mmap path in the model log. DGX Spark uses a different runtime path. The merged SGLang patch uses the `nvidia/Qwen3.8-Flash-Next-NVFP4` checkpoint and `--ple-offload-embedding --ple-offload-backend file` for file-backed PLE. To add NEXTN, follow the same patch's `--speculative-algorithm NEXTN` setting and checkpoint. Do not transfer the oMLX setting to Spark.</p><p>After confirming the PLE path, record the first and repeated requests. Add MTP separately only when the same checkpoint supports it: enable Lightning MTP in the oMLX model settings, or follow the NEXTN configuration of the DGX Spark SGLang patch. For each run, confirm successful model loading and completion of the first and repeated requests, then record time to first token separately from generation speed.</p><p>If the model does not load, check free SSD space, checkpoint files, and the first error in the runtime log. If loading succeeds but the first access fails, check available memory, the file path, and read permissions. If repeat requests slow down, see whether the RAM cache was displaced and how much memory other apps use. Retry with shorter inputs and fewer concurrent requests first.</p></section><figure><img src="https://localai.co.kr/guides/ple-page-cache-warmup.webp" alt="The first access reads pages from the SSD; later requests can reuse the RAM cache." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record read time for the first table access separately from repeat accesses.</figcaption></figure><section><h2>Decide whether to scale up based on real request completion</h2><p>If your usual model answers the questions you need without forcing you to close other apps, you do not need to add RAM or SSD capacity just to run this model. Identify the task that requires Flash-Next and test both short prompts and long-document requests on the same checkpoint. Check whether requests complete and how long the first token and subsequent generation take.</p><p>Repeat the test with your browser and editor open as usual. Record cases where table pages remain in RAM and where they are displaced, along with free storage, so you do not estimate performance from SSD specifications alone. Keep the offload setup only if you can maintain the chosen Flash-Next checkpoint and engine patches.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Configure oMLX models and check the API</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">Lightning MTP behavior and comparison steps</a></li></ul></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Record your Flash-Next setup</h2><p>Check the checkpoint and offload location, then compare the first and repeated responses with the same input.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>PLE offload keeps Qwen3.8-Flash-Next per-layer embeddings in RAM or on an NVMe SSD and looks up values as needed. The oMLX MLX path and the single-DGX-Spark NVFP4/SGLang setup are separate runtime combinations. Check the model files and free storage, then record load time, first-request time, repeat-request time, and memory separately.</dd></div><div><dt>How much memory does it need?</dt><dd>Per-layer embeddings are tables that each model layer looks up using token IDs. A runtime with offload support can keep this data in system RAM or on an SSD instead of loading all of it into fast GPU memory, then read values as needed. Quantizing the core weights and placing the embedding data are separate settings. Check where the core weights reside and where the embedding files are read from.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>SpecPrefill: reducing the wait before the first token</title><link>https://localai.co.kr/en/guides/specprefill-ttft-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/specprefill-ttft-guide</guid><description>How SpecPrefill selects input, model-specific oMLX requirements, paths that combine it with MTP, and checks for answer quality.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">SpecPrefill: reducing the wait before the first token</h1><p>Select useful tokens from long inputs to start answers sooner</p><p id="guide-page-summary">SpecPrefill is an experimental optimization that uses assistance such as a smaller model to select which tokens of a long input the main model processes. It aims to reduce input work and time to first token. Test on repositories or long documents, comparing selection time and answer quality.</p><p>When you send a repository with error logs, the model reads that input before writing code. SpecPrefill is worth testing when this prefill takes a long time. Selection adds work, so repeated long-input tasks are more relevant than short questions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It primarily targets input processing before the first token.</li><li>For oMLX, check draft combinations sharing the main model's tokenizer.</li><li>Compare selection, prefill, generation, and missing information.</li></ol></section><section><h2>Select input before the main model processes it</h2><p>A request to handle empty input may need the function, failing caller, and existing tests together. SpecPrefill adds a selection stage before main-model processing. Those details must remain for the main model to understand their relationship.</p><p>The gain is main-model time saved minus selection time added. Short questions may offer little input to remove. Record main/draft loading separately and compare requests with both models ready.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/lightning-mtp">What is Lightning MTP? Faster answers with oMLX 0.7.1rc1</a></li><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Qwen3.8-Flash-Next PLE Offload: RAM and SSD Requirements and Setup</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide">Nemotron Bolt vs Qwen3.8-27B: which is faster for agent work?</a></li><li><a href="https://localai.co.kr/en/guides/prefill-can-reverse-speed-ranking">Long prompts can reverse a local LLM speed ranking</a></li></ul></section><figure><img src="https://localai.co.kr/guides/specprefill-token-selection.webp" alt="A small model selecting long-input tokens for the main model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Selection adds work before reducing main-model input processing.</figcaption></figure><section><h2>Cache and decoding acceleration address other stages</h2><p>Prompt caching reuses previously computed shared input. SpecPrefill selects tokens from the current input; MTP proposes next tokens while generating answers. The relevant stage depends on whether the delay is before the first answer or during generation.</p><p>Use the same repository and request, recording cache state. If only the baseline retains a prefix cache, caching affects the comparison. If you cannot clear it, record the observed state rather than assuming a cold run. Separate TTFT from decoding speed to identify changes.</p></section><figure><img src="https://localai.co.kr/guides/specprefill-ttft-compare.webp" alt="First-token waiting with full and selected-token prefill" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Include selection time when comparing time to first token.</figcaption></figure><section><h2>Match oMLX draft and MTP combinations on Mac</h2><p>An oMLX SpecPrefill drafter must use the main model's tokenizer. Choose an allowed combination, verify a short request, then test longer input. Draft implementations can differ despite similar model names, so check settings and request logs.</p><p>Native MTP and the Lightning path with a merged Gemma assistant can be configured separately from SpecPrefill. VLM MTP using an external assistant cannot run simultaneously with it. Test SpecPrefill alone, then add supported MTP and compare generation as well.</p><p>The site's Mac simulation uses approximate estimates. No multiplier is applied to unverified NVIDIA target/draft combinations. Base your choice on runtime support and results on the same request.</p></section><section><h2>Compare time and answer results together</h2><p>The table is an illustrative assumption. Baseline prefill takes 30 seconds, generation 20, and review 10, totaling 60. Even if selection reduces prefill, reviewing missing code can offset the gain. Loading time is outside the table.</p><table><caption>Illustrative timing: earlier answers can still have the same total time including review.</caption><thead><tr><th scope="col">Stage</th><th scope="col">Baseline</th><th scope="col">SpecPrefill example</th></tr></thead><tbody><tr><th scope="row">Input selection</th><td>0 s</td><td>5 s</td></tr><tr><th scope="row">Main-model prefill</th><td>30 s</td><td>15 s</td></tr><tr><th scope="row">Answer generation</th><td>20 s</td><td>20 s</td></tr><tr><th scope="row">Code review</th><td>10 seconds</td><td>20 s</td></tr><tr><th scope="row">Total work time</th><td>60 s</td><td>60 s</td></tr></tbody></table><p>Compare return values for normal and empty strings and the caller's expectations on the same edit request. Test relevant code located at the beginning, middle, and end of the repository to detect omissions. If the runtime exposes selected tokens, inspect the retained spans too.</p></section><figure><img src="https://localai.co.kr/guides/specprefill-quality-check.webp" alt="Side-by-side checks of answers and source evidence before and after selection" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the same request to check retained code and conditions.</figcaption></figure><section><h2>Apply it where required evidence is retained</h2><p>For file-discovery requests, a person can reopen candidate files. Apply-ready code edits have greater consequences when callers or interfaces are missing. Rather than using one selection setting everywhere, complete a representative request through testing and review.</p><p>Keep the setting for tasks with earlier answers and retained results. If omissions appear, adjust selection or return to baseline and compare again. Expand from validated model/draft combinations to reduce waiting while preserving verification.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Try 16K prefill on MacBook Pro M5 Pro</h2><p>Compare simulated first-token waiting for long oMLX inputs with SpecPrefill.</p><a href="https://localai.co.kr/en/speed?hardware=macbook-pro-m5-pro-48gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=16384&amp;prefill_accel=specprefill">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>SpecPrefill is an experimental optimization that uses assistance such as a smaller model to select which tokens of a long input the main model processes. It aims to reduce input work and time to first token. Test on repositories or long documents, comparing selection time and answer quality.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LLM memory bandwidth vs compute: how to find the speed bottleneck</title><link>https://localai.co.kr/en/guides/memory-bandwidth-vs-compute</link><guid isPermaLink="true">https://localai.co.kr/en/guides/memory-bandwidth-vs-compute</guid><description>We describe how memory bandwidth and GPU compute performance affect prefill, single-user decode, and batch processing, respectively, in local LLM.</description><content:encoded><![CDATA[<header><p>Response speed and acceleration</p><h1 id="guide-page-title">LLM memory bandwidth vs compute: how to find the speed bottleneck</h1><p>Memory bandwidth and compute performance reduce different kinds of waiting.</p><p id="guide-page-summary">Memory bandwidth is the amount of data that can move from memory to the compute units each second. GPU compute performance is the amount of computation those units can perform on that data. Generating an answer token by token and reading a long input involve different workloads, so the two specifications affect them differently.</p><p>When summarizing a document, distinguish a late first response from an answer that continues slowly after it starts. The first part involves prefill, which processes the input; the second involves decode, which generates the answer. Knowing where you wait helps you decide which hardware specifications to compare first.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Memory capacity is space for data; bandwidth is the rate at which data moves.</li><li>Single-user decode can be strongly affected by how fast weights are supplied.</li><li>GPU compute performance can matter more for long inputs and multiple requests processed together.</li></ol></section><section><h2>Generating tokens one by one repeatedly reads the weights.</h2><p>An LLM uses weights stored in the model to calculate the next token. For one person's answer, each next token follows the preceding token. The required weights are repeatedly fetched from memory. If the compute units are waiting for data, reducing that wait matters before adding more compute units.</p><p>Capacity and bandwidth serve different roles here. Enough capacity is needed to hold the model and KV cache, while bandwidth supplies data for computation quickly. If the model fits but answers are slow, inspect actual decode speed and the data path rather than simply adding more capacity.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide">How to run Nemotron Bolt on an RTX 3090 or 5090</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-bf16-unlock-guide">RTX 3090 BF16 unlock: what opens and what stays the same</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-unlock-llm-speed-guide">Does the 3090 unlock speed up local LLMs? Prefill, batching, decode</a></li><li><a href="https://localai.co.kr/en/guides/rtx-3090-48gb-mod-guide">The RTX 3090 48 GB mod: what to verify before you accept the card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p07-decode-stream.webp" alt="Model weights flowing from memory to the compute units" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Token-by-token generation repeatedly supplies the required weights.</figcaption></figure><section><h2>Let's calculate the time to read 20 GB.</h2><p>Suppose the weights needed for one token occupy 20 GB and the actual transfer rate is 400 GB/s. Reading them takes 20÷400=0.05 seconds. Repeating that read for one second gives 1÷0.05=20 reads. Less data or a higher transfer rate reduces the waiting time.</p><p>This example calculates only weight-reading time. Actual tok/s also includes computation, KV-cache access, and runtime overhead. We assumed an actual transfer rate rather than a product's peak bandwidth; selective architectures such as MoE also change how much is read. Use the formula to understand bandwidth, and compare hardware using results for the same model.</p></section><section><h2>Reading a long document processes many tokens together.</h2><p>After receiving a document, the model processes the input tokens before answering. Prefill can group the tokens already provided, creating more opportunity to use the compute units. If a long contract produces a long wait before the first answer, compare prefill throughput and time to first token.</p><p>Batching requests from several people can reuse the same weights across more computations. The server's aggregate token rate may increase while individual requests wait in a queue. For personal chat, look at one answer's speed; for a shared server, examine individual latency and aggregate throughput together.</p></section><figure><img src="https://localai.co.kr/guides/p07-prefill-matrix.webp" alt="A prefill matrix computation processing many input tokens across a wide grid" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prefill can use more compute resources by processing a long input together.</figcaption></figure><section><h2>Quantization and context length also change data movement.</h2><p>Quantization stores weights in fewer bits and can reduce the amount read. Efficient kernels for that representation can help both capacity and speed. Record the format and runtime even for the same original model so you can identify which combination reduced the time.</p><p>As a conversation grows, the KV cache storing previous context grows too. Consulting that cache during generation can add work, making short-question and long-document speeds different. Fix the input length and record output tokens to reduce differences caused by changing workloads.</p></section><figure><img src="https://localai.co.kr/guides/p07-roofline-bottleneck.webp" alt="A bottleneck between the memory conveyor and the compute device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Reducing the slower of data supply and computation shortens the actual wait.</figcaption></figure><section><h2>Compare hardware for the stage that is slow.</h2><p>First check that the model and actual context fit in memory. Then use the same document and question to record time to first token, generation rate, and completion time. Separating them shows which part of your work a higher-spec machine can shorten.</p><table><caption>Use the slow stage to choose what to investigate next.</caption><thead><tr><th scope="col">Slow stage</th><th scope="col">Compare first</th></tr></thead><tbody><tr><th scope="row">The answer continues slowly.</th><td>Same-model decode, bandwidth, and actual execution path</td></tr><tr><th scope="row">The first answer is late after a long input.</th><td>Prefill and TTFT at the same input length</td></tr><tr><th scope="row">Several requests queue up.</th><td>Individual latency and aggregate throughput under concurrency</td></tr></tbody></table></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare hardware memory and speed</h2><p>Compare available memory, bandwidth, and representative model speeds together.</p><a href="https://localai.co.kr/en/hardware">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Memory bandwidth is the amount of data that can move from memory to the compute units each second. GPU compute performance is the amount of computation those units can perform on that data. Generating an answer token by token and reading a long input involve different workloads, so the two specifications affect them differently.</dd></div><div><dt>How much memory does it need?</dt><dd>An LLM uses weights stored in the model to calculate the next token. For one person's answer, each next token follows the preceding token. The required weights are repeatedly fetched from memory. If the compute units are waiting for data, reducing that wait matters before adding more compute units.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>How much VRAM or unified memory does a local LLM need?</title><link>https://localai.co.kr/en/guides/vram-and-unified-memory</link><guid isPermaLink="true">https://localai.co.kr/en/guides/vram-and-unified-memory</guid><description>This is a method to determine the VRAM and integrated memory required for 12B, 27B, 35B, and 70B level local LLM, including quantization, runtime margin, KV cache, and context length.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">How much VRAM or unified memory does a local LLM need?</h1><p>Estimate local LLM headroom with VRAM and unified memory</p><p id="guide-page-summary">When a local LLM runs, its software loads the model into computer memory to calculate an answer. On a PC with a discrete graphics card, the GPU's VRAM is used for model computation; on an Apple Silicon Mac, the CPU and GPU share unified memory. This guide explains how to check whether enough headroom remains to continue a conversation with your usual inputs after loading the model.</p><p>Besides the model file, the runtime uses workspace for computation, and the KV cache that stores conversation state grows as long inputs and follow-up questions are processed. We will look at memory layouts on PC and Mac, then use a long-document summary to reason about capacity and speed.</p><p>Summarize a document and ask follow-up questions with the same model, checking both where memory runs short and how quickly answers arrive.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>On a PC with a discrete GPU, check VRAM and system RAM separately.</li><li>CPU and GPU share unified memory, but the operating system and apps use it too.</li><li>Allow for runtime workspace and KV cache beyond the weights, then test the full workload.</li></ol></section><section><h2>On a PC, VRAM and system RAM are separate</h2><p>A PC with a discrete graphics card has separate VRAM and system RAM. Model weights and workspace used by the GPU reside in GPU memory, while the operating system, browser, and document apps mainly use system RAM. NVIDIA's CUDA documentation also distinguishes GPU device memory from host memory used by the CPU.</p><p>More system RAM gives space to the operating system, apps and model portions placed on the CPU. GPU-resident portions must fit the card’s VRAM. An app with CPU/RAM offloading can divide a model that exceeds VRAM.</p><ul><li><a href="https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html">NVIDIA CUDA C++ Programming Guide</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/strata-memory-pc-guide">Strata PC memory guide: choosing a model with 32, 48, 64, or 96 GB RAM</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p08-separate-pools.webp" alt="Graphics-card VRAM and system RAM are separate, with data moving between them." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check system RAM and VRAM capacity separately.</figcaption></figure><section><h2>On Mac, CPU and GPU share memory</h2><p>The CPU and GPU in an Apple Silicon Mac share the same physical memory, a layout called unified memory. Instead of adding VRAM and system RAM as on a PC, consider the unified-memory amount listed for the Mac as one pool. Apple's Metal documentation describes how the CPU and GPU share system memory.</p><p>On a 32GB Mac, the model and computation share the space left after macOS, browser and document apps. Load the model with your usual apps open and ask follow-up questions. Memory pressure and app responsiveness show whether your daily use has enough headroom.</p><table><caption>Memory available for model computation differs by device type.</caption><thead><tr><th scope="col">Setup</th><th scope="col">Memory for GPU</th><th scope="col">Memory mainly used by CPU and apps</th><th scope="col">What to check</th></tr></thead><tbody><tr><th scope="row">Discrete-GPU PC</th><td>Graphics-card VRAM</td><td>System RAM</td><td>Check VRAM and RAM separately.</td></tr><tr><th scope="row">Apple Silicon Mac</th><td>Unified memory shared by CPU and GPU</td><td>The same unified memory</td><td>Leave room for the OS and apps.</td></tr></tbody></table><ul><li><a href="https://developer.apple.com/documentation/metal/choosing-a-resource-storage-mode-for-apple-gpus">Apple Metal guide to GPU memory</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p08-vram-unified.webp" alt="A side-by-side comparison of dedicated VRAM and unified memory shared by CPU and GPU." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check available space in GPU-dedicated memory on PCs and shared memory on Apple Silicon Macs.</figcaption></figure><section><h2>Account for workspace beyond the model file</h2><p>The model file stores weights used to produce answers. The runtime uses temporary workspace to load weights, read input, and generate output. Follow-up questions about a long document also require a KV cache to hold conversation state. Capacity planning therefore includes workspace and conversation state in addition to weights.</p><p>For illustration, suppose a 20 GB model file is run on 24 GB of VRAM; arithmetic leaves 4 GB. The runtime workspace and KV cache must share that space. Actual memory use varies with file format and runtime, so treat this as a rough budget and check usage after loading the model in your app.</p><table><caption>An illustrative calculation for a 20 GB model file on 24 GB VRAM</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Calculation</th><th scope="col">Next check</th></tr></thead><tbody><tr><th scope="row">GPU VRAM</th><td>24GB</td><td>Total dedicated memory</td></tr><tr><th scope="row">Model file</th><td>−20GB</td><td>Reference for weight storage</td></tr><tr><th scope="row">Arithmetic remainder</th><td>=4GB</td><td>Shared by runtime workspace and KV cache.</td></tr><tr><th scope="row">Actual run</th><td>Check under actual conditions</td><td>Test through long inputs and follow-ups.</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/p08-headroom.webp" alt="The operating system, runtime, and KV cache share memory, leaving some headroom to inspect." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave room for the operating system and apps, then check headroom for model input and conversation.</figcaption></figure><section><h2>Memory capacity and bandwidth answer different questions</h2><p>Capacity tells you whether there is room for the model and its computation state. Bandwidth describes how quickly data moves between the GPU and memory. Even with enough capacity, slow data delivery can stall computation; high bandwidth cannot help if the model does not fit. First find a configuration with enough capacity for the task, then compare bandwidth and compute performance within that set.</p><p>If the model handles long inputs and follow-ups without memory pressure but responses are slow, compare performance metrics rather than adding more memory. If memory runs short during input or you must close other apps, capacity headroom comes first.</p></section><section><h2>Try RAM offloading when VRAM is insufficient</h2><p>Some runtimes can keep some model layers in GPU VRAM and compute the rest from system RAM. This offloading method can run a model that does not fit entirely in VRAM. CPU computation and data transfers between memory pools may slow answers, so check completion time as well as whether the model loads.</p><p>Find the setting for GPU layer count or memory allocation in the runtime. Change one setting at a time, then use the same model and long document to complete a summary and follow-up question and compare completion time. Moving more layers to the GPU can reduce work from RAM, but loading can fail if VRAM is insufficient. Setting names and support vary by app, so consult its help.</p></section><section><h2>Split a model across two GPUs</h2><p>Two 24GB cards have 48GB in total. With model splitting enabled, the runtime places weights and working space on each card. Transfers between cards also take time, so compare first-answer and completion times with a single-card setup after loading.</p><p>The llama.cpp server documentation describes the number of model layers to place on GPUs and multi-GPU split modes. Splitting one model is different from handling separate requests on each GPU. First check whether your app supports that runtime and its sharding options.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/tree/master/tools/server">Multi-GPU sharding guide for the llama.cpp server</a></li></ul></section><section><h2>Test memory with your usual workload before buying</h2><p>Check the model and quantized-file sizes in the model explorer and confirm that your runtime supports the file. Note VRAM and system RAM separately on a PC, and unified memory on a Mac. Leave room for the operating system and apps you usually keep open. Quantization stores weights in fewer bits to reduce file size and runtime memory.</p><p>Enter a document you normally process, summarize it, and then ask a follow-up. On Windows, check dedicated memory in Task Manager's GPU section; on Mac, review memory pressure and app use in Activity Monitor's Memory tab. Apple's guide explains that memory pressure reflects available memory and swap among other factors. Note where memory runs short or apps slow down to see whether the current configuration is sufficient.</p><p>If your usual input completes and speed is acceptable, start with the current capacity. If long inputs run short, try quantization or supported offloading; if work still stops often, compare higher-memory configurations. If tasks complete but answers are slow, examine bandwidth or compute performance. Compare estimated speeds with the calculator, then verify again with your app and inputs before buying.</p><ul><li><a href="https://localai.co.kr/en/models">Check file sizes in the model explorer</a></li><li><a href="https://devblogs.microsoft.com/directx/gpus-in-the-task-manager/">GPU memory in Windows Task Manager</a></li><li><a href="https://support.apple.com/guide/activity-monitor/view-memory-usage-actmntr1004/mac">Apple Activity Monitor memory guide</a></li><li><a href="https://localai.co.kr/en/compare/hardware-speed-comparison">Hardware speed comparison</a></li><li><a href="https://localai.co.kr/en/speed">Speed calculator</a></li></ul></section><aside><h2>Check Q4 memory needs by model</h2><p>Narrow down hardware that can load the model you plan to use.</p><a href="https://localai.co.kr/en/models">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>When a local LLM runs, its software loads the model into computer memory to calculate an answer. On a PC with a discrete graphics card, the GPU's VRAM is used for model computation; on an Apple Silicon Mac, the CPU and GPU share unified memory. This guide explains how to check whether enough headroom remains to continue a conversation with your usual inputs after loading the model.</dd></div><div><dt>How much memory does it need?</dt><dd>On a 32GB Mac, the model and computation share the space left after macOS, browser and document apps. Load the model with your usual apps open and ask follow-up questions. Memory pressure and app responsiveness show whether your daily use has enough headroom.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Reduce KV cache memory: vLLM FP8 setup and response checks</title><link>https://localai.co.kr/en/guides/kv-cache</link><guid isPermaLink="true">https://localai.co.kr/en/guides/kv-cache</guid><description>Learn to distinguish vLLM FP8 KV cache from weight quantization, then check a baseline response, cache settings, and accuracy one condition at a time on a supported backend.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">Reduce KV cache memory: vLLM FP8 setup and response checks</h1><p>The KV cache stores computation state from earlier context.</p><p id="guide-page-summary">The KV cache stores the keys and values of tokens a language model has already processed. The model reuses this state when continuing an answer, reducing repeated computation of earlier context. Long contexts and concurrent requests consume more cache memory, so this guide explores reducing that space with vLLM's FP8 setting.</p><p>This example asks what happens when a function receives an empty list and requests a test. Send the same code using default and FP8 caches, then record the answers, memory use, and completion times to assess the change.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Configure weight precision and KV cache precision separately.</li><li>Context length, concurrency, and model architecture affect cache usage.</li><li>Check memory and answer accuracy on a backend supporting FP8.</li></ol></section><section><h2>Continuing a conversation adds state to retain</h2><p>During prefill, the model processes relationships between input tokens. When generating an answer token by token, it refers to previous tokens again. Reusing the keys and values in the KV cache lets it continue without rebuilding earlier context state from scratch.</p><p>After reading a function and explaining it, a follow-up test request may include the original code and previous answer. New questions and outputs add context, so cache use changes even though the model file stays the same. The application's removal of old messages or reconstruction of context also matters.</p><p>A one-line question can still contain many input tokens if the application attaches a whole code file or long PDF. Check actual input length in the application's token display or server logs. Concurrent requests need their own state, so test a single conversation separately from overlapping tasks.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/prompt-cache-prefix-cache">MLX-LM Server Cache: Reusing Shared Prompts and Testing Concurrency</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-qwen38-mac-memory-guide">TensorFold 1.0.8 cuts Qwen3.8-27B Mac memory by 17.6 GiB</a></li></ul></section><figure><img src="https://localai.co.kr/guides/kv-cache-concept.webp" alt="Keys and values from a long input stored in drawers and reused for the next token" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Reuse previous token state to continue the answer.</figcaption></figure><section><h2>Why weight and cache precision are separate choices</h2><p>Q4 and NVFP4 describe how model weights are stored. The KV cache is state produced during execution and uses its own precision. Supported runtimes can store it in 8 or 4 bits to reduce space for long contexts.</p><p>Cache conversion adds computation and changes value precision. That is why memory savings, generation speed, and answer accuracy need separate comparisons. For short contexts, conversion overhead can offset savings, and prefill performance also depends on head dimension and backend.</p><table><caption>Separate the uses of runtime memory.</caption><thead><tr><th scope="col">Area</th><th scope="col">Contents</th><th scope="col">Factors</th></tr></thead><tbody><tr><th scope="row">Model weights</th><td>Learned model data</td><td>Model size, quantization, placement</td></tr><tr><th scope="row">KV cache</th><td>Computation state of previous tokens</td><td>Context length, layer structure, precision, concurrency</td></tr><tr><th scope="row">Runtime buffers</th><td>Temporary data for current operations</td><td>Backend, batch, runtime settings</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/p09-cache-growth.webp" alt="Paired key and value cards accumulating in cache drawers as answer tokens increase" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Long contexts and concurrent requests use more cache space.</figcaption></figure><section><h2>Get an answer from the baseline server first</h2><p>Run this example in a vLLM environment supporting gpt-oss-20b. Leave memory for loading the model and creating its cache. Rather than fixing GPU count or memory utilization arbitrarily, check the installed backend's model support and loading logs.</p><p>Run the first command. Once the server is ready, send the curl command from another terminal. The first_item function reads the first list element, so an empty list causes an index error. Save the baseline answer after checking that it explains the cause and proposes an empty-list test.</p><div><p><strong>Start the baseline server with the default KV cache</strong></p><pre><code data-guide-code-block="2-0">vllm serve openai/gpt-oss-20b --host 127.0.0.1 --port 8000 --max-model-len 8192</code></pre><p><small>Run on a vLLM build supporting this model, then send a request after loading completes.</small></p></div><div><p><strong>Request an explanation of empty-list handling</strong></p><pre><code data-guide-code-block="2-1">curl --fail-with-body http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"Review this function for empty-list input and suggest one test: def first_item(items): return items[0]"}],"temperature":0,"max_tokens":128}'</code></pre><p><small>Send the same function and question to both the default and FP8 configurations.</small></p></div></section><section><h2>Change only the cache to FP8 and repeat the request</h2><p>After the baseline request succeeds, stop the server and restart with --kv-cache-dtype fp8. Keep the model, context, weight format, and concurrency unchanged. Confirm FP8 KV and the actual attention backend in the logs, then send the same curl request.</p><p>FP8 KV requires support from the GPU, attention backend, and model architecture. Treat official Hopper and Blackwell evaluation conditions as evidence for those paths; check your installed version's support matrix for other GPUs. For models mixing global and sliding-window attention, such as GPT-OSS, also compare keeping short-window layers at default precision.</p><p>The second command's --kv-cache-dtype-skip-layers sliding_window provides that choice. On a build supporting it, test all-layer FP8 and the skip-layer configuration separately with the same function question.</p><div><p><strong>Apply FP8 KV cache to all layers</strong></p><pre><code data-guide-code-block="3-0">vllm serve openai/gpt-oss-20b --host 127.0.0.1 --port 8000 --max-model-len 8192 --kv-cache-dtype fp8</code></pre><p><small>Keep the model and context settings while changing only cache precision.</small></p></div><div><p><strong>Keep the default precision for sliding-window layers</strong></p><pre><code data-guide-code-block="3-1">vllm serve openai/gpt-oss-20b --host 127.0.0.1 --port 8000 --max-model-len 8192 --kv-cache-dtype fp8 --kv-cache-dtype-skip-layers sliding_window</code></pre><p><small>Compare separately on a build supporting the official skip-layer option.</small></p></div></section><section><h2>Record both memory savings and answer quality</h2><p>Measure repeatedly after model loading, excluding the preparation request. Record TTFT, inter-token latency, total completion time, and peak GPU memory, starting with one request at a time. For long-context or concurrent use, increase input length or concurrency one at a time. Record fresh inputs separately from reused prefixes.</p><p>Compare the answer's empty-list explanation and proposed test against the code. Prepare several function questions and compare consistently to reduce reliance on a single result. Even with little speed change, fitting longer inputs or completing more requests reliably can satisfy your goal.</p><p>If you limit cache size or remove old state, check whether information supplied at the start of a conversation remains available later. If a fresh conversation answers correctly but a continued one fails, compare the actual messages sent and state retention settings. Use application-wide memory graphs to locate pressure and server metrics to inspect the KV cache itself.</p></section><figure><img src="https://localai.co.kr/guides/p09-kv-quant.webp" alt="A full-precision KV cache beside a smaller cache stored with fewer bits" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After reducing the cache, check that answers retain required code conditions.</figcaption></figure><section><h2>Startup errors and memory shortages need different adjustments</h2><p>If a dtype or backend error prevents startup, remove the FP8 option and retry the baseline command. If only FP8 fails, check cache support. If the baseline also fails, investigate model support, the driver, and the installed version first.</p><p>If memory runs out during long requests, reduce context or concurrency one at a time. If answers repeatedly miss code conditions, return to default precision and compare the same questions. Keep the setting that preserves accuracy and stability at your required context and concurrency.</p><ul><li><a href="https://vllm.ai/blog/2026-04-22-fp8-kvcache">Official vLLM FP8 KV cache evaluation and conditions</a></li><li><a href="https://docs.vllm.ai/en/latest/features/quantization/quantized_kvcache/">vLLM KV cache quantization documentation</a></li></ul></section><aside><h2>Check memory by context length</h2><p>Change input token count to compare fit and first-token waiting time.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The KV cache stores the keys and values of tokens a language model has already processed. The model reuses this state when continuing an answer, reducing repeated computation of earlier context. Long contexts and concurrent requests consume more cache memory, so this guide explores reducing that space with vLLM's FP8 setting.</dd></div><div><dt>How much memory does it need?</dt><dd>If you limit cache size or remove old state, check whether information supplied at the start of a conversation remains available later. If a fresh conversation answers correctly but a continued one fails, compare the actual messages sent and state retention settings. Use application-wide memory graphs to locate pressure and server metrics to inspect the KV cache itself.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MLX-LM Server Cache: Reusing Shared Prompts and Testing Concurrency</title><link>https://localai.co.kr/en/guides/prompt-cache-prefix-cache</link><guid isPermaLink="true">https://localai.co.kr/en/guides/prompt-cache-prefix-cache</guid><description>A hands-on guide to shared system-prompt reuse and the effects of cache, latency, and memory under concurrent requests in MLX-LM server.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">MLX-LM Server Cache: Reusing Shared Prompts and Testing Concurrency</h1><p>Reuse prefix computation when repeatedly reading the same policy.</p><p id="guide-page-summary">Prompt caching reuses computation state from the beginning of an already processed input, or prefix, in later requests. A server receiving shared instructions or the same document repeatedly can reduce input processing before the first answer. This guide sends a return policy twice using MLX-LM to examine input reuse, memory, and waiting time.</p><p>Product support often attaches the same return policy while changing the customer's question. The server can reuse policy computation and process the new question and answer. Because each answer is generated anew, also check that the policy and question were transmitted correctly.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Reuse requires the same model, message template, and token prefix.</li><li>Stored caches need memory, so adjust cache size together with concurrency.</li><li>Check supported options in the installed version's help and logs.</li></ol></section><section><h2>Start a baseline server on an Apple Silicon Mac</h2><p>This exercise uses MLX-LM and mlx-community/Qwen3-4B-4bit on an Apple Silicon Mac. The model card's 2.26GB is the download size. Execution also needs unified memory for weights, caches, and temporary computation.</p><p>Prepare a Python tooling environment and uv, then run the commands below. The first run downloads the model, so wait for the server-ready log. This example uses default context settings and keeps the same server process. If the server is already running, send requests to that process.</p><div><p><strong>Start a server with the Qwen3 4B MLX model</strong></p><pre><code data-guide-code-block="0-0">uv tool install mlx-lm
mlx_lm.server --model "mlx-community/Qwen3-4B-4bit" --host 127.0.0.1 --port 8080</code></pre><p><small>After downloading the tool and model, wait for the server-ready log and send requests from another terminal.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li></ul></section><section><h2>Keep the policy and change only the question</h2><p>The system message below contains an example return policy: unopened accessories may be returned within 30 days with proof of purchase; opened items qualify only if they arrived damaged. The first user asks whether an opened item can be returned after a change of mind. Check that the answer cites the relevant policy sentence and reason.</p><p>For the second request, change only the user's content to ask what happens if the item arrived damaged. Keep the model, message roles and order, system content, template, and context settings. The questions differ, but the policy tokens at the beginning can be shared.</p><p>If response usage includes usage.prompt_tokens_details.cached_tokens, record it for both requests. It indicates reused input length. If your version does not return this field, inspect server logs and available usage information. Record first-token time, total completion time, and output token count to compare actual waiting times. This example uses stream:false and returns the completed answer, so obtain TTFT from server timing metrics or a separate streaming request.</p><div><p><strong>Send a question with the shared return policy</strong></p><pre><code data-guide-code-block="1-0">curl -sS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"mlx-community/Qwen3-4B-4bit","messages":[{"role":"system","content":"Return the relevant policy sentence and one short reason. Policy: Unopened accessories may be returned within 30 days with proof of purchase. Opened accessories are not returnable unless they arrived damaged."},{"role":"user","content":"A customer opened an accessory and changed their mind. Can they return it?"}],"max_tokens":128,"stream":false}'</code></pre><p><small>Keep the system message and change only the user question in the next request.</small></p></div></section><figure><img src="https://localai.co.kr/guides/p10-prompt-context-cache.webp" alt="A cache flow sharing common-document input state across later requests" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Send the shared policy first and vary the question to allow prefix reuse.</figcaption></figure><section><h2>Text before shared content also affects the cache</h2><p>The cache reuses the beginning of the final token sequence sent to the model. A date or user ID before the policy can change the input from that point onward. Check the difference between shared instructions followed by the customer's question and customer-specific instructions placed first.</p><p>Changing the model or message template also changes reuse conditions. Preserve required permissions and safety instructions when adjusting order for caching. Next, alternate different long policies and return to the original to check whether its earlier state remains.</p><p>If cached tokens are zero for apparently identical content, check actual system content, the server process, cache entry retention, and the model's cache trimming support in turn. Compare logs to see which request state was removed and why it was recomputed.</p></section><figure><img src="https://localai.co.kr/guides/p10-prefix-branch.webp" alt="Different questions branching after a shared input prefix" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Changing text before a shared document shortens the reusable prefix.</figcaption></figure><section><h2>Measure individual latency separately from throughput</h2><p>First send inquiries one at a time to the prepared server. Keep the same model and policy, recording first token, completion time, input and output tokens, and cache hits. Separate initial model loading after restart and compare prepared requests with each other.</p><p>Next send independent inquiries concurrently. Record median request latency, slow requests, total tokens per second, and memory. Test concurrent shared prefixes separately from mixed user-specific prefixes to distinguish caching and concurrency effects.</p><p>As an illustration, suppose one request takes 30 seconds and four concurrent requests each finish in 36 seconds. Individual latency increases by 6 seconds, or 20%. Sequential processing takes 30×4=120 seconds, while concurrent completion takes about 36 seconds of wall-clock time. The sum of individual concurrent times, 36×4=144 seconds, differs from elapsed time. Prioritize individual latency for immediate answers or completion count and elapsed time for inquiry batches.</p><table><caption>Record server request conditions separately.</caption><thead><tr><th scope="col">Condition</th><th scope="col">Key records</th><th scope="col">What it reveals</th></tr></thead><tbody><tr><th scope="row">Sequential warm requests</th><td>TTFT, completion time, cached tokens</td><td>Shared-input reuse effect</td></tr><tr><th scope="row">Cold start</th><td>Model loading, first request, memory</td><td>Server preparation cost</td></tr><tr><th scope="row">Concurrent requests</th><td>Individual latency, throughput, memory</td><td>Latency and capacity under concurrency</td></tr><tr><th scope="row">Mixed prefixes</th><td>Hit/miss, requests after eviction</td><td>Cache retention scope</td></tr></tbody></table></section><section><h2>What to check when reducing cache size</h2><p>Retained state continues to use memory. Model weights, active request KV caches, and stored entries share that space. If memory is tight, first test reducing concurrency and actual input length.</p><p>Find cache limits in the current version's mlx_lm.server --help. Options such as --prompt-cache-bytes limit stored-entry size, whereas --max-kv-size changes the cache structure for long conversations. Verify support and application in help and startup logs, then change one option at a time and compare hits, TTFT, and peak memory.</p><p>After establishing stability with short context and one request, increase to match your workload. If the first token improves but generation does not, compare decode next. If greater concurrency exceeds acceptable waiting time, reduce it and retain a cache size that preserves reuse of frequent shared documents.</p></section><figure><img src="https://localai.co.kr/guides/p10-cache-invalidation.webp" alt="Cache entries being replaced as the model and template change" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare space for retained caches alongside request latency.</figcaption></figure><section><h2>Keep settings matched to the version and workload</h2><p>MLX-LM v0.31.0 includes server cache and size-limit improvements; v0.31.2 improves system and user message caching and the batch generator. v0.31.3 adds fixes for batch KV cache and parallel tool calls. On updates, recheck options and logs, then compare previous settings with the same requests.</p><p>For work repeatedly using the same instructions and documents, tune according to actual hits and first-response differences. If you read each new document once and your Mac responds adequately, larger caches may be unnecessary. Add concurrency tests when multiple applications begin connecting at once.</p><ul><li><a href="https://localai.co.kr/en/guides/kv-cache">KV cache and context memory</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Time to first token and answer generation speed</a></li><li><a href="https://localai.co.kr/en/guides/continuous-batching">Concurrency and throughput</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases">Official MLX-LM releases</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases/tag/v0.31.0">v0.31.0 server cache changes</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases/tag/v0.31.2">v0.31.2 message cache changes</a></li><li><a href="https://github.com/ml-explore/mlx-lm/releases/tag/v0.31.3">v0.31.3 batch cache fixes</a></li><li><a href="https://huggingface.co/mlx-community/Qwen3-4B-4bit">Qwen3 4B MLX example model</a></li></ul></section><aside><h2>Compare concurrent request throughput</h2><p>Compare individual waiting time separately from completed request count.</p><a href="https://localai.co.kr/en/guides/continuous-batching">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Prompt caching reuses computation state from the beginning of an already processed input, or prefix, in later requests. A server receiving shared instructions or the same document repeatedly can reduce input processing before the first answer. This guide sends a return policy twice using MLX-LM to examine input reuse, memory, and waiting time.</dd></div><div><dt>How much memory does it need?</dt><dd>This exercise uses MLX-LM and mlx-community/Qwen3-4B-4bit on an Apple Silicon Mac. The model card's 2.26GB is the download size. Execution also needs unified memory for weights, caches, and temporary computation.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LLM quantization: choosing Q4, Q8 or FP16</title><link>https://localai.co.kr/en/guides/llm-quantization</link><guid isPermaLink="true">https://localai.co.kr/en/guides/llm-quantization</guid><description>We explain how memory, speed, and quality change when reducing the weights of a local LLM to low bits such as Q4 and Q8, and the criteria for selecting a quantization format.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">LLM quantization: choosing Q4, Q8 or FP16</h1><p>Quantization stores models more compactly and reduces memory requirements.</p><p id="guide-page-summary">LLM quantization represents model weights using fewer bits. Converting the same original model to Q4 or Q8 can reduce storage and execution memory. Choose a file by considering the app, available memory, and answer quality on your tasks.</p><p>A download list containing Q4_K_M, Q8, and FP16 can make the smallest file tempting. Smaller files help fit larger models on your machine, but the compression method can also affect answers and speed. We will first explain the labels, then narrow the choice with the same questions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Fewer bits can reduce weight storage.</li><li>Even 4-bit formats can differ in representation and kernels.</li><li>Weight quantization and KV-cache quantization are separate settings.</li></ol></section><section><h2>Reduce the bits used to represent weights.</h2><p>A model uses numerical weights to process input and calculate the next token. Quantization represents these values with fewer levels to store them compactly. Moving from 16 to 4 bits quarters the bits for the numbers themselves. Actual files also contain auxiliary values, metadata, and components kept at higher precision, so check the download size.</p><p>A model can answer the same PDF differently after its weight representation changes because quantization reduces the levels used to express the original values. Compare the benefit of fitting the model with whether the answer retains the information important to your work.</p><table><caption>Labels are a starting point; check actual sizes in the distributed files.</caption><thead><tr><th scope="col">Label</th><th scope="col">Weight representation</th><th scope="col">When to consider</th></tr></thead><tbody><tr><th scope="row">Q4</th><td>Primarily 4-bit quantization</td><td>Reducing memory to run a model</td></tr><tr><th scope="row">Q8</th><td>Primarily 8-bit quantization</td><td>Comparing quality with Q4 when memory allows</td></tr><tr><th scope="row">FP16</th><td>16-bit floating point</td><td>Examining higher precision and its memory needs</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li></ul></section><figure><img src="https://localai.co.kr/guides/quantization-concept.webp" alt="Dense weight values grouped into fewer levels during quantization" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Representing weights in fewer bits reduces storage.</figcaption></figure><section><h2>Choose a file supported by your app first.</h2><p>Start by narrowing candidates to formats your app can read: GGUF for llama.cpp-based runtimes, MLX conversions for MLX, and the appropriate releases for AWQ/GPTQ servers. Within that format, compare file sizes and answers at different precisions, such as Q4 and Q8. Different group sizes, correction values and mixed precision can change results even with the same 4-bit label.</p><p>Also check the original model, tokenizer, and chat template. Features needing additional components, such as an image encoder or MTP, require them in the distribution. Checking both why the file is smaller and whether the needed features are supported reduces repeat downloads.</p></section><figure><img src="https://localai.co.kr/guides/p11-bit-depth.webp" alt="Weight representation changing from a fine grid to a coarse grid" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Grouping and correction can differ even at the same bit count.</figcaption></figure><section><h2>A smaller file can change the execution path.</h2><p>Consider Q8 exceeding VRAM and placing some weights in system RAM, while Q4 fits entirely on the GPU. Less offloading with Q4 reduces weight-transfer time between the two memories. This is one reason quantization can noticeably change performance on the same machine.</p><p>If both files fit on the GPU, data volume and the efficiency of the quantized kernels matter. Record prefill and decode separately for the same input instead of using the file-size ratio. Keeping the original model, exact filenames, app version, memory placement, and cache settings makes the combination reproducible.</p></section><figure><img src="https://localai.co.kr/guides/p11-quality-memory.webp" alt="A balance comparing model size, memory savings, and answer quality" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare results and review effort on actual questions.</figcaption></figure><section><h2>Compare answers and review time on important questions.</h2><p>For contract renewal dates and automatic-renewal exceptions, first mark the correct answers and evidence in the source. Give Q4 and Q8 the same PDF and questions and compare dates, applicability, and exceptions. Keep the extracted input the same to examine weight-representation differences.</p><p>Where possible, match sampling and seed settings and repeat across several questions. Separate incorrect evidence, missing conditions, and unanswered items, and record human review time. Reliable Q4 answers can justify starting with the current setup; consistently fewer important errors with Q8 can justify additional memory.</p><p>Change weight quantization and KV-cache precision one at a time. Comparing a larger Q4 model with a smaller Q8 model also changes size and architecture, so compare the results and time to finish the task in each setup. The goal is reliable task completion rather than the smallest file or highest bit count.</p></section><aside><h2>Explore quality ranges by quantization</h2><p>Compare estimated quality changes for the same model at Q4, Q8, and FP16.</p><a href="https://localai.co.kr/en?tab=intelligence">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LLM quantization represents model weights using fewer bits. Converting the same original model to Q4 or Q8 can reduce storage and execution memory. Choose a file by considering the app, available memory, and answer quality on your tasks.</dd></div><div><dt>How much memory does it need?</dt><dd>Where possible, match sampling and seed settings and repeat across several questions. Separate incorrect evidence, missing conditions, and unanswered items, and record human review time. Reliable Q4 answers can justify starting with the current setup; consistently fewer important errors with Q8 can justify additional memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MoE vs dense: why low active parameters still need memory</title><link>https://localai.co.kr/en/guides/moe-vs-dense</link><guid isPermaLink="true">https://localai.co.kr/en/guides/moe-vs-dense</guid><description>An MoE model may compute with only some experts, but it still has to store all weights. Compare total parameters, active parameters, and actual memory requirements with dense models.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">MoE vs dense: why low active parameters still need memory</h1><p>MoE computes with selected experts while keeping all the weights available.</p><p id="guide-page-summary">MoE is a model architecture that selects some expert blocks to calculate the next token. Dense models use most of their weights for each token. An MoE labeled '35B total, 3B active' distinguishes the stored model size from the size participating in one token's computation.</p><p>Downloading the model requires its complete weight files, while speed depends on the computation path actually used. Understanding why these numbers differ helps you avoid ruling out a model just because its name is large or underestimating memory from its active count.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Dense uses most weights for each token.</li><li>MoE uses a router to choose expert paths for each token.</li><li>Total size helps explain loading requirements; active size helps explain computation.</li></ol></section><section><h2>The router selects experts for each token.</h2><p>An expert in MoE is a computation block inside the model. A learned router selects blocks from the input, and their results feed the subsequent computation. Rather than imagining small models manually assigned to Korean or coding, think of paths chosen for each token.</p><p>In Dense, most weights in each layer participate. In MoE, shared components and selected experts participate, and the next token may select different experts. Experts unused for one token therefore still need to remain accessible for later computation.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide">How to run Nemotron 3.5 Super VL on DGX Spark or RTX PRO 6000</a></li><li><a href="https://localai.co.kr/en/guides/ling-31-flash-local-guide">What server do you need to run Ling 3.1 Flash?</a></li><li><a href="https://localai.co.kr/en/guides/lfm25-24b-a2b-local-guide">LFM2.5-24B-A2B local LLM: a Korean-capable 24B MoE on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/why-moe-can-be-faster-than-dense">Why a 35B MoE can be faster than a smaller dense model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/moe-routing-concept.webp" alt="Several expert modules with only selected modules on a token's route" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The router chooses expert paths for each token.</figcaption></figure><section><h2>35B total and 3B active serve different roles.</h2><p>B means a billion parameters. The 35B total includes shared components and expert weights; 3B active refers to the scale participating in one token's computation path. That is why downloads and memory start with the total count, while per-token computation starts with the active count.</p><p>Consider a simplified example storing everything in 4 bits. 35 billion×4 bits÷8 is 17.5 billion bytes, or 17.5 GB in decimal units. Counting only 3B active gives 1.5 GB, but the full model also needs the remaining experts. Actual Q4 files add quantization parameters, metadata, and components kept at other precisions, so check their published sizes.</p><table><caption>Use the two counts for different decisions.</caption><thead><tr><th scope="col">Label</th><th scope="col">Meaning</th><th scope="col">Use</th></tr></thead><tbody><tr><th scope="row">35B total</th><td>All stored model weights</td><td>Checking files and loading memory</td></tr><tr><th scope="row">3B active</th><td>Scale participating in each token's computation</td><td>Understanding computation and execution paths</td></tr></tbody></table></section><section><h2>Less computation creates opportunities for higher speed.</h2><p>If an MoE has a smaller active size than a Dense model of similar total size, it can reduce computation per token. Efficiently fetching and computing selected expert weights creates a decode advantage. This is why total B counts alone are insufficient for ranking speed.</p><p>Routing, irregular memory access, expert load, and kernels also consume time. Offloading some weights to system RAM adds transfer time. To retain the benefit of a small active size, inspect memory placement and the supported execution path for that model.</p></section><figure><img src="https://localai.co.kr/guides/p12-expert-routing.webp" alt="Differently colored tokens routed to selected experts" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The next token may select different experts.</figcaption></figure><section><h2>Compare code fixes through the completed tests.</h2><p>For example, fix a function that fails on an empty string. Give both models the same code and error description and ask them to handle empty input while preserving the return format. Tests for normal input, empty input, and existing callers show whether the requested behavior is preserved.</p><p>Record time to first answer, code generation speed, and the number of additional fixes needed to pass the tests. A fast-answering model may take longer overall if it needs several revisions. Comparing the result required by your code alongside waiting time makes selection easier.</p></section><figure><img src="https://localai.co.kr/guides/p12-total-active.webp" alt="All stored experts compared with the subset active for one token" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Loading requires the full weights and room for execution.</figcaption></figure><section><h2>Choose hardware by checking files, context, and results.</h2><p>Check the desired Q4 file on the distribution page and leave memory for the runtime, other apps, and KV cache. Start with a short question to check loading, then test your usual project input length to check memory under the actual workload.</p><p>Then compare the code result, prefill, and decode. An MoE that fits reliably and produces the required fix can be a good option on your current machine. If it fits but waits are long, inspect bandwidth and runtime options; if loading fails, check total capacity and offloading support.</p></section><aside><h2>Compare MoE speed across hardware</h2><p>Compare loading and generation speed for the same 35B MoE model on two machines.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.6-35b-a3b&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MoE is a model architecture that selects some expert blocks to calculate the next token. Dense models use most of their weights for each token. An MoE labeled '35B total, 3B active' distinguishes the stored model size from the size participating in one token's computation.</dd></div><div><dt>How much memory does it need?</dt><dd>Routing, irregular memory access, expert load, and kernels also consume time. Offloading some weights to system RAM adds transfer time. To retain the benefit of a small active size, inspect memory placement and the supported execution path for that model.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Context length, RoPE and sliding-window attention</title><link>https://localai.co.kr/en/guides/context-window-kv-cache</link><guid isPermaLink="true">https://localai.co.kr/en/guides/context-window-kv-cache</guid><description>We explain what a model's maximum context length means and how long contexts affect prefill time, KV cache, RoPE scaling, sliding window, and answer quality.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">Context length, RoPE and sliding-window attention</h1><p>Documents, conversation, and answers share the context space.</p><p id="guide-page-summary">The context window is the token limit an LLM can reference in one request. Instructions, questions, previous conversation, and the new answer share this space with the document text. Longer documents require planning both room for the answer and memory for the KV cache.</p><p>For example, submit a contract, ask for the renewal date, and then request a memo including the exceptions. The second request may add the earlier question and answer to the contract. If the first request works but the follow-up stops midway, checking the actual input and output limit helps locate the cause.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Instructions, documents, conversation, questions, and answers share the context limit.</li><li>Check the supported maximum, configured length, and actual input length separately.</li><li>Long context can increase prefill work and KV-cache requirements.</li></ol></section><section><h2>The app sends more than the document.</h2><p>An app may prepend system instructions, role markers, and tool descriptions. Apps that retain conversation include earlier questions and answers. A document app may send the full contract or only retrieved passages. Check the token display or execution logs because the actual request can be longer than the visible input.</p><p>Token counts cannot be precisely converted from character or PDF-page counts because Korean, numbers, tables, and code tokenize differently. Use the actual input-token count for the same document when comparing. For follow-up requests, also check how much previous conversation was included.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/kv-cache">Reduce KV cache memory: vLLM FP8 setup and response checks</a></li><li><a href="https://localai.co.kr/en/guides/prompt-cache-prefix-cache">MLX-LM Server Cache: Reusing Shared Prompts and Testing Concurrency</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide">How to run Nemotron Bolt on an RTX 3090 or 5090</a></li><li><a href="https://localai.co.kr/en/guides/lilicorr-nemotron-speculative-decoding-guide">What Is LiLiCorr? Speculative decoding for Bolt and Super VL</a></li><li><a href="https://localai.co.kr/en/guides/rtx-spark-laptop-local-ai-guide">RTX Spark laptops: how do they differ from DGX Spark and MacBook Pro?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p13-context-budget.webp" alt="System instructions, conversation, documents, and output space sharing a bounded context strip" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave room for the answer when adding documents.</figcaption></figure><section><h2>Leave room for the answer in a 16,000-token window.</h2><p>Suppose the total limit is 16,000 tokens. Instructions and the contract use 12,000, and previous conversation uses 3,000, leaving 1,000. To allow up to 2,000 answer tokens, reduce the input or increase the total within the supported range. Follow the app's request limits and output-reservation behavior.</p><p>When the length exceeds the limit, an app may reject the request or reduce older conversation. For errors, check the logged token limit; if an answer omits earlier conditions, inspect the actual model input. For a response cut off midway, check the configured output limit, generated length, and termination or truncation indicators.</p><table><caption>An arithmetic example of input and output sharing one space.</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Tokens</th></tr></thead><tbody><tr><th scope="row">Total limit</th><td>16,000</td></tr><tr><th scope="row">Instructions and contract</th><td>12,000</td></tr><tr><th scope="row">Previous conversation</th><td>3,000</td></tr><tr><th scope="row">Room left for the answer</th><td>1,000</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/p13-truncation.webp" alt="Older conversation beyond the context window removed while recent conversation and a summary remain" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If conversation was reduced, inspect the input the app actually sent.</figcaption></figure><section><h2>Separate the supported maximum from the length you use.</h2><p>A model card's 128K or 256K is its supported maximum context length. The runtime configures a length within that range and may reserve cache memory in advance or grow it as needed. Increasing that setting can therefore change available memory even for the same short question.</p><p>Long inputs add prefill work and space for the KV cache used to reference earlier tokens. This explains why execution memory grows while the weight file stays unchanged. Increase only context length while keeping the model, KV format, precision, and concurrency fixed, and record peak memory and time to first token.</p><p>Q4 weights and KV-cache precision are separate settings. Adjust one at a time rather than both together. Use a default length that reliably fits your usual documents and answers, and consider retrieval or split summaries for occasional long documents.</p></section><figure><img src="https://localai.co.kr/guides/p13-memory-growth.webp" alt="KV-cache drawers and first-output waiting time growing as input becomes longer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Long context can require more resources for KV cache and prefill.</figcaption></figure><section><h2>Test whether the answer combines conditions from both ends.</h2><p>Ask about the renewal date near the beginning and the termination exception near the end together. Request clause numbers or evidence sentences and compare them with the source. If the app retrieves only relevant passages, first check that both conditions appear in the retrieved input.</p><p>RoPE extension adjusts positional representations to extend context range. Follow the model and runtime's specified conditions, and test evidence from the beginning, middle, and end with the same questions. Sliding-window attention is a model architecture focused on nearby context; an app dropping old conversation is request construction. Knowing which stage removes information tells you whether to change settings or input.</p></section><aside><h2>Compare first-token time by input length</h2><p>Change the input length from 4K upward to inspect memory and TTFT.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The context window is the token limit an LLM can reference in one request. Instructions, questions, previous conversation, and the new answer share this space with the document text. Longer documents require planning both room for the answer and memory for the KV cache.</dd></div><div><dt>How much memory does it need?</dt><dd>A model card's 128K or 256K is its supported maximum context length. The runtime configures a length within that range and may reserve cache memory in advance or grow it as needed. Increasing that setting can therefore change available memory even for the same short question.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GGUF vs MLX: which model format should you download?</title><link>https://localai.co.kr/en/guides/gguf-vs-mlx</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gguf-vs-mlx</guid><description>Local LLM explains which runtime ecosystem model files for GGUF and MLX fit into and how to check quantization notation and transformation compatibility.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">GGUF vs MLX: which model format should you download?</h1><p>GGUF and MLX differ in both files and execution paths</p><p id="guide-page-summary">GGUF is a file format containing model weights and configuration; MLX is a framework for running models on Apple Silicon. An 'MLX model' on a download page means weights and configuration converted for that framework. Choosing your app first makes it easier to select the right distribution.</p><p>When downloading a model to find a renewal date and auto-renewal exceptions in a contract PDF, you may see both a GGUF file and an MLX folder under the same model name. A runtime must understand the model architecture and tokenization as well as the weights, so check whether your application supports the specific distribution before choosing a file.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>GGUF is a widely used distribution format in the GGML/llama.cpp ecosystem.</li><li>MLX model distributions target the MLX runtime ecosystem for Apple Silicon.</li><li>File format and quantization precision are separate choices.</li></ol></section><section><h2>Distinguish the GGUF container from the MLX distribution path</h2><p>GGUF is a container in the GGML/llama.cpp ecosystem that can hold weights and metadata. A .gguf extension does not mean every new architecture is automatically supported; the runtime must understand the internal structure and required components. If loading fails, check model-specific support in that runtime version, not just the file extension.</p><p>An MLX distribution packages model files and settings for the MLX ecosystem on Apple Silicon. This is not a comparison of two equivalent file extensions, but of distributions for different runtime ecosystems. Renaming a folder or changing an extension does not convert a model.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/lm-studio-local-serving-guide">LM Studio guide: download a model and start chatting</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/openrouter-to-local-llm-fallback-guide">When OpenRouter Is Unavailable, How Do You Switch Your App to a Local LLM?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-model-backup-restore-guide">How to Back Up and Restore a Local LLM You Already Use</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-bolt-24gb-local-guide">Can you run the 74B Nemotron 3.5 Bolt model in 24 GB?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-rtx-3090-5090-guide">How to run Nemotron Bolt on an RTX 3090 or 5090</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-bolt-vs-qwen38-guide">Nemotron Bolt vs Qwen3.8-27B: which is faster for agent work?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p14-gguf-mlx-runtime.webp" alt="Illustration of one base model converted to GGUF and MLX formats and sent through different runtime paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Consider format alongside quantization, runtime features, and available optimizations—not as an extension alone.</figcaption></figure><section><h2>Check the application and file bundle before downloading</h2><p>First check the runtime in the settings or model-import screen of the application you intend to use. GGUF is a natural option for a llama.cpp application on Windows or Linux; for an MLX-based Mac app, check its recommended MLX distribution. GGUF can also be used on Mac, so do not decide from the operating system alone.</p><p>If GGUF is split into multiple parts, download every required shard. For an MLX folder, check that configuration, tokenizer, and weights are present. Verify downloads completed and no shard is missing. Compare checksums when supplied and match listed downloads to local filenames to avoid mixing similarly named quantizations.</p><p>After registering the model in the application, test a simple text question and then the contract input. Record the filename, application/runtime version, and selected path to help isolate failures.</p></section><figure><img src="https://localai.co.kr/guides/p14-portability-paths.webp" alt="Illustration of a portable model file branching to CPU/GPU adapters while a dedicated format connects to unified-memory chips" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>GGUF is convenient across many devices; MLX is designed for the Apple Silicon path.</figcaption></figure><section><h2>Compare quantization labels separately from runtime format</h2><p>Both GGUF and MLX distributions may come in multiple precisions. Q4 or 4-bit describes quantization, not file format. Even at the same bit width, quantization methods can differ, so file size, quality, and speed should not be assumed equal.</p><p>Where possible, use the same base model and similar precision, then compare with the same contract, question, and application input. Record time to first token, generation time, memory, and evidence accuracy. Comparing only model names and tok/s makes it hard to identify whether first-response latency, generation, or quantization caused a difference.</p><p>Chat templates affect how roles and instructions are represented in model input. If the distributions apply different templates, identical text in the prompt box may produce different model inputs. Check templates when comparing runtimes and record differences that cannot be matched. File loading, architecture handling, kernel selection, and memory placement are all part of the execution path, so results cannot be attributed to file format alone.</p></section><section><h2>Test required features after confirming text output</h2><p>An answer to 'When is the renewal date?' does not verify PDF handling or every runtime feature. Test separately whether the application extracts PDF text and sends it to the model, and whether additional capabilities such as image input, tool calls, or MTP work. Relevant weights can be present while the runtime still lacks support for the architecture or feature.</p><p>First verify that the model loads and answers a plain text question, then add each required feature separately. If text works but a PDF table does not, document extraction or input format may be responsible. If even a plain question fails, inspect architecture support and file completeness first. Check the failing stage and logs, including whether all weight shards or a required encoder are present, before redownloading files that may be fine.</p></section><figure><img src="https://localai.co.kr/guides/p14-feature-support.webp" alt="Illustration of two runtimes supporting quantization, caching, and MTP features differently for the same model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Weights alone are not enough; the runtime must understand the architecture and specialized feature.</figcaption></figure><section><h2>Choose based on the evidence needed from the contract</h2><p>There is no universally better format between GGUF and MLX. First verify that your actual application opens it reliably and supports the features needed for the contract PDF. Then compare quality, time to first token, generation time, and memory with the same document and question. Record the runtime selected in the interface or logs.</p><p>If one path is slightly slower but finds dates and exceptions accurately while another misses evidence, the path that completes the task better fits the current goal. You can improve document extraction and retest the faster path later. If both find evidence accurately, decide based on latency, memory, and application usability.</p><p>Once you find a working combination, record file and application/runtime versions so you can compare the same question after updates. The decision is not just about extension or file size; it is whether the model opens and handles the document accurately with the features you need.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>GGUF is a file format containing model weights and configuration; MLX is a framework for running models on Apple Silicon. An 'MLX model' on a download page means weights and configuration converted for that framework. Choosing your app first makes it easier to select the right distribution.</dd></div><div><dt>How much memory does it need?</dt><dd>Where possible, use the same base model and similar precision, then compare with the same contract, question, and application input. Record time to first token, generation time, memory, and evidence accuracy. Comparing only model names and tok/s makes it hard to identify whether first-response latency, generation, or quantization caused a difference.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Running local LLMs across two or more GPUs</title><link>https://localai.co.kr/en/guides/multi-gpu-tensor-parallel</link><guid isPermaLink="true">https://localai.co.kr/en/guides/multi-gpu-tensor-parallel</guid><description>We explain layer partitioning using two GPU VRAMs for local LLM, the difference between tensor parallelism and pipeline parallelism, and PCIe·NVLink communication bottlenecks.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Running local LLMs across two or more GPUs</h1><p>Two GPUs can split a model or share multiple requests.</p><p id="guide-page-summary">Multi-GPU serving can partition one model across cards or place model replicas on separate cards to distribute requests. Two 24 GB GPUs have 48 GB of physical memory in total, but a request cannot use it as one pool unless the runtime distributes model and cache. Model capacity, single-answer latency, and team throughput need separate checks.</p><p>When considering two 24 GB GPUs for a shared coding server, first identify whether the problem is loading a larger model, speeding up one answer, or reducing queues for multiple users. Adding a card also introduces runtime requirements, interconnect communication, cooling, and power constraints.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The runtime must partition model weights and KV cache across GPUs to use their memory together.</li><li>Tensor parallelism splits computation within layers and repeatedly exchanges results between GPUs.</li><li>Evaluate model fit, single-answer speed, and multi-request throughput separately.</li></ol></section><section><h2>Place the weights and cache across the GPUs.</h2><p>Two 24 GB cards provide 48 GB of physical memory in total. But if an application uses only the first GPU, memory on the second does not help load a model on the first. The runtime must support distributing weights and in-use KV cache to use both cards for one larger model.</p><p>Operating-system detection and actual use of both GPUs by a specific model are separate checks. Inspect runtime logs and per-GPU memory to see whether the model was partitioned or loaded on only one card. Workspace and per-request cache also require memory, so all 48 GB cannot be devoted to weights; uneven placement may cause one card to fill first.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-4090-24gb">RTX 4090 24GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-super-vl-local-guide">How to run Nemotron 3.5 Super VL on DGX Spark or RTX PRO 6000</a></li><li><a href="https://localai.co.kr/en/guides/ling-31-flash-local-guide">What server do you need to run Ling 3.1 Flash?</a></li><li><a href="https://localai.co.kr/en/guides/replayssm-hybrid-model-decoding-guide">What is ReplaySSM? Faster decoding for Nemotron and Qwen servers</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-local-llm-scaling-guide">Will two GPUs make a local LLM twice as fast?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/multi-gpu-batching.webp" alt="Comparison of varied-length requests placed in cache blocks on one GPU versus two communicating GPUs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Adding GPUs can change memory capacity and throughput, while communication and request scheduling become new variables.</figcaption></figure><section><h2>Layer splitting places earlier and later model layers on different cards</h2><p>Layer splitting places earlier model layers on one GPU and later layers on another. Input flows through the earlier layers and intermediate results move to the next card, allowing weights that do not fit on one card to be divided across both.</p><p>Each later layer needs results from the previous stage, so transfer and waiting recur between cards. Measure the ability to load a model separately from any improvement in one user's response time. How much multiple requests can overlap depends on runtime scheduling, and unequal GPU memory can make an even split impractical.</p></section><figure><img src="https://localai.co.kr/guides/p15-sharding-model.webp" alt="A diagram of one large model split across two GPUs, with partial computation results combined" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The runtime must explicitly partition a model to use both GPUs' memory for one model.</figcaption></figure><section><h2>Tensor parallelism splits layer computation and communicates frequently</h2><p>Tensor parallelism divides computation within the same model layer across GPUs and exchanges results. Unlike layer splitting, which places earlier and later layers on different cards, tensor parallelism repeatedly communicates during layer execution.</p><p>Check not only motherboard PCIe generation but the actual lane count per slot and the connection arrangement with both cards installed. For NVLink, verify card support and required bridge hardware. Limited interconnect can offset saved compute time, so card specifications or bandwidth cannot simply be added to predict twice the speed. Also confirm which parallel method the application implements and whether it supports the chosen model format.</p></section><figure><img src="https://localai.co.kr/guides/p15-interconnect-bottleneck.webp" alt="A diagram comparing the speed of two GPUs exchanging intermediate results over a narrow bridge versus a wide one" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If PCIe or the interconnect is a bottleneck, speed does not scale with the number of cards.</figcaption></figure><section><h2>Model replicas distribute requests rather than one request's computation</h2><p>If a model fits on one GPU, identical copies can be loaded on both cards to handle separate requests. This can help with team throughput or queues, but it does not split the computation for a single request, so one user's answer does not automatically get faster.</p><p>Layer or tensor splitting addresses a model that cannot fit on one card; replication addresses distribution across requests using the same model. Test each user's wait time and peak memory under concurrent requests, and inspect how the scheduler routes them. Aggregate throughput can rise while individual first-response latency or the longest wait remains high.</p></section><section><h2>Check slots, power, cooling, and runtime support before buying</h2><p>Do not decide based only on the number of motherboard slots. Card thickness may prevent side-by-side installation; check that the power supply and cables can support both cards and that the case has adequate airflow and cooling clearance. Noise and power during sustained operation also matter beyond the card price.</p><p>A multi-GPU setup has a clear rationale when a larger model is required and a supported partitioning path is confirmed. If the goal is speed for one person's model, compare interconnect and installation costs with a single-card alternative. Decide the application, model format, and whether you need partitioning or replication before buying.</p></section><section><h2>Compare expert caching when splitting a large MoE</h2><p>When an MoE does not fit entirely on GPUs, some expert weights stay in system RAM and are transferred when needed. llama.cpp's multi-GPU MoE cache keeps frequently used experts on the GPUs to reduce these transfers. If all weights already fit in GPU memory, start by comparing the ordinary split configuration.</p><table><caption>Two RTX 4090s · with and without expert caching</caption><thead><tr><th scope="col">Setting</th><th scope="col">Prompt tok/s</th><th scope="col">Decode tok/s</th></tr></thead><tbody><tr><th scope="row">Baseline `--fit`</th><td>440.7</td><td>34.78</td></tr><tr><th scope="row">`--fit` + expert cache</th><td>402.0</td><td>60.38</td></tr><tr><th scope="row">CPU experts + cache</th><td>321.5</td><td>64.39</td></tr></tbody></table><p>Development measurement · two RTX 4090s, layer split · Qwen3.8-Flash-Next Q4_0, 93.7 GiB including 65 GiB of experts · EPYC 7742, 16 threads, one NUMA node · SPEED-Bench qualitative, 11 inputs, one sample per category, output-length setting 512, temperature 0, concurrency one. Cache settings used the pre-merge per-GPU budget. [Original measurement and final implementation](https://github.com/ggml-org/llama.cpp/pull/30112)</p><p>In this record, enabling the cache increased decode speed but reduced prompt-processing speed. Compare prefill as well if your goal is a quick first reply to a long document. Short inputs with long replies are more likely to benefit from the decode improvement.</p><p>In merged builds from b11507 onward, specify a total cache budget. For example, `--moe-cache-mib 8192 --tensor-split 1,1` distributes approximately 4 GiB to each of two GPUs. Cache shares VRAM with weights, KV cache and working buffers, so check spare VRAM in your existing setup and start with a small budget.</p><ul><li><a href="https://localai.co.kr/en/guides/tensorfold-glm53-flash-rtx-pro6000-guide">GLM-5.3 Flash with two RTX PRO 6000 cards</a></li></ul></section><aside><h2>Dual GPU configuration comparison</h2><p>Compare single card and two-card configurations based on memory, speed, and power.</p><a href="https://localai.co.kr/en/hardware">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Multi-GPU serving can partition one model across cards or place model replicas on separate cards to distribute requests. Two 24 GB GPUs have 48 GB of physical memory in total, but a request cannot use it as one pool unless the runtime distributes model and cache. Model capacity, single-answer latency, and team throughput need separate checks.</dd></div><div><dt>How much memory does it need?</dt><dd>Two 24 GB cards provide 48 GB of physical memory in total. But if an application uses only the first GPU, memory on the second does not help load a model on the first. The runtime must support distributing weights and in-use KV cache to use both cards for one larger model.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>FlashAttention vs PagedAttention: what each one changes</title><link>https://localai.co.kr/en/guides/flashattention-pagedattention</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flashattention-pagedattention</guid><description>We explain how FlashAttention and PagedAttention, which have similar names but solve different problems, affect attention calculation, KV cache memory management, and server throughput.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">FlashAttention vs PagedAttention: what each one changes</h1><p>FlashAttention reduces data movement; PagedAttention manages KV-cache placement</p><p id="guide-page-summary">FlashAttention divides attention computation into tiles to reduce repeated writes and reads of intermediate data in memory. PagedAttention manages KV cache for multiple requests in fixed-size blocks, allocating and reclaiming what each needs. One is a computation kernel and the other is per-request memory management; they have different roles and can be supported together.</p><p>A request to read a long code repository goes through prefill, which computes relationships among input tokens; during answer generation, KV cache stores state needed to continue. FlashAttention addresses memory movement in attention computation, while PagedAttention handles cache placement across requests.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>FlashAttention reduces intermediate data movement in the attention kernel.</li><li>PagedAttention manages KV cache in fixed-size blocks.</li><li>The features are not substitutes; they perform different jobs and may be used together.</li></ol></section><section><h2>FlashAttention tiles attention computation for long inputs</h2><p>The model uses attention to compute which input tokens should inform one another. Longer inputs can require more intermediate results to be written to and read from GPU memory. FlashAttention processes small tiles and avoids repeatedly storing large intermediate arrays, reducing data movement.</p><p>It uses the full input in attention computation while reducing storage and movement of intermediate results. If the first token takes a long time for a lengthy input, record model loading and prefill separately and check runtime logs to see whether a FlashAttention kernel was selected.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p16-flash-tiled-attention.webp" alt="A diagram of a large attention matrix divided into small tiles and processed repeatedly close to the compute units" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>FlashAttention computes in tiles instead of storing the full intermediate matrix far from the compute unit, reducing memory traffic.</figcaption></figure><section><h2>PagedAttention manages per-request KV-cache space</h2><p>When requests of different lengths arrive, each conversation keeps input and generated-token state in KV cache. PagedAttention manages the cache in fixed-size blocks, allocating what each request needs and reclaiming it when finished. This can reduce unused space caused by reserving large contiguous regions for each request.</p><p>When a short request B finishes while request A continues, B's blocks can be reclaimed and assigned to C. A's conversation state remains until A finishes. This shares space more efficiently between requests within the same GPU memory.</p><p>More concurrent requests or longer documents still require cache for active states. When input prefill shares GPU compute with ongoing decode, token intervals can lengthen; runtime support for chunking and scheduling long prefill varies. More efficient cache placement still requires physical memory for active state.</p></section><figure><img src="https://localai.co.kr/guides/p16-paged-cache.webp" alt="Requests of different lengths placed with reduced gaps into fixed-size KV-cache pages" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>PagedAttention manages cache by assigning needed pages rather than reserving large contiguous regions.</figcaption></figure><section><h2>Their different roles allow them to work together</h2><p>FlashAttention changes how data moves through memory during attention computation; PagedAttention assigns each request's KV cache to blocks. If a runtime supports both, they can optimize prefill computation and request-memory management together. A slow prefill for long code and scarce cache space under team concurrency require separate checks.</p><p>Support varies by GPU, model architecture, quantization, and application version, and a runtime may choose a path automatically. Do not infer use from an option name in a menu; check logs for the selected kernel and cache path. Record the working defaults before forcing settings.</p></section><figure><img src="https://localai.co.kr/guides/p16-memory-io.webp" alt="Comparison of attention repeatedly moving data to memory versus reducing transfers through tiled processing" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The key is not only operation count but how often intermediate data is written to and read from slower memory.</figcaption></figure><section><h2>Measure one request and team-server behavior separately</h2><p>For one short function question, few cache states are concurrent, so PagedAttention's server-memory placement benefit may be limited. FlashAttention also need not have the same effect on prefill and token-by-token decode. Record time to first token and token intervals during generation separately.</p><p>For a team server, establish a single-request baseline, then overlap a short question and another analysis with a long code review. Record time to first token, generation interval, peak memory, per-request latency, and aggregate throughput to see which kernel or cache change benefits users.</p><p>Test one supported runtime option at a time and confirm application in logs. If users cannot configure an option, do not invent one; inspect automatic selection. Check FlashAttention when input computation is the bottleneck and PagedAttention support when cache placement under concurrent requests is the issue.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>FlashAttention divides attention computation into tiles to reduce repeated writes and reads of intermediate data in memory. PagedAttention manages KV cache for multiple requests in fixed-size blocks, allocating and reclaiming what each needs. One is a computation kernel and the other is per-request memory management; they have different roles and can be supported together.</dd></div><div><dt>How much memory does it need?</dt><dd>When requests of different lengths arrive, each conversation keeps input and generated-token state in KV cache. PagedAttention manages the cache in fixed-size blocks, allocating what each request needs and reclaiming it when finished. This can reduce unused space caused by reserving large contiguous regions for each request.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Continuous batching: throughput is not single-user speed</title><link>https://localai.co.kr/en/guides/continuous-batching</link><guid isPermaLink="true">https://localai.co.kr/en/guides/continuous-batching</guid><description>We explain how continuous batching increases server throughput by putting LLM requests of different lengths in and out of running batches, and how it differs from single-user latency.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Continuous batching: throughput is not single-user speed</h1><p>Fill completed requests' slots with new requests to keep computation going.</p><p id="guide-page-summary">Continuous batching removes completed requests from an active batch and admits waiting requests into free slots, keeping server compute occupied. It can increase aggregate throughput, but each user's time to first token, inter-token latency, and completion time must be measured separately.</p><p>On a shared server, one person may request a long contract analysis while another asks a short date question. With different arrival times and output lengths, a fixed batch can leave a slot idle after a request finishes; continuous batching fills it with a waiting request.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A new request enters the slot vacated by a completed request.</li><li>Aggregate throughput and individual request latency are different metrics.</li><li>MTP and speculative decoding support may differ between single-request and batched paths.</li></ol></section><section><h2>Continuous batching reuses slots when requests finish</h2><p>A fixed batch runs a defined group of requests together, so a slot may sit idle after a short response finishes while longer requests continue. Continuous batching removes the completed request and admits a waiting one, keeping GPU compute occupied. It shares the same model weights across requests rather than making a separate copy for each.</p><p>The key question is how steadily the server handles overlapping requests. With only one user request, there are no other slots to fill, so measure that request's first-token latency and token intervals separately.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/prompt-cache-prefix-cache">MLX-LM Server Cache: Reusing Shared Prompts and Testing Concurrency</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p17-arrival-scheduler.webp" alt="A scheduler continuously adds requests arriving at different times into free slots in an active batch" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Continuous batching can add a new request to a free slot before all active requests finish.</figcaption></figure><section><h2>Distinguish aggregate tok/s from one user's response time</h2><p>A dashboard's total tok/s may sum tokens generated for multiple requests at once. An individual user cares about time to the first token, gaps between their tokens, and completion time. Aggregate throughput may rise even while one request waits in a queue or sees longer token intervals.</p><p>Check whose time a reported aggregate value represents. Total tokens served help compare system capacity, while an individual document-chat experience is reflected in per-request latency. The two metrics do not necessarily move by the same proportion.</p></section><figure><img src="https://localai.co.kr/guides/p17-throughput-latency.webp" alt="Illustration comparing a throughput path serving many requests with a low-latency path prioritizing one request" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Aggregate tok/s can rise while an individual request waits longer for its first or next token.</figcaption></figure><section><h2>Shared weights and per-request KV caches are different</h2><p>Multiple requests can share model weights while keeping separate input contexts, generated output, and continuation positions. Each needs KV cache for its state. More concurrent requests or longer documents can increase cache memory, so do not raise concurrency and context limits without considering headroom.</p><p>A long document's prefill also consumes GPU compute. Sharing resources with active decode can lengthen token intervals. Some runtimes chunk long prefill and schedule it between requests, but support and policy vary by implementation and configuration. Paged KV or common-prefix caching can improve cache management or reuse, but does not add physical memory.</p></section><figure><img src="https://localai.co.kr/guides/p17-batch-slots.webp" alt="A completed sequence leaves an execution slot and a waiting request immediately fills it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Reusing slots as requests finish can reduce idle compute in fixed batches.</figcaption></figure><section><h2>Check whether single-request MTP or speculative decoding works in batches</h2><p>MTP can use additional prediction heads included with a model; speculative decoding may use a separate draft model. Both include a path that proposes candidate tokens for the main model to verify. Working for a single request does not establish support in batched execution; that depends on runtime and model configuration.</p><p>Test a single request and an overlapping multi-request run separately; inspect logs to see whether candidate generation and verification are actually used. If the batched path is unsupported, execution may fall back to standard decoding. Record time to first token and token intervals for individual conversations under concurrency.</p></section><section><h2>Test throughput and user waits using realistic arrival order</h2><p>Establish a one-request baseline, then reproduce A's long analysis overlapped by B's short question, followed by C's summary when B finishes. Record arrival time, time to first token, token intervals, completion time, and concurrency to see how long each user waits as new requests fill slots.</p><p>Also test arrival patterns that resemble the actual application, whether requests arrive together or gradually. Inspect long-waiting requests as well as average throughput. For personal use, prioritize a single response; for a shared team server, use throughput and latency under realistic overlap. GPU utilization or aggregate tok/s alone cannot show that one user's answer got faster.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Continuous batching removes completed requests from an active batch and admits waiting requests into free slots, keeping server compute occupied. It can increase aggregate throughput, but each user's time to first token, inter-token latency, and completion time must be measured separately.</dd></div><div><dt>How much memory does it need?</dt><dd>Multiple requests can share model weights while keeping separate input contexts, generated output, and continuation positions. Each needs KV cache for its state. More concurrent requests or longer documents can increase cache memory, so do not raise concurrency and context limits without considering headroom.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local image generation: software, hardware and your first image</title><link>https://localai.co.kr/en/guides/local-image-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-image-generation-guide</guid><description>A practical route from ComfyUI installation and model selection to checking VRAM, generating a first image and comparing hardware.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Local image generation: software, hardware and your first image</h1><p>Create poster-background candidates with local image generation</p><p id="guide-page-summary">Local AI image generation turns a written scene into an image on your computer. Connect an image model to ComfyUI to create thumbnails and poster backgrounds. Start with GPU requirements, then work through setup and your first image.</p><p>To make a thumbnail or poster background, start with the computer you already own. Choose the app and model files for that hardware, save one image successfully, then increase the resolution or image count.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The app, model, workflow, and weight files are distinct components.</li><li>Qwen-Image 2.1 does not use the same file configuration as Qwen-Image-2512; it needs a dedicated VAE and Qwen3-VL encoder.</li><li>Image count and resolution affect peak memory and total waiting time in different ways.</li></ol></section><section><h2>Choose a starting path for your PC</h2><p>On Windows, check the GPU name and dedicated GPU memory in Task Manager. On an Apple Silicon Mac, check the chip and unified memory in About This Mac. Then choose an installation path below. Model files and intermediate generation data both use memory, so start with one image.</p><table><caption>A first execution path for the hardware you own</caption><thead><tr><th scope="col">Your hardware</th><th scope="col">First run</th><th scope="col">Next check</th></tr></thead><tbody><tr><th scope="row">NVIDIA · VRAM 8GB</th><td>Small checkpoint · 512×512 · one image</td><td>Save a basic image, then check model files and memory</td></tr><tr><th scope="row">NVIDIA · VRAM 12~16GB</th><td>ComfyUI · model-specific quantization and offload</td><td>Qwen-Image GGUF model, encoder and VAE files</td></tr><tr><th scope="row">NVIDIA · VRAM 24~32GB</th><td>ComfyUI · the chosen model's basic workflow</td><td>Generation time at a fixed resolution and step count</td></tr><tr><th scope="row">Apple Silicon Mac</th><td>ComfyUI's Metal path or a Mac GGUF runtime</td><td>Free unified memory and the model's Mac instructions</td></tr><tr><th scope="row">AMD Radeon · Intel Arc</th><td>An installation matching ComfyUI's support table</td><td>OS, GPU and PyTorch combination; custom-node support</td></tr></tbody></table><p>With 8 GB VRAM, start with a small checkpoint and a basic workflow that generates one 512×512 image. Once it saves successfully, check the file set and memory requirements of the model you want to try next. The standard FLUX.2 [klein] 4B configuration lists about 13 GB VRAM; an 8 GB card needs a separate path supporting quantization or CPU offload.</p><p>[ComfyUI hardware support](https://docs.comfy.org/installation/system_requirements) · [FLUX.2 klein 4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B)</p><ul><li><a href="https://localai.co.kr/en/guides/comfyui-install-first-image">Follow ComfyUI setup through saving an image</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Choose models and workloads by VRAM capacity</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-gguf-guide">Qwen-Image 2.1 GGUF files and execution steps</a></li><li><a href="https://localai.co.kr/en/generate">Estimated time to make one image on your hardware</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/comfyui-first-workflow-before-gpu-upgrade">Before buying a GPU for ComfyUI, decide on one image you need to make</a></li></ul></section><section><h2>Distinguish the app, model, and workflow</h2><p>ComfyUI loads image models and connects generation steps. Model files contain the weights used to compute an image; a workflow connects loading, the prompt, generation and saving. Start by completing one basic workflow supported by your installation.</p><p>Open the workflow in the first-image guide and select the checkpoint. Describe the scene in the prompt and run one image. When the result appears and a file is saved in the output folder, the first run is complete. Change the model or output size one at a time before adding custom nodes.</p><p>If a node turns red, check whether its named custom node is installed. If the model selector is empty, check the file folder against the workflow's loader. For an out-of-memory error, return to one image, lower the resolution and rerun.</p><ul><li><a href="https://localai.co.kr/en/guides/comfyui-install-first-image">Install ComfyUI and run your first image workflow</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-local-guide">Qwen-Image 2.1 setup and editing</a></li><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-gguf-guide">Qwen-Image 2.1 file configuration</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-jobs.webp" alt="An illustration of a local workstation producing thumbnails, product images, posters, and reference-image variations" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Local image generation can repeat drafts, product shots, posters, and image variations on one device.</figcaption></figure><section><h2>Qwen-Image 2.1 has a dedicated file configuration</h2><p>Qwen-Image 2.1 was released in September 2026 and does not share the execution-file configuration of Qwen-Image-2512. Generation and reference-image editing use a dedicated VAE and Qwen3-VL encoder, so follow the file and support requirements in the installation guide for this variant. This version is under a research license. Keep the unpublished festival draft as practice; check terms before publishing for an actual event.</p></section><section><h2>Set the composition on a small draft, then check final size</h2><p>Once the app, model, and workflow are ready and saving works, generate a small background draft. Open the saved image and check the cinema entrance, warm windows, and empty title area on the right. If decoration fills the space, revise one condition—for example, “entrance on the left, leave the right side empty.” Do not assume a composition that works at low resolution will remain at larger output; check the publication size too.</p><p>Inpainting can change a selected area, but it is not available in the same way for every model and app combination. To revise a sign or window, check whether the workflow accepts an image input or mask. If not, adding the title or removing a small flaw in an editor may be simpler than regenerating the whole image. Keep the model name, image dimensions, and changed settings with each candidate file.</p></section><figure><img src="https://localai.co.kr/guides/local-image-resolution-batch.webp" alt="An illustration comparing one large image with several small drafts laid out like a contact sheet, showing the effects of resolution and batch size" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Higher resolution and batch size change time and memory use; separate drafts from final output.</figcaption></figure><section><h2>Test batch size and resolution in the actual workflow</h2><p>Generating several images at once can raise peak memory because the system keeps more intermediate data. If a four-image batch runs out of memory, check the memory needed for one image and the supported resolution. When producing several candidates, compare the total completion time.</p><p>Occasionally generating one image and producing many candidates every week have different memory and waiting costs. Include whether you must close your browser or editor during generation as part of the real workflow. Record peak memory, failures, and total wait as you raise resolution or batch size to decide whether hardware changes are needed.</p><ul><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Next image task to try by VRAM capacity</a></li><li><a href="https://localai.co.kr/en/generate">Explore generation time by hardware and model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-offline-workspace.webp" alt="An illustration of a reference image passing through a local computer and being saved in an archive in a workspace disconnected from the network" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For sensitive product images or unreleased designs, check external calls and sync paths too.</figcaption></figure><section><h2>Review saved files and publication conditions</h2><p>When the run completes, open the saved file at full size and inspect edge artifacts, patterns in the title area, and unintended text. Enter the event name and time in an editor rather than relying on model output, then check legibility on mobile. Before publishing, review model license, reference-photo rights, faces and trademarks, and platform policy; also check whether extensions send images externally and whether the work folder syncs automatically.</p><p>The generation demo estimates wait time from registered models and task conditions. It does not generate a new image on your device. To measure your actual workflow, record model loading, image generation, and time spent retrying failed candidates separately.</p><p>If one image saves reliably and the wait for candidates is acceptable, you can start with your current setup. If repeated generation stalls, check memory; if memory is available but generation is slow, consider an upgrade based on the supported execution path and measured bottleneck.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Explore image-generation time by hardware</h2><p>Choose a model and hardware to see the estimated time to complete one image.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Local AI image generation turns a written scene into an image on your computer. Connect an image model to ComfyUI to create thumbnails and poster backgrounds. Start with GPU requirements, then work through setup and your first image.</dd></div><div><dt>How much memory does it need?</dt><dd>On Windows, check the GPU name and dedicated GPU memory in Task Manager. On an Apple Silicon Mac, check the chip and unified memory in About This Mac. Then choose an installation path below. Model files and intermediate generation data both use memory, so start with one image.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Qwen-Image 2.1 was released in September 2026 and does not share the execution-file configuration of Qwen-Image-2512. Generation and reference-image editing use a dedicated VAE and Qwen3-VL encoder, so follow the file and support requirements in the installation guide for this variant. This version is under a research license. Keep the unpublished festival draft as practice; check terms before publishing for an actual event.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>FLUX or Qwen Image: choose a model for the job</title><link>https://localai.co.kr/en/guides/flux-qwen-local-image-models</link><guid isPermaLink="true">https://localai.co.kr/en/guides/flux-qwen-local-image-models</guid><description>Compare FLUX.2 Klein and Dev with Qwen-Image-2512 for fast drafts, text rendering, reference-image editing, and detailed results.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">FLUX or Qwen Image: choose a model for the job</h1><p>Choose an image model by separating poster backgrounds, photo edits, and text</p><p id="guide-page-summary">FLUX and Qwen image models take text prompts to create images, and some runtime paths can use reference images to produce edits. For a café poster, treat background concepts, preserving the shop photo, and exact event wording as separate tasks, and check that the app and model file support the required inputs.</p><p>The needed features and selection criteria change depending on whether you want several quick background ideas, to preserve the composition of an original photo, or to place exact event wording. Define what counts as success, compare results with the same input, and proofread text in an editor before publishing.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Background concepts, exact wording, and reference-image preservation have different success criteria.</li><li>With the same café photo and prompt, compare revision count and proofreading time as well as generation time.</li><li>Local execution does not change the model license or rights to people, logos, or works in a photo.</li></ol></section><section><h2>Decide what to create and what to preserve in the poster</h2><p>For example, you might make a poster that keeps the café's window and tables while adding an evening-event mood. Creating a blank background, editing a scene with the original photo as a reference, and placing exact event wording each have different success criteria.</p><p>If preserving the photo's structure matters, first check whether the chosen model distribution and app really support image input and editing. If you only need a new background, compare the concept's look and the wait. If wording must be exact, also consider entering it directly in a design tool rather than using generated text as the final copy.</p><p>FLUX.2 variants and the Qwen-Image family may differ in file format and size, input requirements, and app support. Check the exact distribution, required text encoder and VAE, and editing-workflow support so you can tell why an output may fail.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-first-image-guide">Make your first image locally with FLUX.3 Klein</a></li><li><a href="https://localai.co.kr/en/guides/flux3-klein-reference-editing-layout">Edit reference photos and guide layout with FLUX.3 Klein</a></li><li><a href="https://localai.co.kr/en/guides/flux2-klein-mac-editing-guide">Edit Reference Images with FLUX.2 Klein on Mac</a></li><li><a href="https://localai.co.kr/en/guides/comfyui-install-first-image">ComfyUI first image: install, load a model and fix common errors</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-image-model-toolbox.webp" alt="An illustrated workbench with four tools for quick concepts, text rendering, reference-image editing, and detailed description" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Choose by the work you do most and the input features you need rather than a single model ranking.</figcaption></figure><section><h2>Creating the background and wording separately makes review easier</h2><p>For the first concept, create the evening light by the café window and leave space for text. Once the background is chosen, enter the event date and menu name in a design tool so you can correct a digit or spelling without regenerating the background.</p><p>If the model rendered the wording too, inspect letter shapes, placement, and spacing at the actual poster size. A wrong character or digit can make event information unusable, so proofread the final text and check legibility on a small screen or at print size. When comparing, record not only generation time but also retries needed for a usable concept and post-processing time.</p></section><figure><img src="https://localai.co.kr/guides/local-image-poster-text.webp" alt="An editing scene adjusting a poster's title and image areas with letter-shaped blocks" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Check poster wording, letter shapes, and spacing at the actual output size.</figcaption></figure><section><h2>Set preservation criteria before comparing reference-photo edits</h2><p>When using a café-window photo as a reference, decide which lighting and decorations may change and which signs and furniture must stay. Place the result beside the original at the same size and inspect table edges, window frames, and logo placement to distinguish a similar mood from preserved details.</p><p>Editing with a reference image is a different input task from creating an empty scene from text. Check whether the model file and app support image input or masked editing. If they do not, consider using the generated result as a background and placing the original logo and wording again in an editor.</p><p>Compare the original and generated image and note whether only the background lighting changed or the table and window structure changed too. Rather than relying on a longer prompt to preserve shapes, check whether editing inputs such as reference strength or masks are actually supported by the app.</p></section><figure><img src="https://localai.co.kr/guides/local-image-reference-editing.webp" alt="A mood board combining color, composition, and material details from several reference photos into one image" width="1672" height="941" loading="lazy" decoding="async"><figcaption>For reference-image editing, compare the supported number of inputs and how well the original forms are preserved.</figcaption></figure><section><h2>Compare FLUX and Qwen by the inputs and results you need</h2><p>FLUX.2 Klein is a candidate to examine for quick concepts or relatively light editing. Compare FLUX.2 Dev after checking whether its file size and runtime requirements fit. Qwen-Image-2512 is a candidate for evaluating text and scene rendering, but do not assume event wording will always be exact; proofread before publishing.</p><p>Qwen-Image 2.1 integrates editing and RGBA workflows but is under a research license. Do not assume it uses the same files or structure as Qwen-Image-2512; check its dedicated VAE and encoder combination, app support, and whether the planned use complies with the license.</p><p>A change of concept model does not ensure the same composition and colors, so include the time needed to regenerate and select a new candidate. Frequent switching can repeat model-loading waits, but if you choose a background first and then move to an editor, you can load only the needed models in sequence.</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-speed-guide">Compare Qwen-Image 2.1 generation time and execution requirements</a></li></ul></section><section><h2>Check the time to finish a poster and the rights for its use</h2><p>Match the café photo, wording, output size, and one-image generation conditions. Record whether you reload the model each time or keep it open, then note time to the first candidate, revisions needed to find a usable composition, and time to place and proofread the wording. This separates one generation's speed from the time to finish a poster.</p><p>The site's time comparison is an estimated wait under its listed runtime conditions, not a calculation of the chance that your photo and prompt will produce a usable result. If a background concept is enough, use a lighter candidate; if photo preservation matters, verify an actual path that supports image input. Before publishing, read the exact variant's license and terms in its model repository and separately check rights for people, logos, and works in reference photos. Local execution does not grant commercial-use rights.</p></section><section><h2>Choose newer models by task and runtime</h2><p>Start with the job, not the model name. For a first image in ComfyUI, use the FLUX.3 Klein distilled template. For an eight-step image workflow, follow the official Z-Image-Turbo Diffusers path. For reference editing, verify that the app exposes editing support for that model. Base and distilled variants can use different step counts and resources, so do not combine them in one speed table.</p></section><section><h2>Keep published timings tied to their runtime</h2><p>The published FLUX.3 Klein GPU chart lists about 4 seconds on an RTX 5090 and under 9 seconds on an RTX 4070 for one 1024×1024 distilled image at 16 steps. ComfyUI’s template defaults to 15 steps and has a separate prompt-upscaler setting, so do not copy the chart as a template runtime. API response time is a separate measure. [Published FLUX.3 Klein timings](https://bfl.ai/blog/flux-3-image-klein)</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare image-generation times by model</h2><p>Review estimated generation time and memory use by hardware for FLUX and Qwen models.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>FLUX and Qwen image models take text prompts to create images, and some runtime paths can use reference images to produce edits. For a café poster, treat background concepts, preserving the shop photo, and exact event wording as separate tasks, and check that the app and model file support the required inputs.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Qwen-Image 2.1 integrates editing and RGBA workflows but is under a research license. Do not assume it uses the same files or structure as Qwen-Image-2512; check its dedicated VAE and encoder combination, app support, and whether the planned use complies with the license.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local video generation: workflows and PC requirements</title><link>https://localai.co.kr/en/guides/local-video-generation-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-video-generation-guide</guid><description>Choose text-to-video or image-to-video, then match model, memory, frame count and duration. Start with a short clip before comparing hardware.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Local video generation: workflows and PC requirements</h1><p>Animate a still photo into a short local video</p><p id="guide-page-summary">A local image-to-video model takes a still image and motion instructions, computes frames over time, and saves a playable video. The photo provides the opening composition and subject, but you need to play the finished clip to check whether their shape remains consistent.</p><p>Suppose you want a five-second shot from a small glass-bottle product photo, with only a slow camera push-in. If the bottle rotates and the lighting and background also change, it is harder to identify why the result differs. Defining the subject and one motion first makes success easier to judge. Image-to-video starts from a supplied composition, while text-to-video creates the opening scene from scratch.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Playback duration and generation time differ: one is how long you watch; the other includes computation, preparation, and saving.</li><li>You cannot estimate video cost by multiplying frame count by image-generation time; video models may process temporal information in groups.</li><li>Intermediate workspace uses GPU memory in addition to weights. Offloading and multi-GPU execution require model and runtime support.</li></ol></section><section><h2>Separate playback duration from generation waiting time</h2><p>A five-second video describes its playback duration. The generator reads the input image, computes the scene over time, and saves a video file, so generation time must be measured separately.</p><p>For example, a five-second output at 24 fps contains 24×5=120 displayed frames. This count comes from the frame rate and playback duration; it does not mean the model generates 120 independent images.</p><p>At fixed duration, changing frame rate changes displayed frame count; at fixed frame count, changing frame rate changes playback duration. Adding intermediate frames with post-generation interpolation does not proportionally increase the number computed by the original generator. Do not compare generation times across different output conditions as if equivalent; record the actual generated duration and editing time separately.</p><ul><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Choose a Wan, Hunyuan, or MiniMax runtime path</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/ltx-retake-dubit-local-video-edit-guide">LTX Retake and Dub-It guide: choose interval editing or dialogue changes</a></li><li><a href="https://localai.co.kr/en/guides/swiftvr-local-video-restoration-guide">Restore old footage with an RTX 5090: a local SwiftVR guide</a></li><li><a href="https://localai.co.kr/en/guides/pruna-qwen-image-2-1-local-guide">Run Pruna-Qwen-Image-2.1 locally: choosing its 5- or 8-step adapter</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-photo-storyboard.webp" alt="A storyboard showing a still photo becoming video frames with different camera and subject motion" width="1672" height="941" loading="lazy" decoding="async"><figcaption>The input photo defines the opening; play the clip to check whether the subject stays consistent.</figcaption></figure><section><h2>GPU memory also needs workspace beyond model weights</h2><p>After model loading, the input image, temporal intermediate representations, output dimensions, text encoder, and VAE can all use runtime memory. A checkpoint fitting on disk or loading onto the GPU does not ensure enough memory for frame computation. Even on the same GPU, precision, resolution, frame count, and concurrent workloads change which settings fit.</p><p>Offloading can reduce GPU pressure by keeping some data in system memory or storage, but data transfers take time and host memory is needed. Multi-GPU execution also requires the model and runtime to support sharding; adding card capacities does not predict compatibility or speed. Test with your usual editor and browser open during generation, and record open apps and peak memory.</p><ul><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Understand video VRAM and system RAM</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-video-frame-cost-repaired-20261016.webp" alt="Three film reels of different sizes and stacks of landscape contact prints on a wooden desk." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Workspace memory and waiting time vary with resolution and generated frame count.</figcaption></figure><section><h2>Review motion through the middle and end of the clip</h2><p>Play the saved clip from beginning to end. Check whether the bottle's shoulders and label stay consistent, the camera and background move naturally, and motion remains continuous. Playback can reveal flicker missed in still frames. Distinguish perspective changes as the camera approaches from distortions of the subject itself to identify what needs fixing.</p><p>If the shape changes midway, try reducing the requested motion or using a simpler source image before increasing resolution. In the bottle example, if the label flickers, keep settings fixed and reduce only the camera movement for a second candidate. Save prompt, model, settings, and seed; changing one condition at a time makes comparison clearer.</p></section><section><h2>Increase resolution and duration after testing a short clip</h2><p>Rather than starting with a long clip or large resolution, use a short, small setting supported by the model and check continuity of the bottle outline and camera motion. Increasing duration at the same frame rate adds more temporal span; increasing resolution adds more pixels to process at each point. Workspace and compute vary by settings, so file size alone cannot predict them.</p><p>When the short preview preserves the shape, increase to the target resolution and duration and review again. Frame limits differ by model, so do not copy values unchanged from another model; record any changes to source image, prompt, dimensions, and duration.</p></section><figure><img src="https://localai.co.kr/guides/local-video-hardware-tiers.webp" alt="A workstation illustration comparing workloads on 16 GB, 24 GB, 48 GB, and multi-GPU setups" width="1672" height="941" loading="lazy" decoding="async"><figcaption>GPU capacity alone does not establish whether a video will run; test model, resolution, and duration together.</figcaption></figure><section><h2>Check audio and editing separately from video output</h2><p>Check whether the video model also generates audio. Even when supported, listen separately for synchronization with motion and unwanted speech. You can instead make a silent video and add music or effects in an editor. Choose based on whether all-in-one audio/video is convenient or whether you need to adjust tracks separately later.</p><p>When joining clips, align cut points, color, and volume in editing. Post-production is not included in the model’s file-generation time, so assess the full delivery workflow separately.</p></section><section><h2>Distinguish the site’s sample playback from local generation</h2><p>After the estimated wait, the site demo shows a prepared video sample. To check a real result, generate a short video through a path that supports your input image, target length, and resolution, then play it through to the end.</p><p>If your current hardware has enough workspace, produces acceptable motion, and repeated waiting is manageable, start with that setup. If runs require clearing memory or frequently stall, use measurements to decide whether more memory or another supported path is needed. Animating an occasional photo and producing many clips every day require different throughput.</p><ul><li><a href="https://localai.co.kr/en/generate?mode=video">Video-generation settings and estimated wait</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-generation-vram">Why video generation needs VRAM and system RAM</a></li></ul></section><section><h2>Choose a video model by generation or editing task</h2><p>First separate text-to-video, animating a still image, and regenerating part of an existing clip. LTX-2.5 offers a fast text-prompt path with synchronized audio and a high-quality DFR path. Retake regenerates a video region, while Dub-It is a voice/dialogue LoRA based on LTX-2.3; do not present it as the same LTX-2.5 feature. [Official LTX-2.5 overview](https://ltx.io/model/ltx-2-5)</p></section><section><h2>Hold resolution and duration constant for a first comparison</h2><p>For a first comparison, keep the scene prompt, frame count, and aspect ratio the same, then play each finished file from start to end. Video runtime may include model loading, frame generation, encoding, and saving. Do not label an unspecified interval as ‘generation time’; record API round-trip latency separately from local GPU compute. Where hardware timings are not published, give the execution path and minimum requirements instead of estimates.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Explore video-generation time by hardware</h2><p>Choose a model and hardware to see the time for a short video to complete.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local image-to-video model takes a still image and motion instructions, computes frames over time, and saves a playable video. The photo provides the opening composition and subject, but you need to play the finished clip to check whether their shape remains consistent.</dd></div><div><dt>How much memory does it need?</dt><dd>Offloading can reduce GPU pressure by keeping some data in system memory or storage, but data transfers take time and host memory is needed. Multi-GPU execution also requires the model and runtime to support sharding; adding card capacities does not predict compatibility or speed. Test with your usual editor and browser open during generation, and record open apps and peak memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Wan 2.2 and MiniMax: choosing a local video workflow</title><link>https://localai.co.kr/en/guides/wan-minimax-local-video-models</link><guid isPermaLink="true">https://localai.co.kr/en/guides/wan-minimax-local-video-models</guid><description>Describes the features, camera motion, simultaneous audio creation, and required memory standards of Wan 2.2 TI2V-5B·T2V-14B and MiniMax H3-Base.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">Wan 2.2 and MiniMax: choosing a local video workflow</h1><p>Choose a Wan or MiniMax path for video, audio, and image input</p><p id="guide-page-summary">Wan 2.2 TI2V-5B starts video from an image, T2V-14B creates a new scene from text, and MiniMax H3-Base outputs video with stereo audio. Decide which inputs and sound your result needs, then test a short clip within each model's resolution, memory, and runtime requirements.</p><p>Suppose you want a short product clip that preserves the shape in a reference photo, with sound that fits the scene if needed. Turning the photo into moving video calls for an image-conditioned TI2V path; creating a new scene from text fits a T2V path. If video and sound must be generated together, consider a model such as H3-Base that supports joint output.</p><p>These paths accept different inputs and use different computation, so model names or parameter counts alone are not enough for comparison. This guide first narrows the options by the desired output, then explains how to interpret LightX2V's H3 Turbo configurations and the memory and resolution requirements of Wan models.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 4-step Turbo LoRA was released on 2026-08-11; 8-step v1.0 followed on 2026-08-27.</li><li>Check the H3 baseline at 544×960 and 124 frames first, then compare Turbo with the same input.</li><li>The repository does not publish a consumer-GPU frame-rate comparison under matched conditions, so step count is not a speed multiplier.</li></ol></section><section><h2>Decide whether you need video alone or sound within the scene</h2><p>If you want a five-second promotional clip that animates a product photo, first decide whether to generate sound as well. MiniMax H3-Base outputs video and stereo audio together. For a silent clip, a Wan video workflow can be followed by adding effects or music in an editor.</p><p>Joint output follows a different computation path from making silent video and adding music later. Check that the model's output fits your editing workflow; if video and audio are saved together, play them back to review timing and whether the sound fits the scene.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local video generation: workflows and PC requirements</a></li><li><a href="https://localai.co.kr/en/guides/flux-qwen-local-image-models">FLUX or Qwen Image: choose a model for the job</a></li><li><a href="https://localai.co.kr/en/guides/local-image-generation-guide">Local image generation: software, hardware and your first image</a></li><li><a href="https://localai.co.kr/en/guides/ltx-retake-dubit-local-video-edit-guide">LTX Retake and Dub-It guide: choose interval editing or dialogue changes</a></li><li><a href="https://localai.co.kr/en/guides/hunyuan-gamecraft-24gb-local-guide">Generate an action-controlled clip with Hunyuan-GameCraft on a 24 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/wan-animate-2-local-video-guide">Animate a photo locally with Wan-Animate-2: what to check first</a></li></ul></section><figure><img src="https://localai.co.kr/guides/minimax-h3-audio-video.webp" alt="A timeline showing video frames alongside left and right stereo waveforms" width="1672" height="941" loading="lazy" decoding="async"><figcaption>H3-Base outputs video and stereo audio together, using a different computation path from silent-video generation.</figcaption></figure><section><h2>Check whether the path accepts images and first/last frames</h2><p>To preserve the shape in an existing bottle photo, choose a model and runtime that accept image input. Adding an image option to a text-only checkpoint does not make it image-conditioned; check what inputs the actual model files and workflow accept.</p><p>The model and tool must both support specifying first and last frames. Fixing those endpoints does not determine the motion between them, so if both opening and closing scenes matter, review a short draft to see whether the transition is natural.</p></section><figure><img src="https://localai.co.kr/guides/minimax-h3-first-last-frame.webp" alt="A film strip connecting first and last frames through intermediate scenes and camera movement" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Even with fixed opening and ending frames, review the in-between motion in a short draft.</figcaption></figure><section><h2>Consider output requirements and memory placement, not model size alone</h2><p>In addition to weights, the input image, intermediate video-frame data, and resolution use working memory. Offloading moves some data to host memory and can make a smaller-VRAM setup possible, but it also needs system RAM and transfer time. Multi-GPU setups require model and runtime support for partitioning, so memory capacities cannot simply be added as if they provided the same execution path.</p><p>The official Wan 2.2 TI2V-5B repository covers a 720p path at 1280×704 using a 24 GB GPU with offloading. Even when starting with a smaller-weight configuration, play the full clip to check whether the required movement and product outline remain. Resolution and frame rules differ by model, so do not transfer one model's settings unchanged to another.</p><p>LTX-2.5 requires width and height to be multiples of 32 and frame count to follow 8n+1. This site's HunyuanVideo 1.5 timing comparison covers a 480p image-to-video distillation path. These examples describe each model's own input conditions; do not use them as Wan settings. First save a short result within the target model's documented requirements.</p></section><section><h2>T2V-14B is an option for creating a new scene from text</h2><p>Wan 2.2 T2V-14B is a text-to-video path, so its goal differs from TI2V-5B, which starts from a bottle photo. It is an option when you want a new scene from text without a reference image; check how the requested camera movement and product-like shape appear in the result.</p><p>A larger model changes not only storage needs but also loading and generation memory. Keep the prompt and scene goal fixed when comparing results, then decide whether improved appearance or motion justifies the extra memory and wait.</p></section><figure><img src="https://localai.co.kr/guides/minimax-h3-multi-gpu.webp" alt="Multiple GPUs and host memory dividing work for 768p video-and-audio generation" width="1672" height="941" loading="lazy" decoding="async"><figcaption>For H3-Base, account for host RAM, offloading, and runtime partitioning as well as GPU memory.</figcaption></figure><section><h2>Read H3 Turbo step counts together with parallelism</h2><p>LightX2V's MiniMax-H3 guide separates Turbo 4-step and 8-step settings by precision and GPU parallelism. The 4-step BF16 path uses dmd/minimax_h3_bf16_4step.json and a single-GPU script; 4-step FP8/INT8 uses SP4, while 8-step FP8/INT8 uses SP8. The FP8 4-step entry marked for 5090 is also an SP8 configuration, not a one-GPU run.</p><p>For a first setup, prepare the model directory according to the repository's model paths and kernel requirements. The documented Diffusers layout includes transformer, text_encoder, tokenizer, processor, vae, and audio_vae components, so downloading only the original FL2VA/ checkpoint directory is not enough. Use the command below to check output from the baseline BF16 path.</p><div><p><strong>Run baseline H3 video and audio</strong></p><pre><code data-guide-code-block="4-0">bash scripts/minimax_h3/run_minimax_h3_t2av.sh</code></pre></div></section><section><h2>Compare Turbo with the same input and measure the full wait</h2><p>After confirming that the baseline output file opens, copy dmd/minimax_h3_bf16_4step.json for the experiment. Check that the LoRA path points to a real file and that alpha=128, video_flow_shift=6, audio_flow_shift=3, and infer_steps=4 match the published 4-step adapter. The default is 362 frames at 768×1344, so for the first comparison reduce num_frames and size in the JSON to 124 frames at 544×960. Choose either dynamic LoRA application or merging into BF16 weights.</p><p>Keep prompt, seed, resolution, and frame count fixed, and save the baseline and Turbo outputs separately. Record first-run time including model loading and warm-up, repeat generation after setup, and time through file saving; these describe the wait in an actual workflow. The README has no consumer-GPU FPS comparison of the two presets under matched conditions, so do not infer a speed multiplier from four steps.</p><p>If the image is black or audio is missing, check the requested task, the --model-variant fl2av setting at startup, the model-component directories, and the LoRA path. VAE and encoder errors in the logs help distinguish an output-path problem from a model-loading problem.</p></section><section><h2>H3-Base timing is reported for a specific server setup</h2><p>LightX2V's H3-Base timing uses the SGLang FL2VA BF16/FP32 TP2 offloading path, two RTX 5090 cards, and 384 GB of host RAM. Matching only the two GPUs does not reproduce the same timing; offloading and host memory are part of the setup.</p><p>The measured scene is a 768p, five-second output with audio. The reported runs use five and 50 steps; the 20-step time mentioned as a standard setting is interpolated between those measurements. It is not a separate measurement and should not be extrapolated to other clip lengths or RAM configurations.</p><p>The published timing excludes prompt interpretation and the 2K regeneration stage. Use it when deciding whether joint video-and-audio output is useful or whether you would rather add a track to a silent clip in an editor. Review visual quality and audio fit by playing the result.</p></section><section><h2>Choose a supported runtime for the shot you need</h2><p>If the bottle photo must be preserved, compare an image-conditioned TI2V path; for a new scene from text, consider T2V-14B; if video and sound must be created together, consider H3-Base joint output. This is a choice about matching input and desired result, not a size ranking.</p><p>Videos shown on the site are prepared samples that illustrate estimated wait-time differences by hardware, not outputs generated by the actual models. Check whether the runtime you plan to install supports the model, image input, and required duration and resolution; save a short clip and play it from beginning to end. For frequent revisions, include first-run time, memory headroom, and editing time as well as generation wait.</p><p>If the target clip plays through on your current hardware, includes the audio you need, and repeat waits are manageable, you can start with that setup. When considering new hardware, compare run reports that specify model, precision, resolution, duration, and offloading. Treat reports under different conditions as context, not as estimates for your workload.</p><ul><li><a href="https://github.com/ModelTC/LightX2V">LightX2V official repository</a></li><li><a href="https://github.com/ModelTC/LightX2V/blob/main/scripts/minimax_h3/README.md">MiniMax-H3 inference, configuration, and LoRA guide</a></li></ul></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Compare video models by estimated speed</h2><p>Compare estimated generation time and memory needs for Wan 2.2 and MiniMax models by resolution.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Wan 2.2 TI2V-5B starts video from an image, T2V-14B creates a new scene from text, and MiniMax H3-Base outputs video with stereo audio. Decide which inputs and sound your result needs, then test a short clip within each model's resolution, memory, and runtime requirements.</dd></div><div><dt>How much memory does it need?</dt><dd>In addition to weights, the input image, intermediate video-frame data, and resolution use working memory. Offloading moves some data to host memory and can make a smaller-VRAM setup possible, but it also needs system RAM and transfer time. Multi-GPU setups require model and runtime support for partitioning, so memory capacities cannot simply be added as if they provided the same execution path.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>ComfyUI requirements: choosing 8, 12, 16 or 24GB VRAM</title><link>https://localai.co.kr/en/guides/local-ai-generation-vram</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-ai-generation-vram</guid><description>Compare starting workloads across VRAM capacities and understand resolution, batching and offloading without confusing weight size with peak memory.</description><content:encoded><![CDATA[<header><p>Image and video generation</p><h1 id="guide-page-title">ComfyUI requirements: choosing 8, 12, 16 or 24GB VRAM</h1><p>How much VRAM do you need for local image and video generation?</p><p id="guide-page-summary">VRAM is the GPU memory that holds models and image or video data during computation. Intermediate data needs space alongside the model weights. Save one image in ComfyUI, then increase resolution and image count separately to find what your hardware can handle and where memory runs short.</p><p>When you open a ComfyUI workflow to make a landscape image for a desktop, the model and text encoder load, sampling runs, and the VAE converts the latent representation into pixels. Each stage needs different working space, so a model-ready indicator does not ensure enough memory for image computation or the final decode.</p><p>Use file size as a guide to storage needs, but for the actual workflow track which stage completes and the GPU-memory peak. The sections below show how to start small and change resolution, batch, and offloading one at a time.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Peak memory can differ across loading, sampling, and VAE decode.</li><li>System RAM and unified memory do not automatically become dedicated VRAM.</li><li>Resolution, batch size, and video frames change working-memory needs even for the same model.</li></ol></section><section><h2>Separate model-file size from memory during generation</h2><p>For Qwen-Image 2.1, the Unsloth Q4_K_M generation model is about 4.2 GB, the Q4 text encoder about 5.15 GB, and the dedicated VAE about 0.68 GB. These are disk sizes; storing all three files takes about 10 GB. Generation also needs intermediate buffers and memory for other apps. Depending on the distribution, the runtime may load components together or switch them by stage.</p><p>If sampling buffers do not fit, generation can stop while computing the image; the VAE may also lack room to reconstruct it after sampling. Check the log to see whether failure occurred during loading, sampling, or decode. That helps decide whether to change model quantization or reduce image size or concurrent work.</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-image-2-1-gguf-guide">Review the Qwen-Image 2.1 file setup</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/wan-minimax-local-video-models">Wan 2.2 and MiniMax: choosing a local video workflow</a></li><li><a href="https://localai.co.kr/en/guides/local-video-generation-guide">Local video generation: workflows and PC requirements</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-hardware-guide">Hardware for Local AI Agents: Choose by Workload, Context, and Uptime</a></li></ul></section><figure><img src="https://localai.co.kr/guides/media-vram-packing.webp" alt="Model weights, text encoder, VAE, and workspace arranged in separate compartments of graphics memory" width="1672" height="941" loading="lazy" decoding="async"><figcaption>File size describes stored components; generation also needs buffers and working memory.</figcaption></figure><section><h2>Test resolution and batch size separately</h2><p>Doubling both width and height makes pixel area four times larger, but peak memory and generation time do not necessarily quadruple. The model's internal representation, attention implementation, tiling, upscaling, and decode method all affect the increase.</p><p>If a landscape saves at low resolution but sampling fails at the target desktop size, rerun the same workflow at the smaller size. If the small image succeeds and only the larger one stops, resolution-dependent workspace may be the bottleneck. Keep the model files and other settings unchanged to isolate the cause.</p><p>If one image at the target size works but a four-image batch fails, reduce the batch to one first. Keeping several candidates at once can require a higher peak than generating four images one by one. Treat completing one image and producing four candidates at once as different memory requirements.</p></section><section><h2>Image batches and video frames create different memory demands</h2><p>An image batch keeps intermediate data for several candidates at once. Video also computes temporal relationships between frames, so frame count, temporal compression, and resolution affect workspace. Multiplying the memory for one image by the number of video frames can miss how the model processes frames in groups.</p><p>For video, first choose a runtime and supported frame conditions for the target model, then begin with one short, low-resolution job. Change frame count or size one at a time and record model loading, peak memory during generation, successful saving, and playback. This guide follows a single-image example, so assess video memory from separate run records for the model.</p></section><section><h2>Offloading saves VRAM at the cost of data-transfer time</h2><p>Some runtimes support offloading components that exceed GPU memory to host RAM and transferring them when needed. This can make a larger model configuration possible, but it also uses RAM and CPU-GPU transfer. CPU computation and keeping weights in RAM before sending them to the GPU are different paths; check the setting description and logs to see what is actually moved.</p><p>A PC's system RAM is separate from dedicated VRAM; a 12 GB GPU plus 64 GB RAM is not a 76 GB GPU. On a Mac, unified memory is one physical pool shared by CPU and GPU, but the operating system and editing apps use it too. Test separately whether the workload fits and whether it can be repeated at an acceptable speed.</p><p>If waiting increases after offloading, distinguish model loading, repeated transfers during sampling, and disk swapping caused by low system RAM. Change only one setting while keeping the same landscape and prompt to tell whether the path merely runs or remains practical to use.</p></section><figure><img src="https://localai.co.kr/guides/media-offload-bottleneck.webp" alt="An offloading bottleneck as data moves through a narrow path between GPU and system memory" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Offloading can allow larger configurations on limited VRAM, but data transfers add wait time.</figcaption></figure><section><h2>Use 8, 12, 16, and 24 GB as tiers for choosing the next test</h2><p>VRAM capacity alone cannot guarantee that a particular model will run. Peak memory also depends on model files, precision, text encoder and VAE, resolution, image count, frame count, and runtime. The table below is not a speed or peak-usage benchmark; it suggests a starting workload for each capacity tier.</p><p>With 8 GB, test loading and generating separately using a small image model, low resolution, and one image. At 12 GB, try repeated generation or light editing and record remaining memory after adding image input or custom nodes. At 16 GB, explore a wider model range but start with one image; assess full loading of large models and video separately.</p><p>At 24 GB, you can test more memory-efficient paths for larger image models and video candidates, while checking support for the required duration and frames. Even with 64 GB or more, do not simply add GPU memory and RAM; check runtime partitioning, offloading, and host-memory needs. Choose the next step based on which stage repeatedly fails in your workflow, not the table number alone.</p><table><caption>Image and video tasks to try at each VRAM capacity</caption><thead><tr><th scope="col">Dedicated VRAM</th><th scope="col">Start with</th><th scope="col">Check before scaling up</th></tr></thead><tbody><tr><th scope="row">8GB</th><td>Small image models, lower resolution, one image</td><td>Check quantization and offload support for larger models</td></tr><tr><th scope="row">12GB</th><td>Repeated generation with small models and light editing</td><td>Memory headroom after image input and extra nodes</td></tr><tr><th scope="row">16GB</th><td>Try a wider range of models, starting with one image</td><td>Large-model residency and video need separate checks</td></tr><tr><th scope="row">24GB</th><td>Memory-saving large-image paths and video candidates</td><td>Video duration, frame count, and host RAM</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/comfyui-install-first-image">Verify ComfyUI with a small setup</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-3090-24gb">Should you keep using a 24 GB RTX 3090?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/media-memory-tiers.webp" alt="Six memory tiers leading to an image draft, high-quality image, short video, and audiovisual work" width="1672" height="941" loading="lazy" decoding="async"><figcaption>More memory can expand the models and outputs you can test without offloading, not just increase speed.</figcaption></figure><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><aside><h2>Explore generation conditions by memory size</h2><p>Check VRAM and hardware configurations for your target workload and resolution.</p><a href="https://localai.co.kr/en/generate">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>VRAM is the GPU memory that holds models and image or video data during computation. Intermediate data needs space alongside the model weights. Save one image in ComfyUI, then increase resolution and image count separately to find what your hardware can handle and where memory runs short.</dd></div><div><dt>How much memory does it need?</dt><dd>For Qwen-Image 2.1, the Unsloth Q4_K_M generation model is about 4.2 GB, the Q4 text encoder about 5.15 GB, and the dedicated VAE about 0.68 GB. These are disk sizes; storing all three files takes about 10 GB. Generation also needs intermediate buffers and memory for other apps. Depending on the distribution, the runtime may load components together or switch them by stage.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local LLM ownership cost over one or two years</title><link>https://localai.co.kr/en/guides/local-llm-tco</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-tco</guid><description>Learn how to estimate the total cost of local AI hardware by combining purchase price, depreciation, estimated resale value, electricity, maintenance and savings from cloud subscriptions.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">Local LLM ownership cost over one or two years</h1><p>Add ownership costs, then subtract actual resale and savings</p><p id="guide-page-summary">The total cost of ownership (TCO) of local AI hardware is its purchase price plus electricity and maintenance, less its estimated resale value at the end of the ownership period. If your goal is to reduce subscriptions, also include the bills you can actually eliminate. Start with the new expenditure and compare running the same work for one and two years.</p><p>If you already own a computer, adding a GPU and buying a complete new system start with different costs. Comparing hardware sticker prices alone hides that difference. Use keeping your existing PC as the baseline, record the new cards, parts and installation each option needs, then add running costs and subscriptions to see what you would pay to move which work.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Subtract expected resale value at the end of the period from the purchase price.</li><li>Add electricity, host-system, component, and maintenance costs.</li><li>Count only subscriptions and cloud costs you will actually eliminate as savings.</li></ol></section><section><h2>List the money you would spend now</h2><p>For a GPU upgrade, add the card price and any power supply, case or installation you would actually need. For a new Mac or prebuilt PC, use the complete purchase price. Include all required new parts and exclude components you will keep using.</p><p>Calculate one- and two-year costs separately. If you plan to sell at the end, subtract the estimated proceeds; if you will keep the system, also keep a cash-outlay view without resale. Compare lower resale proceeds to check whether the purchase remains affordable.</p><table><caption>Costs to compare over the same period</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Amount to include</th></tr></thead><tbody><tr><th scope="row">Purchase</th><td>New hardware, required parts and installation</td></tr><tr><th scope="row">Operation</th><td>Working and idle energy, cooling and maintenance</td></tr><tr><th scope="row">Recovery</th><td>Estimated resale value at period end</td></tr><tr><th scope="row">Subscription savings</th><td>Bills actually cancelled or reduced</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p18-tco-timeline.webp" alt="A timeline showing hardware purchase, ownership costs, subscription savings, and resale at period end" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>TCO includes purchase and ownership costs, actual savings, and residual value at the end of the period.</figcaption></figure><section><h2>Cancelling a KRW 30,000 monthly plan saves KRW 360,000 a year</h2><p>Suppose you pay KRW 30,000 per month. Moving the work locally and cancelling the plan saves KRW 360,000 over 12 months or KRW 720,000 over 24 months. If you switch to a cheaper plan, include only the difference between the old and new bills.</p><p>If you keep the same subscription while doing some work locally, subscription savings are zero. Privacy and offline use may still justify the purchase. Separate money saved from new convenience to understand whether cost savings or another need drives the decision.</p></section><figure><img src="https://localai.co.kr/guides/p18-cashflow.webp" alt="A period showing hardware purchase, monthly power and component costs, subscription savings, and resale proceeds" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Costs and savings occur at different times, so compare cash flow over a common period such as one or two years.</figcaption></figure><section><h2>Calculate working time and idle time separately</h2><p>Use a wall power meter to measure the complete system where possible: the CPU, storage and fans use electricity too. Separate model-running hours from idle hours and calculate each as average watts multiplied by hours, divided by 1,000.</p><p>Summer cooling adds energy to remove the heat your hardware produces; enable the calculator’s cooling option to include it. Enter your household’s existing monthly use too, since the progressive tariff affects the cost of an extra 10kWh. The site divides annual calculations into seven other months, two summer months and three winter months.</p><ul><li><a href="https://localai.co.kr/en?tab=electricity">Calculate energy and cooling costs</a></li></ul></section><section><h2>How much do assumptions change the result?</h2><p>The following is an illustrative calculation. Assume KRW 2 million for the purchase and additional parts, KRW 200,000 for a year of electricity and maintenance, and KRW 1.2 million resale proceeds after a year. Net ownership cost is KRW 1 million. Cancelling a KRW 30,000 monthly subscription reduces the net burden by KRW 360,000 to KRW 640,000.</p><p>Lower resale proceeds to KRW 800,000 and keep the subscription, and the net burden becomes KRW 1.4 million. The same hardware now differs by KRW 760,000 between the two assumptions. Vary resale and cancellation independently, and reconsider options that look cheap only under optimistic conditions.</p><table><caption>One year of ownership · illustrative amounts</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Cancel plan; KRW 1.2m resale</th><th scope="col">Keep plan; KRW 0.8m resale</th></tr></thead><tbody><tr><th scope="row">Purchase and parts</th><td>KRW 2,000,000</td><td>KRW 2,000,000</td></tr><tr><th scope="row">Electricity and maintenance</th><td>KRW 200,000</td><td>KRW 200,000</td></tr><tr><th scope="row">Subtract resale proceeds</th><td>−KRW 1,200,000</td><td>−KRW 800,000</td></tr><tr><th scope="row">Subtract subscription savings</th><td>−KRW 360,000</td><td>KRW 0</td></tr><tr><th scope="row">Net burden</th><td>KRW 640,000</td><td>KRW 1,400,000</td></tr></tbody></table></section><section><h2>Complete the costs, then check the actual work</h2><p>Save purchase, running cost, estimated resale and subscription savings for both one and two years. Add additional-system, repair and financing costs yourself where applicable; the calculator does not include them automatically. Consider whether installation and management reduce the time available for your work.</p><p>If the costs are affordable, finish by processing your usual documents and code. The system must deliver useful results within an acceptable wait. If your existing PC already does that work, keep tuning and retaining it as an option in the same cost comparison.</p><ul><li><a href="https://localai.co.kr/en/guides/gpu-power-limit-local-ai-guide">Reduce running costs with a power cap</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p18-break-even.webp" alt="Cumulative-cost lines for local hardware and cloud subscriptions meeting at a break-even point" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The break-even point changes with actual subscription savings, resale value, and electricity assumptions.</figcaption></figure><aside><h2>Calculate TCO with your own assumptions</h2><p>Adjust the purchase price, electricity cost, resale value and subscription savings yourself.</p><a href="https://localai.co.kr/en?tab=tco">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The total cost of ownership (TCO) of local AI hardware is its purchase price plus electricity and maintenance, less its estimated resale value at the end of the ownership period. If your goal is to reduce subscriptions, also include the bills you can actually eliminate. Start with the new expenditure and compare running the same work for one and two years.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</title><link>https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe</guid><description>Run Qwen3.8-27B with oMLX on Apple Silicon Macs and llama.cpp on RTX, then compare input, memory, MTP, and INT8 prefill settings under their respective conditions.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen3.8-27B setup by hardware: Mac oMLX and RTX llama.cpp</h1><p>Match the model format and request, then run the same Qwen3.8-27B workload on Mac and RTX</p><p id="guide-page-summary">For a Q4 checkpoint, use the MLX format with oMLX on an Apple Silicon Mac and GGUF with llama.cpp on an RTX. Confirm that each server answers the same request, then record first-token and completion times along with memory use. The 0.7.1.dev1 INT8 activation-prefill results apply separately to Qwen3.8-27B oQ8e on an M5 Max.</p><p>Qwen3.8-27B is a 27B dense language model that takes questions or code and returns text answers. First confirm that a short request works end to end, then adjust context length and generation options for your environment.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>oMLX uses MLX checkpoints; llama.cpp uses GGUF.</li><li>Separate the first model load, which includes setup and caching, from warm repeated runs.</li><li>INT8 activation prefill applies to the prefill stage on a supported oQ8e checkpoint.</li><li>Change MTP and KV-cache precision one at a time after confirming a normal baseline response.</li></ol></section><section><h2>Match the checkpoint and Mac or GPU memory first</h2><p>oMLX on a Mac runs an MLX-converted checkpoint, while llama.cpp on an RTX reads GGUF. Files are not interchangeable just because they share the Qwen3.8-27B name. Use `mlx-community/Qwen3.8-27B-4bit` on the Mac and Q4_K_M from `ggml-org/Qwen3.8-27B-GGUF` on the RTX as baseline files. The Q4_K_M file is about 17.6 GB, but actual memory use also includes the KV cache and working buffers.</p><p>Start with a 4,096-token context on an RTX with 24 GB, and leave memory for a browser or editor you keep open. On a Mac, check total unified memory and memory pressure. Use the same request on both systems to compare their runs.</p><ul><li><a href="https://huggingface.co/mlx-community/Qwen3.8-27B-4bit">MLX Qwen3.8-27B-4bit model card</a></li><li><a href="https://huggingface.co/ggml-org/Qwen3.8-27B-GGUF">GGUF Qwen3.8-27B model card</a></li><li><a href="https://localai.co.kr/en/guides/qwen38-27b-exl3-16gb-gpu-guide">Qwen3.8-27B EXL3 requirements for a 16 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/mlx-lm-memory-speed-guide">Run a 3B Model with MLX-LM and Read Its Speed: First Load, Prefill, Decode, and KV Cache</a></li><li><a href="https://localai.co.kr/en/guides/minicpm5-2b-serving-recipe">A safe local starting point for MiniCPM5-2B Q4_K_M</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-27b-serving-recipe-scene-1.webp" alt="Green and yellow paths branch from document blocks toward a laptop and a GPU computer." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Even within the same model family, Mac and RTX use different checkpoint formats.</figcaption></figure><section><h2>Load the MLX model with oMLX on a Mac</h2><p>After opening oMLX on an Apple Silicon Mac, choose the model folder and start the server. Download the MLX checkpoint `mlx-community/Qwen3.8-27B-4bit`, then open `http://localhost:8000/admin/chat` in a browser. Select the model and send this request: `Write a Python function that accepts a path string, returns None if the file is missing, and reads UTF-8 text if it exists. Explain the input and return types.`</p><p>A successful response shows the Python code and an explanation of its input and return types in the chat. If it fails, check the model status and download completion in the management UI, then inspect memory pressure and the first server-log error. If the model is missing from the list, check the MLX checkpoint format and selected model folder.</p><ul><li><a href="https://github.com/jundot/omlx#install">oMLX installation and quick start</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-27b-serving-recipe-scene-2.webp" alt="A laptop with a file icon, a shelf of blocks, and a graphics card connected by colored paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prepare the MLX path for Mac and CUDA with GGUF for RTX.</figcaption></figure><section><h2>Start a CUDA llama.cpp server on RTX</h2><p>On an RTX PC with the CUDA Toolkit installed, use the commands below to build CUDA-enabled llama.cpp and start its server. The final line uses `-hf` to select the GGUF repository and Q4_K_M; `-ngl all` places as many model layers as possible on the GPU. `-c 4096` sets a 4,096-token context. The `./build/bin/llama-server` path below is for a Linux shell.</p><div><p><strong>Build llama.cpp with CUDA and serve Q4_K_M</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
./build/bin/llama-server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080</code></pre><p><small>Start the server at the local address after the CUDA build finishes.</small></p></div><p>When the server is ready, open `http://localhost:8080` in a browser and select the model. Send the same Python request used in the Mac section.</p><p>When the response displays code and its explanation, the model load and request path are working. If the build fails, check whether CMake can find the CUDA Toolkit. If the server opens but the model does not start, check download progress, repository name, and free VRAM, then retry with a 2,048-token context.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md">llama.cpp official CUDA build guide</a></li></ul></section><section><h2>On Windows CUDA, locate the built server executable</h2><p>For a Windows build, prepare the Visual Studio 2022 C++ tools and CUDA Toolkit, then open the repository in a Visual Studio Developer PowerShell. The official build guide uses the same CMake CUDA option as Linux, while the server guide builds the `llama-server` target. The commands below build the server, locate the generated executable, and start it with the selected model.</p><div><p><strong>Build with CUDA and start a Q4_K_M server on Windows</strong></p><pre><code data-guide-code-block="3-0">git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
$server = Get-ChildItem -Path .\build -Filter llama-server.exe -Recurse | Select-Object -First 1 -ExpandProperty FullName
&amp; $server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080</code></pre><p><small>Start the found executable with the selected Q4_K_M model and local port.</small></p></div><p>When the server starts, open `http://localhost:8080`, select the model, and send the Python request from the Mac section unchanged.</p><p>A normal response shows the code and its input/return explanation, confirming model loading and the request path. If no executable was generated, inspect the first build error and CUDA Toolkit detection. If the server starts but model loading fails, check the first model error in the log and available VRAM.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md">Official Windows and CUDA build requirements</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama-server build and Windows quick start</a></li></ul></section><section><h2>Record first-run and repeated-run waits separately</h2><p>First confirm that each server answers the Python request above. For a speed comparison, record the initial model-load time separately, warm up once, then send the same request three times. Keep context and answer limit fixed; record request start, first token, and completion, along with VRAM on RTX or unified-memory pressure on Mac.</p><p>To increase input length, append a real code excerpt from your work to the same Python request and send identical text to both systems. A longer request can change prefill time and KV-cache use. Mac's MLX Q4 and RTX's GGUF Q4_K_M differ in format and quantization, so record the model file to distinguish hardware effects from checkpoint differences.</p><table><caption>Items to record when running the same workload on different hardware</caption><thead><tr><th scope="col">Recorded value</th><th scope="col">Where to check</th><th scope="col">Why it matters</th></tr></thead><tbody><tr><th scope="row">Model format and quantization</th><td>Model card and runtime log</td><td>Distinguishes Mac and RTX file paths</td></tr><tr><th scope="row">First-token and completion times</th><td>Request timer</td><td>Separates input processing from generation wait</td></tr><tr><th scope="row">Peak memory</th><td>Activity Monitor and GPU monitor</td><td>Checks room for other apps</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-27b-serving-recipe-scene-3.webp" alt="Five colored blocks beside a laptop and a small device connect by lines to a note with a check mark." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Change input length and settings one at a time, and record both answers and wait times.</figcaption></figure><section><h2>Test 0.7.1.dev1 INT8 prefill separately on supported models</h2><p>oMLX 0.7.1.dev1, published on October 9, 2026, includes an INT8 activation-prefill improvement for Qwen3.8-27B oQ8e. Enable this path under Experimental Features in model settings. The release measurement used an M5 Max and the oQ8e checkpoint, a different file from the Q4 model `mlx-community/Qwen3.8-27B-4bit` in the Mac setup above. The table below lists the input lengths, measurement conditions, and figures.</p><p>To test INT8 prefill, prepare a supported oQ8e file and 0.7.1.dev1, then confirm a normal response with a short input. Enable INT8 activation prefill for that model, process an input with the same token count three times, and compare the median prefill speed or TTFT. The published M5 Max gain concerns prefill, not generation, so record decode tok/s separately.</p><p>If you see a memory error or the first token takes longer, shorten the context and check the model-specific settings and the selected path in the server log. INT8 activation changes the representation used for computation, so also check output numbers and answer quality. Turn the option off and resend the same request to compare its effect.</p><table><caption>oMLX release measurements for Qwen3.8-27B oQ8e INT8 activation prefill</caption><thead><tr><th scope="col">M5 Max input</th><th scope="col">Published change</th><th scope="col">Stage compared</th></tr></thead><tbody><tr><th scope="row">4K tokens</th><td>Prefill +25%</td><td>Prefill</td></tr><tr><th scope="row">16K tokens</th><td>Prefill +38%</td><td>Prefill</td></tr></tbody></table><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Published conditions for oMLX 0.7.1.dev1</a></li></ul></section><section><h2>Change MTP and KV-cache precision after recording a baseline</h2><p>For a Qwen3.8-27B checkpoint that supports MTP, you can compare Lightning MTP for that model. MTP affects token generation; KV-cache precision affects the memory and computation used to store conversation state. First record a response and memory use with both at their defaults. Finish a comparison with only MTP enabled, then change only the KV-cache setting. Use the same checkpoint and question at each step.</p><p>Version 0.7.1.dev1 is a development release. If stability matters more, stay on 0.7.0 and check new features in a separate test environment. If requests often fail, inspect server logs, context length, and VRAM or unified-memory status before adjusting MTP or the KV cache.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Development-build features and stable-release guidance</a></li></ul></section><section><h2>Appendix: Running BF16 vLLM on a separate NVIDIA server</h2><p>Multiplying 27B parameters by two bytes for BF16 gives about 54 GB for the weights alone. This calculation excludes runtime buffers and cache. The commands below are for a separate NVIDIA server that can hold BF16 weights, not the RTX 24 GB Q4_K_M recipe above. If you are following the main recipe, skip this appendix and use the earlier llama.cpp command.</p><div><p><strong>Start BF16 vLLM on a separate server</strong></p><pre><code data-guide-code-block="7-0">vllm serve Qwen/Qwen3.8-27B --host 127.0.0.1 --port 8000 --max-model-len 8192 --gpu-memory-utilization 0.90</code></pre><p><small>An example for a separate server that can hold BF16 weights.</small></p></div><p>After running the first command, check that the server process remains active. If it does not respond or exits, start with the first terminal error and GPU memory status. Once the server is running, use the second command to check the registered model ID for requests.</p><div><p><strong>Query the model ID reported by the server</strong></p><pre><code data-guide-code-block="7-1">curl -N http://127.0.0.1:8000/v1/models</code></pre><p><small>Use the model ID returned in the response for your request.</small></p></div><ul><li><a href="https://huggingface.co/Qwen/Qwen3.8-27B">Official Qwen3.8-27B model card</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>13.9 ~ 15.4 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>40.6 ~ 47.8 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>40.6 ~ 47.8 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>8,192 tokens</td><td>38.3 ~ 51.9 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Memory fits</td><td>llama.cpp (multi-GPU)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>57.5 ~ 79.8 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>118.8 ~ 241.0 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Memory fits</td><td>SGLang + DFlash2</td><td>Reproduce a published benchmark</td><td>16,384 tokens</td><td>47.9 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Memory fits</td><td>llama.cpp (ROCm/HIP)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>11.2 ~ 12.5 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected model formats and runtime settings for Mac</strong></p><p>Separated the Mac MLX path from GGUF Q4_K_M and aligned the engine name, model format and command. KV-cache precision and prefill batching that the command does not specify are now marked for checking in the model or runtime settings.</p><p>Also removed MLX speed profiles that implied a larger batch despite leaving the command unchanged.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Removed another engine's options from Qwen 27B Spark settings</strong></p><p>Prevented llama.cpp-specific speculative-decoding flags from appearing in single- and dual-Spark SGLang settings. The DFlash2 and DSpark configurations retain their respective models and runtime paths.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Separated uncached-input and cache-reuse records</strong></p><p>Updated the checks to record first-time inputs separately from repeated inputs. Cache effects are not folded into uncached prefill throughput or hardware differences.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Compare hardware conditions for Qwen3.8-27B</h2><p>Check the expected value for the selected hardware against the conditions of an actual run.</p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-48gb&amp;right=nvidia-rtx-4090-24gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>For a Q4 checkpoint, use the MLX format with oMLX on an Apple Silicon Mac and GGUF with llama.cpp on an RTX. Confirm that each server answers the same request, then record first-token and completion times along with memory use. The 0.7.1.dev1 INT8 activation-prefill results apply separately to Qwen3.8-27B oQ8e on an M5 Max.</dd></div><div><dt>How much memory does it need?</dt><dd>oMLX on a Mac runs an MLX-converted checkpoint, while llama.cpp on an RTX reads GGUF. Files are not interchangeable just because they share the Qwen3.8-27B name. Use `mlx-community/Qwen3.8-27B-4bit` on the Mac and Q4_K_M from `ggml-org/Qwen3.8-27B-GGUF` on the RTX as baseline files. The Q4_K_M file is about 17.6 GB, but actual memory use also includes the KV cache and working buffers.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</title><link>https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe</guid><description>A reproducible sequence for running Qwen3.8 Flash-Next on one DGX Spark with SGLang, PLE offload, and MTP.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen3.8 Flash-Next on DGX Spark: SGLang, PLE, and MTP recipe</h1><p>Run Qwen3.8 Flash-Next on a single DGX Spark</p><p id="guide-page-summary">Qwen3.8-Flash-Next takes prompts and long context and generates text. Reproducing this recipe on one DGX Spark requires a dedicated NVFP4 checkpoint, a patch for offloading PLE tables to NVMe, SGLang settings, and MTP values working together. Download and prepare the files, launch the server, then verify in logs that each path was applied.</p><p>First decide which configuration you are reproducing. The public script's 32K single-request profile and the long-context test use different memory fractions and prefill chunks. Matching model names do not make runtime conditions identical. This guide walks through installing the specialized PLE offload path and confirming that it is active.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The public launch script starts with a 0.85 memory fraction, 2,048 prefill chunk, and 32K context.</li><li>The 262K single-request configuration uses a 0.79 memory fraction and 1,024 prefill chunk.</li><li>MTP steps 3 and draft tokens 4 are separate settings; distinguish NVFP4 weights from BF16 KV cache too.</li></ol></section><section><h2>Prepare the checkpoint and PLE offload path together</h2><p>This recipe uses a specific NVFP4 checkpoint for Qwen3.8-Flash-Next. It does not mean every tensor is uniformly reduced to four bits. Some parts, including attention and MTP, retain higher precision, so check the complete file and actual loading behavior.</p><p>Spark's unified memory is shared by CPU and GPU. The core of this setup is a dedicated mmap patch that keeps the large PLE table on NVMe and looks up needed entries. Adding options to stock SGLang does not create the same memory layout. The entire table need not remain in memory, but each request still incurs time to look up and move needed entries.</p><p>Review repository and patch versions and contents, and prepare them separately from a production environment. Temporary space is also needed for downloads and conversion. Use the script's guidance of about 140 GB or more of free NVMe space as a starting point, then verify the current download sizes. NVMe storage capacity is separate from memory needed for runtime page cache and other processes.</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-flash-next-ple-offload">Conditions for placing PLE tables in RAM and SSD</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/trellis2-photo-to-3d-guide">Create a 3D asset from one photo with TRELLIS.2</a></li><li><a href="https://localai.co.kr/en/guides/dgx-spark-llama-cpp-mtp-guide">Run a llama.cpp MTP Server on DGX Spark: Qwen3.6 Agent Requests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-flash-next-serving-recipe-scene-1.webp" alt="A green block in a hand branches into different block combinations and setting cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Match the checkpoint, patch, and runtime settings to reproduce one configuration.</figcaption></figure><section><h2>Start the server with the 32K single-request profile</h2><p>The public script starts with TP 1, memory fraction 0.85, and prefill chunk 2,048. The prefill backend is Triton and the decode backend is trtllm_mha. MTP is configured as NEXTN with 3 steps, top-k 1, and 4 draft tokens. These values define a profile to reproduce; they do not establish every condition of the original public measurement.</p><p>The first command block obtains the repository and weights, prepares the patched environment, and publishes the server port only on the local address. Docker and about 140 GB or more of free NVMe space are needed. After setup, use verify.py to check the server response. At launch, scripts/serve.sh reads the repository-provided settings, so verify the path to avoid mixing in a file from elsewhere.</p><p>Download and prepare in the first terminal. After starting the server, leave its log terminal running, open a second terminal in the repository folder and run `python3 verify.py`. The verification command at the end of the block belongs in that second terminal.</p><div><p><strong>Prepare and verify a single-DGX-Spark 32K run</strong></p><pre><code data-guide-code-block="1-0">git clone https://github.com/hashd1ve/qwen38-flash-next-one-dgx-spark.git
cd qwen38-flash-next-one-dgx-spark

./scripts/download.sh
./scripts/prepare.sh
sed -i.bak 's/-p "$PORT":30000/-p "127.0.0.1:$PORT:30000"/' scripts/serve.sh
MEMFRAC=0.85 PREFILL=2048 CTX=32768 ./scripts/serve.sh
# In a second terminal opened in this repository folder:
python3 verify.py</code></pre><p><small>After download and setup, bind the port locally and send a verification request to the 32K server.</small></p></div><div><p><strong>Core SGLang settings in the public script</strong></p><pre><code data-guide-code-block="1-1"># Publish the Docker port only on 127.0.0.1:30000
--tp-size 1
--prefill-attention-backend triton
--decode-attention-backend trtllm_mha
--quantization modelopt_fp4
--ple-offload-embedding
--mamba-radix-cache-strategy extra_buffer
--mem-fraction-static 0.85
--chunked-prefill-size 2048
--max-running-requests 4
--speculative-algorithm NEXTN
--speculative-num-steps 3
--speculative-eagle-topk 1
--speculative-num-draft-tokens 4
--speculative-draft-model-quantization unquant</code></pre><p><small>These options alone do not create the same memory layout in stock SGLang without the PLE mmap patch.</small></p></div></section><section><h2>For long context, adjust the context limit and prefill chunk together</h2><p>The long-context profile starts with memory fraction 0.79 and prefill chunk 1,024 to leave room at the memory peak. The published long-context measurement used memory fraction 0.85 and one request, so the command below does not exactly reproduce that measurement. Setting the context limit to 262,144 does not mean every device and document can handle that length reliably.</p><p>Verify normal operation with short input first, then increase it in stages such as 8K, 32K, and 128K. At each length, include a fact you know in the middle of the document and check that it is retrieved. A smaller prefill chunk can lower the memory peak but may reduce throughput for short inputs. Chunk size adjusts how much is processed at once; it does not remove input tokens, so also verify that evidence near the end reaches the answer.</p><p>A single-request profile is not a measurement of concurrent throughput. With more simultaneous requests, their prefill and KV caches share device resources. First check memory and time to first token at each context length with one request, then test concurrency separately if your real service needs it. CTX=262144 is the server's allowed maximum; record it separately from the actual input length sent.</p><p>If you need to find a decision date from the middle of a long meeting record, compare it with the source each time you increase input length. If the beginning is correct but a middle or later condition is missed, check not only server settings but whether the evidence was included in the input. A configurable context maximum and success on a real document task are different checks.</p><p>Before switching to the long-context setup, stop the old server with Ctrl+C in its terminal and confirm the container has exited too. The block assumes a new terminal in the repository's parent folder; skip `cd` if already inside the repository. Run verification from another terminal in the repository after the new server is ready.</p><div><p><strong>Single-DGX-Spark 262K context test</strong></p><pre><code data-guide-code-block="2-0"># Run after completing the download, preparation, and local port setup above
# Server address: http://127.0.0.1:30000
cd qwen38-flash-next-one-dgx-spark
sed -i.bak 's/--max-running-requests 4/--max-running-requests 1/' scripts/serve.sh
MEMFRAC=0.79 PREFILL=1024 CTX=262144 ./scripts/serve.sh
# In a second terminal opened in this repository folder:
python3 verify.py</code></pre><p><small>Reducing the prefill chunk can lower throughput for short inputs.</small></p></div></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-flash-next-serving-recipe-scene-2.webp" alt="An arrow leads from a container of colored blocks to a large cabinet and separated blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Set the prefill chunk and request count along with the context limit.</figcaption></figure><section><h2>Verify the execution path and answer before comparing speed</h2><p>After setup, check the runtime logs to see whether the intended NVFP4 checkpoint and PLE files were opened and whether the prefill and decode backends were selected. If the actual path differs from the configured values, the runtime may have used a default path. Verifying the applied settings first separates a missing patch from performance that differs on the intended path.</p><p>The maximum concurrent requests allowed by the public script is not the same as the number actually sent at once. First verify that the server processes the intended document with a single request. Check that the Docker port is published only on 127.0.0.1. For a shared server, configure access control and firewall rules separately.</p><p>The public run reported about 41.5 tok/s for English code and about 22.8 tok/s for Spanish general text. These results use different languages and answer types, so they are not directly comparable by subtraction or division. The 1,910 tok/s prefill figure is excluded because the source disclosed measurement contamination from reused input cache and cache-cleared repetitions were not complete. Tok/s describes generation under those conditions, not end-to-end completion time for a Korean PDF request.</p><p>The table reports a separate oMLX 0.7.0 run using Qwen3.8-Flash-Next oQ4e, temperature 0, Lightning MTP, TurboQuant 8-bit KV, and aggressive memory guard. Each point is a single run on one Mac, so it is not directly comparable to the DGX Spark SGLang experiment.</p><table><caption>Conditions for a separate Mac/oMLX run</caption><thead><tr><th scope="col">Context</th><th scope="col">Prefill</th><th scope="col">Decode</th><th scope="col">Record</th></tr></thead><tbody><tr><th scope="row">4K</th><td>4,949 tok/s</td><td>143.8 tok/s</td><td>oMLX code_python, 128-token output budget</td></tr><tr><th scope="row">16K</th><td>5,701 tok/s</td><td>Not reported: model stopped before 16 tokens</td><td>One run at this point</td></tr><tr><th scope="row">32K</th><td>5,672 tok/s</td><td>114.6 tok/s</td><td>M5 Ultra 256 GB, 80-core GPU</td></tr></tbody></table><ul><li><a href="https://www.reddit.com/r/oMLX/comments/1wusa85/omlx_070_vs_070rc1_benchmark_what_changed_7/">M5 Ultra oMLX 0.7.0 benchmark and conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.8-flash-next-serving-recipe-scene-3.webp" alt="A workflow from document input and block processing to a server and checklist" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify the intended PLE, prefill, and decode paths before comparing tasks.</figcaption></figure><section><h2>Use a real task to decide whether you need this recipe</h2><p>Loading a large model on one Spark with a specialized patch and using it comfortably every day are different goals. Run your real document or code task and check end-to-end time and memory state. If one stable Spark configuration already completes the work, there is less reason to add a second device. If longer context or concurrent requests are essential, test those conditions separately.</p><p>Finally record the exact combination of NVFP4 file, PLE loading path, and runtime. Changing the model file can change how PLE is placed in memory and how much space is needed. When choosing an NVFP4 distribution for vLLM or SGLang, match the checkpoint format to what the runtime supports.</p><ul><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">PLE SSD offload and M5 Ultra memory decisions</a></li></ul></section><section><h2>Check these details when running an NVFP4 distribution</h2><p>How PLE tables are loaded in NVFP4 depends on the runtime and patch. On a single Spark node, check logs to verify that the dedicated offload path is active. When choosing a distribution for vLLM or SGLang, first check that the downloaded nvidia/Qwen3.8-Flash-Next-NVFP4 checkpoint matches the runtime.</p></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>96.0 ~ 156.6 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>85.8 ~ 166.7 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (78.5GB)</th><td>Strata configuration</td><td>Strata</td><td>Strata setup</td><td>4,096 tokens</td><td>92.6 ~ 192.3 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (165GB)</th><td>Strata configuration</td><td>Strata</td><td>Strata setup</td><td>4,096 tokens</td><td>67.1 ~ 184.9 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (213GB)</th><td>Strata configuration</td><td>Strata</td><td>Strata setup</td><td>4,096 tokens</td><td>175.2 ~ 340.0 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Experimental setup</td><td>SGLang · GB10 patch configuration</td><td>Published single-Spark configuration · 262K long context</td><td>32,768 tokens</td><td>Code 40.3–42.3 tok/s · General sentence 21.2–25.5 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Strata configuration</td><td>Strata</td><td>Strata setup</td><td>4,096 tokens</td><td>44.9 ~ 73.3 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Aligned Flash-Next article and profile settings</strong></p><p>The article now uses the published script's prefill chunk size of 2,048, and the long-context command limits requests to 1. The published measurements' language conditions are distinguished from conservative starting settings.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected the single-Spark Flash-Next prefill claim</strong></p><p>Removed the claim that 1,910 tok/s, which included cache reuse, represented prefill for an uncached input. The entry now calls for a new measurement without cache reuse.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Adjusted the Flash-Next long-context request limit</strong></p><p>Reduced the running-request limit from four to one in the single-Spark 262K-context command. Added checks for incorrect output caused by older QSA patches.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected model formats and runtime settings for Mac</strong></p><p>Separated the Mac MLX path from GGUF Q4_K_M and aligned the engine name, model format and command. KV-cache precision and prefill batching that the command does not specify are now marked for checking in the model or runtime settings.</p><p>Also removed MLX speed profiles that implied a larger batch despite leaving the command unchanged.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Separated uncached-input and cache-reuse records</strong></p><p>Updated the checks to record first-time inputs separately from repeated inputs. Cache effects are not folded into uncached prefill throughput or hardware differences.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Review Flash-Next results with recommended settings</h2><p>Review prefill and token-generation experience on a representative device before applying runtime settings.</p><a href="https://localai.co.kr/en/results/dual-dgx-spark-qwen-flash-next">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen3.8-Flash-Next takes prompts and long context and generates text. Reproducing this recipe on one DGX Spark requires a dedicated NVFP4 checkpoint, a patch for offloading PLE tables to NVMe, SGLang settings, and MTP values working together. Download and prepare the files, launch the server, then verify in logs that each path was applied.</dd></div><div><dt>How much memory does it need?</dt><dd>Spark's unified memory is shared by CPU and GPU. The core of this setup is a dedicated mmap patch that keeps the large PLE table on NVMe and looks up needed entries. Adding options to stock SGLang does not create the same memory layout. The entire table need not remain in memory, but each request still incurs time to look up and move needed entries.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4 12B serving: Q4 on desktop and BF16 on a server</title><link>https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe</guid><description>How to serve Gemma 4 12B on a single 16GB–24GB GPU or a Mac desktop, with separate Q4 GGUF and official google/gemma-4-12B-it setups, a conservative 8K starting context and API checks.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</h1><p>Run Gemma 4 12B as Q4 desktop or BF16 server</p><p id="guide-page-summary">Gemma 4 12B takes text questions and generates answers; supported model and app combinations can also process image or audio input. This guide prepares a Q4 conversion for a 16–24 GB desktop or the official BF16 checkpoint for a larger NVIDIA system, then verifies a local API response.</p><p>The two paths use the same model family but different file formats and runtimes. On desktop, choose a GGUF or MLX Q4 file supported by the app; the official server example uses google/gemma-4-12B-it BF16 weights on NVIDIA. Verify loading and a text response first, then extend context or add image and audio input only when needed.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The roughly 7.5 GB Q4 file is a way to test short text requests on a 16 GB system; check runtime memory use as well.</li><li>The official Transformers/vLLM path uses google/gemma-4-12B-it BF16 as its text-serving baseline.</li><li>The LM Studio example uses 127.0.0.1:1234; the vLLM example uses 127.0.0.1:8000.</li></ol></section><section><h2>Choose the file format and hardware path</h2><p>For a 16 GB system, use a GGUF or MLX Q4 conversion supported by your current app. About 7.5 GB is only the file size: after loading, the runtime, operating system, conversation KV cache, and other apps share memory. Once downloaded, confirm the actual identifier and format in the app's model list and start with a short context.</p><p>The official google/gemma-4-12B-it checkpoint is about 24 GB in BF16. The vLLM example below is an NVIDIA server path for these official weights; it is separate from the Q4 desktop command. When comparing results, record that both weight precision and runtime have changed.</p><p>Begin with a short Korean text question rather than an image or audio clip. If it completes, you have verified model loading and the text path. Then try a passage to summarize or a document question with a known answer to assess the baseline separately from added input features.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li><li><a href="https://localai.co.kr/en/guides/openrouter-to-local-llm-fallback-guide">When OpenRouter Is Unavailable, How Do You Switch Your App to a Local LLM?</a></li><li><a href="https://localai.co.kr/en/guides/uibk-embedding-v1-english-search-guide">Search English documents with a small model: UIBK-Embedding-v1</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-26b-a4b-serving-recipe">Gemma 4 26B-A4B MTP: How Speed Changes Between One and Many Requests</a></li></ul></section><figure><img src="https://localai.co.kr/guides/gemma-4-12b-serving-recipe-scene-1.webp" alt="A magnifying glass examines blocks from a laptop before arrows branch toward an organized server and scattered blocks." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Prepare the Q4 conversion and official weights as separate runtime paths.</figcaption></figure><section><h2>Launch with either LM Studio or official vLLM</h2><p>The desktop command uses the model identifier shown in LM Studio, loads the Q4 file, and sets an 8K context limit. The --gpu=max option requests GPU offload. After launch, inspect the app's loading status and logs to see the path actually used; the setting alone does not establish that every weight is on the GPU.</p><p>The official server runs google/gemma-4-12B-it with an 8K context and GPU memory utilization of 0.90. The example's 127.0.0.1 binding makes the server process listen on the local interface. Check LM Studio's network-serving scope too; if you change it to allow other devices, configure authentication and firewall rules separately.</p><p>After the process starts, confirm that model loading is complete and that the intended model name is selected, then send one request. Change context or concurrency only after that request completes normally; changing one variable at a time makes memory and latency effects easier to track.</p><p>The LM Studio command prompts you to choose a downloaded file. Select the Gemma 4 12B file seen in `lms ls` and wait for loading. This example uses the API alias `gemma-local` to match the later request. For vLLM, leave the server terminal running and send the API request from another terminal.</p><div><p><strong>Local serving with the LM Studio CLI (16GB–24GB desktops)</strong></p><pre><code data-guide-code-block="1-0"># 1. List models
lms ls

# 2. Load the model with maximum GPU offload and an 8K context
lms load --gpu=max --context-length=8192 --identifier gemma-local

# 3. Start the local server daemon (127.0.0.1:1234)
lms server start --port 1234</code></pre><p><small>Confirm the model identifier in the list, load it, and start the local server on port 1234.</small></p></div><div><p><strong>Serve the official text model with vLLM (NVIDIA GPU)</strong></p><pre><code data-guide-code-block="1-1">vllm serve google/gemma-4-12B-it   --host 127.0.0.1   --port 8000   --max-model-len 8192   --gpu-memory-utilization 0.90</code></pre><p><small>Serve the official instruction weights at 127.0.0.1:8000 on an NVIDIA system.</small></p></div></section><section><h2>Check a short answer and a real task through the API</h2><p>For LM Studio, request a Korean introduction using the API alias `gemma-local` assigned earlier. For vLLM, use `google/gemma-4-12B-it` in the port-8000 example. Check that the full response arrives in the requested language. Streaming shows delivery of the answer; record exact generation speed in a separate measurement.</p><p>Send the same request several times and record time to first token, generation speed, and peak memory. With a typical document to summarize, measure time to first response separately from end-to-end completion. A short self-introduction alone does not represent real task quality.</p><p>Also ask a question with a verifiable answer, such as a date or owner named in the document. Keep the same prompt and file when comparing settings so you can identify what changed the result.</p><p>For LM Studio, use the request to port 1234 below. If you chose the BF16 vLLM server, use the following port-8000 request. Check the name in `/v1/models` first so your app uses the same value.</p><div><p><strong>Test the OpenAI-compatible API</strong></p><pre><code data-guide-code-block="2-0">curl -N http://127.0.0.1:1234/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "gemma-local",
    "messages": [
      {"role": "user", "content": "한국어로 자기소개를 간단히 작성해줘."}
    ],
    "max_tokens": 512,
    "stream": true
  }'</code></pre><p><small>Send a streaming request to the local API at 127.0.0.1:1234.</small></p></div><div><p><strong>Check the BF16 vLLM model and first answer</strong></p><pre><code data-guide-code-block="2-1">curl --fail-with-body http://127.0.0.1:8000/v1/models
curl --fail-with-body http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"google/gemma-4-12B-it","messages":[{"role":"user","content":"Reply with one short sentence."}],"max_tokens":64}'</code></pre><p><small>Send this request to the vLLM server started above on port 8000.</small></p></div></section><figure><img src="https://localai.co.kr/guides/gemma-4-12b-serving-recipe-scene-2.webp" alt="Rows of small blocks run from colored blocks on a monitor to a server rack, beside a stack of three small servers." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify the basic run with a short text request and an API response.</figcaption></figure><section><h2>Add image and audio input one at a time</h2><p>Once the text baseline completes reliably, add an image input supported by the actual app and model combination. Keep the text question fixed and change only the image to make input-path and memory changes easier to compare. Attaching a file in the interface does not by itself confirm that the image reached the model; verify that it was included in the request.</p><p>For audio, first define whether the task is transcription or conversation about speech, then test that the recording reaches the model through the app. Avoid combining images, recordings, and long documents at once: isolating inputs makes failures easier to diagnose and memory use easier to observe.</p><p>If memory runs short, first reduce context and concurrent requests and see whether the text baseline recovers. Q4 weight format and KV-cache precision are separate settings, so adjust them as such. If the same limit recurs in normal work, consider a larger-memory system based on the headroom you actually need.</p></section><section><h2>Choose only the path your work needs</h2><p>If the Q4 setup handles your documents and text requests well and the wait is acceptable, you may not need larger weights. When testing another candidate, use the same file, question, and context, then compare task success and end-to-end time.</p><p>If you plan to operate the official BF16 server, separately consider an NVIDIA system that can hold about 24 GB of weights plus runtime headroom. Decide which files and input features you will actually use before setting purchase requirements. Record the working model file, app version, context, and server settings as a baseline for retesting after updates.</p></section><figure><img src="https://localai.co.kr/guides/gemma-4-12b-serving-recipe-scene-3.webp" alt="A small computer and a large server are joined by a dotted line with a green check, with different block groups above." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the smaller Q4 or server path according to the work you actually do.</figcaption></figure><section><h2>Check runtime compatibility for an NVFP4 distribution</h2><p>This requires an SGLang branch that includes the Gemma 4 loader. The AxionML/Gemma-4-12B-NVFP4 configuration uses NVFP4 for FFN and BF16 for attention. Before downloading the distribution, check that the selected SGLang branch supports this format, then inspect logs for the weights actually loaded.</p><ul><li><a href="https://github.com/AxionML/Gemma-4-12B-NVFP4">AxionML Gemma 4 12B NVFP4 distribution</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>31.3 ~ 34.8 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>122.4 ~ 136 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>122.4 ~ 136 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>107.1 ~ 118.5 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Memory fits</td><td>llama.cpp (multi-GPU)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>129.8 ~ 180.3 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>198 ~ 218.3 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>27.8 ~ 30.9 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Memory fits</td><td>llama.cpp (ROCm/HIP)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>25.4 ~ 28.3 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected model formats and runtime settings for Mac</strong></p><p>Separated the Mac MLX path from GGUF Q4_K_M and aligned the engine name, model format and command. KV-cache precision and prefill batching that the command does not specify are now marked for checking in the model or runtime settings.</p><p>Also removed MLX speed profiles that implied a larger batch despite leaving the command unchanged.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Separated uncached-input and cache-reuse records</strong></p><p>Updated the checks to record first-time inputs separately from repeated inputs. Cache effects are not folded into uncached prefill throughput or hardware differences.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Try the Gemma 4 12B speed preview</h2><p>Check the estimated token generation speed of Gemma 4 12B on a 16–24 GB system.</p><a href="https://localai.co.kr/en/speed?model=gemma-4-12b">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Gemma 4 12B takes text questions and generates answers; supported model and app combinations can also process image or audio input. This guide prepares a Q4 conversion for a 16–24 GB desktop or the official BF16 checkpoint for a larger NVIDIA system, then verifies a local API response.</dd></div><div><dt>How much memory does it need?</dt><dd>For a 16 GB system, use a GGUF or MLX Q4 conversion supported by your current app. About 7.5 GB is only the file size: after loading, the runtime, operating system, conversation KV cache, and other apps share memory. Once downloaded, confirm the actual identifier and format in the app's model list and start with a short context.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4 26B-A4B MTP: How Speed Changes Between One and Many Requests</title><link>https://localai.co.kr/en/guides/gemma-4-26b-a4b-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/gemma-4-26b-a4b-serving-recipe</guid><description>Learn how to distinguish Gemma 4 26B-A4B weights from its MTP assistant, then compare single-request and concurrent workloads with MLX-VLM.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Gemma 4 26B-A4B MTP: How Speed Changes Between One and Many Requests</h1><p>Compare MTP requests on Gemma 4 26B-A4B</p><p id="guide-page-summary">Gemma 4 26B-A4B is a MoE model that takes documents or images with questions and generates text answers. It computes with about 3.8B of its 25.2B parameters per token; running it requires the full weights and context KV cache. With MTP, an assistant proposes upcoming token candidates for the target to verify, potentially reducing answer-generation time.</p><p>First run the target model alone and check that it processes your document through to completion. Then add an assistant drafter in the same MLX-VLM environment and send the same question. Comparing the wait for the first token separately from subsequent generation shows whether MTP helps your workload.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Distinguish loading all 25.2B weights from activating about 3.8B parameters per token.</li><li>MTP needs an assistant drafter paired with the 26B-A4B target.</li><li>Measure single and concurrent requests separately, recording prompts, output length, and memory.</li></ol></section><section><h2>Separate full weights from active computation</h2><p>If you want to find changes in a long design document, do not estimate memory from the model's ‘3.8B active’ figure alone. Only some experts activate for a token, but the runtime prepares all roughly 25.2B weights from which to select. Context KV cache and operating-system/runtime memory are additional.</p><p>The Q4 desktop path uses an 8K context and one concurrent request as a comparison starting point, not as an optimal setting for every device. First check that a real document question completes with target-only, then add the assistant drafter only after the baseline is stable.</p><p>The Gemma 4 MTP drafter Google announced in May 2026 is an assistant checkpoint paired with the target. It is not replaced by an arbitrary small chat model; the app and runtime must support the assistant format and MTP.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/recipe-gemma4-26b-a4b-artifact-editorial.webp" alt="A memory diagram separating all 25.2B weights, 3.8B active computation, and KV headroom" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Make room for all target weights and context before enabling MTP.</figcaption></figure><section><h2>Understand how MTP verifies draft candidates</h2><p>In ordinary generation, the target computes one next token at a time. With MTP, a four-layer assistant drafter proposes upcoming token candidates, and the target verifies the bundle. If candidates match, one target computation can confirm several tokens and reduce decode waiting. Rejected candidates are replaced by target output.</p><p>The gain depends on how often drafts match the next tokens. Frequent acceptance can reduce decode time, while low acceptance adds draft computation and memory. If prefill for a long input dominates total waiting, improving generation alone may not greatly reduce end-to-end response time.</p><p>In its May 2026 announcement, Google reported a routing challenge at batch 1 on Apple Silicon and observed up to about 2.2× improvement at batch 4–8. Those results apply to the announcement's model, runtime, and request-batch conditions. Do not generalize them to a single request on a personal Mac or a different quantized app; record batch size and prompt/output token counts.</p><table><caption>Record different details for each measurement interval.</caption><thead><tr><th scope="col">Measurement stage</th><th scope="col">Question</th><th scope="col">Conditions to record</th></tr></thead><tbody><tr><th scope="row">Model load</th><td>Does the target and assistant fit in memory?</td><td>Cold start, weight precision, peak memory</td></tr><tr><th scope="row">Prefill / TTFT</th><td>How long to read a long document and produce the first token?</td><td>Input tokens, warm/cold prefix, context</td></tr><tr><th scope="row">Decode</th><td>How quickly does generation continue after the first token?</td><td>Output length, accepted tokens, temperature</td></tr><tr><th scope="row">End-to-end request</th><td>How long from start to completion?</td><td>Batch, concurrency, warmups and repetitions</td></tr></tbody></table><ul><li><a href="https://blog.google/innovation-and-ai/technology/developers-tools/multi-token-prediction-gemma-4/">Google Gemma 4 MTP announcement and conditions</a></li></ul></section><section><h2>Create a target-only baseline in MLX-VLM</h2><p>This exercise first runs the same BF16 target in MLX-VLM on Apple Silicon, then compares it with MTP using the paired BF16 assistant drafter. You need memory for both model files. Do not mix in Q4 LM Studio results; compare target-only and MTP within the same MLX-VLM runtime.</p><p>The first run may include model-download and loading time. After confirming load completion and a response, record three target-only runs with the same prompt and 256-token limit. Then run the command with the drafter under the same conditions. Check logs for assistant loading and draft-acceptance statistics.</p><p>Check that both runs answer and that MTP logs show acceptance information. If the output differs at temperature 0, record that and inspect runtime version, checkpoints, prompt template, and logs. Keep published efficiency claims separate from your own measurements.</p><div><p><strong>Compare the Gemma 4 26B-A4B target with assistant MTP</strong></p><pre><code data-guide-code-block="2-0">python -m pip install -U mlx-vlm
mlx_vlm.generate --model mlx-community/gemma-4-26B-A4B-it-bf16 --prompt "Design note: The Northstar launch moves from May 12 to May 19. The API freeze remains May 5. Summarize the changed date and the unchanged milestone." --max-tokens 256 --temperature 0
mlx_vlm.generate --model mlx-community/gemma-4-26B-A4B-it-bf16 --draft-model mlx-community/gemma-4-26B-A4B-it-assistant-bf16 --draft-kind mtp --draft-block-size 6 --prompt "Design note: The Northstar launch moves from May 12 to May 19. The API freeze remains May 5. Summarize the changed date and the unchanged milestone." --max-tokens 256 --temperature 0</code></pre><p><small>This shows the official MLX-VLM pairing. Separate download time on the first run and repeat with the same prompt.</small></p></div><ul><li><a href="https://github.com/Blaizzy/mlx-vlm#gemma-4-mtp">MLX-VLM Gemma 4 MTP support and commands</a></li><li><a href="https://huggingface.co/google/gemma-4-26B-A4B-it-assistant">Google Gemma 4 26B-A4B assistant checkpoint</a></li></ul></section><figure><img src="https://localai.co.kr/guides/recipe-gemma4-26b-a4b-server-editorial.webp" alt="Two execution paths: a Gemma 4 Q4 model in LM Studio and a BF16 vLLM server" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare target-only and assistant paths within the same MLX-VLM runtime.</figcaption></figure><section><h2>Measure single requests and batch processing separately</h2><p>Run target-only and MTP as single requests. Use the same prompt and output limit, warm up, then repeat at least three times; separate initial file loading from warm measurements. Record median time, omissions, accepted tokens, and peak memory. With long inputs, track first-token and end-to-end time as well as generation speed.</p><p>A server handling multiple requests is a separate test. When changing batch, adjust only prompts, output length, and request count; keep model files and draft block size fixed. For individual responsiveness, single-request latency is the main measure; for server capacity, track per-request latency and total throughput together.</p><p>If acceptance is low or draft overhead makes a workload slower, target-only may be the better configuration for that task. Higher throughput alone does not mean each user's answer arrives sooner; decide using your real request mix.</p></section><figure><img src="https://localai.co.kr/guides/recipe-gemma4-26b-a4b-verify-editorial.webp" alt="A checklist flow for model loading, input processing, MTP token verification, and context memory" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Measure single and concurrent requests separately to check your workload.</figcaption></figure><section><h2>Choose the feature based on memory or generation wait</h2><p>QAT changes weight representation and compression efficiency to reduce memory needs; MTP verifies candidate tokens during generation to reduce waiting. To use MTP with a QAT target, confirm a target/drafter pair that supports both features. File names containing QAT or MTP do not establish compatibility.</p><p>If the target itself does not load, first address file precision and memory headroom. Compare MTP when the target works and answer generation is the main bottleneck. If input reading takes longest, inspect prefill and cache conditions first. If target-only is faster, do not add the assistant for that workload.</p><ul><li><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B Q4 path</a></li><li><a href="https://localai.co.kr/en/guides/mtp-multi-token-prediction">MTP and speculative decoding</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Weights, context, and app memory</a></li></ul></section><section><h2>Check the announcement and runtime documentation</h2><p>The MTP mechanism and Apple Silicon batch results refer to conditions Google published in May 2026. The CLI example follows MLX-VLM's published command and Gemma 4 pairing. This guide does not add device-specific benchmarks; record personal measurements with their model, runtime, and request conditions.</p><ul><li><a href="https://blog.google/innovation-and-ai/technology/developers-tools/multi-token-prediction-gemma-4/">Official Google Gemma 4 MTP announcement</a></li><li><a href="https://github.com/Blaizzy/mlx-vlm">MLX-VLM repository and runtime documentation</a></li><li><a href="https://huggingface.co/google/gemma-4-26B-A4B-it-assistant">Gemma 4 26B-A4B assistant checkpoint</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>26.9 ~ 65.4 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>85.2 ~ 160.6 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>LM Studio</td><td>Balanced · Long context</td><td>16,384 tokens</td><td>85.2 ~ 160.6 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>8,192 tokens</td><td>67.6 ~ 157 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Memory fits</td><td>llama.cpp (multi-GPU)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>83.7 ~ 242.7 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>117.8 ~ 273.4 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>17.9 ~ 41.6 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Memory fits</td><td>llama.cpp (ROCm/HIP)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>16.8 ~ 39.1 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected model formats and runtime settings for Mac</strong></p><p>Separated the Mac MLX path from GGUF Q4_K_M and aligned the engine name, model format and command. KV-cache precision and prefill batching that the command does not specify are now marked for checking in the model or runtime settings.</p><p>Also removed MLX speed profiles that implied a larger batch despite leaving the command unchanged.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Separated uncached-input and cache-reuse records</strong></p><p>Updated the checks to record first-time inputs separately from repeated inputs. Cache effects are not folded into uncached prefill throughput or hardware differences.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Review the basics of MTP</h2><p>See how the assistant proposes candidates and the target verifies them.</p><a href="https://localai.co.kr/en/guides/mtp-multi-token-prediction">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Gemma 4 26B-A4B is a MoE model that takes documents or images with questions and generates text answers. It computes with about 3.8B of its 25.2B parameters per token; running it requires the full weights and context KV cache. With MTP, an assistant proposes upcoming token candidates for the target to verify, potentially reducing answer-generation time.</dd></div><div><dt>How much memory does it need?</dt><dd>This exercise first runs the same BF16 target in MLX-VLM on Apple Silicon, then compares it with MTP using the paired BF16 assistant drafter. You need memory for both model files. Do not mix in Q4 LM Studio results; compare target-only and MTP within the same MLX-VLM runtime.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</title><link>https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe</guid><description>Load Qwen3.6-35B-A3B NVFP4 in the official DGX Spark vLLM container and verify an OpenAI-compatible endpoint. Distinguish the single-Spark baseline from multi-Spark paths and memory settings.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</h1><p>Run Qwen3.6 35B-A3B with vLLM on DGX Spark</p><p id="guide-page-summary">Qwen3.6-35B-A3B is an MoE model that takes text input and generates answers. On one DGX Spark, use the NVIDIA ARM64/Blackwell vLLM container together with the official NVFP4 checkpoint. This guide loads the model, verifies a first response through the loopback API, and then adjusts memory and context options.</p><p>Match the NVFP4 weight format, container version, and model ID. NVFP4 is a weight format, while FP8 KV cache is a separate setting for storing context state. First verify the endpoint with TP1, an 8K context, and one request; then test longer context, concurrency, or MTP one at a time.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The single-Spark path uses the vLLM v0.28.0 container and nvidia/Qwen3.6-35B-A3B-NVFP4.</li><li>NVFP4 weights and KV-cache dtype are separate memory settings.</li><li>Check the model list and a short completion through 127.0.0.1.</li></ol></section><section><h2>Separate speed estimates from server measurements</h2><p>The speed pages for the three systems below are calculated estimates for a 4,096-token input and one user, not measurements from a running server. Keep them separate from results you record after deployment.</p><p>For Mac mini M4 32 GB with Q4_K_M and no acceleration, the explorer shows generation at 7.8–22.5 tok/s, first token at 5.5–15.7 seconds, input processing at 263–757 tok/s, 21.3 GB needed, and 27 GB available. For DGX Spark 128 GB with NVFP4 and MTP, it shows 61.2–111.1 tok/s, 1.5–3.1 seconds, 1,341–2,661 tok/s, 24.3 GB needed, and 116 GB available.</p><p>For two DGX Spark systems with 256 GB, Q4_K_M, and no acceleration, the estimated values are 17–61.4 tok/s generation, 0.91–2.4 seconds to first token, 1,763–4,563 tok/s input processing, 21.3 GB needed, and 232 GB available. The combined memory can be used to split a model, but answer speed does not automatically double; networking and distributed configuration are separate requirements.</p><ul><li><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-32gb&amp;model=qwen-3.6-35b-a3b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Explore this Mac mini M4 32 GB configuration</a></li><li><a href="https://localai.co.kr/en/hardware/mac-mini-m4-32gb">Mac mini M4 32 GB hardware details</a></li><li><a href="https://localai.co.kr/en/speed?hardware=nvidia-dgx-spark-128gb&amp;model=qwen-3.6-35b-a3b&amp;quant=NVFP4&amp;context=4096&amp;accel=mtp">Explore this DGX Spark 128 GB configuration</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128 GB hardware details</a></li><li><a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-dgx-spark-256gb&amp;model=qwen-3.6-35b-a3b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Explore this dual-DGX-Spark configuration</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dual-dgx-spark-256gb">Dual DGX Spark, 256 GB hardware details</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-rtx-5090-32gb">RTX 5090 32GB memory, speed and price</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/rocm-radeon-pytorch-check-guide">Install PyTorch ROCm on AMD Radeon and verify GPU operation</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.6-35b-a3b-serving-recipe-scene-1.webp" alt="A scene showing the Qwen3.6 35B-A3B MoE model and a 4K input setting" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate calculated estimates for 4K single-request speed from server tests.</figcaption></figure><section><h2>Match the container and model as one configuration</h2><p>On DGX Spark, use the NVIDIA vLLM recipe for Spark rather than a container intended for image generation or a different architecture. This guide covers one GB10 node. A recipe that configures Ray or tensor parallel across multiple systems is a separate deployment with different networking and distributed processes.</p><p>The single-Spark NVFP4 profile specifies the vLLM v0.28.0 container and the nvidia/Qwen3.6-35B-A3B-NVFP4 repository. NVIDIA's recipe also has profiles for RTX 5090 and RTX PRO 6000, but do not copy this GB10 configuration to those cards. Check device-specific kernels, memory settings, and model-file access in the matching path.</p><p>NVFP4 is the precision used for model weights, while --kv-cache-dtype fp8 sets the format for request-context state. Do not add FP8 KV cache, MTP, and context options all at once; first verify that the official single-Spark configuration starts an endpoint.</p><ul><li><a href="https://github.com/vllm-project/recipes/blob/main/models/Qwen/Qwen3.6-35B-A3B.yaml">vLLM Qwen3.6-35B-A3B serving recipe</a></li><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/nvfp4-quantization/README.md">DGX Spark NVFP4 playbook</a></li><li><a href="https://build.nvidia.com/playbooks/vllm/agent-ready-models">NVIDIA vLLM model deployment guide</a></li></ul></section><section><h2>Open a loopback endpoint and verify the first response</h2><p>Start the basic check with container v0.28.0, TP1, an 8K context, and one concurrent request. Keep FlashInfer, Marlin, FP8 KV, and memory utilization 0.5 from the official GB10 path; this profile lowers only context and request count. Even with host networking, bind the server to 127.0.0.1 for local access only.</p><p>After logs show that weights are loaded and the engine is ready, request /v1/models. If the list contains qwen3.6-35b-a3b, use that name in the chat completion model field. A response in choices[0].message.content confirms the API connection. This short function explanation is a smoke test, not a benchmark.</p><div><p><strong>Minimal Spark NVFP4 vLLM endpoint</strong></p><pre><code data-guide-code-block="2-0">docker run --rm --gpus all --ipc=host --network host -v "$HOME/.cache/huggingface:/root/.cache/huggingface" vllm/vllm-openai:v0.28.0 nvidia/Qwen3.6-35B-A3B-NVFP4 --served-model-name qwen3.6-35b-a3b --host 127.0.0.1 --port 8000 --tensor-parallel-size 1 --trust-remote-code --kv-cache-dtype fp8 --attention-backend flashinfer --moe-backend marlin --gpu-memory-utilization 0.5 --max-model-len 8192 --max-num-seqs 1</code></pre><p><small>Keep the official Spark profile's kernels and FP8 KV. The container runs vllm serve, so place the model ID after the image name.</small></p></div><div><p><strong>Check the model list and send a short request</strong></p><pre><code data-guide-code-block="2-1">curl --fail-with-body http://127.0.0.1:8000/v1/models
curl --fail-with-body http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"qwen3.6-35b-a3b","messages":[{"role":"user","content":"Explain this function's empty-input behavior in one sentence: def first_item(items): return items[0]"}],"temperature":0,"max_tokens":64}'</code></pre><p><small>Both requests use the loopback address. Use the returned answer only to verify connectivity.</small></p></div></section><section><h2>Change options according to where a problem occurs</h2><p>After the server responds, adjust the existing recipe's FP8 KV, context limit, and concurrent-sequence settings as needed. Long input increases per-request cache use, and concurrent requests need multiple caches; test one value at a time rather than raising both together.</p><p>If the container does not start, inspect logs for the image tag, model ID and file access, and architecture support. If the model loads but a request hits a memory error, lower either context or concurrent sequences. First distinguish startup failures from request-time failures rather than adding options absent from the playbook.</p><p>Do not combine a Ray setup that splits a model across two Sparks with the single-node command. If the goal is personal responsiveness, first check whether answer time and memory on one Spark are sufficient. Multiple Sparks are a separate operational choice requiring networking and distributed execution.</p></section><section><h2>Evaluate results with the same real task</h2><p>After the short function check, send a task you actually do. For code changes, include input/output requirements and tests; for document questions, ask about a verifiable date or detail. Record the launch command, container tag, model revision, prompt, and output limit so you can compare option changes.</p><p>For your own measurements, exclude warm-up and record end-to-end time for repeated requests, GPU memory, and answer accuracy. Official support information and calculated speed estimates are different from runtime measurements. If using the Qwen3 reasoning parser, check that vLLM 0.19.0 or later actually supports the parser and model; the version number alone does not establish this.</p><p>A published oMLX 0.7.0 result on M5 Ultra is a reference from a separate platform. On M5 Ultra 256 GB/80-core GPU, the Qwen3.6-35B-A3B 4-bit code_python test used a 128-token output budget and temperature 0: 4K prefill was 9,126 tok/s and decode 158.3 tok/s. Version 0.7.0rc1 showed 7,931 tok/s and 158.2 tok/s respectively; for this item, prefill rose while decode was nearly unchanged. This table alone does not show that MTP accelerates Qwen3.6 decode.</p><p>The binary-search request below uses a generic model ID. If you started the server with the Spark command above, change the request's model value to qwen3.6-35b-a3b. For another server, read its actual name from /v1/models. With LM Studio, use port 1234 and the identifier of the model loaded in the app.</p><div><p><strong>Check the reasoning-response streaming API</strong></p><pre><code data-guide-code-block="4-0">curl -N http://127.0.0.1:8000/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "Qwen/Qwen3.6-35B-A3B",
    "messages": [
      {"role": "user", "content": "파이썬으로 이진 탐색 함수를 작성하고 시간 복잡도를 설명해줘."}
    ],
    "max_tokens": 1024,
    "stream": true
  }'</code></pre><p><small>Send a request to vLLM port 8000 and inspect how reasoning and the final answer arrive in the stream.</small></p></div><ul><li><a href="https://www.reddit.com/r/oMLX/comments/1wusa85/omlx_070_vs_070rc1_benchmark_what_changed_7/">oMLX 0.7.0 Qwen3.6 result and conditions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/qwen-3.6-35b-a3b-serving-recipe-scene-3.webp" alt="A scene representing completion of a real task after verifying the run" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check not only connectivity but whether your regular code or document task completes.</figcaption></figure><section><h2>Increase context and concurrency one at a time</h2><p>For a Q4 conversion on a 24 GB desktop, around 20 GB is a starting estimate for the weight file. Check the actual download size and leave space for KV cache and runtime. This uses a different file format and runtime from the Spark NVFP4 path explained here.</p><p>If 24 GB leaves little headroom, first verify a baseline response with one request and short context. Increase input length in stages, checking cache and peak memory each time; record the server limit separately from actual input tokens. System instructions and prior conversation can also count toward input length.</p><p>After adding MTP, check whether acceptance length and decode time after the first token change for the same code request. Do not generalize code-generation results to general writing. Avoid changing cache precision, prefill chunk, and MTP at once; test the interval that was actually slow first.</p><p>If a short baseline works but long context causes OOM or swapping, first lower context or concurrent sequences. If the target itself fails to load or even short requests remain memory-bound, revisit the weight file and runtime memory requirements. Consider larger memory only in response to a confirmed bottleneck.</p></section><figure><img src="https://localai.co.kr/guides/qwen-3.6-35b-a3b-serving-recipe-scene-2.webp" alt="A scene about inspecting memory after loading the model file on a 24 GB system" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After loading the model, check headroom for KV cache and real requests.</figcaption></figure><section><h2>Recheck versions in the official runtime references</h2><p>The references below document the single-Spark NVFP4 container and official vLLM checkpoint paths. Before running commands, recheck the current image tag, model revision, and supported options.</p><p>For LM Studio, download the Q4 file and confirm it with `lms ls`, then select it in the prompt opened by `lms load`. Its API alias is `qwen36-local`. Connect LM Studio using port 1234 and this alias; keep the earlier Spark vLLM requests on port 8000 with their existing server alias.</p><div><p><strong>Official checkpoint with vLLM 0.19.0+ (multi-GPU)</strong></p><pre><code data-guide-code-block="6-0">GPU_COUNT=8 # The official example uses 8 GPUs; change this to match your system
vllm serve Qwen/Qwen3.6-35B-A3B   --host 127.0.0.1   --port 8000   --tensor-parallel-size "$GPU_COUNT"   --max-model-len 8192   --reasoning-parser qwen3   --gpu-memory-utilization 0.92</code></pre><p><small>This official server example sets GPU count and model path for the deployment system.</small></p></div><div><p><strong>Desktop serving with LM Studio (Q4 GGUF)</strong></p><pre><code data-guide-code-block="6-1">lms ls
lms load --gpu=max --context-length=8192 --identifier qwen36-local
lms server start --port 1234</code></pre><p><small>An example of serving a Q4 file through a local daemon on a 32 GB+ Mac or high-memory GPU.</small></p></div><ul><li><a href="https://github.com/vllm-project/recipes/blob/main/models/Qwen/Qwen3.6-35B-A3B.yaml">Official vLLM Qwen3.6 recipe</a></li><li><a href="https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/nvfp4-quantization/README.md">NVIDIA DGX Spark NVFP4 playbook</a></li><li><a href="https://build.nvidia.com/playbooks/vllm/agent-ready-models">NVIDIA vLLM model guide</a></li></ul></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>22.6 ~ 54.1 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>114.4 ~ 171.6 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>103.0 ~ 183.0 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Tight on memory</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>4,096 tokens</td><td>62.7 ~ 157.5 tok/s</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Memory fits</td><td>llama.cpp (multi-GPU)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>76 ~ 238.7 tok/s</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Memory fits</td><td>llama.cpp (CUDA)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>107 ~ 268.8 tok/s</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Experimental setup</td><td>vLLM 0.25.0 · CUDA 13.0 · MTP K=2</td><td>Published NVFP4 + MTP benchmark</td><td>2,048 Token</td><td>93.05 tok/s</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Memory fits</td><td>llama.cpp (ROCm/HIP)</td><td>Balanced setting · prefill prioritized · long context</td><td>16,384 tokens</td><td>15.3 ~ 38.4 tok/s</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Corrected model formats and runtime settings for Mac</strong></p><p>Separated the Mac MLX path from GGUF Q4_K_M and aligned the engine name, model format and command. KV-cache precision and prefill batching that the command does not specify are now marked for checking in the model or runtime settings.</p><p>Also removed MLX speed profiles that implied a larger batch despite leaving the command unchanged.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Separated uncached-input and cache-reuse records</strong></p><p>Updated the checks to record first-time inputs separately from repeated inputs. Cache effects are not folded into uncached prefill throughput or hardware differences.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Try the Qwen3.6 35B-A3B speed preview</h2><p>Check estimated speed and memory loading for Qwen3.6 MoE on 24 GB and 32 GB+ systems.</p><a href="https://localai.co.kr/en/speed?model=qwen-3.6-35b-a3b">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Qwen3.6-35B-A3B is an MoE model that takes text input and generates answers. On one DGX Spark, use the NVIDIA ARM64/Blackwell vLLM container together with the official NVFP4 checkpoint. This guide loads the model, verifies a first response through the loopback API, and then adjusts memory and context options.</dd></div><div><dt>How much memory does it need?</dt><dd>For Mac mini M4 32 GB with Q4_K_M and no acceleration, the explorer shows generation at 7.8–22.5 tok/s, first token at 5.5–15.7 seconds, input processing at 263–757 tok/s, 21.3 GB needed, and 27 GB available. For DGX Spark 128 GB with NVFP4 and MTP, it shows 61.2–111.1 tok/s, 1.5–3.1 seconds, 1,341–2,661 tok/s, 24.3 GB needed, and 116 GB available.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</title><link>https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe</guid><description>This guide distinguishes vLLM and SGLang settings for serving the official 320B (18B active) GLM-5.3-Flash checkpoint across accelerators from memory considerations for quantized conversions.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</h1><p>GLM-5.3-Flash Setup: Mac and Multi-GPU Servers</p><p id="guide-page-summary">GLM-5.3-Flash is a language model that answers questions about your documents and helps write code. There are two main local paths: distribute the official model across several GPUs, or run a quantized MLX conversion on a Mac with ample memory. This guide explains how to choose a path, start a server, and receive your first response.</p><p>For a Mac used by one person, start with the oMLX path. For a GPU server shared by several people, consider SGLang or vLLM. Once it works, increase input length and concurrency to see how well it responds to your actual workload.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Use SGLang or vLLM for the official model, and oMLX for an MLX conversion on Mac.</li><li>The model has 320B total parameters, with about 18B active per token.</li><li>Start the GPU server at 16K context and send a short API request first.</li></ol></section><section><h2>Choose a runtime path for your hardware</h2><p>GLM-5.3-Flash is an MoE model that selects some expert networks for each calculation. It has 320B total parameters and activates about 18B to produce a token. Running it requires memory for the full weights. Serve the official zai-org/GLM-5.3-Flash model across multiple GPUs with SGLang or vLLM.</p><p>On Mac, use a community-quantized file converted to MLX. oMLX 0.7.0 supports Lightning MTP and DFlash2 for GLM-5.3-Flash. For DFlash2, also prepare the incoai/GLM-5.3-Flash-DFlash2 draft model. The two methods require different model files, so choosing the acceleration method first makes setup easier.</p><table><caption>Two local paths for GLM-5.3-Flash</caption><thead><tr><th scope="col">Hardware</th><th scope="col">Model file</th><th scope="col">Runtime</th></tr></thead><tbody><tr><th scope="row">Multi-GPU server</th><td>Official zai-org/GLM-5.3-Flash</td><td>SGLang or vLLM</td></tr><tr><th scope="row">Mac with ample memory</th><td>Community quantized MLX conversion</td><td>oMLX 0.7.0</td></tr></tbody></table><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.0">oMLX 0.7.0 GLM and DFlash2 support notes</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m5-ultra-256gb">Mac Studio M5 Ultra 256GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</a></li><li><a href="https://localai.co.kr/en/guides/lfm2-5-vl-dspark-local-guide">LFM2.5-VL-3B DSpark: more than 2× faster visual responses on Mac</a></li><li><a href="https://localai.co.kr/en/guides/deepseek-v4-flash-serving-recipe">DeepSeek-V4-Flash: distributed serving for a 304B model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/glm-5.3-flash-serving-recipe-scene-1.webp" alt="A green box with documents and a dark block box sit above a row of large and small blocks." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose the model and runtime for your hardware.</figcaption></figure><section><h2>Start an MLX-VLM server on Mac and verify the API</h2><p>The Mac path uses the `mlx-community/GLM-5.3-Flash-4bit` conversion with `mlx-vlm`. Its model card lists a 190 GiB file and says a Mac with at least 256 GB of memory is required. The architecture is documented for `mlx-vlm`, not `mlx-lm`, so match the runtime to the checkpoint.</p><p>Start the server on `127.0.0.1:8080` and check that `/v1/models` returns a model ID. If the list shows `mlx-community/GLM-5.3-Flash-4bit`, send a short code question using the same ID. A sentence in `choices[0].message.content` explaining the first element and empty-input behavior confirms the basic text path.</p><p>If the command is not found, check that `mlx-vlm` is installed in the same Python environment. For a checkpoint-loading error, verify the `mlx-vlm` version and exact model ID. For a memory error, check unified memory used by other running apps and consider the model card’s 190 GiB file and 256 GB-or-more requirement.</p><div><p><strong>Install MLX-VLM and start the local server</strong></p><pre><code data-guide-code-block="1-0">python -m pip install -U mlx-vlm
mlx_vlm.server --model mlx-community/GLM-5.3-Flash-4bit --host 127.0.0.1 --port 8080</code></pre><p><small>Load the conversion through the MLX-VLM path on Apple Silicon and bind the server to loopback.</small></p></div><div><p><strong>Check server status and model ID</strong></p><pre><code data-guide-code-block="1-1">curl --fail-with-body http://127.0.0.1:8080/v1/models</code></pre><p><small>Check the model identifier to use from the model list.</small></p></div><div><p><strong>Send a short code question to the Mac server</strong></p><pre><code data-guide-code-block="1-2">curl --fail-with-body http://127.0.0.1:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"mlx-community/GLM-5.3-Flash-4bit","messages":[{"role":"user","content":"Explain this function empty-input behavior in one sentence: def first_item(items): return items[0]"}],"temperature":0,"max_tokens":128}'</code></pre><p><small>Confirm that the response body returns a complete explanation of the function behavior.</small></p></div><ul><li><a href="https://huggingface.co/mlx-community/GLM-5.3-Flash-4bit">GLM-5.3-Flash 4-bit MLX model card</a></li><li><a href="https://github.com/Blaizzy/mlx-vlm/blob/main/docs/usage.md">MLX-VLM installation and server usage</a></li></ul></section><section><h2>Start the GPU server at 16K context</h2><p>Run one of the commands below for your chosen runtime. GPU_COUNT=8 is an example using eight physical GPUs. Adjust it to the installed GPU count and the tensor-parallel configurations supported by the runtime. Different memory capacities across GPUs can limit how evenly the model is distributed.</p><p>Both commands set a 16K context. Memory must remain for KV cache and workspace after loading the model, so this is a useful starting length. Verify a response to a short question, then increase to the document lengths you plan to use.</p><p>The server address is 127.0.0.1:8000. It is reachable from the same computer, not from external machines. Configure authentication and access controls before sharing it with teammates. If requests contain internal material, also define what logs are stored and for how long.</p><div><p><strong>Start a multi-GPU server with SGLang</strong></p><pre><code data-guide-code-block="2-0">GPU_COUNT=8 # Change this to the number of physical GPUs
python -m sglang.launch_server   --model-path zai-org/GLM-5.3-Flash   --tp "$GPU_COUNT"   --host 127.0.0.1   --port 8000   --context-length 16384</code></pre><p><small>Set TP to the actual GPU count and start the server at 127.0.0.1:8000.</small></p></div><div><p><strong>Start a multi-GPU server with vLLM</strong></p><pre><code data-guide-code-block="2-1">GPU_COUNT=8 # Change this to the number of physical GPUs
vllm serve zai-org/GLM-5.3-Flash   --tensor-parallel-size "$GPU_COUNT"   --host 127.0.0.1   --port 8000   --max-model-len 16384   --gpu-memory-utilization 0.90</code></pre><p><small>Set tensor parallelism to the actual GPU count and open the local server.</small></p></div></section><section><h2>Get the first response and check its speed</h2><p>Once the model is loaded and the server is ready for requests, open a new terminal and run the command below. If the answer appears progressively, streaming is working. Wait for it to finish and inspect memory usage on each GPU and the server logs.</p><p>After a warm-up run, send the same question three times. Record median time to first token, decode speed, and peak memory to compare the next configuration. Keep first-time inputs separate from requests that reuse cache: reading a different amount of text changes the waiting time.</p><p>If you want a reference for response speed on Mac, consider the published M5 Ultra result.</p><p>The published Mac was an M5 Ultra 256 GB/80-core GPU. It ran a community MLX oQ4 MTP conversion in oMLX 0.7.0 with code_python input, an output budget of 128 tokens, and temperature 0. KV cache used TurboQuant 4-bit and the memory guard was aggressive. The table shows results from that configuration.</p><table><caption>Published GLM-5.3-Flash results on M5 Ultra 256 GB</caption><thead><tr><th scope="col">Input length</th><th scope="col">Prefill</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">4K tokens</th><td>2,270 tok/s</td><td>64.0 tok/s</td></tr><tr><th scope="row">16K tokens</th><td>2,313 tok/s</td><td>83.6 tok/s</td></tr></tbody></table><p>A server shared by developers also needs a concurrency test. If four teammates ask questions at once, send four requests together and record first-response and completion times for each. Record the total tokens processed too, so you can evaluate both individual waiting time and team throughput.</p><div><p><strong>Send a short question</strong></p><pre><code data-guide-code-block="3-0">curl -N http://127.0.0.1:8000/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "zai-org/GLM-5.3-Flash",
    "messages": [
      {"role": "user", "content": "대규모 분산 추론 환경의 이점을 정리해줘."}
    ],
    "max_tokens": 512,
    "stream": true
  }'</code></pre><p><small>Send a streaming request to 127.0.0.1:8000 and verify its completion.</small></p></div><ul><li><a href="https://www.reddit.com/r/oMLX/comments/1wusa85/omlx_070_vs_070rc1_benchmark_what_changed_7/">M5 Ultra GLM and Flash-Next published measurement conditions</a></li><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.0">oMLX 0.7.0 release notes</a></li></ul></section><figure><img src="https://localai.co.kr/guides/glm-5.3-flash-serving-recipe-scene-2.webp" alt="A laptop connects along a curved path to eight servers, each marked with a green check." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Inspect per-GPU memory and communication to confirm each accelerator participates in requests.</figcaption></figure><section><h2>Tune for long documents and concurrent requests</h2><p>For long documents, check whether the model finds the information you need. Put a verifiable fact such as a date or exception in the middle, then ask about it. Each time you increase input beyond 16K, record answer accuracy alongside memory use.</p><p>Change context length, cache settings, and MTP one at a time to identify which setting improves speed. Per-GPU memory records and server logs help diagnose errors. If short questions work but long inputs fail, first check whether memory for KV cache and workspace is insufficient.</p><ul><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">Compare MoE and dense models</a></li><li><a href="https://localai.co.kr/en/guides/multi-gpu-tensor-parallel">Multi-GPU tensor parallel setup</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Understand context and KV-cache capacity</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Separate weights from runtime memory</a></li></ul></section><section><h2>Choose a model using your actual tasks</h2><p>Make the final model choice with tasks you do frequently. Prepare a few verifiable questions, such as finding where a function is used, summarizing a configuration-change commit, or explaining differences between two files. Give the same material to a smaller model and GLM, then compare accuracy, response time, and memory use.</p><p>If a smaller model gives the needed answers and handles concurrent users, it lets you run a lighter setup. If GLM performs an important task better, use that improvement to guide your choice. Checking whether waiting times remain acceptable as users increase also helps choose hardware.</p><p>Save a working setup with the model identifier, runtime version, GPU configuration, context length, and concurrency. Test the next update with the same questions to compare performance directly. You also have a previous configuration to return to if problems arise.</p></section><figure><img src="https://localai.co.kr/guides/glm-5.3-flash-serving-recipe-scene-3.webp" alt="Colored blocks in a cabinet lead to a conveyor and dashboard, beside a large block group and color-coded document trays." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Choose a model by comparing answer quality and waiting time on frequent tasks.</figcaption></figure><section><h2>Use the GLM5-next loader for NVFP4</h2><p>For RadixArk/GLM-5.3-Flash-NVFP4, choose an SGLang path that includes the GLM5-next model loader and mixed-precision MoE kernels. This file format needs the dedicated loader. Check that your SGLang branch includes the loader and kernels before loading the model.</p></section><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>66.9 ~ 100.3 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Memory fits</td><td>oMLX</td><td>Balance setting · generation speed · MTP · long context</td><td>16,384 tokens</td><td>60.2 ~ 107.0 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Try the GLM-5.3-Flash speed preview</h2><p>Explore how hardware and acceleration settings change prefill and decode speed.</p><a href="https://localai.co.kr/en/speed?model=glm-5.3-flash">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>GLM-5.3-Flash is a language model that answers questions about your documents and helps write code. There are two main local paths: distribute the official model across several GPUs, or run a quantized MLX conversion on a Mac with ample memory. This guide explains how to choose a path, start a server, and receive your first response.</dd></div><div><dt>How much memory does it need?</dt><dd>The Mac path uses the `mlx-community/GLM-5.3-Flash-4bit` conversion with `mlx-vlm`. Its model card lists a 190 GiB file and says a Mac with at least 256 GB of memory is required. The architecture is documented for `mlx-vlm`, not `mlx-lm`, so match the runtime to the checkpoint.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>If the command is not found, check that `mlx-vlm` is installed in the same Python environment. For a checkpoint-loading error, verify the `mlx-vlm` version and exact model ID. For a memory error, check unified memory used by other running apps and consider the model card’s 190 GiB file and 256 GB-or-more requirement.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DeepSeek-V4-Flash: distributed serving for a 304B model</title><link>https://localai.co.kr/en/guides/deepseek-v4-flash-serving-recipe</link><guid isPermaLink="true">https://localai.co.kr/en/guides/deepseek-v4-flash-serving-recipe</guid><description>Serving DeepSeek-V4-Flash-0731, with 304B total and 13B active parameters: the official 4×GB300 vLLM setup, a 16K starting context and local API checks.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">DeepSeek-V4-Flash: distributed serving for a 304B model</h1><p>Serve DeepSeek-V4-Flash on a 4×GB300 server</p><p id="guide-page-summary">DeepSeek-V4-Flash-0731 is a mixture-of-experts model that takes questions and code and generates text answers and code. The official vLLM example runs the full 304B checkpoint with expert parallelism on a single node containing four GB300 GPUs. This guide explains how to start a team code-review server and send it requests.</p><p>This recipe uses an internal tool that receives a changed function, its callers, and related tests from a team repository, then reports impact and files to inspect. First prepare the official server environment and checkpoint, verify one request at a 16K context, and then check local API streaming and an actual test-related answer.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>13B active describes computation per token; the full official checkpoint is 304B.</li><li>The official vLLM command uses 4×GB300 nodes, expert parallelism, and DSpark together.</li><li>First test one request with 127.0.0.1 local binding and a 16K starting context.</li></ol></section><section><h2>Separate what 13B active and 304B total describe</h2><p>DeepSeek-V4-Flash-0731 is a mixture-of-experts model, so selected expert paths take part in each token's computation. About 13B active describes the scale used per token, while the full official checkpoint is about 304B. The runtime needs access to the full set of weights that a request may select, so server loading requirements cannot be calculated from 13B alone.</p><p>The official vLLM example uses one 4×GB300 node and expert parallelism. Replacing its accelerators with four other cards does not reproduce the same environment. Check per-device memory and interconnect, required kernels, and runtime support against the example.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/glm-5.3-flash-serving-recipe">GLM-5.3-Flash Serving Guide: A 320B Server-Scale MoE Recipe</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Qwen3.6 35B-A3B setup: NVFP4 on Mac, RTX, and DGX Spark</a></li></ul></section><figure><img src="https://localai.co.kr/guides/deepseek-v4-flash-serving-recipe-scene-1.webp" alt="Small blocks and papers pass through a funnel into a large grid block, above four connected laptops" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate the roughly 13B path used per token from the full 304B checkpoint to prepare.</figcaption></figure><section><h2>Prepare the official server environment and start with 16K context</h2><p>The command sets data parallel size 4, expert parallelism, and DSpark speculative decoding. Data parallelism creates request-processing groups, while expert parallelism distributes the computation path for expert weights.</p><p>This combination does not replicate all weights four times. The options below are an example for this model and supported server software; use settings supported by the relevant engine if you switch runtimes.</p><p>Begin by checking a 16K context. After a short connection request succeeds, send the work input; this separates server loading issues from processing a longer input. One option allows code from the model repository to run, so review the repository and version first and confirm that the code path is approved by your organization.</p><div><p><strong>Official distributed serving with vLLM (multi-GPU server node)</strong></p><pre><code data-guide-code-block="1-0">vllm serve deepseek-ai/DeepSeek-V4-Flash-0731   --host 127.0.0.1   --port 8000   --trust-remote-code   --data-parallel-size 4   --enable-expert-parallel   --kv-cache-dtype fp8   --block-size 256   --moe-backend deep_gemm_mega_moe   --attention-config '{"use_fp4_indexer_cache": true}'   --speculative-config '{"method":"dspark","num_speculative_tokens":7,"draft_sample_method":"greedy"}'   --max-model-len 16384   --gpu-memory-utilization 0.90</code></pre><p><small>Run the official 4×GB300 vLLM and DSpark example with 16K context and 127.0.0.1 local binding.</small></p></div></section><section><h2>Check the local API connection and a real code question in sequence</h2><p>Once the server is ready, send a short streaming request first. Check that response chunks arrive and the request ends normally. The test below requests up to 512 tokens from the chat completion API at 127.0.0.1:8000.</p><p>After the connection works, provide the changed function, its callers, and related tests. Ask about the impact and files to check, then see whether the answer names the actual test files.</p><p>Record when the first token arrives and when the answer ends, together with the actual output-token count. For three repetitions of the same request, run a warm-up first and distinguish an initial input from one using a reused cache. If the request finishes but omits information, check that the changed function and tests were included and that the paths and file contents named by the model are correct.</p><p>With DSpark, compare the tokens that passed verification and appeared in the output, and the completion time, rather than the number of proposed candidates. Keep concurrent-team-request tests separate from single-request records. Overall throughput may rise while an individual user's first response or completion wait grows.</p><div><p><strong>Test local chat completion streaming</strong></p><pre><code data-guide-code-block="2-0">curl -N http://127.0.0.1:8000/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "messages": [
      {"role": "user", "content": "DeepSeek-V4-Flash 분산 서빙 테스트."}
    ],
    "max_tokens": 512,
    "stream": true
  }'</code></pre><p><small>Check whether streaming response chunks arrive from the 127.0.0.1:8000 API.</small></p></div></section><figure><img src="https://localai.co.kr/guides/deepseek-v4-flash-serving-recipe-scene-2.webp" alt="A marked long page leads into server compartments while a magnifying glass inspects a row of output blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record streaming chunks, actual output-token count, and response completion time together.</figcaption></figure><section><h2>Change the first check based on where execution fails</h2><p>If even a short request does not start, check server logs for checkpoint loading, distributed configuration, or kernel-compatibility errors. If short questions work but long inputs fail, record input token count, peak memory, and input length together. Return to 16K context and increase the input gradually to find where execution stops.</p><p>Do not rely only on total memory; inspect per-device use and the node with the error at the same point in time. Recording whether another process used an accelerator can help distinguish insufficient loading capacity from runtime contention. Expert-parallel work may be unevenly distributed, or KV cache may reach a limit on one node first.</p><p>If the request finishes but identifies the wrong test, first check the supplied file scope and evidence instead of changing the GPU configuration. If loading stops, return to the last working checkpoint and distributed settings. Change one condition at a time and resend the same reference question to narrow down the cause.</p></section><section><h2>Check the validated accelerators and kernels separately for the NVFP4 path</h2><p>The official validation target is B200. RTX and Spark require separate compatible kernels, and the DSpark head retains a separate precision. Keep these conditions distinct from the official serving command and check support in the runtime and kernel combination you plan to use for NVFP4.</p><ul><li><a href="https://huggingface.co/nvidia/DeepSeek-V4-Flash-0731-NVFP4">NVIDIA DeepSeek-V4-Flash-0731 NVFP4 repository</a></li></ul></section><section><h2>Decide whether direct operation solves a real need and fits your responsibilities</h2><p>Look for a reason to deploy in the work your current tools actually fail to handle, not in the model's size. Record results for reference questions that reveal whether a smaller model repeatedly misses change impact or whether concurrent team requests create a queue. If a smaller candidate is enough for one person's work, there is no need to provision a 4×GB300 server.</p><p>If you decide to operate the server, record checkpoint and runtime versions, per-GPU use, first-response and completion times for requests, and the configuration to restore after an error. Once functional checks pass, send the same kinds of questions concurrently and measure throughput separately from each user's wait to align hardware scale and maintenance burden with the real operating need.</p></section><figure><img src="https://localai.co.kr/guides/deepseek-v4-flash-serving-recipe-scene-3.webp" alt="Colored blocks enter a cabinet as lines from the opposite side converge on a yellow polyhedron held by a person" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Decide whether to operate the server from recurring work needs and the team's maintenance responsibilities.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody><tr><th scope="row">MBP M5 Pro 48GB (41GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">Studio M5 Ultra 256GB (236GB)</th><td>Experimental setup</td><td>Compression runtime verification required</td><td>Verification pending</td><td>4,096 tokens</td><td>112.5 ~ 125 tok/s</td></tr><tr><th scope="row">Studio M5 Ultra 512GB (480GB)</th><td>Experimental setup</td><td>Compression runtime verification required</td><td>Verification pending</td><td>4,096 tokens</td><td>112.5 ~ 125 tok/s</td></tr><tr><th scope="row">RTX 4090 24GB (22.5GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">2× RTX 3090 48GB (NVLink) (45GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">RTX PRO 6000 96GB (93GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">DGX Spark 128GB (116GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr><tr><th scope="row">Ryzen AI Max+ 395 128GB (96GB)</th><td>Exceeds memory (unsupported)</td><td>Unable to load</td><td>Verification pending</td><td>4,096 tokens</td><td>-</td></tr></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added saving and reopening hardware profiles</strong></p><p>Runnable profiles can now be saved with their hardware selection in this browser, up to five entries, and reopened from the guide directory. A notice prompts you to recheck before running if the published settings have changed or the profile is no longer available.</p></li><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added links to runtime explanations</strong></p><p>Engine names in the settings now link to the corresponding runtime guide. Paths without an identified engine are not linked to a guessed program.</p></li></ol></details><aside><h2>Try the DeepSeek-V4-Flash speed preview</h2><p>Review estimated prefill and decode ranges for a server-class multi-accelerator setup.</p><a href="https://localai.co.kr/en/speed?model=deepseek-v4-flash">See estimated speed</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>DeepSeek-V4-Flash-0731 is a mixture-of-experts model that takes questions and code and generates text answers and code. The official vLLM example runs the full 304B checkpoint with expert parallelism on a single node containing four GB300 GPUs. This guide explains how to start a team code-review server and send it requests.</dd></div><div><dt>How much memory does it need?</dt><dd>The official vLLM example uses one 4×GB300 node and expert parallelism. Replacing its accelerators with four other cards does not reproduce the same environment. Check per-device memory and interconnect, required kernels, and runtime support against the example.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Which local LLM app or serving engine should you start with?</title><link>https://localai.co.kr/en/guides/local-llm-serving-engines</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-llm-serving-engines</guid><description>Choose between Ollama, LM Studio, llama.cpp, oMLX, MTPLX, vLLM and SGLang for your hardware and workflow. Understand model files, single-response speed and concurrent requests.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Which local LLM app or serving engine should you start with?</h1><p>Choose a local LLM runtime by the task you need</p><p id="guide-page-summary">A local LLM runtime loads a model file and generates answers on your computer. Some tools provide a chat interface, while others offer an API server that an editor or document app can call.</p><p>After choosing a model, you still need to choose among tools such as Ollama, LM Studio, llama.cpp, oMLX, MTPLX, vLLM, and SGLang. Which performs better depends on model files, hardware, input length, and concurrency. In particular, one user's wait time and a server's ability to handle many requests cannot be ranked by the same measure.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Chat applications, inference engines, and client-facing APIs have different roles.</li><li>Do not assume Apple Silicon MLX files and llama.cpp GGUF files use interchangeable settings.</li><li>Measure single-answer latency and multi-request throughput separately.</li></ol></section><section><h2>Decide whether to start or change an existing setup</h2><p>If you have not run a local model yet, start with an Ollama or LM Studio guide. If you already use a model on Mac, check whether oMLX or MTPLX supports its file; also distinguish specialized runtimes such as Husky for Woof. A peak speed reported for another model cannot be applied as a multiplier to yours.</p><table><caption>Narrow the options by the features you need first.</caption><thead><tr><th scope="col">Tool</th><th scope="col">When to consider it</th><th scope="col">Prepare first</th></tr></thead><tbody><tr><th scope="row">Ollama</th><td>Managing models by name and connecting a local API</td><td>Supported model name and tag</td></tr><tr><th scope="row">LM Studio</th><td>Choosing a model and chatting in a graphical interface</td><td>A model file suitable for the hardware</td></tr><tr><th scope="row">llama.cpp</th><td>Managing GGUF files and server options directly</td><td>GGUF file and backend settings</td></tr><tr><th scope="row">oMLX</th><td>Managing MLX models and caching repeated inputs on a Mac</td><td>A supported MLX model</td></tr><tr><th scope="row">MTPLX</th><td>Using MTP with a supported model on a Mac</td><td>Model and MTP support requirements</td></tr><tr><th scope="row">vLLM·SGLang</th><td>Continuously serving requests from multiple apps or users</td><td>GPU, model format, and concurrency settings</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/husky-woof-apple-silicon-inference">Conditions behind Husky's 730 tok/s result</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">Run a local LLM for the first time</a></li><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><section><h2>Distinguish a document chat app from an API for other apps</h2><p>If you want to find a renewal date in a personal PDF, first choose an application that can open the file and accept questions. LM Studio makes it easy to inspect models and runtime status in a chat interface; Ollama makes it simple to manage models by name and connect a local API. PDF text extraction and retrieval of relevant passages are application features, not consequences of choosing an engine.</p><p>Include the date and exception in your question, then check the answer against the source document. See whether the app sends the supporting passage to the model and preserves its location. If that step is missing, a faster engine will not recover the missing source.</p><p>To use the same model from another program, check that the server responds and that the API address and port match the client settings. ‘OpenAI-compatible’ is a starting point; check separately that the client’s required features are supported.</p><ul><li><a href="https://localai.co.kr/en/guides/lm-studio-local-serving-guide">LM Studio interface and server connection</a></li><li><a href="https://localai.co.kr/en/guides/ollama-local-serving-guide">Start with Ollama and check runtime status</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-llm-serving-engines-scene-1.webp" alt="Green and blue paths branch from a central computer to two people viewing chat and document screens" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The right tool depends on whether you need a chat interface or model access from another application.</figcaption></figure><section><h2>On Mac, check the model file format first</h2><p>The same Qwen model name may refer to a GGUF file or an MLX conversion for Apple Silicon. Even if both are labeled 4-bit, their quantization methods and retained weights may differ. Check the model format first; changing the file and application together makes it hard to identify why results changed.</p><p>For MLX on Mac, consider oMLX or MTPLX. oMLX is relevant for model management and repeated-input caching; MTPLX is worth checking when a supported model includes MTP and may reduce generation wait. Compare the model format and supported features in each guide. If your current application already handles the PDF task, there is no need to install runtimes you will not test.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">oMLX model management and repeated-input caching</a></li><li><a href="https://localai.co.kr/en/guides/mtplx-mac-serving-guide">Check the effect of MTP with MTPLX</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-local-serving-guide">TensorFold models and Mac, RTX and Spark paths</a></li></ul></section><section><h2>Consider llama.cpp when you want direct control of runtime settings</h2><p>If you need to control the file alias, context length, GPU layers, or concurrent slots beyond application defaults, consider the llama.cpp server. You also take over model-file and option management normally handled by an application. Start with one GGUF file and a short question, then try the actual PDF to keep checks incremental.</p><p>Recording the file and options lets you compare whether a PDF causes memory pressure, delayed first output, or longer generation. If you intended to use a GPU, confirm the selected backend in the status screen or logs. A run on GPU versus one on CPU is not a like-for-like runtime comparison.</p><ul><li><a href="https://localai.co.kr/en/guides/llama-cpp-local-serving-guide">Start a llama.cpp server with one GGUF</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-llm-serving-engines-scene-2.webp" alt="Blocks inside an open computer connected by dotted lines to blocks on a desk, with a connection diagram in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Consider llama.cpp when you want to manage runtime settings directly.</figcaption></figure><section><h2>When requests queue, examine server scheduling</h2><p>For one person asking about a PDF, the start and completion time of a single answer matter. If an editor and document application call the server at once, one request may wait for another to finish. Then scheduling and aggregate throughput matter. vLLM and SGLang are worth considering for serving ongoing multi-request workloads; a personal chat use case does not need extra complexity merely because a runtime has more features.</p><p>With multiple GPUs, first decide whether to partition weights across devices or load replicas and route requests between them. The runtime and hardware connection must support the chosen path. DGX Spark uses ARM64, so do not assume installation commands for a standard PC apply unchanged. Use short examples to verify connectivity and device-specific guides for large-model formats and distributed settings.</p><ul><li><a href="https://localai.co.kr/en/guides/vllm-local-serving-guide">Single-answer speed and server throughput with vLLM</a></li><li><a href="https://localai.co.kr/en/guides/sglang-local-serving-guide">Repeated requests and model paths in SGLang</a></li></ul></section><section><h2>Compare using the same PDF before switching runtimes</h2><p>Give the current and candidate applications the same PDF, question, and output length; match model files and quantization where possible. Separate initial model loading from repeated-chat latency, and record first-open and reopened-document cases separately. Measure time to first token and time to completion independently, and check that the relevant clause and evidence remain in the answer.</p><p>Do not change PDF-grounded questions, short chat, and editor requests all at once. A faster model does not replace the workflow if it omits evidence or fails tool calls. For document chat, consider LM Studio or an Ollama-compatible application; for connecting other software, an API server; for direct runtime control, llama.cpp; and for sustained queues, vLLM or SGLang. Keeping a setup that already completes the work is also a valid choice.</p><ul><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B formats and commands by device</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-llm-serving-engines-scene-3.webp" alt="A small machine beside documents and a block tray connected to four organized rows of colored blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare the same task and answer quality before and after a runtime change.</figcaption></figure><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added a guide to choosing a runtime</strong></p><p>Added an article explaining the different roles of Ollama, LM Studio, llama.cpp, oMLX, MTPLX, vLLM and SGLang. It distinguishes chat apps from API servers and single-response latency from multi-request throughput, with links to each engine guide.</p></li></ol></details><aside><h2>Continue to hardware-specific settings</h2><p>Choose a device in the Qwen3.8-27B recipe to check the model format alongside the launch command.</p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM runtime loads a model file and generates answers on your computer. Some tools provide a chat interface, while others offer an API server that an editor or document app can call.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>MTPLX: will MTP make answers faster on your Mac?</title><link>https://localai.co.kr/en/guides/mtplx-mac-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mtplx-mac-serving-guide</guid><description>Install MTPLX on Apple Silicon, choose supported MLX models, tune MTP and connect a local API. Learn how MLX files differ from GGUF, and how to check memory shortages and cache effects.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">MTPLX: will MTP make answers faster on your Mac?</h1><p>Use MTP in MTPLX to reduce the time your Mac takes to finish an answer</p><p id="guide-page-summary">MTPLX is an app and server for running MLX models on Apple silicon. MTP proposes and verifies candidate next tokens to reduce parts of generation. Check for a compatible MLX checkpoint and MTP weights, then compare ordinary generation against the same request to see whether it helps.</p><p>If the frustrating wait in a long document review comes after the first token rather than before it, generation acceleration may be worth testing. MTPLX MTP mainly affects the later token-generation stage rather than input processing, so measure the two waits separately.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>MTPLX is an MLX app and server for Apple silicon; it does not run GGUF as-is.</li><li>MTP weights must match the model checkpoint.</li><li>Keep ordinary generation as a baseline and compare depth using the same request.</li></ol></section><section><h2>MTP proposes candidates for the main model to verify</h2><p>Ordinary generation chooses a token and then computes the next one in sequence. With MTP, prediction heads in the same model propose later candidates in advance, and the main model verifies them from the beginning of the candidate sequence. Accepted consecutive candidates can combine some work; if the first candidate diverges, later candidates are discarded and ordinary generation continues.</p><p>MTPLX MTP does not have a separate small draft model write the answer. Candidate generation and verification also consume computation, so speed gains may be small or disappear if too few candidates are accepted. Check whether the same request finishes sooner while preserving its content.</p><p>A slow first token may point to input processing or document retrieval. Reading a long contract PDF for the first time differs from generating a review memo after locating a clause. MTP mainly changes the later generation stage.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mtplx-mac-serving-guide-scene-1.webp" alt="Paper passing through a magnifying machine on a conveyor beside a laptop, with block trays" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The main model still verifies tokens proposed in advance.</figcaption></figure><section><h2>Check the installation environment and actual model files</h2><p>MTPLX requires Apple silicon and macOS 14 or later. For the terminal path, also check the Python and MLX runtime environment. If a model is missing after installation, inspect installation and the catalog before changing MTP depth.</p><p>Do not infer that MTP weights are included from the model-family name alone. Check architecture, base checkpoint, and prediction-weight compatibility in the current catalog. GGUF and MLX are different formats. Use the MLX checkpoint and matching MTP file documented by MTPLX rather than combining unrelated files.</p><div><p><strong>Install and start with Homebrew</strong></p><pre><code data-guide-code-block="1-0">brew install youssofal/mtplx/mtplx
mtplx start</code></pre><p><small>Terminal example for Apple silicon Macs. Models are downloaded separately, so check file size and memory headroom.</small></p></div></section><section><h2>Compare MTP depth with ordinary generation on the same request</h2><p>First create a baseline answer with MTP off on the same model. Fix retrieval method, input length, and answer size; record time to first token separately from completion time. Check that updated clauses and exceptions remain in the answer.</p><p>Then run mtplx tune to compare ordinary generation and MTP depth on the current Mac. Stop other servers that may load the same model and compete for memory, and keep the prompt and output length unchanged. Because tuning compares settings, retest with a normal-length request. Return to ordinary generation if greater depth brings no benefit.</p><p>If time to first token stays the same but completion time falls, the difference is in generation. If the first token also changes, check whether input preparation or cache state differed. If key details are missing, the two runs did not complete the same task.</p><div><p><strong>Retune MTP depth for the current model</strong></p><pre><code data-guide-code-block="2-0">mtplx tune --retune</code></pre><p><small>Select the model before running. Record the result with model, context, and fan mode.</small></p></div></section><figure><img src="https://localai.co.kr/guides/mtplx-mac-serving-guide-scene-2.webp" alt="A laptop with blocks and a vertical scale beside a blue flow from blocks to books and papers" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Compare MTP depth on your Mac using the same request.</figcaption></figure><section><h2>Connect the local API from an editor</h2><p>Once chat and MTP comparison work, connect the editor through MTPLX's OpenAI-style or Anthropic-style API. For same-Mac use, check that the server binds only to the local interface. Commands to 127.0.0.1 read health and model listing only; they do not test external network access or measure speed.</p><p>A model name in the list confirms the server responds. Separately test an answer from the editor and any required streaming or tool calls. If connection fails, align API format, server address and port, and model ID before redownloading model files.</p><div><p><strong>Check local server health and model list</strong></p><pre><code data-guide-code-block="3-0">curl --fail http://127.0.0.1:8000/health
curl --fail http://127.0.0.1:8000/v1/models</code></pre><p><small>Run after starting the server with mtplx start. Update the address if you changed the port.</small></p></div></section><section><h2>Narrow down errors by comparing with the baseline</h2><p>If answers stop midway or memory errors occur, do not increase depth; return to ordinary generation with the same input that worked. If ordinary generation works but MTP fails, disable MTP and check model/runtime compatibility. If both fail, reduce context and concurrency and inspect other apps' memory use and the checkpoint. Use mtplx doctor to inspect status.</p><p>If only the first token is slow, inspect prefill, retrieval, and session cache. Faster follow-up questions about the same PDF may reflect conversation-state reuse. This differs from moving an n-gram table to SSD, so identify which cache is active. Remove prompt text, local file paths, and credentials before sharing logs.</p></section><section><h2>Keep your current setup if oMLX already meets your needs</h2><p>If the same contract questions finish well and connections are convenient in oMLX or LM Studio, keep using them. Test MTPLX when you want to know whether MTP actually reduces completion time with a compatible checkpoint. Do not change model or quantization simultaneously; isolate file changes from the runtime difference.</p><p>Hardware-specific recipe figures apply to the model files and runtime stated in that guide. Do not treat them as MTPLX measurements; decide using results from your Mac on the same request.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Review oMLX model management and cache</a></li></ul></section><figure><img src="https://localai.co.kr/guides/mtplx-mac-serving-guide-scene-3.webp" alt="A monitor connected to a block cabinet, with colored cables leading to document bundles" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If your current app works well, compare runtimes on the same request.</figcaption></figure><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added MTPLX installation, tuning and API guidance</strong></p><p>Added a sequence from Homebrew installation and model selection through MTP-depth retuning and local API checks. It explains that MTP weights must match the main model and that existing recipe estimates are not measurements taken in MTPLX.</p></li></ol></details><aside><h2>Check model and memory requirements for Mac</h2><p>Distinguish the runtime in each hardware recipe from MTPLX.</p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>MTPLX is an app and server for running MLX models on Apple silicon. MTP proposes and verifies candidate next tokens to reduce parts of generation. Check for a compatible MLX checkpoint and MTP weights, then compare ordinary generation against the same request to see whether it helps.</dd></div><div><dt>How much memory does it need?</dt><dd>If answers stop midway or memory errors occur, do not increase depth; return to ordinary generation with the same input that worked. If ordinary generation works but MTP fails, disable MTP and check model/runtime compatibility. If both fail, reduce context and concurrency and inspect other apps' memory use and the checkpoint. Use mtplx doctor to inspect status.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ollama: connecting a model on your computer to other apps</title><link>https://localai.co.kr/en/guides/ollama-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ollama-local-serving-guide</guid><description>Check local models and app connections in Ollama, then test the prerelease MLX automatic-selection path on Apple Silicon. Separate connection problems from backend and speed issues.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Ollama: connecting a model on your computer to other apps</h1><p>Connect an Ollama model from your terminal to an editor</p><p id="guide-page-summary">Ollama lets you download a model to chat on your computer or let editors and document apps call it through a local API. With matching server addresses and model names, multiple apps can use the same model. We will work from a short connection request to an actual task.</p><p>If a model answers in the terminal but not in a code editor, first check whether the Ollama server is running and whether the editor's endpoint and model tag match; do not start by downloading the model again. Separating connection problems from runtime-path or speed questions avoids unnecessary reinstalls.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check the model tag and server address, then verify the API connection with a short request.</li><li>Ollama 0.40.0-rc0 is a preview that automatically uses the MLX path for some MLX-supported architectures on Apple Silicon.</li><li>The PROCESSOR field in ollama ps reports CPU/GPU placement; it does not directly prove MLX use or GPU utilization.</li></ol></section><section><h2>Check the server and model tag with a short request</h2><p>If Ollama is already running, use that server rather than starting a second one. For a new setup, install the official build and download a small model. Check its exact tag with ollama list; a model in the list is not necessarily loaded in memory.</p><p>The example below sends a short request for a JSON response using qwen3.5:0.8b, checking address, port, and model selection. If you use another model, use the tag shown by ollama list in both pull and the request body. A response verifies connectivity, but editor tool calls, long contexts, and image inputs need separate tests.</p><div><p><strong>Check installed models and a short response</strong></p><pre><code data-guide-code-block="0-0">ollama --version
ollama pull qwen3.5:0.8b
ollama list
curl -sS http://127.0.0.1:11434/api/chat -H 'Content-Type: application/json' -d '{"model":"qwen3.5:0.8b","messages":[{"role":"user","content":"Reply with one short sentence."}],"stream":false,"options":{"num_ctx":4096,"num_predict":128}}'</code></pre><p><small>This verifies connectivity, not speed. If you already have a model, replace the tag in pull and the JSON model field with the exact value from ollama list.</small></p></div><ul><li><a href="https://localai.co.kr/en/guides/local-llm-start">Local LLM basics, setup and model selection</a></li><li><a href="https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide">What is Crane? Run LLM, OCR and audio models behind a local Rust API</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-1.webp" alt="A laptop model connected to a central Ollama server receiving requests from three apps" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A terminal response does not configure the editor's address or request format.</figcaption></figure><section><h2>MLX auto-selection on Apple Silicon is an RC preview feature</h2><p>Ollama v0.40.0-rc0 release notes dated September 25, 2026 say that model architectures supported by the MLX runtime on Apple Silicon run automatically through MLX. This refers to supported architectures, not every model and tag. The release said additional models would be validated and enabled during the preview, so a model listing alone does not show that the new path was used.</p><p>Distinguish this from separate features such as /v1/systemone in stable 0.35.0. After requesting a model on the RC, check whether logs identify the selected runner/backend as MLX. The PROCESSOR field in ollama ps shows model placement across CPU and GPU; it is not an MLX-backend indicator. If logs do not identify the path, do not infer MLX selection from speed alone.</p><p>oMLX is another Mac application/server based on MLX. Model downloads, conversions and tags, caching, and server settings may differ from Ollama. Confirm that both runtimes load the same actual conversion; if not, record file and quantization differences in the comparison.</p></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-2.webp" alt="Connections extending from a server with memory modules to a laptop, tablet, and terminal screen" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First check whether Ollama's 127.0.0.1 server is running on the same computer.</figcaption></figure><section><h2>Compare stable Ollama, the RC, and oMLX on equal terms</h2><p>Record the Mac model, macOS version, base-model revision, file, and quantization. If all three runtimes can load the same file, use it; if conversion is necessary, note its source and quantization. Keep prompt, context length, and generation limit fixed, and compare stable Ollama, 0.40.0-rc0, and oMLX as separate runs.</p><p>Do not mix initial loading with requests to an already loaded model. After a warm-up in each runtime, send the same input at least three times and record time to first token separately from generation speed. Single-request latency and multi-request throughput are also different metrics. If the RC is faster, check whether backend logs and controlled conditions support the explanation; do not generalize one setup into a universal multiplier.</p><table><caption>Conditions to hold constant or separate between runtimes</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Condition</th><th scope="col">Record</th></tr></thead><tbody><tr><th scope="row">Model file</th><td>Base revision, conversion, quantization</td><td>Whether the file conditions match</td></tr><tr><th scope="row">Request</th><td>Input, context, generation limit</td><td>Time to first token and generation</td></tr><tr><th scope="row">Cache state</th><td>Initial cold load versus loaded warm</td><td>Whether load time recurs</td></tr><tr><th scope="row">Runtime</th><td>Stable Ollama, RC, and oMLX logs</td><td>Selected runner/backend</td></tr><tr><th scope="row">Repetitions</th><td>At least three identical requests after warm-up</td><td>Median and output differences</td></tr></tbody></table></section><section><h2>Locate failures in connection, loading, or runtime selection</h2><p>If connection fails, check ollama --version, server address 127.0.0.1:11434, and model tag. The app and terminal may point to different servers, or the configured name may be a cloud model. If a short /api/chat request also fails, fix the server and request format before investigating MLX.</p><p>If only a particular model fails to load, check its exact tag and the runtime's architecture support. The RC's MLX path is under test, so do not assume a model that works on stable uses the same runner. Record MLX initialization or load errors with the Ollama version. Do not start by deleting downloaded files with ollama rm unless corruption is confirmed.</p><p>CPU/GPU placement in ollama ps and backend logs are different evidence. Distinguish a partial CPU placement caused by limited memory from a different runtime path because the architecture is not MLX-supported.</p></section><figure><img src="https://localai.co.kr/guides/ollama-local-serving-guide-scene-3.webp" alt="A server with components beside separate modules and a notebook of diagnostic checks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Diagnose connection, CPU/GPU placement, and long-input latency as separate issues.</figcaption></figure><section><h2>Choose the runtime for your workload and record its version</h2><p>If the current model and text requests work in your editor, you can stay on stable Ollama. Consider 0.40.0-rc0 when the target model uses an MLX-supported architecture, logs confirm the automatic path, and the same workload shows a meaningful difference. When comparing with oMLX, consider model support, client connection, sustained serving, concurrency, and memory rather than peak speed claims.</p><p>Use the official release and API documentation to check install builds, support scope, and current versions. Record the selected runner, cold versus warm state, repeated latency, and answer quality for each runtime so you can compare after updates. Do not generalize a performance multiplier beyond the measured setup.</p><ul><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">oMLX Mac server settings and comparison conditions</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">Differences between GGUF and MLX model files</a></li><li><a href="https://github.com/ollama/ollama/releases/tag/v0.40.0-rc0">Official Ollama v0.40.0-rc0 release</a></li><li><a href="https://ollama.com/download">Official Ollama download and installation</a></li><li><a href="https://docs.ollama.com/api">Official Ollama API documentation</a></li></ul></section><section><h2>Update to 0.40.1 if Clef fails to load on Windows</h2><p>Ollama 0.40.1 fixes a Windows Clef-head read problem beyond the 2 GiB boundary. It also avoids symlinks in Windows model manifests. If Clef stops while loading on Windows, update the app and try again.</p><p>After updating, open a new terminal, run `ollama --version` and check for 0.40.1 or later. As of October 9, 2026, 0.40.2 is a prerelease, so routine installation follows stable 0.40.1. Check the app version and first error message before deleting model files to avoid unnecessary downloads.</p><ul><li><a href="https://github.com/ollama/ollama/releases/tag/v0.40.1">Ollama 0.40.1 fixes</a></li><li><a href="https://github.com/ollama/ollama/pull/18777">Windows Clef read fix</a></li></ul></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added Ollama local-serving and status-check guidance</strong></p><p>Added examples for starting a local-model server and sending a short API request. It covers checking where the model runs and its context settings, and explains why a request's completion time is not a first-token measurement.</p></li></ol></details><aside><h2>Explore the oMLX execution path</h2><p>Compare your Mac's model and server conditions with Ollama.</p><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Ollama lets you download a model to chat on your computer or let editors and document apps call it through a local API. With matching server addresses and model names, multiple apps can use the same model. We will work from a short connection request to an actual task.</dd></div><div><dt>How much memory does it need?</dt><dd>If Ollama is already running, use that server rather than starting a second one. For a new setup, install the official build and download a small model. Check its exact tag with ollama list; a model in the list is not necessarily loaded in memory.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LM Studio guide: download a model and start chatting</title><link>https://localai.co.kr/en/guides/lm-studio-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lm-studio-local-serving-guide</guid><description>Follow model search, download, loading and chat in LM Studio, with GGUF/MLX choices, memory checks, troubleshooting and API integration.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">LM Studio guide: download a model and start chatting</h1><p>Connect an LM Studio chat model to your own application</p><p id="guide-page-summary">LM Studio is a desktop app for finding and downloading models to chat on your computer. Starting its API server lets an editor or your own program call the same model. We will cover starting a chat and connecting another app.</p><p>If the interface answers questions about a document but the same model called through the API does not know it, the model may be unchanged while the interface's document retrieval and request assembly are missing. Check server connectivity and document input as separate stages.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Load GGUF and Apple Silicon MLX files through their compatible runtime paths.</li><li>A memory estimate is a reference, not a substitute for observing actual loading.</li><li>A document attached in the interface is not automatically included in an API request.</li></ol></section><section><h2>Find and load a model, then start with a short chat</h2><p>Use the LM Studio search screen to choose a small multilingual model, checking its file size and the application's fit information. Memory use varies with model size, quantization, and format. After downloading, load the file from the model selector in the chat screen before sending a prompt.</p><p>Request a short sentence correction to check the response. Then ask about a known item, such as an address in an installation guide, and compare with the source. Increasing the input from short chat to document questions lets you check responses, document processing, and memory in sequence.</p><ul><li><a href="https://lmstudio.ai/download">LM Studio installer</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-start">Choose a PC and first model</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/crane-rust-local-ai-serving-guide">What is Crane? Run LLM, OCR and audio models behind a local Rust API</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/lm-studio-local-serving-guide-scene-1.webp" alt="A dashed line from an open server and colored block drawers leads to a window diagram while a hand draws the same connection in a notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Documents attached in the interface are not automatically included in API requests.</figcaption></figure><section><h2>Match the operating system to GGUF or MLX format</h2><p>LM Studio supports llama.cpp-based GGUF and MLX execution on Apple Silicon Mac. Two distributions with the same model name are not interchangeable files; choose for the OS and actual runtime, and record model revision, quantization, context, and engine. Renaming an extension does not convert the format.</p><p>Current requirements specify Apple Silicon and macOS 14 or later on Mac; Intel Mac is unsupported. On Windows x64, check AVX2 support. Application installation requirements differ from the memory needed for a model and long documents. If loading fails, check model size, available memory, app/engine version, and file format.</p></section><section><h2>Test memory estimates, model loading, and document input separately</h2><p>The CLI option lms load --estimate-only estimates memory without loading the model, but it does not guarantee usage in other applications or runtime behavior. First load the model with a short context and confirm basic chat, then add the required document input. Estimation, actual loading, and document processing are separate stages.</p><p>The example starts a server with the alias local-guide and a 4,096-token context. Send a short prompt first, then increase context only when the actual task requires it. This helps distinguish model-loading failure from document text missing in the API request.</p><p>Running `lms load` opens a selection of downloaded models. Choose the file and wait for loading to finish. You can inspect the files first with `lms ls`. The command assigns the API alias `local-guide` to the selected model; use that alias in the next request.</p><div><p><strong>Set a model alias and start the server</strong></p><pre><code data-guide-code-block="2-0">lms ls
lms load --context-length 4096 --identifier local-guide
lms server start --bind 127.0.0.1 --port 1234</code></pre><p><small>Run in an environment with LM Studio and lms ready. Start the server after selecting the model; do not start a duplicate if one is already running.</small></p></div></section><figure><img src="https://localai.co.kr/guides/lm-studio-local-serving-guide-scene-2.webp" alt="A laptop and monitor display blocks of different heights, with one group linked to a vertical server scale" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After estimating memory, test actual loading with a short context.</figcaption></figure><section><h2>Check the API address and model alias with curl</h2><p>Start the server and send the request below. local-guide is the API alias from the previous step, not a filename. Both curl and the client should use 127.0.0.1:1234 and a supported API path. A returned sentence confirms model selection and server connectivity, but does not mean the guide attached in the interface was sent to the API.</p><p>If authentication is enabled, include its token in the request header. Use 127.0.0.1 for testing on the same computer; do not expose the server to the network or enable CORS as a diagnostic shortcut. Missing document content is not fixed by changing the address or CORS.</p><p>Send the same short text question in the interface and through the API. If both behave similarly but document questions differ, check whether the API input omitted document content. If even short questions differ, inspect the model alias, chat template, and generation settings.</p><div><p><strong>Check a response using the API alias</strong></p><pre><code data-guide-code-block="3-0">curl -sS http://127.0.0.1:1234/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"local-guide","messages":[{"role":"user","content":"Reply with one short sentence."}],"max_tokens":128,"stream":false}'</code></pre><p><small>This checks a local server without authentication. It returns the completed answer at once, so it is not for measuring time to first token.</small></p></div></section><section><h2>Include document content in requests from your API client</h2><p>If API answers about the guide are wrong, check whether the application actually included the document in its request. Short material can be included directly; longer material may need retrieval of relevant passages. Processing triggered by attaching a file in the interface is not automatically carried over to API calls.</p><p>To investigate, include a sentence you already know from the guide directly in the API request and ask about it. If the model answers from that sentence, the model and API are processing text. If results differ only when you attach the file in the UI, check how the app retrieves document text and adds it to the API request.</p><p>If the answer format is still wrong with the text included directly, compare the model file, chat template, and generation settings. This test diagnoses the path used in this case; it does not measure general document-retrieval accuracy.</p><p>Test tool use separately from ordinary chat. Receiving a request, generating a tool-call format, executing the call in the application, and returning its result to the model are separate stages. After plain chat, add one needed tool, then connect the document task to isolate the failing boundary.</p></section><section><h2>When the server must keep running without the app interface</h2><p>If the API server must keep running after closing the application interface, consider LM Studio's separate llmster daemon. Using an API alone does not require switching products. A daemon needs its own startup, update, and restart-recovery plan, so a GUI may be simpler for short tasks that you supervise directly.</p><p>Before comparing acceleration or file support in another engine, record the model file, runtime, context, and request that produced the current answer. If including document content in the API solves the task, you can keep LM Studio. If retrieval/insertion is missing, improve the client; consider changing runtimes only when the current engine lacks a needed format or acceleration.</p></section><figure><img src="https://localai.co.kr/guides/lm-studio-local-serving-guide-scene-3.webp" alt="A server beside a small hub plugged into a wall outlet, with dotted lines connecting blocks, illustrated paper, and a box" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A headless daemon also needs a startup, update, and restart-recovery plan.</figcaption></figure><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added LM Studio model-loading and API guidance</strong></p><p>Added examples that set a context length and identifier when loading a model, then use the same name in a local API request. It distinguishes MLX and GGUF paths and explains that documents added in the app are not automatically included in API requests.</p></li></ol></details><aside><h2>Check the execution requirements for Qwen3.8 27B</h2><p>Once you choose a model, check its files and context settings for each device.</p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LM Studio is a desktop app for finding and downloading models to chat on your computer. Starting its API server lets an editor or your own program call the same model. We will cover starting a chat and connecting another app.</dd></div><div><dt>How much memory does it need?</dt><dd>The CLI option lms load --estimate-only estimates memory without loading the model, but it does not guarantee usage in other applications or runtime behavior. First load the model with a short context and confirm basic chat, then add the required document input. Estimation, actual loading, and document processing are separate stages.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>llama.cpp: finding which settings are slowing you down</title><link>https://localai.co.kr/en/guides/llama-cpp-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/llama-cpp-local-serving-guide</guid><description>Choose a GGUF file and GPU backend for llama.cpp, start a local llama-server, then check memory, prefill and decode separately.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">llama.cpp: finding which settings are slowing you down</h1><p>Use llama.cpp to pin files and settings and locate slow stages</p><p id="guide-page-summary">llama.cpp runs GGUF models, and llama-server accepts HTTP requests. Direct use lets you record and change the backend, context, GPU placement, and concurrency. Keeping the model and request fixed while checking connectivity, prefill for long input, and answer decoding separately helps determine whether tuning is needed.</p><p>Consider llama.cpp when you want direct control of GPU placement or context length that your app does not expose. Starting a server with a fixed file and request helps you decide what to adjust across loading, input processing, and generation. You also manage binaries and updates yourself, so keep your app if it already offers the settings you need.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Check whether the current build supports the model architecture, not just the GGUF file.</li><li>Confirm the GPU backend and actual placement before tuning settings.</li><li>Compare single-request latency and multi-request throughput separately.</li></ol></section><section><h2>Create a baseline with one model and request</h2><p>For summarizing a long technical memo, keep the GGUF file and request fixed. Check the server response with a short request, then submit the whole memo. Separating input processing from answer generation shows where you wait.</p><p>Direct execution also means managing the executable, drivers, updates, and commands. That effort is useful when you need conditions unavailable in an application or must reproduce a build-specific issue.</p><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/llama-cpp-local-serving-guide-scene-1.webp" alt="Two people at control panels and laptops on either side of a central server, with colored lines and blocks connected from it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Direct execution makes files and settings easier to record, but builds and updates also need management.</figcaption></figure><section><h2>Check executable and model support even when a GPU is visible</h2><p>Low GPU utilization alone does not indicate a faulty card. A CPU-only executable will not use a GPU backend even when a GPU is present. NVIDIA CUDA, Apple Silicon Metal, and Vulkan have different setup paths. Check detected devices and selected backend in startup logs; changing placement options cannot enable an undetected backend.</p><p>GGUF is a distribution format, not a guarantee that every build supports every model architecture. For a new architecture, check executable support and the conversion's source model. If you need image input, separately verify multimodal implementation and required files; a text GGUF alone does not provide an image path.</p></section><section><h2>Start the server with a model path and baseline settings</h2><p>After preparing a model file, replace ./models/model.gguf with its actual path. The local-guide alias, 4,096 context budget, and one parallel slot are baseline comparison settings. Context is shared by input and generated output, so 4,096 does not mean the full budget can be used for the memo input. Separate first-load time from subsequent requests.</p><p>Start GPU-layer placement at auto and inspect logs and per-GPU memory for actual placement. An auto option does not mean the entire model is on GPU. If the executable differs from expectations, check its version and --help, then save the smallest working command and its logs. A command with unsupported options removed is not the same condition as the original example.</p><p>Record the GGUF filename and quantization, executable version, backend, 4,096 context, and one slot. Keep the model and runtime conditions fixed so you can change batch or GPU placement one item at a time.</p><div><p><strong>Start a local server with a GGUF model</strong></p><pre><code data-guide-code-block="2-0">llama-server -m ./models/model.gguf --alias local-guide --host 127.0.0.1 --port 8080 --ctx-size 4096 --parallel 1 --n-gpu-layers auto</code></pre><p><small>This assumes the executable is on PATH. If self-built, adjust its path and check the GGUF location and that build's --help.</small></p></div></section><figure><img src="https://localai.co.kr/guides/llama-cpp-local-serving-guide-scene-2.webp" alt="A green book with an animal illustration connected by an arrow to a yellow book with a speech bubble, in front of a landscape display" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Fix the model and request to compare the effect of later setting changes.</figcaption></figure><section><h2>Check readiness and API generation separately</h2><p>After the server process starts, check that /health reports readiness and send a short prompt. The first command checks status; the second requests text generation. Verify the alias and basic connection before submitting the full memo to isolate load and connectivity issues.</p><p>An API success does not verify that a client-specific template or tool-calling format works. The curl request below waits for the full response, so it can show round-trip time but does not measure time to first token or prefill and decode separately.</p><div><p><strong>Check server readiness and answer separately</strong></p><pre><code data-guide-code-block="3-0">curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"local-guide","messages":[{"role":"user","content":"Reply with one short sentence."}],"max_tokens":128,"stream":false}'</code></pre><p><small>Keep the server terminal running and use another terminal. Check readiness before requesting generation.</small></p></div></section><section><h2>Separate prefill, decode, and concurrent requests</h2><p>If the first answer is delayed after a long memo, prefill may be responsible; if tokens arrive slowly after generation starts, inspect decode. Long input also uses more context memory, so compare against the 4,096-context baseline and check GPU headroom and KV cache.</p><p>Increasing prefill batch may help long-input processing, but it does not imply decode speeds up by the same factor. Increasing concurrency can affect aggregate throughput without reducing one user's completion time. For individual summaries, keep one slot as the baseline and change only the relevant batch, context, or GPU-placement setting indicated by logs.</p><p>For comparisons, keep the GGUF file and quantization, input and output lengths, backend, and concurrent request count fixed. After a warm-up run, send the same request at least three times and record whether the model is resident and whether the KV cache is reused.</p><p>A run is not a cold start if you could not clear the cache. If one result is an outlier, keep it and check warm-up state and background load before summarizing with the median.</p><p>A curl request that waits for the full answer measures round-trip time; it is not a benchmark that separates prefill and decode. Once the target task completes reliably, decide whether direct management provides enough benefit. If Ollama or LM Studio offers the needed options, you can keep using it.</p></section><figure><img src="https://localai.co.kr/guides/llama-cpp-local-serving-guide-scene-3.webp" alt="A hand places a yellow block on a path-shaped board while a magnifying glass enlarges a red route between blocks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Find the slow stage between input processing and generation, then change only related settings.</figcaption></figure><section><h2>Using quantized KV caches for long contexts on Vulkan</h2><p>llama.cpp b11413 improves the Vulkan execution path for some long-context models. It targets sparse-attention architectures such as QSA in Qwen3.8-Flash-Next, which select only needed positions. With quantized K/V caches, the new path reads those selected positions instead of processing the entire context.</p><p>The PR author's Radeon R9700 and RX 7900 XT measurements report average decode improvements of 19% at 64K and 15% at 128K with q8_0 KV caches. Shorter contexts can have little benefit or regress, so the runtime selects the path. These figures do not apply to f16 caches or prefill. Use the following command after preparing a Vulkan build and a compatible model.</p><div><p><strong>Set cache types in an existing Vulkan server command</strong></p><pre><code data-guide-code-block="5-0">./llama-server -m /path/to/compatible-sparse-model.gguf --host 127.0.0.1 --flash-attn on --cache-type-k q8_0 --cache-type-v q8_0 --ctx-size 65536</code></pre><p><small>Compare with a compatible sparse model and a sufficiently long context. Adjust the model path and context size to available memory.</small></p></div><ul><li><a href="https://github.com/ggml-org/llama.cpp/releases/tag/b11413">b11413 release notes</a></li><li><a href="https://github.com/ggml-org/llama.cpp/pull/29639">PR #29639 implementation, measurements, and hardware conditions</a></li><li><a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">llama-server Flash Attention and KV cache options</a></li></ul></section><section><h2>Version 0.6.0 also serves local decision models</h2><p>Released on October 5, 2026, llama.cpp 0.6.0 adds `/v1/systemone`, an API that returns decisions and probabilities. It can route inquiries to teams or classify documents. The [local decision-model example](/guides/qwen-local-jev-projects) explains how to select a supported model and send the input and options. [Official 0.6.0 release](https://github.com/ggml-org/llama.cpp/releases/tag/v0.6.0)</p><p>Performance-related changes include Qwen4Exp MTP, Metal Flash Attention for F16 KV, and CUDA NVFP4/MXFP4 computation paths. Compare the old and new versions using the same question and a feature supported by your model. Existing speed records retain the version used for their measurement so they can be compared with new records.</p></section><section><h2>October 8 builds improve MoE caching and DFlash</h2><p>Starting with llama.cpp b11507, MoE expert weights kept on the CPU can be cached across multiple GPUs. The cache reduces repeated transfers of needed experts to the GPU. It is worth testing when a large MoE model is split between system RAM and GPUs.</p><p>The current `--moe-cache-mib` specifies the total cache budget in MiB, distributed across GPUs according to `--tensor-split`. It is disabled by default with a value of zero. Check for the flag in `llama-server --help`, then compare both first-token wait and decode speed on the same document with and without the cache.</p><p>Build b11512 also fixes DFlash output-head sharing. When updating a DFlash setup, keep the main and draft models unchanged, send the same input and check that generation completes. b11507 and b11512 are October 8 rolling builds, a separate update series from the fixed 0.6.0 release.</p><ul><li><a href="https://github.com/ggml-org/llama.cpp/releases/tag/b11507">b11507 release</a></li><li><a href="https://github.com/ggml-org/llama.cpp/pull/30112">Multi-GPU MoE cache implementation</a></li><li><a href="https://github.com/ggml-org/llama.cpp/pull/30111">DFlash output-head fix</a></li></ul></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added llama.cpp server-start and recovery guidance</strong></p><p>Added examples for starting a server with a prepared GGUF file and checking its local API. It explains how to change GPU offloading, context length and request count one at a time, then return to a working configuration if memory runs short.</p></li></ol></details><aside><h2>Continue to Qwen3.6 35B A3B settings</h2><p>After checking the server, review model-specific files, acceleration support and memory requirements.</p><a href="https://localai.co.kr/en/guides/qwen-3.6-35b-a3b-serving-recipe">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>llama.cpp runs GGUF models, and llama-server accepts HTTP requests. Direct use lets you record and change the backend, context, GPU placement, and concurrency. Keeping the model and request fixed while checking connectivity, prefill for long input, and answer decoding separately helps determine whether tuning is needed.</dd></div><div><dt>How much memory does it need?</dt><dd>If the first answer is delayed after a long memo, prefill may be responsible; if tokens arrive slowly after generation starts, inspect decode. Long input also uses more context memory, so compare against the 4,096-context baseline and check GPU headroom and KV cache.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</title><link>https://localai.co.kr/en/guides/omlx-mac-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/omlx-mac-serving-guide</guid><description>Run models on a Mac with oMLX and connect them to an API client. Covers 0.7.1rc1, Splash integration, model settings, Muse Spark Open support and choosing a release.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</h1><p>Connect Splash and choose per-model runtime settings in oMLX 0.7.1rc1.</p><p id="guide-page-summary">oMLX runs MLX models on Apple Silicon Macs and answers requests from apps. Release candidate 0.7.1rc1 adds the Splash external engine and Muse Spark Open support. The earlier 0.7.1.dev1 measurements below describe that development release; test new features with your chosen model and identical inputs.</p><p>Even if you are familiar with the existing 0.7.0 server, check the model list, first response, and logs again after updating. In particular, request handling can behave differently in a personal chat UI and on an app server with overlapping requests. The sections below help you decide whether to keep the stable setup, which development-build features to test, and what to measure.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Version 0.7.1.dev1 is a development release published on October 9, 2026; 0.7.0 is the stable release.</li><li>When several requests process their inputs at the same time, prefill chunks are grouped into one forward pass. This benefit does not carry over unchanged to a workload that sends one request at a time.</li><li>Published speed figures compare against the code immediately before each change. Results vary with the model, Mac, input, and number of concurrent requests.</li><li>Updating a source installation may cause existing kernels to be rejected, so run `make kernels` again.</li></ol></section><section><h2>First decide whether your setup needs 0.7.1.dev1</h2><p>The stable version is 0.7.0, while 0.7.1rc1 is a release candidate for testing new features. Earlier 0.7.1.dev1 changes and reproduction steps are retained below. Check the version in the admin UI or with `omlx --version`, and separately identify whether you installed the DMG app or from source. Update the app using a new bundle; for source installs, match that version’s dependencies and kernels.</p><p>oMLX runs MLX checkpoints, not GGUF files. It works on Apple Silicon Macs with macOS 15 or later. For a new installation, download the macOS DMG from the official Releases page, open it, move oMLX to the Applications folder, and launch it. Choose a model folder on the welcome screen, start the server, and download a compatible MLX checkpoint. Also check that the model format and quantization fit the Mac's unified memory.</p><p>When the server is running, open the management UI at `http://localhost:8000/admin` and the chat UI at `http://localhost:8000/admin/chat`. Send a short question first to confirm that the model responds. If you are testing the development build, record your existing API connections and model folder so you can compare them with the previous setup.</p><p>After confirming a model response with a short question in the UI, check the basic API connection before moving on to performance comparisons. Replace `YOUR_OMLX_API_KEY` with the key configured in the management UI.</p><div><p><strong>Check server status and model list</strong></p><pre><code data-guide-code-block="0-0">curl http://127.0.0.1:8000/health
curl http://127.0.0.1:8000/v1/models -H 'Authorization: Bearer YOUR_OMLX_API_KEY'</code></pre><p><small>Include the API key set in the management UI when requesting the model list.</small></p></div><p>A healthy response from `/health` and a usable model ID from `/v1/models` confirm that the server and API authentication are ready. If the connection fails, first check that the server is running. If the model-list request returns 401, verify the key. If the list is empty, check the model folder and checkpoint download status.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Official oMLX 0.7.1.dev1 release</a></li><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.0">Stable oMLX 0.7.0 release</a></li><li><a href="https://github.com/jundot/omlx#install">oMLX installation guide</a></li><li><a href="https://localai.co.kr/en/hardware/mac-studio-m3-ultra-512gb">Mac Studio M3 Ultra 512GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/vllm-metal-0-30-serving-guide">vLLM Metal 0.30: turn one Mac into a multi-user local AI server</a></li><li><a href="https://localai.co.kr/en/guides/flashattention-pagedattention">FlashAttention vs PagedAttention: what each one changes</a></li></ul></section><figure><img src="https://localai.co.kr/guides/omlx-mac-serving-guide-scene-1.webp" alt="A folder of colored blocks on a laptop screen, with a filing cabinet, box, and magnifying glass beside it" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check the MLX files and required supporting files that oMLX reads, not just the model name.</figcaption></figure><section><h2>Choose the inference engine per model in 0.7.1rc1</h2><p>Version 0.7.1rc1, published October 15, 2026, is a release candidate. The stable release is 0.7.0; choose rc1 to test the new features. Record your models and settings before updating so you can return to the stable release with the same model if needed.</p><p>You can run Qwen3.8 or Qwen3.6 through Splash while keeping model management and the API address in oMLX. Select the installed Splash launcher in Settings → Integrations → External engines, then enable Use external engine in the model’s Model Settings → Advanced. Place the matching DFlash2 draft in an oMLX model directory too.</p><p>Muse Spark Open is newly supported as well. The 370 GB oQ3e build targets a 512 GB Mac; select the model first, then budget unified memory and room for other apps. The updated downloader recommends models that can load on your Mac.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1rc1">oMLX 0.7.1rc1 release notes</a></li><li><a href="https://localai.co.kr/en/guides/muse-spark-open-mac-guide">Muse Spark Open memory and speed on Mac</a></li><li><a href="https://localai.co.kr/en/guides/splash-mac-qwen38-neural-engine-guide">Connect the Splash external engine</a></li></ul></section><section><h2>For a server handling concurrent requests, start with the prefill changes</h2><p>Prefill is the stage where a model reads a question and documents to prepare its first response. In 0.7.1.dev1, batched prefill combines chunks from multiple requests that begin input processing at similar times into one forward pass. It reduces repeated reads of MoE expert weights across requests while keeping each request's cache separate. No new setting is needed. This change is relevant on a server where requests from several users overlap.</p><p>The release table separates requests sent at once, requests spaced apart, and new requests joining ones that are already generating. When requests overlap, the next input can be prefilled alongside ongoing generation, so the effect is most relevant to first-token wait rather than single-request decode speed. Read the three patterns and hardware results in the table against your own request pattern.</p><p>On a personal Mac, first check whether requests actually overlap. Send the same prompt alone, then send overlapping requests and record first-token time and total completion time separately. Keep the model file, context, answer length, and number of concurrent requests the same. If even a single request has a slow first response, check input length, model loading, and memory state before focusing on batched-prefill results.</p><table><caption>Concurrent-prefill TTFT comparisons published in the release</caption><thead><tr><th scope="col">Model and hardware</th><th scope="col">Request pattern</th><th scope="col">Before → after</th></tr></thead><tbody><tr><th scope="row">Qwen3.8-Flash-Next oQ4e · M5 Max</th><td>8 concurrent</td><td>2.08 to 1.81 seconds (-13%)</td></tr><tr><th scope="row">Qwen3.8-Flash-Next oQ4e · M5 Max</th><td>8 requests, 0.4-second intervals</td><td>7.41 to 5.75 seconds (-22%)</td></tr><tr><th scope="row">Qwen3.8-27B oQ4e · M3 Ultra</th><td>4 new requests joining 4 generating</td><td>6.11 to 5.10 seconds (-17%)</td></tr></tbody></table><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Measurement conditions and full comparison table</a></li></ul></section><section><h2>Choose Qwen optimizations and MTP for the model</h2><p>The group-size-32 Qwen3.8-Flash-Next checkpoint optimizes the decode path. A separate MTP-on comparison on M3 Ultra measured 98 to 134 tok/s (+37%). The Flash-Next row in the table is the MTP-off measurement.</p><p>INT8 activation prefill for Qwen3.8-27B oQ8e applies to the prefill stage that reads long inputs. On an M5 Max, the reported result for 4K input was +25%; the 16K condition is in the table. Enable it for models that show this option under Experimental Features, then record first-token wait for a long document separately from generation speed.</p><p>Lightning MTP uses the model's next-token prediction head to propose candidates for verification by the main model, reducing sequential decode steps. The model families and file-editing conditions tested in the release are listed in the table. Enable it on a supported checkpoint, then compare completion time and output with standard generation on the same request.</p><p>The same release reports +31% decode for Qwen3.6-35B-A3B (M5 Max), +30% decode for GLM-5.3-Flash (M3 Ultra), and +48% on first run for DeepSeek V4.1 Flash (M3 Ultra). Match the stage and chip when reading each result, and keep those conditions in your test notes.</p><p>To try Qwen3.8-27B in another runtime, check the files and context length in TensorFold's Mac memory update. Use the same input and record memory use, time to the first reply and completion time.</p><table><caption>Reported changes against the code immediately before each update, across different stages and models</caption><thead><tr><th scope="col">Feature and model</th><th scope="col">Conditions and hardware</th><th scope="col">Published result</th></tr></thead><tbody><tr><th scope="row">group size 32 · Flash-Next, MTP off</th><td>Decode · M3 Ultra</td><td>39 → 91 tok/s (+133%)</td></tr><tr><th scope="row">INT8 activation prefill · Qwen3.8-27B oQ8e</th><td>16K prefill · M5 Max</td><td>+38%</td></tr><tr><th scope="row">Lightning MTP · file editing with Qwen, Gemma 4, GLM-5.3, and MiMo</th><td>temperature 1.0 · M3 Ultra</td><td>1.5 to 2 times faster</td></tr></tbody></table><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Full model-by-model results and conditions</a></li><li><a href="https://localai.co.kr/en/guides/tensorfold-qwen38-mac-memory-guide">Qwen3.8-27B Mac memory in TensorFold</a></li></ul></section><section><h2>Rebuild MLX kernels for source installations</h2><p>If you update a source installation, oMLX 0.7.1.dev1 uses MLX 0.32.3. Kernels built with an earlier MLX version may be rejected and run through a slower fallback. Following the release notes, prepare the existing repository and virtual environment, then run `make kernels` from the repository folder.</p><div><p><strong>Rebuild source kernels</strong></p><pre><code data-guide-code-block="4-0">make kernels</code></pre><p><small>Run this in the existing source repository and installation environment.</small></p></div><p>When the build finishes without errors, restart oMLX. Check that Engine Versions in the management UI shows MLX 0.32.3, then send a short prompt you already use. A loaded model that returns a response confirms the basic path is working.</p><p>If `make kernels` fails, inspect the first error line and active Python virtual environment. If the command finishes but speed is lower, check the MLX version and kernel status in Engine Versions and look for kernel-loading errors in the server log. For an app bundle, use the official download for that installation type instead of this source procedure.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Source-install upgrade instructions</a></li><li><a href="https://github.com/jundot/omlx/pull/4311">PR #4311: MLX 0.32.3 and kernel compatibility change</a></li></ul></section><figure><img src="https://localai.co.kr/guides/omlx-mac-serving-guide-scene-2.webp" alt="A running server beside a vertical scale and grouped blocks, with some blocks set apart on a tray on the desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Check model residency and repeated-input caching as separate settings and measurements.</figcaption></figure><section><h2>Review model-specific advanced settings when you need them</h2><p>The release removes about 150 debug `OMLX_*` environment variables and no longer reads them. This includes `OMLX_MOE_EXPERT_OFFLOAD`, `OMLX_QWEN35_ANE_PREFILL`, and `OMLX_RDMA_STAGE_LINKS`. Adjust a feature through the model settings in the management UI when that model supports it.</p><p>For example, Experimental Features may show options such as INT8 activation prefill or ANE prefill only when the selected model supports them. Record the current setting, change one item, and send the same question. Compare input token count, first-token time, generation speed, and errors to see whether the setting affects your actual workload.</p><p>If the model list does not load, first check the model folder and download status. If the server opens but does not respond, look for the first error in the management UI status and server log. For a memory error, unload another model or reduce concurrent requests, then retry with a short input. If only speed changed, also check whether the input length, model file, and cache state were identical, not just the setting name.</p><ul><li><a href="https://github.com/jundot/omlx/pull/4396">PR #4396: Removed debug environment variables and added model-specific settings</a></li></ul></section><section><h2>Models beyond chat and management features use separate paths</h2><p>Clef and OpenJev models return probabilities for choices after reading a state and its options, rather than generating free-form text each time. oMLX accepts TypeSafe System One requests at `POST /v1/systemone`. The question types are `noul`, `choice`, and `score`; oMLX can detect the checkpoint automatically, or you can set the model type to `decision`. This differs from a standard `/v1/chat/completions` request, so use it with an app or custom client that already supports this format.</p><p>EmbeddingGemma 2 now accepts image and audio inputs, and rerank requests add `instruction` and `max_length` options. The audio loaders improve `ref_audio` handling for Fish, TADA, and LongCat. Apps using these models should send images, audio, and reference voice inputs in the formats documented by their model cards and APIs.</p><p>The web dashboard has a new layout with detailed logs, links to settings sections, Restart and Unload all controls, and bundled benchmark presets. After updating, check model status in the new settings rail and Serving Stats area. Also locate model logs and restart controls in the management UI.</p><ul><li><a href="https://github.com/jundot/omlx/releases/tag/v0.7.1.dev1">Decision models, embeddings, audio, and dashboard changes</a></li></ul></section><section><h2>Decide whether to keep your current setup based on test results</h2><p>If concurrent requests are rare and work finishes reliably on 0.7.0, you can stay on the stable release. If overlapping requests make the wait for the first token a problem, measure TTFT on 0.7.1.dev1 with the same prompt and number of concurrent requests. If input processing or generation is slow for a specific Qwen checkpoint, check support conditions for group size, MTP, and INT8 prefill, then compare only on that model.</p><p>Record the installed version, model repository and quantization, Mac chip, input length, number of concurrent requests, MTP and cache settings, first-token time, completion time, and answer quality. Release figures compare against the code immediately before each change, not against 0.7.0 as a whole. Decide whether to update based on repeatable changes in your model and requests.</p><p>If a basic request fails, first get the server and model working before enabling more optimization options. Confirm a normal response to the same short request, then test features one at a time to narrow down which change caused the issue. Keep real work on the stable server, and use these records to decide whether to isolate development-build testing or migrate after confirming the new feature.</p><ul><li><a href="https://localai.co.kr/en/guides/lightning-mtp">Lightning MTP support conditions and comparison method</a></li><li><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe">Qwen3.8-27B setup recipe for different hardware</a></li></ul></section><figure><img src="https://localai.co.kr/guides/omlx-mac-serving-guide-scene-3.webp" alt="Lines pass through a blue scale in a laptop block diagram and continue to a group of blocks in front of a server, with a note below" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After confirming a normal response, hold request conditions constant to compare before and after an update.</figcaption></figure><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added oMLX model-management, cache and acceleration guidance</strong></p><p>Added steps for starting a server with an MLX model and checking the memory guard, model retention and cache reuse. It separates MTP and SpecPrefill requirements and distinguishes an input cache on SSD from model-weight offloading.</p></li></ol></details><aside><h2>Compare speed on your model and hardware</h2><p>Record first-token and completion times with the same model, input, and number of concurrent requests.</p><a href="https://localai.co.kr/en?tab=speed">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>oMLX runs MLX models on Apple Silicon Macs and answers requests from apps. Release candidate 0.7.1rc1 adds the Splash external engine and Muse Spark Open support. The earlier 0.7.1.dev1 measurements below describe that development release; test new features with your chosen model and identical inputs.</dd></div><div><dt>How much memory does it need?</dt><dd>Muse Spark Open is newly supported as well. The 370 GB oQ3e build targets a 512 GB Mac; select the model first, then budget unified memory and room for other apps. The updated downloader recommends models that can load on your Mac.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</title><link>https://localai.co.kr/en/guides/vllm-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/vllm-local-serving-guide</guid><description>This guide uses the DSpark example to examine DFlash and DSpark drafts and adaptive verification in vLLM 0.30.0, then explains how to compare results across CUDA graphs, model support, and request load.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Set Up a Local vLLM Server: From a Small Model to Adaptive Verification in 0.30</h1><p>Serve a local LLM and handle multiple requests with vLLM</p><p id="guide-page-summary">vLLM is an LLM server that keeps a model loaded in memory and generates answers to requests received through an API. It handles multiple requests together and manages cached conversation context to use the GPU efficiently. Start by checking the server with a small model, then choose your model and concurrency before testing 0.30.0's DFlash/DSpark acceleration and adaptive verification.</p><p>For a personal coding assistant, time to first token and answer completion matter; for a multi-user server, throughput matters too. vLLM continuous batching uses the GPU across requests, but server throughput is not the same as one user's response time.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>vLLM 0.30.0 includes DFlash and DSpark speculative paths and adaptive-verification changes.</li><li>The official example requires DeepSeek-V4-Flash-DSpark, CUDA graph, and a supported backend.</li><li>Vary request count and record TTFT, inter-token latency, throughput, memory, and acceptance separately.</li></ol></section><section><h2>Personal latency and server throughput are different metrics</h2><p>When several people ask questions at once, vLLM groups active requests for GPU computation, a method called continuous batching. Summing the tokens generated by the server each second gives throughput; timing the first token and completion of your own request gives the response speed you experience.</p><p>With more concurrent users, total completed work may rise while an individual request waits in a queue; each request also uses KV cache memory. Do not transfer concurrent-load results to personal response speed.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/vllm-local-serving-guide-scene-1.webp" alt="A conceptual scene comparing one code-edit request's wait with multi-request throughput" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>One request's response speed differs from concurrent throughput.</figcaption></figure><section><h2>Verify basic connectivity on the CUDA server first</h2><p>This connectivity example assumes a compatible Linux NVIDIA CUDA environment. Use a separate virtual environment or device-specific container and record PyTorch, CUDA, and driver versions. DGX Spark needs an ARM64 and Blackwell-supported build; do not use an x86 image unchanged. Mac CPU/MLX and the community vllm-metal plugin are separate from CUDA serving.</p><p>Start by checking model loading and response with Qwen2.5-1.5B-Instruct. A 4096 context and one concurrent sequence are connectivity-test settings, not recommended values for current models or peak speed. Separate initial download and preparation from generation timing.</p><p>After the first command loads the model and reports that the server is ready, run the curl request in another terminal. Once an answer returns, set your editor or chat app's OpenAI-compatible base URL to http://127.0.0.1:8000/v1. Both commands must use matching model IDs and ports.</p><div><p><strong>Connection-check server in a CUDA environment</strong></p><pre><code data-guide-code-block="1-0">vllm serve Qwen/Qwen2.5-1.5B-Instruct \
  --host 127.0.0.1 --port 8000 \
  --max-model-len 4096 --max-num-seqs 1</code></pre><p><small>Run after installing vLLM. For Spark, prepare an ARM64 and Blackwell build.</small></p></div><div><p><strong>Send a short prompt from another terminal</strong></p><pre><code data-guide-code-block="1-1">curl --fail-with-body http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen2.5-1.5B-Instruct","messages":[{"role":"user","content":"Explain what a local AI server does in two sentences."}],"max_tokens":64,"temperature":0}'</code></pre><p><small>This is a connectivity check, not a benchmark run.</small></p></div></section><figure><img src="https://localai.co.kr/guides/vllm-local-serving-guide-scene-2.webp" alt="A conceptual scene of checking a model connection on a small server before scaling settings" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Verify connectivity with a small model before increasing model and workload.</figcaption></figure><section><h2>Align model and memory conditions first</h2><p>For the target model, record filename, revision, precision, and context length. NVFP4 and GGUF Q4 are both 4-bit but are not interchangeable settings; support depends on GPU generation, model architecture, and runtime. Input KV cache and working space are also needed in addition to weights.</p><p>--max-model-len caps total input and output context; start with --max-num-seqs 1. Raising --gpu-memory-utilization can allocate more space to KV cache and related use, but leaves less for the OS and other processes. If errors occur, reduce context and concurrency one at a time.</p><p>More requests may increase aggregate throughput while extending an individual's completion time. For a personal coding assistant, record the time from first token through finished code rather than throughput alone.</p></section><section><h2>Check vLLM 0.30.0 adaptive-verification requirements</h2><p>Pin vLLM 0.30.0 in the container or virtual environment and verify with vllm --version. Check that DeepSeek-V4-Flash-DSpark and its tokenizer are supported on the device and attention backend. The example's deepseek_v4 tokenizer and --trust-remote-code can execute model-provided code, so review its source and environment.</p><p>Adaptive verification profiles stage costs with CUDA graph. In configurations requiring full cudagraph, --enforce-eager may be rejected; official documentation also lists LoRA and pipeline-parallelism limitations. Check memory for model plus KV cache, backend, and graph capture first.</p><p>After confirming baseline connectivity, prepare the DeepSeek-V4-Flash target and DSpark draft. The example's seven speculative tokens and probabilistic sampling are documented settings, not recommended depth for other drafts. Check logs and acceptance statistics to verify the intended target and draft are active.</p><p>The server examples in this section all use port 8000. Stop the earlier small-model server with Ctrl+C before starting DeepSeek, and check requests from another terminal. Stop the existing server again before switching to DSpark. If the old process retains GPU memory, confirm it has exited before starting the next one.</p><p>The DSpark distribution attaches a speculative-decoding module to the DeepSeek-V4-Flash checkpoint. The command below specifies `deepseek-ai/DeepSeek-V4-Flash-DSpark` for both the server model and draft configuration. After switching servers, confirm that ID in `/v1/models` and use it in the following request. The earlier plain-Flash request is for checking the baseline server.</p><div><p><strong>Start the Baseline vLLM Server</strong></p><pre><code data-guide-code-block="3-0">vllm serve deepseek-ai/DeepSeek-V4-Flash --host 127.0.0.1 --port 8000 --tokenizer-mode deepseek_v4 --trust-remote-code</code></pre><p><small>Target and tokenizer from the vLLM 0.30.0 example. Verify version and device support.</small></p></div><div><p><strong>Check the Model ID and a Short Response</strong></p><pre><code data-guide-code-block="3-1">curl -sS http://127.0.0.1:8000/v1/models
curl -sS http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"deepseek-ai/DeepSeek-V4-Flash","messages":[{"role":"user","content":"Reply with one short sentence."}],"temperature":0,"max_tokens":64,"stream":false}'</code></pre><p><small>This checks connectivity; the round-trip time is not a speed benchmark.</small></p></div><div><p><strong>Configure DSpark adaptive verification</strong></p><pre><code data-guide-code-block="3-2">vllm serve deepseek-ai/DeepSeek-V4-Flash-DSpark --host 127.0.0.1 --port 8000 --tokenizer-mode deepseek_v4 --trust-remote-code --speculative-config '{"method":"dspark","model":"deepseek-ai/DeepSeek-V4-Flash-DSpark","num_speculative_tokens":7,"draft_sample_method":"probabilistic","enable_adaptive_verification":true}'</code></pre><p><small>This is the documented example. Check memory for the 284B target and draft, plus backend and CUDA graph requirements.</small></p></div><div><p><strong>Check the ID and response after switching to DSpark</strong></p><pre><code data-guide-code-block="3-3">curl --fail-with-body http://127.0.0.1:8000/v1/models
curl --fail-with-body http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"deepseek-ai/DeepSeek-V4-Flash-DSpark","messages":[{"role":"user","content":"Reply with one short sentence."}],"temperature":0,"max_tokens":64}'</code></pre><p><small>Send from another terminal after the DSpark startup log reports readiness.</small></p></div><ul><li><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-DSpark">DeepSeek-V4-Flash-DSpark checkpoint composition</a></li></ul></section><section><h2>Compare latency, throughput, and acceptance by request load</h2><p>Test one and multiple concurrent requests using the same code-editing prompt. Keep target, draft, input/output lengths, sampling, GPU, and memory fixed; vary only concurrency and repeat runs. Record model loading and CUDA graph capture separately from request processing.</p><p>For one request, record TTFT, inter-token latency, and completion time; for total server work, record completed requests or tokens/s. Also track acceptance, GPU memory, preemption, and OOM. Higher concurrency may increase throughput while lengthening an individual's wait.</p><p>The release notes report H200 graph capture falling from about 12 to 2 seconds and engine initialization from about 28.9 to 8.2 seconds. These are startup improvements associated with the GC-freeze change. Record server startup separately alongside response timing to identify which operational stage improved.</p><p>If startup fails, check backend support for device-decided query length, full cudagraph, and LoRA or pipeline-parallelism conditions. If it runs without benefit, inspect acceptance, draft contention under load, and setup cost for short outputs; change one condition and retest.</p></section><figure><img src="https://localai.co.kr/guides/vllm-local-serving-guide-scene-3.webp" alt="A workbench preserving configuration notes and a previous server setup for rollback" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Roll back settings at the failing stage and compare again.</figcaption></figure><section><h2>Match official guidance to the reproduced environment</h2><p>Use the 0.30.0 release and adaptive-verification documentation to check installed version and model/device support. Current main-branch docs or container tags may differ from 0.30.0, so use documentation for the version under test.</p><ul><li><a href="https://github.com/vllm-project/vllm/releases/tag/v0.30.0">vLLM 0.30.0 release notes</a></li><li><a href="https://github.com/vllm-project/vllm/blob/v0.30.0/docs/features/speculative_decoding/adaptive_verification.md">Official adaptive-verification guide</a></li></ul></section><section><h2>Shorten model loading on restart with vLLM 0.31.0</h2><p>Restarting a vLLM server requires reading a large model file and loading it onto GPUs again. In 0.31.0, `vllm preload` uses a separate daemon to keep model weights on the GPUs so a new server process can reuse them. It is useful when development or configuration changes require frequent restarts of the same model.</p><p>Start the daemon in one terminal, then start the server with `--load-format ipc_cache` in another. The example uses Qwen3-8B on one GPU. Model, version, parallelism, dtype, and quantization settings must match to reuse the cache; otherwise the server loads from disk again.</p><p>Run the preload test separately in a 0.31.0 environment. Stop the 0.30.0 server, switch to a virtual environment or container with 0.31.0 and check `vllm --version`. Both daemon and server terminals must use that same 0.31.0 environment. Begin the two steps below after the earlier server releases port 8000.</p><div><p><strong>Terminal 1 — preload daemon</strong></p><pre><code data-guide-code-block="6-0">vllm preload --model "Qwen/Qwen3-8B" --tensor-parallel-size 1</code></pre><p><small>Run the daemon in the same server environment and wait for the model weights to preload.</small></p></div><div><p><strong>Terminal 2 — start the server using the cache</strong></p><pre><code data-guide-code-block="6-1">vllm serve "Qwen/Qwen3-8B" --tensor-parallel-size 1 --load-format ipc_cache --host 127.0.0.1</code></pre><p><small>Match the model, parallelism, dtype, quantization, and other weight settings in both terminals.</small></p></div><ul><li><a href="https://docs.vllm.ai/en/v0.31.0/features/preload/">vLLM 0.31.0 preload startup and shutdown instructions</a></li><li><a href="https://docs.vllm.ai/en/v0.31.0/cli/preload/">vllm preload CLI options</a></li></ul></section><section><h2>Stop the preload daemon when you finish.</h2><p>Model weights remain in GPU memory while the preload daemon is running, even if the server stops or restarts. Before using the GPU for another task, press Ctrl+C in the daemon terminal, then check that memory was released with `nvidia-smi` or ROCm management tools.</p><p>The feature supports tensor, expert, and data parallelism on CUDA and ROCm. Pipeline parallelism is unsupported, and some quantization methods may raise `UnsupportedQuantForIPCError`. Do not apply it to vllm-metal, which is a separate Apple Silicon project. Preload reduces restart waiting time; measure response decode speed separately.</p></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added vLLM runtime-requirement and request-handling guidance</strong></p><p>Added short server and API examples for CUDA, while distinguishing the paths for a conventional PC, ARM64 Spark and Mac. It separates single-request generation speed from total server throughput and calls for model-specific quantization and MTP compatibility checks.</p></li></ol></details><aside><h2>View Qwen3.8-27B Spark settings</h2><p>After connecting the server, check model files and acceleration requirements.</p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=nvidia-dgx-spark-128gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>vLLM is an LLM server that keeps a model loaded in memory and generates answers to requests received through an API. It handles multiple requests together and manages cached conversation context to use the GPU efficiently. Start by checking the server with a small model, then choose your model and concurrency before testing 0.30.0's DFlash/DSpark acceleration and adaptive verification.</dd></div><div><dt>How much memory does it need?</dt><dd>With more concurrent users, total completed work may rise while an individual request waits in a queue; each request also uses KV cache memory. Do not transfer concurrent-load results to personal response speed.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>SGLang HiCache: Spreading reusable KV across GPU, CPU and storage</title><link>https://localai.co.kr/en/guides/sglang-local-serving-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/sglang-local-serving-guide</guid><description>Use a code question to examine SGLang HiCache tiers across GPU, host memory and storage, and prefix reuse in hybrid-attention models. Configure and distinguish cache hits, eviction, first requests and repeats.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">SGLang HiCache: Spreading reusable KV across GPU, CPU and storage</h1><p>Serve a local LLM and reuse repeated input with SGLang</p><p id="guide-page-summary">SGLang is an LLM server that runs a model and generates answers to API requests. When the same instructions or document are supplied again, cached computation can shorten the wait for the first response. First check the server connection, then use HiCache to store cached state across GPU memory (L1), host memory (L2), and supported storage (L3).</p><p>A coding assistant explaining the same repository repeatedly may receive the same system instructions and earlier code. HiCache can retain computed KV state for that shared input beyond GPU memory for reuse. Compare first requests with new code or documents separately from follow-up questions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>L1 is GPU memory, L2 is host memory, and L3 is a connected storage backend.</li><li>The UnifiedTree path from SGLang 0.5.13 handles SWA and Mamba hybrid cache, subject to combination-specific support.</li><li>Separate shared-prefix, new-document, and post-eviction recovery tests; record TTFT and I/O.</li></ol></section><section><h2>Spark, PC, and Mac use different installation paths</h2><p>SGLang on a typical NVIDIA server requires a compatible Linux, CUDA, PyTorch, and GPU-kernel combination. Use a separate environment rather than overwriting an existing Python setup, and record versions. DGX Spark needs a build supporting ARM64 CPU and Blackwell GPU; do not reuse an x86 image unchanged.</p><p>On a Mac, prepare the separate MLX execution path using SGLANG_USE_MLX=1 and check the MLX model and supported features. Image/video diffusion uses a separate MPS path. When choosing instructions, distinguish text-LLM serving from diffusion.</p><ul><li><a href="https://localai.co.kr/en/hardware/nvidia-dgx-spark-128gb">DGX Spark 128GB local LLM baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><section><h2>Verify server and API connectivity with a small model first</h2><p>Before enabling extra acceleration, confirm that Qwen2.5-0.5B-Instruct answers a prompt. Context limit 4096 and one concurrent request are connectivity-test settings, not peak-speed recommendations. Record first-time model download separately from server preparation and inference response.</p><p>Wait for the server to finish preparing the model, then send a short prompt with curl. 127.0.0.1 is a loopback address for this computer, and an app can use the OpenAI-compatible endpoint http://127.0.0.1:30000/v1. A response establishes connectivity, not quality or speed for a larger model.</p><div><p><strong>Start an NVIDIA CUDA server</strong></p><pre><code data-guide-code-block="1-0">python3 -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-0.5B-Instruct \
  --host 127.0.0.1 --port 30000 \
  --context-length 4096 --max-running-requests 1</code></pre><p><small>Connectivity example after installing the SGLang build for your NVIDIA hardware.</small></p></div><div><p><strong>Send a short question to the local server</strong></p><pre><code data-guide-code-block="1-1">curl --fail-with-body http://127.0.0.1:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen2.5-0.5B-Instruct","messages":[{"role":"user","content":"Explain what a local AI server does in two sentences."}],"max_tokens":64,"temperature":0}'</code></pre><p><small>Use the same model name in server and request. This public example needs no personal document.</small></p></div></section><figure><img src="https://localai.co.kr/guides/sglang-local-serving-guide-scene-2.webp" alt="A conceptual scene checking a small model's server response without acceleration settings" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>First confirm the smallest configuration that returns a response.</figcaption></figure><section><h2>Radix cache and HiCache reuse shared prefixes</h2><p>The first code request reads system instructions and code to create KV cache. If a follow-up adds only test output and earlier text matches, Radix cache can reuse the shared prefix state. As code or instructions change, the matching prefix becomes shorter; a new document needs a new prefill.</p><p>HiCache can retain this computed state in host memory and storage beyond the GPU. When GPU space becomes tight, reusable state can remain in another tier. Model weights stay in the model's execution path; the cache stores computation from input already processed.</p></section><figure><img src="https://localai.co.kr/guides/sglang-local-serving-guide-scene-1.webp" alt="A conceptual comparison of repeated code prompts and a new document input" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Separate new inputs from repeated ones because cache effects differ.</figcaption></figure><section><h2>Distinguish GPU, host-memory, and storage tiers</h2><p>HiCache L1 is GPU memory, L2 host memory, and L3 a file or external storage backend. State retained on the GPU can be reused quickly, but may be evicted to host tier when space is needed. A file in L3 is reusable only when the prefix key and model conditions match a later request.</p><p>CPU tier increases storage capacity but adds host bandwidth and transfers. A file backend adds NVMe reads, page cache, and index management to the request path. Files surviving shutdown is different from an immediate cache hit.</p><p>SGLang 0.5.20 describes SWA and Mamba hybrid HiCache support in UnifiedTree; a change to default connection for that hybrid path is recorded in 0.5.13. This does not imply compatibility across all model, hardware, and storage-backend combinations, so verify architecture support.</p></section><section><h2>Start with host cache and verify runtime status</h2><p>This connectivity baseline uses SGLang 0.5.20 with NVIDIA CUDA and openai/gpt-oss-20b. Check the official model card and support guide to confirm GPU memory is sufficient. Context 8192 and one concurrent request are test settings. Enabling --enable-hierarchical-cache and --hicache-ratio 2 does not guarantee twice the data size; inspect the actual pool in startup logs.</p><p>Once the server starts, check /health and a chat completion using the same model ID. Record the first answer and cold state separately, and inspect model load, cache pool, and CUDA initialization logs. This request is not a speed test, so do not add file tier and concurrency all at once.</p><p>Before starting the host-cache server, stop the earlier baseline with Ctrl+C in its terminal. Both examples use port 30000. Once the new model and cache pool are ready, send the health check and question below from another terminal.</p><div><p><strong>Start NVIDIA CUDA server with host cache</strong></p><pre><code data-guide-code-block="4-0">python -m sglang.launch_server --model-path openai/gpt-oss-20b --host 127.0.0.1 --port 30000 --context-length 8192 --max-running-requests 1 --enable-hierarchical-cache --hicache-ratio 2 --hicache-io-backend kernel --hicache-mem-layout page_first</code></pre><p><small>SGLang 0.5.20 NVIDIA CUDA example. Verify options and model support in the installed build.</small></p></div><div><p><strong>Check readiness and send a short prompt to the same model</strong></p><pre><code data-guide-code-block="4-1">curl -sS http://127.0.0.1:30000/health
curl -sS http://127.0.0.1:30000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"Review this Python function for empty-list input and suggest a minimal fix: def first_item(items): return items[0]"}],"temperature":0,"max_tokens":96,"stream":false}'</code></pre><p><small>Connect over loopback after readiness. This checks functionality, not speed.</small></p></div></section><figure><img src="https://localai.co.kr/guides/sglang-local-serving-guide-scene-3.webp" alt="A workbench preserving working versions and runtime conditions as a baseline" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep the working version and conditions as a rollback baseline.</figcaption></figure><section><h2>Measure shared-prefix, new-document, and post-eviction cases separately</h2><p>After the first function request, add one test-log line to the same conversation. Check cache statistics for hit tokens or reused prefixes, then compare with a new-input case using a different function and log. Input length affects computation, so do not compare completion times alone across different requests.</p><p>For a file-tier test, use a separate NVMe path and verify that the SGLang file backend is connected. SGLANG_HICACHE_FILE_BACKEND_STORAGE_DIR specifies cache-file location, not model downloads or OS swap.</p><p>Test cold and warm requests separately. Also record a request after restoring an entry evicted from GPU memory and a request after eviction.</p><p>Check NVMe reads, the page cache, and whether the cache key matches. Confirm hit statistics before concluding that the storage tier reused the state.</p><p>The file-tier test restarts the host-cache server with a changed configuration. Stop it with Ctrl+C, set the cache directory and run the command below. Record the first request after restart separately from the repeated input to compare cache reuse.</p><div><p><strong>Add an NVMe file tier</strong></p><pre><code data-guide-code-block="5-0">mkdir -p /mnt/nvme/sglang-hicache
export SGLANG_HICACHE_FILE_BACKEND_STORAGE_DIR=/mnt/nvme/sglang-hicache
python -m sglang.launch_server --model-path openai/gpt-oss-20b --host 127.0.0.1 --port 30000 --context-length 8192 --max-running-requests 1 --enable-hierarchical-cache --hicache-ratio 2 --hicache-io-backend kernel --hicache-mem-layout page_first --hicache-storage-backend file</code></pre><p><small>Use a writable NVMe directory. This SGLang backend path is separate from OS swap.</small></p></div></section><section><h2>Check SWA and Mamba state in hybrid attention too</h2><p>Models with sliding-window attention, such as GPT-OSS, do not reuse all token state in one uniform way. Even if a FULL-attention prefix remains, missing window state can prevent a direct hit. SGLang UnifiedTree manages hybrid components and 0.5.20 documents SWA/Mamba hybrid HiCache, but support is not universal across models and backends.</p><p>Separate new-prefix, same-prefix, and post-eviction requests. Record context length, cache hits, TTFT, completion time, host RAM, and NVMe I/O. Distinguish a warm cache still on GPU from a request reloaded from L3.</p></section><section><h2>HiCache differs from MTP and NGRAM</h2><p>MTP proposes candidate next tokens; NGRAM speculative decoding finds candidates from prior tokens. PLE offload stores and loads large embedding tables from RAM or SSD. HiCache retains shared-prefix computed state for reuse, so keep these configurations separate.</p><p>SGLang MTP speculative configuration requires a model-appropriate algorithm, depth, and width. NEXTN is used as an alias for EAGLE in documentation, but that does not mean all Qwen, Gemma, and GLM files support the same command. Verify version and model support and enable features one at a time.</p><p>Radix-cache input reuse and MTP/NGRAM candidate verification act at different stages. A faster second request does not show which feature worked, so compare statistics and response segments for each separately.</p></section><section><h2>Record official support references for the version in use</h2><p>Check installation and support conditions in the SGLang 0.5.13 and 0.5.20 releases and HiCache design document. For reproduction, record model ID, SGLang version, GPU, and backend.</p><ul><li><a href="https://github.com/sgl-project/sglang/releases/tag/v0.5.20">SGLang 0.5.20 release</a></li><li><a href="https://github.com/sgl-project/sglang/releases/tag/v0.5.13">SGLang 0.5.13 release</a></li><li><a href="https://github.com/sgl-project/sglang/blob/main/docs/advanced_features/hicache_design.md">SGLang HiCache design</a></li></ul></section><details><summary>Change log</summary><p>These entries record changes to the site's guidance. They do not automatically check your installed engine or model version.</p><ol><li><time datetime="2026-09-06">2026-09-06</time><p><strong>Added SGLang cache and model-specific option guidance</strong></p><p>Added local-server connection examples and steps for adjusting memory at the prefill and decode stages. It separates cache effects from repeated inputs and explains that NGRAM candidate lookup and placing PLE tables in RAM or on SSD are different features.</p></li></ol></details><aside><h2>See Spark requirements for Flash-Next</h2><p>Distinguish standard installs from specialized patches and check model-specific settings.</p><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe?hardware=nvidia-dgx-spark-128gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>SGLang is an LLM server that runs a model and generates answers to API requests. When the same instructions or document are supplied again, cached computation can shorten the wait for the first response. First check the server connection, then use HiCache to store cached state across GPU memory (L1), host memory (L2), and supported storage (L3).</dd></div><div><dt>How much memory does it need?</dt><dd>HiCache can retain this computed state in host memory and storage beyond the GPU. When GPU space becomes tight, reusable state can remain in another tier. Model weights stay in the model's execution path; the cache stores computation from input already processed.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>This connectivity baseline uses SGLang 0.5.20 with NVIDIA CUDA and openai/gpt-oss-20b. Check the official model card and support guide to confirm GPU memory is sufficient. Context 8192 and one concurrent request are test settings. Enabling --enable-hierarchical-cache and --hicache-ratio 2 does not guarantee twice the data size; inspect the actual pool in startup logs.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Running several coding agents at once on a Mac with Locals</title><link>https://localai.co.kr/en/guides/locals-mac-agent-server-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/locals-mac-agent-server-guide</guid><description>Locals is a local server that computes requests from several AI agents at once on a Mac. This covers installing it, connecting OpenCode, the throughput it gains under concurrent requests, and the cases where the 3x figure does not hold.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Running several coding agents at once on a Mac with Locals</h1><p>Once several agents run at once, what the Mac has to carry is different</p><p id="guide-page-summary">Locals is a local inference server for Macs from Generated Computers. It is built not for a single chat message but for what agents send: tool calls, prompts that grow every turn, and many requests running at once. It opens both an OpenAI-compatible and an Ollama-compatible endpoint, so tools such as OpenCode, Cline, Aider and Claude Code connect without changes. The project reports that on an M2 Pro with 16 GB, Qwen3.5-4B went from 87 to 271 tokens per second with eight requests at once. With a single request it is about the same as mlx-lm, and the project was first published on 12 October 2026.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A local server for the Mac that computes requests from several agents as one batch.</li><li>It opens OpenAI- and Ollama-compatible endpoints so existing tools work unchanged.</li><li>On an M2 Pro with 16 GB, eight requests at once measured 271 tokens per second.</li><li>With a single request it is almost identical to mlx-lm.</li></ol></section><section><h2>Several agents make a different workload from a chat box</h2><p>Locals is a server that runs an AI model inside your Mac and answers requests from other programs. One terminal command starts a model that fits the Mac's memory and connects the coding agent you open in that folder. It is not a chat window; the point of the program is that throughput holds up when several agents send requests to the same model.</p><p>An agent does not behave like a line typed into a chat box. It calls tools to read files and run commands, and each call has to come back in the right format before the next step can start. The longer the conversation, the longer the prompt, and coding assistants start several helper agents at the same time. Inference tools built for the Mac are usually not designed around this, so overlapping requests end up slower than handling them one at a time.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/slotstream-125b-model-on-16gb-mac-guide">Slotstream: running a 125B model on a 16 GB Mac</a></li><li><a href="https://localai.co.kr/en/guides/backburner-iphone-mac-local-llm-guide">Backburner: Accelerate Mac LLM Prefill with an iPhone</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/agent-memory-long-term-memory-guide">agent-memory: making a coding agent remember across sessions</a></li><li><a href="https://localai.co.kr/en/guides/unsloth-browser-use-local-guide">Unsloth Browser Use: hand a browser to your local model</a></li></ul></section><figure><img src="https://localai.co.kr/guides/superfluid-local-multi-agent-serving-guide-scene-1.webp" alt="A laptop screen shows a chat window, a code editor and a file list side by side, and lines from all three gather into a stack of model blocks at the bottom of the screen." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Chat, code and file work converging on one local model is the baseline once several agents run.</figcaption></figure><section><h2>Install it and get the server ready</h2><p>You need Apple silicon from M1 onward and macOS 14 or newer. With 16 GB the default model fits well; with 8 GB you have to choose a smaller one. Run the install script, or install it from PyPI with uv.</p><div><p><strong>Install</strong></p><pre><code data-guide-code-block="1-0">curl -LsSf https://raw.githubusercontent.com/Generated-Computers/Locals/main/install.sh | sh</code></pre></div><div><p><strong>Install with uv</strong></p><pre><code data-guide-code-block="1-1">uv tool install --python 3.12 locals</code></pre></div></section><section><h2>First run inside a project folder</h2><p>In a new terminal window, point it at a project folder and run it.</p><div><p><strong>Open a project</strong></p><pre><code data-guide-code-block="2-0">locals code ~/my-project</code></pre></div><p>The first run downloads a model that suits the Mac's memory (about 3 GB), starts it in the background and opens OpenCode in that folder. When the download finishes, open a file in the editor and ask for a small edit to see whether the first answer arrives. Model files and conversation history never leave the Mac.</p></section><section><h2>Connect the agents you already use</h2><p>After one `locals setup`, OpenCode lists Locals in its model picker. Tools that accept an OpenAI-compatible provider, such as VS Code extensions, Zed and JetBrains, take the server address directly.</p><p>Apps that only speak Ollama connect through `locals launch ollama`. Apps with Ollama support, such as Open WebUI or Raycast, need no address at all.</p><table><caption>Values to enter when picking an OpenAI-compatible provider</caption><thead><tr><th scope="col">Setting</th><th scope="col">Value to enter</th></tr></thead><tbody><tr><th scope="row">Server address</th><td>http://127.0.0.1:8321/v1</td></tr><tr><th scope="row">API key</th><td>any text (for example local)</td></tr><tr><th scope="row">Model name</th><td>locals/qwen3.5-4b</td></tr><tr><th scope="row">Context length</th><td>the number `locals launch editor` prints</td></tr></tbody></table><p>Run `locals launch editor` and it prints the address and model name for whichever model is running.</p><p>The server keeps running after you close the terminal window. Check it with `locals status` and stop it with `locals stop`. To use the same agent with another server, undo the setting with `locals disconnect opencode`.</p></section><figure><img src="https://localai.co.kr/guides/mtplx-mac-serving-guide-scene-3.webp" alt="Beside a monitor stands an open grey cabinet stacked with coloured blocks; conduits from the cabinet run to a stack of paper on the right, and a few matching blocks lie on the floor." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once the model is loaded, the server outlives the terminal window, so the next request is answered without starting it again.</figcaption></figure><section><h2>How much faster it gets as requests overlap</h2><p>This was measured with Qwen3.5-4B in 4-bit on a MacBook Pro with an M2 Pro (19-core GPU) and 16 GB. With one request it is close to mlx-lm; as the number of simultaneous requests grows, the gap widens.</p><table><caption>Tokens per second by number of simultaneous requests (M2 Pro, 16 GB, Qwen3.5-4B 4-bit)</caption><thead><tr><th scope="col">Concurrent requests</th><th scope="col">mlx-lm</th><th scope="col">Locals</th><th scope="col">Gain</th></tr></thead><tbody><tr><th scope="row">1</th><td>61</td><td>64</td><td>1.0x</td></tr><tr><th scope="row">2</th><td>82</td><td>116</td><td>1.4x</td></tr><tr><th scope="row">4</th><td>87</td><td>160</td><td>1.8x</td></tr><tr><th scope="row">8</th><td>87</td><td>271</td><td>3.1x</td></tr><tr><th scope="row">16</th><td>157</td><td>341</td><td>2.2x</td></tr></tbody></table><p>Conditions: MacBook Pro with M2 Pro 19-core GPU and 16 GB, Qwen3.5-4B in 4-bit, MLX 0.32, both tools compared in the same process. Counting through the server API from the client instead gives 244 tokens per second at eight requests, a 3.2x gain, so the conclusion holds.</p><p>The gain comes from not computing requests separately. Requests from several agents go to the GPU as one batch and are handled in a single pass, with kernels built for that batch size. When the model writes a tool call, the format rules are enforced on the GPU, which cuts down on retries after a malformed reply.</p><p>There is a comparison with other servers on the same terms. With 1,000-token prompts and eight requests at once, time to the first token was 1.6 s for Locals, 2.1 s for llama.cpp and 41.8 s for Ollama, at 110, 71 and 34 tokens per second.</p></section><section><h2>The cases where it is not faster</h2><p>Send one request with nothing to reuse and there is almost no difference: 64 tokens per second against 61 for mlx-lm on the same M2 Pro. It is faster on a single request when the reply rewrites the prompt, such as a whole-file edit, or when the prompt cache hits.</p><p>Reading a prompt is bound by the GPU's arithmetic. Eight 8,000-token prompts at once produce only 57 tokens per second, because most of the time goes into reading.</p><p>Only the kernels tuned for 4-bit affine quantization in groups of 64 are covered. Other formats, such as mxfp4, run at mlx-lm's speed. On the M5, MLX's own kernels already use the neural accelerators, so the gain drops to 1.5x.</p></section><section><h2>Choose a model that fits the memory</h2><p>One model runs at a time. Switch with a name such as `locals start --model lfm`, and check which one is running with `locals status`.</p><table><caption>File size and tokens per second by model (M2 Pro, 16 GB, eight at once)</caption><thead><tr><th scope="col">Model</th><th scope="col">Start it with</th><th scope="col">File size</th><th scope="col">mlx-lm</th><th scope="col">Locals</th></tr></thead><tbody><tr><th scope="row">Qwen3.5-4B (default)</th><td>--model qwen</td><td>2.8GB</td><td>87</td><td>271</td></tr><tr><th scope="row">LFM2.5-2.6B</th><td>--model lfm</td><td>1.5GB</td><td>144</td><td>404</td></tr><tr><th scope="row">MiniCPM5-2B</th><td>--model minicpm</td><td>1.3GB</td><td>160</td><td>478</td></tr><tr><th scope="row">Gemma 4 E4B</th><td>--model gemma</td><td>4.8GB</td><td>80</td><td>224</td></tr></tbody></table><p>These are the eight-request numbers; the default depends on the Mac's memory. Below 12 GB the default becomes Qwen3.5-2B.</p><p>With 24 GB or more you can pick Flint (40B total, 2.5B active per token). The file is 17.8 GB, and on an M4 Pro with 24 GB it measured 115 tokens per second for one request and 264 with eight at once. A 24 GB Mac sometimes gives the GPU only 16 GB, and `locals start` explains how to raise that.</p><p>For long work, set `LOCALS_KV_BITS=8` to keep keys and values in 8 bits. For Flint that raises the request length from about 35,800 to 67,584 tokens and slows writing by 4 to 13%.</p></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-2.webp" alt="A cable runs to a Mac mini, and an open box beside it is packed with coloured blocks. Conduits from the box lead to four trays holding a network diagram, a photo, a waveform and a document." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The size of the model that fits in memory sets how many requests and how much context you can carry at once.</figcaption></figure><section><h2>A young project, so check a few things</h2><p>The repository was published on 12 October 2026, and the latest version on PyPI as of 25 October is 0.2.1. Command names and default models are still changing quickly, so follow the options that `locals --help` prints for the version you installed.</p><p>The server accepts requests only from this Mac and does not open to the outside. When `locals run` puts several agents on one task, each gets its own copy of the project, and the original folder changes only after the tests pass.</p><p>It detects a model that keeps calling the same tool or repeating itself and stops it, and a memory guard keeps long prompts from ending in an out-of-memory error.</p><p>It is released under Apache 2.0, and the computation is described in arXiv 2610.09139.</p><ul><li><a href="https://github.com/Generated-Computers/Locals">GitHub repository</a></li><li><a href="https://arxiv.org/abs/2610.09139">arXiv 2610.09139</a></li><li><a href="https://github.com/Generated-Computers/Locals/blob/main/docs/benchmarks/README.md">Benchmark document</a></li></ul></section><aside><h2>Mac mini M4 with 24 GB</h2><p>See which models fit, Flint included, on 24 GB of memory.</p><a href="https://localai.co.kr/en/hardware/mac-mini-m4-24gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Locals is a local inference server for Macs from Generated Computers. It is built not for a single chat message but for what agents send: tool calls, prompts that grow every turn, and many requests running at once. It opens both an OpenAI-compatible and an Ollama-compatible endpoint, so tools such as OpenCode, Cline, Aider and Claude Code connect without changes. The project reports that on an M2 Pro with 16 GB, Qwen3.5-4B went from 87 to 271 tokens per second with eight requests at once. With a single request it is about the same as mlx-lm, and the project was first published on 12 October 2026.</dd></div><div><dt>How much memory does it need?</dt><dd>You need Apple silicon from M1 onward and macOS 14 or newer. With 16 GB the default model fits well; with 8 GB you have to choose a smaller one. Run the install script, or install it from PyPI with uv.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Slotstream: running a 125B model on a 16 GB Mac</title><link>https://localai.co.kr/en/guides/slotstream-125b-model-on-16gb-mac-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/slotstream-125b-model-on-16gb-mac-guide</guid><description>Slotstream runs a 125B model on a 16 GB Mac by reading only the experts it needs from the SSD instead of holding the whole model in memory. It measured 20.91–23.69 tokens per second on a 48 GB M5 Pro, and 1–6 tokens per second on a 16 GB Mac.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Slotstream: running a 125B model on a 16 GB Mac</h1><p>The model does not have to fit in memory to run</p><p id="guide-page-summary">Slotstream runs a 105 GB, 125B-parameter model on Macs with 16 to 64 GB of memory. Shared weights stay in memory and only the experts a token needs are read from the SSD. It measured 20.91–23.69 tokens per second on a 48 GB M5 Pro, dropping to 1–6 tokens per second on a 16 GB Mac.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It reads only the experts it needs from the SSD instead of holding the whole model in memory.</li><li>It needs Apple Silicon with 16 GB or more, macOS 14 or later, and 110 GB of free SSD space.</li><li>It measured 20.91–23.69 tokens per second on a 48 GB M5 Pro and 1–6 on a 16 GB Mac.</li><li>Above 96 GB, an engine that keeps the whole model in memory is faster.</li></ol></section><section><h2>It runs without loading the whole model into memory</h2><p>Slotstream is a runtime that runs a 125-billion-parameter model on an Apple Silicon Mac. The model file is about 105 GB, and the point of the tool is that it still runs on a 16 GB Mac. Instead of loading the whole model into memory, it reads only what the current calculation needs from the SSD.</p><p>There is one way to fit a 105 GB model file into 16 GB of memory: keep the parts not in use on disk and read them only when they are used. The disk read rate heavily influences generation speed.</p><p>Qwen3.8-Flash-Next is a mixture-of-experts model that keeps many expert networks and uses only some of them for each token. Shared weights stay in memory, and only the selected experts are fetched from the SSD into a cache. Frequently used experts stay in memory so the next read is shorter.</p><p>So on a Mac with little memory the disk read sets the speed, and on a Mac with more memory more experts stay resident and the speed rises. The result of the calculation is the same either way.</p><ul><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Running several coding agents at once on a Mac with Locals</a></li><li><a href="https://localai.co.kr/en/guides/strata-local-llm-guide">A 125B model on a 12GB GPU? How Strata runs it</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/m5-ssd-selective-offload.webp" alt="A small Mac mini beside an external SSD and an open card drawer filled with paper cards" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping the cards you use often on the desk and the rest in the drawer is the basic idea behind this approach.</figcaption></figure><section><h2>Check the Mac and the disk before installing</h2><p>It needs an Apple Silicon Mac, macOS 14 or later, and about 110 GB of free SSD space. Memory is supported from 16 GB, and on an 8 GB Mac even the smallest memory plan does not fit, so it refuses to start.</p><p>Windows, Linux and Intel Macs are not supported. It runs on Apple Silicon with MLX and Metal, so it does not start elsewhere.</p><p>If free space runs short the download stops partway. The model file and the cache share one disk, so leaving a little more than 110 GB free is safer.</p></section><section><h2>Install it and get a first reply</h2><p>Run the install script in a terminal. Running the same command again updates it.</p><div><p><strong>Install</strong></p><pre><code data-guide-code-block="2-0">curl -LsSf https://raw.githubusercontent.com/carloslfu/slotstream/main/install.sh | sh</code></pre></div><p>After installing, check the Mac with doctor and get a first reply with run. The first run downloads the model, and an interrupted download resumes.</p><div><p><strong>First run</strong></p><pre><code data-guide-code-block="2-1">slotstream doctor
slotstream run --prompt "하늘이 파란 이유가 뭐야?"</code></pre></div><p>The download is over 100 GB and can take hours depending on the connection. Once it finishes, the tool runs offline.</p></section><section><h2>Expected speed differs by memory tier</h2><p>Expected speed and the automatic context length change with installed memory. The values below are the developer's published estimates, and real speed drops as other apps use memory.</p><table><caption>Estimated speed and automatic context length by installed memory</caption><thead><tr><th scope="col">Installed memory</th><th scope="col">Estimated speed</th><th scope="col">Automatic context length</th></tr></thead><tbody><tr><th scope="row">16 GB to under 24 GB</th><td>1–6 tokens per second</td><td>32,768 tokens</td></tr><tr><th scope="row">24 GB to under 48 GB</th><td>5–16 tokens per second</td><td>32,768 up to 32 GB</td></tr><tr><th scope="row">48 GB to under 96 GB</th><td>15–27 tokens per second</td><td>131,072 at 64 GB</td></tr><tr><th scope="row">96 GB and above</th><td>20–32 tokens per second</td><td>262,144 tokens</td></tr></tbody></table><p>Above 96 GB the model fits in memory, and the developer reports that an engine loading the whole model is faster.</p></section><figure><img src="https://localai.co.kr/guides/ple-storage-tiers.webp" alt="A diagram showing layers leaving a GPU and splitting into memory and SSD" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>For the same model, which parts stay in memory and which are read from the SSD decides the speed.</figcaption></figure><section><h2>Read the conditions behind the published numbers</h2><p>The developer's published measurement ran on October 5, 2026, on a 48 GB M5 Pro with a 33 GB memory budget. It used the original 4-bit model and ran three workloads three times each.</p><table><caption>Median generation speed by workload</caption><thead><tr><th scope="col">Workload</th><th scope="col">Median</th></tr></thead><tbody><tr><th scope="row">Short prompt</th><td>20.91 tokens per second</td></tr><tr><th scope="row">Long context</th><td>23.69 tokens per second</td></tr><tr><th scope="row">Completed coding answer</th><td>21.59 tokens per second</td></tr></tbody></table><p>These numbers cover only reply generation. Loading the model and reading the prompt are separate, so the first turn of a conversation feels slower than the table.</p></section><section><h2>Compared with the earlier release, the budget explains the gap</h2><p>The earlier 0.2.19 release measured 15.86 tokens per second at a 22 GB budget. A larger budget keeps more experts in memory and cuts disk reads.</p><p>The developer notes that these numbers do not establish a speedup at identical settings. The budget, workload set and method differ, so they are not a like-for-like comparison between releases.</p></section><figure><img src="https://localai.co.kr/guides/finding-moe-expert-drawers.webp" alt="Only a few drawers open from a large cabinet toward a workbench, with output piling up below" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Opening only the drawers you need in advance removes the wait, so the order of reads becomes the speed you feel.</figcaption></figure><section><h2>It decides in advance which experts to read</h2><p>It predicts which experts the next layers will need and reads them from the SSD before they are requested. The prediction changes speed, never the output.</p><p>The expert cache shrinks when other apps ask for memory. A smaller cache lowers speed, but it does not remove experts from the model.</p><p>Without an explicit target it starts from a 33 GB ceiling and adjusts to the memory actually free. The startup report separates the budget, the cache size and the safety headroom.</p><p>When you set a memory target yourself, the value is a maximum budget, not a promise to use it. A short request can peak well below the target.</p></section><section><h2>Connect it to a coding agent</h2><p>It opens Ollama, OpenAI and Anthropic style APIs at once. Claude Code, Codex, opencode and Hermes can connect, and you start one by putting its name after launch.</p><div><p><strong>Connect an agent</strong></p><pre><code data-guide-code-block="7-0">slotstream launch claude</code></pre></div><p>It does not serve several requests at once. Connected apps share one running model, so for many agents at the same time another tool fits better.</p><table><caption>How to connect, and whether requests run together</caption><thead><tr><th scope="col">What to check</th><th scope="col">Slotstream</th></tr></thead><tbody><tr><th scope="row">Supported API styles</th><td>Ollama·OpenAI·Anthropic</td></tr><tr><th scope="row">Concurrent generation</th><td>One at a time</td></tr><tr><th scope="row">Other models</th><td>Not supported</td></tr></tbody></table></section><section><h2>There are cases where this approach does not fit</h2><p>This tool is built for Macs with 16 to 64 GB of memory. A Mac with more memory does not need this approach in the first place.</p><p>Unlike approaches that split memory along the model's structure, such as PLE offload, this tool moves experts between disk and memory. The same model is involved, but what sits on disk differs.</p><p>There is no image-accuracy benchmark or comparison with other models on the same Mac yet. Generation does not rewrite the model file, but pushing the automatic setting far past the default adds swap and SSD writes.</p></section><aside><h2>Mac mini M5 Pro with 48 GB</h2><p>See which Macs fall into the 48 GB tier used for the measurement.</p><a href="https://localai.co.kr/en/hardware/mac-mini-m5-pro-48gb">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Slotstream runs a 105 GB, 125B-parameter model on Macs with 16 to 64 GB of memory. Shared weights stay in memory and only the experts a token needs are read from the SSD. It measured 20.91–23.69 tokens per second on a 48 GB M5 Pro, dropping to 1–6 tokens per second on a 16 GB Mac.</dd></div><div><dt>How much memory does it need?</dt><dd>Slotstream is a runtime that runs a 125-billion-parameter model on an Apple Silicon Mac. The model file is about 105 GB, and the point of the tool is that it still runs on a 16 GB Mac. Instead of loading the whole model into memory, it reads only what the current calculation needs from the SSD.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>agent-memory: making a coding agent remember across sessions</title><link>https://localai.co.kr/en/guides/agent-memory-long-term-memory-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/agent-memory-long-term-memory-guide</guid><description>agent-memory writes what an agent learned in a session to Markdown files and lets the next session find and read them. On a bounded LongMemEval-S run it scored 52.9% against 5.8% with no memory, and it verified that three hosts share one store.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">agent-memory: making a coding agent remember across sessions</h1><p>It keeps what used to vanish when a session closed</p><p id="guide-page-summary">agent-memory is a runtime that keeps a coding agent's memory in Markdown files. The files are the source of truth and the SQLite index is a cache you can delete and rebuild. Recall answers with paths and summaries rather than pasted text, so the agent opens only as much as the task needs.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It keeps work context that used to disappear when a session ended as Markdown files.</li><li>Recall answers with paths and summaries, and the text is opened only when needed.</li><li>In a bounded test it scored 52.9% against 5.8% with no memory.</li><li>Claude Code, Codex CLI and Hermes share one store.</li></ol></section><section><h2>It keeps what used to vanish when a session closed</h2><p>An agent forgets what it learned when it closes a session. Which file it changed and why, which attempt failed: none of that is there next time. agent-memory is a runtime that closes that gap.</p><p>Memory tools have split into two lines. One is a retrieval engine built on embeddings and a knowledge graph; the other is a filesystem the agent reads directly. The first finds well but is hard to inspect, the second is legible but does not scale as a search surface.</p><p>This tool puts both in one store. The files stay as they are and an index sits on top, so the index searches and the files answer.</p><p>A memory is not a pasted block of transcript. It records what was done and why in one file, and links related files together.</p><ul><li><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Running several coding agents at once on a Mac with Locals</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-model-backup-restore-guide">How to Back Up and Restore a Local LLM You Already Use</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person at a laptop with document, spreadsheet and mail windows flowing toward an agent" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Turning the document, spreadsheet and mail context of each session into files is where memory starts.</figcaption></figure><section><h2>Markdown is the source of truth and the index is a cache</h2><p>Each memory is a Markdown file. Links inside a file carry relations, and files in the same folder are neighbours, so relations survive without a graph database underneath.</p><table><caption>The three paths to a memory</caption><thead><tr><th scope="col">Path</th><th scope="col">What happens</th></tr></thead><tbody><tr><th scope="row">Injection at session start</th><td>Reads MEMORY.md as is</td></tr><tr><th scope="row">Index search</th><td>Searches FTS5, optionally fused with vectors</td></tr><tr><th scope="row">Plain directory walk</th><td>Finds with ls and grep</td></tr></tbody></table><p>The index can be deleted at any time. Removing it and rebuilding loses no knowledge, and that is enforced by a test rather than promised in a document.</p><div><p><strong>Rebuild the index</strong></p><pre><code data-guide-code-block="1-0">rm -rf .index/ &amp;&amp; mem rebuild</code></pre></div></section><section><h2>Install it and create a store</h2><p>It is not on PyPI yet, so you install from a checkout. It needs Python 3.12 or later, and installing builds the mem command, the MCP server and the hook binaries.</p><div><p><strong>Install</strong></p><pre><code data-guide-code-block="2-0">uv sync --all-packages</code></pre></div><p>After creating the store you attach it to the agent you use. Each host keeps its settings in a different place, so the command takes the host name.</p></section><section><h2>Recall answers with paths and the files do the reading</h2><p>A search returns a one-line abstract, the file path and a score, not the text itself. The agent looks at that list and opens only the files it needs, at the depth it needs.</p><table><caption>What each reading depth costs</caption><thead><tr><th scope="col">Stage</th><th scope="col">What comes back</th></tr></thead><tbody><tr><th scope="row">List</th><td>One-line abstract, path, score</td></tr><tr><th scope="row">Outline</th><td>Headings only</td></tr><tr><th scope="row">Abstract</th><td>The file's abstract</td></tr><tr><th scope="row">Full text</th><td>The whole file</td></tr><tr><th scope="row">Raw trace</th><td>The cited raw messages</td></tr></tbody></table><p>Pasting text fills the context quickly and makes it hard to see what was read. Answering with paths leaves a record in the transcript of which files were opened and which were not.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A small robot on a box with file, calendar, chat and search cards connected by cables" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>When there are several ways to reach a memory, a miss on one still leaves another path.</figcaption></figure><section><h2>Writes happen at conversation boundaries</h2><p>It does not wait for the agent to decide to write something down. Distillation starts at the point where a conversation breaks, and it does not hold up the work in progress.</p><p>What is worth keeping usually surfaces when a task ends. The choice that was made and what failed get captured then.</p><p>The raw trace is copied before distillation. Something the distiller misses is therefore never lost by the system.</p><p>There is no model client inside the library. Judgment is borrowed from the host agent's CLI, and it stays visible in the transcript.</p></section><section><h2>It consolidates and forgets while the agent sleeps</h2><p>A consolidation pass runs when there is no conversation. It merges what came in and forgets what has low value. It runs on its own cycle instead of waiting for a request.</p><p>What the unattended pass may and may not do is separated. It adds and updates on its own, but deletion only arrives as a proposal you confirm.</p><p>Forgetting is a feature. The same fact scattered across files duplicates search results, and an old decision can hide the current one.</p><p>Updating does not erase the earlier record. Asking as of a date answers with the memory as it stood then, so you can trace what changed when.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="At night a person works by a desk lamp beside a monitor checklist and a tidy paper tray" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Consolidation runs in the quiet hours, so the next session starts from tidied memory.</figcaption></figure><section><h2>It compared memory against no memory</h2><p>The developer measured a reduced LongMemEval-S with 120 episodes. The haystack was bounded to 12 sessions, the host was Claude Haiku 4.5 and a Sonnet 5 judge scored the answers.</p><table><caption>Accuracy compared with no memory</caption><thead><tr><th scope="col">Approach</th><th scope="col">Correct</th></tr></thead><tbody><tr><th scope="row">agent-memory</th><td>52.9% (127/240)</td></tr><tr><th scope="row">MemCore</th><td>35.8% (86/240)</td></tr><tr><th scope="row">No memory</th><td>5.8% (7/120)</td></tr></tbody></table><p>These numbers do not measure writing quality or reasoning. They look only at how accurately facts from earlier sessions come back.</p></section><section><h2>Three hosts share one store</h2><p>A memory written by Claude Code is found by Codex CLI and picked up again by Hermes. All nine ordered writer/reader pairs across the three hosts passed, with specifics intact.</p><p>Memory carries across hosts because the store is files. A store trapped inside one app's database cannot be read by another app.</p><p>Compared with starting without memory, correct answers rose from 2 of 36 to 13 of 36. Memory carries over even when the host changes.</p></section><section><h2>It is an early version, so check these points</h2><p>The version is 0.1.0 and it is not on PyPI yet. Command names and settings can change, so follow the documentation that matches the version you installed.</p><p>The measurement bounded the haystack to 12 sessions. That makes it a study of write strategy rather than a comparison at corpus scale.</p><p>Switching agents means installing the hooks and settings again. The memory stays as Markdown, but which host writes and when depends on the settings.</p></section><aside><h2>Agent permission check</h2><p>If an agent keeps memory, decide first which files it may read and write.</p><a href="https://localai.co.kr/en/guides/local-ai-agent-security-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>agent-memory is a runtime that keeps a coding agent's memory in Markdown files. The files are the source of truth and the SQLite index is a cache you can delete and rebuild. Recall answers with paths and summaries rather than pasted text, so the agent opens only as much as the task needs.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Laya-MLX: a decision model that answers in 13 ms on a Mac</title><link>https://localai.co.kr/en/guides/laya-mlx-typed-decision-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/laya-mlx-typed-decision-guide</guid><description>Laya-MLX runs a decision model that answers choice, score and true/false questions with probabilities on Apple Silicon. One short question took 13.42 ms on an M3 Max, 7.39 ms with the multilingual checkpoint, with zero output tokens.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Laya-MLX: a decision model that answers in 13 ms on a Mac</h1><p>It computes probabilities instead of generating text</p><p id="guide-page-summary">Laya-MLX is a Python package that runs a 421-million-parameter decision model on MLX. Instead of generating text it returns a probability for each option in one pass. One short question takes about 13 ms, and batching 50 questions reaches 146.8 per second.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It returns option probabilities without writing an answer, so output tokens stay at zero.</li><li>One short question took 13.42 ms on an M3 Max, and 7.39 ms with the multilingual checkpoint.</li><li>Batching 50 questions reaches 146.8 per second.</li><li>It fits places that need a probability, not places that need prose.</li></ol></section><section><h2>It computes probabilities instead of writing an answer</h2><p>Laya-MLX does not produce sentences. It takes a state and a question together and returns a probability for each named option, which is why output tokens stay at zero.</p><p>The structure splits into an encoder and decision heads. A bidirectional encoder reads state and question together and the heads compute the probabilities. With no token-by-token loop the latency stays short.</p><p>Asking a generative model to choose means getting a sentence back and parsing it. A broken format adds a retry and the latency that comes with it. Receiving the probability directly removes the parsing step.</p><p>The models come in two sizes, 421 million and 322 million parameters. Compared with running a generative model on the same Mac, memory use stays under a gigabyte.</p><ul><li><a href="https://localai.co.kr/en/guides/local-jev-hardware-guide">Run Jev-Style Local Decision Models on Mac, RTX 3090, and Servers</a></li><li><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Running several coding agents at once on a Mac with Locals</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/jev-system-one-decision-desk.webp" alt="A stack of documents feeding a machine that sends labelled cards out of four slots" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>State and question go in, option probabilities come out, and those probabilities decide the next action.</figcaption></figure><section><h2>There are three kinds of question: choice, score and true or false</h2><p>A choice question returns a probability for each named option. A score question returns probabilities over ordered levels and their expected score, and a true/false question returns a single probability.</p><table><caption>What each question type returns</caption><thead><tr><th scope="col">Type</th><th scope="col">Returns</th><th scope="col">Where it fits</th></tr></thead><tbody><tr><th scope="row">Choice</th><td>A probability per option</td><td>Classification and routing</td></tr><tr><th scope="row">Score</th><td>Level probabilities and expected score</td><td>Quality rating</td></tr><tr><th scope="row">True or false</th><td>A single P(true)</td><td>Checking a condition</td></tr></tbody></table><p>It does not fit writing prose or multi-step reasoning. It is for choosing among named options or rating on fixed levels.</p></section><section><h2>Install it and get a first decision</h2><p>Install the package, load a model and pass a state and a question. The example below routes a support message into one of three departments.</p><div><p><strong>Install</strong></p><pre><code data-guide-code-block="2-0">pip install laya-mlx</code></pre></div><p>The first load downloads the checkpoint, and after that inference stays local. It needs Python 3.11 or later and macOS 14 or later.</p><div><p><strong>First decision</strong></p><pre><code data-guide-code-block="2-1">import laya_mlx as laya

agent = laya.load("aac6fef/laya-mlx")
result = agent.predict(
    "I was billed twice. Please refund the duplicate.",
    {"department": {
        "type": "choice",
        "instructions": "Who should handle this?",
        "criteria": ["billing", "technical", "sales"],
    }},
)
print(result["answers"]["department"])</code></pre></div><p>It can also run on the CPU instead of the GPU. Changing only the backend moves the same code between the two.</p></section><section><h2>Pick one of three checkpoints</h2><p>If you only handle English, the 421M model is enough; with mixed languages the multilingual checkpoint is faster. Their context limits differ, so check that number before passing long instructions.</p><table><caption>The three published checkpoints</caption><thead><tr><th scope="col">Checkpoint</th><th scope="col">Parameters</th><th scope="col">Context limit</th><th scope="col">Purpose</th></tr></thead><tbody><tr><th scope="row">Laya</th><td>421 million</td><td>512 tokens</td><td>English input</td></tr><tr><th scope="row">Multilingual</th><td>322 million</td><td>1,024 tokens</td><td>Multilingual input</td></tr><tr><th scope="row">Typed decisions</th><td>421 million</td><td>1,024 tokens</td><td>Porting upstream workflows</td></tr></tbody></table><p>Pre-converted FP16 checkpoints are published, so you can load one directly instead of converting the original weights yourself.</p></section><section><h2>The latency and throughput measured on a Mac</h2><p>The measurement ran on an M3 Max with a 40-core GPU and 128 GB of memory. The timing includes prompt preparation, tokenization, synchronized inference, calibration and formatting, and excludes model loading.</p><table><caption>Latency and throughput by checkpoint</caption><thead><tr><th scope="col">Metric</th><th scope="col">Laya 421M</th><th scope="col">Multilingual 322M</th></tr></thead><tbody><tr><th scope="row">One short question, P50</th><td>13.42ms</td><td>7.39ms</td></tr><tr><th scope="row">One short question, P95</th><td>13.92ms</td><td>7.79ms</td></tr><tr><th scope="row">50-question throughput</th><td>146.8 per second</td><td>395.0 per second</td></tr><tr><th scope="row">Peak allocation</th><td>943.6MiB</td><td>687.6MiB</td></tr></tbody></table><p>The numbers move with question length and count. The table measures one short question and a batch of 50, so longer instructions add latency.</p></section><figure><img src="https://localai.co.kr/guides/jev-prefill-without-decoding.webp" alt="On the left documents move one by one along a conveyor; on the right they enter a box wired to three gauges" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Returning probabilities in one pass instead of chaining tokens keeps the latency short.</figcaption></figure><section><h2>It first checked that the answers match</h2><p>The MLX port was checked against the original on 63 validation questions. All 63 matched in both FP32 and FP16, so all 378 comparisons passed.</p><p>Repeating the same call 100 times returned finite, identical results without memory growth. That holds for those fixtures, not for every possible question.</p><p>The game demo serves the same check. A Snake run handled 2,400 moves with two safety interventions and no deaths, about 6.5% faster than its eager control.</p><p>Fidelity came before speed. Where a probability is used, a one-point difference changes the decision, so matching the original is the starting point.</p></section><figure><img src="https://localai.co.kr/guides/jev-qwen-direct-logits.webp" alt="A box with a neural network on its face wired to three gauges with dials" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The needles are the per-option probabilities. Instead of picking one, you get all three values to use in a decision.</figcaption></figure><section><h2>Attach it to an app or a server</h2><p>Entry points for an HTTP server and an MCP server ship with the package. Calling it from an app or exposing it as an agent tool needs no extra code.</p><div><p><strong>Run the server</strong></p><pre><code data-guide-code-block="6-0">pip install 'laya-mlx[serve]'
laya-mlx-serve</code></pre></div><p>Extras for frameworks such as LangChain and LlamaIndex ship separately, so you can swap only the decision step in a pipeline you already run.</p><p>When sending many questions at once, tune the batch size. The default is 16, and the 50-question throughput above used a batch of 64.</p></section><section><h2>Remember that this is a port</h2><p>This package is an independent MLX port, not an official release from the original authors. It keeps the original weights, question formatting, calibration and output schema, but its support surface differs.</p><p>CUDA and ONNX execution and training are not included. Training stays with the upstream project; this package covers inference and conversion.</p><p>The repository records which upstream revision it follows. Checking that record against the upstream documentation shows which features are still missing.</p><p>The measurement ran on macOS 27.2, and older versions cannot be assumed to match. Measure the latency yourself with a short question before relying on it.</p></section><aside><h2>Running the same model on llama.cpp</h2><p>Compare the conditions for running the same decision model on llama.cpp.</p><a href="https://localai.co.kr/en/guides/llamacpp-decision-models-julia-laya-kev-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Laya-MLX is a Python package that runs a 421-million-parameter decision model on MLX. Instead of generating text it returns a probability for each option in one pass. One short question takes about 13 ms, and batching 50 questions reaches 146.8 per second.</dd></div><div><dt>How much memory does it need?</dt><dd>The models come in two sizes, 421 million and 322 million parameters. Compared with running a generative model on the same Mac, memory use stays under a gigabyte.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>llmfit: find the models your Mac can actually run</title><link>https://localai.co.kr/en/guides/llmfit-local-model-fit-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/llmfit-local-model-fit-guide</guid><description>llmfit detects CPU, memory and GPU, then ranks the models and quantizations that device can actually run. It shows the assumptions behind each estimate and measures real values with bench.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">llmfit: find the models your Mac can actually run</h1><p>A tool that reads your specs and ranks what fits</p><p id="guide-page-summary">llmfit is a free tool that reads your hardware and shortlists the models that fit. It scores four dimensions: memory fit, estimated speed, quality and context, and info reveals the inputs behind each estimate. Sharing your own bench numbers makes the estimates better for everyone on the same hardware.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It reads CPU, memory and GPU, then ranks models that fit.</li><li>The score covers four dimensions: fit, speed, quality and context.</li><li>Speed in the list is an estimate; bench is the measurement.</li><li>Sharing a measurement lands it in the next release.</li></ol></section><section><h2>Give it your specs and it returns a ranking</h2><p>llmfit reads the CPU cores, memory, GPU and VRAM of the machine it runs on, then ranks the models and quantizations that fit that configuration. The input is your hardware; the output is a sorted list.</p><p>The value is that you do not need to know model names. Before settling on a machine you can ask what it would run.</p><p>The verdict splits into four axes: whether it fits in memory, how fast it should be, the model's own quality, and how much context it holds. All four appear on one screen.</p><ul><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/memory-bandwidth-vs-compute">LLM memory bandwidth vs compute: how to find the speed bottleneck</a></li></ul></section><figure><img src="https://localai.co.kr/guides/p01-model-fit.webp" alt="A crane lowering model crates into racks: one fits with spare room and is ticked, the other overflows and is crossed out" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Fit is the first score to read. If a model fails there, the other scores do not matter.</figcaption></figure><section><h2>Install it and let it read your hardware</h2><p>On a Mac, install it with Homebrew. Ubuntu and Windows use the same tool, which helps when comparing a Mac against a desktop.</p><p>Run it with no arguments. Your detected hardware sits at the top and the scored models below, and Enter opens the detail view for the selected model.</p><p>If detection looks wrong, run doctor. It prints exactly what it read, which makes a misread memory size easy to trace.</p><table><caption>Install paths</caption><thead><tr><th scope="col">Platform</th><th scope="col">Command</th><th scope="col">Note</th></tr></thead><tbody><tr><th scope="row">Mac and Linux</th><td>brew install AlexsJones/llmfit/llmfit</td><td>Prebuilt binary</td></tr><tr><th scope="row">Python tooling</th><td>uv tool install -U llmfit</td><td>Or run with uvx llmfit</td></tr><tr><th scope="row">Windows</th><td>winget install --exact --id AlexsJones.llmfit</td><td>Scoop also works</td></tr><tr><th scope="row">Container</th><td>docker run --rm -it ghcr.io/alexsjones/llmfit --tui</td><td>Web UI and API mode</td></tr></tbody></table></section><section><h2>Read the four scores separately</h2><p>The fit score reads how much of your available memory the model uses. It rewards the 50 to 80 percent band and marks down both tight and wasteful loads, and because a wrong fit invalidates the rest, read it first.</p><p>The speed score is estimated from memory bandwidth. The same model shifts with bandwidth, which is why this axis matters when comparing machines.</p><p>Quality and context belong to the model, so they barely move between machines. Read those two when deciding which model to pick.</p><table><caption>The four scores and the order to read them</caption><thead><tr><th scope="col">Axis</th><th scope="col">What it measures</th><th scope="col">When reading</th></tr></thead><tbody><tr><th scope="row">Fit score</th><td>Share of available memory, 50–80 percent is optimal</td><td>Check this first</td></tr><tr><th scope="row">Speed score</th><td>Estimate from memory bandwidth</td><td>An estimate, so it drifts</td></tr><tr><th scope="row">Quality score</th><td>The model's own capability</td><td>Independent of hardware</td></tr><tr><th scope="row">Context length</th><td>Context window against the use-case target</td><td>Costs more memory</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/monthly-local-ai-speed-workbench.webp" alt="A Mac mini, a dual-GPU tower and a large desktop each feeding tokens into a single stopwatch" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The same model runs at different speeds on different memory bandwidth, so speed has to be read per machine.</figcaption></figure><section><h2>Put the estimate next to the measurement</h2><p>The speed in the list is an estimate. llmfit exposes the inputs behind it through info, and if those inputs differ from your machine the number moves with them.</p><p>Measurement is bench. It attaches to a runtime you already have running and records generation speed and time to first token, so you measure the setup you actually use.</p><p>Seeing both exposes where the estimate drifts. That gap is the point of the tool: buying on the estimate alone can invert the ranking once measured.</p><table><caption>Commands worth knowing</caption><thead><tr><th scope="col">Command</th><th scope="col">Returns</th><th scope="col">When to use</th></tr></thead><tbody><tr><th scope="row">llmfit</th><td>Hardware and the ranked list</td><td>First look</td></tr><tr><th scope="row">llmfit info</th><td>Estimate basis and verify commands</td><td>When a number looks off</td></tr><tr><th scope="row">llmfit bench</th><td>Generation speed and TTFT</td><td>Measuring the real value</td></tr><tr><th scope="row">llmfit doctor</th><td>Raw detected specs</td><td>Detection looks wrong</td></tr></tbody></table></section><section><h2>It accounts for quantization and expert models</h2><p>It handles GGUF, AWQ, GPTQ and EXL2, and it does not assume a fixed width: it walks from Q8_0 down to Q2_K and picks the highest quality that still fits. If full context does not fit, it retries at half context.</p><p>For mixture-of-experts models it calculates with active parameters. Using total parameters makes the model look heavier than it is and hides ones that would run.</p><p>The difference shows up on large models: even past 100 GB total, a small active slice can still run on a laptop.</p></section><section><h2>Use it from scripts and servers</h2><p>Adding --json to recommend returns output a script can consume, useful for pre-deploy checks or building a table.</p><div><p><strong>Installation and first run</strong></p><pre><code data-guide-code-block="5-0">brew install AlexsJones/llmfit/llmfit
llmfit doctor
llmfit recommend --json</code></pre></div><p>serve opens an HTTP API that exposes the system profile and the model list, so a dashboard or pipeline can read it.</p><div><p><strong>Serve it</strong></p><pre><code data-guide-code-block="5-1">llmfit serve --host 0.0.0.0 --port 8787
curl -s localhost:8787/api/v1/system</code></pre></div></section><figure><img src="https://localai.co.kr/guides/finding-prefill-ranking-reversal.webp" alt="Two server carts racing through a document gate toward a finish line, the smaller one ahead of the larger" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Estimated order and measured order can invert, so measure with bench once the machine is in hand.</figcaption></figure><section><h2>Collected measurements improve the estimates</h2><p>bench --share contributes a measurement to the repository. The run is saved on your machine first and only leaves when you send it.</p><p>People on identical hardware see it in the next release, where an estimate becomes a check-marked measured number.</p><p>The catalog can grow while the estimates improve, because every measurement fills a gap.</p></section><section><h2>What the tool does not answer</h2><p>llmfit does not run models. Downloading and serving stay with a runtime such as Ollama, llama.cpp or MLX, and bench attaches to one already running.</p><p>It does not guarantee speed either. Other apps using memory or a different driver change the number, so identical hardware has to mean identical conditions.</p><p>Other tools measure by running: they pull models through Ollama and benchmark them, but treat expert models as dense and overstate memory. Which one fits depends on what you are checking.</p><p>Use the list as a starting point for a buying decision and confirm with bench before committing.</p><p>The last piece llmfit leaves open is how fast the machine actually runs. Its speed comes from a bandwidth calculation, so a different quantization file or context length moves the real number away from the estimate.</p><p>This site collects prefill, token generation and time to first token per machine with the conditions attached, so one model can be compared across machines under the same conditions. Narrow the candidates with llmfit, then check only those against measured values.</p><p>Power is not modelled at all. This site records each machine's peak and idle draw separately, on the maker's figures with the source attached, and the electricity calculator turns hours per day plus your existing household usage into a monthly bill across progressive tiers and seasonal rates.</p><ul><li><a href="https://localai.co.kr/en/hardware">Measured values, power and price by machine</a></li><li><a href="https://localai.co.kr/en?tab=electricity">Electricity bill calculator</a></li><li><a href="https://github.com/Pavelevich/llm-checker">A tool that measures by running: llm-checker</a></li></ul></section><aside><h2>Choosing a runtime</h2><p>Compare the runtimes that will actually run the model you picked.</p><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>llmfit is a free tool that reads your hardware and shortlists the models that fit. It scores four dimensions: memory fit, estimated speed, quality and context, and info reveals the inputs behind each estimate. Sharing your own bench numbers makes the estimates better for everyone on the same hardware.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>mlx-audio: TTS and STT from a single install</title><link>https://localai.co.kr/en/guides/mlx-audio-local-speech-toolkit-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/mlx-audio-local-speech-toolkit-guide</guid><description>mlx-audio bundles TTS, STT, speech-to-speech and music generation on Apple MLX. One CLI and one server, with only the model name changing between runs, and six of its models list Korean.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">mlx-audio: TTS and STT from a single install</h1><p>A Mac audio toolkit where you swap only the model</p><p id="guide-page-summary">mlx-audio handles speech generation and transcription on a Mac in one package. The command stays the same when you change models, which makes one-sentence comparisons easy, and its server exposes an OpenAI-style API.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Synthesis, recognition, speech conversion and music share one package.</li><li>The CLI and server commands stay the same across models.</li><li>Six of its models list Korean.</li><li>An OpenAI-style API lets other apps connect.</li></ol></section><section><h2>Text and audio in one package</h2><p>mlx-audio is an audio library on top of Apple's MLX. Text in gives you speech, speech in gives you text, and synthesis, recognition, speech-to-speech and music generation all live in one package.</p><p>Models do not each bring their own command: one CLI and one server stay fixed while the model value changes. Comparing models on the same sentence needs no new code.</p><p>It is Mac-only: it runs on Apple Silicon, with no CUDA or ROCm path.</p><p>It runs on MLX, so it is tuned for Apple Silicon: a Python package whose arithmetic MLX performs.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/local-tts-voice-generation-guide">Make speech on your own computer: a local TTS guide</a></li><li><a href="https://localai.co.kr/en/guides/ming-voice-amd-local-voice-assistant-guide">A real-time voice assistant at home on an AMD Radeon: Ming Voice and its 20 GB VRAM budget</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-models-1.webp" alt="A sunlit desk with a small speaker, a handheld recorder and a studio microphone side by side" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Comparison starts from one sentence under one condition, since only a fixed input exposes the difference.</figcaption></figure><section><h2>Install it and generate one sentence</h2><p>Install with pip. Saving to mp3 or FLAC also needs ffmpeg; wav alone does not.</p><p>One command takes a model, a sentence and a voice. Multiple sentences produce numbered files, and --join_audio merges them.</p><p>With --stream the audio arrives while it is generated. Use --play to hear it immediately, and add --save to keep the streamed result.</p><table><caption>Options worth knowing</caption><thead><tr><th scope="col">Option</th><th scope="col">What happens</th></tr></thead><tbody><tr><th scope="row">--model</th><td>Picks the model</td></tr><tr><th scope="row">--voice</th><td>Selects a voice</td></tr><tr><th scope="row">--lang_code</th><td>Hints the language</td></tr><tr><th scope="row">--join_audio</th><td>Merges segments into one file</td></tr><tr><th scope="row">--stream</th><td>Streams chunks as they are generated</td></tr></tbody></table></section><section><h2>Korean support depends on the model</h2><p>Supported languages vary by model, and six of the listed ones name Korean. Choosing by name alone can land you on an English-only model.</p><p>Cloning splits into models that need a reference voice and models that do not. If cloning is the goal, start from the models that ship it.</p><table><caption>Models that list Korean</caption><thead><tr><th scope="col">Model name</th><th scope="col">Kind</th><th scope="col">Note</th></tr></thead><tbody><tr><th scope="row">Qwen3-TTS</th><td>TTS</td><td>Voice design</td></tr><tr><th scope="row">Ming-3.0 TTS Tiny</th><td>TTS</td><td>MoE with cloning</td></tr><tr><th scope="row">Ming-3.0 TTS Dense</th><td>TTS</td><td>0.5B, emotion and dialect</td></tr><tr><th scope="row">Higgs Audio v2</th><td>TTS</td><td>Five languages</td></tr><tr><th scope="row">Qwen3-ASR</th><td>STT</td><td>Transcription</td></tr><tr><th scope="row">Qwen3-ForcedAligner</th><td>Alignment</td><td>Subtitle timing</td></tr></tbody></table></section><section><h2>Run one sentence through several models</h2><p>In Python you load a model and pass the text. Changing only the model name runs another model on the same code.</p><p>Each switch downloads new weights. The first run spends time on the download and later runs use the local cache.</p><p>The README publishes no per-model speed figures, so compare output length and memory footprint, then decide by listening.</p><div><p><strong>One sentence, several models</strong></p><pre><code data-guide-code-block="3-0">from mlx_audio.tts.utils import load_model

for name in [
    "mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-8bit",
    "mlx-community/Ming-3.0-tts-tiny-8bit",
]:
    model = load_model(name)
    for chunk in model.generate("같은 문장을 읽어 봐요.", lang_code="Korean"):
        print(name, chunk.audio.shape[0])</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-qwen-2.webp" alt="A desk with a monitor showing an audio waveform, an audio interface and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Generating the same sentence across models and stacking the waveforms side by side makes the difference visible.</figcaption></figure><section><h2>Serve it and other apps can use it</h2><p>Starting the server opens OpenAI-style routes, so an app already wired to that shape only needs a new base URL.</p><p>Synthesis takes JSON with the text; transcription takes an audio file as multipart. One server handles both.</p><div><p><strong>Starting the server</strong></p><pre><code data-guide-code-block="4-0">mlx_audio.server --host 0.0.0.0 --port 8000

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model": "mlx-community/Kokoro-82M-bf16", "input": "안녕하세요", "voice": "af_heart"}' \
  --output speech.wav</code></pre></div><table><caption>Server routes</caption><thead><tr><th scope="col">Route</th><th scope="col">What happens</th><th scope="col">Payload</th></tr></thead><tbody><tr><th scope="row">/v1/audio/speech</th><td>Text to speech</td><td>JSON</td></tr><tr><th scope="row">/v1/audio/transcriptions</th><td>Speech to text</td><td>File</td></tr></tbody></table><p>A web view ships too, but it starts separately from the server rather than with a single command.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A shelf holding a Mac mini, headphones, an external drive and document folders" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once served, the browser and other apps share one model instead of repeating the install per app.</figcaption></figure><section><h2>Transcription and subtitle timing come along</h2><p>The recognition side ships Whisper variants, Qwen3-ASR and Parakeet, in the same package as synthesis with no second install.</p><p>The aligner matches sentences to audio at timestamp level, which is where subtitle start times come from.</p><p>Diarization models are listed too, so a meeting recording with several speakers can be split by speaker.</p><p>A Swift package lets an iOS or macOS app call it directly without going through the server.</p></section><section><h2>Quantization trims the memory</h2><p>Many models are published at 3, 4, 6 and 8 bits, so changing the suffix on the model name reruns the same sentence at another width.</p><p>Lower bits need less memory and shift the sound. Start at 8-bit for dialogue and 4-bit for narration.</p></section><section><h2>What the package does not decide for you</h2><p>There is no baseline for quality or speed; conditions differ per model, so compare the same sentence yourself.</p><p>Without ffmpeg only wav is written, so install it first if the pipeline needs mp3.</p><p>Model licences differ per repository, so check the model card before commercial use.</p></section><aside><h2>Comparing speech models</h2><p>After narrowing with mlx-audio, compare per-model conditions and numbers.</p><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>mlx-audio handles speech generation and transcription on a Mac in one package. The command stays the same when you change models, which makes one-sentence comparisons easy, and its server exposes an OpenAI-style API.</dd></div><div><dt>How much memory does it need?</dt><dd>Lower bits need less memory and shift the sound. Start at 8-bit for dialogue and 4-bit for narration.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Model licences differ per repository, so check the model card before commercial use.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>turbovec: shrink the RAM a RAG index needs</title><link>https://localai.co.kr/en/guides/turbovec-vector-index-memory-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/turbovec-vector-index-memory-guide</guid><description>turbovec stores embeddings at 2 or 4 bits per dimension and searches the compressed form. Ten million 768-dimensional vectors drop from 31 GB as float32 to 4 GB, and 4-bit search runs 3.8 to 5.1 times faster than FAISS.</description><content:encoded><![CDATA[<header><p>memory and model</p><h1 id="guide-page-title">turbovec: shrink the RAM a RAG index needs</h1><p>It compresses vectors to 4 bits and searches them anyway</p><p id="guide-page-summary">RAG spends RAM on vectors. turbovec compresses them to 2 or 4 bits so one machine holds more, with no training step and fast deletes, at the cost of being a scan rather than a graph index.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Ten million 768-dimensional vectors drop from 31 GB to 4 GB.</li><li>At 4-bit it runs 3.8 to 5.1 times faster than FAISS.</li><li>No training step, so a new vector is searchable immediately.</li><li>Deletes take microseconds.</li></ol></section><section><h2>A vector index eats RAM too</h2><p>RAG turns documents into embeddings and stores them. As float32, ten million 768-dimensional vectors take 31 GB, which fills RAM before any model is loaded.</p><p>turbovec stores those vectors at 2 or 4 bits per dimension and searches the compressed form, so the same ten million fit in 4 GB.</p><p>It is a library, not a service: it runs inside your process and persists to one file, so it slots into an existing pipeline.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/m5-ultra-ssd-local-ai">M5 Ultra SSD: faster loading or faster local AI?</a></li><li><a href="https://localai.co.kr/en/guides/cmp170hx-long-context-guide">How Much Long-Context Text Fits on a 64GB CMP 170HX?</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/ple-storage-tiers.webp" alt="Small data blocks passing through a GPU into stacked layers, then splitting into RAM and an SSD" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Where the vectors sit and how many decides your RAM budget, and compression is the cheapest lever.</figcaption></figure><section><h2>Do the memory arithmetic first</h2><p>float32 is 4 bytes per dimension, 4-bit is 0.5 and 2-bit is 0.25, so the arithmetic gives 8 and 16 times. The README reports measured factors of 7.8 and 15.5.</p><p>At 100K vectors of 1536 dimensions, float32 takes 586 MB, 4-bit 75 MB and 2-bit 38 MB. Budgeting with that ratio avoids running out of RAM.</p><table><caption>Memory by bit width</caption><thead><tr><th scope="col">Width</th><th scope="col">Bytes per dimension</th><th scope="col">100K·1536</th><th scope="col">Versus float32</th></tr></thead><tbody><tr><th scope="row">float32</th><td>4 bytes</td><td>586MB</td><td>1×</td></tr><tr><th scope="row">4-bit mode</th><td>0.5 bytes</td><td>75MB</td><td>7.8× smaller</td></tr><tr><th scope="row">2-bit mode</th><td>0.25 bytes</td><td>38MB</td><td>15.5× smaller</td></tr></tbody></table></section><section><h2>Install it and build an index</h2><p>Install with pip and pass a NumPy array. Vectors are searchable as soon as they are added, with no training step.</p><p>Input must be a 2-D float32 array. Other dtypes raise instead of converting, which catches conversion mistakes early.</p><p>The scores are inner products, so normalise vectors before adding if you want cosine similarity.</p><div><p><strong>Building an index</strong></p><pre><code data-guide-code-block="2-0">import numpy as np
from turbovec import TurboQuantIndex

vectors = np.load("embeddings.npy").astype(np.float32)  # (n, 1536)
index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(vectors)

scores, slots = index.search(vectors[:1], k=5)
index.sync("index.tv")</code></pre></div></section><section><h2>Read speed and recall together</h2><p>4-bit search runs 3.8 to 5.1 times faster than FAISS: 4.0 times on ARM and 4.9 on x86, so both architectures gain.</p><p>Recall@1 is 0.959 and 0.981 at 4-bit against FAISS at 0.966 and 0.971, for 1536 and 3072 dimensions.</p><p>2-bit drops to 0.901 and 0.931, and low dimensions lose more: GloVe at 200 dimensions reaches 0.572. That is the number that decides the width.</p><table><caption>Figures with their conditions</caption><thead><tr><th scope="col">Metric</th><th scope="col">4-bit mode</th><th scope="col">2-bit mode</th><th scope="col">FAISS</th></tr></thead><tbody><tr><th scope="row">Search speed</th><td>3.8–5.1× faster</td><td>1.8–2.5× faster</td><td>Criterion</td></tr><tr><th scope="row">recall@1 (1536/3072)</th><td>0.959 / 0.981</td><td>0.901 / 0.931</td><td>0.966 / 0.971</td></tr><tr><th scope="row">recall@1 (GloVe 200)</th><td>0.860</td><td>0.572</td><td>0.842</td></tr></tbody></table><p>Measured on 100K embeddings, k=64, 1,000 queries, median of 5 runs, on GCP c4a-standard-8 (ARM) and c3-standard-8 (x86).</p></section><figure><img src="https://localai.co.kr/guides/monthly-local-ai-speed-workbench.webp" alt="A Mac mini, a dual-GPU tower and a large desktop feeding tokens into one stopwatch" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Speed is only comparable with its conditions attached, so record corpus size and core count alongside it.</figcaption></figure><section><h2>Frequent adds and deletes favour it</h2><p>With no training step, an added vector is searchable at once, so a pipeline that keeps ingesting documents never has to reindex.</p><p>Deletes take microseconds. FAISS repacks codes on every delete, which runs 0.19 to 1.03 seconds.</p><p>Saving writes only the change, so it stays in milliseconds however large the index, and a crash keeps everything up to the last sync.</p></section><section><h2>A filter can ride along with the query</h2><p>Pass an allowlist and the search only returns from it, which lets permissions or a time window live outside the index.</p><p>IdMapIndex keeps your own ids instead of slot positions, which makes matching keys from another system straightforward.</p><div><p><strong>Searching with an allowlist</strong></p><pre><code data-guide-code-block="5-0">from turbovec import IdMapIndex

index = IdMapIndex(dim=1536, bit_width=4)
index.add_with_ids(vectors, ids)

allowed = np.array([1001, 1003, 1042], dtype=np.uint64)
scores, ids = index.search(query, k=10, allowlist=allowed)</code></pre></div></section><figure><img src="https://localai.co.kr/guides/finding-moe-expert-drawers.webp" alt="A card catalog with a few drawers pulled out, their contents flowing to a workbench" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Passing a filter to the search pulls only allowed entries, so permissions stay outside the index.</figcaption></figure><section><h2>It drops into a RAG stack</h2><p>Store integrations exist for LangChain, LlamaIndex, Haystack and Agno, matching each framework's in-memory store so the swap is a replacement.</p><p>With a local embedding model the whole index runs offline, and turbovec itself never leaves the process.</p></section><section><h2>When it is the wrong tool</h2><p>It is not recommended when you need a graph index: it scans every vector, so cost grows linearly. At 100K a query is 0.13 to 0.25 ms on eight cores, and for hundreds of millions behind strict latency, HNSW or IVF is the right shape.</p><p>Exact float results are out of reach: quantization is lossy, and at 4-bit the top hit matches the float answer 96 to 98 percent of the time. Check recall on a sample of your own data.</p><p>It is not a server either: no network API, replication or multi-tenancy, it is a component you place inside a stack that has those.</p><p>Dimensions must be multiples of 8 and no wider than 16,384, and the only widths are 2 and 4 bits.</p></section><aside><h2>When RAG answers wrong</h2><p>If answers stay wrong after shrinking the index, diagnose the retrieval step.</p><a href="https://localai.co.kr/en/guides/local-rag-failure-diagnosis">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>RAG spends RAM on vectors. turbovec compresses them to 2 or 4 bits so one machine holds more, with no training step and fast deletes, at the cost of being a scan rather than a graph index.</dd></div><div><dt>When is it better not to choose this?</dt><dd>It is not recommended when you need a graph index: it scans every vector, so cost grows linearly. At 100K a query is 0.13 to 0.25 ms on eight cores, and for hundreds of millions behind strict latency, HNSW or IVF is the right shape.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Fish Audio Drama 3 int4: 41.5 GB down to 22 GB</title><link>https://localai.co.kr/en/guides/fish-drama-3-int4-local-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/fish-drama-3-int4-local-tts-guide</guid><description>The 22.1 GB int4 quantization of Fish Audio Drama 3: what shrank from 41.5 GB, the published WER and latency figures, and the SGLang Omni command that serves it.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Fish Audio Drama 3 int4: 41.5 GB down to 22 GB</h1><p>Checking whether the voice survives a 4-bit fold</p><p id="guide-page-summary">An unofficial 4-bit fold of Drama 3: the download drops from 41.5 GB to 22.1 GB and published WER stays level with the FP8 original, at about 8 percent more latency per request.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The download shrinks from 41.5 GB to 22.1 GB.</li><li>Only routed experts and some attention projections go to int4.</li><li>The shared expert and audio decoder stay in bf16.</li><li>Published runs show about 8 percent more latency and level WER.</li></ol></section><section><h2>A checkpoint that folds 41.5 GB into 22 GB</h2><p>Fish Audio Drama 3 is a multi-speaker speech model that computes 3B of its 35B per token. The original needs 41.5 GB in bf16, which no single 24 GB card holds; this checkpoint folds the weights to 4 bits and lands at 22.1 GB.</p><p>What got folded matters more than the size. Only the routed experts and some attention projections drop to int4, while the shared expert every token passes through and the audio decoder that builds the waveform stay in bf16, which is why it is labelled a W4A16 hybrid.</p><p>The licence is the Fish Audio community licence, so check its terms before commercial use.</p><table><caption>What drops to 4 bits and what stays at 16</caption><thead><tr><th scope="col">Component</th><th scope="col">Precision</th><th scope="col">Share of memory</th></tr></thead><tbody><tr><th scope="row">Routed experts</th><td>int4</td><td>Most of the weights sit here</td></tr><tr><th scope="row">Some attention projections</th><td>int4</td><td>Stored at 4 bits, computed at 16</td></tr><tr><th scope="row">Shared expert</th><td>bf16</td><td>Every token passes through</td></tr><tr><th scope="row">Audio decoder</th><td>bf16</td><td>It builds the output waveform</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li></ul></section><figure><img src="https://localai.co.kr/guides/media-vram-packing.webp" alt="A black display case holding a grid board, a rack of cards and a roller on separate shelves, with a large translucent glass panel standing at the right" width="1672" height="941" loading="lazy" decoding="async"><figcaption>Folding the weights to 4 bits nearly doubles what fits in the same space, which is how 41.5 GB becomes 22.1 GB.</figcaption></figure><section><h2>Serving takes more memory than the weights</h2><p>The weights are 20.8 GB, but serving memory is much larger, which is why a 24 GB card stalls at start-up. On an A100 80 GB the engine already held 57.3 GB at start and peaked at 57.9 GB across five generations.</p><p>The rest is KV cache and engine overhead. Longer lines and more speakers grow the cache, so headroom counted from weights alone disappears quickly.</p><p>It needs Ampere or newer, because the 4-bit kernel uses GPTQ-Marlin. Turing and earlier cards do not open that path.</p></section><figure><img src="https://localai.co.kr/guides/finding-moe-memory-speed.webp" alt="Pencil drawing of a cabinet with one-colour blocks on the top shelf and many-coloured blocks below, while a block on screen splits into coloured blocks that take two separate paths" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Only 3B of the 35B is computed per token. All the weights still have to be resident, but the slice in use is small.</figcaption></figure><section><h2>Serving it with the same command as the original</h2><p>The runtime is SGLang Omni: clone it, build a Python 3.12 virtualenv, then install the fishaudio extra with pre-releases allowed.</p><table><caption>What has to be in place</caption><thead><tr><th scope="col">What you need</th><th scope="col">Needs</th></tr></thead><tbody><tr><th scope="row">GPU</th><td>Ampere (sm80) or newer</td></tr><tr><th scope="row">Python</th><td>3.12 virtualenv</td></tr><tr><th scope="row">Install</th><td>--prerelease=allow</td></tr><tr><th scope="row">Checkpoint</th><td>22.1 GB download</td></tr></tbody></table><p>After downloading the checkpoint, use the same sgl-omni serve command as the original. The checkpoint carries its quantization settings, so the loader needs no patch.</p><div><p><strong>Install and serve</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/sgl-project/sglang-omni.git
cd sglang-omni
uv venv -p 3.12 .venv &amp;&amp; . .venv/bin/activate
uv pip install --prerelease=allow -e ".[fishaudio]"
hf download akhaliq/drama-3-int4

sgl-omni serve \
  --model-path akhaliq/drama-3-int4 \
  --port 8000</code></pre></div><p>The API is unchanged: post input to /v1/audio/speech, attach a reference clip through references, and the [sighs] and [laughs] tags, multi-speaker scenes and previous_takes editing all behave as on the original.</p><div><p><strong>A speech request</strong></p><pre><code data-guide-code-block="2-1">curl -s localhost:8000/v1/audio/speech \
  -H 'content-type: application/json' \
  -d '{"input":"오늘 회의는 여기까지입니다. [sighs] 정리해 둘게요.",
       "references":[{"audio":"ref.wav","text":"참조 음성 대본"}]}' \
  --output out.wav</code></pre></div></section><section><h2>In the published runs the quality holds</h2><p>The run covers 1,088 Seed-TTS English prompts on one H200, concurrency 8, non-streaming, with WER measured by transcribing the output with Qwen3-ASR-1.7B.</p><p>Latency grows about 8 percent per request and throughput falls from 6.47 to 5.99, while WER came out lower than the original at 1.63 percent.</p><p>That gap is not a quality gap: a second run of the same FP8 checkpoint measured 1.365 s and 2.02 percent, a run-to-run spread as large as the difference between the two.</p><table><caption>Seed-TTS English, one H200, concurrency 8</caption><thead><tr><th scope="col">Checkpoint</th><th scope="col">Weights</th><th scope="col">Latency mean</th><th scope="col">p95</th><th scope="col">RTF</th><th scope="col">Requests/s</th><th scope="col">WER</th></tr></thead><tbody><tr><th scope="row">FP8 original</th><td>37.0GB</td><td>1.235 s</td><td>1.902 s</td><td>0.281</td><td>6.47</td><td>1.99%</td></tr><tr><th scope="row">int4</th><td>20.8GB</td><td>1.334 s</td><td>2.178 s</td><td>0.320</td><td>5.99</td><td>1.63%</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/speech/tts-models-1.webp" alt="A sunlit desk with a small speaker, a handheld recorder and a studio microphone side by side" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Similar numbers can still sound different. Decide after listening to the same sentence with the same reference clip.</figcaption></figure><section><h2>Measured against another quantisation</h2><p>A second evaluation on one A100 ran the same eight prompts against an int8 dense quantisation built for 32 GB cards.</p><p>On the long paragraph the comparison checkpoint hallucinated an ending and scored 0.667 against 0.028 here, while speaker similarity tied at 0.846.</p><table><caption>A100, eight prompts</caption><thead><tr><th scope="col">Checkpoint</th><th scope="col">Mean WER</th><th scope="col">Excluding Chinese</th><th scope="col">Speaker similarity</th></tr></thead><tbody><tr><th scope="row">int4 hybrid (22.1GB)</th><td>0.197</td><td>0.082</td><td>0.846</td></tr><tr><th scope="row">int8 dense (24.5GB)</th><td>0.259</td><td>0.154</td><td>0.846</td></tr></tbody></table><p>Both scored 1.0 on the Chinese prompt although the transcripts nearly matched, a tokenisation artifact of unspaced Chinese rather than a difference between models.</p><p>Do not compare this table with the Seed-TTS table above: both the dataset and the transcription model differ.</p></section><section><h2>When to take this and when to take the original</h2><p>If memory binds first, take int4: 22 GB of weights opens up 24 and 32 GB cards.</p><p>If latency binds first, take the FP8 original; 8 percent per request shows up in tight real-time conversation.</p><p>Both sit on pre-release ground: sglang-omni moves fast, so the install command and supported GPUs can change between releases. Listen to one sentence before putting it into production.</p></section><aside><h2>Drama 3 basics</h2><p>Start with the multi-speaker workflow.</p><a href="https://localai.co.kr/en/guides/fish-drama-3-local-multispeaker-tts-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>An unofficial 4-bit fold of Drama 3: the download drops from 41.5 GB to 22.1 GB and published WER stays level with the FP8 original, at about 8 percent more latency per request.</dd></div><div><dt>How much memory does it need?</dt><dd>The weights are 20.8 GB, but serving memory is much larger, which is why a 24 GB card stalls at start-up. On an A100 80 GB the engine already held 57.3 GB at start and peaked at 57.9 GB across five generations.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The licence is the Fish Audio community licence, so check its terms before commercial use.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LFM3-1.7B: a 1.1 GB agent model on a Mac</title><link>https://localai.co.kr/en/guides/lfm3-1-7b-local-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lfm3-1-7b-local-agent-guide</guid><description>LFM3-1.7B is a 1.1 GB text model built for local agents. Its 256K window, 1.6 GB of KV cache at 128K, and the 64 percent task success measured on macOS, with conditions attached.</description><content:encoded><![CDATA[<header><p>read first</p><h1 id="guide-page-title">LFM3-1.7B: a 1.1 GB agent model on a Mac</h1><p>Where a 2B model takes a 9B model's seat</p><p id="guide-page-summary">LFM3-1.7B handles text among six 2B-class models. The 4-bit file is 1.1 GB, so a Mac or a phone runs it, and filling 128K of context costs 1.6 GB of cache. It trades blows with 9B models on tool use and long tasks, but coding and knowledge lag.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 4-bit file is 1.1 GB.</li><li>Filling 128K of context costs 1.6 GB of KV cache.</li><li>It trades blows with 9B models on tool use and long tasks.</li><li>Coding and knowledge still trail the 9B class.</li></ol></section><section><h2>Why a 2B model aims at a 9B seat</h2><p>Liquid AI published LFM3-1.7B on October 27. Six 2B-class models branch from one backbone, and this one handles text: text goes in, answers and tool calls come out.</p><p>The way it saves size is the story. Of 24 layers, 13 are short convolutions that read only the last few tokens, 5 are sliding-window attention with a 256-token window, and only 6 are global attention, so long context costs far less.</p><p>Pre-training used 22T tokens, and the final 3.5T was a mid-training stage weighted toward agentic traces and tool calls, which is why a 2B model scores this high on tool use.</p><table><caption>Six models branched from one backbone</caption><thead><tr><th scope="col">Model</th><th scope="col">Size</th><th scope="col">What it does</th></tr></thead><tbody><tr><th scope="row">LFM3-1.7B</th><td>1.7B</td><td>Text and tool calls</td></tr><tr><th scope="row">LFM3-VL-2B</th><td>1.9B</td><td>Image and video understanding</td></tr><tr><th scope="row">LFM3-Audio-2B</th><td>2B</td><td>Speech recognition, synthesis and dialogue</td></tr><tr><th scope="row">LFM3-Omni-2B</th><td>2.2B</td><td>Sees, listens and speaks</td></tr><tr><th scope="row">d1-2B, d1-Omni-2B</th><td>2B</td><td>Specialised for decisions</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb">Mac Studio M4 Max 128GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/context-window-kv-cache">Context length, RoPE and sliding-window attention</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/granite-4-2-3b-8b-30b-local-choice">Granite 4.2 at home: choose between 3B, 8B and 30B</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A small robot device connected to browser, calendar, and message panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Agents live or die on how accurately they call tools, and a 2B model now wins some of those fights.</figcaption></figure><section><h2>Start from the file and the memory</h2><p>Start with the file you download: at 4 bits it is a little over 1 GB, so a phone or a Raspberry Pi 5 runs it.</p><p>The window opens to 256K, and filling 128K costs 1.6 GB of KV cache where Qwen3.5-4B needs 4.3 GB and MiniCPM5-2B 5.6 GB, so the gap shows in long-context work.</p><p>Add 1.1 GB of weights to 1.6 GB of cache and you stay under 3 GB, which leaves room on an 8 GB Mac to keep the model loaded while you work.</p><table><caption>Which file to download</caption><thead><tr><th scope="col">File name</th><th scope="col">File size</th><th scope="col">When to use</th></tr></thead><tbody><tr><th scope="row">Q4_K_M</th><td>1.1GB</td><td>The default first download</td></tr><tr><th scope="row">Q8_0</th><td>1.85GB</td><td>When you want a little more quality</td></tr><tr><th scope="row">BF16</th><td>3.47GB</td><td>For conversion and checks</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-2.webp" alt="Model weights, context, tool results, and system headroom sharing a finite shelf" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A 2B model still costs memory, and the context cache often outweighs the weights.</figcaption></figure><section><h2>Serve it with llama.cpp</h2><p>Pull the GGUF and open it with llama-server to get an OpenAI-style API. Set the window with --ctx-size and put the whole model on the GPU on a Mac with --n-gpu-layers 99.</p><div><p><strong>Download and serve</strong></p><pre><code data-guide-code-block="2-0">hf download LiquidAI/LFM3-1.7B-GGUF LFM3-1.7B-Q4_K_M.gguf --local-dir ./lfm3

llama-server -m ./lfm3/LFM3-1.7B-Q4_K_M.gguf \
  --ctx-size 32768 --n-gpu-layers 99 --jinja \
  --temp 0.1 --top-k 50 --repeat-penalty 1.1 \
  --port 8080</code></pre></div><p>Sampling is temperature 0.1, top_k 50 and repetition penalty 1.1 for chat and tool use, and temperature 1.0, top_p 0.95, top_k 20 for maths and science.</p><p>Tool calling under llama.cpp needs --jinja, because the chat template shipped with the model is what injects the schemas and lets the response be read back as a call. If memory runs short, lower --n-gpu-layers and offload part of the model at the cost of slower decoding, so decide first whether to cut context or layers.</p></section><section><h2>Wire it into an agent</h2><p>Pass function schemas through tools and the template emits XML-style calls. Append the result as a tool message and keep sending the schemas on later requests.</p><p>With thousands of tools, defer_loading keeps their definitions out of the prompt until a search tool returns the names. Even a 256K window fills fast if every schema rides along.</p><p>Post-training had harnesses such as Hermes Agent, Pi and OpenClaw in mind, and matching the tool-result shape your harness expects is what keeps the loop stable.</p></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-3.webp" alt="A desk where an agent laptop connects to a local inference server on a separate device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Harness and model can be separate: the laptop calls tools while another machine does the compute.</figcaption></figure><section><h2>Numbers measured on macOS</h2><p>MacPaw compared the two on 65 everyday tasks inside real macOS environments: LFM3-1.7B reached 64 percent task success against 48 percent for Qwen3.5-2B, used 58 percent fewer tokens per task, and got stuck in under 1 percent of attempts where the comparison model hit 15 percent.</p><p>On-device speed came from llama.cpp at Q4_0 with a 32K window: 1.8 to 2.8 times faster decoding than the next model, with the smallest memory footprint, across two phones, a Raspberry Pi 5, an M4 Max and Ryzen AI.</p><p>These are vendor and partner measurements. Matching them locally means matching the quantization and the window, and a different harness moves the success rate.</p></section><section><h2>Where it falls short</h2><p>It is not recommended for agentic coding or complex multi-step reasoning; the model card says so, and SWE-bench Verified lands at 43.40 against 51.20 for Qwen3.5-9B.</p><p>Knowledge is narrow too: Humanity's Last Exam scores 7.17 without tools and 13.90 with search, so fill knowledge by retrieval and let the model judge and call.</p><p>The licence is the LFM Open License v1.0, which is not an open-source licence, so read the commercial terms yourself.</p><table><caption>The comparison published on the model card</caption><thead><tr><th scope="col">Benchmark</th><th scope="col">LFM3-1.7B</th><th scope="col">LFM2.5-2.6B</th><th scope="col">Qwen3.5-9B</th></tr></thead><tbody><tr><th scope="row">LiveClaw (agent)</th><td>45.60</td><td>14.70</td><td>35.77</td></tr><tr><th scope="row">BFCL V4 (tool use)</th><td>71.39</td><td>55.89</td><td>62.83</td></tr><tr><th scope="row">SWE-bench Verified</th><td>43.40</td><td>18.00</td><td>51.20</td></tr><tr><th scope="row">AA-LCR (long context)</th><td>52.83</td><td>6.00</td><td>62.00</td></tr></tbody></table></section><aside><h2>Start with agents</h2><p>Read the harness and tool basics first.</p><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LFM3-1.7B handles text among six 2B-class models. The 4-bit file is 1.1 GB, so a Mac or a phone runs it, and filling 128K of context costs 1.6 GB of cache. It trades blows with 9B models on tool use and long tasks, but coding and knowledge lag.</dd></div><div><dt>How much memory does it need?</dt><dd>Add 1.1 GB of weights to 1.6 GB of cache and you stay under 3 GB, which leaves room on an 8 GB Mac to keep the model loaded while you work.</dd></div><div><dt>When is it better not to choose this?</dt><dd>It is not recommended for agentic coding or complex multi-step reasoning; the model card says so, and SWE-bench Verified lands at 43.40 against 51.20 for Qwen3.5-9B.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The licence is the LFM Open License v1.0, which is not an open-source licence, so read the commercial terms yourself.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>LFM3-Audio-2B: a 1 GB model that listens and speaks</title><link>https://localai.co.kr/en/guides/lfm3-audio-2b-local-voice-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/lfm3-audio-2b-local-voice-guide</guid><description>LFM3-Audio-2B is a 2B model that takes 16 kHz speech in and answers in 24 kHz speech. Its 1.05 GB GGUF, a 50 ms first token and 18 languages including Korean, with conditions.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">LFM3-Audio-2B: a 1 GB model that listens and speaks</h1><p>One model for transcribing and speaking</p><p id="guide-page-summary">LFM3-Audio-2B handles speech and text in one model: transcribe, synthesise, translate and hold a voice conversation, from a 1.05 GB GGUF. Its causal encoder computes while you speak, bringing the first token down to 50 ms.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The GGUF is 1.05 GB and the encoder 0.34 GB.</li><li>It covers 18 languages including Korean.</li><li>It computes while you speak, reaching a 50 ms first token.</li><li>Transcription accuracy trails dedicated models.</li></ol></section><section><h2>A 2B model that listens and speaks</h2><p>Input is text or 16 kHz audio; output is text or 24 kHz speech, and the two can interleave, so an answer can be spoken while the text stays on screen.</p><p>It ships an in-house audio encoder and the LiquidCodec tokenizer. The encoder is fully causal, so it can prefill while you are still speaking, which is where the low latency comes from.</p><p>Speech compresses 80 ms into 12 tokens, so filling 32K with audio alone lasts a little over three minutes and longer meetings need splitting.</p><table><caption>Model at a glance</caption><thead><tr><th scope="col">Model aspect</th><th scope="col">Setting</th></tr></thead><tbody><tr><th scope="row">Input</th><td>Text, 16 kHz audio</td></tr><tr><th scope="row">Output</th><td>Text, 24 kHz audio</td></tr><tr><th scope="row">Context</th><td>32K tokens</td></tr><tr><th scope="row">Speech languages</th><td>18 including Korean</td></tr><tr><th scope="row">Licence</th><td>LFM Open License v1.0</td></tr></tbody></table><ul><li><a href="https://localai.co.kr/en/hardware/mac-studio-m4-max-128gb">Mac Studio M4 Max 128GB baseline</a></li><li><a href="https://localai.co.kr/en/guides/prefill-vs-decode">Prefill vs decode: should you look at TTFT or tok/s?</a></li><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/nemotron-35-transcribe-local-guide">Nemotron 3.5 Transcribe: transcribe an hour-long meeting in one pass</a></li></ul></section><section><h2>Files and memory</h2><p>The GGUF files are 1.05 GB at Q4_0, 1.1 GB at Q4_K_M and 1.85 GB at Q8_0, plus the mmproj audio encoder at 0.34 GB for Q8_0.</p><p>The 4-bit file and the encoder together come to about 1.4 GB, which leaves headroom on an 8 GB Mac with a browser open.</p><p>Loading it in Python through Transformers pulls 4 GB of bf16 weights; the 1.4 GB figure belongs to the GGUF plus encoder path, so mixing the two paths breaks the memory estimate.</p><table><caption>Which file to download</caption><thead><tr><th scope="col">File name</th><th scope="col">File size</th><th scope="col">Encoder alongside</th></tr></thead><tbody><tr><th scope="row">Q4_0</th><td>1.05GB</td><td>mmproj Q8_0 0.34GB</td></tr><tr><th scope="row">Q4_K_M</th><td>1.1GB</td><td>mmproj Q8_0 0.34GB</td></tr><tr><th scope="row">Q8_0</th><td>1.85GB</td><td>mmproj Q8_0 0.34GB</td></tr></tbody></table></section><section><h2>Transcription</h2><p>Name the language in the system prompt, as in `Perform ASR in Korean.`, and it transcribes in that language; write only `Perform ASR.` and the model infers it.</p><p>Live transcription is English-only for now: feed it 0.96 s chunks and text appears while the speaker talks, and past 30 seconds you reopen the text context.</p><p>Batch file transcription and the live stream use different code: the live path passes state into the next call and takes a result per chunk.</p><div><p><strong>Transcription code</strong></p><pre><code data-guide-code-block="2-0">from transformers import AutoModelForMultimodalLM, AutoProcessor

model_id = "LiquidAI/LFM3-Audio-2B"
model = AutoModelForMultimodalLM.from_pretrained(
    model_id, trust_remote_code=True).eval()
processor = AutoProcessor.from_pretrained(
    model_id, trust_remote_code=True)

conversation = [
    {"role": "system", "content": "Perform ASR in Korean."},
    {"role": "user", "content": [{"type": "audio", "audio": "meeting.wav"}]},
]
inputs = processor.apply_chat_template(
    conversation, add_generation_prompt=True,
    tokenize=True, return_dict=True, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=1024,
    suppress_mixed=True, suppress_audio_out=True,
    return_dict_in_generate=True)
text = processor.decode(
    out.sequences[0, inputs["input_ids"].shape[1]:],
    skip_special_tokens=True)
print(text)</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-1.webp" alt="A meeting table with a laptop, microphone, and notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Recording the meeting means transcribing it in one pass; if you need it live, check the language limit first.</figcaption></figure><section><h2>TTS</h2><p>Synthesise by naming the language and voice in the system prompt and pre-filling the assistant turn with `&lt;|audio_start|&gt;`, as in `Perform TTS in American English using a female voice.`.</p><p>Sampling uses audio_temperature 1.0, audio_top_k 128, repetition penalty 1.1 and a 4096 window; for text-only output turn on suppress_mixed and suppress_audio_out.</p><div><p><strong>Synthesis code</strong></p><pre><code data-guide-code-block="3-0">import soundfile as sf

codec = processor.audio_tokenizer.eval()

conversation = [
    {"role": "system", "content": "Perform TTS in Korean using a female voice."},
    {"role": "user", "content": "오늘 회의는 세 시에 시작합니다."},
    {"role": "assistant", "content": "&lt;|audio_start|&gt;"},
]
inputs = processor.apply_chat_template(
    conversation, continue_final_message=True,
    tokenize=True, return_dict=True, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=256,
    audio_temperature=1.0, audio_top_k=128,
    audio_repetition_penalty=1.1, audio_repetition_window=4096,
    return_dict_in_generate=True)
waveform = codec.decode(
    out.audio_codes[:1, :, :out.audio_lengths[0]]).audio_values[0]
sf.write("tts.wav", waveform.float().cpu().numpy(), 24_000)</code></pre></div></section><figure><img src="https://localai.co.kr/guides/speech/tts-qwen-2.webp" alt="A screen displaying two audio tracks beside an audio interface and headphones" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Synthesis quality separates by ear more than by table, so alternate the same sentence against your own recording.</figcaption></figure><section><h2>Latency</h2><p>The causal encoder prefills while you speak, cutting the wait after you stop; the first token can arrive in as little as 50 ms.</p><p>LiquidCodec turns tokens into speech at about 87 times real time on a single M4 Max CPU thread. Because 80 ms compresses into 12 tokens predicted in parallel, generation and playback overlap.</p></section><section><h2>Talk to it and let it call tools</h2><p>Ask out loud and it returns text and speech together, streaming so audio starts before the sentence ends.</p><p>A spoken request can become a tool call: asking to turn off a light produces a structured call, and the result is read back as speech.</p><p>A long tool result means more speech to generate, so a system prompt that keeps answers short pays off directly in latency.</p><p>To wire tools in, put `Respond with function calls, and interleaved text and audio.` in the system prompt and append the tool list; leave the assistant turn empty so the model picks between a call and speech.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-3.webp" alt="A shelf holding a Mac mini, headphones, an external drive and document folders" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A 1 GB model plus a 0.34 GB encoder runs a speech pipeline on a small Mac.</figcaption></figure><section><h2>Where it falls short</h2><p>For transcription alone, dedicated models lead: English WER is 6.23 percent against 5.51 for Voxtral Mini 3B.</p><p>Tool calling at 58.50 trails Gemma 4 E4B at 72.40, and audio understanding at 50.60 trails Qwen2.5-Omni 3B at 54.41.</p><p>What it wins is VoiceBench at 73.13 and synthesis quality at 3.83, which is where the value sits: one model carrying both listening and speaking.</p><table><caption>The comparison published on the model card</caption><thead><tr><th scope="col">Measure</th><th scope="col">LFM3-Audio 2B</th><th scope="col">Qwen2.5-Omni 3B</th><th scope="col">Voxtral Mini 3B</th></tr></thead><tbody><tr><th scope="row">English ASR WER</th><td>6.23%</td><td>6.30%</td><td>5.51%</td></tr><tr><th scope="row">TTS quality UTMOSv2</th><td>3.83</td><td>3.42</td><td>—</td></tr><tr><th scope="row">VoiceBench</th><td>73.13</td><td>66.37</td><td>65.78</td></tr><tr><th scope="row">Audio understanding MMAR</th><td>50.60</td><td>54.41</td><td>50.10</td></tr></tbody></table></section><aside><h2>Comparing speech models</h2><p>Compare synthesis and recognition models under one condition.</p><a href="https://localai.co.kr/en/guides/local-tts-model-comparison">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>LFM3-Audio-2B handles speech and text in one model: transcribe, synthesise, translate and hold a voice conversation, from a 1.05 GB GGUF. Its causal encoder computes while you speak, bringing the first token down to 50 ms.</dd></div><div><dt>How much memory does it need?</dt><dd>The 4-bit file and the encoder together come to about 1.4 GB, which leaves headroom on an 8 GB Mac with a browser open.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Nemotron 3.5 Transcribe: transcribe an hour-long meeting in one pass</title><link>https://localai.co.kr/en/guides/nemotron-35-transcribe-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/nemotron-35-transcribe-local-guide</guid><description>Nemotron 3.5 Transcribe is a 30B-A4B speech LLM that transcribes an hour of audio in one pass and attaches speaker tags and word timestamps. Korean FLEURS CER is 2.78%, and the 4-bit GGUF starts at 19.68 GB.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Nemotron 3.5 Transcribe: transcribe an hour-long meeting in one pass</h1><p>A 30B-A4B speech LLM that attaches speakers and timestamps</p><p id="guide-page-summary">Nemotron 3.5 Transcribe is a speech LLM NVIDIA released on October 28. It covers 40 languages and takes an hour of audio in a 65,536-token window. One pass yields speaker tags and word timestamps, and Korean is reported at 2.78% FLEURS CER. BF16 weighs 67.5 GB, so a 24 GB GPU needs the 19.68 GB 4-bit file.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Feed it an hour of audio once and get speaker tags plus word timestamps.</li><li>Korean is reported at 2.78% FLEURS CER.</li><li>BF16 is 67.5 GB; a 24 GB GPU uses the 19.68 GB 4-bit file.</li><li>It is offline: you hand over a file and wait.</li></ol></section><section><h2>What goes in and what comes out?</h2><p>Nemotron 3.5 Transcribe glues a speech encoder and a speaker encoder onto Nemotron 3.5 Lightning 30B-A3B. It activates 4.3B parameters, takes audio and text, and returns a transcript.</p><p>The window is 65,536 tokens and a recording can run an hour, so meetings and calls go in whole and sentences do not break at the cut.</p><p>Instructions pick the style: verbatim, readable with fillers removed, contextual with an entity list, speaker-tagged, or translated into another language, all from one model.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Local AI speech recognition: transcribe on your own PC</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-asr-vs-whisper">Qwen3-ASR vs Whisper: which local transcription model should you choose?</a></li><li><a href="https://localai.co.kr/en/guides/lfm3-audio-2b-local-voice-guide">LFM3-Audio-2B: a 1 GB model that listens and speaks</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/nemotron-meeting.webp" alt="A wooden meeting table with a central microphone surrounded by four empty chairs" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Hand the whole hour over in one pass and sentences stop breaking in the middle.</figcaption></figure><section><h2>How it differs from the live 0.6B</h2><p>The similarly named Nemotron 3.5 ASR Streaming 0.6B transcribes as people speak in front of a microphone. Transcribe waits for a file, so the two cover different moments.</p><p>If you need captions during the meeting, use the streaming model; this one is not the pick there. Transcribe fits the cleaning up afterwards.</p><p>Running both is reasonable: stream captions during the call, then redo the file with Transcribe for speakers and timing.</p><table><caption>Same family name, different job</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Streaming 0.6B</th><th scope="col">Transcribe 30B-A4B</th></tr></thead><tbody><tr><th scope="row">Parameters</th><td>0.6B</td><td>30B-A4B, 4.3B active</td></tr><tr><th scope="row">Context</th><td>Short chunks</td><td>65,536 tokens, one hour</td></tr><tr><th scope="row">Speaker diarization</th><td>Not on its own</td><td>Speaker tags by instruction</td></tr><tr><th scope="row">Korean</th><td>ko-KR locale</td><td>FLEURS CER 2.78%</td></tr><tr><th scope="row">Runtime</th><td>NeMo-Speech.cpp</td><td>vLLM, Transformers, GGUF</td></tr></tbody></table></section><section><h2>Start with the memory math</h2><p>BF16 weights are 67.5 GB, so the card has to be in the 80 GB class, which is why the official example assumes one H100.</p><p>A 24 GB GPU or a Mac uses a 4-bit GGUF: a 19.68 GB decoder plus a 1.67 GB encoder, about 21.4 GB in all. A 16 GB card drops to the 13.57 GB file, which peaked at 15.6 GiB of GPU memory.</p><p>Every decoder needs the encoder file, and the decoder looks it up by name, so leave that file name alone.</p><table><caption>Files and the hardware they fit</caption><thead><tr><th scope="col">File</th><th scope="col">Size</th><th scope="col">Fits</th></tr></thead><tbody><tr><th scope="row">AD-IQ4_NL</th><td>19.68GB</td><td>24 GB GPU and Mac default</td></tr><tr><th scope="row">AD-IQ4_NL_L</th><td>22.55GB</td><td>32 GB with headroom</td></tr><tr><th scope="row">AD-Q2_0_L</th><td>15.55GB</td><td>24 GB Mac</td></tr><tr><th scope="row">AD-Q2_0_M</th><td>13.57GB</td><td>16GB GPU</td></tr><tr><th scope="row">AD-NVFP4</th><td>19.68GB</td><td>RTX 50, DGX Spark</td></tr><tr><th scope="row">Q8_0</th><td>35.00GB</td><td>48 GB and up</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/cmp170hx-card-workbench.webp" alt="A single data-center accelerator card sits on a workbench beside a magnifier and notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>BF16 runs 67.5 GB, so a 24 GB card drops to 4-bit and pays for it in some languages.</figcaption></figure><section><h2>Run it with NeMo-Speech.cpp</h2><p>You need CMake 3.26 and SentencePiece 0.2.0 or newer; build with the cuda-server preset on NVIDIA and metal-server on Apple silicon.</p><div><p><strong>Build and transcribe</strong></p><pre><code data-guide-code-block="3-0">git clone https://github.com/NVIDIA/NeMo-Speech.cpp &amp;&amp; cd NeMo-Speech.cpp
git submodule update --init --depth 1 llama.cpp third_party/cpp-httplib

# NVIDIA
scripts/configure.sh cuda-server &amp;&amp; cmake --build --preset cuda-server
# Apple silicon
scripts/configure.sh metal-server &amp;&amp; cmake --build --preset metal-server

hf download AtomicChat/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-GGUF --local-dir models \
  --include "*Encoder-F16.gguf" --include "*AD-IQ4_NL.gguf"

build/cuda-server/bin/nemo-speech transcribe meeting.wav --json \
  --model models/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-AD-IQ4_NL.gguf</code></pre></div><p>The JSON carries a timestamp per word, and --format srt writes subtitles straight out.</p><p>On a Mac use build/metal-server/bin/nemo-speech; only the binary path changes, not the options.</p></section><section><h2>Pull speakers and timing</h2><p>For speaker tags, put a line such as Put speaker tags on the transcription. into the instruction, and on the Transformers path pass that prompt to apply_transcription_request.</p><p>Word timing comes from return_word_timestamp_logits and align_word_timestamps, which put a start and end on each span together with the speaker.</p><p>Speaker labels separate voices inside one recording; they do not tell you who the person actually is.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-meeting-2.webp" alt="A laptop with three colored audio tracks beside matching notebooks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Speaker labels separate voices, not identities; naming them is still your job.</figcaption></figure><section><h2>How to read the numbers</h2><p>On the English Open ASR Leaderboard the nine-set mean WER is 4.71 percent, and the multilingual mean is 4.62 percent.</p><p>On meeting audio with overlapping speech the mean cpWER is 15.80, below the 16.83 of the next published combination, DiCoW v3.3 with DiariZen.</p><p>The Korean figure of 2.78 percent is the original BF16 model. No published table covers the Korean drop at 4 bits, so check it against your own recording.</p><table><caption>The comparison published on the model card</caption><thead><tr><th scope="col">Measure</th><th scope="col">Result</th><th scope="col">Next published</th></tr></thead><tbody><tr><th scope="row">Meeting cpWER (AMI and others)</th><td>15.80</td><td>DiCoW v3.3+DiariZen 16.83</td></tr><tr><th scope="row">Preference-ASR WER, default</th><td>7.56</td><td>Canary-Qwen 8.16</td></tr><tr><th scope="row">Preference-ASR WER, instructed</th><td>6.16</td><td>Canary-Qwen 8.36</td></tr><tr><th scope="row">English Open ASR mean WER</th><td>4.71</td><td>—</td></tr><tr><th scope="row">Multilingual Open ASR mean WER</th><td>4.62</td><td>—</td></tr><tr><th scope="row">FLEURS Korean CER</th><td>2.78</td><td>—</td></tr></tbody></table></section><section><h2>Where it falls short</h2><p>It does not stream. The card calls it an offline model and says plainly that internal chunking is not streaming.</p><p>The 13.57 GB file for 16 GB cards costs 1.5 points of Chinese CER, and other languages can take a hit as you shrink further.</p><p>Official support covers Linux and Windows; on a Mac only the GGUF and Metal route runs. The licence is OpenMDW-1.1, so read the commercial terms yourself.</p></section><aside><h2>Transcription basics</h2><p>Start with the flow from audio file to transcript.</p><a href="https://localai.co.kr/en/guides/local-asr-transcription-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Nemotron 3.5 Transcribe is a speech LLM NVIDIA released on October 28. It covers 40 languages and takes an hour of audio in a 65,536-token window. One pass yields speaker tags and word timestamps, and Korean is reported at 2.78% FLEURS CER. BF16 weighs 67.5 GB, so a 24 GB GPU needs the 19.68 GB 4-bit file.</dd></div><div><dt>How much memory does it need?</dt><dd>BF16 weights are 67.5 GB, so the card has to be in the 80 GB class, which is why the official example assumes one H100.</dd></div><div><dt>When is it better not to choose this?</dt><dd>If you need captions during the meeting, use the streaming model; this one is not the pick there. Transcribe fits the cleaning up afterwards.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>Official support covers Linux and Windows; on a Mac only the GGUF and Metal route runs. The licence is OpenMDW-1.1, so read the commercial terms yourself.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Unsloth Browser Use: hand a browser to your local model</title><link>https://localai.co.kr/en/guides/unsloth-browser-use-local-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/unsloth-browser-use-local-guide</guid><description>Browser Use in Unsloth Desktop lets a local model open pages, press buttons and fill forms in a pane beside the chat. Sign-ins, payments and downloads wait for approval, and permissions are set per site.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Unsloth Browser Use: hand a browser to your local model</h1><p>A tool-calling model opens pages and fills forms</p><p id="guide-page-summary">Browser Use hands one browser tab to a local model. The model needs tool calling, and a vision model can also read screenshots. Payments and sign-ins do not proceed without approval, and localhost or file:// addresses do not open.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Any tool-calling model can drive the browser locally.</li><li>Sign-ins, payments and downloads wait for approval by default.</li><li>Localhost and file:// addresses do not open.</li><li>Only a vision model reads images and charts.</li></ol></section><section><h2>A local model holding the browser</h2><p>Browser Use opens a browser pane beside the chat and lets the model move through pages and press buttons inside it. Any model that supports tool calling works locally.</p><p>A vision-capable model also reads screenshots; without vision it cannot see images or charts that the page text does not carry.</p><p>You can attach a cloud model too, but the reason to use a local one is that page content stays on the machine.</p><ul><li><a href="https://localai.co.kr/en/guides/gguf-vs-mlx">GGUF vs MLX: which model format should you download?</a></li><li><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Running several coding agents at once on a Mac with Locals</a></li><li><a href="https://localai.co.kr/en/guides/omlx-mac-serving-guide">Run local AI on a Mac with oMLX: what is new in 0.7.1rc1?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="A small robot device connected to browser, calendar, and message panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model sees one tab of its own; your Chrome tabs stay untouched.</figcaption></figure><section><h2>Which model to attach</h2><p>Browser Use does not pin a model. It needs tool calling and enough memory to load, but in practice the model that calls tools reliably wins.</p><p>The documentation uses Qwen3.8 27B, but an 8 GB machine of memory should start with a 2B or 4B tool-calling model, and pick a vision model if it has to read images on screen.</p><p>Four-bit is enough. Browser work is many short calls rather than one long context, so a faster file beats a larger context window.</p></section><section><h2>What works and what does not</h2><p>Reading pages, following links, clicking labelled buttons and filling forms work with a text model; images and charts need vision.</p><p>Passwords and payment details cannot be filled by the model, and uploads are blocked, so sensitive input stays with the person.</p><table><caption>What each model type can do</caption><thead><tr><th scope="col">Workload</th><th scope="col">Text model</th><th scope="col">Vision model</th></tr></thead><tbody><tr><th scope="row">Read pages and follow links</th><td>Works</td><td>Works</td></tr><tr><th scope="row">Click a labelled button</th><td>Works</td><td>Works</td></tr><tr><th scope="row">Inspect images and charts</th><td>No</td><td>Works via screenshot</td></tr><tr><th scope="row">Enter passwords or payment details</th><td>Person only</td><td>Person only</td></tr><tr><th scope="row">Upload a file</th><td>No</td><td>No</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/images/guides/transformers-js-browser-local-inference-guide-1.webp" alt="A laptop on a desk showing a browser window running Transformers.js with an ONNX model" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Running a model in the browser and driving the browser are different things; this is the second one.</figcaption></figure><section><h2>Install it and switch it on</h2><p>Install the desktop app with brew on a Mac or winget on Windows; Linux and WSL use the install script.</p><div><p><strong>Install commands</strong></p><pre><code data-guide-code-block="3-0">brew install --cask unsloth
winget install id UnslothAI.Unsloth
curl -fsSL https://unsloth.ai/install.sh | sh</code></pre></div><p>Pick a tool-calling model in the model hub and download a quantization that fits the machine, then turn on Browser use from the menu beside the chat input.</p></section><section><h2>Set permissions first</h2><p>Permissions live under Settings and Browser; start with the narrow default and open exceptions only for sites you use often.</p><p>Full access skips several approval prompts. Blocked sites and downloads stay blocked and scripts still ask, but fewer checks means you should enable it only for the task at hand.</p><table><caption>What the browser settings control</caption><thead><tr><th scope="col">Setting</th><th scope="col">What it controls</th><th scope="col">Values you can pick</th></tr></thead><tbody><tr><th scope="row">Browsing</th><td>Which sites the model may open</td><td>Allow, ask, block</td></tr><tr><th scope="row">Actions</th><td>Approval before sign-in, sending or buying</td><td>Always ask, full access</td></tr><tr><th scope="row">Downloads</th><td>Allow, ask or block</td><td>Allow, ask, block</td></tr><tr><th scope="row">Unlabelled clicks</th><td>Clicks on areas without a named control</td><td>Block, allow</td></tr><tr><th scope="row">History</th><td>Whether the model reads your history</td><td>Ask first, always allow, never</td></tr><tr><th scope="row">Scripts</th><td>Approved each time</td><td>Ask each time, never run</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-1.webp" alt="A robot with a laptop beside an open cabinet of keys and a sleeping cat" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave payments and sign-ins to the human; the approval prompt is the last line of defence.</figcaption></figure><section><h2>Where it gets stuck</h2><p>The model stays inside its own tab and cannot drive tabs open in Chrome or Safari, so paste the URL into the chat and let it reopen there.</p><p>Localhost, private-network and file:// addresses are not valid targets; only public HTTP and HTTPS pages open.</p><table><caption>Symptom and cause</caption><thead><tr><th scope="col">Symptom</th><th scope="col">Cause</th><th scope="col">Fix</th></tr></thead><tbody><tr><th scope="row">Browser use is unavailable</th><td>A model without tool calling, or a mobile or comparison layout</td><td>Switch to a tool-calling model in the regular chat view</td></tr><tr><th scope="row">It describes actions but does not run them</th><td>Browser use is off</td><td>Ask for one concrete action at a time</td></tr><tr><th scope="row">Part of a page does not work</th><td>Embedded content or a captcha</td><td>Stop, handle it yourself, then continue</td></tr><tr><th scope="row">A local page will not open</th><td>Localhost and file:// are blocked</td><td>Move it to a public URL or open it as an attachment</td></tr></tbody></table></section><section><h2>Where it falls short</h2><p>Models with shaky tool calling stall halfway, and the more complex the page the more you should avoid asking for several actions at once.</p><p>Captchas, embedded widgets and canvas dragging fail easily, so do not use it to automate payments or sign-ins.</p><p>It is a feature inside one app, so a UI change changes the steps; running browser automation on a server needs something like Playwright, so this app is not the pick there.</p><p>Summarising a page and operating it are different jobs; if you only need a summary, pasting the URL into the chat is faster than handing over the browser.</p><p>The app is free but model licences are separate; check the commercial terms on each model card.</p></section><aside><h2>Agent basics</h2><p>Start with how far a model holding tools can go.</p><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Browser Use hands one browser tab to a local model. The model needs tool calling, and a vision model can also read screenshots. Payments and sign-ins do not proceed without approval, and localhost or file:// addresses do not open.</dd></div><div><dt>How much memory does it need?</dt><dd>The documentation uses Qwen3.8 27B, but an 8 GB machine of memory should start with a 2B or 4B tool-calling model, and pick a vision model if it has to read images on screen.</dd></div><div><dt>When is it better not to choose this?</dt><dd>It is a feature inside one app, so a UI change changes the steps; running browser automation on a server needs something like Playwright, so this app is not the pick there.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The app is free but model licences are separate; check the commercial terms on each model card.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Orca Connect: attach your own GPU to Claude Code</title><link>https://localai.co.kr/en/guides/orca-connect-local-gpu-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/orca-connect-local-gpu-guide</guid><description>Orca Connect publishes the models on your machine through a single outbound connection, and coding agents call them with the key they already use. Spillover is off by default, and prompts still pass through the router.</description><content:encoded><![CDATA[<header><p>Purchases and Costs</p><h1 id="guide-page-title">Orca Connect: attach your own GPU to Claude Code</h1><p>One outbound connection, spillover off by default</p><p id="guide-page-summary">Orca Connect publishes your home GPU into the OrcaRouter catalogue as local/your-rig/your-model. It opens one outbound connection with no port forwarding, and a local-only key blocks hosted billing. Prompts still pass through the router, and the free tier is a current condition, not a promise.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>One outbound connection puts your model in the catalogue.</li><li>Spillover starts off; only once enabled does a request fall through to hosted models.</li><li>A local-only key never reaches a hosted model.</li><li>Prompts still travel through the router.</li></ol></section><section><h2>What actually changes</h2><p>Run the connector on your machine and it finds the local runtimes, then lets you pick which models to share. They appear in the catalogue as local/your-rig/your-model.</p><p>Callers keep using the key and endpoint they already have; from a laptop or a phone the request still reaches your machine through the router.</p><p>There is no port forwarding, no tunnel to configure and no new firewall rule, and nothing is exposed until you pick a model to share.</p><p>The connector only shares models already loaded in that machine's memory, so a 24 GB box lists whatever fits inside 24 GB.</p><ul><li><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">I Have an RTX 3090—Should I Upgrade My Graphics Card for Local AI?</a></li><li><a href="https://localai.co.kr/en/guides/mac-mini-24gb-vs-32gb-local-ai">Mac mini 24GB or 32GB: is more memory worth it for local AI?</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-hardware">Choosing local LLM hardware: memory, speed and power</a></li></ul></section><figure><img src="https://localai.co.kr/guides/hermes-agent-local-guide-scene-3.webp" alt="A desk where an agent laptop connects to a local inference server on a separate device" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The laptop only sends requests; the model runs on the machine under the desk, and that machine opens the connection outward.</figcaption></figure><section><h2>Spillover starts switched off</h2><p>With spillover on, a hosted model answers only for the reasons you allowed, only the model you picked, and only within the monthly cap. With it off, none of that happens.</p><p>Response headers record where the work ran: X-Orca-Billed: false for your hardware, and a reason plus expected cost when a hosted model took over.</p><table><caption>What spillover records</caption><thead><tr><th scope="col">Situation</th><th scope="col">Response</th><th scope="col">Billing</th></tr></thead><tbody><tr><th scope="row">Your machine answered</th><td>X-Orca-Billed: false</td><td>KRW 0</td></tr><tr><th scope="row">Machine off, spillover off</th><td>503 local_connector:unavailable</td><td>None</td></tr><tr><th scope="row">Machine off, spillover on</th><td>X-Orca-Spillover-Reason: rig_offline</td><td>Hosted rate</td></tr><tr><th scope="row">Monthly cap reached</th><td>Refusal</td><td>None</td></tr></tbody></table></section><section><h2>Point a coding agent at your machine</h2><p>Running orca-connect claude starts Claude Code against your model for that session only, leaving the agent's own configuration alone.</p><p>Swap claude for codex, opencode, gemini, qwen, kimi, copilot, aider, goose or pi and the matching CLI sees your model the same way.</p><table><caption>Which CLI each command launches</caption><thead><tr><th scope="col">Command</th><th scope="col">CLI it launches</th><th scope="col">When to use</th></tr></thead><tbody><tr><th scope="row">orca-connect claude</th><td>Claude Code</td><td>You already use Claude Code</td></tr><tr><th scope="row">orca-connect codex</th><td>Codex CLI</td><td>Long terminal sessions</td></tr><tr><th scope="row">orca-connect aider</th><td>Aider</td><td>File-by-file edits</td></tr><tr><th scope="row">orca-connect goose</th><td>Goose</td><td>Tool-heavy workflows</td></tr></tbody></table></section><section><h2>Prompts still cross the router</h2><p>A key marked local-only keeps inference off hosted models and blocks billing, but the request itself still travels through OrcaRouter.</p><p>The distinction matters because where inference runs and where data travels are different questions; if you handle page content or internal documents, settle this first.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-hardware-guide-scene-3.webp" alt="An always-on server corner with airflow, wired network, backup power, and a maintenance notebook" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A machine you call from outside has to stay awake; settle sleep and reboot policy first.</figcaption></figure><section><h2>Install and share once</h2><p>Install the connector and approve the machine once in a browser; a headless server approves with a code instead.</p><p>orca-connect status lists the runtimes it found, and the console is where you pick which to share; the tray or orca-connect expose handles the first pick.</p><div><p><strong>Check status</strong></p><pre><code data-guide-code-block="4-0">orca-connect status
orca-connect expose</code></pre></div></section><figure><img src="https://localai.co.kr/guides/release-server-model-chassis.webp" alt="A rack of cable-connected server equipment beside a laptop" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The point is not opening a port: no inbound means no extra firewall rule.</figcaption></figure><section><h2>Where it falls short</h2><p>It is a commercial service. It is free today, but pricing and terms can change, so check them before putting it into a workflow.</p><p>The machine has to be awake with a live connection; sleep or a reboot makes outside calls fail.</p><p>For same-room use a plain LAN server is faster and simpler, so this connector is not a LAN replacement; it pays off when you call from outside.</p><p>The licence of a shared model is your responsibility; check the commercial terms on its model card.</p></section><aside><h2>Turn a Mac into an agent server</h2><p>Start with the local model-server setup inside your network.</p><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Read next</a></aside><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Orca Connect publishes your home GPU into the OrcaRouter catalogue as local/your-rig/your-model. It opens one outbound connection with no port forwarding, and a local-only key blocks hosted billing. Prompts still pass through the router, and the free tier is a current condition, not a promise.</dd></div><div><dt>How much memory does it need?</dt><dd>The connector only shares models already loaded in that machine's memory, so a 24 GB box lists whatever fits inside 24 GB.</dd></div><div><dt>When is it better not to choose this?</dt><dd>For same-room use a plain LAN server is faster and simpler, so this connector is not a LAN replacement; it pays off when you call from outside.</dd></div><div><dt>Where can you check the conditions and sources?</dt><dd>The licence of a shared model is your responsibility; check the commercial terms on its model card.</dd></div></dl></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Building a Korean RAG index with Kakao's Kanana-2 3B embedding</title><link>https://localai.co.kr/en/guides/kanana-2-3b-embedding-korean-rag-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/kanana-2-3b-embedding-korean-rag-guide</guid><description>2,560 dimensions, 4,096 tokens, and MRL down to 128 dimensions. We compare the Korean retrieval scores, calculate vector storage, and index documents on a Mac.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Building a Korean RAG index with Kakao's Kanana-2 3B embedding</h1><p>It leads on Korean retrieval, and you can cut vectors to 128 dimensions.</p><p id="guide-page-summary">We use the retrieval scores on the model card and the weight and vector math to pick a configuration that fits a Mac, then index documents with sentence-transformers.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The 3B model outputs 2,560 dimensions, the 1.3B model 1,280, and both accept 4,096 tokens at once.</li><li>MRL truncation to 1,024, 512, 256, or 128 dimensions cuts storage by up to twenty times.</li><li>It leads on Korean retrieval, while Qwen3-Embedding-4B scores higher on English MTEB.</li></ol></section><section><h2>An embedding model places questions and passages in one space</h2><p>Kanana-2 embedding is a Korean and English retrieval model Kakao released on October 29, 2026. It turns each document passage and each user question into a numeric vector, then returns passages whose vectors sit closest to the question. The 3B model outputs 2,560 dimensions, the 1.3B model 1,280, and both accept up to 4,096 tokens at once.</p><p>Kakao converted the Kanana-2 SLM to bidirectional attention and pools the token outputs into one vector by averaging. It does not write the next token like a generative model; it reads the whole input once and returns a vector, which is what retrieval, RAG, and similarity scoring need.</p><ul><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/local-embedding-reranker-pdf-guide">Add embeddings and a reranker to Korean PDF search</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-chunks.webp" alt="An illustration of one long document split into several smaller cards laid out on a desk" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Split documents into passage cards, then return the cards closest to the question vector.</figcaption></figure><section><h2>How high are the Korean retrieval scores?</h2><p>The MTEB numbers were measured without any task prompt, feeding raw text. On nano-BEIR (ko) the 3B model averages 0.6088 and the 1.3B model 0.5866; across the six Korean retrieval tasks (Ko-Retrieval) the 3B model averages 0.8211. In the same table Qwen3-Embedding-4B scored 0.5522 and 0.7837, and Qwen3-Embedding-0.6B scored 0.4845 and 0.7279.</p><p>English ranks differently. On MTEB (eng, v2), Qwen3-Embedding-4B scores 0.6661 against 0.6317 for the 3B Kanana model. Which model you pick depends on whether your corpus is mostly Korean or carries a large English share.</p><table><caption>MTEB scores from the model card (raw text, no task prompt, full dimensions)</caption><thead><tr><th scope="col">Model</th><th scope="col">nano-BEIR(ko)</th><th scope="col">Ko-Retrieval</th><th scope="col">MTEB(eng v2)</th></tr></thead><tbody><tr><th scope="row">kanana-2-3b-embedding</th><td>0.6088</td><td>0.8211</td><td>0.6317</td></tr><tr><th scope="row">kanana-2-1.3b-embedding</th><td>0.5866</td><td>0.7958</td><td>0.6197</td></tr><tr><th scope="row">Qwen3-Embedding-4B</th><td>0.5522</td><td>0.7837</td><td>0.6661</td></tr><tr><th scope="row">Qwen3-Embedding-0.6B</th><td>0.4845</td><td>0.7279</td><td>0.6311</td></tr><tr><th scope="row">EmbeddingGemma-300m</th><td>0.4564</td><td>0.7295</td><td>0.6247</td></tr></tbody></table></section><section><h2>Truncating to 128 dimensions cuts storage twentyfold</h2><p>Matryoshka representation learning (MRL) trains the model so that a prefix of the vector still retrieves well. The 3B model can be truncated to 1,024, 512, 256, or 128 dimensions, and at 256 dimensions it still holds 0.5683 on nano-BEIR (ko) and 0.7873 on Ko-Retrieval.</p><p>Storage is the dimension count times four bytes. A 2,560-dimension vector costs 10,240 bytes per passage, so 100,000 passages take about 1.0 GB. At 256 dimensions the same passages take 102 MB, a tenth of that, and at 128 dimensions 51 MB, a twentieth. The same disk holds ten to twenty times as many passages.</p><table><caption>Vector storage by passage count at float32 (text and index overhead excluded)</caption><thead><tr><th scope="col">Dimensions</th><th scope="col">10k passages</th><th scope="col">100k passages</th></tr></thead><tbody><tr><th scope="row">2,560</th><td>102MB</td><td>1.0GB</td></tr><tr><th scope="row">1,024</th><td>41MB</td><td>410MB</td></tr><tr><th scope="row">512</th><td>20MB</td><td>205MB</td></tr><tr><th scope="row">256</th><td>10MB</td><td>102MB</td></tr><tr><th scope="row">128</th><td>5MB</td><td>51MB</td></tr></tbody></table></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-overview.webp" alt="An illustration of document stacks and several cards on a desk, with arrows running from one card to another" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting passages below 4,096 tokens at index time keeps retrieval stable.</figcaption></figure><section><h2>Indexing documents on a Mac</h2><p>Load the model with sentence-transformers and pass 256 as truncate_dim to truncate in one step. On Apple Silicon, set device to mps to use the GPU. The first run downloads the weights, so the 3B model needs roughly 6 GB of disk and memory.</p><p>Split passages so none exceeds 4,096 tokens, and use the same model and dimension for questions and passages. Rank by cosine similarity, then re-score the top candidates with a reranker if you need more precision. Record the model name and dimension in the index file so vectors from different runs never get mixed.</p><div><p><strong>index.py</strong></p><pre><code data-guide-code-block="3-0">from sentence_transformers import SentenceTransformer

model = SentenceTransformer(
    "kakaocorp/kanana-2-3b-embedding",
    trust_remote_code=True,
    truncate_dim=256,
    device="mps",
)
vectors = model.encode(chunks, batch_size=8, normalize_embeddings=True)
print(vectors.shape)  # (문단 수, 256)</code></pre><p><small>On a Mac set device to mps; change only truncate_dim to switch dimensions.</small></p></div></section><section><h2>License and limits</h2><p>The weights ship under the Kanana Open License. Running your own service is allowed, but reselling access through an API, or selling the model as part of SI or on-device products, needs a separate commercial license from Kakao. Any redistribution must carry the "Powered by Kanana" notice and a copy of the license.</p><p>The 3B model is about 6 GB of bf16 weights, which leaves room on a 16 GB Mac, but vectors and source text take more memory as the corpus grows. If English dominates your corpus, compare it with the higher-MTEB model on the same questions; if Korean document search is the main job, build an index with this model first and check whether the right passages come back on top.</p><ul><li><a href="https://huggingface.co/kakaocorp/kanana-2-3b-embedding">Kanana-2 3B embedding model card</a></li><li><a href="https://huggingface.co/kakaocorp/kanana-2-1.3b-embedding">Kanana-2 1.3B embedding model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/eval-speed-quality.webp" alt="Two computers compare document indexing and retrieval results" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Use the same model and dimension for the index and the question to compare scores.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>We use the retrieval scores on the model card and the weight and vector math to pick a configuration that fits a Mac, then index documents with sentence-transformers.</dd></div><div><dt>How much memory does it need?</dt><dd>Load the model with sentence-transformers and pass 256 as truncate_dim to truncate in one step. On Apple Silicon, set device to mps to use the GPU. The first run downloads the weights, so the 3B model needs roughly 6 GB of disk and memory.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Let an AI answer your phone on a Mac: installing ai-phone and choosing 4B or 9B</title><link>https://localai.co.kr/en/guides/ai-phone-mac-local-call-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ai-phone-mac-local-call-agent-guide</guid><description>A Mac-only agent that answers SIP calls and talks with a local model. We cover the model choice at 8, 16, and 32 GB, the install steps, and the measured call latency conditions.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Let an AI answer your phone on a Mac: installing ai-phone and choosing 4B or 9B</h1><p>Memory decides the model: 4B at 16 GB, 9B at 32 GB.</p><p id="guide-page-summary">On Apple Silicon the speech recognition and synthesis run locally through MLX, and only the call text reaches the model. Setup picks the model from detected memory, and the latest local run measured a 1.50 s median first-audible response.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>It runs only on Apple Silicon Macs, and speech recognition and synthesis stay local through MLX.</li><li>Setup recommends a model from detected memory: 2B at 8 GB, 4B at 16 GB, 9B at 32 GB.</li><li>The latest local call measured a 1.50 s median to first audio, short of the one-second target.</li></ol></section><section><h2>The Mac answers the call and keeps the conversation going</h2><p>ai-phone lets a Mac answer SIP calls and hold the conversation. Speech recognition turns the caller's words into text, a language model decides the reply, and speech synthesis reads it back. Those three steps repeat for the length of the call.</p><p>Speech recognition uses Parakeet and synthesis uses Phonon or Kokoro, both through MLX. Only the model that writes the replies is selectable: a local MLX model, a Claude Code or Codex subscription, or an OpenAI-compatible endpoint. Choosing a remote model sends the call text and instructions to that provider.</p><ul><li><a href="https://localai.co.kr/en/guides/liquid-d1-local-decision-guide">Can you run a Jev-like decision model on your PC? A guide to d1-3B and d1-omni</a></li><li><a href="https://localai.co.kr/en/guides/clef-local-decision-guide">Can you run Cloudflare Clef locally? Choose 27B or 9B and send a SystemOne request</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-2.webp" alt="Lines connect a compact computer to a browser, calendar, and chat window" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>One call runs recognition, the model, and synthesis in sequence.</figcaption></figure><section><h2>You need a Mac and a SIP line</h2><p>You need an Apple Silicon Mac with Git, Homebrew, and uv. The installer prepares the Python packages and the native SIP library. Intel Macs, Linux, and Windows are not supported.</p><p>Receiving calls needs a SIP address, a SIP trunk, or a Telnyx or Twilio account. The other side can use an ordinary phone; the call still connects over SIP and the carrier charges apply. For outgoing calls only, start the program when needed and stop it afterwards.</p></section><section><h2>Installing and choosing the model</h2><p>Clone the repository, run the install script, then start setup. Setup asks whether the Mac should receive or place calls, which line and voice to use, and recommends a model for the detected memory before downloading the weights. The model files take several gigabytes.</p><p>The default is the 4B model; the 9B option uses more memory. An 8 GB Mac is offered the 2B model. Running setup again changes the line, voice, or model, and the daemon must be restarted afterwards.</p><table><caption>Suggested model by memory size</caption><thead><tr><th scope="col">Memory</th><th scope="col">Suggested model</th><th scope="col">Use</th></tr></thead><tbody><tr><th scope="row">8GB</th><td>2B</td><td>Short calls on a tight machine</td></tr><tr><th scope="row">16GB</th><td>4B (default)</td><td>Default setup</td></tr><tr><th scope="row">32GB</th><td>9B</td><td>Longer calls, better phrasing</td></tr></tbody></table><div><p><strong>install</strong></p><pre><code data-guide-code-block="2-0">git clone https://github.com/oxnw/ai-phone.git
cd ai-phone
./scripts/install.sh
uv run ai-phone setup
uv run ai-phone run</code></pre><p><small>Choose the line and model in setup, then start listening with run.</small></p></div></section><section><h2>Placing and receiving calls</h2><p>An outgoing call starts with one prompt, and the transcript comes back when the call ends. Every outgoing call opens with a disclosure that an AI is speaking.</p><p>Relay mode lets an agent drive each turn itself: connect with call, then alternate say and listen, which works without any model in the loop. An unanswered relay turn ends after 25 seconds.</p><div><p><strong>call</strong></p><pre><code data-guide-code-block="3-0">uv run ai-phone call +15555550100 --json \
  --prompt "Ask whether they have a table for two at eight tonight."</code></pre><p><small>Include the country code in the number, and put the purpose of the call in the prompt.</small></p></div></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person at a laptop is surrounded by connected document, spreadsheet, folder, image, settings, and robot panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Setup picks the model from detected memory, so choose the Mac by memory first.</figcaption></figure><section><h2>A 1.50 s median to first audio, short of the one-second target</h2><p>The latest local call measurement for this project put the median first-audible response at 1.50 s. It ran under heavy memory pressure and missed the one-second target. The figure covers the time from the end of the caller's speech through model generation and synthesis to playback.</p><p>Call latency tracks model size and available memory. A 9B model on a 32 GB Mac improves phrasing but can delay the first audio. For short booking or confirmation calls, start with 4B and measure latency on real calls.</p></section><section><h2>English calls only, one at a time</h2><p>Support currently covers English and a single call at a time. Korean calls would need the recognition, synthesis, and the model all swapped to Korean, and this project does not offer that setup out of the box.</p><p>The code is AGPL-3.0-or-later, and the bundled PJSIP interface files are GPLv2-or-later. Carrier charges and subscription limits apply separately. Keeping the line open means leaving the Mac on with the daemon running.</p><ul><li><a href="https://github.com/oxnw/ai-phone">ai-phone repository</a></li><li><a href="https://github.com/oxnw/ai-phone/blob/main/docs/usage.md">Usage guide and CLI reference</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-3.webp" alt="A user looks at progress indicators and a document-processing window on a desktop computer" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>After changing the line or model, restart the daemon for it to apply.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>On Apple Silicon the speech recognition and synthesis run locally through MLX, and only the call text reaches the model. Setup picks the model from detected memory, and the latest local run measured a 1.50 s median first-audible response.</dd></div><div><dt>How much memory does it need?</dt><dd>Clone the repository, run the install script, then start setup. Setup asks whether the Mac should receive or place calls, which line and voice to use, and recommends a model for the detected memory before downloading the weights. The model files take several gigabytes.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A real-time voice assistant at home on an AMD Radeon: Ming Voice and its 20 GB VRAM budget</title><link>https://localai.co.kr/en/guides/ming-voice-amd-local-voice-assistant-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/ming-voice-amd-local-voice-assistant-guide</guid><description>A local voice assistant that starts answering 0.23 s after you stop talking. We cover running it on a 16 GB card with int8 experts and why it does not run on a Mac.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">A real-time voice assistant at home on an AMD Radeon: Ming Voice and its 20 GB VRAM budget</h1><p>24 GB for bf16, 16 GB with int8 experts; below that the model does not fit.</p><p id="guide-page-summary">Ming-3.0-audio-tiny is a 9.3B MoE model that answers speech with speech. We cover the 20.5 GB bf16 and 12.5 GB int8 splits, the conditions behind the 0.23 s figure, the install commands, and the Home Assistant link.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Ming-3.0-audio-tiny is a 9.3B MoE with 2.7B active parameters and takes 20.5 GB of VRAM in bf16.</li><li>On cards under 23 GB the expert layers go up in int8, cutting the footprint to 12.5 GB.</li><li>The 0.23 s figure was measured on a Radeon 7900 XTX 24 GB at bf16.</li></ol></section><section><h2>It answers with speech as soon as you stop</h2><p>Ming Voice answers out loud when you speak into a microphone. Instead of chaining separate recognition, language, and synthesis models, it loads one speech-in, speech-out model, Ming-3.0-audio-tiny, onto the GPU and runs the conversation through it.</p><p>Smart Turn v3 decides whether you have finished from intonation and wording. If you keep talking after the answer starts, it withdraws that answer and treats everything as one turn. On speakerphone it filters out its own voice and stops only for yours.</p><ul><li><a href="https://localai.co.kr/en/guides/moe-vs-dense">MoE vs dense: why low active parameters still need memory</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/mlx-audio-local-speech-toolkit-guide">mlx-audio: TTS and STT from a single install</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Microphone and speaker attach to one GPU that runs the whole conversation.</figcaption></figure><section><h2>VRAM decides which precision fits</h2><p>The model is an MoE with 9.3B parameters in total and 2.7B active. Even so, the bf16 weights take 20.5 GB, which calls for a 24 GB card. On cards under 23 GB, the int8 expert path brings the footprint down to 12.5 GB.</p><p>A 12 GB card or laptop integrated graphics cannot hold it. Supported cards are Radeon RX 6800 and newer, and RTX 30 series and newer. At 16 GB the remaining headroom after the display, driver, and other apps is thin, so running it alongside a game or video export is difficult.</p><table><caption>VRAM use and the card each precision needs</caption><thead><tr><th scope="col">Precision</th><th scope="col">VRAM</th><th scope="col">Card</th></tr></thead><tbody><tr><th scope="row">bf16</th><td>20.5GB</td><td>24GB</td></tr><tr><th scope="row">int8 experts</th><td>12.5GB</td><td>16GB</td></tr></tbody></table></section><section><h2>Install on WSL2 or Linux</h2><p>On Linux the installer runs from one command. It sets up Python and PyTorch for your card and downloads the 20 GB model. You do not install ROCm separately; PyTorch brings 7.2 with it. On Windows, run the installer from PowerShell and it prepares WSL2 as well.</p><p>The weights are about a 20 GB download, and install plus caches use roughly 30 GB of disk. The first launch after install spends one to two minutes compiling kernels; later launches load the model in about 30 seconds. After that you start talking from the browser.</p><div><p><strong>install (Linux / WSL2)</strong></p><pre><code data-guide-code-block="2-0"># Linux / WSL2
curl -fsSL https://raw.githubusercontent.com/JMS1717/ming-voice/main/install.sh | bash

# Windows 11 (PowerShell)
irm https://raw.githubusercontent.com/JMS1717/ming-voice/main/install.ps1 | iex</code></pre><p><small>The installer sets up Python, PyTorch, and the 20 GB model.</small></p></div></section><section><h2>What conditions produced 0.23 s?</h2><p>The project author measured it on a Radeon RX 7900 XTX with 24 GB. The median from end of speech to first audio was 0.23 s. The reply is written during the 0.2 s end-of-turn pause and is ready to play when that pause ends.</p><p>Do not expect the same figure on the int8 path of a 16 GB card. Lower precision lightens the math, but card generation and driver change the result a lot. Measure the time to first audio on your own machine, and shorten replies if it passes a second.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker sit on a desk by a window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>If VRAM is short the model will not load, so check the card first.</figcaption></figure><section><h2>Connecting the devices in your home</h2><p>Connecting Home Assistant lets you control lights, plugs, music, and climate by voice. Commands like "turn off the living room lights" go straight through without the model, and scheduled versions work too. Jellyfin playback connects the same way.</p><p>Other apps can reach it through the OpenAI-compatible API or the Wyoming bridge. With tools on, only search terms and place names leave the machine; turn tools off and it runs fully offline. The audio itself never leaves.</p></section><section><h2>It does not run on a Mac</h2><p>Apple Silicon is not supported. The kernels assume Triton with ROCm or CUDA and have no Metal path, so a Mac cannot load them. Building a voice assistant on a Mac means choosing a different model that runs on MLX.</p><p>Supported languages are English and Chinese. Korean needs a different model, and because the code is MIT you can modify and redistribute it freely. The model holds VRAM while loaded, so sharing that GPU with other work is difficult.</p><ul><li><a href="https://github.com/JMS1717/ming-voice">Ming Voice repository</a></li><li><a href="https://huggingface.co/inclusionAI/Ming-3.0-audio-tiny">Ming-3.0-audio-tiny model card</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-3.webp" alt="An audio player and headphones sit beside an open notebook." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>With tools off, the audio and the conversation stay local.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Ming-3.0-audio-tiny is a 9.3B MoE model that answers speech with speech. We cover the 20.5 GB bf16 and 12.5 GB int8 splits, the conditions behind the 0.23 s figure, the install commands, and the Home Assistant link.</dd></div><div><dt>How much memory does it need?</dt><dd>The model is an MoE with 9.3B parameters in total and 2.7B active. Even so, the bf16 weights take 20.5 GB, which calls for a 24 GB card. On cards under 23 GB, the int8 expert path brings the footprint down to 12.5 GB.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Running local AI for a smart home: splitting voice, conversation and video across your own machines</title><link>https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide</guid><description>Pair Home Assistant with an Ollama conversation agent, put speech on Wyoming and cameras on Frigate. We cover which machine should run what, and the latency and power trade-offs.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Running local AI for a smart home: splitting voice, conversation and video across your own machines</h1><p>Home Assistant keeps state and automations, the voice services handle speech, and Frigate watches the cameras.</p><p id="guide-page-summary">Home Assistant is the box that collects device state and runs automations. Attach local speech-to-text and text-to-speech over Wyoming, a conversation model through Ollama, and camera detection with Frigate, and less data leaves the house. This guide walks through the split and the measured latency behind it.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Home Assistant owns state and automations, while speech-to-text, text-to-speech, conversation and video detection run as separate programs.</li><li>Whisper transcription takes about 8 s on a Raspberry Pi 4 and under a second on an Intel NUC.</li><li>Device control through an Ollama conversation agent is experimental and only reaches entities you expose.</li></ol></section><section><h2>Splitting the roles means no single box has to do everything</h2><p>Home Assistant is the box that collects the state of lights, sensors and climate devices and runs automations. When you speak, Assist passes the work along: wake word, transcription, a decision on whether this is a device command or a question, then a spoken answer.</p><p>These four steps do not need one program. Transcription and synthesis belong to separate services connected over the Wyoming protocol, and questions that need reasoning go to a conversation model such as Ollama. Camera streams are handled separately by Frigate, which detects people and vehicles.</p><ul><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li></ul></section><figure><img src="https://localai.co.kr/guides/start-local.webp" alt="An illustration of a laptop on a desk by a rainy window, cabled to a green box" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Put the devices and the model on the same home network, and settle on a setup where state and voice keep working without the internet.</figcaption></figure><section><h2>Which machine should run what</h2><p>Putting all four roles on one machine raises power draw and heat, and when one part slows down everything slows with it. Separating the always-on work from the heavy computation is more stable.</p><p>The table below maps each role to a sensible host. The first two rows already give you working voice commands; the conversation model and cameras are added when you need them.</p><table><caption>A sensible host for each role</caption><thead><tr><th scope="col">Purpose</th><th scope="col">Good host</th><th scope="col">Why</th></tr></thead><tbody><tr><th scope="row">Home Assistant core</th><td>Mini PC (N100), Raspberry Pi 4, Home Assistant Green</td><td>State and automations are light, but it runs around the clock</td></tr><tr><th scope="row">Transcription (Whisper)</th><td>Intel NUC, mini PC, Mac</td><td>The same sentence takes 8 s on a Pi 4 and under 1 s on a NUC</td></tr><tr><th scope="row">Transcription (Speech-to-Phrase)</th><td>Green, Pi 4</td><td>It only knows commands, but finishes under a second</td></tr><tr><th scope="row">Speech synthesis (Piper)</th><td>Pi 4, mini PC</td><td>It generates 1.6 s of speech per second</td></tr><tr><th scope="row">Conversation model (Ollama)</th><td>Mac, mini PC, GPU server</td><td>It needs RAM or VRAM for the model file plus the context cache</td></tr><tr><th scope="row">Camera detection (Frigate)</th><td>Mini PC plus a detector</td><td>Decoding and detection on the CPU alone hits a ceiling quickly</td></tr></tbody></table></section><section><h2>Where the time goes in one spoken round trip</h2><p>Four stretches add up between the end of your speech and the answer: wake-word detection, transcription, reasoning and reply, and synthesis. The numbers in the Home Assistant documentation show how far the machines diverge.</p><p>Transcribing everything with Whisper takes about 8 s on a Raspberry Pi 4 and under a second on an Intel NUC. Add 1 s for the model reply and 1.2 s to synthesize a two-second answer, and the Pi 4 lands near 10 s while the NUC stays near 3 s.</p><p>If you only need commands such as turning lights on and off, Speech-to-Phrase is the better fit. It transcribes in under a second even on a Green or Pi 4, leaving only network and model time.</p></section><section><h2>The conversation model attaches through Ollama</h2><p>Home Assistant's Ollama integration uses an Ollama server running elsewhere as a conversation agent. Enter the server URL (for example http://192.168.0.20:11434), a model name and response instructions, and Assist forwards questions to that model.</p><p>Device control is experimental. The model can only touch entities exposed through the Assist API, so leave locks and garage doors off the exposed list and start with lights and switches.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="A robot inside a clear enclosure sits beside a router, storage box, and documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Deciding what leaves the house happens in two places: the exposed-entity list and the cloud settings.</figcaption></figure><section><h2>What leaves the house and what stays</h2><p>Run transcription, synthesis, conversation and video detection at home and neither audio nor video leaves the house. Turn on Home Assistant Cloud or an external speech service and only that step leaves.</p><p>If the conversation model lives on an external server, your question text and device state go there. A local model removes that transfer and leaves the memory and power draw in the house instead.</p></section><section><h2>The order to attach things</h2><p>1) Put Home Assistant on a wired network and stabilize automations first. 2) Create an Assist pipeline and test one sentence from the phone app. 3) Install the speech-to-text and synthesis apps; the Wyoming integration finds them automatically. 4) Start the Ollama server and add its URL and model in the integration. 5) Narrow the exposed entities to lights and switches first.</p><p>Change one thing per step, and note the response time and any misheard sentence; that record shows where to adjust. The voice satellite and camera detection each get a deeper guide next.</p></section><section><h2>The twelve parts in reading order</h2><p>The series runs from the role split through voice, cameras, the conversation model, then summaries and announcements. All twelve parts work directly with a model or detector inside the house. Any part stands alone, but reading two at a time from the top builds up faster on a first pass.</p><p>Each part follows the Home Assistant 2026.10.4 and Frigate 0.18 documentation, and the configuration examples keep the real key names. Change the addresses and accounts to match your home.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-local-voice-satellite-guide">Voice satellites</a></li><li><a href="https://localai.co.kr/en/guides/frigate-local-cctv-detection-guide">Camera detection</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-ollama-conversation-agent-guide">Ollama conversation agent</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide">Voice command accuracy</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-daily-brief-llm-guide">Morning brief</a></li><li><a href="https://localai.co.kr/en/guides/esphome-voice-satellite-build-guide">Building an ESPHome satellite</a></li><li><a href="https://localai.co.kr/en/guides/piper-korean-tts-guide">Korean speech synthesis</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide">Voice announcements</a></li><li><a href="https://localai.co.kr/en/guides/wyoming-remote-speech-server-guide">Splitting off the speech server</a></li><li><a href="https://localai.co.kr/en/guides/frigate-home-assistant-notification-guide">Camera notifications</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-safety-guide">Permissions and safety</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>One small mini PC can run Home Assistant and transcription together.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Home Assistant is the box that collects device state and runs automations. Attach local speech-to-text and text-to-speech over Wyoming, a conversation model through Ollama, and camera detection with Frigate, and less data leaves the house. This guide walks through the split and the measured latency behind it.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A Home Assistant voice satellite that listens and answers without leaving the house</title><link>https://localai.co.kr/en/guides/home-assistant-local-voice-satellite-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-local-voice-satellite-guide</guid><description>An Assist pipeline that keeps wake word, transcription and synthesis inside the house. We compare Speech-to-Phrase with Whisper, and cover Piper and satellite placement.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">A Home Assistant voice satellite that listens and answers without leaving the house</h1><p>A command-only model finishes under a second; a model that transcribes everything can take 8 s depending on the box.</p><p id="guide-page-summary">An Assist round trip has four stages: wake word, transcription, processing and synthesis. The choice of transcription engine changes perceived latency the most, and Piper handles synthesis. This guide covers satellite placement and the conditions that keep latency down.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The Assist pipeline runs wake word, transcription, processing, then synthesis.</li><li>Speech-to-Phrase finishes under a second even on a Green or Pi 4, but only understands a closed set of commands.</li><li>Whisper takes about 8 s on a Pi 4 and under a second on an Intel NUC.</li></ol></section><section><h2>The satellite only exchanges audio</h2><p>A voice satellite is a device with a microphone and a speaker. It detects the wake word itself, opens a connection to Home Assistant and streams your speech. Home Assistant does the reasoning and the storage; the satellite only moves audio.</p><p>That is why several satellites can share one pipeline. Put a satellite in each room and point them at the same transcription and synthesis services, and you speak the same way wherever you are.</p><ul><li><a href="https://localai.co.kr/en/guides/piper-korean-tts-guide">Piper in Korean: adding a ko_KR voice to Home Assistant</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide">Home Assistant voice announcements: speaking through the house with a Piper voice</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The satellite sends audio only; turning it into text happens on a server inside the house.</figcaption></figure><section><h2>Choosing the transcription engine</h2><p>Home Assistant offers two local transcription options: Speech-to-Phrase, which only understands commands, and Whisper, which transcribes everything. They trade speed against range in opposite directions.</p><p>For home control alone, Speech-to-Phrase wins: it cannot handle sentences outside its list, but it finishes under a second even on a Green or Pi 4. If you want the transcript for something else, you need Whisper, and a faster host with it.</p><table><caption>The two transcription engines</caption><thead><tr><th scope="col">Engine</th><th scope="col">Latency</th><th scope="col">Range</th><th scope="col">Good host</th></tr></thead><tbody><tr><th scope="row">Speech-to-Phrase</th><td>Under 1 s (Green, Pi 4)</td><td>Home-control commands; open sentences such as lists or timer names are limited</td><td>Green, Pi 4</td></tr><tr><th scope="row">Whisper</th><td>About 8 s on a Pi 4, under 1 s on a NUC</td><td>Open-ended transcription, passing text to other apps</td><td>Intel NUC, mini PC, Mac</td></tr></tbody></table></section><section><h2>Piper makes the voice</h2><p>Piper handles synthesis. It is a local neural text-to-speech system that generates 1.6 s of speech per second even on a Pi 4. Short answers synthesize quickly, so this stage is rarely the bottleneck.</p><p>Voice quality varies a lot by language and model. For Korean, pick a Korean voice model and listen to the same sentence a few times to check pronunciation and pace.</p></section><section><h2>The install order</h2><p>1) Install the Whisper and Piper apps on Home Assistant. 2) The Wyoming integration discovers the services; if it does not, enter the host and port yourself. 3) In Voice assistants, create a pipeline and choose the wake word, transcription, synthesis and conversation agent.</p><p>4) Add the satellite and assign that pipeline. 5) Turn on one light by voice and note the response time and any misheard sentence. If you installed the apps on another machine, add that machine's address in the Wyoming integration.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker sit on a desk by a window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>One satellite per speaker location lets every room share the same pipeline.</figcaption></figure><section><h2>Conditions that cut latency</h2><p>The transcription host is the biggest variable: an 8 s transcription on a Pi 4 drops under a second on an Intel NUC. Wire the satellite and Home Assistant, and put the transcription server on the same switch to cut network waits.</p><p>Add a conversation model and its response time joins the total. Instruct it to answer briefly, and run it on the same host as transcription to remove one network hop.</p></section><section><h2>Limits and checks</h2><p>Speech-to-Phrase cannot understand words outside its list. Adding items to a shopping list or naming a timer needs Whisper. Whisper alone, on a slow host, means waiting 8 s.</p><p>Korean quality differs by model, so say the same sentence three times and switch models if it mishears often. Running cloud speech for a while to compare is also reasonable.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting transcription from synthesis lets you move only the slow part to another machine.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>An Assist round trip has four stages: wake word, transcription, processing and synthesis. The choice of transcription engine changes perceived latency the most, and Piper handles synthesis. This guide covers satellite placement and the conditions that keep latency down.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Local CCTV person detection with Frigate: N100, Coral or a Mac?</title><link>https://localai.co.kr/en/guides/frigate-local-cctv-detection-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/frigate-local-cctv-detection-guide</guid><description>A network video recorder that keeps camera footage at home. We cover the H.264 substreams cameras need, Coral, OpenVINO and Apple Silicon detectors, and how far an N100 mini PC goes.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Local CCTV person detection with Frigate: N100, Coral or a Mac?</h1><p>With a detector attached, several 1080p cameras cost far less power than running detection on the CPU.</p><p id="guide-page-summary">Frigate pulls streams from the cameras, detects people and vehicles on a low-resolution substream, and records the main stream. Where detection runs decides power draw and camera count, and Apple Silicon works from M1 up through a proxy.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Frigate detects on a low-resolution substream and keeps the main stream for recording.</li><li>An N100 mini PC handles several 1080p cameras when activity is low to medium.</li><li>Apple Silicon detects from M1 up, but the work goes through a ZMQ proxy that adds latency.</li></ol></section><section><h2>Frigate pulls the video straight from the cameras</h2><p>Frigate connects to each camera's RTSP URL and pulls the video itself. The stream splits two ways: a low-resolution substream feeds person and vehicle detection, and the main stream is recorded.</p><p>Detection results reach Home Assistant over MQTT, which lets you turn on a porch light or send a notification when someone stands at the door.</p><ul><li><a href="https://localai.co.kr/en/guides/frigate-home-assistant-notification-guide">Frigate detections as Home Assistant notifications: from MQTT to conditions</a></li><li><a href="https://localai.co.kr/en/guides/underdog-saluki-27b-local-guide">Qwen3.8 27B in 7.89 GB? Install Saluki and Plan for an 8 GB GPU</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Binding the cameras and the recorder to the same switch, apart from the internet, keeps footage inside.</figcaption></figure><section><h2>What the cameras must support first</h2><p>Cameras should output H.264 video and AAC audio. Different resolutions for detection, recording and streaming require multiple substreams; without them the main stream is re-encoded continuously and the CPU suffers.</p><p>WiFi cameras are not recommended: several streaming at once drop connections and lose footage. 4K Reolink models also draw many reports, so 5 MP or lower is safer.</p></section><section><h2>Choosing the detector</h2><p>Detection runs far faster on a dedicated device than on the CPU. Frigate supports several detectors, and each suits a different model size. Use hardware you already own first; otherwise pick from the lowest-power option up.</p><p>The table below lists what each detector supports and when it fits. CPU detection, not listed, is for testing only.</p><table><caption>What each detector supports and when it fits</caption><thead><tr><th scope="col">Detector</th><th scope="col">Model support</th><th scope="col">When it fits</th></tr></thead><tbody><tr><th scope="row">Google Coral EdgeTPU (USB·m.2)</th><td>ssdlite and mobilenet</td><td>A few cameras on a low-power mini PC</td></tr><tr><th scope="row">Hailo-8·8L</th><td>Many models, best with small ones</td><td>An m.2 slot or the Pi 5 HAT</td></tr><tr><th scope="row">Intel OpenVINO</th><td>Most models on integrated GPU, NPU or Arc</td><td>Several cameras on one Intel mini PC</td></tr><tr><th scope="row">Apple Silicon</th><td>M1 and newer, through a ZMQ proxy</td><td>A Mac you already own</td></tr><tr><th scope="row">NVIDIA GPU</th><td>ONNX and TensorRT, including large models</td><td>When a graphics card is already there</td></tr></tbody></table></section><section><h2>The camera count decides the server</h2><p>The Frigate docs say an N100 mini PC can handle several 1080p cameras at low to medium activity. Many busy cameras push you to a larger processor such as an Intel 1120p or 125H.</p><p>A Debian-based Linux is the easy path, and most Intel CPUs with AVX and AVX2 work. Mini PCs often ship with Windows, so plan to install Linux.</p><div><p><strong>frigate config.yml</strong></p><pre><code data-guide-code-block="3-0"># 홈 어시스턴트 MQTT 브로커
mqtt:
  host: 192.168.0.10

# 코랄 USB를 감지 장치로
detectors:
  coral:
    type: edgetpu
    device: usb

cameras:
  front:
    ffmpeg:
      inputs:
        # 감지는 서브스트림
        - path: rtsp://192.168.0.50:554/sub
          roles: [detect]
        # 녹화는 원본 스트림
        - path: rtsp://192.168.0.50:554/main
          roles: [record]</code></pre><p><small>The minimal setup once Frigate runs on the mini PC with one camera and a Coral USB: the MQTT broker address and the detect and record inputs.</small></p></div></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-2.webp" alt="A waveform and a document on a monitor feed into a padlocked enclosure, while a dashed line toward the cloud is crossed out" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping detection and recording local means you can review the same footage without a cloud subscription.</figcaption></figure><section><h2>Running it on a Mac</h2><p>Apple Silicon can run detection from M1 up. The work goes through a ZMQ proxy, which adds some latency, and the setup is meant for a local network.</p><p>If the Mac cannot stay on around the clock, leave detection to a mini PC and use the Mac for reviewing recordings and the Home Assistant dashboard. To run everything on one Mac, check sleep and power settings first.</p></section><section><h2>Network and storage</h2><p>To keep cameras off the internet, split the network. A mini PC with two NICs can dedicate one port to the cameras and block that port from reaching the internet.</p><p>Storage follows the bitrate. A 1080p camera at 4 Mbps writes 4 × 3,600 ÷ 8 = 1.8 GB per hour, about 43 GB a day. Keeping four cameras for 30 days needs a bit over 5 TB.</p></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-2.webp" alt="An RTX 3090 in a case, colored blocks moving along a conveyor to shelves, and cards printed with network diagrams on the work surface" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>With a detector, several cameras run without a graphics card.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Frigate pulls streams from the cameras, detects people and vehicles on a low-resolution substream, and records the main stream. Where detection runs decides power draw and camera count, and Apple Silicon works from M1 up through a proxy.</dd></div><div><dt>When is it better not to choose this?</dt><dd>WiFi cameras are not recommended: several streaming at once drop connections and lose footage. 4K Reolink models also draw many reports, so 5 MP or lower is safer.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Adding an Ollama conversation agent to Home Assistant: exposed entities and instructions</title><link>https://localai.co.kr/en/guides/home-assistant-ollama-conversation-agent-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-ollama-conversation-agent-guide</guid><description>How Assist hands questions to a local model, and what to limit before you let it control devices. We cover the model, the instructions and the aliases.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Adding an Ollama conversation agent to Home Assistant: exposed entities and instructions</h1><p>The model interprets the sentence; the action only happens inside the entities you exposed.</p><p id="guide-page-summary">The Ollama integration in Home Assistant uses an external Ollama server as a conversation agent. The model interprets what you said, and with device control on it can only act on entities exposed through the Assist API. This guide covers the order for the model, instructions, exposure list and aliases.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The Ollama integration adds a conversation agent; device control is experimental.</li><li>The exposed-entity list in the Assist API defines what it can control.</li><li>Aliases let the same device answer to several names and languages.</li></ol></section><section><h2>The path a question takes to the model</h2><p>Assist starts with the wake word, turns speech into text and hands that text to a conversation agent. With the Ollama integration, a model on your local server fills that role. It either writes an answer or, with device control on, calls the Assist API.</p><p>Changing the model therefore does not change which devices can be operated. The model chooses which device to use and shapes the sentence; Home Assistant throws the switch.</p><ul><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide">Raising local LLM voice command accuracy: aliases, exposure and instructions</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-safety-guide">Can a local LLM run the house? Exposure scope and safety boundaries</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="A robot inside a clear enclosure sits beside a router, storage box, and documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model on your local server interprets the sentence; Home Assistant does the switching.</figcaption></figure><section><h2>Setting the model and the instructions</h2><p>Add the Ollama integration under Settings &gt; Devices &amp; services and enter the server URL (for example http://192.168.0.20:11434). An API key is needed only if the server requires authentication, and naming a model downloads it during setup.</p><p>In the instructions, state the answer language and length and anything the model must not do. Longer text eats into the model's context, so start with naming rules and a short-answer preference, and add only what you need.</p><table><caption>What the Ollama integration asks for</caption><thead><tr><th scope="col">Aspect</th><th scope="col">Value to enter</th><th scope="col">Watch out</th></tr></thead><tbody><tr><th scope="row">URL</th><td>The Ollama server address and port</td><td>It must be reachable from Home Assistant</td></tr><tr><th scope="row">Model</th><td>A size that handles device commands</td><td>Very large models slow the reply</td></tr><tr><th scope="row">Instructions</th><td>Language, length, forbidden actions</td><td>It uses context, so keep it short</td></tr><tr><th scope="row">Control Home Assistant</th><td>Turn on only when needed</td></tr></tbody></table></section><section><h2>The exposed list is the whole permission set</h2><p>Turning device control on does not hand the model every device in the house. Only the entities you pick on the Expose tab under Settings &gt; Voice assistants are visible to the Assist API, and the model chooses within that list.</p><p>Leave locks and garage doors out from the start. Begin with lights, switches and climate devices that are easy to undo, and add sensors first as read-only values to check.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>A device outside the exposed list cannot be operated even if the model picks it.</figcaption></figure><section><h2>Matching names with aliases</h2><p>Calling the same light 'living room light' and 'main lamp' confuses the model. Add the alias on the Expose tab and Assist recognises that name too.</p><p>Aliases also work for areas and floors. In a house that mixes Korean and English, add both names so the same device is found whichever language you speak.</p></section><section><h2>What to check when it misbehaves</h2><p>The Ollama integration does not connect to sentence triggers. To run a fixed phrase exactly, create a sentence trigger in an automation instead; open questions still go to the conversation agent.</p><p>If answers lag, check model size and server location first. Keeping the server on the same network cuts the round trip, and long instructions delay the first response. Say the same sentence three times in the phone app and see whether the result is stable.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keeping the model server on the same network removes one network round trip.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>The Ollama integration in Home Assistant uses an external Ollama server as a conversation agent. The model interprets what you said, and with device control on it can only act on entities exposed through the Assist API. This guide covers the order for the model, instructions, exposure list and aliases.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>A morning brief from Home Assistant: turning sensor data into sentences with a local LLM</title><link>https://localai.co.kr/en/guides/home-assistant-daily-brief-llm-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-daily-brief-llm-guide</guid><description>A model does not know the state of your house, so the values have to travel inside the sentence. This covers handing sensor and calendar values to conversation.process and getting the answer as a notification.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">A morning brief from Home Assistant: turning sensor data into sentences with a local LLM</h1><p>The quality of the brief depends less on the model than on which values you put into the sentence.</p><p id="guide-page-summary">A local LLM does not read live sensor values by itself. An automation therefore builds a sentence from sensor and calendar values, hands it to conversation.process, and sends the reply as a notification. This guide covers which values to include and how to handle failure.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>A conversation model does not read live sensor values; the values must be carried in the sentence.</li><li>Handing a sentence to conversation.process makes the chosen agent produce the answer.</li><li>Take the reply into a variable, notify with it, and fall back to a fixed sentence on failure.</li></ol></section><section><h2>The model does not know the current state</h2><p>A conversation model sees only what the sentence contains. It cannot know whether the room is 26 or 19 degrees, or whether a window is open. So a request for a summary has to carry the checked values inside the sentence.</p><p>Home Assistant's conversation.process hands that sentence to the chosen conversation agent and returns the reply. An automation can take that reply into a variable and use it as the notification text.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-safety-guide">Can a local LLM run the house? Exposure scope and safety boundaries</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide">Raising local LLM voice command accuracy: aliases, exposure and instructions</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The model builds the summary from the values written in the sentence.</figcaption></figure><section><h2>Choosing the values to include</h2><p>Five to eight values are enough: indoor temperature and humidity, yesterday's power use, open doors or windows, the first event of the day, air quality — only what you would use to judge the day.</p><p>Attach units to numbers and drop sensors that have no value. A blank invites the model to guess and produce an odd sentence.</p><table><caption>Values worth putting in a morning brief</caption><thead><tr><th scope="col">Value</th><th scope="col">Where it comes from</th><th scope="col">Watch out</th></tr></thead><tbody><tr><th scope="row">Indoor temperature and humidity</th><td>Temperature and humidity entities</td><td>Include the unit</td></tr><tr><th scope="row">Yesterday's power use</th><td>Cumulative value from a power sensor</td><td>Say whether it is a total or an instant</td></tr><tr><th scope="row">Open doors and windows</th><td>Door and window entities</td><td>Leave it out when absent</td></tr><tr><th scope="row">First event today</th><td>Calendar entity</td><td>Keep the time and title only</td></tr></tbody></table></section><section><h2>Wiring it into an automation</h2><p>Trigger on time, at the hour the household starts, such as 07:00. Add an action that builds the sentence, then conversation.process. When the reply comes back, send it as a notification.</p><p>Keep the sentence short. Putting the instruction and the values in one paragraph, such as 'use these values and tell me in three sentences what to prepare today', keeps the format steadier.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person at a laptop is surrounded by connected document, spreadsheet, folder, image, settings, and robot panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Cut the values to five or eight and pass them with units.</figcaption></figure><section><h2>Instructions that keep the answer short</h2><p>Set the sentence count and format in the agent's instructions: no greeting, three sentences, repeat the numbers as given, no lists. That suits a notification.</p><p>Longer instructions delay the first response. Keeping a separate agent for summaries, apart from the conversational one, is easier to manage.</p></section><section><h2>Deciding what happens on failure</h2><p>If the model server is down or the reply is empty, no notification arrives. Add a condition so an empty reply sends a fixed line such as 'the summary could not be built; check the sensor values'.</p><p>A week of notifications shows which values go missing often. Drop the sensors that frequently vanish, or find one that stands in for them.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep a fixed sentence ready for when the reply is empty.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM does not read live sensor values by itself. An automation therefore builds a sentence from sensor and calendar values, hands it to conversation.process, and sends the reply as a notification. This guide covers which values to include and how to handle failure.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Building an ESPHome voice satellite: an ESP32-S3 microphone and wake word</title><link>https://localai.co.kr/en/guides/esphome-voice-satellite-build-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/esphome-voice-satellite-build-guide</guid><description>Turning a microphone-equipped ESP32 board into a Home Assistant voice satellite: board choice, mic and speaker wiring, on-device wake word and resource limits.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Building an ESPHome voice satellite: an ESP32-S3 microphone and wake word</h1><p>The board detects the wake word; Home Assistant handles the speech itself.</p><p id="guide-page-summary">ESPHome's voice_assistant streams microphone audio to Home Assistant, and micro_wake_word finds the wake word on the board itself. Adding both to the configuration behaves like a commercial satellite, using whichever microphone and speaker parts you choose.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>voice_assistant streams microphone audio to Home Assistant.</li><li>micro_wake_word detects the wake word on the board, cutting server load.</li><li>Running audio and Bluetooth together can run the board out of memory.</li></ol></section><section><h2>When to build instead of buy</h2><p>A commercial satellite bundles microphone and speaker, so setup is simple. Building your own lets you shape and place it per room, and costs less if you already own a board.</p><p>On the other hand, microphone sensitivity and speaker noise vary a lot by part. Build one first, listen to it, and add more only when it sounds right.</p><ul><li><a href="https://localai.co.kr/en/guides/openrouter-to-local-llm-fallback-guide">When OpenRouter Is Unavailable, How Do You Switch Your App to a Local LLM?</a></li><li><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe">Gemma 4 12B serving: Q4 on desktop and BF16 on a server</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Once the board catches the wake word, audio starts flowing to Home Assistant.</figcaption></figure><section><h2>Choosing the board and parts</h2><p>An ESP32-S3 board with PSRAM is the stable choice. Use an I2S microphone and an I2S amplifier board with a speaker, and the wiring stays simple.</p><p>Check the board's pinout first so the microphone and speaker do not share a pin. Weak or clipped audio is often power, so start by giving the board a solid USB supply.</p></section><section><h2>Adding the wake word to the configuration</h2><p>micro_wake_word is the component that detects the wake word on the board. Listing a model name makes ESPHome include it in the build, and detection starts with it after boot.</p><p>Only the first model in the list is enabled on first boot. With several listed, you can switch which one is active from Home Assistant.</p><div><p><strong>ESPHome wake word configuration</strong></p><pre><code data-guide-code-block="2-0">micro_wake_word:
  models:
    - model: okay_nabu</code></pre><p><small>The first model in the list is enabled by default. Use the short name from the ESPHome model repository.</small></p></div></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Put the microphone and speaker on separate pins and give the board enough power.</figcaption></figure><section><h2>Connecting to the voice pipeline</h2><p>Once the board is added to Home Assistant it appears as a Wyoming service, and you can assign a pipeline under Voice assistants. The pipeline holds local transcription (for example Whisper) and synthesis (for example Piper) engines, so the satellite only moves audio.</p><p>To send the reply to a different speaker, route the output through a media_player. That is easier when the room already has a larger speaker.</p></section><section><h2>Watch the resource limits first</h2><p>Audio and voice components use a lot of the board's RAM and CPU. Too many components can cause reboots or dropped replies, so start with the voice parts only and add one at a time.</p><p>Bluetooth in particular is known to cause trouble alongside audio components. If you also need a Bluetooth speaker, split the work across boards or use a wired speaker.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Bring up the voice parts first and add extras such as Bluetooth later.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>ESPHome's voice_assistant streams microphone audio to Home Assistant, and micro_wake_word finds the wake word on the board itself. Adding both to the configuration behaves like a commercial satellite, using whichever microphone and speaker parts you choose.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Piper in Korean: adding a ko_KR voice to Home Assistant</title><link>https://localai.co.kr/en/guides/piper-korean-tts-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/piper-korean-tts-guide</guid><description>A local synthesizer that generates 1.6 s of speech per second even on a Pi 4. We cover the Korean ko_KR-kss-medium model, install, pipeline wiring and pronunciation checks.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Piper in Korean: adding a ko_KR voice to Home Assistant</h1><p>Korean needs a ko_KR model, and quality is best checked from the samples first.</p><p id="guide-page-summary">Piper is a local neural synthesizer that turns sentences into speech. Installed as a Home Assistant app, the Wyoming integration finds it, and assigning it in a pipeline makes Assist answer in that voice.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Korean synthesis uses the ko_KR-kss-medium model.</li><li>Even a Pi 4 generates 1.6 s of speech per second.</li><li>After install the Wyoming integration discovers it; assign it as the synthesis engine in a pipeline.</li></ol></section><section><h2>Voice models are per language</h2><p>Piper turns a sentence into phonemes and those phonemes into audio with a neural network. Each language has its own trained model, so Korean text needs a Korean model.</p><p>The Korean model is ko_KR-kss-medium, a medium single-speaker voice that balances speed and quality and still runs faster than real time on a Pi 4.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-local-voice-satellite-guide">A Home Assistant voice satellite that listens and answers without leaving the house</a></li><li><a href="https://localai.co.kr/en/guides/qwen3-tts-local-voice-guide">What is Qwen3-TTS? Turn text into speech on your computer</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide">Home Assistant voice announcements: speaking through the house with a Piper voice</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker sit on a desk by a window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Korean sentences only read naturally with a Korean model.</figcaption></figure><section><h2>Install and wire it into a pipeline</h2><p>Install and start Piper under Settings &gt; Apps. If the Wyoming integration discovers it, add it as is; otherwise enter the host and port yourself.</p><p>Open the pipeline under Voice assistants and set synthesis to the Piper you just added. Leaving transcription alone changes only the voice.</p></section><section><h2>Checking speed and quality</h2><p>With a medium-quality model on a Pi 4, one second of compute yields 1.6 s of speech. A two-second answer therefore takes about 1.2 s to synthesize, which rarely becomes the bottleneck.</p><p>Quality varies most with sentence length and numbers. Play sentences with temperatures or times a few times, and rewrite them in words when the reading sounds off.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Swapping only the synthesis engine changes the voice and leaves transcription alone.</figcaption></figure><section><h2>Tuning pronunciation</h2><p>Spelling numbers out, as 'twenty-three degrees' rather than '23', reads more reliably. Writing abbreviations and device names the way they should sound cuts odd readings.</p><p>Short replies reduce both mispronunciations and synthesis time. When a long announcement is needed, split it into two or three sentences read in order.</p></section><section><h2>Switching to another voice</h2><p>Piper ships several speakers and quality levels per language. Even within Korean, models differ in intonation and pace, so compare samples before switching.</p><p>You can keep several pipelines and give each room its own voice. Changing voices makes the same sentence sound different, so keep shared rooms on one voice.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Spelling numbers out and splitting sentences keeps pronunciation steady.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Piper is a local neural synthesizer that turns sentences into speech. Installed as a Home Assistant app, the Wyoming integration finds it, and assigning it in a pipeline makes Assist answer in that voice.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Home Assistant voice announcements: speaking through the house with a Piper voice</title><link>https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-tts-announcement-guide</guid><description>Sending a sentence to a speaker with tts.speak: which speaker answers, how quiet it should be at night, and what changes when the sentence gets long.</description><content:encoded><![CDATA[<header><p>Local speech recognition &amp; synthesis</p><h1 id="guide-page-title">Home Assistant voice announcements: speaking through the house with a Piper voice</h1><p>An announcement is not an Assist reply: you send one sentence to one speaker.</p><p id="guide-page-summary">An Assist reply returns to the device you spoke to, while an announcement goes to a speaker you choose. Give tts.speak the TTS engine, the speaker and the sentence, and the Piper voice plays in that room. This guide covers splitting speakers per room and setting a night volume.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Give tts.speak a TTS entity, a speaker and a sentence, and the audio plays in that room.</li><li>Unlike an Assist reply, an announcement does not return to the device you spoke to.</li><li>Split speakers per room and lower the volume at night.</li></ol></section><section><h2>A reply and an announcement move differently</h2><p>When you speak to Assist the reply returns to that satellite or phone. An announcement instead goes to the speaker you chose, so 'the front door is open' comes out of the living-room speaker, not the device you spoke to.</p><p>Once that difference is clear, the two get designed separately: conversation near the satellite, announcements in the room where people are.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-local-voice-satellite-guide">A Home Assistant voice satellite that listens and answers without leaving the house</a></li><li><a href="https://localai.co.kr/en/guides/piper-korean-tts-guide">Piper in Korean: adding a ko_KR voice to Home Assistant</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-1.webp" alt="An open book, a small computer, and a speaker sit on a desk by a window." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The announcement comes from the speaker you chose, not the device you spoke to.</figcaption></figure><section><h2>Sending a sentence with tts.speak</h2><p>In an automation action, choose tts.speak, target the TTS entity (for example the one Piper provides), and give the speaker and the sentence as data. The speaker is a media_player entity.</p><p>Repeating the same sentence reuses the cache and is faster from the second time. Values such as time or temperature change every run and miss the cache, so keep fixed announcements apart from value-carrying ones.</p></section><section><h2>One speaker per room</h2><p>With several speakers, name them by room and pick the target by where the event happened: the entry sensor to the living room, the washing machine to the laundry area.</p><p>To speak everywhere at once, group the speakers and send once. Sending to each room separately makes the sentences drift and overlap.</p></section><figure><img src="https://localai.co.kr/guides/speech/tts-overview-2.webp" alt="A microphone, headphones, and a monitor showing an audio waveform." width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Splitting speakers per room puts the sound where people are.</figcaption></figure><section><h2>Quieter at night</h2><p>At night, lower the volume and postpone anything not urgent until morning. Only urgent events, such as a door opening or smoke, should make noise at night.</p><p>Volume has to be set per speaker. The same value sounds different on a small and a large speaker, so listen once in each room before fixing it.</p></section><section><h2>What changes with a long sentence</h2><p>A long sentence takes longer to synthesize and is easier to miss halfway. Keep announcements to two sentences and send the detail to a phone notification or a screen.</p><p>Numbers read more reliably written as they sound, 'twenty-three degrees' rather than '23'. Writing device names the way they should sound cuts odd readings.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Lower the volume at night and keep only urgent announcements audible.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>An Assist reply returns to the device you spoke to, while an announcement goes to a speaker you choose. Give tts.speak the TTS engine, the speaker and the sentence, and the Piper voice plays in that room. This guide covers splitting speakers per room and setting a night volume.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Frigate detections as Home Assistant notifications: from MQTT to conditions</title><link>https://localai.co.kr/en/guides/frigate-home-assistant-notification-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/frigate-home-assistant-notification-guide</guid><description>Get a phone alert when a person is detected: enable MQTT in Frigate, install the integration, then narrow alerts by zone and object type.</description><content:encoded><![CDATA[<header><p>Model setup recipes</p><h1 id="guide-page-title">Frigate detections as Home Assistant notifications: from MQTT to conditions</h1><p>Frigate does the detection; Home Assistant decides whether to notify.</p><p id="guide-page-summary">Frigate publishes detections over MQTT, and Home Assistant turns those events into automations. Both must see the same broker, so configure the MQTT integration first, then add the Frigate integration.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The Frigate integration needs the MQTT integration configured first.</li><li>Enable MQTT in the Frigate configuration and point it at the same broker.</li><li>Narrowing alerts by person and zone reduces notification fatigue.</li></ol></section><section><h2>MQTT sits between detection and notification</h2><p>Frigate finds people and vehicles in the camera streams and emits each result as an event. Home Assistant receives the event and runs an automation that turns on a light or sends a phone alert.</p><p>The two do not call each other directly; they talk through the broker. Without the MQTT integration, adding the Frigate integration will not produce working entities.</p><ul><li><a href="https://localai.co.kr/en/guides/frigate-local-cctv-detection-guide">Local CCTV person detection with Frigate: N100, Coral or a Mac?</a></li><li><a href="https://localai.co.kr/en/guides/n8n-ollama-local-automation-guide">Build a local AI workflow with n8n and Ollama</a></li><li><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">How much VRAM or unified memory does a local LLM need?</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rtx-3090-before-upgrading-local-ai-scene-2.webp" alt="An RTX 3090 in a case, colored blocks moving along a conveyor to shelves, and cards printed with network diagrams on the work surface" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Detections travel through the broker to Home Assistant, and the automation decides on the alert.</figcaption></figure><section><h2>Enabling MQTT in Frigate</h2><p>In the Frigate configuration, set mqtt.enabled, the broker address and the credentials. It must point at the same broker as Home Assistant, so match the address exactly.</p><p>Restart Frigate after the change and the log shows the broker connection. If it fails, check the username, password and port in that order.</p><div><p><strong>Frigate MQTT configuration</strong></p><pre><code data-guide-code-block="1-0">mqtt:
  enabled: True
  host: 192.168.0.10
  user: mqtt-user
  password: your_password</code></pre><p><small>Point it at the same broker as Home Assistant. Keep the password out of the main file where you can.</small></p></div></section><section><h2>Installing the Frigate integration</h2><p>Install Frigate from HACS, restart, then add the Frigate integration under Devices &amp; services. Through the broker it exposes Frigate's cameras and events as entities.</p><p>To browse recordings in the media browser, media_source must be enabled. If alerts will include snapshots, check that setting too.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Conditions on person and zone cut alerts from passing cars and pedestrians.</figcaption></figure><section><h2>Building the notification automation</h2><p>Trigger the automation on the MQTT event and notify only when the detected object is a person. Alerting on every vehicle and animal rings dozens of times a day and gets switched off.</p><p>Defining zones such as the porch or yard filters out passers-by. Adding a night-time condition makes the alerts far more useful.</p></section><section><h2>Tuning to cut notification fatigue</h2><p>One person lingering for a few seconds produces several detections and several alerts. Recording the last alert time and suppressing repeats for a while removes the duplicates.</p><p>Put the camera name and time in the message so the scene is obvious at a glance. To include a snapshot, check that the notification service accepts images.</p></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-2.webp" alt="A waveform and a document on a monitor feed into a padlocked enclosure, while a dashed line toward the cloud is crossed out" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Record the last alert time to suppress duplicates.</figcaption></figure><section aria-labelledby="hardware-tuning-summary"><h2 id="hardware-tuning-summary">Hardware-specific speed tuning and serving recipe summary</h2><p>Provides weights, KV cache, prefill batch, and concurrent request with acceleration functionality, separated for balanced performance, speed, and long-context profiling.</p><table><thead><tr><th scope="col">Hardware</th><th scope="col">suitability</th><th scope="col">Recommended runtime</th><th scope="col">Profile</th><th scope="col">start context</th><th scope="col">Decode</th></tr></thead><tbody></tbody></table><p>The detail page shows each profile's command, settings, stop conditions, and measurement steps. Commands appear only for combinations with a confirmed model file and runtime.</p></section><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Frigate publishes detections over MQTT, and Home Assistant turns those events into automations. Both must see the same broker, so configure the MQTT integration first, then add the Frigate integration.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Can a local LLM run the house? Exposure scope and safety boundaries</title><link>https://localai.co.kr/en/guides/home-assistant-llm-safety-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-llm-safety-guide</guid><description>A conversation model can only touch devices on the exposed list. We cover which devices to leave out, starting with reversible actions, and defaults for failure.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Can a local LLM run the house? Exposure scope and safety boundaries</h1><p>Safety comes less from how smart the model is than from which devices you show it.</p><p id="guide-page-summary">A local LLM interprets the sentence and proposes an action, but the Assist API in Home Assistant performs it. Safety therefore lives in the exposed list and the automation conditions, not in model quality. This guide covers leaving risky devices out and starting with reversible actions.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>The exposed list decides what can run, and the model chooses only within it.</li><li>Leave out locks, garage doors and heaters, where a wrong action is dangerous.</li><li>Start with reversible lights and switches; keep sensors read-only.</li></ol></section><section><h2>The model proposes; Home Assistant executes</h2><p>The conversation model reads the sentence and decides which device to act on and how. That decision does not flip the switch by itself: Home Assistant executes through the Assist API, only for exposed entities.</p><p>Changing the model leaves the risk surface unchanged. Widening the exposed list raises risk even with a weaker model. The knob for safety is the list, not the model.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-ollama-conversation-agent-guide">Adding an Ollama conversation agent to Home Assistant: exposed entities and instructions</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-daily-brief-llm-guide">A morning brief from Home Assistant: turning sensor data into sentences with a local LLM</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide">Raising local LLM voice command accuracy: aliases, exposure and instructions</a></li></ul></section><figure><img src="https://localai.co.kr/guides/offline-korean-transcription-whisper-cpp-scene-2.webp" alt="A waveform and a document on a monitor feed into a padlocked enclosure, while a dashed line toward the cloud is crossed out" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>The devices a model can pick are limited to the exposed list.</figcaption></figure><section><h2>What to leave out, what can stay</h2><p>Leave locks, garage doors, heaters and fans off the exposed list; a wrong action can injure someone or damage property. Sensors only report values, so exposing them first carries little risk.</p><p>A light or switch left on can simply be turned off again. Start with one room's lights and widen as the phrasing works.</p></section><section><h2>Start with actions you can undo</h2><p>Locking a door and turning on a light fail differently. Undoing the first needs a key or a code; undoing the second needs one more sentence.</p><p>Automations can wrap the action. If the model asks for 'turn everything off at night', the automation turns off only the listed devices and leaves the rest alone.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="A robot inside a clear enclosure sits beside a router, storage box, and documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Leave locks and garage doors off the list; start with lights.</figcaption></figure><section><h2>Closing the paths out of the house</h2><p>A local model keeps questions inside. An external API model sends the sentence and device state to that server. Check settings for which one you run.</p><p>Voice services connected over Wyoming have no authentication. Keep them on a trusted home network and do not open their ports on the router.</p></section><section><h2>Decide the default when it fails</h2><p>For the moments a model answers oddly or not at all, keep critical actions on sentence triggers. Turning off lights keeps working even with the model down.</p><p>Keep a record of what ran. The log shows which sentence moved which device, and if an odd action repeats, remove that device from the list.</p></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-first-guide-scene-1.webp" alt="A person at a laptop is surrounded by connected document, spreadsheet, folder, image, settings, and robot panels" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Keep critical actions working without the model, on their own.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>A local LLM interprets the sentence and proposes an action, but the Assist API in Home Assistant performs it. Safety therefore lives in the exposed list and the automation conditions, not in model quality. This guide covers leaving risky devices out and starting with reversible actions.</dd></div></dl></section>]]></content:encoded><pubDate>Fri, 30 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Raising local LLM voice command accuracy: aliases, exposure and instructions</title><link>https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/home-assistant-llm-command-accuracy-guide</guid><description>Say the same thing twenty times, split the failures into three kinds, and fix them with aliases, the exposed list and instructions — before changing the model.</description><content:encoded><![CDATA[<header><p>Agents and automation</p><h1 id="guide-page-title">Raising local LLM voice command accuracy: aliases, exposure and instructions</h1><p>When commands miss, check names and the exposed list before swapping the model.</p><p id="guide-page-summary">Voice commands fail in three ways: the words were misheard, the wrong device was chosen, or the right device was chosen and nothing ran. Each has a different place to check, so testing twenty sentences and sorting them by type fixes things faster.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Failures come in three kinds: misheard, wrong device, and not executed.</li><li>Aliases let Assist recognise the same device by several names.</li><li>A device outside the exposed list cannot be operated even if the model picks it.</li></ol></section><section><h2>Splitting failures into three</h2><p>Say the same sentence twenty times and note the outcome. Whether it was misheard, turned on another device, or picked the right one and did nothing each points to a different fix.</p><p>Mishearing is the most common. Check microphone placement and sentence length first, then aliases and instructions.</p><ul><li><a href="https://localai.co.kr/en/guides/home-assistant-ollama-conversation-agent-guide">Adding an Ollama conversation agent to Home Assistant: exposed entities and instructions</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-llm-safety-guide">Can a local LLM run the house? Exposure scope and safety boundaries</a></li><li><a href="https://localai.co.kr/en/guides/local-ai-agent-first-guide">What Is a Local AI Agent? When It Makes Sense to Run One</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li><li><a href="https://localai.co.kr/en/guides/home-assistant-daily-brief-llm-guide">A morning brief from Home Assistant: turning sensor data into sentences with a local LLM</a></li></ul></section><figure><img src="https://localai.co.kr/guides/local-ai-agent-security-guide-scene-2.webp" alt="A robot inside a clear enclosure sits beside a router, storage box, and documents" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Sorting failures by type makes the fix obvious.</figcaption></figure><section><h2>Matching names with aliases</h2><p>Mixing 'living room light' and 'main lamp' makes the model interpret each differently. Adding an alias on the Expose tab under Settings &gt; Voice assistants ties both names to one device.</p><p>Aliases also work for areas and floors. In a house that mixes Korean and English, both names make the same device reachable in either language.</p></section><section><h2>Checking the exposed list</h2><p>An alias does nothing if the entity is not exposed. The conversation agent can only see entities exposed through the Assist API, so check that frequently used lights, switches and climate devices are on the list, and leave locks and garage doors off.</p><p>A very long list makes the choice harder for the model. Keep the devices each room uses and drop seasonal ones for a while.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Aliases and the exposed list raise accuracy without changing the model.</figcaption></figure><section><h2>Refining the instructions</h2><p>Put naming rules and the answer format in the instructions: say only the device and its state when switching, and ask rather than act when unsure.</p><p>Long instructions delay the first response; short ones invite wrong actions. After adding each rule, rerun the twenty-sentence test and see whether failures dropped.</p></section><section><h2>Deciding whether to change the model</h2><p>If failures still exceed half after names and lists are tidy, a larger model is worth trying. If most failures are wrong-device picks, the list is the problem, not the model.</p><p>A large model answers slowly and the conversation stalls. Keep device control on a small model and send long questions through text input instead.</p></section><figure><img src="https://localai.co.kr/guides/rag-workflows/rag-hardware.webp" alt="A small computer running a search system beside document stacks" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Decide on model size after names and lists are tidy.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Voice commands fail in three ways: the words were misheard, the wrong device was chosen, or the right device was chosen and nothing ran. Each has a different place to check, so testing twenty sentences and sorting them by type fixes things faster.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Splitting speech off with Wyoming: moving transcription to another machine</title><link>https://localai.co.kr/en/guides/wyoming-remote-speech-server-guide</link><guid isPermaLink="true">https://localai.co.kr/en/guides/wyoming-remote-speech-server-guide</guid><description>Taking Whisper off the machine that runs Home Assistant: why Wyoming has no authentication, how to attach by address and port, and what to move.</description><content:encoded><![CDATA[<header><p>Executable programs and extensions</p><h1 id="guide-page-title">Splitting speech off with Wyoming: moving transcription to another machine</h1><p>Wyoming has no authentication, so it belongs on the home network only.</p><p id="guide-page-summary">Wyoming is the protocol Home Assistant and voice services use to exchange audio and text. Transcription and synthesis can run on another machine and attach by address and port, but with no authentication or encryption they belong on a trusted network only.</p></header><section aria-labelledby="guide-key-points"><h2 id="guide-key-points">Key takeaways</h2><ol><li>Wyoming has no authentication or encryption, so use it on trusted networks only.</li><li>Transcription and synthesis can live on another machine, attached by address and port.</li><li>Moving the heavy transcription work first gives the biggest felt difference.</li></ol></section><section><h2>Why split the speech server out</h2><p>Transcription turns audio into text and is compute-heavy. When Home Assistant runs on a Pi and Whisper sits on the same board, even automation responses slow down while a sentence is processed.</p><p>Moving the speech service elsewhere lets Home Assistant focus on conversation and automations. If a spare mini PC is around, transcription is the first thing to move.</p><ul><li><a href="https://localai.co.kr/en/guides/open-webui-local-chat-guide">Build a local AI chat interface with Open WebUI</a></li><li><a href="https://localai.co.kr/en/guides/locals-mac-agent-server-guide">Running several coding agents at once on a Mac with Locals</a></li><li><a href="https://localai.co.kr/en/guides/local-llm-serving-engines">Which local LLM app or serving engine should you start with?</a></li><li><a href="https://localai.co.kr/en/guides/local-smart-home-ai-stack-guide">Running local AI for a smart home: splitting voice, conversation and video across your own machines</a></li></ul></section><figure><img src="https://localai.co.kr/guides/rag-workflows/airgap-rollback.webp" alt="Two metal devices sit on a desk and shelf beside a laptop, with cables connected to a switch box in front" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Moving transcription off frees Home Assistant to focus on conversation.</figcaption></figure><section><h2>Wyoming is for inside the house only</h2><p>Wyoming is the protocol for exchanging microphone audio and recognition results. By design it has no authentication or encryption, so any device on the same network can reach the speech service.</p><p>So do not forward the port on the router; use a VPN to reach it from outside. Keeping it off the guest network, where untrusted devices connect, is safer too.</p></section><section><h2>Attaching by address and port</h2><p>Install and run the speech service on the other machine and it exposes an IP and port. Enter that in the Wyoming integration and the service joins the list.</p><p>On the same network it is often discovered automatically. If not, check that the machine has a fixed IP and that its firewall is not blocking the port.</p></section><figure><img src="https://localai.co.kr/guides/speech/asr-overview-1.webp" alt="An audio waveform displayed on a laptop beside a microphone" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>With no authentication, never expose Wyoming outside the home network.</figcaption></figure><section><h2>What to move, and where</h2><p>In order of compute weight: transcription, the conversation model, then synthesis. Send transcription to a machine with a GPU or spare CPU, and synthesis can stay on the Pi.</p><p>Wake word detection is better kept on the satellite board. Moving an always-on detector to the server leaves the satellite dead when the network drops.</p></section><section><h2>Checking latency and stability</h2><p>A wired speech server cuts the round trip a lot. Use the same switch when you can, and the 5 GHz band when you cannot.</p><p>After an update or reboot, check that all three services are up. If one is down the pipeline fails quietly, and speaking gets no response at all.</p></section><figure><img src="https://localai.co.kr/guides/mac-mini-24gb-vs-32gb-local-ai-scene-2.webp" alt="Colour-coded blocks leave a compartmented crate wired to an Apple compact desktop and split into document, image and audio work" width="1536" height="1024" loading="lazy" decoding="async"><figcaption>Move the heavy transcription first and keep the wake word on the board.</figcaption></figure><section aria-labelledby="guide-faq-title"><h2 id="guide-faq-title">Frequently asked questions</h2><dl><div><dt>What should you check first in this article?</dt><dd>Wyoming is the protocol Home Assistant and voice services use to exchange audio and text. Transcription and synthesis can run on another machine and attach by address and port, but with no authentication or encryption they belong on a trusted network only.</dd></div></dl></section>]]></content:encoded><pubDate>Sat, 31 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Gemma 4 12B on Mac mini M4 24GB: chat speed</title><link>https://localai.co.kr/en/results/mac-mini-m4-24gb-gemma-4-12b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-mini-m4-24gb-gemma-4-12b</guid><description>Try Gemma 4 12B on a Mac mini M4 24GB. Watch the initial wait and the response stream to judge whether the pace suits document summaries or short conversations.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Gemma 4 12B on Mac mini M4 24GB: chat speed</h1><p>Try Gemma 4 12B on a Mac mini M4 24GB. Watch the initial wait and the response stream to judge whether the pace suits document summaries or short conversations.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>11.6 ~ 12.9 tok/s</dd><dt>first token time</dt><dd>12.8 ~ 31.1 s</dd><dt>Prefill throughput</dt><dd>132 ~ 323 tok/s</dd><dt>Required memory</dt><dd>8.0GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-24gb&amp;model=gemma-4-12b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Not all 24GB is available to the model. Compare its requirements with memory left after the operating system and other apps. Longer documents also change waiting time and memory use.</p><h3>Compare this model side by side</h3><p>If you are considering 32GB, compare the same Gemma model first. Keeping the model fixed helps distinguish extra capacity from a change in workload.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-24gb&amp;right=mac-mini-m4-32gb&amp;model=gemma-4-12b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-24gb&amp;right=mac-mini-m4-32gb&amp;model=gemma-4-12b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/gemma-4-12b-serving-recipe?hardware=mac-mini-m4-24gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/mac-mini-24gb-vs-32gb-local-ai">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on Mac mini M4 32GB: response speed</title><link>https://localai.co.kr/en/results/mac-mini-m4-32gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-mini-m4-32gb-qwen-3-8-27b</guid><description>Explore Qwen3.8 27B response speed on a Mac mini M4 32GB. Beyond fitting the model, see whether the wait for a question and a longer response suits you.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on Mac mini M4 32GB: response speed</h1><p>Explore Qwen3.8 27B response speed on a Mac mini M4 32GB. Beyond fitting the model, see whether the wait for a question and a longer response suits you.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>5.1 ~ 5.7 tok/s</dd><dt>first token time</dt><dd>16.4 ~ 35.5 s</dd><dt>Prefill throughput</dt><dd>116 ~ 252 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-32gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Fitting a 27B model and answering quickly are different questions. If streaming feels slow after input processing, compare with the different chip in an M4 Pro rather than looking at memory capacity alone.</p><h3>Compare this model side by side</h3><p>Play the same model alongside an M4 Pro 48GB. Include prefill for frequent document input, or start with generation speed for short conversational turns.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-32gb&amp;right=mac-mini-m4-pro-48gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-32gb&amp;right=mac-mini-m4-pro-48gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=mac-mini-m4-32gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/mac-mini-24gb-vs-32gb-local-ai">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B: is a Mac mini M4 Pro 48GB worth it?</title><link>https://localai.co.kr/en/results/mac-mini-m4-pro-48gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-mini-m4-pro-48gb-qwen-3-8-27b</guid><description>Check the speed that matters when buying an M4 Pro 48GB for Qwen3.8 27B. Compare prefill and generation separately to decide whether your work benefits from moving beyond an M4 32GB.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B: is a Mac mini M4 Pro 48GB worth it?</h1><p>Check the speed that matters when buying an M4 Pro 48GB for Qwen3.8 27B. Compare prefill and generation separately to decide whether your work benefits from moving beyond an M4 32GB.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>12.3 ~ 13.7 tok/s</dd><dt>first token time</dt><dd>7.8 ~ 14.3 s</dd><dt>Prefill throughput</dt><dd>289 ~ 530 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-pro-48gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Long code or document inputs repeatedly incur a wait before the first sentence. Looking only at tok/s after generation starts misses that part. Recheck with an input length close to your usual work.</p><h3>Compare this model side by side</h3><p>If the M4 32GB already feels fast enough, the case for an upgrade weakens. Check the difference in completion time before comparing prices.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-48gb&amp;right=mac-mini-m4-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-mini-m4-pro-48gb&amp;right=mac-mini-m4-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=mac-mini-m4-pro-48gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/local-llm-hardware">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Mac mini M4 Pro 64GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</title><link>https://localai.co.kr/en/results/mac-mini-m4-pro-64gb-qwen-3-6-35b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-mini-m4-pro-64gb-qwen-3-6-35b</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on Mac mini M4 Pro 64GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Mac mini M4 Pro 64GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on Mac mini M4 Pro 64GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>19.6 ~ 46.1 tok/s</dd><dt>first token time</dt><dd>2.7 ~ 6.3 s</dd><dt>Prefill throughput</dt><dd>658 ~ 1,547 tok/s</dd><dt>Required memory</dt><dd>21.3GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-mini-m4-pro-64gb&amp;model=qwen-3.6-35b-a3b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on MacBook Pro M5 Pro 64GB</title><link>https://localai.co.kr/en/results/macbook-pro-m5-pro-64gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/macbook-pro-m5-pro-64gb-qwen-3-8-27b</guid><description>Explore Qwen3.8 27B on a MacBook Pro M5 Pro 64GB without a separate server. Check input processing and response generation, then compare with a desktop GPU configuration.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on MacBook Pro M5 Pro 64GB</h1><p>Explore Qwen3.8 27B on a MacBook Pro M5 Pro 64GB without a separate server. Check input processing and response generation, then compare with a desktop GPU configuration.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>14.7 ~ 17.1 tok/s</dd><dt>first token time</dt><dd>8.6 to 10.0 seconds</dd><dt>Prefill throughput</dt><dd>412 ~ 479 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=macbook-pro-m5-pro-64gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Portability and using one computer are also reasons to choose a laptop. A speed table cannot price those benefits for you. First decide whether this response pace works, then consider a separate machine if needed.</p><h3>Compare this model side by side</h3><p>An RTX 5090 is a graphics card; a MacBook is a complete computer. Compare the same model here, but include the rest of the GPU PC when evaluating purchase cost.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=macbook-pro-m5-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=macbook-pro-m5-pro-64gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=macbook-pro-m5-pro-64gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/local-coding-ai-choose-by-workflow">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on Mac Studio M4 Max 128GB</title><link>https://localai.co.kr/en/results/mac-studio-m4-max-128gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-studio-m4-max-128gb-qwen-3-8-27b</guid><description>Check prefill and generation for Qwen3.8 27B on a Mac Studio M4 Max 128GB. Compare whether you need the large memory capacity or a smaller configuration is enough for this model.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on Mac Studio M4 Max 128GB</h1><p>Check prefill and generation for Qwen3.8 27B on a Mac Studio M4 Max 128GB. Compare whether you need the large memory capacity or a smaller configuration is enough for this model.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>27.9 ~ 60.4 tok/s</dd><dt>first token time</dt><dd>5.8 to 10.5  seconds</dd><dt>Prefill throughput</dt><dd>393 ~ 707 tok/s</dd><dt>Required memory</dt><dd>17.9GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>oMLX 0.6.1 · native MTP k=3 · ANE prefill not enabled in this recipe</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m4-max-128gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Unused memory does not make a response proportionally faster. Separate plans for larger models or concurrent work from running a single 27B model today.</p><h3>Compare this model side by side</h3><p>You can inspect the same model on an M4 Pro 48GB. Decide whether extra memory headroom, rather than the speed difference, is what your work needs.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-studio-m4-max-128gb&amp;right=mac-mini-m4-pro-48gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-studio-m4-max-128gb&amp;right=mac-mini-m4-pro-48gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=mac-studio-m4-max-128gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/vram-and-unified-memory">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Studio M4 Max 128GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</title><link>https://localai.co.kr/en/results/mac-studio-m4-max-128gb-qwen-3-6-35b</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-studio-m4-max-128gb-qwen-3-6-35b</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on Studio M4 Max 128GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Studio M4 Max 128GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on Studio M4 Max 128GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>39.2 ~ 81.9 tok/s</dd><dt>first token time</dt><dd>1.5 ~ 3.1 s</dd><dt>Prefill throughput</dt><dd>1,316 ~ 2,751 tok/s</dd><dt>Required memory</dt><dd>21.3GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m4-max-128gb&amp;model=qwen-3.6-35b-a3b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Studio M3 Ultra 512GB with Qwen3.8-Flash-Next: prefill and generation speed</title><link>https://localai.co.kr/en/results/mac-studio-m3-ultra-512gb-qwen-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-studio-m3-ultra-512gb-qwen-flash-next</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on Studio M3 Ultra 512GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Studio M3 Ultra 512GB with Qwen3.8-Flash-Next: prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on Studio M3 Ultra 512GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>50 ~ 70.3 tok/s</dd><dt>first token time</dt><dd>3.3 to 4.5 seconds</dd><dt>Prefill throughput</dt><dd>910 ~ 1,229 tok/s</dd><dt>Required memory</dt><dd>107.1GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>MLX 4-bit</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m3-ultra-512gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen Flash Next on Mac Studio M5 Ultra 512GB</title><link>https://localai.co.kr/en/results/mac-studio-m5-ultra-512gb-qwen-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/results/mac-studio-m5-ultra-512gb-qwen-flash-next</guid><description>Simulate Qwen3.8 Flash Next on an M5 Ultra 512GB. Separate model capacity from response speed and compare with an M3 Ultra configuration with the same 512GB capacity.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen Flash Next on Mac Studio M5 Ultra 512GB</h1><p>Simulate Qwen3.8 Flash Next on an M5 Ultra 512GB. Separate model capacity from response speed and compare with an M3 Ultra configuration with the same 512GB capacity.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>103.5 ~ 184.1 tok/s</dd><dt>first token time</dt><dd>0.65 to 1.2  seconds</dd><dt>Prefill throughput</dt><dd>3563.3 ~ 6334.7 tok/s</dd><dt>Required memory</dt><dd>155.0GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>oMLX 0.7.0 (4d4f5a28) · mlx-lm 94cdcae · mlx 0.32.2 · native kernels · Lightning MTP on</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=mac-studio-m5-ultra-512gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Even with large memory, model file size is not the whole requirement. Context and acceleration buffers also matter. This screen represents one user, not throughput from multiple concurrent agents.</p><h3>Compare this model side by side</h3><p>Using the same model on an M3 Ultra 512GB helps separate capacity from generation differences. Check the hardware page separately for the 512GB configuration's availability and ordering conditions.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-studio-m5-ultra-512gb&amp;right=mac-studio-m3-ultra-512gb&amp;model=qwen-3.8-flash-next&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=mac-studio-m5-ultra-512gb&amp;right=mac-studio-m3-ultra-512gb&amp;model=qwen-3.8-flash-next&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe?hardware=mac-studio-m5-ultra-512gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-release-local-guide">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 3090 24GB with Gemma 4 12B: prefill and generation speed</title><link>https://localai.co.kr/en/results/rtx-3090-24gb-gemma-4-12b</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-3090-24gb-gemma-4-12b</guid><description>Experience prefill, time to first token, and generation speed for Gemma 4 12B on RTX 3090 24GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>RTX 3090 24GB with Gemma 4 12B: prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Gemma 4 12B on RTX 3090 24GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>95.5 ~ 106.1 tok/s</dd><dt>first token time</dt><dd>2.2 to 3.8 seconds</dd><dt>Prefill throughput</dt><dd>1,069 ~ 1,842 tok/s</dd><dt>Required memory</dt><dd>8.0GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp CUDA · Q4_K_M</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-3090-24gb&amp;model=gemma-4-12b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on RTX 3090: do you need an upgrade?</title><link>https://localai.co.kr/en/results/rtx-3090-24gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-3090-24gb-qwen-3-8-27b</guid><description>If you own an RTX 3090 24GB, explore Qwen3.8 27B at this response pace first. Compare with an RTX 5090 and distinguish a memory limitation from waiting time.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on RTX 3090: do you need an upgrade?</h1><p>If you own an RTX 3090 24GB, explore Qwen3.8 27B at this response pace first. Compare with an RTX 5090 and distinguish a memory limitation from waiting time.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>42.3 ~ 46.9 tok/s</dd><dt>first token time</dt><dd>4.4 to 7.5 seconds</dd><dt>Prefill throughput</dt><dd>548 ~ 944 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp CUDA · Q4_K_M</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-3090-24gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>If your 3090 feels slow, check the model file and settings before shopping for a new GPU. Comparing CPU-offloaded execution with a GPU-resident run can exaggerate hardware differences.</p><h3>Compare this model side by side</h3><p>Watch the same response to see how the wait changes on a 5090. If your current pace is acceptable, you can defer an upgrade and identify whether long inputs or generation are the real issue.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-3090-24gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-3090-24gb&amp;right=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=nvidia-rtx-3090-24gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/rtx-3090-before-upgrading-local-ai">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on RTX 4090: prefill and generation</title><link>https://localai.co.kr/en/results/rtx-4090-24gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-4090-24gb-qwen-3-8-27b</guid><description>Watch Qwen3.8 27B process input and respond on an RTX 4090 24GB. Compare with an RTX 3090 to see how waiting time differs despite the same 24GB memory capacity.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on RTX 4090: prefill and generation</h1><p>Watch Qwen3.8 27B process input and respond on an RTX 4090 24GB. Compare with an RTX 3090 to see how waiting time differs despite the same 24GB memory capacity.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>38.3 ~ 51.9 tok/s</dd><dt>first token time</dt><dd>2.6 to 3.6 seconds</dd><dt>Prefill throughput</dt><dd>1,141 ~ 1,591 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp CUDA · Q4_K_M</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-4090-24gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>The 4090 also has 24GB of VRAM, so distinguish capacity from processing speed. The right comparison depends on whether you need a larger model or faster execution of one that already fits.</p><h3>Compare this model side by side</h3><p>When comparing with a 3090, check document prefill as well as short chat. These are LLM results; the same ratio does not establish image or video generation performance.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-4090-24gb&amp;right=nvidia-rtx-3090-24gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-4090-24gb&amp;right=nvidia-rtx-3090-24gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=nvidia-rtx-4090-24gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/prefill-can-reverse-speed-ranking">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen3.8 27B on RTX 5090: recommended settings</title><link>https://localai.co.kr/en/results/rtx-5090-32gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-5090-32gb-qwen-3-8-27b</guid><description>Try the recommended Qwen3.8 27B configuration on an RTX 5090 32GB. Inspect quantization and acceleration, then compare prefill and response speed with an RTX 4090.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen3.8 27B on RTX 5090: recommended settings</h1><p>Try the recommended Qwen3.8 27B configuration on an RTX 5090 32GB. Inspect quantization and acceleration, then compare prefill and response speed with an RTX 4090.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>148.2 ~ 217.8 tok/s</dd><dt>first token time</dt><dd>0.27 to 0.39  seconds</dd><dt>Prefill throughput</dt><dd>10660.8 ~ 15662.2 tok/s</dd><dt>Required memory</dt><dd>19.0GB</dd><dt>Quantization</dt><dd>NVFP4</dd><dt>Runtime</dt><dd>vLLM 0.28.0 · CUDA 13.3.1 · driver 610.43.02 · MTP-2</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5090-32gb&amp;model=qwen-3.8-27b&amp;quant=NVFP4&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Downloading the model file alone does not reproduce this configuration. Model format, runtime and acceleration support must align. Expand the current settings below or open the device-specific recipe.</p><h3>Compare this model side by side</h3><p>The comparison uses recommended settings for each device. Quantization can differ, so the gap represents complete serving configurations, not an isolated GPU-only benchmark.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-5090-32gb&amp;right=nvidia-rtx-4090-24gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-rtx-5090-32gb&amp;right=nvidia-rtx-4090-24gb&amp;model=qwen-3.8-27b&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-27b-serving-recipe?hardware=nvidia-rtx-5090-32gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/llm-quantization">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX 5090 32GB with Gemma 4 26B-A4B (MoE): prefill and generation speed</title><link>https://localai.co.kr/en/results/rtx-5090-32gb-gemma-4-26b</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-5090-32gb-gemma-4-26b</guid><description>Experience prefill, time to first token, and generation speed for Gemma 4 26B-A4B (MoE) on RTX 5090 32GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>RTX 5090 32GB with Gemma 4 26B-A4B (MoE): prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Gemma 4 26B-A4B (MoE) on RTX 5090 32GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>122.7 ~ 284.8 tok/s</dd><dt>first token time</dt><dd>0.56 to 0.85 seconds</dd><dt>Prefill throughput</dt><dd>4,856 ~ 7,408 tok/s</dd><dt>Required memory</dt><dd>15.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp CUDA · Q4_K_M</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-5090-32gb&amp;model=gemma-4-26b-a4b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>RTX PRO 6000 96GB with Qwen3.8-Flash-Next: prefill and generation speed</title><link>https://localai.co.kr/en/results/rtx-pro-6000-96gb-qwen-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/results/rtx-pro-6000-96gb-qwen-flash-next</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on RTX PRO 6000 96GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>RTX PRO 6000 96GB with Qwen3.8-Flash-Next: prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on RTX PRO 6000 96GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>175.2 ~ 340.0 tok/s</dd><dt>first token time</dt><dd>1.2 to 2.2  seconds</dd><dt>Prefill throughput</dt><dd>1835.7 ~ 3563.4 tok/s</dd><dt>Required memory</dt><dd>116.1GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>Strata 0.1.40 · UD-Q4_K_XL · MTP-4 · FP16 KV · RAM PLE · all experts in VRAM</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-rtx-pro-6000-blackwell-96gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>DGX Spark 128GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</title><link>https://localai.co.kr/en/results/dgx-spark-qwen-3-6-35b</link><guid isPermaLink="true">https://localai.co.kr/en/results/dgx-spark-qwen-3-6-35b</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on DGX Spark 128GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>DGX Spark 128GB with Qwen3.6 35B-A3B (MoE): prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on DGX Spark 128GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>61.2 ~ 111.1 tok/s</dd><dt>first token time</dt><dd>1.5 to 3.1  seconds</dd><dt>Prefill throughput</dt><dd>1,341 ~ 2,661 tok/s</dd><dt>Required memory</dt><dd>24.3GB</dd><dt>Quantization</dt><dd>NVFP4</dd><dt>Runtime</dt><dd>vLLM 0.25.0 · CUDA 13.0 · MTP K=2</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-dgx-spark-128gb&amp;model=qwen-3.6-35b-a3b&amp;quant=NVFP4&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Qwen Flash Next on two DGX Sparks: what changes?</title><link>https://localai.co.kr/en/results/dual-dgx-spark-qwen-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/results/dual-dgx-spark-qwen-flash-next</guid><description>Explore Qwen3.8 Flash Next on two DGX Sparks. Compare the same model on one unit and separate added model capacity from single-response generation speed.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Qwen Flash Next on two DGX Sparks: what changes?</h1><p>Explore Qwen3.8 Flash Next on two DGX Sparks. Compare the same model on one unit and separate added model capacity from single-response generation speed.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>16.7 ~ 33.8 tok/s</dd><dt>first token time</dt><dd>1.7 to 4.3 seconds</dd><dt>Prefill throughput</dt><dd>973 ~ 2,517 tok/s</dd><dt>Required memory</dt><dd>107.1GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>4-bit · 2-node setup</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-dgx-spark-256gb&amp;model=qwen-3.8-flash-next&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p><section><h2>Reading this result</h2><p>Two units are connected nodes, not one memory pool. Partitioning and interconnect conditions affect results, and settings for one fast request differ from those for throughput. This screen simulates a single request.</p><h3>Compare this model side by side</h3><p>Compare from prefill against one unit. If a second unit does not speed up a single answer as much as you expect, reconsider whether your goal is larger models or concurrent throughput.</p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-dual-dgx-spark-256gb&amp;right=nvidia-dgx-spark-128gb&amp;model=qwen-3.8-flash-next&amp;context=4096&amp;mode=full">Include prefill</a></p><p><a href="https://localai.co.kr/en/compare/hardware-speed-comparison?left=nvidia-dual-dgx-spark-256gb&amp;right=nvidia-dgx-spark-128gb&amp;model=qwen-3.8-flash-next&amp;context=4096&amp;mode=decode">Compare generation only</a></p><p><a href="https://localai.co.kr/en/guides/qwen-3.8-flash-next-serving-recipe?hardware=nvidia-dual-dgx-spark-256gb">Serving settings for this device</a></p><p><a href="https://localai.co.kr/en/guides/dual-dgx-spark-what-actually-improves">Read the hardware decision guide</a></p></section>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>2× RTX 3090 48GB (NVLink) with Qwen3.6 35B-A3B (MoE): prefill and generation speed</title><link>https://localai.co.kr/en/results/dual-rtx-3090-qwen-3-6-35b</link><guid isPermaLink="true">https://localai.co.kr/en/results/dual-rtx-3090-qwen-3-6-35b</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on 2× RTX 3090 48GB (NVLink) with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>2× RTX 3090 48GB (NVLink) with Qwen3.6 35B-A3B (MoE): prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.6 35B-A3B (MoE) on 2× RTX 3090 48GB (NVLink) with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>79.2 ~ 248.6 tok/s</dd><dt>first token time</dt><dd>0.63 to 1.4 seconds</dd><dt>Prefill throughput</dt><dd>2,863 ~ 6,573 tok/s</dd><dt>Required memory</dt><dd>21.3GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp CUDA · Q4_K_M · GPU split into 2 pieces</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-3090-48gb&amp;model=qwen-3.6-35b-a3b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>2× RTX 5090 64GB (PCIe) with Qwen3.8-Flash-Next: prefill and generation speed</title><link>https://localai.co.kr/en/results/dual-rtx-5090-qwen-flash-next</link><guid isPermaLink="true">https://localai.co.kr/en/results/dual-rtx-5090-qwen-flash-next</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on 2× RTX 5090 64GB (PCIe) with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>2× RTX 5090 64GB (PCIe) with Qwen3.8-Flash-Next: prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.8-Flash-Next on 2× RTX 5090 64GB (PCIe) with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>127.7 ~ 263.9 tok/s</dd><dt>first token time</dt><dd>0.46 to 0.94  seconds</dd><dt>Prefill throughput</dt><dd>4375.9 ~ 9044.5 tok/s</dd><dt>Required memory</dt><dd>82.5GB</dd><dt>Quantization</dt><dd>IQ3_S</dd><dt>Runtime</dt><dd>Strata 0.1.41 · IQ3_S · MTP-6 · INT8 KV · SSD PLE · GPU 1/2</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=nvidia-dual-rtx-5090-64gb&amp;model=qwen-3.8-flash-next&amp;quant=IQ3_S&amp;context=4096&amp;accel=mtp">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Ryzen AI Max+ 395 128GB with Qwen3.8 27B: prefill and generation speed</title><link>https://localai.co.kr/en/results/ryzen-ai-max-395-128gb-qwen-3-8-27b</link><guid isPermaLink="true">https://localai.co.kr/en/results/ryzen-ai-max-395-128gb-qwen-3-8-27b</guid><description>Experience prefill, time to first token, and generation speed for Qwen3.8 27B on Ryzen AI Max+ 395 128GB with recommended settings and the same 4K input.</description><content:encoded><![CDATA[<header><p>4K input · Recommended settings for each device</p><h1>Ryzen AI Max+ 395 128GB with Qwen3.8 27B: prefill and generation speed</h1><p>Experience prefill, time to first token, and generation speed for Qwen3.8 27B on Ryzen AI Max+ 395 128GB with recommended settings and the same 4K input.</p></header><aside aria-labelledby="benchmark-evidence-summary"><p>Data basis</p><h2 id="benchmark-evidence-summary">Measured benchmarks come first; only combinations without matching records are estimated.</h2><p>We collect measured benchmarks with identifiable hardware, model, quantization, runtime, and input/output lengths, then normalize them to comparable conditions. Missing combinations are bounded from nearby measurements, memory bandwidth, active parameters, and runtime overhead.</p><p><a href="https://localai.co.kr/en/methodology#benchmark-evidence">Measurement and review method</a> · <a href="https://localai.co.kr/en/data">Open data</a></p></aside><section><h2>Estimated speed</h2><dl><dt>token generation speed</dt><dd>11.2 ~ 12.5 tok/s</dd><dt>first token time</dt><dd>46.6 to 85.4 seconds</dd><dt>Prefill throughput</dt><dd>48 ~ 88 tok/s</dd><dt>Required memory</dt><dd>17.6GB</dd><dt>Quantization</dt><dd>Q4_K_M</dd><dt>Runtime</dt><dd>llama.cpp HIP · Q4_K_M</dd></dl><p>Results use the same 4,096-token input for a single user. Actual speed can vary with the runtime, cooling, and model file.</p></section><p><a href="https://localai.co.kr/en/speed?hardware=amd-ryzen-ai-max-plus-395-128gb&amp;model=qwen-3.8-27b&amp;quant=Q4_K_M&amp;context=4096&amp;accel=none">Try again with different settings</a></p>]]></content:encoded><pubDate>Thu, 29 Oct 2026 15:00:00 GMT</pubDate></item><item><title>Introduction to Local AI Equipment Guide</title><link>https://localai.co.kr/en/about</link><guid isPermaLink="true">https://localai.co.kr/en/about</guid><description>The Local AI Equipment Guide is a tool for Korean users to compare model load, prefill, token generation speed, power, and total cost before purchasing Macs and GPUs.</description><content:encoded><![CDATA[<header><p>About</p><h1>Local AI hardware guide introduction: Check whether it's worth buying, worth waiting for, or worth maintaining before making a purchase.</h1><p>The Local AI Equipment Guide is a tool for Korean users to compare model load, prefill, token generation speed, power, and total cost before purchasing Macs and GPUs.</p></header><section><h2>What to compare</h2><p>Check the memory available for the actual model, not the display memory. It then shows the prefill for reading long inputs, the token generation rate followed by an answer, and the sustained load power and holding costs separately.</p></section><section><h2>Who is this site for?</h2><p>This site is for home users who are trying to narrow down what to buy between a finished Mac, an NVIDIA GPU, and a large integrated memory device. It's not an equipment store, it's a tool that provides comparisons and calculations.</p></section><section><h2>How to read the numbers</h2><p>Speed figures use collected benchmark measurements first. Only combinations without matching records are estimated from measured values. Pre-release hardware and distributed setups are labeled separately and updated after retail configurations and runtime support are confirmed.</p></section><section><h2>Operating principles</h2><p>You can review the calculation method, open data, privacy handling, and affiliate relationship separately. Hardware comparisons are calculated independently of affiliate-link availability.</p><ul><li><a href="https://localai.co.kr/en/methodology">Measurement and calculation method</a></li><li><a href="https://localai.co.kr/en/data">Open data</a></li><li><a href="https://localai.co.kr/en/privacy">Privacy information</a></li><li><a href="https://localai.co.kr/en/affiliate-disclosure">Affiliate link policy</a></li></ul></section><section id="contact"><h2>Contact</h2><p>For questions about the site or suggestions for data corrections, email us below.</p><ul><li><a href="mailto:admin@localai.co.kr">admin@localai.co.kr</a></li></ul></section><p>Updated September 2026</p>]]></content:encoded><pubDate>Sat, 26 Sep 2026 15:00:00 GMT</pubDate></item><item><title>Local LLM speed and cost calculation criteria</title><link>https://localai.co.kr/en/methodology</link><guid isPermaLink="true">https://localai.co.kr/en/methodology</guid><description>We explain under what conditions and correction criteria are calculated the prefill, first token time, decode speed, memory load, power, market price, and TCO for each local LLM device.</description><content:encoded><![CDATA[<header><p>Methodology</p><h1>Local LLM speed and cost calculation benchmark: Instead of concluding with a single number, compare ranges under the same conditions.</h1><p>We explain under what conditions and correction criteria are calculated the prefill, first token time, decode speed, memory load, power, market price, and TCO for each local LLM device.</p></header><section><h2>Basic comparison conditions</h2><p>Representative comparisons on the equipment detail page are Q4 quantization, 4K context, and single user conditions. We first determine whether the model weights, execution overhead, and KV cache fit within actual available memory.</p></section><section id="benchmark-evidence"><h2>Benchmark collection and review</h2><p>Speed ranges start with measured benchmark records collected by the site. We compare records whose hardware, model, quantization, runtime, and input and output token counts can be identified, after normalizing them to the same conditions.</p><p>When no matching measurement exists, we estimate a range from nearby measured results while accounting for memory bandwidth, active parameters, and runtime overhead. Direct measurements, collected third-party measurements, and measurement-based estimates are not presented as the same evidence level.</p><ul><li><a href="https://localai.co.kr/en/data">Download open data</a></li></ul></section><section><h2>Benchmark record review</h2><p>We review repeated runs only when their hardware, model, runtime, and test conditions can be verified. User submissions are approved after an administrator checks the conditions and evidence; approval alone does not automatically change calculator results.</p></section><section><h2>Prefill and decode</h2><p>We separate prefill, which processes input tokens, from decode, which generates response tokens sequentially. Collected measurements are normalized to the comparison conditions, and values that depart sharply from the repeated-run pattern are excluded from the representative range.</p></section><section><h2>Power, price, TCO</h2><p>Power is calculated from sustained local inference load ranges rather than instantaneous peaks. TCO compares the purchase price, expected sale price, electricity bill, and actual replacement subscription fee for one and two years.</p></section><section><h2>limit</h2><p>Actual results may vary depending on runtime version, cooling, quantization file, context length and multi-GPU communication. Therefore, it is recommended that you double-check the speed gauge with the selected model and exact memory configuration just before purchasing.</p></section><p>Updated September 2026</p>]]></content:encoded><pubDate>Sat, 26 Sep 2026 15:00:00 GMT</pubDate></item></channel></rss>
