<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://matrixhub.ai/blog</id>
    <title>MatrixHub Blog</title>
    <updated>2026-06-30T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://matrixhub.ai/blog"/>
    <subtitle>MatrixHub Blog</subtitle>
    <icon>https://matrixhub.ai/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Deduplicating model downloads across Dynamo workers with ModelExpress]]></title>
        <id>https://matrixhub.ai/blog/dynamo-modelexpress-dedup</id>
        <link href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup"/>
        <updated>2026-06-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Deploying two Dynamo vLLM workers with ModelExpress on a GPU Kubernetes cluster, showing that the second worker skips the model download entirely and only streams from the ModelExpress cache.]]></summary>
        <content type="html"><![CDATA[<p>When scaling an inference service to multiple workers, every new worker downloads the full model from the model registry. For a 3 GB model this adds 30–40 seconds per worker; for a 70B model it can be 10+ minutes each.</p>
<p><a href="https://docs.nvidia.com/dynamo/kubernetes-deployment/model-loading/model-express" target="_blank" rel="noopener noreferrer" class="">ModelExpress</a> is a model distribution cache layer in NVIDIA Dynamo. It sits between the workers and the model source (MatrixHub or Hugging Face). The first worker triggers a download into the ModelExpress cache. Every subsequent worker gets the model from that cache — no second download.</p>
<p>In this test we deploy two Dynamo vLLM workers for <code>Qwen/Qwen2.5-1.5B-Instruct</code> (~3 GB) and compare the model acquisition time of the first worker (cache miss) versus the second worker (cache hit).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment">Environment<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#environment" class="hash-link" aria-label="Direct link to Environment" title="Direct link to Environment" translate="no">​</a></h2>
<table><thead><tr><th>Component</th><th>Configuration</th></tr></thead><tbody><tr><td>GPU</td><td>HAMi vGPU</td></tr><tr><td>Model</td><td>Qwen/Qwen2.5-1.5B-Instruct (~3 GB)</td></tr><tr><td>ModelExpress</td><td>v0.3.0</td></tr><tr><td>MatrixHub</td><td>self-hosted, Hugging Face-compatible endpoint</td></tr><tr><td>Storage mode</td><td><code>NO_SHARED_STORAGE=1</code> (gRPC streaming)</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works">How it works<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">┌──────────┐     ┌──────────────┐     ┌────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Worker 1 │────▶│ ModelExpress │────▶│ MatrixHub  │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Worker 2 │────▶│   (cache)    │     │  (registry) │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Worker N │────▶│              │     └────────────┘</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└──────────┘     └──────────────┘</span><br></span></code></pre></div></div>
<ul>
<li class=""><strong>First request</strong>: ModelExpress downloads the model from MatrixHub into its local cache, then streams the files to the requesting worker over gRPC.</li>
<li class=""><strong>Subsequent requests</strong>: ModelExpress streams directly from its local cache. No download from MatrixHub.</li>
</ul>
<p>Compared to a plain MatrixHub setup (Blog 1), the decode component adds three environment variables:</p>
<ul>
<li class=""><code>VLLM_PLUGINS=modelexpress</code> — enable the ModelExpress vLLM plugin</li>
<li class=""><code>MODEL_EXPRESS_NO_SHARED_STORAGE=1</code> — use gRPC streaming instead of a shared filesystem</li>
<li class=""><code>MODEL_EXPRESS_URL</code> — the ModelExpress server address</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment-files">Deployment files<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#deployment-files" class="hash-link" aria-label="Direct link to Deployment files" title="Direct link to Deployment files" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="worker-1-dgd-blog2-c-mxyaml">Worker 1: dgd-blog2-c-mx.yaml<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#worker-1-dgd-blog2-c-mxyaml" class="hash-link" aria-label="Direct link to Worker 1: dgd-blog2-c-mx.yaml" title="Direct link to Worker 1: dgd-blog2-c-mx.yaml" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">apiVersion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvidia.com/v1beta1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> DynamoGraphDeployment</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">7b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">c</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> dynamo</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">system</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Frontend</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> frontend</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">replicas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">podTemplate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">containers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> main</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvcr.io/nvidia/ai</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dynamo/vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">runtime</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">workingDir</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> /workspace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> HF_ENDPOINT</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://&lt;matrixhub-endpoint&gt;"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"python3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-m"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"dynamo.frontend"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"--http-port"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">resources</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token key atrule">requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token key atrule">limits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> decode</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> decode</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">replicas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">podTemplate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">containers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> main</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvcr.io/nvidia/ai</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dynamo/vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">runtime</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">workingDir</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> /workspace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> HF_ENDPOINT</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://&lt;matrixhub-endpoint&gt;"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> VLLM_PLUGINS</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"modelexpress"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> MODEL_EXPRESS_NO_SHARED_STORAGE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> MODEL_EXPRESS_URL</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://&lt;modelexpress-service&gt;:8001"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"python3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-m"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"dynamo.vllm"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Qwen/Qwen2.5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">1.5B</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">Instruct</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">served</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">name</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Qwen/Qwen2.5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">1.5B</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">Instruct</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">tensor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">parallel</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">size</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">utilization</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0.85"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">len</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8192"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">no</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">enable</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">requests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              </span><span class="token key atrule">resources</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token key atrule">requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"16Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/vgpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/gpucores</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"30"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/gpumem</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token key atrule">limits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"16Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/vgpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/gpucores</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"30"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  </span><span class="token key atrule">nvidia.com/gpumem</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="worker-2-dgd-blog2-c2-mxyaml">Worker 2: dgd-blog2-c2-mx.yaml<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#worker-2-dgd-blog2-c2-mxyaml" class="hash-link" aria-label="Direct link to Worker 2: dgd-blog2-c2-mx.yaml" title="Direct link to Worker 2: dgd-blog2-c2-mx.yaml" translate="no">​</a></h3>
<p>Worker 2 is a separate DynamoGraphDeployment with the same configuration but a different name (<code>vllm-7b-c2</code>). The full YAML is identical except for <code>metadata.name</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="clear-the-modelexpress-cache">Clear the ModelExpress cache<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#clear-the-modelexpress-cache" class="hash-link" aria-label="Direct link to Clear the ModelExpress cache" title="Direct link to Clear the ModelExpress cache" translate="no">​</a></h2>
<p>ModelExpress stores model files on a PVC (<code>local-path</code>). Restarting the pod alone does not remove the cached files. To start from a clean state:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl exec -n model-express deploy/model-express-modelexpress \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -- rm -rf /root/models--Qwen--Qwen2.5-1.5B-Instruct /root/blobs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl rollout restart deployment/model-express-modelexpress -n model-express</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl rollout status deployment/model-express-modelexpress -n model-express</span><br></span></code></pre></div></div>
<p>Verify:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl exec -n model-express deploy/model-express-modelexpress \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -- ls /root/models--Qwen--Qwen2.5-1.5B-Instruct</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Expected: ls: cannot access ... No such file or directory</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deploy-worker-1">Deploy Worker 1<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#deploy-worker-1" class="hash-link" aria-label="Direct link to Deploy Worker 1" title="Direct link to Deploy Worker 1" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl apply -f dgd-blog2-c-mx.yaml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl get pods -n dynamo-system -o wide -w</span><br></span></code></pre></div></div>
<p>Watch the decode pod logs:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl logs -n dynamo-system -f &lt;c-decode-pod&gt;</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:28:45 INFO dynamo_llm::hub: Successfully connected to ModelExpress server</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:28:45 INFO modelexpress_client: Requesting model: Qwen/Qwen2.5-1.5B-Instruct from provider: HuggingFace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:28:45 INFO modelexpress_client: Model Qwen/Qwen2.5-1.5B-Instruct: Model download in progress</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:29:24 INFO modelexpress_client: Model Qwen/Qwen2.5-1.5B-Instruct: Model download completed successfully</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:29:24 INFO modelexpress_client: Shared storage disabled, streaming files from server for model Qwen/Qwen2.5-1.5B-Instruct</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:29:24 INFO modelexpress_client: Streaming model Qwen/Qwen2.5-1.5B-Instruct files to "/home/dynamo/.model-express/cache" with chunk size 32768 bytes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:29:48 INFO modelexpress_client: Streaming complete: received 8 files (3098967011 bytes) for model Qwen/Qwen2.5-1.5B-Instruct</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Worker 1 decode log" src="https://matrixhub.ai/assets/images/blog2-c-decode-log-0239cb54eea16d255859cc4a484bca1d.png" width="1493" height="378" class="img_ev3q"></p>
<p>Worker 1 waited 38.3 seconds for ModelExpress to download the model from MatrixHub, then received the files over gRPC streaming in 24.2 seconds.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deploy-worker-2">Deploy Worker 2<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#deploy-worker-2" class="hash-link" aria-label="Direct link to Deploy Worker 2" title="Direct link to Deploy Worker 2" translate="no">​</a></h2>
<p>After Worker 1 is ready, deploy Worker 2:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl apply -f dgd-blog2-c2-mx.yaml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl get pods -n dynamo-system -o wide -w</span><br></span></code></pre></div></div>
<p>Watch the decode pod logs:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl logs -n dynamo-system -f &lt;c2-decode-pod&gt;</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:35 INFO dynamo_llm::hub: Successfully connected to ModelExpress server</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:35 INFO modelexpress_client: Requesting model: Qwen/Qwen2.5-1.5B-Instruct from provider: HuggingFace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:35 INFO modelexpress_client: Model Qwen/Qwen2.5-1.5B-Instruct: Model already downloaded</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:35 INFO modelexpress_client: Shared storage disabled, streaming files from server for model Qwen/Qwen2.5-1.5B-Instruct</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:35 INFO modelexpress_client: Streaming model Qwen/Qwen2.5-1.5B-Instruct files to "/home/dynamo/.model-express/cache" with chunk size 32768 bytes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2026-07-06T02:32:58 INFO modelexpress_client: Streaming complete: received 8 files (3098967011 bytes) for model Qwen/Qwen2.5-1.5B-Instruct</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Worker 2 decode log" src="https://matrixhub.ai/assets/images/blog2-c2-decode-log-720939ab1fa92a40d7729b59db6e1cc9.png" width="1491" height="351" class="img_ev3q"></p>
<p>Worker 2 sees <code>Model already downloaded</code> — ModelExpress skips the download entirely and streams directly from its local cache in 22.8 seconds.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-the-inference-service">Verify the inference service<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#verify-the-inference-service" class="hash-link" aria-label="Direct link to Verify the inference service" title="Direct link to Verify the inference service" translate="no">​</a></h2>
<p>After both workers are ready, test that each can serve inference requests:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Worker 1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl exec -n dynamo-system &lt;c-frontend-pod&gt; -- \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  curl -s http://localhost:8000/v1/chat/completions \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -d '{"model":"Qwen/Qwen2.5-1.5B-Instruct","messages":[{"role":"user","content":"hi"}],"max_tokens":20}' \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  | python3 -m json.tool</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Worker 2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl exec -n dynamo-system &lt;c2-frontend-pod&gt; -- \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  curl -s http://localhost:8000/v1/chat/completions \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -d '{"model":"Qwen/Qwen2.5-1.5B-Instruct","messages":[{"role":"user","content":"hello"}],"max_tokens":20}' \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  | python3 -m json.tool</span><br></span></code></pre></div></div>
<p>Both return a normal response:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"choices"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token property">"message"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token property">"content"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Hello! How can I assist you today?"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token property">"role"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"assistant"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token property">"finish_reason"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"stop"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Qwen/Qwen2.5-1.5B-Instruct"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="results">Results<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results" translate="no">​</a></h2>
<table><thead><tr><th></th><th style="text-align:right">MX → MatrixHub download</th><th style="text-align:right">gRPC streaming</th><th style="text-align:right">Total model acquisition</th></tr></thead><tbody><tr><td>Worker 1 (cache miss)</td><td style="text-align:right">38.3 s</td><td style="text-align:right">24.2 s</td><td style="text-align:right"><strong>62.5 s</strong></td></tr><tr><td>Worker 2 (cache hit)</td><td style="text-align:right">0 s</td><td style="text-align:right">22.8 s</td><td style="text-align:right"><strong>22.8 s</strong></td></tr></tbody></table>
<p>For comparison, without ModelExpress (Blog 1):</p>
<table><thead><tr><th>Source</th><th style="text-align:right">Model acquisition</th></tr></thead><tbody><tr><td>Public Hugging Face</td><td style="text-align:right">~10 min 32 s</td></tr><tr><td>MatrixHub direct</td><td style="text-align:right">29 s</td></tr></tbody></table>
<p>Worker 2 saved the full 38.3-second MatrixHub download. With more workers, the saving multiplies: N workers share one download.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="notes">Notes<a href="https://matrixhub.ai/blog/dynamo-modelexpress-dedup#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes" translate="no">​</a></h2>
<p><strong>First-worker overhead.</strong> The first worker through ModelExpress (62.5 s) is slower than a direct MatrixHub download (29 s), because the model passes through an extra gRPC streaming hop (~24 s). ModelExpress pays off when multiple workers need the same model.</p>
<p><strong>Streaming throughput.</strong> The gRPC streaming stage transfers 3 GB in ~23 seconds (~131 MB/s). The current implementation uses a 32 KB chunk size with about 94,000 iterations. With shared storage (<code>NO_SHARED_STORAGE=0</code>), workers can mount the ModelExpress cache directory directly and skip streaming entirely — model acquisition drops to near zero for cached models.</p>
<p><strong>When to use what.</strong></p>
<table><thead><tr><th>Scenario</th><th>Recommendation</th></tr></thead><tbody><tr><td>Single worker</td><td>MatrixHub direct download (fastest)</td></tr><tr><td>Multiple workers scaling out</td><td>ModelExpress + MatrixHub</td></tr><tr><td>Shared filesystem available (NFS/Lustre)</td><td>ModelExpress shared_storage mode</td></tr><tr><td>No shared filesystem</td><td>ModelExpress NO_SHARED_STORAGE streaming mode</td></tr></tbody></table>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Speeding up SGLang model startup with MatrixHub cache]]></title>
        <id>https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration</id>
        <link href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration"/>
        <updated>2026-06-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A Qwen3-0.6B test comparing SGLang startup time when loading model files from MatrixHub cache versus directly from Hugging Face.]]></summary>
        <content type="html"><![CDATA[<p>When starting an inference service locally or inside a private network, model download is often the slowest and least predictable step.</p>
<p>SGLang, Transformers, vLLM, and many other tools fetch model files through the Hugging Face Hub protocol. If every service pulls directly from public Hugging Face, startup time depends on public network bandwidth, rate limits, and remote availability.</p>
<p>In this test, we use <code>Qwen/Qwen3-0.6B</code> to compare two startup paths:</p>
<ul>
<li class="">SGLang pulls model files through MatrixHub's Hugging Face-compatible endpoint.</li>
<li class="">SGLang pulls model files directly from Hugging Face.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prepare-the-model-cache-in-matrixhub">Prepare the model cache in MatrixHub<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#prepare-the-model-cache-in-matrixhub" class="hash-link" aria-label="Direct link to Prepare the model cache in MatrixHub" title="Direct link to Prepare the model cache in MatrixHub" translate="no">​</a></h2>
<p>First, create a Hugging Face Registry in MatrixHub and use it from a Proxy Project.</p>
<p>The Proxy Project is a Hugging Face-compatible proxy entrypoint. It is still empty right after creation. MatrixHub does not automatically sync all upstream models when the project is created.</p>
<p><img decoding="async" loading="lazy" alt="Configure a Hugging Face Registry" src="https://matrixhub.ai/assets/images/sglang8-c54b4f6a58167a5079142e8932d3d237.png" width="1326" height="1624" class="img_ev3q"></p>
<p>The cache is created when a client first requests model files. You can pre-warm it with <code>hf download</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">HF_ENDPOINT=http://127.0.0.1:3002</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">hf download Qwen/Qwen3-0.6B</span><br></span></code></pre></div></div>
<p>The <code>hf</code> CLI sends the request to MatrixHub's Hugging Face-compatible API. If the files are not cached yet, MatrixHub pulls them from upstream Hugging Face and stores them locally. Later, SGLang, vLLM, or other clients can hit the MatrixHub cache directly without going back to Hugging Face.</p>
<p>After the cache is populated, the model detail page shows the cached files.</p>
<p><img decoding="async" loading="lazy" alt="Cached model files in MatrixHub" src="https://matrixhub.ai/assets/images/sglang2-63d0fab122261100b8c91dbda91201e9.png" width="3488" height="1770" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiment-1-start-sglang-through-matrixhub">Experiment 1: Start SGLang through MatrixHub<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#experiment-1-start-sglang-through-matrixhub" class="hash-link" aria-label="Direct link to Experiment 1: Start SGLang through MatrixHub" title="Direct link to Experiment 1: Start SGLang through MatrixHub" translate="no">​</a></h2>
<p>Before each run, remove the local Hugging Face cache to avoid measuring local cache hits:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">rm -rf ~/.cache/huggingface/hub/models--Qwen--Qwen3-0.6B</span><br></span></code></pre></div></div>
<p>Then start SGLang with <code>HF_ENDPOINT</code> pointing to MatrixHub:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">SGLANG_USE_MLX=1 HF_ENDPOINT=http://127.0.0.1:3002 python -m sglang.launch_server \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --model-path Qwen/Qwen3-0.6B \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --host 0.0.0.0 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --port 30000 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --disable-cuda-graph</span><br></span></code></pre></div></div>
<p>The key part is:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">HF_ENDPOINT=http://127.0.0.1:3002</span><br></span></code></pre></div></div>
<p>Here, <code>127.0.0.1:3002</code> is the Hugging Face-compatible endpoint exposed by MatrixHub.</p>
<p><img decoding="async" loading="lazy" alt="Start SGLang with the MatrixHub endpoint" src="https://matrixhub.ai/assets/images/sglang3-ec4753e36caf95b067156fa53c998b72.png" width="2500" height="682" class="img_ev3q"></p>
<p>The startup log confirms the endpoint used for model downloads:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Hugging Face endpoint for model downloads: http://127.0.0.1:3002</span><br></span></code></pre></div></div>
<p>The model files are then fetched and the server becomes ready:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Fetching 7 files: 100%</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Download complete: 100% 1.50G/1.50G</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">MLX model loaded in 3.39s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">The server is fired up and ready to roll!</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="SGLang started after loading from MatrixHub cache" src="https://matrixhub.ai/assets/images/sglang4-e9fcb346f8f7e885237d08dde0914b02.png" width="2484" height="1186" class="img_ev3q"></p>
<p>From the screenshot:</p>
<table><thead><tr><th>Stage</th><th style="text-align:right">Time</th></tr></thead><tbody><tr><td>Command started</td><td style="text-align:right">21:23:16</td></tr><tr><td>SGLang ready</td><td style="text-align:right">21:23:51</td></tr><tr><td>Total</td><td style="text-align:right">About 35 seconds</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-the-inference-service">Verify the inference service<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#verify-the-inference-service" class="hash-link" aria-label="Direct link to Verify the inference service" title="Direct link to Verify the inference service" translate="no">​</a></h2>
<p>After the server is ready, call the OpenAI-compatible API:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">curl http://127.0.0.1:30000/v1/chat/completions \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "model": "Qwen/Qwen3-0.6B",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "messages": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      {"role": "user", "content": "你好，简单介绍一下你自己"}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "max_tokens": 128,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "temperature": 0.6</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<p>The model returns a normal response, which confirms that the model was loaded successfully and the inference service is usable.</p>
<p><img decoding="async" loading="lazy" alt="Call the SGLang OpenAI-compatible API" src="https://matrixhub.ai/assets/images/sglang5-55cdbf273458015b96df1507d8f000b6.png" width="2512" height="748" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiment-2-start-sglang-directly-from-hugging-face">Experiment 2: Start SGLang directly from Hugging Face<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#experiment-2-start-sglang-directly-from-hugging-face" class="hash-link" aria-label="Direct link to Experiment 2: Start SGLang directly from Hugging Face" title="Direct link to Experiment 2: Start SGLang directly from Hugging Face" translate="no">​</a></h2>
<p>Next, run the same model with the same SGLang arguments, but point the endpoint back to Hugging Face:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">SGLANG_USE_MLX=1 HF_ENDPOINT=https://huggingface.co python -m sglang.launch_server \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --model-path Qwen/Qwen3-0.6B \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --host 0.0.0.0 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --port 30000 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --disable-cuda-graph</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Pull model files directly from Hugging Face" src="https://matrixhub.ai/assets/images/sglang6-f34c0ef004d3c19b33d72e3f55894f14.png" width="2460" height="636" class="img_ev3q"></p>
<p>This path also starts successfully, but it takes longer:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">MLX model loaded in 72.97s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">The server is fired up and ready to roll!</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="SGLang started after pulling from Hugging Face" src="https://matrixhub.ai/assets/images/sglang7-201e33ec4e88e63a9f1e94b1ff65f1e8.png" width="2482" height="994" class="img_ev3q"></p>
<p>From the screenshot:</p>
<table><thead><tr><th>Stage</th><th style="text-align:right">Time</th></tr></thead><tbody><tr><td>Command started</td><td style="text-align:right">21:26:31</td></tr><tr><td>SGLang ready</td><td style="text-align:right">21:28:36</td></tr><tr><td>Total</td><td style="text-align:right">About 125 seconds</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="results">Results<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results" translate="no">​</a></h2>
<p>Both runs cleared the local Hugging Face cache first. The model and SGLang arguments stayed the same. The only major difference was <code>HF_ENDPOINT</code>.</p>
<table><thead><tr><th>Source</th><th>Endpoint</th><th style="text-align:right">Command started</th><th style="text-align:right">Server ready</th><th style="text-align:right">Total</th></tr></thead><tbody><tr><td>MatrixHub cache</td><td><code>http://127.0.0.1:3002</code></td><td style="text-align:right">21:23:16</td><td style="text-align:right">21:23:51</td><td style="text-align:right">About 35 seconds</td></tr><tr><td>Hugging Face</td><td><code>https://huggingface.co</code></td><td style="text-align:right">21:26:31</td><td style="text-align:right">21:28:36</td><td style="text-align:right">About 125 seconds</td></tr></tbody></table>
<p>In this test, the MatrixHub path reduced startup time from about 125 seconds to about 35 seconds.</p>
<p><code>Qwen3-0.6B</code> is a small model. With larger models, or with multiple machines repeatedly pulling the same models, a shared cache layer becomes much more valuable.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-matrixhub-helps">Why MatrixHub helps<a href="https://matrixhub.ai/blog/sglang-matrixhub-cache-acceleration#why-matrixhub-helps" class="hash-link" aria-label="Direct link to Why MatrixHub helps" title="Direct link to Why MatrixHub helps" translate="no">​</a></h2>
<p>MatrixHub acts as a Hugging Face-compatible model cache layer:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">SGLang / vLLM / Transformers</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">HF_ENDPOINT</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">MatrixHub Proxy Project</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">MatrixHub cache or upstream Hugging Face</span><br></span></code></pre></div></div>
<p>The first request fills the cache. Later requests for the same model can be served by MatrixHub directly.</p>
<p>The client still uses the original Hugging Face repo name:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Qwen/Qwen3-0.6B</span><br></span></code></pre></div></div>
<p>And the integration only requires setting the endpoint:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">export HF_ENDPOINT=http://127.0.0.1:3002</span><br></span></code></pre></div></div>
<p>This gives several practical benefits:</p>
<ul>
<li class="">Fewer repeated downloads for the same model.</li>
<li class="">More predictable startup time.</li>
<li class="">A single model entrypoint for SGLang, vLLM, Transformers, and other Hugging Face-compatible clients.</li>
<li class="">Better fit for private networks, shared development environments, and inference clusters.</li>
</ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Dynamo + MatrixHub integration experiment]]></title>
        <id>https://matrixhub.ai/blog/dynamo-matrixhub-integration</id>
        <link href="https://matrixhub.ai/blog/dynamo-matrixhub-integration"/>
        <updated>2026-06-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Running Dynamo on a GPU Kubernetes cluster while pulling model weights from an in-cluster MatrixHub, and comparing first-download time against public Hugging Face.]]></summary>
        <content type="html"><![CDATA[<p>We ran two experiments to measure how much an in-network MatrixHub speeds up the first model-weight download for a Dynamo inference service.</p>
<ul>
<li class=""><strong>Experiment 1</strong>: Deploy Dynamo on a GPU Kubernetes cluster and pull model weights from an internal MatrixHub. The result is an OpenAI-compatible inference service that can answer chat requests for the <code>qwen3-0.6b</code> model.</li>
<li class=""><strong>Experiment 2</strong>: Repeat the same setup, but pull the weights from public Hugging Face instead, and compare the first-download time of the two runs.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiment-1">Experiment 1<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#experiment-1" class="hash-link" aria-label="Direct link to Experiment 1" title="Direct link to Experiment 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment">Environment<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#environment" class="hash-link" aria-label="Direct link to Environment" title="Direct link to Environment" translate="no">​</a></h3>
<ul>
<li class=""><strong>Dynamo is installed</strong> — the Dynamo operator is already deployed in the cluster and can pick up the deployment file in step 2 and bring up the service automatically.</li>
<li class=""><strong>GPU node</strong> — one NVIDIA A800 80GB, sliceable into 10 vGPUs. The node runs HAMi (a GPU virtualization component) that splits a physical GPU into several slices so multiple services can share the same card.</li>
<li class=""><strong>In-network model hub (MatrixHub)</strong> — a MatrixHub model-weight registry is deployed internally (<code>matrixhub.internal:30001</code>). Weights are pulled from here, never over the public internet. The <code>chenyang-qwen/qwen3-0.6b</code> model was pre-cached on MatrixHub with <code>hf download</code>.</li>
<li class=""><strong>Network reachability</strong> — the cluster node <code>&lt;cluster-node&gt;</code> can pull container images (nvcr.io) and reach the internal weight source MatrixHub (<code>matrixhub.internal:30001</code>).</li>
</ul>
<p>Confirm the above first, especially that <strong>Dynamo</strong> and <strong>vGPU</strong> are ready.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="before-you-start">Before you start<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#before-you-start" class="hash-link" aria-label="Direct link to Before you start" title="Direct link to Before you start" translate="no">​</a></h3>
<ul>
<li class="">The cluster kubeconfig file</li>
<li class="">A machine with <code>kubectl</code> installed</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-connect-to-the-cluster">Step 1: Connect to the cluster<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#step-1-connect-to-the-cluster" class="hash-link" aria-label="Direct link to Step 1: Connect to the cluster" title="Direct link to Step 1: Connect to the cluster" translate="no">​</a></h3>
<p>Open a terminal and set the kubeconfig (do this once per new terminal):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Replace with the actual path to your kubeconfig file</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export KUBECONFIG=&lt;path-to-your-kubeconfig&gt;</span><br></span></code></pre></div></div>
<p>Verify connectivity:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl get nodes</span><br></span></code></pre></div></div>
<p>If you see the node list, you are good.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-prepare-the-deployment-file">Step 2: Prepare the deployment file<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#step-2-prepare-the-deployment-file" class="hash-link" aria-label="Direct link to Step 2: Prepare the deployment file" title="Direct link to Step 2: Prepare the deployment file" translate="no">​</a></h3>
<p>Create a file <code>dgd-vllm-vgpu.yaml</code> with the following content:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">apiVersion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvidia.com/v1alpha1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> DynamoGraphDeployment</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">qwen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">vgpu</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> dynamo</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">system</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">services</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">Frontend</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">componentType</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> frontend</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">replicas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">resources</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">limits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">extraPodSpec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">mainContainer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvcr.io/nvidia/ai</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dynamo/vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">runtime</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">1.1.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">workingDir</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> /workspace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> HF_ENDPOINT</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://matrixhub.internal:30001"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"python3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-m"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"dynamo.frontend"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"--http-port"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">decode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">componentType</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> worker</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">subComponentType</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> decode</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">replicas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">resources</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"16Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">custom</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/vgpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain">          </span><span class="token comment" style="color:rgb(98, 114, 164)"># 1 vGPU slice</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/gpumem</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000"</span><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># memory limit, MB (~10GB)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/gpucores</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"30"</span><span class="token plain">     </span><span class="token comment" style="color:rgb(98, 114, 164)"># compute limit, 0-100</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">limits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">cpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"16Gi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">custom</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/vgpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/gpumem</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token key atrule">nvidia.com/gpucores</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"30"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">extraPodSpec</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">mainContainer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> nvcr.io/nvidia/ai</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dynamo/vllm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">runtime</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">1.1.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">workingDir</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> /workspace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> HF_ENDPOINT</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"http://matrixhub.internal:30001"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"python3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"-m"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"dynamo.vllm"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> chenyang</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">qwen/qwen3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">0.6b</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">served</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">name</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> chenyang</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">qwen/qwen3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">0.6b</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">tensor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">parallel</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">size</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">gpu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">memory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">utilization</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0.85"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">len</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"8192"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">no</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">enable</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">requests</span><br></span></code></pre></div></div>
<p>Note: the <code>HF_ENDPOINT</code> environment variable points to the internal MatrixHub address <code>http://matrixhub.internal:30001</code>.</p>
<p>Common things you may want to change later:</p>
<table><thead><tr><th>What to change</th><th>Where</th></tr></thead><tbody><tr><td>Switch model</td><td>replace both <code>chenyang-qwen/qwen3-0.6b</code> with the new model name</td></tr><tr><td>More GPU memory</td><td>raise both <code>nvidia.com/gpumem: "10000"</code> (unit MB)</td></tr><tr><td>More compute</td><td>raise both <code>nvidia.com/gpucores: "30"</code> (max 100)</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-deploy">Step 3: Deploy<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#step-3-deploy" class="hash-link" aria-label="Direct link to Step 3: Deploy" title="Direct link to Step 3: Deploy" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl apply -f dgd-vllm-vgpu.yaml</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-wait-for-it-to-come-up">Step 4: Wait for it to come up<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#step-4-wait-for-it-to-come-up" class="hash-link" aria-label="Direct link to Step 4: Wait for it to come up" title="Direct link to Step 4: Wait for it to come up" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl -n dynamo-system get pods -l nvidia.com/dynamo-graph-deployment-name=vllm-qwen-vgpu -w</span><br></span></code></pre></div></div>
<p>Wait until both pods show <code>1/1 Running</code> (the first deploy pulls images and may take a few minutes).</p>
<p><img decoding="async" loading="lazy" alt="Both pods Running" src="https://matrixhub.ai/assets/images/pods-running-1-0f6be4bff1d339c56b524fba3cac8784.png" width="951" height="63" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Both pods Running" src="https://matrixhub.ai/assets/images/pods-running-2-34ef38dcf619f564f4ecb4561ef3d552.png" width="1381" height="87" class="img_ev3q"></p>
<p><strong>Check the service logs:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl -n dynamo-system logs &lt;pod-name&gt; --tail=50</span><br></span></code></pre></div></div>
<p>Because MatrixHub is deployed internally and the model is already cached (<code>HF_ENDPOINT</code> points to MatrixHub), the model download takes about 10 seconds:</p>
<p><img decoding="async" loading="lazy" alt="Model download ~10s" src="https://matrixhub.ai/assets/images/download-10s-1948d72c12591a37196ee21e22a077dc.png" width="1549" height="603" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-test-the-service">Step 5: Test the service<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#step-5-test-the-service" class="hash-link" aria-label="Direct link to Step 5: Test the service" title="Direct link to Step 5: Test the service" translate="no">​</a></h3>
<p>First get the frontend pod name:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl -n dynamo-system get pods | grep frontend</span><br></span></code></pre></div></div>
<p>Test with that name (replace <code>&lt;frontend-pod&gt;</code> with what you found above):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl -n dynamo-system exec &lt;frontend-pod&gt; -- curl -s http://localhost:8000/v1/chat/completions \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -H 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  -d '{"model":"chenyang-qwen/qwen3-0.6b","messages":[{"role":"user","content":"Introduce yourself in one sentence"}],"max_tokens":64}'</span><br></span></code></pre></div></div>
<p>If the model returns a reply, the deployment succeeded.</p>
<p><img decoding="async" loading="lazy" alt="Chat test response" src="https://matrixhub.ai/assets/images/chat-test-53f617b2bbe9f562c5945009a3fb7f4c.png" width="1559" height="230" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiment-2">Experiment 2<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#experiment-2" class="hash-link" aria-label="Direct link to Experiment 2" title="Direct link to Experiment 2" translate="no">​</a></h2>
<p>Everything else is identical to Experiment 1. Just remove the <code>HF_ENDPOINT</code> environment variable from the deployment YAML, and it falls back to pulling model weights from public Hugging Face.</p>
<p>Without MatrixHub (downloading from public Hugging Face), the logs show the model download takes about 6 minutes:</p>
<p><img decoding="async" loading="lazy" alt="Hugging Face download ~6min" src="https://matrixhub.ai/assets/images/hf-download-6min-3d2c7506b47a20e1a67d084c2ae0f38a.png" width="2590" height="1012" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="results-first-download-time-comparison">Results: first-download time comparison<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#results-first-download-time-comparison" class="hash-link" aria-label="Direct link to Results: first-download time comparison" title="Direct link to Results: first-download time comparison" translate="no">​</a></h2>
<p>Measured per-stage timings for the two cases — "internal MatrixHub with the model pre-cached" vs. "no MatrixHub" — using the <code>qwen3-0.6b</code> model. <strong>The first-download comparison is shown below:</strong></p>
<table><thead><tr><th>Stage</th><th>Experiment 1 (internal MatrixHub, model cached)</th><th>Experiment 2 (no MatrixHub)</th></tr></thead><tbody><tr><td>Pull container image (10GB+)</td><td>seconds (cached on node)</td><td>seconds (cached on node)</td></tr><tr><td>Download model weights</td><td><strong>~10 s (from internal MatrixHub cache)</strong></td><td><strong>~6 min (from public Hugging Face)</strong></td></tr><tr><td>vLLM engine start + model load</td><td>1–2 min</td><td>1–2 min</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://matrixhub.ai/blog/dynamo-matrixhub-integration#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>An in-network MatrixHub significantly accelerates Dynamo's first model-weight download.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[DeepSeek v4 won't run? 99% of people get stuck at the distribution stage]]></title>
        <id>https://matrixhub.ai/blog/deepseek-v4-distribution</id>
        <link href="https://matrixhub.ai/blog/deepseek-v4-distribution"/>
        <updated>2026-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Why enterprise DeepSeek rollouts fail at distribution, not model serving, and how MatrixHub fits in.]]></summary>
        <content type="html"><![CDATA[<p>Recently, DeepSeek released DeepSeek v4, and many teams rushed to integrate it.</p>
<p>But if you're operating in an enterprise environment, especially air-gapped or private deployments, you'll quickly realize one thing:</p>
<blockquote>
<p>The model is not the biggest problem. Distribution is.</p>
</blockquote>
<p>During our attempt to deploy DeepSeek v4 in an internal network, we ran into a lot of issues. In the end, they can all be boiled down to three fundamental problems.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-you-think-its-a-download-problem-but-its-actually-an-architecture-problem">1. You think it's a download problem, but it's actually an architecture problem<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#1-you-think-its-a-download-problem-but-its-actually-an-architecture-problem" class="hash-link" aria-label="Direct link to 1. You think it's a download problem, but it's actually an architecture problem" title="Direct link to 1. You think it's a download problem, but it's actually an architecture problem" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hugging-face-doesnt-work-well-in-enterprise-environments">Hugging Face doesn't work well in enterprise environments<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#hugging-face-doesnt-work-well-in-enterprise-environments" class="hash-link" aria-label="Direct link to Hugging Face doesn't work well in enterprise environments" title="Direct link to Hugging Face doesn't work well in enterprise environments" translate="no">​</a></h3>
<ul>
<li class="">Unstable or completely unavailable network</li>
<li class="">Slow downloads and large-file interruptions</li>
<li class="">Lack of access control</li>
</ul>
<p>It looks like a slow-download issue, but in reality:</p>
<blockquote>
<p>Hugging Face is built for research collaboration, not controlled enterprise distribution.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-you-try-to-fix-it-yourself-but-make-it-worse">2. You try to fix it yourself, but make it worse<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#2-you-try-to-fix-it-yourself-but-make-it-worse" class="hash-link" aria-label="Direct link to 2. You try to fix it yourself, but make it worse" title="Direct link to 2. You try to fix it yourself, but make it worse" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-workarounds-all-break-down">Common workarounds all break down<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#common-workarounds-all-break-down" class="hash-link" aria-label="Direct link to Common workarounds all break down" title="Direct link to Common workarounds all break down" translate="no">​</a></h3>
<ul>
<li class="">Manual file transfer leads to version chaos and no auditability</li>
<li class="">NFS and NAS hit IO bottlenecks and still have no caching</li>
<li class="">Each node downloading independently exhausts bandwidth and slows cold starts</li>
</ul>
<p>Especially in vLLM and SGLang scenarios:</p>
<blockquote>
<p>Every node downloading the same model multiplies bandwidth pressure by N.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-the-real-problem-is-actually-just-one-thing">3. The real problem is actually just one thing<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#3-the-real-problem-is-actually-just-one-thing" class="hash-link" aria-label="Direct link to 3. The real problem is actually just one thing" title="Direct link to 3. The real problem is actually just one thing" translate="no">​</a></h2>
<p>All these issues can be summarized in one sentence:</p>
<blockquote>
<p>You're missing a model distribution infrastructure layer, like a container registry for model artifacts.</p>
</blockquote>
<p>Just like you wouldn't use Docker Hub directly in production, you'd use a private registry instead. But in the model world, this layer has been missing for a long time.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-our-solution">4. Our solution<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#4-our-solution" class="hash-link" aria-label="Direct link to 4. Our solution" title="Direct link to 4. Our solution" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-idea">Core idea<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#core-idea" class="hash-link" aria-label="Direct link to Core idea" title="Direct link to Core idea" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Public Model Source (Hugging Face)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Proxy / Caching Layer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Unified Internal Distribution</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">vLLM / Inference Services</span><br></span></code></pre></div></div>
<p>This follows a pattern that has already been proven elsewhere:</p>
<ul>
<li class="">Docker -&gt; Docker Hub -&gt; Harbor</li>
<li class="">Maven -&gt; Central -&gt; Nexus</li>
<li class="">PyPI -&gt; pip -&gt; Private Registry</li>
</ul>
<p>Model distribution is fundamentally the same kind of problem.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-capabilities">Key capabilities<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#key-capabilities" class="hash-link" aria-label="Direct link to Key capabilities" title="Direct link to Key capabilities" translate="no">​</a></h3>
<p>This distribution layer should provide:</p>
<ol>
<li class="">Proxy access to Hugging Face, not a replacement</li>
<li class="">Automatic model caching</li>
<li class="">Resume support for interrupted transfers</li>
<li class="">Access control and permissions</li>
<li class="">Internal network distribution</li>
<li class="">Compatibility with vLLM and SGLang</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-we-built-it-into-a-project">5. We built it into a project<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#5-we-built-it-into-a-project" class="hash-link" aria-label="Direct link to 5. We built it into a project" title="Direct link to 5. We built it into a project" translate="no">​</a></h2>
<p><a href="https://github.com/matrixhub-ai/matrixhub" target="_blank" rel="noopener noreferrer" class="">MatrixHub</a> is essentially:</p>
<blockquote>
<p>An enterprise-grade Hugging Face proxy and model distribution acceleration layer.</p>
</blockquote>
<p>It provides:</p>
<ul>
<li class="">A Hugging Face proxy for public-network constraints</li>
<li class="">A model cache layer to eliminate repeated downloads</li>
<li class="">A unified enterprise access entry for permissions and governance</li>
</ul>
<p>You can think of it as:</p>
<ul>
<li class="">Harbor for models</li>
<li class="">The container registry of the AI era</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-quick-start">6. Quick start<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#6-quick-start" class="hash-link" aria-label="Direct link to 6. Quick start" title="Direct link to 6. Quick start" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-start-the-service">Step 1: Start the service<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-1-start-the-service" class="hash-link" aria-label="Direct link to Step 1: Start the service" title="Direct link to Step 1: Start the service" translate="no">​</a></h3>
<p>Download <a href="https://matrixhub.ai/deploy/docker/docker-compose.yaml" download="docker-compose.yaml"><code>docker-compose.yaml</code></a> and <a href="https://matrixhub.ai/deploy/docker/config.yaml" download="config.yaml"><code>config.yaml</code></a>, and make sure the two files are in the same folder.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">docker compose -f docker-compose.yaml up -d</span><br></span></code></pre></div></div>
<p>Default service endpoint:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">http://127.0.0.1:3001</span><br></span></code></pre></div></div>
<p>Verify:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">curl http://127.0.0.1:3001</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-login">Step 2: Login<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-2-login" class="hash-link" aria-label="Direct link to Step 2: Login" title="Direct link to Step 2: Login" translate="no">​</a></h3>
<ul>
<li class="">Username: <code>admin</code></li>
<li class="">Password: <code>changeme</code></li>
</ul>
<p>Change the password immediately.</p>
<p><img decoding="async" loading="lazy" alt="login" src="https://matrixhub.ai/assets/images/login-cbb09f3ddeec0c99068836ac24eedf92.png" width="842" height="980" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-create-a-remote-registry-to-proxy-hugging-face">Step 3: Create a remote registry to proxy Hugging Face<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-3-create-a-remote-registry-to-proxy-hugging-face" class="hash-link" aria-label="Direct link to Step 3: Create a remote registry to proxy Hugging Face" title="Direct link to Step 3: Create a remote registry to proxy Hugging Face" translate="no">​</a></h3>
<p>Key configuration:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Remote URL: https://hf-mirror.com ( or https://huggingface.co )</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Type: HuggingFace</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Recommended name: huggingface</span><br></span></code></pre></div></div>
<p>How it works:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Request -&gt; MatrixHub -&gt; Hugging Face -&gt; Response</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Platform settings" src="https://matrixhub.ai/assets/images/registry1-ff256b8adaad3cdc3caf42deda818efc.PNG" width="1280" height="572" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Registry management" src="https://matrixhub.ai/assets/images/registry2-9f6f466e7682ca18fe28f4c7ced13214.PNG" width="1280" height="440" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Create registry" src="https://matrixhub.ai/assets/images/registry-create-0b7ca2b7096325c9c3a9b7e0639f1211.png" width="2748" height="1524" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Registry list" src="https://matrixhub.ai/assets/images/registry-list-704727632f24459cb7b8c188278dc11c.png" width="2466" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-create-a-proxy-project">Step 4: Create a proxy project<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-4-create-a-proxy-project" class="hash-link" aria-label="Direct link to Step 4: Create a proxy project" title="Direct link to Step 4: Create a proxy project" translate="no">​</a></h3>
<p>Purpose:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">User -&gt; Proxy Project -&gt; Remote Repo (HF) -&gt; Cache</span><br></span></code></pre></div></div>
<p>When creating the project:</p>
<ul>
<li class="">Select the <code>huggingface</code> remote registry</li>
<li class="">Specify the model organization: <code>deepseek-ai</code></li>
</ul>
<p><img decoding="async" loading="lazy" alt="Create project 1" src="https://matrixhub.ai/assets/images/project1-c9d03f0dc077a772ef0c932f313e6548.PNG" width="1175" height="280" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Create project" src="https://matrixhub.ai/assets/images/project-create-58fbc9bbe9978b686de0cc5104780208.png" width="2756" height="1358" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Project list" src="https://matrixhub.ai/assets/images/project-list-6cbc293989546e0e99a5cde3ce9ad397.png" width="2050" height="786" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-client-integration">Step 5: Client integration<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-5-client-integration" class="hash-link" aria-label="Direct link to Step 5: Client integration" title="Direct link to Step 5: Client integration" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">export HF_ENDPOINT="http://127.0.0.1:3001"</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Client integration" src="data:image/png;base64,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" width="555" height="41" class="img_ev3q"></p>
<p>What this does:</p>
<ul>
<li class="">Redirects client requests</li>
<li class="">Lets the first request fetch from Hugging Face</li>
<li class="">Automatically caches locally</li>
<li class="">Keeps all later requests inside the intranet</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6-download-the-model">Step 6: Download the model<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#step-6-download-the-model" class="hash-link" aria-label="Direct link to Step 6: Download the model" title="Direct link to Step 6: Download the model" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="61-start-the-download">6.1 Start the download<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#61-start-the-download" class="hash-link" aria-label="Direct link to 6.1 Start the download" title="Direct link to 6.1 Start the download" translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">hf download deepseek-ai/DeepSeek-V4-Pro</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="62-first-node-populate-the-cache">6.2 First node: populate the cache<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#62-first-node-populate-the-cache" class="hash-link" aria-label="Direct link to 6.2 First node: populate the cache" title="Direct link to 6.2 First node: populate the cache" translate="no">​</a></h4>
<p>In our test environment, the first download took <strong>6 hours and 56 minutes</strong>. This initial request fetched the model from the upstream Hugging Face source and populated the MatrixHub cache. Replace <abbr title="Replace this with your actual MatrixHub service address"><code><a href="http://x.x.x.x:3001/" target="_blank" rel="noopener noreferrer" class="">http://x.x.x.x:3001</a></code></abbr> with your actual MatrixHub service address.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node1:/data/matrixhub# export HF_ENDPOINT="http://x.x.x.x:3001"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node1:/data/matrixhub# export HF_HUB_DOWNLOAD_TIMEOUT=120</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node1:/data/matrixhub# nohup time -p hf download deepseek-ai/DeepSeek-V4-Pro --local-dir /data/matrixhub/deepseek-v4</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="First download" src="https://matrixhub.ai/assets/images/first-download-5c9eff90bee54b61808700200baa81e6.png" width="4476" height="576" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="63-second-node-reuse-the-cached-model">6.3 Second node: reuse the cached model<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#63-second-node-reuse-the-cached-model" class="hash-link" aria-label="Direct link to 6.3 Second node: reuse the cached model" title="Direct link to 6.3 Second node: reuse the cached model" translate="no">​</a></h4>
<p>The second download, from another node in the same internal network, completed in <strong>86 minutes</strong> because the model files were already cached by MatrixHub.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node2:/data/matrixhub# export HF_ENDPOINT="http://x.x.x.x:3001"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node2:/data/matrixhub# export HF_HUB_DOWNLOAD_TIMEOUT=120</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root@node2:/data/matrixhub# time hf download deepseek-ai/DeepSeek-V4-Pro --local-dir /data/matrixhub/deepseek-v4</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Second download" src="https://matrixhub.ai/assets/images/secondary-download-094364b7e6dcddbfa7499e3dfbacd4e7.png" width="1750" height="485" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="64-verify-the-model-in-the-ui">6.4 Verify the model in the UI<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#64-verify-the-model-in-the-ui" class="hash-link" aria-label="Direct link to 6.4 Verify the model in the UI" title="Direct link to 6.4 Verify the model in the UI" translate="no">​</a></h4>
<p>After the download finishes, you can see the <code>DeepSeek-V4-Pro</code> model under the <code>deepseek-ai</code> project in the UI.</p>
<p><img decoding="async" loading="lazy" alt="Model list" src="https://matrixhub.ai/assets/images/model-list-295ee816433585c3fc331e73d4ec0ac4.png" width="2788" height="1044" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="65-inspect-cached-model-files">6.5 Inspect cached model files<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#65-inspect-cached-model-files" class="hash-link" aria-label="Direct link to 6.5 Inspect cached model files" title="Direct link to 6.5 Inspect cached model files" translate="no">​</a></h4>
<p>Open the model details page to inspect the cached files and verify that the artifacts are available for internal distribution.</p>
<p><img decoding="async" loading="lazy" alt="Model details" src="https://matrixhub.ai/assets/images/model-detail-0e7f4f39c86f922a1214982853d6ca37.png" width="2318" height="1588" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-cache-effectiveness">Verify cache effectiveness<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#verify-cache-effectiveness" class="hash-link" aria-label="Direct link to Verify cache effectiveness" title="Direct link to Verify cache effectiveness" translate="no">​</a></h2>
<p>Use <code>curl</code> to observe request behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="first-request-cache-miss">First request: cache miss<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#first-request-cache-miss" class="hash-link" aria-label="Direct link to First request: cache miss" title="Direct link to First request: cache miss" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">curl -I http://127.0.0.1:3001/deepseek-ai/DeepSeek-V4-Pro/resolve/main/config.json</span><br></span></code></pre></div></div>
<p>Characteristics:</p>
<ul>
<li class="">Longer response time</li>
<li class="">Contains upstream headers</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="second-request-cache-hit">Second request: cache hit<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#second-request-cache-hit" class="hash-link" aria-label="Direct link to Second request: cache hit" title="Direct link to Second request: cache hit" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">curl -I http://127.0.0.1:3001/deepseek-ai/DeepSeek-V4-Pro/resolve/main/config.json</span><br></span></code></pre></div></div>
<p>Characteristics:</p>
<ul>
<li class="">Very fast response</li>
<li class="">No longer hits Hugging Face</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-thoughts">Final thoughts<a href="https://matrixhub.ai/blog/deepseek-v4-distribution#final-thoughts" class="hash-link" aria-label="Direct link to Final thoughts" title="Direct link to Final thoughts" translate="no">​</a></h2>
<p>If you're deploying large models in an enterprise environment, you will inevitably face:</p>
<ul>
<li class="">Slow downloads</li>
<li class="">Bandwidth exhaustion</li>
<li class="">Repeated downloads across nodes</li>
<li class="">Lack of access control</li>
</ul>
<p>These are not edge cases. They are architectural gaps.</p>
<p>MatrixHub simply fills that missing layer.</p>
<p>If you're working on similar problems, feel free to connect:</p>
<p><a href="https://github.com/matrixhub-ai/matrixhub" target="_blank" rel="noopener noreferrer" class="">https://github.com/matrixhub-ai/matrixhub</a></p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Examples]]></title>
        <id>https://matrixhub.ai/blog/examples</id>
        <link href="https://matrixhub.ai/blog/examples"/>
        <updated>2026-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Real-world MatrixHub usage examples for internal model distribution and caching.]]></summary>
        <content type="html"><![CDATA[<p>Real-world examples of using MatrixHub.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-use-cases">Common use cases<a href="https://matrixhub.ai/blog/examples#common-use-cases" class="hash-link" aria-label="Direct link to Common use cases" title="Direct link to Common use cases" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="intranet-vllm-cluster-distribution">Intranet vLLM cluster distribution<a href="https://matrixhub.ai/blog/examples#intranet-vllm-cluster-distribution" class="hash-link" aria-label="Direct link to Intranet vLLM cluster distribution" title="Direct link to Intranet vLLM cluster distribution" translate="no">​</a></h3>
<ul>
<li class=""><strong>Scenario</strong>: A production intranet runs a vLLM inference cluster with 100 GPU servers. Because model files can be huge, such as a 70B model exceeding 130GB, having every machine pull from public Hugging Face is slow and may trigger outbound bandwidth throttling.</li>
<li class=""><strong>Flow overview</strong>:<!-- -->
<ol>
<li class=""><strong>Single access point</strong>: Set the <code>HF_ENDPOINT</code> environment variable of all vLLM nodes to the internal MatrixHub endpoint.</li>
<li class=""><strong>Pull once, cache for all</strong>: When the first node requests a model, MatrixHub pulls it from the public network and persists it locally; subsequent nodes hit the intranet cache directly.</li>
</ol>
</li>
</ul>
<blockquote>
<p>As a user, I want to point the <code>hf download</code> endpoint to MatrixHub so that later downloads inside the same network become much faster after the first request has already cached the model.</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="steps">Steps<a href="https://matrixhub.ai/blog/examples#steps" class="hash-link" aria-label="Direct link to Steps" title="Direct link to Steps" translate="no">​</a></h4>
<ol>
<li class="">Visit the MatrixHub address <code>http://x.x.x.x:3001</code> and open the login page.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-9-11a9d9b71042d89118e669d7a1a9f046.png" width="1280" height="493" class="img_ev3q"></p>
<ol start="2">
<li class="">Log in as the admin user and open the model repository list.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-7-d7b8efac8a7379cb52072c6dc70ccb7f.png" width="1280" height="427" class="img_ev3q"></p>
<ol start="3">
<li class="">Click the top-right user menu, then go to Platform Settings and Registry Management.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-6-e1653e50fb45defa2f561d3a36a94932.png" width="1364" height="256" class="img_ev3q"></p>
<ol start="4">
<li class="">Create a target registry: select Hugging Face as the provider, set the registry name to <code>hf</code>, enter the target URL <code>https://hf-mirror.com</code>, enable remote certificate verification, and click <code>OK</code>.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-4-3d38e0bf35f4393bdcf136f4ffb0aa0d.png" width="1280" height="629" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-8-c3987fcab808e5e8c95be5f153c8a6cf.png" width="1479" height="256" class="img_ev3q"></p>
<ol start="5">
<li class="">Go to Project Management and open the project list page.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-5-ea4d67ab467e6f2368869220b38b43b6.png" width="1320" height="256" class="img_ev3q"></p>
<ol start="6">
<li class="">Click <code>Create Project</code>: set the project name to <code>qwen</code>, set it to <code>Public</code>, enable <code>Proxy</code>, select the registry, set the proxy organization to <code>Qwen</code>, and click <code>OK</code>.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-3-0972ccc28408ff87a516b47246e146b1.png" width="1280" height="504" class="img_ev3q"></p>
<ol start="7">
<li class="">
<p>Pull the model.</p>
<ul>
<li class=""><strong>First node</strong>: about <code>3m37.318s</code></li>
</ul>
</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-1-5aeb41c1ce1affca6ca6a91d7980747c.png" width="1785" height="256" class="img_ev3q"></p>
<ul>
<li class=""><strong>Second node</strong>: about <code>0m8.500s</code></li>
</ul>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-5aeb41c1ce1affca6ca6a91d7980747c.png" width="1785" height="256" class="img_ev3q"></p>
<ol start="8">
<li class="">View the model information in MatrixHub.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/assets/images/scenario-test-en-2-1460f61f3109b83c2052d174a926dacb.png" width="1280" height="532" class="img_ev3q"></p>]]></content>
    </entry>
</feed>