<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: GPUStack</title>
    <description>The latest articles on DEV Community by GPUStack (@gpustack).</description>
    <link>https://dev.to/gpustack</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1673709%2F6dfb7108-ed8e-4105-99f3-aaeb9ca11abd.png</url>
      <title>DEV Community: GPUStack</title>
      <link>https://dev.to/gpustack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gpustack"/>
    <language>en</language>
    <item>
      <title>Day 0 Deployment of GLM-5.2-FP8-DSpark on GPUStack</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Wed, 22 Jul 2026 10:28:37 +0000</pubDate>
      <link>https://dev.to/gpustack/day-0-deployment-of-glm-52-fp8-dspark-on-gpustack-oh</link>
      <guid>https://dev.to/gpustack/day-0-deployment-of-glm-52-fp8-dspark-on-gpustack-oh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is curated from a real-world deployment experience shared by a GPUStack community member. GLM-5.2-FP8-DSpark is an enhanced version of GLM-5.2-FP8 that applies &lt;strong&gt;Speculative Decoding&lt;/strong&gt; by loading an external draft model (Speculator) provided by Red Hat AI. It keeps the original model weights unchanged while adding an additional draft model to improve decoding throughput. On the day the model was released (Day 0), a community member deployed it on an &lt;strong&gt;8× H20-141G&lt;/strong&gt; environment through GPUStack and conducted a performance comparison against the original GLM-5.2-FP8 under the same hardware conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's start with the conclusion. The results from this test are mixed and should be interpreted objectively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-concurrency scenario:&lt;/strong&gt; In the GPUStack Playground, DSpark achieved approximately &lt;strong&gt;171 TPS&lt;/strong&gt;, while the original GLM-5.2-FP8 achieved approximately &lt;strong&gt;72 TPS&lt;/strong&gt;, delivering around a &lt;strong&gt;2.2× improvement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-concurrency scenario (64K input / 3K output):&lt;/strong&gt; DSpark achieved &lt;strong&gt;59.8 TPS&lt;/strong&gt; output throughput, which was actually &lt;strong&gt;lower&lt;/strong&gt; than the &lt;strong&gt;99.2 TPS&lt;/strong&gt; achieved by the original MTP approach. Due to the lower acceptance rate of the external draft model on the Random dataset, DSpark did not improve performance under high concurrency and even introduced regression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key takeaway:&lt;/strong&gt; With the specific external draft model + GLM-5.2-FP8 combination tested in this article, DSpark is currently better suited for &lt;strong&gt;single-concurrency / low-concurrency interactive scenarios where first-token latency and response throughput are critical&lt;/strong&gt;, or for &lt;strong&gt;research and evaluation purposes&lt;/strong&gt;. For high-concurrency production workloads, waiting for draft models with higher acceptance rates is recommended.
&lt;em&gt;(The conclusions above only apply to the draft model and dataset used in this test, and do not represent the upper limit of the DSpark speculative decoding approach.)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following sections provide the complete deployment process and benchmark results.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Deploying GLM-5.2-FP8-DSpark on GPUStack
&lt;/h2&gt;

&lt;p&gt;DSpark requires a newer vLLM image (&lt;strong&gt;v0.25.0&lt;/strong&gt;) to support speculative decoding with an external draft model. With GPUStack's pluggable vLLM backend architecture, we only need to add a new vLLM backend version. The entire process can be completed through the GPUStack Web UI with just a few clicks.&lt;/p&gt;

&lt;h3&gt;
  
  
  ① Add a New vLLM Backend Version
&lt;/h3&gt;

&lt;p&gt;From the left navigation menu, go to &lt;strong&gt;Inference Backend&lt;/strong&gt;, find the &lt;strong&gt;vLLM&lt;/strong&gt; card, and click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;Version Configuration&lt;/strong&gt;, click &lt;strong&gt;Add Version&lt;/strong&gt; and create a new version named &lt;code&gt;25&lt;/code&gt;. Enter the following image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vllm/vllm-openai:v0.25.0、
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;CUDA&lt;/strong&gt; as the framework and save the configuration. A new backend version named &lt;code&gt;25-custom&lt;/code&gt; will then become available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frj31vvahaug7fuap5s39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frj31vvahaug7fuap5s39.png" alt="Add vLLM v0.25.0 Version" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ② Create a Deployment and Select Model &amp;amp; Backend
&lt;/h3&gt;

&lt;p&gt;Go back to the &lt;strong&gt;Deployments&lt;/strong&gt; page and click &lt;strong&gt;Deploy Model&lt;/strong&gt; in the upper-right corner. Configure the basic information as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source: Select &lt;strong&gt;ModelScope&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Repository ID: &lt;code&gt;ZhipuAI/GLM-5.2-FP8&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Backend: Select &lt;strong&gt;vLLM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Backend Version: Select the newly added &lt;strong&gt;25-custom&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl3vh47ie1oy66vsussoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl3vh47ie1oy66vsussoq.png" alt="Select Model Source and Backend Version" width="799" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ③ Configure Backend Parameters
&lt;/h3&gt;

&lt;p&gt;In the &lt;strong&gt;Advanced&lt;/strong&gt; section, configure the backend parameters as follows (using an 8× H20-141G environment as an example):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
--max-model-len 131072&lt;br&gt;
--tensor-parallel-size 8&lt;br&gt;
--tool-call-parser glm47&lt;br&gt;
--enable-auto-tool-choice&lt;br&gt;
--reasoning-parser glm45&lt;br&gt;
--enable-expert-parallel&lt;br&gt;
--trust-remote-code&lt;br&gt;
--gpu-memory-utilization=0.9&lt;br&gt;
--max-num-batched-tokens 32768&lt;br&gt;
--max-num-seqs 16&lt;br&gt;
--speculative-config '{"model":"/var/lib/gpustack/cache/model_scope/RedHatAI/GLM-5.2-speculator.dspark","num_speculative_tokens":7,"method":"dspark"}'&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The key parameter is &lt;code&gt;--speculative-config&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;method&lt;/code&gt; to &lt;code&gt;dspark&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;model&lt;/code&gt; to the downloaded external draft model path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the engine takes longer to load, add the environment variable:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
VLLM_ENGINE_READY_TIMEOUT_S=3600&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to extend the ready timeout.&lt;br&gt;
https://&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftf57qd34zlpp6pr4fenf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftf57qd34zlpp6pr4fenf.png" alt="Configure vLLM Backend Parameters" width="800" height="1222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Draft model download:&lt;br&gt;
&lt;a href="https://modelscope.cn/models/RedHatAI/GLM-5.2-speculator.dspark" rel="noopener noreferrer"&gt;https://modelscope.cn/models/RedHatAI/GLM-5.2-speculator.dspark&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Submit the deployment. Once the instance status changes to &lt;strong&gt;Running&lt;/strong&gt;, the deployment is complete.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Performance Benchmark: DSpark vs Original GLM-5.2-FP8
&lt;/h2&gt;

&lt;p&gt;Under the &lt;strong&gt;same hardware environment (8× H20-141G)&lt;/strong&gt;, we compared the two models from two perspectives: &lt;strong&gt;single-concurrency interactive inference&lt;/strong&gt; and &lt;strong&gt;high-concurrency batch inference&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1: Single-Concurrency Interactive Inference
&lt;/h3&gt;

&lt;p&gt;Run a conversation directly in the GPUStack Playground and monitor the real-time output throughput.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GLM-5.2-FP8-DSpark:&lt;/strong&gt;&lt;br&gt;
Output throughput reached &lt;strong&gt;171.6 Tokens/s&lt;/strong&gt;, remaining stable in the 170+ range.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original GLM-5.2-FP8:&lt;/strong&gt;&lt;br&gt;
Output throughput reached &lt;strong&gt;71.81 Tokens/s&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Under single-concurrency workloads, DSpark achieved approximately &lt;strong&gt;171 TPS&lt;/strong&gt;, around &lt;strong&gt;2.2× faster&lt;/strong&gt; than the original version (~72 TPS). This demonstrates the typical benefit of speculative decoding in low-concurrency interactive scenarios.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Scenario 2: High-Concurrency Batch Inference (64K Input / 3K Output, 10 Requests)
&lt;/h3&gt;

&lt;p&gt;Using GPUStack's built-in benchmark tool, we tested the model with a Random dataset containing &lt;strong&gt;64K input tokens / 3K output tokens&lt;/strong&gt; and &lt;strong&gt;10 requests&lt;/strong&gt; (with an actual average concurrency of approximately 6).&lt;/p&gt;

