<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://matrixhub.ai/zh-CN/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/zh-CN/blog"/>
    <subtitle>MatrixHub Blog</subtitle>
    <icon>https://matrixhub.ai/zh-CN/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Deduplicating model downloads across Dynamo workers with ModelExpress]]></title>
        <id>https://matrixhub.ai/zh-CN/blog/dynamo-modelexpress-dedup</id>
        <link href="https://matrixhub.ai/zh-CN/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/zh-CN/blog/dynamo-modelexpress-dedup#environment" class="hash-link" aria-label="Environment的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#how-it-works" class="hash-link" aria-label="How it works的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#deployment-files" class="hash-link" aria-label="Deployment files的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#worker-1-dgd-blog2-c-mxyaml" class="hash-link" aria-label="Worker 1: dgd-blog2-c-mx.yaml的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#worker-2-dgd-blog2-c2-mxyaml" class="hash-link" aria-label="Worker 2: dgd-blog2-c2-mx.yaml的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#clear-the-modelexpress-cache" class="hash-link" aria-label="Clear the ModelExpress cache的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#deploy-worker-1" class="hash-link" aria-label="Deploy Worker 1的直接链接" title="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/zh-CN/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/zh-CN/blog/dynamo-modelexpress-dedup#deploy-worker-2" class="hash-link" aria-label="Deploy Worker 2的直接链接" title="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/zh-CN/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/zh-CN/blog/dynamo-modelexpress-dedup#verify-the-inference-service" class="hash-link" aria-label="Verify the inference service的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#results" class="hash-link" aria-label="Results的直接链接" title="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/zh-CN/blog/dynamo-modelexpress-dedup#notes" class="hash-link" aria-label="Notes的直接链接" title="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[使用 MatrixHub 缓存加速 SGLang 模型启动]]></title>
        <id>https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration</id>
        <link href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration"/>
        <updated>2026-06-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[通过 Qwen3-0.6B 实测 SGLang 从 MatrixHub 缓存和 Hugging Face 拉取模型时的启动耗时差异。]]></summary>
        <content type="html"><![CDATA[<p>在本地或内网环境启动推理服务时，模型下载经常是最耗时、最不稳定的一步。</p>
<p>SGLang、Transformers、vLLM 等工具通常会通过 Hugging Face Hub 协议获取模型文件；如果每次都直接访问公网 Hugging Face，启动时间就会受到公网带宽、限流和远端可用性的影响。</p>
<p>这篇文章用 <code>Qwen/Qwen3-0.6B</code> 做一个简单测试，对比两种启动方式：</p>
<ul>
<li class="">SGLang 通过 MatrixHub 的 Hugging Face 兼容接口拉取模型。</li>
<li class="">SGLang 直接从 Hugging Face 拉取模型。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="准备在-matrixhub-中缓存模型">准备：在 MatrixHub 中缓存模型<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#%E5%87%86%E5%A4%87%E5%9C%A8-matrixhub-%E4%B8%AD%E7%BC%93%E5%AD%98%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="准备：在 MatrixHub 中缓存模型的直接链接" title="准备：在 MatrixHub 中缓存模型的直接链接" translate="no">​</a></h2>
<p>首先在 MatrixHub 中配置 Hugging Face Registry，并创建一个 Proxy Project。</p>
<p>这里的 Proxy Project 可以理解成一个 Hugging Face 兼容的代理入口。创建完成时，它本身还是空的，并不会主动把上游模型全部同步下来。</p>
<p><img decoding="async" loading="lazy" alt="配置 Hugging Face Registry" src="https://matrixhub.ai/zh-CN/assets/images/sglang8-c54b4f6a58167a5079142e8932d3d237.png" width="1326" height="1624" class="img_ev3q"></p>
<p>真正的缓存发生在第一次访问模型文件时。可以使用 <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><code>hf</code> 会通过 MatrixHub 的 Hugging Face 兼容 API 请求 <code>Qwen/Qwen3-0.6B</code>。如果 MatrixHub 还没有这些文件，它会从上游 Hugging Face 拉取并保存；后续 SGLang、vLLM 或其它客户端再访问同一个模型时，就可以直接命中 MatrixHub 缓存，无需再回源。</p>
<p>缓存完成后，可以在 MatrixHub 的模型详情页看到对应的文件列表。</p>
<p><img decoding="async" loading="lazy" alt="MatrixHub 中已缓存的模型文件" src="https://matrixhub.ai/zh-CN/assets/images/sglang2-63d0fab122261100b8c91dbda91201e9.png" width="3488" height="1770" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实验一从-matrixhub-缓存启动-sglang">实验一：从 MatrixHub 缓存启动 SGLang<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#%E5%AE%9E%E9%AA%8C%E4%B8%80%E4%BB%8E-matrixhub-%E7%BC%93%E5%AD%98%E5%90%AF%E5%8A%A8-sglang" class="hash-link" aria-label="实验一：从 MatrixHub 缓存启动 SGLang的直接链接" title="实验一：从 MatrixHub 缓存启动 SGLang的直接链接" translate="no">​</a></h2>
<p>每次测试前先清理本地 Hugging Face cache，避免命中本机缓存影响结果：</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>然后启动 SGLang，并把 <code>HF_ENDPOINT</code> 指向 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>启动命令里最关键的是这一段：</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>这里的 <code>127.0.0.1:3002</code> 是 MatrixHub 暴露的 Hugging Face 兼容访问地址。</p>
<p><img decoding="async" loading="lazy" alt="使用 MatrixHub endpoint 启动 SGLang" src="https://matrixhub.ai/zh-CN/assets/images/sglang3-ec4753e36caf95b067156fa53c998b72.png" width="2500" height="682" class="img_ev3q"></p>
<p>启动日志中可以看到 SGLang 使用的模型下载 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">Hugging Face endpoint for model downloads: http://127.0.0.1:3002</span><br></span></code></pre></div></div>
<p>随后模型文件下载完成，服务启动成功：</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="从 MatrixHub 缓存下载并启动完成" src="https://matrixhub.ai/zh-CN/assets/images/sglang4-e9fcb346f8f7e885237d08dde0914b02.png" width="2484" height="1186" class="img_ev3q"></p>
<p>从截图中的时间看：</p>
<table><thead><tr><th>阶段</th><th style="text-align:right">时间</th></tr></thead><tbody><tr><td>启动命令开始</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>总耗时</td><td style="text-align:right">约 35 秒</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="验证推理服务可用">验证推理服务可用<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#%E9%AA%8C%E8%AF%81%E6%8E%A8%E7%90%86%E6%9C%8D%E5%8A%A1%E5%8F%AF%E7%94%A8" class="hash-link" aria-label="验证推理服务可用的直接链接" title="验证推理服务可用的直接链接" translate="no">​</a></h2>
<p>服务 ready 后，可以直接通过 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>返回结果里可以看到模型正常生成回复。</p>
<p><img decoding="async" loading="lazy" alt="调用 SGLang OpenAI-compatible API" src="https://matrixhub.ai/zh-CN/assets/images/sglang5-55cdbf273458015b96df1507d8f000b6.png" width="2512" height="748" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实验二直接从-hugging-face-启动">实验二：直接从 Hugging Face 启动<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#%E5%AE%9E%E9%AA%8C%E4%BA%8C%E7%9B%B4%E6%8E%A5%E4%BB%8E-hugging-face-%E5%90%AF%E5%8A%A8" class="hash-link" aria-label="实验二：直接从 Hugging Face 启动的直接链接" title="实验二：直接从 Hugging Face 启动的直接链接" translate="no">​</a></h2>
<p>接下来用同样的模型、同样的 SGLang 启动参数，只把 endpoint 改回 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="直接从 Hugging Face 拉取模型" src="https://matrixhub.ai/zh-CN/assets/images/sglang6-f34c0ef004d3c19b33d72e3f55894f14.png" width="2460" height="636" class="img_ev3q"></p>
<p>最终 Hugging Face 路径也可以启动成功，但耗时明显更长：</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="Hugging Face 路径启动完成" src="https://matrixhub.ai/zh-CN/assets/images/sglang7-201e33ec4e88e63a9f1e94b1ff65f1e8.png" width="2482" height="994" class="img_ev3q"></p>
<p>从截图中的时间看：</p>
<table><thead><tr><th>阶段</th><th style="text-align:right">时间</th></tr></thead><tbody><tr><td>启动命令开始</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>总耗时</td><td style="text-align:right">约 125 秒</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="结果对比">结果对比<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#%E7%BB%93%E6%9E%9C%E5%AF%B9%E6%AF%94" class="hash-link" aria-label="结果对比的直接链接" title="结果对比的直接链接" translate="no">​</a></h2>
<p>两次实验都清理了本地 Hugging Face cache，模型和启动参数保持一致，主要区别只有 <code>HF_ENDPOINT</code>。</p>
<table><thead><tr><th>模型来源</th><th>Endpoint</th><th style="text-align:right">启动开始</th><th style="text-align:right">服务 ready</th><th style="text-align:right">总耗时</th></tr></thead><tbody><tr><td>MatrixHub 缓存</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">约 35 秒</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">约 125 秒</td></tr></tbody></table>
<p>在这次测试中，SGLang 从 MatrixHub 缓存启动约 35 秒，从 Hugging Face 启动约 125 秒。</p>
<p><code>Qwen3-0.6B</code> 只是一个小模型。如果换成更大的模型，或者同一团队里有多台机器、多套推理服务反复拉同一批模型，缓存层的收益会更明显。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="matrixhub-带来的价值">MatrixHub 带来的价值<a href="https://matrixhub.ai/zh-CN/blog/sglang-matrixhub-cache-acceleration#matrixhub-%E5%B8%A6%E6%9D%A5%E7%9A%84%E4%BB%B7%E5%80%BC" class="hash-link" aria-label="MatrixHub 带来的价值的直接链接" title="MatrixHub 带来的价值的直接链接" translate="no">​</a></h2>
<p>MatrixHub 在这个场景里提供的是一个 Hugging Face 兼容的模型缓存层：</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 本地缓存 / 上游 Hugging Face</span><br></span></code></pre></div></div>
<p>第一次请求模型时，MatrixHub 会回源 Hugging Face 并缓存文件。</p>
<p>后续再次请求同一个模型时，客户端仍然使用原来的 Hugging Face repo 形式：</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>只需要把 endpoint 指向 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">export HF_ENDPOINT=http://127.0.0.1:3002</span><br></span></code></pre></div></div>
<p>这样做有几个直接好处：</p>
<ul>
<li class=""><strong>减少重复下载</strong>：同一个模型被缓存后，后续服务可以直接从 MatrixHub 获取。</li>
<li class=""><strong>提升启动稳定性</strong>：减少对公网 Hugging Face 的实时依赖。</li>
<li class=""><strong>统一模型入口</strong>：SGLang、vLLM、Transformers 等工具都可以通过 Hugging Face 兼容接口接入。</li>
<li class=""><strong>适合内网分发</strong>：多台机器、多套推理服务可以共享同一份模型缓存。</li>
</ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Dynamo 与 MatrixHub 集成实验]]></title>
        <id>https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration</id>
        <link href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration"/>
        <updated>2026-06-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[在带 GPU 的 Kubernetes 集群上让 Dynamo 通过内网 MatrixHub 拉取模型权重，并与外网 Hugging Face 对比首次下载耗时。]]></summary>
        <content type="html"><![CDATA[<p>我们做了两组实验，验证内网 MatrixHub 对 Dynamo 推理服务首次拉取模型权重的加速效果。</p>
<ul>
<li class=""><strong>实验一</strong>：在带 GPU 的 Kubernetes 集群上部署 Dynamo，并使用内网 MatrixHub 拉取模型权重。部署后会得到一个兼容 OpenAI 接口的推理服务，可以对 <code>qwen3-0.6b</code> 模型发对话请求。</li>
<li class=""><strong>实验二</strong>：用同样的方式再实验一次，改成从外网 Hugging Face 拉取模型权重，对两次实验的首次下载模型时间作对比。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实验一">实验一<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E5%AE%9E%E9%AA%8C%E4%B8%80" class="hash-link" aria-label="实验一的直接链接" title="实验一的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="环境背景">环境背景<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%8E%AF%E5%A2%83%E8%83%8C%E6%99%AF" class="hash-link" aria-label="环境背景的直接链接" title="环境背景的直接链接" translate="no">​</a></h3>
<ul>
<li class=""><strong>Dynamo 平台已安装</strong> —— 集群里已部署 Dynamo operator，能识别第二步的部署文件并自动拉起服务。</li>
<li class=""><strong>GPU 节点</strong> —— 一块 NVIDIA A800 80GB，可切成 10 份 vGPU。GPU 节点装了 HAMi（GPU 虚拟化组件），它把一整块物理 GPU 切成多份，让多个服务共享同一张卡。</li>
<li class=""><strong>内网模型 Hub（MatrixHub）</strong> —— 内网部署了模型权重仓库 MatrixHub（<code>matrixhub.internal:30001</code>），模型权重从这里下载，不走公网；且提前用 <code>hf download</code> 命令在 MatrixHub 上缓存好 <code>chenyang-qwen/qwen3-0.6b</code> 模型。</li>
<li class=""><strong>网络可达</strong> —— 集群 <code>&lt;cluster-node&gt;</code> 能拉取容器镜像（nvcr.io），也能访问内网模型权重源 MatrixHub（<code>matrixhub.internal:30001</code>）。</li>
</ul>
<p>需先确认上述条件，尤其是 <strong>Dynamo 平台</strong>和 <strong>vGPU</strong> 是否已就绪。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="开始前你需要">开始前你需要<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E5%BC%80%E5%A7%8B%E5%89%8D%E4%BD%A0%E9%9C%80%E8%A6%81" class="hash-link" aria-label="开始前你需要的直接链接" title="开始前你需要的直接链接" translate="no">​</a></h3>
<ul>
<li class="">集群的 kubeconfig 文件</li>
<li class="">一台装了 <code>kubectl</code> 的电脑</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一步连接集群">第一步：连接集群<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%AC%AC%E4%B8%80%E6%AD%A5%E8%BF%9E%E6%8E%A5%E9%9B%86%E7%BE%A4" class="hash-link" aria-label="第一步：连接集群的直接链接" title="第一步：连接集群的直接链接" translate="no">​</a></h3>
<p>打开终端，设置 kubeconfig（每次新开终端都要做一次）：</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"># 把下面替换成你的 kubeconfig 文件实际路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export KUBECONFIG=&lt;你的-kubeconfig-文件路径&gt;</span><br></span></code></pre></div></div>
<p>验证能连上：</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>能看到节点列表就 OK。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二步准备部署文件">第二步：准备部署文件<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E5%87%86%E5%A4%87%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6" class="hash-link" aria-label="第二步：准备部署文件的直接链接" title="第二步：准备部署文件的直接链接" translate="no">​</a></h3>
<p>新建一个文件 <code>dgd-vllm-vgpu.yaml</code>，内容如下：</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 切片</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)"># 显存上限, 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)"># 算力上限, 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>注意：环境变量 <code>HF_ENDPOINT</code> 指定了内网 MatrixHub 地址 <code>http://matrixhub.internal:30001</code>。</p>
<p>如果以后要改东西，常用的几处：</p>
<table><thead><tr><th>想改什么</th><th>改哪里</th></tr></thead><tbody><tr><td>换模型</td><td>两处 <code>chenyang-qwen/qwen3-0.6b</code> 都换成新模型名</td></tr><tr><td>加显存</td><td>两处 <code>nvidia.com/gpumem: "10000"</code> 改大（单位 MB）</td></tr><tr><td>加算力</td><td>两处 <code>nvidia.com/gpucores: "30"</code> 改大（最大 100）</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第三步部署">第三步：部署<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%AC%AC%E4%B8%89%E6%AD%A5%E9%83%A8%E7%BD%B2" class="hash-link" aria-label="第三步：部署的直接链接" title="第三步：部署的直接链接" 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="第四步等它起来">第四步：等它起来<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E7%AD%89%E5%AE%83%E8%B5%B7%E6%9D%A5" class="hash-link" aria-label="第四步：等它起来的直接链接" title="第四步：等它起来的直接链接" 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>等到两个 Pod 都显示 <code>1/1 Running</code>（第一次部署要拉镜像，可能等几分钟）。</p>
<p><img decoding="async" loading="lazy" alt="两个 Pod Running" src="https://matrixhub.ai/zh-CN/assets/images/pods-running-1-0f6be4bff1d339c56b524fba3cac8784.png" width="951" height="63" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="两个 Pod Running" src="https://matrixhub.ai/zh-CN/assets/images/pods-running-2-34ef38dcf619f564f4ecb4561ef3d552.png" width="1381" height="87" class="img_ev3q"></p>
<p><strong>看服务日志</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名&gt; --tail=50</span><br></span></code></pre></div></div>
<p>由于内网部署了 MatrixHub 且已缓存了模型（<code>HF_ENDPOINT</code> 指向 MatrixHub），模型下载时间约为 10 秒：</p>
<p><img decoding="async" loading="lazy" alt="模型下载约 10 秒" src="https://matrixhub.ai/zh-CN/assets/images/download-10s-1948d72c12591a37196ee21e22a077dc.png" width="1549" height="603" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第五步测试服务">第五步：测试服务<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%AC%AC%E4%BA%94%E6%AD%A5%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="第五步：测试服务的直接链接" title="第五步：测试服务的直接链接" translate="no">​</a></h3>
<p>先拿到 frontend 的 Pod 名字：</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>用这个名字测试（把 <code>&lt;前端Pod名&gt;</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">kubectl -n dynamo-system exec &lt;前端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":"用一句话介绍自己"}],"max_tokens":64}'</span><br></span></code></pre></div></div>
<p>能看到模型返回一段中文回复，就说明部署成功了。</p>
<p><img decoding="async" loading="lazy" alt="对话测试返回" src="https://matrixhub.ai/zh-CN/assets/images/chat-test-53f617b2bbe9f562c5945009a3fb7f4c.png" width="1559" height="230" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实验二">实验二<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E5%AE%9E%E9%AA%8C%E4%BA%8C" class="hash-link" aria-label="实验二的直接链接" title="实验二的直接链接" translate="no">​</a></h2>
<p>其它步骤和实验一一样，只要把部署 YAML 里的环境变量 <code>HF_ENDPOINT</code> 去掉，就会默认从外网 Hugging Face 拉取模型权重。</p>
<p>没有部署 MatrixHub（从外网 Hugging Face 下模型）时查看 log，模型下载时间约为 6 分钟：</p>
<p><img decoding="async" loading="lazy" alt="Hugging Face 下载约 6 分钟" src="https://matrixhub.ai/zh-CN/assets/images/hf-download-6min-3d2c7506b47a20e1a67d084c2ae0f38a.png" width="2590" height="1012" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实验数据对比首次下载模型时间对比">实验数据对比（首次下载模型时间对比）<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E5%AE%9E%E9%AA%8C%E6%95%B0%E6%8D%AE%E5%AF%B9%E6%AF%94%E9%A6%96%E6%AC%A1%E4%B8%8B%E8%BD%BD%E6%A8%A1%E5%9E%8B%E6%97%B6%E9%97%B4%E5%AF%B9%E6%AF%94" class="hash-link" aria-label="实验数据对比（首次下载模型时间对比）的直接链接" title="实验数据对比（首次下载模型时间对比）的直接链接" translate="no">​</a></h2>
<p>针对「内网部署了 MatrixHub 且已缓存了模型」和「没有部署 MatrixHub」两种情况，各环节实测耗时参考（<code>qwen3-0.6b</code> 模型），<strong>首次下载模型时间对比见下表</strong>：</p>
<table><thead><tr><th>环节</th><th>实验一（内网 MatrixHub 且已缓存模型）</th><th>实验二（没有部署 MatrixHub）</th></tr></thead><tbody><tr><td>拉容器镜像（10GB+）</td><td>秒级（节点已缓存）</td><td>秒级（节点已缓存）</td></tr><tr><td>下载模型权重</td><td><strong>约 10 秒（从内网 MatrixHub 缓存下）</strong></td><td><strong>约 6 分钟（从外网 Hugging Face 下）</strong></td></tr><tr><td>vLLM 引擎启动 + 模型加载</td><td>1～2 分钟</td><td>1～2 分钟</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="结论">结论<a href="https://matrixhub.ai/zh-CN/blog/dynamo-matrixhub-integration#%E7%BB%93%E8%AE%BA" class="hash-link" aria-label="结论的直接链接" title="结论的直接链接" translate="no">​</a></h2>
<p>内网 MatrixHub 对 Dynamo 首次下载模型权重起到了很大的加速作用。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[DeepSeek v4 跑不起来？99% 的人都卡在分发]]></title>
        <id>https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution</id>
        <link href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution"/>
        <updated>2026-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[为什么企业环境里的 DeepSeek 落地经常卡在分发层，以及 MatrixHub 能解决什么问题。]]></summary>
        <content type="html"><![CDATA[<p>最近 DeepSeek 发布了 DeepSeek v4，不少团队都在第一时间尝试接入。</p>
<p>但如果你是在企业环境，尤其是内网或私有化部署里，很快就会发现一件事：</p>
<blockquote>
<p>模型不是最大的问题，分发才是。</p>
</blockquote>
<p>我们在内网落地 DeepSeek v4，踩了一堆坑，整理下来，本质其实就三类问题。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="一你以为是下载问题其实是架构问题">一、你以为是“下载问题”，其实是架构问题<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E4%B8%80%E4%BD%A0%E4%BB%A5%E4%B8%BA%E6%98%AF%E4%B8%8B%E8%BD%BD%E9%97%AE%E9%A2%98%E5%85%B6%E5%AE%9E%E6%98%AF%E6%9E%B6%E6%9E%84%E9%97%AE%E9%A2%98" class="hash-link" aria-label="一、你以为是“下载问题”，其实是架构问题的直接链接" title="一、你以为是“下载问题”，其实是架构问题的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hugging-face-在企业环境并不好用">Hugging Face 在企业环境并不好用<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#hugging-face-%E5%9C%A8%E4%BC%81%E4%B8%9A%E7%8E%AF%E5%A2%83%E5%B9%B6%E4%B8%8D%E5%A5%BD%E7%94%A8" class="hash-link" aria-label="Hugging Face 在企业环境并不好用的直接链接" title="Hugging Face 在企业环境并不好用的直接链接" translate="no">​</a></h3>
<ul>
<li class="">网络不稳定甚至断网</li>
<li class="">下载慢，大文件容易中断</li>
<li class="">权限不可控</li>
</ul>
<p>看起来是“下载慢”，本质是：</p>
<blockquote>
<p>Hugging Face 不是为企业分发设计的，它的设计目标是研究协作，不是企业分发。</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="二你开始自救但问题更大">二、你开始自救，但问题更大<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E4%BA%8C%E4%BD%A0%E5%BC%80%E5%A7%8B%E8%87%AA%E6%95%91%E4%BD%86%E9%97%AE%E9%A2%98%E6%9B%B4%E5%A4%A7" class="hash-link" aria-label="二、你开始自救，但问题更大的直接链接" title="二、你开始自救，但问题更大的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="常见方案都会踩坑">常见方案都会踩坑<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E5%B8%B8%E8%A7%81%E6%96%B9%E6%A1%88%E9%83%BD%E4%BC%9A%E8%B8%A9%E5%9D%91" class="hash-link" aria-label="常见方案都会踩坑的直接链接" title="常见方案都会踩坑的直接链接" translate="no">​</a></h3>
<ul>
<li class="">手动拷贝会带来版本混乱，也不可审计</li>
<li class="">NFS 和 NAS 会遇到 IO 瓶颈，而且没有缓存层</li>
<li class="">每台机器各自下载会迅速耗尽带宽，冷启动也会更慢</li>
</ul>
<p>尤其在 vLLM 和 SGLang 场景下：</p>
<blockquote>
<p>每个节点都在重复下载模型，会把带宽压力放大 N 倍。</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="三真正的问题其实只有一个">三、真正的问题其实只有一个<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E4%B8%89%E7%9C%9F%E6%AD%A3%E7%9A%84%E9%97%AE%E9%A2%98%E5%85%B6%E5%AE%9E%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA" class="hash-link" aria-label="三、真正的问题其实只有一个的直接链接" title="三、真正的问题其实只有一个的直接链接" translate="no">​</a></h2>
<p>所有问题，本质都可以归结为一句话：</p>
<blockquote>
<p>缺一个“模型分发基础设施层”，就像容器依赖镜像仓库一样。</p>
</blockquote>
<p>就像你不会在生产里直接用 Docker Hub，而是会用私有镜像仓库一样。但在模型领域，这一层长期是缺失的。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="四我们的解法">四、我们的解法<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E5%9B%9B%E6%88%91%E4%BB%AC%E7%9A%84%E8%A7%A3%E6%B3%95" class="hash-link" aria-label="四、我们的解法的直接链接" title="四、我们的解法的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="核心思路">核心思路<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E6%A0%B8%E5%BF%83%E6%80%9D%E8%B7%AF" class="hash-link" aria-label="核心思路的直接链接" title="核心思路的直接链接" 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">公网模型源（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">模型代理 / 缓存层</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">企业内部统一分发</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 / 推理服务</span><br></span></code></pre></div></div>
<p>这个架构其实复用了一个已经被验证过的模式：</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; 私有仓库</li>
</ul>
<p>模型分发，本质是同一类问题。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="关键能力">关键能力<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E5%85%B3%E9%94%AE%E8%83%BD%E5%8A%9B" class="hash-link" aria-label="关键能力的直接链接" title="关键能力的直接链接" translate="no">​</a></h3>
<p>这个分发层需要：</p>
<ol>
<li class="">代理 Hugging Face，而不是替代它</li>
<li class="">自动缓存模型</li>
<li class="">支持断点续传</li>
<li class="">支持权限控制</li>
<li class="">支持内网分发</li>
<li class="">兼容 vLLM 和 SGLang</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="五我们把它做成了一个项目">五、我们把它做成了一个项目<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E4%BA%94%E6%88%91%E4%BB%AC%E6%8A%8A%E5%AE%83%E5%81%9A%E6%88%90%E4%BA%86%E4%B8%80%E4%B8%AA%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="五、我们把它做成了一个项目的直接链接" title="五、我们把它做成了一个项目的直接链接" translate="no">​</a></h2>
<p><a href="https://github.com/matrixhub-ai/matrixhub" target="_blank" rel="noopener noreferrer" class="">MatrixHub</a> 本质上就是：</p>
<blockquote>
<p>企业版 Hugging Face 代理 + 模型分发加速层。</p>
</blockquote>
<p>它提供：</p>
<ul>
<li class="">Hugging Face 代理，解决公网访问问题</li>
<li class="">模型缓存层，减少重复下载</li>
<li class="">企业统一接入入口，处理权限和治理</li>
</ul>
<p>你可以把它理解为：</p>
<ul>
<li class="">模型领域的 Harbor</li>
<li class="">或者 AI 时代的镜像仓库</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="六快速上手">六、快速上手<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E5%85%AD%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B" class="hash-link" aria-label="六、快速上手的直接链接" title="六、快速上手的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1启动服务">Step 1：启动服务<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-1%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="Step 1：启动服务的直接链接" title="Step 1：启动服务的直接链接" translate="no">​</a></h3>
<p>下载 <a href="https://matrixhub.ai/deploy/docker/docker-compose.yaml" download="docker-compose.yaml"><code>docker-compose.yaml</code></a> 和 <a href="https://matrixhub.ai/deploy/docker/config.yaml" download="config.yaml"><code>config.yaml</code></a>，并保证二者在同一目录下。</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>默认服务地址：</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>验证：</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登录">Step 2：登录<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-2%E7%99%BB%E5%BD%95" class="hash-link" aria-label="Step 2：登录的直接链接" title="Step 2：登录的直接链接" translate="no">​</a></h3>
<ul>
<li class="">用户名：<code>admin</code></li>
<li class="">密码：<code>changeme</code></li>
</ul>
<p>建议立即修改密码。</p>
<p><img decoding="async" loading="lazy" alt="登录" src="https://matrixhub.ai/zh-CN/assets/images/login-cbb09f3ddeec0c99068836ac24eedf92.png" width="842" height="980" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3创建远程仓库">Step 3：创建远程仓库<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-3%E5%88%9B%E5%BB%BA%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93" class="hash-link" aria-label="Step 3：创建远程仓库的直接链接" title="Step 3：创建远程仓库的直接链接" translate="no">​</a></h3>
<p>关键配置：</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 ( 或 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">推荐名称：huggingface</span><br></span></code></pre></div></div>
<p>作用：</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">请求 -&gt; MatrixHub -&gt; Hugging Face -&gt; 回源</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="平台设置" src="https://matrixhub.ai/zh-CN/assets/images/registry1-ff256b8adaad3cdc3caf42deda818efc.PNG" width="1280" height="572" class="img_ev3q">
<img decoding="async" loading="lazy" alt="远程仓库管理" src="https://matrixhub.ai/zh-CN/assets/images/registry2-9f6f466e7682ca18fe28f4c7ced13214.PNG" width="1280" height="440" class="img_ev3q">
<img decoding="async" loading="lazy" alt="创建远程仓库" src="https://matrixhub.ai/zh-CN/assets/images/registry-create-0b7ca2b7096325c9c3a9b7e0639f1211.png" width="2748" height="1524" class="img_ev3q">
<img decoding="async" loading="lazy" alt="远程仓库列表" src="https://matrixhub.ai/zh-CN/assets/images/registry-list-704727632f24459cb7b8c188278dc11c.png" width="2466" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4创建-proxy-项目">Step 4：创建 Proxy 项目<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-4%E5%88%9B%E5%BB%BA-proxy-%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="Step 4：创建 Proxy 项目的直接链接" title="Step 4：创建 Proxy 项目的直接链接" translate="no">​</a></h3>
<p>作用：</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">用户 -&gt; 代理项目 -&gt; 远程仓库（HF） -&gt; 缓存</span><br></span></code></pre></div></div>
<p>创建项目时：</p>
<ul>
<li class="">选择刚才创建的 <code>huggingface</code> 远程仓库</li>
<li class="">填写代理模型组织：<code>deepseek-ai</code></li>
</ul>
<p><img decoding="async" loading="lazy" alt="创建项目1" src="https://matrixhub.ai/zh-CN/assets/images/project1-c9d03f0dc077a772ef0c932f313e6548.PNG" width="1175" height="280" class="img_ev3q">
<img decoding="async" loading="lazy" alt="创建项目" src="https://matrixhub.ai/zh-CN/assets/images/project-create-58fbc9bbe9978b686de0cc5104780208.png" width="2756" height="1358" class="img_ev3q">
<img decoding="async" loading="lazy" alt="项目列表" src="https://matrixhub.ai/zh-CN/assets/images/project-list-6cbc293989546e0e99a5cde3ce9ad397.png" width="2050" height="786" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5客户端接入">Step 5：客户端接入<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-5%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5" class="hash-link" aria-label="Step 5：客户端接入的直接链接" title="Step 5：客户端接入的直接链接" 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="客户端接入" src="data:image/png;base64,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" width="555" height="41" class="img_ev3q"></p>
<p>本质上是在做这几件事：</p>
<ul>
<li class="">劫持客户端请求</li>
<li class="">首次请求回源 Hugging Face</li>
<li class="">自动缓存到本地</li>
<li class="">后续请求全部走内网</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6下载模型">Step 6：下载模型<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#step-6%E4%B8%8B%E8%BD%BD%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="Step 6：下载模型的直接链接" title="Step 6：下载模型的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="61-开始下载">6.1 开始下载<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#61-%E5%BC%80%E5%A7%8B%E4%B8%8B%E8%BD%BD" class="hash-link" aria-label="6.1 开始下载的直接链接" title="6.1 开始下载的直接链接" 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-第一台节点填充缓存">6.2 第一台节点：填充缓存<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#62-%E7%AC%AC%E4%B8%80%E5%8F%B0%E8%8A%82%E7%82%B9%E5%A1%AB%E5%85%85%E7%BC%93%E5%AD%98" class="hash-link" aria-label="6.2 第一台节点：填充缓存的直接链接" title="6.2 第一台节点：填充缓存的直接链接" translate="no">​</a></h4>
<p>在我们的测试环境中，第一次下载耗时 <strong>6 小时 56 分钟</strong>。这次初始请求会从上游 Hugging Face 拉取模型，并将模型文件写入 MatrixHub 缓存。请将 <abbr title="请替换为实际的 MatrixHub 服务地址"><code><a href="http://x.x.x.x:3001/" target="_blank" rel="noopener noreferrer" class="">http://x.x.x.x:3001</a></code></abbr> 替换为实际的 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@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="首次下载" src="https://matrixhub.ai/zh-CN/assets/images/first-download-5c9eff90bee54b61808700200baa81e6.png" width="4476" height="576" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="63-第二台节点复用已缓存模型">6.3 第二台节点：复用已缓存模型<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#63-%E7%AC%AC%E4%BA%8C%E5%8F%B0%E8%8A%82%E7%82%B9%E5%A4%8D%E7%94%A8%E5%B7%B2%E7%BC%93%E5%AD%98%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="6.3 第二台节点：复用已缓存模型的直接链接" title="6.3 第二台节点：复用已缓存模型的直接链接" translate="no">​</a></h4>
<p>第二次下载来自同一内网中的另一台节点，由于模型文件已经被 MatrixHub 缓存，下载耗时缩短到 <strong>86 分钟</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">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="第二次下载" src="https://matrixhub.ai/zh-CN/assets/images/secondary-download-094364b7e6dcddbfa7499e3dfbacd4e7.png" width="1750" height="485" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="64-在-ui-中验证模型">6.4 在 UI 中验证模型<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#64-%E5%9C%A8-ui-%E4%B8%AD%E9%AA%8C%E8%AF%81%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="6.4 在 UI 中验证模型的直接链接" title="6.4 在 UI 中验证模型的直接链接" translate="no">​</a></h4>
<p>下载完成后，可以在 UI 的 <code>deepseek-ai</code> 项目下看到 <code>DeepSeek-V4-Pro</code> 模型。</p>
<p><img decoding="async" loading="lazy" alt="模型列表" src="https://matrixhub.ai/zh-CN/assets/images/model-list-295ee816433585c3fc331e73d4ec0ac4.png" width="2788" height="1044" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="65-查看缓存的模型文件">6.5 查看缓存的模型文件<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#65-%E6%9F%A5%E7%9C%8B%E7%BC%93%E5%AD%98%E7%9A%84%E6%A8%A1%E5%9E%8B%E6%96%87%E4%BB%B6" class="hash-link" aria-label="6.5 查看缓存的模型文件的直接链接" title="6.5 查看缓存的模型文件的直接链接" translate="no">​</a></h4>
<p>进入模型详情页，可以查看已经缓存的模型文件，并确认这些制品已经可以在内网中分发。</p>
<p><img decoding="async" loading="lazy" alt="模型详情" src="https://matrixhub.ai/zh-CN/assets/images/model-detail-0e7f4f39c86f922a1214982853d6ca37.png" width="2318" height="1588" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="验证缓存是否生效">验证缓存是否生效<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E9%AA%8C%E8%AF%81%E7%BC%93%E5%AD%98%E6%98%AF%E5%90%A6%E7%94%9F%E6%95%88" class="hash-link" aria-label="验证缓存是否生效的直接链接" title="验证缓存是否生效的直接链接" translate="no">​</a></h2>
<p>用 <code>curl</code> 看请求行为。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一次请求回源">第一次请求：回源<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E7%AC%AC%E4%B8%80%E6%AC%A1%E8%AF%B7%E6%B1%82%E5%9B%9E%E6%BA%90" class="hash-link" aria-label="第一次请求：回源的直接链接" title="第一次请求：回源的直接链接" 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>特征：</p>
<ul>
<li class="">请求时间较长</li>
<li class="">会带有上游响应头</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二次请求命中缓存">第二次请求：命中缓存<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E7%AC%AC%E4%BA%8C%E6%AC%A1%E8%AF%B7%E6%B1%82%E5%91%BD%E4%B8%AD%E7%BC%93%E5%AD%98" class="hash-link" aria-label="第二次请求：命中缓存的直接链接" title="第二次请求：命中缓存的直接链接" 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>特征：</p>
<ul>
<li class="">响应很快</li>
<li class="">不再访问 Hugging Face</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="写在最后">写在最后<a href="https://matrixhub.ai/zh-CN/blog/deepseek-v4-distribution#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E" class="hash-link" aria-label="写在最后的直接链接" title="写在最后的直接链接" translate="no">​</a></h2>
<p>如果你也在企业内网落地大模型，一定会遇到这些问题：</p>
<ul>
<li class="">下载慢</li>
<li class="">带宽炸</li>
<li class="">节点重复拉取</li>
<li class="">权限不可控</li>
</ul>
<p>这些都不是偶发问题，而是架构缺失。</p>
<p>MatrixHub 只是把这件事补上了。</p>
<p>如果你正在做类似事情，欢迎交流：</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[示例]]></title>
        <id>https://matrixhub.ai/zh-CN/blog/examples</id>
        <link href="https://matrixhub.ai/zh-CN/blog/examples"/>
        <updated>2026-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MatrixHub 在企业内网里的实际使用示例，重点展示模型缓存和分发加速效果。]]></summary>
        <content type="html"><![CDATA[<p>这里放一个 MatrixHub 的真实使用示例。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常用场景">常用场景<a href="https://matrixhub.ai/zh-CN/blog/examples#%E5%B8%B8%E7%94%A8%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="常用场景的直接链接" title="常用场景的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="内网-vllm-集群的大规模分发">内网 vLLM 集群的大规模分发<a href="https://matrixhub.ai/zh-CN/blog/examples#%E5%86%85%E7%BD%91-vllm-%E9%9B%86%E7%BE%A4%E7%9A%84%E5%A4%A7%E8%A7%84%E6%A8%A1%E5%88%86%E5%8F%91" class="hash-link" aria-label="内网 vLLM 集群的大规模分发的直接链接" title="内网 vLLM 集群的大规模分发的直接链接" translate="no">​</a></h3>
<ul>
<li class=""><strong>场景描述</strong>：内网生产环境部署了一个由 100 台 GPU 服务器组成的 vLLM 推理集群。由于模型文件很大，例如 70B 模型可能超过 130GB，如果每台机器都去公网 Hugging Face 拉取，不仅耗时很长，还可能触发公网带宽限流。</li>
<li class=""><strong>流程概览</strong>：<!-- -->
<ol>
<li class=""><strong>统一接入点</strong>：将所有 vLLM 节点的 <code>HF_ENDPOINT</code> 环境变量统一指向内网 MatrixHub 地址。</li>
<li class=""><strong>拉取即缓存</strong>：首台机器请求模型时，MatrixHub 自动从公网拉取并持久化到本地；后续节点请求将直接命中内网缓存。</li>
</ol>
</li>
</ul>
<blockquote>
<p>作为用户，我希望把 <code>hf download</code> 的 Endpoint 指向 MatrixHub，这样当同一内网里的其他节点再次拉取同一模型时，可以直接享受缓存带来的速度提升。</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="操作步骤">操作步骤<a href="https://matrixhub.ai/zh-CN/blog/examples#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4" class="hash-link" aria-label="操作步骤的直接链接" title="操作步骤的直接链接" translate="no">​</a></h4>
<ol>
<li class="">访问 MatrixHub 地址 <code>http://x.x.x.x:3001</code>，进入登录页面。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-6-95364bc816f5f19cb796f3ca60b57d49.png" width="1280" height="451" class="img_ev3q"></p>
<ol start="2">
<li class="">使用 admin 用户登录平台，进入模型仓库列表。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-9-58d132f074f9c5194077788185b76b1d.png" width="1280" height="434" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-5-7b89a1bfe2828b5f7fbe5768097dfc3f.png" width="1280" height="290" class="img_ev3q"></p>
<ol start="3">
<li class="">点击右上角用户菜单，进入平台设置和仓库管理。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-7-5d6d69592209a465863f1d431f2a954e.png" width="1280" height="316" class="img_ev3q"></p>
<ol start="4">
<li class="">创建目标仓库：选择 Hugging Face 作为提供者，填写仓库名称 <code>hf</code>，输入目标 URL <code>https://hf-mirror.com</code>，勾选验证远程证书，然后点击“确定”。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-4-c02ce25629381e66b74e86e42c1e13f5.png" width="1280" height="665" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-3-a1b6b3f0385d39828c448945d21c47f5.png" width="1533" height="256" class="img_ev3q"></p>
<ol start="5">
<li class="">进入项目管理，打开项目列表页面。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-10-f2ed65372d92ddb2bcb48c5b999a364e.png" width="1664" height="256" class="img_ev3q"></p>
<ol start="6">
<li class="">点击“创建项目”：输入项目名称 <code>qwen</code>，设为公开，开启代理，选择仓库，填写代理组织 <code>Qwen</code>，然后点击“确定”。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-8-433051b8dde40426ca98820fe5d099be.png" width="1280" height="498" class="img_ev3q"></p>
<ol start="7">
<li class="">
<p>拉取模型。</p>
<ul>
<li class=""><strong>第一个节点</strong>：约 <code>3m37.318s</code></li>
</ul>
</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-cc4252c5c3f8e9ffd9964427bf748a94.png" width="1904" height="178" class="img_ev3q"></p>
<ul>
<li class=""><strong>第二个节点</strong>：约 <code>0m8.500s</code></li>
</ul>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-1-cc4252c5c3f8e9ffd9964427bf748a94.png" width="1904" height="178" class="img_ev3q"></p>
<ol start="8">
<li class="">在 MatrixHub 中查看模型信息。</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://matrixhub.ai/zh-CN/assets/images/scenario-test-cn-2-b4e841a1f4d7df1762961de6305ec76f.png" width="1280" height="517" class="img_ev3q"></p>]]></content>
    </entry>
</feed>