&lt;p&gt;The baseline for comparison is the original MTP approach with speculative decoding enabled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original MTP (&lt;code&gt;method: mtp&lt;/code&gt;, &lt;code&gt;num_speculative_tokens: 5&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total throughput: &lt;strong&gt;2216.39 Tokens/s&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Output throughput: &lt;strong&gt;99.22 Tokens/s&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TPOT: &lt;strong&gt;63.92 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DSpark (&lt;code&gt;method: dspark&lt;/code&gt;, &lt;code&gt;num_speculative_tokens: 7&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total throughput: &lt;strong&gt;1336.12 Tokens/s&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Output throughput: &lt;strong&gt;59.82 Tokens/s&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TPOT: &lt;strong&gt;103.08 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Under high-concurrency workloads, DSpark's output throughput (&lt;strong&gt;59.8 TPS&lt;/strong&gt;) did &lt;strong&gt;not improve and instead regressed&lt;/strong&gt;, performing significantly below the original MTP approach (&lt;strong&gt;99.2 TPS&lt;/strong&gt;). TPOT was also higher.  &lt;/p&gt;

&lt;p&gt;The main reason is that the external draft model provided by Red Hat AI achieved a relatively low acceptance rate on the Random dataset. When speculative decoding has insufficient acceptance, the additional draft computation overhead can negatively impact overall throughput.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Performance Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Original GLM-5.2-FP8&lt;/th&gt;
&lt;th&gt;GLM-5.2-FP8-DSpark&lt;/th&gt;
&lt;th&gt;Comparison&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single-concurrency (Playground)&lt;/td&gt;
&lt;td&gt;Output TPS&lt;/td&gt;
&lt;td&gt;≈ 71.8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;≈ 171.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≈ 2.2×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-concurrency 64K/3K&lt;/td&gt;
&lt;td&gt;Total Throughput (TPS)&lt;/td&gt;
&lt;td&gt;2216.39 (MTP)&lt;/td&gt;
&lt;td&gt;1336.12&lt;/td&gt;
&lt;td&gt;≈ 0.60×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-concurrency 64K/3K&lt;/td&gt;
&lt;td&gt;Output Throughput (TPS)&lt;/td&gt;
&lt;td&gt;99.22 (MTP)&lt;/td&gt;
&lt;td&gt;59.82&lt;/td&gt;
&lt;td&gt;≈ 0.60×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-concurrency 64K/3K&lt;/td&gt;
&lt;td&gt;TPOT (ms)&lt;/td&gt;
&lt;td&gt;63.92 (MTP)&lt;/td&gt;
&lt;td&gt;103.08&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The performance characteristics of GLM-5.2-FP8-DSpark show a clear trade-off:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single-concurrency / low-concurrency scenarios:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Speculative decoding provides significant benefits. In this test, DSpark achieved &lt;strong&gt;1.2–2.2×&lt;/strong&gt; the throughput of the original GLM-5.2-FP8, making it suitable for interactive workloads that are sensitive to single-request throughput and response latency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High-concurrency scenarios:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
With the external draft model used in this test, the acceptance rate on the Random dataset was relatively low. As a result, throughput did not improve significantly and was even lower than the original MTP approach. It is currently not recommended for similar high-concurrency production workloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Based on the model and workload tested in this article, DSpark is currently more suitable for &lt;strong&gt;research validation and low-concurrency scenarios&lt;/strong&gt;. For high-concurrency production deployment, it is recommended to wait for draft model versions with higher acceptance rates on these workloads.&lt;br&gt;&lt;br&gt;
&lt;em&gt;(The conclusions above only apply to the draft model and dataset used in this test, and do not represent the upper limit of the DSpark speculative decoding approach.)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks to GPUStack's pluggable vLLM backend architecture, adding a new image version, integrating an external draft model, or switching between different inference configurations can all be completed through the Web UI with just a few clicks. This enables teams to evaluate new models from Day 0 with minimal adaptation effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Test Environment: 8× H20-141G ｜ GPUStack v2 ｜ vLLM v0.25.0 (&lt;code&gt;25-custom&lt;/code&gt; image)&lt;/p&gt;

&lt;p&gt;Thanks to the GPUStack community member for sharing this real-world deployment experience.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>llm</category>
      <category>github</category>
    </item>
    <item>
      <title>Where Did Your GPU Resources Go? GPUStack Usage Tracking Gives You the Answer at a Glance</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Wed, 08 Jul 2026 02:17:30 +0000</pubDate>
      <link>https://dev.to/gpustack/where-did-your-gpu-resources-go-gpustack-usage-tracking-gives-you-the-answer-at-a-glance-203b</link>
      <guid>https://dev.to/gpustack/where-did-your-gpu-resources-go-gpustack-usage-tracking-gives-you-the-answer-at-a-glance-203b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;You bought a stack of GPUs and deployed a bunch of models. Then, at the end of the month, your boss asks: “Are these GPUs actually worth the cost?” Can you answer?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If not, this article is for you.&lt;/p&gt;

&lt;p&gt;GPUStack’s new &lt;strong&gt;Usage&lt;/strong&gt; feature is now available. It provides clear visibility into three key types of resource consumption: token usage, GPU/CPU instance runtime, and storage usage.&lt;/p&gt;

&lt;p&gt;Who is using the resources, how much they are using, and which models the usage is associated with — you no longer have to guess.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Do You Need It?
&lt;/h2&gt;

&lt;p&gt;In a shared GPU cluster with multiple users and multiple models, the biggest pain point is not always &lt;strong&gt;“not enough compute.”&lt;/strong&gt; More often, it is: &lt;strong&gt;“Where did the compute go?”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to calculate costs, but cannot get usage details broken down by user.&lt;/li&gt;
&lt;li&gt;Platform admins want to know which model consumes the most resources, but have to dig through logs.&lt;/li&gt;
&lt;li&gt;Business teams ask for more GPU capacity, but no one can clearly explain the actual utilization of existing resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPUStack Usage is built to answer exactly these questions. It connects the full workflow from &lt;strong&gt;collection → aggregation → visualization&lt;/strong&gt;, making every unit of compute consumption traceable.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Five Tabs Covering All Usage Scenarios
&lt;/h2&gt;

&lt;p&gt;Click the &lt;strong&gt;bar chart icon&lt;/strong&gt; in the left navigation bar to enter the Usage page. You will see five tabs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tab&lt;/th&gt;
&lt;th&gt;What You Can See&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Summary&lt;/td&gt;
&lt;td&gt;A complete overview of token, compute, and storage usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens&lt;/td&gt;
&lt;td&gt;LLM token usage, broken down by model / user / API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Instances&lt;/td&gt;
&lt;td&gt;GPU/CPU instance runtime, broken down by instance type / instance / user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Storage usage, broken down by storage volume / user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource Events&lt;/td&gt;
&lt;td&gt;Resource lifecycle audit logs that explain where each number comes from&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What exactly is being measured?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;When It Is Measured&lt;/th&gt;
&lt;th&gt;Granularity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Token&lt;/td&gt;
&lt;td&gt;When an inference request is served through the gateway&lt;/td&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU/CPU Instance&lt;/td&gt;
&lt;td&gt;When an instance is in the “running (billable)” state; usage stops accumulating after the instance is stopped or deleted&lt;/td&gt;
&lt;td&gt;Hourly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Measured from creation to deletion, regardless of whether it is mounted or used&lt;/td&gt;
&lt;td&gt;Hourly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  3. Scenario 1: View Usage by User, Clearly See Who Used What
&lt;/h2&gt;

&lt;p&gt;This is one of the most important capabilities in a shared cluster. GPUStack has two built-in roles: &lt;strong&gt;Admin&lt;/strong&gt; and &lt;strong&gt;User&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Admin&lt;/strong&gt;: Can view usage across &lt;strong&gt;all users&lt;/strong&gt; and drill down into any member through the &lt;strong&gt;“filter by user”&lt;/strong&gt; control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User&lt;/strong&gt;: Can only view &lt;strong&gt;their own&lt;/strong&gt; usage details and cannot see other users’ data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, platform admins can easily answer questions such as: “How many tokens did this user consume this month?” or “Who used the most GPU hours?” For cost allocation and quota planning, the data is already there.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 The detailed tables in each tab support &lt;strong&gt;grouping by user&lt;/strong&gt;. This is only visible to admins, making each user’s usage bill clear and easy to review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauqsprie3vdyt1yui9pl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauqsprie3vdyt1yui9pl.png" alt="case1--top-user" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;regular users&lt;/strong&gt;, the Usage page shows a dedicated usage bill of their own: how many tokens they used this month, how many GPU hours they ran, and how much storage they occupied. Everything is clear at a glance. This helps users stay aware of their usage, compare it against their quota, and avoid overuse.&lt;/p&gt;

&lt;p&gt;They cannot see anyone else’s data, so the permission boundary remains clear and the experience is more secure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frw8qhbkyrh73nby6aqgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frw8qhbkyrh73nby6aqgy.png" alt="case1--normal-user" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Scenario 2: Break Down Usage by API Key to See Which Application Is Driving Costs
&lt;/h2&gt;

&lt;p&gt;Viewing usage &lt;strong&gt;by user&lt;/strong&gt; gives you a people-oriented perspective. Viewing usage &lt;strong&gt;by API Key&lt;/strong&gt; gives you an application-oriented perspective — and in many cases, applications are the real source of consumption.&lt;/p&gt;

&lt;p&gt;In practice, each connected application or business pipeline usually uses a &lt;strong&gt;dedicated API Key&lt;/strong&gt;. The Tokens tab supports &lt;strong&gt;grouping by API Key&lt;/strong&gt;, so you can directly see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which &lt;strong&gt;application / integration partner&lt;/strong&gt; is continuously consuming tokens&lt;/li&gt;
&lt;li&gt;Whether the cost of a business line has suddenly increased&lt;/li&gt;
&lt;li&gt;Which keys are barely used and can be reclaimed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining the dimensions of &lt;strong&gt;users&lt;/strong&gt; and &lt;strong&gt;applications&lt;/strong&gt;, cost attribution becomes much more complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegi1okd2hhynmcpjj5io.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegi1okd2hhynmcpjj5io.png" alt="case2--top-api-key" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Scenario 3: Clearly Track Usage Across Different Types of Models
&lt;/h2&gt;

&lt;p&gt;Running large language models, embedding models, and open-source models of different sizes in the same cluster? No problem.&lt;/p&gt;

&lt;p&gt;At the top of the &lt;strong&gt;Tokens tab&lt;/strong&gt;, GPUStack shows the key metrics directly: &lt;strong&gt;input / output / total tokens&lt;/strong&gt;, &lt;strong&gt;API requests&lt;/strong&gt;, and &lt;strong&gt;number of models used&lt;/strong&gt;. The detailed table below can be grouped by &lt;strong&gt;model&lt;/strong&gt;, showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input tokens, including &lt;strong&gt;cached input tokens&lt;/strong&gt;, which are marked separately&lt;/li&gt;
&lt;li&gt;Output tokens&lt;/li&gt;
&lt;li&gt;Total tokens&lt;/li&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;li&gt;Last active time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets you quickly identify which models are receiving the most traffic, which models were requested but are barely used, and whether a model should be taken offline or scaled up. The data helps you make the decision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcxekddq35spnft8tllcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcxekddq35spnft8tllcu.png" alt="case3--top-model" width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 &lt;strong&gt;Easily verify the effect of cache optimization&lt;/strong&gt;: The &lt;strong&gt;Input Tokens Cached&lt;/strong&gt; field separately marks the portion of input tokens that hit the prompt cache. After optimizing prompt caching, you can check the proportion of this number to directly quantify how many input tokens were saved. Whether the optimization worked is clear at a glance.&lt;/p&gt;

&lt;p&gt;Also: Even if a model has been deleted, its historical usage is still retained in the table and marked as &lt;strong&gt;Deleted&lt;/strong&gt;. It is still included in the total usage, so historical records are not lost.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. Scenario 4: GPU Compute Usage Is No Longer a Black Box
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;GPU Instances tab&lt;/strong&gt; breaks down instance runtime clearly. The key is that it distinguishes between two metrics that are often confused:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Instance Hours&lt;/td&gt;
&lt;td&gt;The wall-clock runtime of an instance, regardless of how many GPUs it uses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Hours&lt;/td&gt;
&lt;td&gt;Accelerator runtime = runtime × number of GPUs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For example, a &lt;strong&gt;2-GPU instance running for 1 hour&lt;/strong&gt; equals &lt;strong&gt;2 GPU hours&lt;/strong&gt;, but only &lt;strong&gt;1 instance hour&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This distinction lets you calculate actual GPU usage instead of being misled by the number of instances. The trend chart can also be grouped by &lt;strong&gt;instance type / instance / user&lt;/strong&gt;, helping you understand the current situation before scaling capacity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚙️ CPU instances do not have accelerator cards, so they are counted only in &lt;strong&gt;Instance Hours&lt;/strong&gt;, not &lt;strong&gt;GPU Hours&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuvgbog1d0vo9hdxn8x8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuvgbog1d0vo9hdxn8x8s.png" alt="case4--instance-hours" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Scenario 5: Storage Usage, Including Idle Volumes
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Storage tab&lt;/strong&gt; focuses on storage capacity usage over time. The key metrics are &lt;strong&gt;GB-Days&lt;/strong&gt; and &lt;strong&gt;GB-Hours&lt;/strong&gt;: capacity × duration. Usage can be broken down by &lt;strong&gt;storage volume / user&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The important detail is this: storage is measured &lt;strong&gt;from creation to deletion, regardless of whether it is mounted&lt;/strong&gt;. This means there are no blind spots in the usage records. Even if a volume is not mounted or accessed, as long as it still exists, its usage is counted in GB-Days. It will not disappear from the bill simply because it is “not being used.”&lt;/p&gt;

&lt;p&gt;This makes forgotten idle volumes easy to find. Sort by &lt;strong&gt;GB-Days&lt;/strong&gt;, identify the volumes occupying the most capacity, check whether they are still used by any instance, and clean up what should be removed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwk6ephbwvo5raf4r4e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwk6ephbwvo5raf4r4e2.png" alt="case5--storage" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Scenario 6: Find Zombie Resources and Stop Paying for Waste
&lt;/h2&gt;

&lt;p&gt;After a cluster has been running for a while, it often accumulates resources that no one remembers: models that are no longer called, or instances that were never stopped. They no longer create value, but they still occupy resources.&lt;/p&gt;

&lt;p&gt;For resources that are measured only when used, such as models and GPU/CPU instances, each detailed table includes a &lt;strong&gt;Last Active&lt;/strong&gt; column. It records the last time the resource generated usage. Once the resource is no longer used, usage stops accumulating and Last Active stays at that moment. Long-inactive models and forgotten stopped instances immediately become visible, making cleanup much more targeted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bv0p92wgmc8tjgq5tui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bv0p92wgmc8tjgq5tui.png" alt="case6--not-activate" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Scenario 7: View Trends and Plan Capacity Without Guesswork
&lt;/h2&gt;

&lt;p&gt;Both the Summary page and the individual tabs include &lt;strong&gt;trend charts&lt;/strong&gt;. With adjustable &lt;strong&gt;granularity&lt;/strong&gt; by hour / day / week / month, you can see how usage changes over time instead of only looking at a static total.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is usage stable, or is it growing faster?&lt;/li&gt;
&lt;li&gt;When did the growth inflection point occur, and does it match a business launch?&lt;/li&gt;
&lt;li&gt;Based on the current trend, how long can existing capacity last?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the trend is clear, capacity planning moves from guesswork to data-driven decisions. Trend charts can also be &lt;strong&gt;split by group&lt;/strong&gt;, making structural changes easy to spot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8pkyt7enfn8iaztp526.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8pkyt7enfn8iaztp526.png" alt="case7--trend-1" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvjqh01diixdainhbupzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvjqh01diixdainhbupzl.png" alt="case7--trend-2" width="800" height="641"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Scenario 8: Every Number Has a Source, and Resource Events Show the Full Lifecycle
&lt;/h2&gt;

&lt;p&gt;Each tab above shows the &lt;strong&gt;result&lt;/strong&gt;: how many GPU hours were used, how many GB-Days were consumed, and so on. The &lt;strong&gt;Resource Events tab&lt;/strong&gt; shows where those numbers come from. The lifecycle of every instance and storage volume is recorded as events.&lt;/p&gt;

&lt;p&gt;Sorted in reverse chronological order, it becomes a resource timeline. The lifecycle of an instance is easy to follow, with colored labels showing each state clearly:&lt;/p&gt;

&lt;p&gt;🟢 &lt;strong&gt;Created&lt;/strong&gt; → 🔵 &lt;strong&gt;Started&lt;/strong&gt; and measured → 🟠 &lt;strong&gt;Stopped&lt;/strong&gt; and no longer measured → 🔴 &lt;strong&gt;Deleted&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trace usage for reconciliation&lt;/strong&gt;: Why does an instance have this number of Instance Hours? Check the period from Started to Stopped, and you can see exactly how long it ran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter and investigate&lt;/strong&gt;: Filter by &lt;strong&gt;date / resource type / event type / name&lt;/strong&gt; to quickly answer questions such as “which volumes were deleted last week?” or “which instance was repeatedly started and stopped?”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explain inactivity&lt;/strong&gt;: If Last Active in Scenario 6 shows that an instance has stopped generating usage, come here to check when it was Stopped or Deleted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6d15gwlg98w4h16wzvw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6d15gwlg98w4h16wzvw8.png" alt="case8--resource-event" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Put the Data to Work: Export Usage for Reconciliation
&lt;/h2&gt;

&lt;p&gt;Seeing the data is not enough. You also need to take it out and use it.&lt;/p&gt;

&lt;p&gt;The Tokens, GPU Instances, and Storage tabs all support &lt;strong&gt;export&lt;/strong&gt; through the download icon. You can preview the currently filtered details and then download them. Monthly billing, financial reconciliation, internal reports — once you have the data, you can work with it directly, without asking engineers to write custom scripts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwk5093if7uu0h2j74nu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwk5093if7uu0h2j74nu5.png" alt="case-export" width="799" height="399"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Details That Make Usage Tracking Reliable
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Unified Time Zone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All timestamps across tabs, including trend buckets, Last Active, and event time, are displayed using the same &lt;strong&gt;rollup time zone&lt;/strong&gt;. This ensures that calendar boundaries are aligned across all tabs. It can be configured through the &lt;code&gt;GPUSTACK_USAGE_ROLLUP_TIMEZONE&lt;/code&gt; environment variable and follows the server’s local time zone by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible Common Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Date range, defaulting to the last 30 days, filtering by user / model / API Key, refresh, metric switching, grouping, and granularity adjustment are all available out of the box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Retention and Archiving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aggregated token, compute, and storage usage data is retained for about 13 months by default, and then archived by background tasks. The retention window and archive schedule can be configured through the &lt;code&gt;GPUSTACK_*_RETENTION_MONTHS&lt;/code&gt; and &lt;code&gt;GPUSTACK_*_ARCHIVE_CRON&lt;/code&gt; environment variables.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Compute is expensive, but compute you cannot see clearly is even more expensive.&lt;/p&gt;

&lt;p&gt;GPUStack Usage makes every token, every GPU hour, and every GB of storage &lt;strong&gt;measurable, traceable, and attributable&lt;/strong&gt;. Whether you are in finance handling cost allocation, an administrator planning capacity, or a business owner trying to prove ROI, it gives you answers backed by data.&lt;/p&gt;

&lt;p&gt;Upgrade to the latest version of GPUStack, open the Usage page, and see where your compute resources are really going.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>llm</category>
      <category>gpu</category>
    </item>
    <item>
      <title>Day 0 Benchmark: Deploying DeepSeek-V4-Flash-DSpark on GPUStack Doubles Throughput</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Wed, 01 Jul 2026 14:05:03 +0000</pubDate>
      <link>https://dev.to/gpustack/day-0-benchmark-deploying-deepseek-v4-flash-dspark-on-gpustack-doubles-throughput-1b8h</link>
      <guid>https://dev.to/gpustack/day-0-benchmark-deploying-deepseek-v4-flash-dspark-on-gpustack-doubles-throughput-1b8h</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is based on a community benchmark contributed by a GPUStack user. DeepSeek-V4-Flash-DSpark enhances DeepSeek-V4-Flash by adding a Speculative Decoding module. Using the same model weights with an additional speculative decoder, it significantly improves both inference throughput and Time to First Token (TTFT).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On Day 0 of the model release, a GPUStack community member deployed and benchmarked DeepSeek-V4-Flash-DSpark on an 8× H20-141G setup, comparing it against the original DeepSeek-V4-Flash (DSV4F) under identical deployment settings. Here are the key results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-stream throughput&lt;/strong&gt;: In the 1K input / 1K output workload, DSpark achieved 195 tokens/s, approximately &lt;strong&gt;2×&lt;/strong&gt; the throughput of the original model (96 tokens/s)；&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overall throughput&lt;/strong&gt;: In the 64K input / 3K output workload with 10 concurrent requests, DSpark reached &lt;strong&gt;338 tokens/s&lt;/strong&gt;, approximately &lt;strong&gt;1.7×&lt;/strong&gt; higher than the original (198 tokens/s)；&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to First Token (TTFT)&lt;/strong&gt;: Reduced to roughly &lt;strong&gt;half that of the original model&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following sections walk through the complete deployment process and benchmark results.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Deploying DSpark on GPUStack
&lt;/h2&gt;

&lt;p&gt;GPUStack comes with the SGLang inference backend built in. To deploy DSpark, simply add a container image that supports the model. The entire process can be completed in just a few clicks through the web UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  ① Go to Inference Backends and edit SGLang.
&lt;/h3&gt;

&lt;p&gt;From the left navigation menu, go to &lt;strong&gt;Inference Backends&lt;/strong&gt;, locate the SGLang card, then click the menu in the upper-right corner and select &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5szbu325833veqllr7b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5szbu325833veqllr7b.png" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ② Add a DSpark-compatible image
&lt;/h3&gt;

&lt;p&gt;Under Version Configuration, click Add Version to create a new version named dspark, then specify the following container image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;swr.cn-north-4.myhuaweicloud.com/desaysv/gpustack/sglang-dspark:v1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select &lt;strong&gt;CUDA&lt;/strong&gt; as the framework. Set the image entrypoint override to &lt;code&gt;sglang serve&lt;/code&gt;, and set the command to: &lt;code&gt;--model-path {{model_path}} --host {{worker_ip}} --port {{port}}&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdefbjjeishk71217jr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdefbjjeishk71217jr5.png" width="800" height="1407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ③ Create a Deployment
&lt;/h3&gt;

&lt;p&gt;Return to the &lt;strong&gt;Deployments&lt;/strong&gt; page and click &lt;strong&gt;Deploy Model&lt;/strong&gt; in the upper-right corner. For &lt;strong&gt;Source&lt;/strong&gt;, select &lt;strong&gt;ModelScope&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvrekooi9fhhyggrqvmob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvrekooi9fhhyggrqvmob.png" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ④ Select the Model and Inference Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Search for and select &lt;code&gt;deepseek-ai/DeepSeek-V4-Flash-DSpark&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Inference Backend&lt;/strong&gt; to &lt;strong&gt;SGLang&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;dspark-custom&lt;/strong&gt; as the backend version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbjj5d96vo8ctp5u5e87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbjj5d96vo8ctp5u5e87.png" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑤ Configure Backend Parameters
&lt;/h3&gt;

&lt;p&gt;Under &lt;strong&gt;Advanced&lt;/strong&gt;, configure the backend parameters as follows (using an &lt;strong&gt;8× H20-141G&lt;/strong&gt; setup as an example):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--context-length&lt;/span&gt; 1000000
&lt;span class="nt"&gt;--trust-remote-code&lt;/span&gt;
&lt;span class="nt"&gt;--tp-size&lt;/span&gt; 8
&lt;span class="nt"&gt;--ep-size&lt;/span&gt; 8
&lt;span class="nt"&gt;--moe-runner-backend&lt;/span&gt; flashinfer_mxfp4
&lt;span class="nt"&gt;--speculative-moe-runner-backend&lt;/span&gt; flashinfer_mxfp4
&lt;span class="nt"&gt;--speculative-algorithm&lt;/span&gt; DSPARK
&lt;span class="nt"&gt;--speculative-eagle-topk&lt;/span&gt; 1
&lt;span class="nt"&gt;--speculative-num-steps&lt;/span&gt; 1
&lt;span class="nt"&gt;--mem-fraction-static&lt;/span&gt; 0.85
&lt;span class="nt"&gt;--cuda-graph-max-bs&lt;/span&gt; 32
&lt;span class="nt"&gt;--max-running-requests&lt;/span&gt; 32
&lt;span class="nt"&gt;--disable-overlap-schedule&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fke21iuwvmucrr8w775ix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fke21iuwvmucrr8w775ix.png" width="800" height="1609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑥ Configure Environment Variables
&lt;/h3&gt;

&lt;p&gt;Add the following environment variable to ensure the required dependencies are installed correctly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PYPI_PACKAGES_INSTALL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-U distro -i https://mirrors.aliyun.com/pypi/simple/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbr00zy47ilmw3fp08rh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbr00zy47ilmw3fp08rh2.png" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑦ Start the Deployment and Monitor the Logs
&lt;/h3&gt;

&lt;p&gt;Once submitted, GPUStack will start the deployment. In the logs, you should see &lt;strong&gt;CUDA Graph capture&lt;/strong&gt;, &lt;code&gt;Application startup complete&lt;/code&gt;, and &lt;strong&gt;Uvicorn&lt;/strong&gt; listening on the inference port, indicating that the model has started successfully:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foc9r01mt1ta41zx8bdgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foc9r01mt1ta41zx8bdgq.png" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑧ Verify the Deployment Status
&lt;/h3&gt;

&lt;p&gt;Once the instance reaches the &lt;strong&gt;Running&lt;/strong&gt; state, the deployment is complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0tageo9luini1ynv8nn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0tageo9luini1ynv8nn.png" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑨ Verify the Deployment
&lt;/h3&gt;

&lt;p&gt;Open the &lt;strong&gt;Playground&lt;/strong&gt; and send a few prompts to the model. The real-time throughput indicator in the lower-right corner should show an output rate of &lt;strong&gt;185.94 tokens/s&lt;/strong&gt;, with single-stream throughput remaining stable at around &lt;strong&gt;200 tokens/s&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⑩ View the Inference Service Port
&lt;/h3&gt;

&lt;p&gt;If you want to run benchmarks directly against the service, open the instance details to find the inference service IP address and port (in this example, &lt;code&gt;10.91.3.213:40048&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Benchmark Results: DSpark vs. DSV4F
&lt;/h2&gt;

&lt;p&gt;Under &lt;strong&gt;identical hardware and deployment settings&lt;/strong&gt;, we benchmarked the original &lt;strong&gt;DeepSeek-V4-Flash (with MTP enabled)&lt;/strong&gt; against &lt;strong&gt;DSpark&lt;/strong&gt; across two workloads. All benchmarks were conducted using SGLang's built-in &lt;code&gt;bench_serving&lt;/code&gt; tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1: 1K Input / 1K Output (Single Request)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;HF_ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://hf-mirror.com python3 &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.bench_serving &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--backend&lt;/span&gt; sglang &lt;span class="nt"&gt;--port&lt;/span&gt; 40048 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--dataset-name&lt;/span&gt; random &lt;span class="nt"&gt;--random-input-len&lt;/span&gt; 1024 &lt;span class="nt"&gt;--random-output-len&lt;/span&gt; 1024 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--random-range-ratio&lt;/span&gt; 1.0 &lt;span class="nt"&gt;--num-prompts&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--max-concurrency&lt;/span&gt; 1 &lt;span class="nt"&gt;--request-rate&lt;/span&gt; inf &lt;span class="nt"&gt;--host&lt;/span&gt; &amp;lt;Inference Server IP Address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Original DSV4F:&lt;/strong&gt; Output throughput: &lt;strong&gt;96.20 tokens/s&lt;/strong&gt;, TTFT: &lt;strong&gt;300.45 ms&lt;/strong&gt;, Accept length: &lt;strong&gt;2.71&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsosxnn2he6leuj33011g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsosxnn2he6leuj33011g.jpg" width="729" height="786"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DSpark（DSV4FD）：&lt;/strong&gt; Output throughput &lt;strong&gt;195.18 tok/s&lt;/strong&gt;，TTFT 129.34 ms，Accept length 4.42&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9hvtzociwrt87bmyxdf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9hvtzociwrt87bmyxdf.jpg" width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Single-stream throughput reached 195 tokens/s&lt;/strong&gt;, approximately &lt;strong&gt;2×&lt;/strong&gt; that of the original DSV4F (&lt;strong&gt;96 tokens/s&lt;/strong&gt;), while &lt;strong&gt;Time to First Token (TTFT)&lt;/strong&gt; was reduced to &lt;strong&gt;about half&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Scenario 2: 64K Input / 3K Output (10 Concurrent Requests)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;HF_ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://hf-mirror.com python3 &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.bench_serving &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--backend&lt;/span&gt; sglang &lt;span class="nt"&gt;--port&lt;/span&gt; 40048 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--dataset-name&lt;/span&gt; random &lt;span class="nt"&gt;--random-input-len&lt;/span&gt; 64000 &lt;span class="nt"&gt;--random-output-len&lt;/span&gt; 3000 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--random-range-ratio&lt;/span&gt; 1.0 &lt;span class="nt"&gt;--num-prompts&lt;/span&gt; 10 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--max-concurrency&lt;/span&gt; 1 &lt;span class="nt"&gt;--request-rate&lt;/span&gt; inf &lt;span class="nt"&gt;--host&lt;/span&gt; &amp;lt;Inference Server IP Address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Original DSV4F (MTP enabled):&lt;/strong&gt; Output throughput: &lt;strong&gt;198.60 tokens/s&lt;/strong&gt;, Speculative acceptance rate: &lt;strong&gt;20.91%&lt;/strong&gt;, Acceptance length: &lt;strong&gt;1.21&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ecrlzegx3dym00ssnqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ecrlzegx3dym00ssnqt.png" width="799" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DSpark（DSV4FD）：&lt;/strong&gt; Output throughput &lt;strong&gt;338.17 tok/s&lt;/strong&gt;，Accept length 4.90&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrdb5b2teqqhqbiy3987.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrdb5b2teqqhqbiy3987.jpg" width="780" height="888"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the long-context workload, &lt;strong&gt;DSpark&lt;/strong&gt; achieved &lt;strong&gt;338 tokens/s&lt;/strong&gt;, approximately &lt;strong&gt;1.7×&lt;/strong&gt; the throughput of the original DSV4F (&lt;strong&gt;198 tokens/s&lt;/strong&gt;), nearly doubling overall throughput.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Original DSV4F&lt;/th&gt;
&lt;th&gt;DSpark (DSV4FD)&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1K Input / 1K Output&lt;/td&gt;
&lt;td&gt;Output Throughput (tokens/s)&lt;/td&gt;
&lt;td&gt;96.20&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;195.18&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≈ 2.0×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K Input / 1K Output&lt;/td&gt;
&lt;td&gt;TTFT (ms)&lt;/td&gt;
&lt;td&gt;300.45&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;129.34&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≈ 0.43×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K Input / 1K Output&lt;/td&gt;
&lt;td&gt;Acceptance Length&lt;/td&gt;
&lt;td&gt;2.71&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.42&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64K Input / 3K Output&lt;/td&gt;
&lt;td&gt;Output Throughput (tokens/s)&lt;/td&gt;
&lt;td&gt;198.60&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;338.17&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≈ 1.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64K Input / 3K Output&lt;/td&gt;
&lt;td&gt;Acceptance Length&lt;/td&gt;
&lt;td&gt;1.21&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.90&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Across both single-request and long-context workloads, &lt;strong&gt;DeepSeek-V4-Flash-DSpark&lt;/strong&gt; consistently delivered &lt;strong&gt;around 2× the throughput&lt;/strong&gt; of the original &lt;strong&gt;DSV4F&lt;/strong&gt;, while reducing &lt;strong&gt;Time to First Token (TTFT)&lt;/strong&gt; to &lt;strong&gt;roughly half&lt;/strong&gt;. Achieving these gains requires nothing more than switching to the DSpark model weights and container image with the integrated speculative decoding module.&lt;/p&gt;

&lt;p&gt;With GPUStack's built-in &lt;strong&gt;SGLang&lt;/strong&gt; inference backend, the entire deployment can be completed in just a few clicks through the web UI, making the model &lt;strong&gt;production-ready on Day 0&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Benchmark environment:&lt;/strong&gt; 8× H20-141G | GPUStack v2 | SGLang 0.5.14 (using the &lt;code&gt;dspark-custom&lt;/code&gt; image based on a patched SGLang 0.5.14)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt; Thanks to the GPUStack community member for sharing the benchmark results.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>deepseek</category>
    </item>
    <item>
      <title>GPUStack v2.2: From Model Serving to Token Operations, from Compute Pooling to GPU-as-a-Service</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Tue, 30 Jun 2026 02:34:35 +0000</pubDate>
      <link>https://dev.to/gpustack/gpustack-v22-from-model-serving-to-token-operations-from-compute-pooling-to-gpu-as-a-service-28im</link>
      <guid>https://dev.to/gpustack/gpustack-v22-from-model-serving-to-token-operations-from-compute-pooling-to-gpu-as-a-service-28im</guid>
      <description>&lt;p&gt;Deploying a model and bringing it online is only the starting point of AI service delivery.&lt;/p&gt;

&lt;p&gt;As large language model applications move into scaled production, AI infrastructure is entering an inevitable phase of maturity — from simply &lt;strong&gt;being able to run&lt;/strong&gt; to becoming &lt;strong&gt;operations-ready&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This shift is not just about adding more features. It reflects an evolution in platform positioning: from reliably serving inference workloads to becoming the &lt;strong&gt;infrastructure foundation&lt;/strong&gt; that can truly support enterprise AI service delivery.&lt;/p&gt;

&lt;p&gt;At this stage, the core challenge lies in advancing two areas in parallel: model serving must deliver operations-grade &lt;strong&gt;reliability&lt;/strong&gt; and &lt;strong&gt;visibility&lt;/strong&gt;, while compute management must expand from “serving inference workloads” to “unified allocation of the diverse resources required by AI.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPUStack v2.2&lt;/strong&gt; continues to move deeper in both directions: model serving is evolving from &lt;strong&gt;available&lt;/strong&gt; to &lt;strong&gt;operations-ready&lt;/strong&gt;, while compute management is extending from &lt;strong&gt;unified scheduling&lt;/strong&gt; to &lt;strong&gt;on-demand services&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deepening Support for Model Inference Scenarios and Lifecycle Management
&lt;/h2&gt;

&lt;p&gt;The stability of model serving is not only a deployment-stage concern. After an instance starts running, issues such as &lt;strong&gt;OOM errors&lt;/strong&gt;, &lt;strong&gt;hanging inference requests&lt;/strong&gt;, and &lt;strong&gt;silent process crashes&lt;/strong&gt; are often the more common problems in production environments.&lt;/p&gt;

&lt;p&gt;Previously, GPUStack’s health checks mainly covered the &lt;strong&gt;startup phase&lt;/strong&gt;. Once an instance started successfully, the platform had no way to detect issues that occurred later. Faulty instances could remain in the service pool and continue receiving traffic, resulting in &lt;strong&gt;silent failures&lt;/strong&gt; that would only be addressed after someone noticed and handled them manually.&lt;/p&gt;

&lt;p&gt;In v2.2, health probing is extended across the &lt;strong&gt;entire runtime lifecycle&lt;/strong&gt;. The platform continuously checks the actual inference capability of each instance. When an abnormal instance is detected, it is immediately removed from the service pool and automatically restarted. Once recovered, it is automatically added back. Service availability is now proactively maintained by the platform, rather than relying on manual inspections or user reports.&lt;/p&gt;

&lt;p&gt;Troubleshooting capabilities have also been systematically enhanced. In production environments, what teams often need most is a complete record of what happened at the time of failure. Previously, this meant logging into the terminal and manually checking logs. v2.2 introduces three types of log access:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical logs before restart&lt;/strong&gt;, allowing you to view the complete output before an instance crashed, instead of losing access to past failure logs after a restart;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distributed sub-instance logs&lt;/strong&gt;, allowing you to inspect the output of each node separately in multi-node deployments and quickly identify where the issue occurred;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ray container logs&lt;/strong&gt;, allowing you to view Ray container logs directly in the UI without troubleshooting through terminal commands.&lt;/p&gt;

&lt;p&gt;Most production troubleshooting workflows can now be completed end to end within the GPUStack UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6pzercnahrngnkiwsgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6pzercnahrngnkiwsgq.png" alt="image-20260617105156970" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For distributed inference, v2.2 introduces &lt;strong&gt;vLLM MP auto-distributed mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Previously, GPUStack only supported Ray-based auto-distributed vLLM deployments. MP-based distributed deployments had to be configured manually, and GPUStack could not automatically spin up all distributed instances.&lt;/p&gt;

&lt;p&gt;With the rapid evolution of vLLM, the new MP-based distributed mode offers clear advantages over Ray-based auto-distributed deployments in terms of operational overhead and inference performance.&lt;/p&gt;

&lt;p&gt;Users can now choose the vLLM auto-distributed deployment strategy that best fits their needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F724hp0ht9qe7ppvgxn80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F724hp0ht9qe7ppvgxn80.png" alt="image-20260617103853807" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another notable update is support for &lt;strong&gt;Multi-LoRA&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In enterprise environments, fine-tuning models for different business scenarios is a common requirement. Previously, each &lt;strong&gt;LoRA Adapter&lt;/strong&gt; had to run as a separate model instance, causing &lt;strong&gt;GPU memory overhead&lt;/strong&gt; to grow linearly with the number of tasks and leading to significant resource waste.&lt;/p&gt;

&lt;p&gt;With v2.2, multiple LoRA Adapters can be mounted to the &lt;strong&gt;same base model instance&lt;/strong&gt; and switched dynamically. This allows the same hardware to support more fine-tuned tasks while significantly improving &lt;strong&gt;GPU memory utilization&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token Usage Governance for Model Services
&lt;/h2&gt;

&lt;p&gt;Models may be running, but where exactly are tokens being consumed? This question may not be obvious at an early stage with limited usage. But once multiple teams and applications start sharing the same platform, it quickly becomes an operational pain point.&lt;/p&gt;

&lt;p&gt;GPUStack previously supported usage statistics by &lt;strong&gt;model&lt;/strong&gt; and by &lt;strong&gt;user&lt;/strong&gt;, helping teams understand overall consumption trends.&lt;/p&gt;

&lt;p&gt;However, these two dimensions were not sufficient for precise attribution.&lt;/p&gt;

&lt;p&gt;When different applications and business lines share multiple keys under the same user account, &lt;strong&gt;usage cannot be clearly separated&lt;/strong&gt;, making cost accounting difficult to perform.&lt;/p&gt;

&lt;p&gt;v2.2 introduces usage statistics at the &lt;strong&gt;API Key level&lt;/strong&gt;. Token consumption for each key is &lt;strong&gt;metered independently&lt;/strong&gt;, allowing administrators to clearly see which caller is consuming what, and how much. This provides a direct basis for cross-team &lt;strong&gt;cost attribution&lt;/strong&gt; and &lt;strong&gt;quota management&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fph95qhcffarm0igpxain.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fph95qhcffarm0igpxain.png" alt="image-20260617115813850" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwy5ixwnqg2y2lptxmob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwy5ixwnqg2y2lptxmob.png" alt="image-20260617115902612" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foktnc66pp64jdu7ac6ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foktnc66pp64jdu7ac6ec.png" alt="image-20260617122430446" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjr0pzufk0uvh48ejncx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjr0pzufk0uvh48ejncx.png" alt="image-20260617122452580" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another important change is giving visibility back to users. Previously, users who wanted to understand their own consumption had to ask administrators to pull the data for them.&lt;/p&gt;

&lt;p&gt;v2.2 introduces self-service personal usage queries on the user side. Consumption history by model and by time range can now be viewed directly in the UI, without going through a request process.&lt;/p&gt;

&lt;p&gt;Once metering capabilities are in place, token consumption is no longer a &lt;strong&gt;black box&lt;/strong&gt;. It becomes operational data that can support &lt;strong&gt;quota allocation&lt;/strong&gt;, &lt;strong&gt;internal chargeback&lt;/strong&gt;, and &lt;strong&gt;cost analysis&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhanced Production Deployment Capabilities
&lt;/h2&gt;

&lt;p&gt;Platform capabilities can only be fully realized when supported by a solid deployment experience. In v2.2, GPUStack addresses key gaps in enterprise production deployment across three areas.&lt;/p&gt;

&lt;p&gt;Kubernetes has become a mainstream choice for enterprise infrastructure. However, deploying GPUStack in K8s environments previously lacked a standardized cloud-native path.&lt;/p&gt;

&lt;p&gt;v2.2 provides an official &lt;strong&gt;Helm Chart&lt;/strong&gt;, enabling installation and configuration through Helm in a single streamlined process. This allows GPUStack to fit directly into existing &lt;strong&gt;GitOps workflows&lt;/strong&gt; and &lt;strong&gt;CI/CD&lt;/strong&gt; systems, significantly reducing the operational cost of deployment and upgrades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5ik101obp470lrunazf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5ik101obp470lrunazf.png" alt="image-20260617111056555" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;v2.2 also expands database compatibility with support for OceanBase and openGauss, giving teams more flexibility in enterprise deployment environments.&lt;/p&gt;

&lt;p&gt;On the network topology side, v2.2 supports a Worker-to-Server one-way access mode.&lt;/p&gt;

&lt;p&gt;In cross-region or cross-network-boundary deployment scenarios, many environments make it difficult to establish bidirectional connectivity between Server and Worker.&lt;/p&gt;

&lt;p&gt;With one-way networking, Worker nodes only need to access the Server, while the Server does not need to initiate reverse connections. This removes a key networking barrier for unified management of multi-region clusters.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Compute Pooling to GPU Services
&lt;/h2&gt;

&lt;p&gt;Unified scheduling of heterogeneous compute resources has always been one of GPUStack’s core capabilities — bringing GPUs from different vendors and with different specifications into a single compute pool for unified scheduling and monitoring. Previously, however, this compute pool primarily served one scenario: &lt;strong&gt;inference&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Data scientists often need an &lt;strong&gt;interactive development environment&lt;/strong&gt;, while algorithm engineers may need &lt;strong&gt;dedicated GPUs&lt;/strong&gt; for experimentation and debugging. In many teams, these needs were handled outside GPUStack through separate systems, resulting in fragmented &lt;strong&gt;resource allocation and metering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;v2.2 introduces the &lt;strong&gt;GPU Instance Service&lt;/strong&gt;, bringing the process of “allocating an isolated GPU environment” under unified platform management.&lt;/p&gt;

&lt;p&gt;Users can request isolated GPU instances on demand, specify the GPU vendor, model, and quantity, and select runtime templates that include storage mounts and port configurations. Once the instance is ready, they can access it through SSH or the web.&lt;/p&gt;

&lt;p&gt;Usage is metered centrally by the platform and shares the same scheduling and usage system as inference services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jmrc2xg81dzopvozkwv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jmrc2xg81dzopvozkwv.png" alt="image-20260617102206612" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxx2wlfhhg03i5zrjppei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxx2wlfhhg03i5zrjppei.png" alt="image-20260617110217961" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This marks an expansion of GPUStack’s compute service model: the same compute resource pool can serve as the foundation for inference services, while also being exposed as on-demand GPU instances.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;unified scheduling and unified metering&lt;/strong&gt;, management no longer becomes fragmented simply because resources are used in different scenarios. Future capabilities such as &lt;strong&gt;resource scheduling for training and fine-tuning&lt;/strong&gt; and more fine-grained &lt;strong&gt;virtualized compute partitioning&lt;/strong&gt; can naturally build on this foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Stage of AI Infrastructure Platforms
&lt;/h2&gt;

&lt;p&gt;The evolution of AI infrastructure follows a clear path: from &lt;strong&gt;being able to run models&lt;/strong&gt;, to &lt;strong&gt;operating model services reliably&lt;/strong&gt;, and then to &lt;strong&gt;unified management and allocation of the compute resources required by AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;v2.2 takes a step forward in both dimensions. On the model serving side, deeper inference scenario support, improved instance lifecycle management, a token usage governance system, and enhanced production deployment capabilities provide the foundation for scaled service delivery.&lt;/p&gt;

&lt;p&gt;On the compute side, the introduction of the GPU Instance Service expands resource allocation and metering beyond inference scenarios.&lt;/p&gt;

&lt;p&gt;Both directions point toward the same goal: making GPUStack an infrastructure foundation that enterprises can truly rely on for AI service delivery.&lt;/p&gt;

&lt;p&gt;Get started:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GitHub: &lt;a href="https://github.com/gpustack/gpustack" rel="noopener noreferrer"&gt;https://github.com/gpustack/gpustack&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation: &lt;a href="https://docs.gpustack.ai" rel="noopener noreferrer"&gt;https://docs.gpustack.ai&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  GPUStack v2.2 Enterprise Edition: Coming Soon
&lt;/h2&gt;

&lt;p&gt;The v2.2 open-source release lays the foundation for platform-level operational capabilities.&lt;/p&gt;

&lt;p&gt;In more complex enterprise environments, there is another layer of capabilities that the open-source edition is not designed to fully cover. When a platform needs to serve multiple isolated tenants, manage compute consumption down to each API Key and model route, ensure end-to-end high availability, and support Token/GPU billing management, these are the challenges that &lt;strong&gt;GPUStack Enterprise Edition&lt;/strong&gt; is built to address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPUStack v2.2 Enterprise Edition&lt;/strong&gt; is designed for enterprise scenarios that require organization-level governance and commercial operations. It will support &lt;strong&gt;multi-tenant isolation&lt;/strong&gt;, &lt;strong&gt;fine-grained quota, rate limiting, and access control&lt;/strong&gt;, &lt;strong&gt;production-grade high availability&lt;/strong&gt;, &lt;strong&gt;resource topology visualization&lt;/strong&gt;, and &lt;strong&gt;billing management&lt;/strong&gt;. Stay tuned.&lt;/p&gt;

&lt;p&gt;If you are interested in the Enterprise Edition, feel free to contact us to learn more and explore early access opportunities.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Contact us: &lt;a href="https://gpustack.ai/contact/" rel="noopener noreferrer"&gt;https://gpustack.ai/contact/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>GPUStack MaxKB: Build a Powerful and Easy-to-Use Open-Source Enterprise AI Agent Platform</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Tue, 10 Mar 2026 02:54:50 +0000</pubDate>
      <link>https://dev.to/gpustack/gpustack-x-maxkb-build-a-powerful-and-easy-to-use-open-source-enterprise-ai-agent-platform-1mb8</link>
      <guid>https://dev.to/gpustack/gpustack-x-maxkb-build-a-powerful-and-easy-to-use-open-source-enterprise-ai-agent-platform-1mb8</guid>
      <description>&lt;h1&gt;
  
  
  GPUStack × MaxKB: Build a Powerful and Easy-to-Use Open-Source Enterprise AI Agent Platform
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: By leveraging GPUStack for efficient model deployment and management, and connecting those models to MaxKB, you can easily build an AI assistant with &lt;strong&gt;knowledge base retrieval + intelligent Q&amp;amp;A&lt;/strong&gt; capabilities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As AI applications become increasingly common within organizations, more teams are beginning to focus on two core challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How to efficiently manage and deploy local large models&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How to quickly build enterprise knowledge bases and AI Agents&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are looking for solutions to both problems, the combination of &lt;strong&gt;GPUStack + MaxKB&lt;/strong&gt; is well worth exploring.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPUStack&lt;/strong&gt;: Focuses on GPU resource management and model deployment, supporting multi-node clusters and multi-model services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MaxKB&lt;/strong&gt;: An open-source enterprise knowledge base and AI application platform that enables rapid development of knowledge-based Q&amp;amp;A systems and AI Agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By connecting &lt;strong&gt;GPUStack-provided model services to MaxKB&lt;/strong&gt;, you can easily build a &lt;strong&gt;practical enterprise AI knowledge assistant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article will walk through the entire process from scratch.&lt;/p&gt;

&lt;h1&gt;
  
  
  📌 What You'll Learn
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Deploy the latest &lt;strong&gt;GPUStack v2.1.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Deploy required models in GPUStack&lt;/li&gt;
&lt;li&gt;Obtain GPUStack model connection information&lt;/li&gt;
&lt;li&gt;Deploy &lt;strong&gt;MaxKB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Connect GPUStack models in MaxKB&lt;/li&gt;
&lt;li&gt;Practical example: Build a &lt;strong&gt;GPUStack documentation knowledge base&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Install GPUStack v2.1.0
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Install GPUStack Server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; gpustack-server &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--restart&lt;/span&gt; unless-stopped &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 80:80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; gpustack-data:/var/lib/gpustack &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /data/gpustack_cache:/var/lib/gpustack/cache &lt;span class="se"&gt;\&lt;/span&gt;
  gpustack/gpustack:v2.1.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--bootstrap-password&lt;/span&gt; &lt;span class="s2"&gt;"123"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--debug&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9h0e1tc39w4ywj2lxpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9h0e1tc39w4ywj2lxpz.png" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After running the command above, open your browser and visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://your_host_ip
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will enter the &lt;strong&gt;GPUStack UI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Default login credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;admin / 123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkr2u7axddu3iztbcu9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkr2u7axddu3iztbcu9t.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Create a Cluster
&lt;/h2&gt;

&lt;p&gt;GPUStack manages worker nodes in units called &lt;strong&gt;Clusters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When deploying GPUStack Server for the first time, you will be prompted to create your first cluster. Click:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Your First Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow the UI instructions to complete the setup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can also go to the &lt;strong&gt;Clusters&lt;/strong&gt; page from the sidebar and click &lt;strong&gt;Add Cluster&lt;/strong&gt; to create one manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gtyibvn40543z3jxov3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gtyibvn40543z3jxov3.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vkvxvmorhy10g8asyoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vkvxvmorhy10g8asyoa.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3axbbhehoqre4jx66ob3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3axbbhehoqre4jx66ob3.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add a Worker
&lt;/h2&gt;

&lt;p&gt;After creating a cluster, the system will prompt you to &lt;strong&gt;Add Worker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Follow the instructions in the UI.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can also add one manually via the &lt;strong&gt;Workers&lt;/strong&gt; page in the sidebar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawy5nphxjgt67h3goj0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawy5nphxjgt67h3goj0a.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabpe92adno4a57t0ez0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabpe92adno4a57t0ez0z.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v8saioaklguhlaxwnxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v8saioaklguhlaxwnxp.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the diagnostic command provided in the guide interface.&lt;/p&gt;

&lt;p&gt;If the drivers and container runtime are correctly installed, you will see two &lt;strong&gt;OK&lt;/strong&gt; messages.&lt;/p&gt;

&lt;p&gt;If &lt;strong&gt;not configured&lt;/strong&gt; appears, follow the provided links to check dependency documentation and install the missing components according to your environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Filo1thxijfqzoolpx3ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Filo1thxijfqzoolpx3ai.png" width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6k60htirgwlwxb77cj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6k60htirgwlwxb77cj7.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Model Cache Volume Mount&lt;/strong&gt;: Mount this directory to the model cache directory &lt;code&gt;/var/lib/gpustack/cache&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPUStack Data Volume&lt;/strong&gt;: Mount this directory to the data directory &lt;code&gt;/var/lib/gpustack&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07bslxly0i1ap7s8byfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07bslxly0i1ap7s8byfc.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then run the Worker startup command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; gpustack-worker &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=gpustack-worker"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"GPUSTACK_TOKEN=gpustack_7b42996d3f5571d5_8181f986537c100369eaa2dfcf6d6359"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;unless-stopped &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--privileged&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--volume&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--volume&lt;/span&gt; gpustack-worker-data:/var/lib/gpustack &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--volume&lt;/span&gt; /data/gpustack_cache:/var/lib/gpustack/cache &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--runtime&lt;/span&gt; nvidia &lt;span class="se"&gt;\&lt;/span&gt;
   gpustack/gpustack:v2.1.0 &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--server-url&lt;/span&gt; http://192.168.50.14 &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--worker-ip&lt;/span&gt; 192.168.50.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Deploy Models in GPUStack
&lt;/h1&gt;

&lt;p&gt;Click &lt;strong&gt;Deployments&lt;/strong&gt; in the sidebar to open the model deployment page.&lt;/p&gt;

&lt;p&gt;If no models are currently deployed, you will see a &lt;strong&gt;Deploy Now&lt;/strong&gt; button in the center of the page.&lt;/p&gt;

&lt;p&gt;Click it to enter the &lt;strong&gt;Model Catalog&lt;/strong&gt;, select the desired model, and follow the prompts to deploy it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx10dblgvn4h3pij5z3ij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx10dblgvn4h3pij5z3ij.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Additional deployment methods are available under the &lt;strong&gt;Deploy Model&lt;/strong&gt; menu in the top-right corner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this tutorial, we deploy the following three models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qwen3-Reranker-4B&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen3-Embedding-4B&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen3.5-35B-A3B&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;GPU memory allocation can be adjusted according to your environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Deploy Qwen3-Reranker-4B
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjibvn5koxi1ct74qsd5z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjibvn5koxi1ct74qsd5z.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n12cp4z72r2cl1ov9p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n12cp4z72r2cl1ov9p2.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After deployment, you can test it in the &lt;strong&gt;Playground&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx51lidduddb6adlj1fin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx51lidduddb6adlj1fin.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy Qwen3-Embedding-4B
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k5av21dql29mtfcaemx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k5av21dql29mtfcaemx.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsau5d2d7fxy6ro5g97gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsau5d2d7fxy6ro5g97gt.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After deployment, test it in the Playground.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgac5xvjqrp9730t2q3sr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgac5xvjqrp9730t2q3sr.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy Qwen3.5-35B-A3B
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Here we additionally set the &lt;strong&gt;PYPI_PACKAGES_INSTALL&lt;/strong&gt; environment variable to upgrade the &lt;code&gt;transformers&lt;/code&gt; library.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyobzc1l0h70325hxz3ab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyobzc1l0h70325hxz3ab.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xaluy944pfnelo9ze5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xaluy944pfnelo9ze5e.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After deployment, test it in the &lt;strong&gt;Playground&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi55cpue7wxypd7qgctol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi55cpue7wxypd7qgctol.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Obtain GPUStack Model Access Information
&lt;/h1&gt;

&lt;p&gt;Open the &lt;strong&gt;Routes&lt;/strong&gt; page from the sidebar.&lt;/p&gt;

&lt;p&gt;Click the three-dot menu next to the &lt;strong&gt;Route&lt;/strong&gt;, then select:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Access Info&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgko0djpn61kr0az0w5cj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgko0djpn61kr0az0w5cj.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Record the following information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Base URL
Model Name
API Key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Base URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://192.168.50.14/v1&lt;/span&gt;

&lt;span class="na"&gt;Model Name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;qwen3.5-35b-a3b&lt;/span&gt;
&lt;span class="s"&gt;qwen3-reranker-4b&lt;/span&gt;
&lt;span class="s"&gt;qwen3-embedding-4b&lt;/span&gt;

&lt;span class="na"&gt;API Key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;gpustack_xxxxxxxxxxxxxxxxx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You can create an API Key following the instructions in the UI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Deploy MaxKB
&lt;/h1&gt;

&lt;p&gt;MaxKB supports one-command Docker deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;maxkb &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.maxkb:/opt/maxkb 1panel/maxkb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;admin / MaxKB@123..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa0b22cjnz5xnqbpwppz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa0b22cjnz5xnqbpwppz.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon first login, you will be prompted to change the password.&lt;/p&gt;

&lt;p&gt;Follow the instructions to update it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Connect GPUStack Models in MaxKB
&lt;/h1&gt;

&lt;p&gt;In the top navigation bar of MaxKB, select &lt;strong&gt;Model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw5legtdwqovc6ew4ot9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw5legtdwqovc6ew4ot9.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add Model&lt;/strong&gt; in the upper-right corner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf9gjxldkjccok6rrgnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf9gjxldkjccok6rrgnn.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qt03j6jobfzic92lrkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qt03j6jobfzic92lrkg.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza2zo78gz8nzhnmfjtya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza2zo78gz8nzhnmfjtya.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;API URL&lt;/code&gt; and &lt;code&gt;API Key&lt;/code&gt; will only appear &lt;strong&gt;after entering the Base Model and pressing Enter&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Add the following models in the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;qwen3-reranker-4b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qwen3-embedding-4b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For &lt;strong&gt;qwen3-reranker-4b&lt;/strong&gt;, you must enable &lt;strong&gt;Generic Proxy&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop06mr01gctdps0cn8c4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop06mr01gctdps0cn8c4.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is because MaxKB uses the endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/v2/rerank
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenpohberig3rmu39qpte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenpohberig3rmu39qpte.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77amye6pqwm8aynpeoz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77amye6pqwm8aynpeoz7.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After configuration, it should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn82lhbdr3397lmpboj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn82lhbdr3397lmpboj0.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Practical Example: Build a GPUStack Documentation Knowledge Base
&lt;/h1&gt;

&lt;p&gt;Open the &lt;strong&gt;Knowledge&lt;/strong&gt; page at the top and click &lt;strong&gt;Create&lt;/strong&gt; to create a knowledge base.&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Web Knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni7ihbj48zje2qipvzjm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni7ihbj48zje2qipvzjm.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the GPUStack documentation URL.&lt;/p&gt;

&lt;p&gt;MaxKB will automatically crawl and parse the page content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3xdydqa7skt7a2etz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3xdydqa7skt7a2etz2.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After crawling is complete:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr970a2psqyfex4cmyw2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr970a2psqyfex4cmyw2a.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create an AI Agent
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;Agent&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z9av15o7qwzinsrl17u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z9av15o7qwzinsrl17u.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt; to create a new Agent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs1echpbcfc4n3coi806.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs1echpbcfc4n3coi806.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After completing the configuration, click &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once published successfully, you can start chatting with the agent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxtxx29184mfdv3r0lar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxtxx29184mfdv3r0lar.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chat Demo
&lt;/h2&gt;

&lt;p&gt;Open the chat interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F333brb860bzvlckvkeaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F333brb860bzvlckvkeaj.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71gkas76tl05mx7m33q5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71gkas76tl05mx7m33q5.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🙌 Join the GPUStack Community
&lt;/h1&gt;

&lt;p&gt;If you have already started using GPUStack,&lt;br&gt;
or are exploring &lt;strong&gt;local large models / GPU resource management / AI infrastructure&lt;/strong&gt;,&lt;br&gt;
you are welcome to join our community group to exchange practical experience, pitfalls, and best practices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.gg/QAzGncGs" rel="noopener noreferrer"&gt;https://discord.gg/QAzGncGs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>No More Token Anxiety: Build an “Unlimited-Use” Local AI Assistant with GPUStack + OpenClaw</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Fri, 06 Mar 2026 02:32:29 +0000</pubDate>
      <link>https://dev.to/gpustack/no-more-token-anxiety-build-an-unlimited-use-local-ai-assistant-with-gpustack-openclaw-5de6</link>
      <guid>https://dev.to/gpustack/no-more-token-anxiety-build-an-unlimited-use-local-ai-assistant-with-gpustack-openclaw-5de6</guid>
      <description>&lt;p&gt;Over the past two years, more and more teams have integrated AI into their daily workflows.&lt;br&gt;
But soon, a practical issue emerged:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The more the model is used, the faster Tokens are consumed, and both costs and psychological pressure rise accordingly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many people rely on AI to improve efficiency, while at the same time having to “use it sparingly” and “let it think less.”&lt;br&gt;
In the end, AI instead becomes a carefully budgeted consumable.&lt;/p&gt;

&lt;p&gt;If AI can run on your own GPU,&lt;br&gt;
&lt;strong&gt;without being billed by Token, available for conversation at any time, and running long-term inside collaboration tools,&lt;/strong&gt;&lt;br&gt;
then it truly feels like a real “work assistant.”&lt;/p&gt;

&lt;p&gt;Based on the local model capabilities provided by GPUStack, combined with &lt;strong&gt;OpenClaw (supporting multiple collaboration platforms such as WhatsApp, Telegram, Discord, Slack, Lark, etc.)&lt;/strong&gt; and Telegram,&lt;br&gt;
this article will walk through step by step how to build a &lt;strong&gt;truly usable, sustainably running, and almost Token-worry-free&lt;/strong&gt; local AI assistant.&lt;/p&gt;
&lt;h2&gt;
  
  
  📌 What This Article Covers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Deploying a model with GPUStack&lt;/li&gt;
&lt;li&gt;Creating a Telegram bot application and configuring permissions&lt;/li&gt;
&lt;li&gt;Installing, configuring, and key considerations for OpenClaw&lt;/li&gt;
&lt;li&gt;First-time authorization and connectivity testing on the Telegram side&lt;/li&gt;
&lt;li&gt;Practical example: Let the assistant star the GPUStack project&lt;/li&gt;
&lt;li&gt;Built-in assistant commands&lt;/li&gt;
&lt;li&gt;Useful OpenClaw commands and resource links&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  I. Deploy a Model with GPUStack and Prepare Access Information
&lt;/h2&gt;

&lt;p&gt;Before connecting OpenClaw, we need to complete model deployment in &lt;strong&gt;GPUStack&lt;/strong&gt; and obtain the model service access information.&lt;/p&gt;

&lt;p&gt;This section will use &lt;strong&gt;Qwen3.5-35B-A3B&lt;/strong&gt; as an example to demonstrate the complete process from&lt;br&gt;
&lt;strong&gt;Custom inference backend → Deploy model → Obtain access information&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Environment Preparation and Version Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GPUStack version: &lt;strong&gt;v2.0.3&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Custom inference backend image:
&lt;code&gt;vllm/vllm-openai:qwen3_5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Model weights: &lt;strong&gt;Qwen/Qwen3.5-35B-A3B&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ OpenClaw has requirements for the model context window:&lt;br&gt;
&lt;strong&gt;Minimum 16K, recommended 128K or above&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  2. Configure Custom Inference Backend (vLLM)
&lt;/h3&gt;

&lt;p&gt;In the GPUStack console, go to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Inference Backends” → “Edit vLLM” → “Add Version”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n50a6nmswapd37g55ys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n50a6nmswapd37g55ys.png" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Deploy the Qwen3.5-35B-A3B Model
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ckvjnb5qu8z5ln5dc9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ckvjnb5qu8z5ln5dc9l.png" width="793" height="219"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F926wc9o61drenbfjx5hs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F926wc9o61drenbfjx5hs.png" width="770" height="1053"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--tensor-parallel-size=2
--mm-encoder-tp-mode data
--mm-processor-cache-type shm
--reasoning-parser qwen3
--enable-auto-tool-choice
--tool-call-parser qwen3_coder
--speculative-config '{"method": "mtp", "num_speculative_tokens": 1}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;If you encounter:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;text&lt;br&gt;
Error 803: system has unsupported display driver / cuda driver combination&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can try adding the environment variable:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/nvidia/lib:/usr/lib/x86_64-linux-gnu&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Obtain GPUStack Model Access Information
&lt;/h3&gt;

&lt;p&gt;Record the following three items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Base URL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model ID&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key&lt;/strong&gt; (create it in GPUStack)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9r1i3skvqvc9rlf983qz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9r1i3skvqvc9rlf983qz.png" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  II. Create a Telegram Bot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open Telegram and search for &lt;strong&gt;BotFather&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;strong&gt;BotFather&lt;/strong&gt; APP&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fausk5tydr18bj791dt5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fausk5tydr18bj791dt5y.png" width="584" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new Bot and fill in the basic information&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fzp5sjbum5wsfr569me.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fzp5sjbum5wsfr569me.png" width="602" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5arofy5sjknqcdbtbmhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5arofy5sjknqcdbtbmhe.png" width="602" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the &lt;strong&gt;Bot Token&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqz02jt86iacxqefqbmij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqz02jt86iacxqefqbmij.png" width="602" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For details, please refer to: &lt;a href="https://docs.openclaw.ai/channels/telegram" rel="noopener noreferrer"&gt;https://docs.openclaw.ai/channels/telegram&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  III. Install and Configure OpenClaw
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Demo environment: Ubuntu 24.04&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. One-Click Installation
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
curl -fsSL https://openclaw.ai/install.sh | bash&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The script will automatically install dependencies such as Node and Git.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rwhwbw5sb7lipqwfx2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rwhwbw5sb7lipqwfx2c.png" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Interactive Configuration Wizard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model/Auth Provider&lt;/strong&gt;
Select &lt;code&gt;Custom Provider (Any OpenAI or Anthropic compatible endpoint)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlvp9qjyo0us9mqdr4uv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlvp9qjyo0us9mqdr4uv.png" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter the GPUStack &lt;strong&gt;API Base URL / API Key&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mnlmvja8d5ymthuawt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mnlmvja8d5ymthuawt9.png" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;Telegram&lt;/code&gt; for &lt;strong&gt;Channel&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5q3ms06a38jcg00jhxfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5q3ms06a38jcg00jhxfu.png" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste the &lt;strong&gt;Bot Token&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawtd0sp933q1vb14zf0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawtd0sp933q1vb14zf0w.png" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  IV. First-Time Authorization and Testing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Send a message to the bot in Telegram&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On first use, it will prompt for &lt;strong&gt;Pairing authorization&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno3ttqkzm8zuauz1yckv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno3ttqkzm8zuauz1yckv.png" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the server, run:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
   openclaw pairing approve telegram &amp;lt;Pairing-Code&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka2vy065y262m9kdb82k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka2vy065y262m9kdb82k.png" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  V. Practical Example: Let the Bot Star the GPUStack Project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Prepare a GitHub PAT
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Tokens (classic)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Check the &lt;code&gt;repo&lt;/code&gt; permission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq51fy4dnqb4b2fb0bal5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq51fy4dnqb4b2fb0bal5.png" alt="GitHub PAT" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Write to Environment Variables
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
vim ~/.openclaw/.env&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwkl5b2char6p6t3xz6z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwkl5b2char6p6t3xz6z.png" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
openclaw gateway restart&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Send a Command to the Bot
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg9cysmqnb18lq44nklr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg9cysmqnb18lq44nklr.png" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiiy9x4dn3ino6r2xtlyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiiy9x4dn3ino6r2xtlyh.png" width="800" height="725"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VI. Common Commands
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/new&lt;/code&gt;: Start a new session&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/status&lt;/code&gt;: Check bot status&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/reset&lt;/code&gt;: Reset context&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/model&lt;/code&gt;: View / switch model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  VII. Useful OpenClaw Commands and Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common CLI Commands
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
openclaw logs --follow&lt;br&gt;
openclaw doctor&lt;br&gt;
openclaw gateway --help&lt;br&gt;
openclaw dashboard&lt;br&gt;
openclaw tui&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation and Ecosystem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://docs.openclaw.ai" rel="noopener noreferrer"&gt;https://docs.openclaw.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;a href="https://clawhub.ai" rel="noopener noreferrer"&gt;https://clawhub.ai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: When AI Becomes Infrastructure, Not a Consumable
&lt;/h2&gt;

&lt;p&gt;Looking back, &lt;strong&gt;the essence of Token anxiety is not that models are expensive, but that AI is treated as an “external consumable resource.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When models run in the cloud and capabilities are controlled by others,&lt;br&gt;
we become accustomed to careful budgeting, limiting usage, and controlling call frequency.&lt;/p&gt;

&lt;p&gt;But when the model truly runs on your own GPU,&lt;br&gt;
when inference capability, context, and tool calls all become part of your infrastructure,&lt;br&gt;
the role of AI changes accordingly—&lt;/p&gt;

&lt;p&gt;It is no longer a paid API call each time,&lt;br&gt;
but a &lt;strong&gt;readily available, long-term online, continuously evolving work assistant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is exactly the significance of combining GPUStack and OpenClaw:&lt;br&gt;
&lt;strong&gt;Let AI return from a “cost item” to “productivity.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already have GPU resources,&lt;br&gt;
you might as well try it yourself and truly integrate AI into your daily workflow.&lt;/p&gt;

&lt;p&gt;When you no longer worry about Tokens,&lt;br&gt;
you will truly begin to make good use of AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙌 Join the GPUStack Community
&lt;/h2&gt;

&lt;p&gt;If you have already started using GPUStack,&lt;br&gt;
or are exploring &lt;strong&gt;local large models / GPU resource management / AI Infra&lt;/strong&gt;,&lt;br&gt;
you are welcome to join our community group to exchange practical experience, pitfalls, and best practices together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.gg/QAzGncGs" rel="noopener noreferrer"&gt;https://discord.gg/QAzGncGs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gpustack</category>
      <category>openclaw</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Building Your Private ChatGPT and Knowledge Base with AnythingLLM and GPUStack</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Tue, 12 Nov 2024 05:00:48 +0000</pubDate>
      <link>https://dev.to/gpustack/building-your-private-chatgpt-and-knowledge-base-with-anythingllm-and-gpustack-dgi</link>
      <guid>https://dev.to/gpustack/building-your-private-chatgpt-and-knowledge-base-with-anythingllm-and-gpustack-dgi</guid>
      <description>&lt;p&gt;&lt;strong&gt;AnythingLLM&lt;/strong&gt; [&lt;a href="https://github.com/Mintplex-Labs/anything-llm" rel="noopener noreferrer"&gt;https://github.com/Mintplex-Labs/anything-llm&lt;/a&gt;] is an all-in-one AI application that runs on Mac, Windows, and Linux. Its goal is to enable the local creation of a &lt;strong&gt;personal ChatGPT&lt;/strong&gt; using either commercial or open-source LLMs along with vector database solutions. AnythingLLM goes beyond being a simple chatbot by including Retrieval-Augmented Generation (RAG) and Agent capabilities. These features allow it to perform a variety of tasks, such as fetching website information, generating charts, summarizing documents, and more.&lt;/p&gt;

&lt;p&gt;AnythingLLM can integrate various types of documents into different workspaces, enabling users to reference document content during chats. This provides a easy way to organize workspaces for different tasks and documents.&lt;/p&gt;

&lt;p&gt;In this article, we will introduce how to build a personal ChatGPT with knowledge base using &lt;strong&gt;AnythingLLM + GPUStack&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run models with GPUStack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPUStack is an open-source GPU cluster manager for running large language models (LLMs)&lt;/strong&gt;. It enables you to create a unified cluster from GPUs across various platforms, including Apple MacBooks, Windows PCs, and Linux servers. Administrators can deploy LLMs from popular repositories like Hugging Face, allowing developers to access these models as easily as they would access public LLM services from providers such as OpenAI or Microsoft Azure.&lt;/p&gt;

&lt;p&gt;Unlike Ollama, &lt;strong&gt;GPUStack&lt;/strong&gt; is a cluster solution designed to aggregate GPU resources from multiple devices to run models.&lt;/p&gt;

&lt;p&gt;To deploy the &lt;strong&gt;Chat Model&lt;/strong&gt; and &lt;strong&gt;Embedding Model&lt;/strong&gt; on &lt;strong&gt;GPUStack&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;​ • &lt;strong&gt;Chat Model&lt;/strong&gt;: &lt;strong&gt;llama3.1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;​ • &lt;strong&gt;Embedding Model&lt;/strong&gt;: &lt;strong&gt;bge-m3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ja76tpzv298cm4rbmbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ja76tpzv298cm4rbmbg.png" alt="image-20241105171908268" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you need to create an API key. This key will be used by &lt;strong&gt;AnythingLLM&lt;/strong&gt; to authenticate when accessing the models API deployed on &lt;strong&gt;GPUStack&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install and configure AnythingLLM
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AnythingLLM&lt;/strong&gt; offers packages for &lt;strong&gt;Mac, Windows, and Linux&lt;/strong&gt;, you can download from &lt;a href="https://anythingllm.com/download" rel="noopener noreferrer"&gt;https://anythingllm.com/download&lt;/a&gt;. After installation, open AnythingLLM to begin the setup process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure LLM Provider
&lt;/h3&gt;

&lt;p&gt;First, configure the chat model. Search for &lt;strong&gt;OpenAI&lt;/strong&gt;, select &lt;strong&gt;Generic OpenAI&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nwdo25q7yjkjt1cfgvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nwdo25q7yjkjt1cfgvf.png" alt="image-20241105163235972" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And fill in the details for the model deployed on &lt;strong&gt;GPUStack&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56l0jenlvsbsjcrt3f3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56l0jenlvsbsjcrt3f3j.png" alt="image-20241105163253668" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save and configure embedding model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure Embedding Provider
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AnythingLLM&lt;/strong&gt; includes a lightweight embedding model, &lt;strong&gt;all-MiniLM-L6-v2&lt;/strong&gt;, which offers limited performance and context length. For more powerful embedding capabilities, you can either opt for public embedding services or run open-source embedding models. Here, we’ll configure the embedding model &lt;strong&gt;bge-m3&lt;/strong&gt;, which is running on &lt;strong&gt;GPUStack&lt;/strong&gt;. Set the embedding provider to &lt;strong&gt;Generic OpenAI&lt;/strong&gt; and fill in the relevant configuration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk4o2vigwew0gx9j62m8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk4o2vigwew0gx9j62m8.png" alt="image-20241105162753929" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then create a workspace, and we can use AnythingLLM after it's completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use AnythingLLM
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Chat with LLM
&lt;/h3&gt;

&lt;p&gt;Select a workspace, create a new thread, and send your question to the LLM:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7elc5gv56ax1c58nu6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7elc5gv56ax1c58nu6c.png" alt="image-20241105163657917" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fetch website content
&lt;/h3&gt;

&lt;p&gt;Click the upload button next to the workspace, enter the website URL in the &lt;strong&gt;Fetch website&lt;/strong&gt; box, and fetch the website content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglm84zqsx96x94ismm4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglm84zqsx96x94ismm4d.png" alt="image-20241105164159767" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fetched website content will be sent to the embedding model for vectorization and then stored in the vector database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uhgfy1a5j2xtatyeo0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uhgfy1a5j2xtatyeo0q.png" alt="image-20241105164252415" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the content fetched from the website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4h5iuarbzfsvbv6powo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4h5iuarbzfsvbv6powo.png" alt="image-20241105164801193" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Documents embedding
&lt;/h3&gt;

&lt;p&gt;Click the upload button next to the workspace, then click the upload box and upload a document. The document will be sent to the embedding model for vectorization and then stored in the vector database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptocyq1wx46igsbpb621.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptocyq1wx46igsbpb621.png" alt="image-20241105164914343" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the content of embedded documents:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhx706cbhdrtmwdtde4sr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhx706cbhdrtmwdtde4sr.png" alt="image-20241105165047935" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more information, please read the &lt;code&gt;AnythingLLM&lt;/code&gt; documentation: &lt;a href="https://docs.anythingllm.com/" rel="noopener noreferrer"&gt;https://docs.anythingllm.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this tutorial, we have introduced how to use &lt;code&gt;AnythingLLM + GPUStack&lt;/code&gt; to aggregate GPUs across multiple devices and build an all-in-one AI application for RAG and AI Agents.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GPUStack&lt;/code&gt; provides a standard OpenAI-compatible API, which can be quickly and smoothly integrated with various LLM ecosystem components. Wanna give it a go? Try to integrate your tools/frameworks/software with &lt;code&gt;GPUStack&lt;/code&gt; now and share with us!&lt;/p&gt;

&lt;p&gt;If you encounter any issues while integrating GPUStack with third parties, feel free to join &lt;a href="https://discord.gg/VXYJzuaqwD" rel="noopener noreferrer"&gt;GPUStack Discord Community&lt;/a&gt; and get support from our engineers.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building Free GitHub Copilot Alternative with Continue + GPUStack</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Fri, 23 Aug 2024 17:00:00 +0000</pubDate>
      <link>https://dev.to/gpustack/building-free-github-copilot-alternative-with-continue-gpustack-2l37</link>
      <guid>https://dev.to/gpustack/building-free-github-copilot-alternative-with-continue-gpustack-2l37</guid>
      <description>&lt;p&gt;&lt;a href="https://seal.io/building-free-github-copilot-alternative-with-continue-and-gpustack/" rel="noopener noreferrer"&gt;Click here to read original post&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/continuedev/continue" rel="noopener noreferrer"&gt;&lt;code&gt;Continue&lt;/code&gt;&lt;/a&gt; is an open-source alternative to &lt;code&gt;GitHub Copilot&lt;/code&gt;, this is an open-source AI coding assistant that allows to connect various large language models(LLMs) within &lt;code&gt;VS Code&lt;/code&gt; and &lt;code&gt;JetBrains&lt;/code&gt; to build custom code autocompletion and chat capabilities. It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code parsing
&lt;/li&gt;
&lt;li&gt;Code autocompletion&lt;/li&gt;
&lt;li&gt;Code optimization suggestions
&lt;/li&gt;
&lt;li&gt;Code refactoring &lt;/li&gt;
&lt;li&gt;Code implementations Inquiring
&lt;/li&gt;
&lt;li&gt;Documentation online searching&lt;/li&gt;
&lt;li&gt;Terminal errors parsing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and more. It assists developers in coding and enhancing their development efficiency.&lt;/p&gt;

&lt;p&gt;In this tutorial, we are going to use &lt;strong&gt;&lt;code&gt;Continue + GPUStack&lt;/code&gt;&lt;/strong&gt; to build a free GitHub Copilot locally, providing developers with an AI-paired programming experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Models with GPUStack
&lt;/h2&gt;

&lt;p&gt;First, we will deploy the models on &lt;code&gt;GPUStack&lt;/code&gt;. There are three model types recommended by &lt;code&gt;Continue&lt;/code&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat model&lt;/strong&gt;: select &lt;code&gt;llama3.1&lt;/code&gt;, this is the latest open-source model trained by Meta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autocompletion model&lt;/strong&gt;: select &lt;code&gt;starcoder2:3b&lt;/code&gt;, a highly advanced autocompletion model trained by Hugging Face.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedding model&lt;/strong&gt;: select &lt;code&gt;nomic-embed-text&lt;/code&gt;, which supports a context length of 8192 tokens, it outperforms OpenAI ada-002 and text-embedding-3-small models for both short and long context tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lJmdCjxo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822143650047.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lJmdCjxo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822143650047.png" alt="image 1" width="800" height="353"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;After deploying the models, you are also required to create an &lt;code&gt;API key&lt;/code&gt; in the API Keys section for authentication when &lt;code&gt;Continue&lt;/code&gt; accesses the models deployed on &lt;code&gt;GPUStack&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing and Configuring Continue
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Continue&lt;/code&gt; provides extensions for both &lt;code&gt;VS Code&lt;/code&gt; and &lt;code&gt;JetBrains&lt;/code&gt;. In this article, we will use &lt;code&gt;VS Code&lt;/code&gt; as an example. Install &lt;code&gt;Continue&lt;/code&gt; from the &lt;code&gt;VS Code&lt;/code&gt; extension store:&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7YAwG3bw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144006940.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7YAwG3bw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144006940.png" alt="image 2" width="800" height="393"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Once installed, drag the &lt;code&gt;Continue&lt;/code&gt; extension to the right panel to avoid conflict with the file explorer:&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V5RTjRFc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822143946949.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V5RTjRFc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822143946949.png" alt="image 3" width="800" height="423"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Then, select the settings button in the bottom-right corner to edit &lt;code&gt;Continue&lt;/code&gt;'s configuration and connect to the models deployed on &lt;code&gt;GPUStack&lt;/code&gt;. Replace the sections for &lt;code&gt;"models"&lt;/code&gt;, &lt;code&gt;"tabAutocompleteModel"&lt;/code&gt;, and &lt;code&gt;"embeddingsProvider"&lt;/code&gt; with your own GPUStack-generated API Key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Llama 3.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"llama3.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiBase"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://192.168.50.4/v1-openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpustack_f58451c1c04d8f14_c7e8fb2213af93062b4e87fa3c319005"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabAutocompleteModel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Starcoder 2 3b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"starcoder2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiBase"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://192.168.50.4/v1-openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpustack_f58451c1c04d8f14_c7e8fb2213af93062b4e87fa3c319005"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"embeddingsProvider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nomic-embed-text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiBase"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://192.168.50.4/v1-openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpustack_f58451c1c04d8f14_c7e8fb2213af93062b4e87fa3c319005"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PaSNQp7S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144033667.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PaSNQp7S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144033667.png" alt="image 4" width="800" height="440"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4fWKwaFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144055057.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4fWKwaFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144055057.png" alt="image 5" width="800" height="439"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Get to Use Continue
&lt;/h2&gt;

&lt;p&gt;After configuring &lt;code&gt;Continue&lt;/code&gt; to connect to the GPUStack-deployed models, go to the top-right corner of the &lt;code&gt;Continue&lt;/code&gt; plugin interface and select &lt;code&gt;Llama 3.1&lt;/code&gt; model. Now you are able to use the features we mentioned at the beginning of this tutorial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Parsing&lt;/strong&gt;: Select the code, press &lt;code&gt;Cmd/Ctrl + L&lt;/code&gt;, and enter a prompt to let the local LLM parse the code:  &lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JFkUTpoF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822145951464.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JFkUTpoF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822145951464.png" alt="image 6" width="800" height="430"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Autocompletion&lt;/strong&gt;: While coding, press &lt;code&gt;Tab&lt;/code&gt; to let the local LLM attempt to autocomplete the code:  &lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uxNMqP1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144132354.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uxNMqP1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144132354.png" alt="image 7" width="800" height="500"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Refactoring&lt;/strong&gt;: Select the code, press &lt;code&gt;Cmd/Ctrl + I&lt;/code&gt;, and enter a prompt to let the local LLM attempt to optimize the code:  &lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_5V-xQ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822145544825.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_5V-xQ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822145544825.png" alt="image 8" width="800" height="429"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The LLM will provide suggestions, and you can decide whether to accept or reject them:  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tcmwjwj2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144207805.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tcmwjwj2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144207805.png" alt="image 9" width="800" height="549"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inquire About Code Implementation&lt;/strong&gt;: You can try &lt;code&gt;@Codebase&lt;/code&gt; to ask questions about the codebase, such as how a certain feature is implemented:  &lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Jxf_qzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822151421841.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Jxf_qzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822151421841.png" alt="image 10" width="800" height="429"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Documentation Search&lt;/strong&gt;: Use &lt;code&gt;@Docs&lt;/code&gt; and select the document site you wish to search for and ask your questions, enabling you to find the results you need:&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jJADXV4A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144718627.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jJADXV4A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gpustack-blogs.oss-cn-hongkong.aliyuncs.com/undefinedimage-20240822144718627.png" alt="image 11" width="800" height="428"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, please read the official &lt;code&gt;Continue&lt;/code&gt; documentation: &lt;a href="https://docs.continue.dev/how-to-use-continue" rel="noopener noreferrer"&gt;https://docs.continue.dev/how-to-use-continue&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this tutorial, we have introduced how to use &lt;code&gt;Continue + GPUStack&lt;/code&gt; to build a free local GitHub Copilot, offering AI-paired programming capabilities at no cost to developers.  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;GPUStack&lt;/code&gt; provides a standard OpenAI-compatible API, which can be quickly and smoothly integrated with various LLM ecosystem components. Wanna give it a go? Try to integrate your tools/frameworks/software with &lt;code&gt;GPUStack&lt;/code&gt; now and share with us!&lt;/p&gt;

&lt;p&gt;If you encounter any issues while integrating GPUStack with third parties, feel free to join &lt;a href="https://discord.gg/VXYJzuaqwD" rel="noopener noreferrer"&gt;GPUStack Discord Community&lt;/a&gt; and get support from our engineers.&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>gpustack</category>
      <category>ai</category>
    </item>
    <item>
      <title>Introducing GPUStack: An open-source GPU cluster manager for running LLMs</title>
      <dc:creator>GPUStack</dc:creator>
      <pubDate>Thu, 25 Jul 2024 17:00:54 +0000</pubDate>
      <link>https://dev.to/gpustack/introducing-gpustack-an-open-source-gpu-cluster-manager-for-running-llms-5dmj</link>
      <guid>https://dev.to/gpustack/introducing-gpustack-an-open-source-gpu-cluster-manager-for-running-llms-5dmj</guid>
      <description>&lt;h2&gt;
  
  
  What is GPUStack?
&lt;/h2&gt;

&lt;p&gt;We are thrilled to launch GPUStack, an open-source GPU cluster manager for running Large Language Models (LLMs). Even though LLMs are widely available as public cloud services, organizations cannot easily host their own LLM deployments for private use. They need to install and manage complex clustering software such as Kubernetes and then figure out how to install and manage the AI tool stack on top. Popular ways to run LLMs locally, such as LMStudio and LocalAI, works on a single machine.&lt;/p&gt;

&lt;p&gt;GPUStack allows you to create a unified cluster from any brand of GPUs in Apple MacBooks, Windows PCs, and Linux servers. Administrators can deploy LLMs from popular repositories such as Hugging Face. Developers can then access LLMs just as easily as accessing public LLM services from vendors like OpenAI or Microsoft Azure.&lt;/p&gt;

&lt;p&gt;For more details about GPUStack, visit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub repo: &lt;a href="https://github.com/gpustack/gpustack" rel="noopener noreferrer"&gt;https://github.com/gpustack/gpustack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User guide: &lt;a href="https://docs.gpustack.ai" rel="noopener noreferrer"&gt;https://docs.gpustack.ai&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why GPUStack?
&lt;/h2&gt;

&lt;p&gt;Today, organizations who want to host LLMs on a cluster of GPU servers have to do a lot of work to integrate a complex software stack. By using GPUStack, organizations no longer need to worry about cluster management, GPU optimization, LLM interference engines, usage and metering, user management, API access, and dashboard UI. GPUStack is a complete software platform for building your own LLM-as-a-Service (LLMaaS).&lt;/p&gt;

&lt;p&gt;As the following figure illustrates, the admin deploys models into GPUStack from a repository like HuggingFace, and then developers can connect to GPUStack to use these models in their applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fllmaas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fllmaas.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features of GPUStack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPU cluster setup and resource aggregation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack aggregates all GPU resources within a cluster. It is designed to support all GPU vendors, including Nvidia, Apple, AMD, Intel, Qualcomm, and others. GPUStack is compatible with a laptops, desktops, workstations, and servers running MacOS, Windows, and Linux.&lt;/p&gt;

&lt;p&gt;The initial release of GPUStack supports Windows PCs and Linux servers with Nvidia graphics cards, and Apple Macs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment and Inference for Models&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack supports distributed deployment and inference of LLMs across a cluster of GPU machines.&lt;/p&gt;

&lt;p&gt;GPUStack selects the best inference engine for running the given LLM on the given GPU. The first LLM inference engine supported by GPUStack is LLaMA.cpp, which allows GPUStack to support GGUF models from Hugging Face and all models listed in the ollama library (&lt;a href="https://ollama.com/library" rel="noopener noreferrer"&gt;ollama.com/library&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;You can run any model on GPUStack by first converting it to GGUF format and uploading it to Hugging Face or Ollama library.&lt;/p&gt;

&lt;p&gt;Support of other inference engines, such as vLLM, is on our roadmap and will be provided in the future.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; GPUStack will automatically schedule the model you select to run on machines with appropriate resources, relieving you of manual intervention. If you want to assess the resource consumption of your chosen model, you can use our GGUF Parser project: &lt;a href="https://github.com/gpustack/gguf-parser-go" rel="noopener noreferrer"&gt;https://github.com/gpustack/gguf-parser-go&lt;/a&gt;. We intend to provide more detailed tutorials in the future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Although GPU acceleration is recommended for inference, we also support CPU inference, though the performance isn't as good as GPU. Alternatively, using a mix of GPU and CPU for inference can maximize resource utilization, which is particularly useful in edge or resource-constrained environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy integration with your applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack offers OpenAI-compatible APIs and provides an LLM playground along with API keys. The playground enables AI developers to experiment with and customize your LLMs, and seamlessly integrate them into AI-enabled applications.&lt;/p&gt;

&lt;p&gt;Additionally, you can use the metrics GPUStack provides to understand how your AI applications utilize various LLMs. This helps administrators manage GPU resource consumption effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability metrics for GPUs and LLMs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack provides comprehensive metrics performance, utilization, and status monitoring.&lt;/p&gt;

&lt;p&gt;For GPUs, administrators can use GPUStack to monitor real-time resource utilization and system status. Based on these metrics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Administrators perform scaling, optimization, and other maintenance operations.&lt;/li&gt;
&lt;li&gt;GPUStack adjusts its model scheduling algorithm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For LLMs, developers can use GPUStack to access metrics like token throughput, token usage, and API request throughput. These metrics help developers evaluate model performance and optimize their applications. GPUStack plans to support auto-scaling based on these inference performance metrics in future releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication and access control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack also provides authentication and role-based access control (RBAC) for enterprises. Users on the platform can have either admin or regular user roles. This guarantees that only authorized administrators can deploy and manage LLMs and that only authorized developers can utilize them.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPUStack Use Cases
&lt;/h2&gt;

&lt;p&gt;GPUStack unlocks a world of possibilities for running LLMs on any GPU vendors. Here are just a few examples of what you can achieve with GPUStack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggregate existing MacBooks, Windows PCs, and other GPU resources to offer a low-cost LLMaaS for a development team.&lt;/li&gt;
&lt;li&gt;In limited resource environments, aggregate multiple edge nodes to provide LLMaaS on CPU resources.&lt;/li&gt;
&lt;li&gt;Create your own enterprise-wide LLMaaS in your own data center for highly sensitive workloads that cannot be hosted in a cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with GPUStack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Linux or MacOS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GPUStack provides a script to install it as a service on systemd or launchd based systems. To install GPUStack using this method, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sfL&lt;/span&gt; https://get.gpustack.ai | sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have deployed and started the GPUStack server, which serves as the first worker node. You can access the GPUStack page via &lt;a href="http://myserver" rel="noopener noreferrer"&gt;http://myserver&lt;/a&gt; (Replace with the IP address or domain of the host you installed)&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Log in to GPUStack with username &lt;code&gt;admin&lt;/code&gt; and the default password. You can run the following command to get the password for the default setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /var/lib/gpustack/initial_admin_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To add additional worker nodes and form a GPUStack cluster, please run the following command on each worker node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sfL&lt;/span&gt; https://get.gpustack.ai | sh - &lt;span class="nt"&gt;--server-url&lt;/span&gt; http://myserver &lt;span class="nt"&gt;--token&lt;/span&gt; mytoken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;strong&gt;&lt;code&gt;http://myserver&lt;/code&gt;&lt;/strong&gt; with your GPUStack server URL and &lt;strong&gt;&lt;code&gt;mytoken&lt;/code&gt;&lt;/strong&gt; with your secret token for adding workers. To retrieve the token in the default setup from the GPUStack server, use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /var/lib/gpustack/token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or follow the instructions on GPUStack to add workers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fadd-worker.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fadd-worker.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run PowerShell as administrator, then run the following command to install GPUStack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoke-Expression&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://get.gpustack.ai"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-UseBasicParsing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Content&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can access the GPUStack page via &lt;a href="http://myserver" rel="noopener noreferrer"&gt;http://myserver&lt;/a&gt; (Replace with the IP address or domain of the host you installed)&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Log in to GPUStack with username &lt;code&gt;admin&lt;/code&gt; and the default password. You can run the following command to get the password for the default setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Join-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;APPDATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ChildPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpustack\initial_admin_password"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Raw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optionally, you can add extra workers to form a GPUStack cluster by running the following command on other nodes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoke-Expression&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;amp; { &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://get.gpustack.ai"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-UseBasicParsing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.Content) } -ServerURL http://myserver -Token mytoken"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the default setup, you can run the following to get the token used for adding workers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Join-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;APPDATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ChildPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpustack\token"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Raw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For other installation scenarios, please refer to our installation documentation at: &lt;a href="https://gpustack.github.io/docs/quickstart" rel="noopener noreferrer"&gt;https://docs.gpustack.ai/docs/quickstart&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Serving LLMs
&lt;/h3&gt;

&lt;p&gt;As an LLM administrator, you can log in to GPUStack as the default system admin, navigate to &lt;strong&gt;&lt;code&gt;Resources&lt;/code&gt;&lt;/strong&gt; to monitor your GPU status and capacities, and then go to &lt;strong&gt;&lt;code&gt;Models&lt;/code&gt;&lt;/strong&gt;  to deploy any open-source LLM into the GPUStack cluster. This enables you to provide these LLMs to regular users for integration into their applications. This approach helps you to efficiently utilize your existing resources and deliver stable LLM services for various needs and scenarios.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access GPUStack to deploy the LLMs you need. Choose models from Hugging Face (only GGUF format is currently supported) or Ollama Library, download them to your local environment, and run the LLMs:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fdeploy-model.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fdeploy-model.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPUStack will automatically schedule the model to run on the appropriate Worker:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fmodel-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fmodel-list.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can manage and maintain LLMs by checking API requests, token consumption, token throughput, resource utilization status, and more. This helps you decide whether to scale up or upgrade LLMs to ensure service stability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fdashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fdashboard.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating with your applications
&lt;/h3&gt;

&lt;p&gt;As an AI application developer, you can log in to GPUStack as a regular user and navigate to &lt;strong&gt;&lt;code&gt;Playground&lt;/code&gt;&lt;/strong&gt; from the menu. Here, you can interact with the LLM using the UI playground.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fplayground.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgpustack.ai%2Fwp-content%2Fuploads%2F2024%2F07%2Fplayground.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, visit &lt;strong&gt;&lt;code&gt;API Keys&lt;/code&gt;&lt;/strong&gt; to generate and save your API key. Return to &lt;strong&gt;&lt;code&gt;Playground&lt;/code&gt;&lt;/strong&gt; to customize your LLM by adjusting the system prompt, adding few-shot learning examples, or resizing prompt parameters. When you're done, click &lt;strong&gt;&lt;code&gt;View Code&lt;/code&gt;&lt;/strong&gt; and select your preferred code format (curl, Python, Node.js) along with the API key. Use this code in your applications to enable communication with your private LLMs.&lt;/p&gt;

&lt;p&gt;you can access the OpenAI-compatible API now, for example, use curl as the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GPUSTACK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapikey
curl http://myserver/v1-openai/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$GPUSTACK_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "llama3",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "Hello!"
      }
    ],
    "stream": true
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Join Our Community
&lt;/h2&gt;

&lt;p&gt;Please find more information about GPUStack at: &lt;a href="https://gpustack.ai" rel="noopener noreferrer"&gt;https://gpustack.ai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you encounter any issues or have suggestions for GPUStack, feel free to join our &lt;a href="https://discord.gg/VXYJzuaqwD" rel="noopener noreferrer"&gt;Community&lt;/a&gt; for support from the GPUStack team and to connect with fellow users globally.&lt;/p&gt;

&lt;p&gt;We are actively enhancing the GPUStack project and plan to introduce new features in the near future, including support for multimodal models, additional accelerators like AMD ROCm or Intel oneAPI, and more inference engines. Before getting started, we encourage you to follow and star our project on GitHub at &lt;a href="https://github.com/gpustack/gpustack" rel="noopener noreferrer"&gt;gpustack/gpustack&lt;/a&gt; to receive instant notifications about all future releases. We welcome your contributions to the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Us
&lt;/h2&gt;

&lt;p&gt;GPUStack is brought to you by Seal, Inc., a team dedicated to enabling AI access for all. Our mission is to enable enterprises to use AI to conduct their business, and GPUStack is a significant step towards achieving that goal.&lt;/p&gt;

&lt;p&gt;Quickly build your own LLMaaS platform with GPUStack! Start experiencing the ease of creating GPU clusters locally, running and using LLMs, and integrating them into your applications.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>opensource</category>
      <category>news</category>
    </item>
  </channel>
</rss>
