{"id":1885,"date":"2026-08-20T08:05:32","date_gmt":"2026-08-20T08:05:32","guid":{"rendered":"https:\/\/blog.openzeka.com\/en\/?p=1885"},"modified":"2026-08-20T11:36:39","modified_gmt":"2026-08-20T11:36:39","slug":"serving-local-llm-on-dgx-spark","status":"publish","type":"post","link":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/","title":{"rendered":"Serving a Local LLM with vLLM on DGX Spark"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1331.2px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>In this tutorial, you will run a large language model locally on a DGX Spark and chat with it from another computer&#8217;s browser.<\/p>\n<p>The Spark can be used as a standalone computer by connecting a monitor and keyboard, or as a remote server accessed from another computer. In this tutorial, we will connect to the Spark remotely and install the necessary software to run the model.<\/p>\n<p>We will use Qwen3.6-35B-A3B-FP8 (a 35-billion parameter Mixture-of-Experts model, 3 billion parameters active, FP8 quantization) as the language model, vLLM as the inference engine, and Open WebUI as the web interface. vLLM will load the model&#8217;s trained weights into GPU memory and expose an API that accepts external requests. Open WebUI will connect to this API and display a chat interface in the browser. Both will run on the Spark, inside Docker containers.<\/p>\n<hr \/>\n<h2>Prerequisites: Finding the Spark&#8217;s IP Address<\/h2>\n<p>If you are connecting to the Spark remotely for the first time, you need to find its IP address. Connect a monitor and keyboard to the Spark, log in, and run the following command in the terminal:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_1\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_1\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_1\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">ip route get 1.1.1.1 | grep -oP &#8216;src \\K\\S+&#8217;<\/textarea><\/div><div class=\"fusion-text fusion-text-2\"><p>The command outputs the IP address of the Spark&#8217;s default network interface:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_2\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_2\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_2\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">192.168.1.148<\/textarea><\/div><div class=\"fusion-text fusion-text-3\"><p>Note this address; you will use it in place of <code><\/code> throughout this tutorial. Alternatively, you can find the IP address by checking the NVIDIA Sync application.<\/p>\n<hr \/>\n<h2>1. Connecting to the Spark<\/h2>\n<p>Make sure your computer is connected to the same network as the Spark. Then, open a terminal on your computer and connect to the Spark via SSH:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_3\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_3\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_3\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">ssh nvidia@<\/textarea><\/div><div class=\"fusion-text fusion-text-4\"><p>On the first connection, you will see a fingerprint warning. Type <code>yes<\/code> and press Enter. Then, when prompted for a password, enter the Spark&#8217;s password:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_4\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_4\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_4\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">The authenticity of host &#8216;192.168.1.148 (192.168.1.148)&#8217; can&#8217;t be established.\nED25519 key fingerprint is SHA256:S6EECYc6Pw2aLoLmhblFZ0QEoeVtJP41jJ5IYsdOmMM.\nThis key is not known by any other names\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])? yes\nWarning: Permanently added &#8216;192.168.1.148&#8217; (ED25519) to the list of known hosts.\nnvidia@192.168.1.148&#8217;s password:\nWelcome to NVIDIA DGX Spark Version 7.5.0 (GNU\/Linux 6.17.0-1026-nvidia aarch64)<\/p>\n<p>System information as of Tue Jul 14 12:46:44 PM UTC 2026<\/p>\n<p>System load: 1.54 Temperature: 80.2 C\nUsage of \/: 59.3% of 3.67TB Processes: 501\nMemory usage: 62% Users logged in: 0\nSwap usage: 0% IPv4 address for enP7s7: 192.168.1.148<\/p>\n<p>2 devices have a firmware upgrade available.\nRun `fwupdmgr get-upgrades` for more information.<\/p>\n<p>Last login: Tue Jul 14 12:47:08 2026 from 192.168.1.77<\/textarea><\/div><div class=\"fusion-text fusion-text-5\"><p>Once connected, the Spark will start accepting commands sent from this terminal.<\/p>\n<hr \/>\n<h2>2. Clearing the Cache<\/h2>\n<p>Before starting vLLM, flush the filesystem cache:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-5 > .CodeMirror, .fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-5 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_5\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_5\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_5\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">sudo sh -c &#8216;sync; echo 3 &gt; \/proc\/sys\/vm\/drop_caches&#8217;<\/textarea><\/div><div class=\"fusion-text fusion-text-6\"><p>The main reason for doing this is the DGX Spark&#8217;s unified memory architecture: the operating system caches model files read from disk in RAM. vLLM loads the model weights from here into GPU memory. After loading is complete, the cached data remains in RAM even though it will not be used again. On systems with separate memory, this is not significant \u2014 since inference runs in GPU memory, RAM utilization does not affect performance. On the Spark, however, the CPU and GPU share the same RAM, so the cache reduces the memory available to the GPU. This command frees the cache, providing maximum memory for vLLM.<\/p>\n<p>When prompted for a password, enter the Spark&#8217;s password. The command produces no output and completes silently:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-6 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_6\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_6\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_6\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[sudo] password for nvidia:<\/textarea><\/div><div class=\"fusion-text fusion-text-7\"><hr \/>\n<h2>3. Setting Up the vLLM Server<\/h2>\n<p>Pull the vLLM Docker image:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-7 > .CodeMirror, .fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-7 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_7\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_7\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_7\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker pull vllm\/vllm-openai:v0.22.1-ubuntu2404<\/textarea><\/div><div class=\"fusion-text fusion-text-8\"><p>During the download, layers will be pulled sequentially and you will see progress percentages on the screen. If the image is already on disk, Docker skips the download. Once the download is complete, you will see the following output:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-8 > .CodeMirror, .fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-8 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_8\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_8\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_8\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">v0.22.1-ubuntu2404: Pulling from vllm\/vllm-openai\nDigest: sha256:525c7fb8b20102c501bf9d066a4671c94468e58db9b072972d743a327e8ab909\nStatus: Image is up to date for vllm\/vllm-openai:v0.22.1-ubuntu2404\ndocker.io\/vllm\/vllm-openai:v0.22.1-ubuntu2404<\/textarea><\/div><div class=\"fusion-text fusion-text-9\"><p>This image contains everything needed to run vLLM \u2014 PyTorch, CUDA kernels, Python libraries&#8230;<\/p>\n<p>Now, let&#8217;s start the vLLM server:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-9 > .CodeMirror, .fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-9 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_9\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_9\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_9\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker run -d &#8211;gpus all -p 8000:8000 &#8211;name vllm-qwen36-35b-fp8 \\\n-v \/home\/nvidia\/.cache\/huggingface:\/root\/.cache\/huggingface \\\nvllm\/vllm-openai:v0.22.1-ubuntu2404 \\\nQwen\/Qwen3.6-35B-A3B-FP8 \\\n&#8211;host 0.0.0.0 &#8211;port 8000 \\\n&#8211;tensor-parallel-size 1 \\\n&#8211;trust-remote-code \\\n&#8211;gpu-memory-utilization 0.55 \\\n&#8211;max-model-len 131072 \\\n&#8211;max-num-seqs 4 \\\n&#8211;max-num-batched-tokens 8192 \\\n&#8211;kv-cache-dtype fp8 \\\n&#8211;enable-chunked-prefill \\\n&#8211;async-scheduling \\\n&#8211;enable-prefix-caching \\\n&#8211;load-format fastsafetensors \\\n&#8211;reasoning-parser qwen3 \\\n&#8211;tool-call-parser qwen3_xml \\\n&#8211;enable-auto-tool-choice<\/textarea><\/div><div class=\"fusion-text fusion-text-10\"><p>This command starts the downloaded image as a container. If the model is not already installed on the Spark, it will be automatically downloaded from Hugging Face. As the download progresses, you will see progress bars, and once complete, the files will be placed in the <code>~\/.cache\/huggingface\/hub\/<\/code> directory. If the model has been previously downloaded on the Spark (if you have followed this tutorial before), vLLM skips the download step and loads the downloaded weights directly into GPU memory.<\/p>\n<p>When the command finishes, you will see a container ID; this indicates that the server has started in the background and the model is now being served on port 8000:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-10 > .CodeMirror, .fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-10 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_10\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_10\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_10\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">image_id => a76498707041a0aa72759f694d3deb9150b5fb6da34510be7ed19e52f9ba104a<\/textarea><\/div><div class=\"fusion-text fusion-text-11\"><p>If a container with the same name (from your previous attempts) already exists, the command will return the following error:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-11 > .CodeMirror, .fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-11 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_11\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_11\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_11\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">docker: Error response from daemon: Conflict. The container name &#8220;\/vllm-qwen36-35b-fp8&#8221; is already in use by container &#8230;<\/textarea><\/div><div class=\"fusion-text fusion-text-12\"><p>In this case, check the container list \u2014 vllm-qwen36-35b-fp8 should be listed:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-12 > .CodeMirror, .fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-12 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_12\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_12\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_12\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker ps -a &#8211;filter name=vllm-qwen36-35b-fp8<\/textarea><\/div><div class=\"fusion-text fusion-text-13\"><p>If the status column shows &#8220;Up&#8221;, the container is already running and ready to use \u2014 you can proceed to the next step:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-13 > .CodeMirror, .fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-13 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_13\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_13\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_13\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">CONTAINER ID IMAGE STATUS PORTS NAMES\na76498707041 vllm\/vllm-openai:v0.22.1-ubuntu2404 Up 5 minutes 0.0.0.0:8000-&gt;8000\/tcp, [::]:8000-&gt;8000\/tcp vllm-qwen36-35b-fp8<\/textarea><\/div><div class=\"fusion-text fusion-text-14\"><p>If the status column shows &#8220;Exited&#8221;, the container has stopped:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-14 > .CodeMirror, .fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-14 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_14\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_14\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_14\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">CONTAINER ID IMAGE STATUS PORTS NAMES\na76498707041 vllm\/vllm-openai:v0.22.1-ubuntu2404 Exited (0) 2 minutes ago vllm-qwen36-35b-fp8<\/textarea><\/div><div class=\"fusion-text fusion-text-15\"><p>You can restart the stopped container and proceed to the next step:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-15 > .CodeMirror, .fusion-syntax-highlighter-15 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-15 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_15\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_15\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_15\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker start vllm-qwen36-35b-fp8<\/textarea><\/div><div class=\"fusion-text fusion-text-16\"><hr \/>\n<h2>4. Monitoring the vLLM Startup Process<\/h2>\n<p>After the model download is complete, it may take a few minutes for vLLM to become ready for serving. During this process, vLLM loads the model weights into GPU memory, compiles GPU kernels, and allocates memory for inference. To monitor this process:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-16 > .CodeMirror, .fusion-syntax-highlighter-16 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-16 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_16\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_16\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_16\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker logs -f vllm-qwen36-35b-fp8<\/textarea><\/div><div class=\"fusion-text fusion-text-17\"><p>You will see the following in the logs:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-17 > .CodeMirror, .fusion-syntax-highlighter-17 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-17 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_17\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_17\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_17\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">(APIServer pid=1) INFO 07-14 11:55:43 [utils.py:344]\n(APIServer pid=1) INFO 07-14 11:55:43 [utils.py:344] \u2588 \u2588 \u2588\u2584 \u2584\u2588\n(APIServer pid=1) INFO 07-14 11:55:43 [utils.py:344] \u2584\u2584 \u2584\u2588 \u2588 \u2588 \u2588 \u2580\u2584\u2580 \u2588 version 0.22.1\n(APIServer pid=1) INFO 07-14 11:55:43 [utils.py:344] \u2588\u2584\u2588\u2580 \u2588 \u2588 \u2588 \u2588 model Qwen\/Qwen3.6-35B-A3B-FP8\n(APIServer pid=1) INFO 07-14 11:55:43 [utils.py:344] \u2580\u2580 \u2580\u2580\u2580\u2580\u2580 \u2580\u2580\u2580\u2580\u2580 \u2580 \u2580\n(APIServer pid=1) INFO 07-14 11:55:53 [model.py:617] Resolved architecture: Qwen3_5MoeForConditionalGeneration\n(EngineCore pid=237) INFO 07-14 11:56:28 [gpu_model_runner.py:5037] Starting to load model Qwen\/Qwen3.6-35B-A3B-FP8&#8230;\n(EngineCore pid=237) Loading safetensors using Fastsafetensor loader: 0% Completed | 0\/42 [00:00<!--?, ?it\/s&#093;&lt;br ?--> (EngineCore pid=237) Loading safetensors using Fastsafetensor loader: 100% Completed | 42\/42 [00:06&lt;00:00, 6.47it\/s]\n(EngineCore pid=237) INFO 07-14 11:56:37 [default_loader.py:397] Loading weights took 6.49 seconds\n(EngineCore pid=237) INFO 07-14 11:57:18 [monitor.py:53] torch.compile took 33.04 s in total\n(EngineCore pid=237) INFO 07-14 11:58:01 [gpu_worker.py:466] Available KV cache memory: 27.17 GiB\n(APIServer pid=1) INFO 07-14 11:58:05 [parser_manager.py:202] &#8220;auto&#8221; tool choice has been enabled.\n(APIServer pid=1) INFO 07-14 11:58:26 [base.py:224] Multi-modal warmup completed in 14.933s\n(APIServer pid=1) INFO: Started server process [1]\n(APIServer pid=1) INFO: Waiting for application startup.\n(APIServer pid=1) INFO: Application startup complete.<\/textarea><\/div><div class=\"fusion-text fusion-text-18\"><p>Once you see the <code>Application startup complete.<\/code> line, the model server is ready. Press <code>Ctrl+C<\/code> to stop watching the logs. The server will continue running in the background.<\/p>\n<hr \/>\n<h2>5. Testing the vLLM Server<\/h2>\n<p>First, let&#8217;s verify that the server is running:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-18 > .CodeMirror, .fusion-syntax-highlighter-18 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-18 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_18\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_18\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_18\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">curl http:\/\/localhost:8000\/health<\/textarea><\/div><div class=\"fusion-text fusion-text-19\"><p>If you don&#8217;t receive any errors, the server is healthy:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-19 > .CodeMirror, .fusion-syntax-highlighter-19 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-19 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_19\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_19\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_19\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\"> % Total % Received % Xferd Average Speed Time Time Time Current\nDload Upload Total Spent Left Speed\n0 0 0 0 0 0 0 0 &#8211;:&#8211;:&#8211; &#8211;:&#8211;:&#8211; &#8211;:&#8211;:&#8211; 0<\/textarea><\/div><div class=\"fusion-text fusion-text-20\"><p>Now test the model:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-20 > .CodeMirror, .fusion-syntax-highlighter-20 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-20 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_20\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_20\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_20\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">curl http:\/\/localhost:8000\/v1\/chat\/completions \\\n-H &#8220;Content-Type: application\/json&#8221; \\\n-d &#8216;{\n&#8220;model&#8221;: &#8220;Qwen\/Qwen3.6-35B-A3B-FP8&#8221;,\n&#8220;messages&#8221;: [{&#8220;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: &#8220;What is 12 times 17? Answer briefly.&#8221;}],\n&#8220;max_tokens&#8221;: 500\n}&#8217; | python3 -m json.tool<\/textarea><\/div><div class=\"fusion-text fusion-text-21\"><p>The simplified response is shown below. In the <code>content<\/code> field (the model&#8217;s response), you will see the number <code>204<\/code>. This confirms that the model performed the multiplication correctly. Additionally, the response includes a <code>reasoning<\/code> field. This field contains the model&#8217;s thought process. As you can see, the model performed the calculation using two separate methods and verified the solution before arriving at the answer:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-21 > .CodeMirror, .fusion-syntax-highlighter-21 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-21 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_21\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_21\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_21\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"application\/json\">{\n&#8220;id&#8221;: &#8220;chatcmpl-b49aa5be1287d18f&#8221;,\n&#8220;object&#8221;: &#8220;chat.completion&#8221;,\n&#8220;model&#8221;: &#8220;Qwen\/Qwen3.6-35B-A3B-FP8&#8221;,\n&#8220;choices&#8221;: [\n{\n&#8220;index&#8221;: 0,\n&#8220;message&#8221;: {\n&#8220;role&#8221;: &#8220;assistant&#8221;,\n&#8220;content&#8221;: &#8220;\\n\\n204&#8221;,\n&#8220;reasoning&#8221;: &#8220;Thinking Process:\\n\\n1. **Identify the user&#8217;s request:** The user wants to know the result of multiplying 12 by 17.\\n2. **Constraint:** The user requested a brief answer.\\n3. **Perform the calculation:**\\n * $12 \\\\times 17$\\n * $12 \\\\times 10 = 120$\\n * $12 \\\\times 7 = 84$\\n * $120 + 84 = 204$\\n * Alternative: $17 \\\\times 10 = 170$, $17 \\\\times 2 = 34$, $170 + 34 = 204$.\\n4. **Formulate the response:** \\&#8221;204\\&#8221;.\\n5. **Check constraints:** Is it brief? Yes.\\n\\nFinal Answer: 204.\\n&#8221;\n},\n&#8220;finish_reason&#8221;: &#8220;stop&#8221;\n}\n],\n&#8220;usage&#8221;: {\n&#8220;prompt_tokens&#8221;: 23,\n&#8220;total_tokens&#8221;: 234,\n&#8220;completion_tokens&#8221;: 211\n}\n}<\/textarea><\/div><div class=\"fusion-text fusion-text-22\"><p>vLLM is now running and we can ask questions to Qwen3.6 and receive responses. However, sending each question as a terminal command like the one above is not practical. We need a web interface to chat from the browser.<\/p>\n<hr \/>\n<h2>6. Setting Up Open WebUI<\/h2>\n<p>Open WebUI is an interface that connects to vLLM and can be used from your browser. You can chat with your language model and upload images to ask questions about them. Responses start appearing on the screen as they are being generated \u2014 you don&#8217;t have to wait for the entire response to finish before you start reading. For each chat, you can adjust settings such as temperature, top_p, and max_tokens. On first setup, it downloads a small embedding model, which enables you to upload documents and ask questions about them (RAG \u2014 Retrieval-Augmented Generation). Your chat history, settings, and account information are stored on the Spark&#8217;s disk; even if the device or container is shut down, your data is not lost, and you can continue from where you left off when you restart.<\/p>\n<p>First, pull the Open WebUI Docker image on the Spark:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-22 > .CodeMirror, .fusion-syntax-highlighter-22 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-22 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_22\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_22\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_22\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker pull ghcr.io\/open-webui\/open-webui:main<\/textarea><\/div><div class=\"fusion-text fusion-text-23\"><p>If the image is already on disk, Docker skips the download. Once the download is complete, you will see the following output:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-23 > .CodeMirror, .fusion-syntax-highlighter-23 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-23 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_23\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_23\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_23\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">main: Pulling from open-webui\/open-webui\nDigest: sha256:a26effeb220e132482bf7e0560b3404843e7bc40d23051144e062960df8df6b0\nStatus: Image is up to date for ghcr.io\/open-webui\/open-webui:main\nghcr.io\/open-webui\/open-webui:main<\/textarea><\/div><div class=\"fusion-text fusion-text-24\"><p>Once the download is complete, start the container:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-24 > .CodeMirror, .fusion-syntax-highlighter-24 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-24 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_24\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_24\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_24\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker run -d &#8211;network=host \\\n-e OPENAI_API_BASE_URLS=http:\/\/localhost:8000\/v1 \\\n-e OPENAI_API_KEY=not-needed \\\n-e ENABLE_SIGNUP=true \\\n-v open-webui-data:\/app\/backend\/data \\\n&#8211;name open-webui \\\nghcr.io\/open-webui\/open-webui:main<\/textarea><\/div><div class=\"fusion-text fusion-text-25\"><p>The command returns a container ID, indicating that the container has started:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-25 > .CodeMirror, .fusion-syntax-highlighter-25 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-25 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_25\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_25\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_25\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">id => 54563f6e8abb5eea54c328561ccb83df5eb29b3a18382cb083ddb210f637bcd4<\/textarea><\/div><div class=\"fusion-text fusion-text-26\"><p>As mentioned in the vLLM setup section, if a container with the same name (from your previous attempts) already exists, the command will return the following error:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-26 > .CodeMirror, .fusion-syntax-highlighter-26 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-26 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_26\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_26\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_26\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">docker: Error response from daemon: Conflict. The container name &#8220;\/open-webui&#8221; is already in use by container &#8230;<\/textarea><\/div><div class=\"fusion-text fusion-text-27\"><p>In this case, check the container list \u2014 open-webui should be listed:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-27 > .CodeMirror, .fusion-syntax-highlighter-27 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-27 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_27\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_27\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_27\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker ps -a &#8211;filter name=open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-28\"><p>If the status column shows &#8220;Up&#8221;, the container is already running and ready to use \u2014 you can proceed to the next step:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-28 > .CodeMirror, .fusion-syntax-highlighter-28 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-28 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_28\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_28\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_28\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">CONTAINER ID IMAGE STATUS PORTS NAMES\n54563f6e8abb ghcr.io\/open-webui\/open-webui:main Up 5 minutes (healthy) open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-29\"><p>If the status column shows &#8220;Exited&#8221;, the container has stopped:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-29 > .CodeMirror, .fusion-syntax-highlighter-29 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-29 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_29\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_29\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_29\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">CONTAINER ID IMAGE STATUS PORTS NAMES\n54563f6e8abb ghcr.io\/open-webui\/open-webui:main Exited (0) 2 minutes ago open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-30\"><p>You can restart the stopped container and proceed to the next step:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-30 > .CodeMirror, .fusion-syntax-highlighter-30 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-30 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_30\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_30\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_30\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker start open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-31\"><p>Your Open WebUI server will then be ready for use.<\/p>\n<hr \/>\n<h2>7. Monitoring the Open WebUI Startup Process<\/h2>\n<p>To watch the logs:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-31 > .CodeMirror, .fusion-syntax-highlighter-31 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-31 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_31\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_31\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_31\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker logs -f open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-32\"><p>You will see output similar to the following in the logs:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-32 > .CodeMirror, .fusion-syntax-highlighter-32 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-32 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_32\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_32\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_32\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">No WEBUI_SECRET_KEY environment variable set, loading from file.\nGenerating new WEBUI_SECRET_KEY&#8230;\nLoading WEBUI_SECRET_KEY from .webui_secret_key\nINFO [alembic.runtime.migration] Context impl SQLiteImpl.\nINFO [alembic.runtime.migration] Will assume non-transactional DDL.\nWARNI [open_webui.env]\n<p>WARNING: CORS_ALLOW_ORIGIN IS SET TO &#8216;*&#8217; &#8211; NOT RECOMMENDED FOR PRODUCTION DEPLOYMENTS.<\/p>\n<p>\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\n\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\n\u2588\u2588\u2551 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551\u255a\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\n\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2554\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551\n\u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u255d\u255a\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d<\/p>\n<p>v0.10.2 &#8211; building the best AI user interface.<\/p>\n<p>INFO: Started server process [1]\nINFO: Waiting for application startup.\nHTTP Request: GET https:\/\/huggingface.co\/api\/models\/sentence-transformers\/all-MiniLM-L6-v2\/revision\/main &#8220;HTTP\/1.1 200 OK&#8221;\nFetching 30 files: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 30\/30 [00:00&lt;00:00, 6815.94it\/s]\nLoading SentenceTransformer model from &#8230;\/all-MiniLM-L6-v2\/snapshots\/&#8230;\nLoading weights: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 103\/103 [00:00&lt;00:00, 14320.73it\/s]\n2026-07-14 11:45:51.407 | INFO | open_webui.utils.automations:scheduler_worker_loop:176 &#8211; Scheduler worker started (poll interval: 10s)<\/textarea><\/div><div class=\"fusion-text fusion-text-33\"><p>After you see the <code>Scheduler worker started<\/code> line in the logs, wait a few seconds. Press <code>Ctrl+C<\/code> to exit log monitoring.<\/p>\n<hr \/>\n<h2>8. Testing Open WebUI<\/h2>\n<p>To verify that the server is ready and healthy, run the following command:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-33 > .CodeMirror, .fusion-syntax-highlighter-33 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-33 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_33\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_33\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_33\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">curl http:\/\/localhost:8080\/health<\/textarea><\/div><div class=\"fusion-text fusion-text-34\"><p>If you receive an HTTP 200 response, Open WebUI is ready:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-34 > .CodeMirror, .fusion-syntax-highlighter-34 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-34 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_34\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_34\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_34\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">{&#8220;status&#8221;:true}<\/textarea><\/div><div class=\"fusion-text fusion-text-35\"><hr \/>\n<h2>9. Accessing from the Browser<\/h2>\n<p>On your computer&#8217;s browser, which is on the same network as the Spark, navigate to:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-35 > .CodeMirror, .fusion-syntax-highlighter-35 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-35 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_35\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_35\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_35\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">http:\/\/:8080<\/textarea><\/div><div class=\"fusion-text fusion-text-36\"><p>On first launch, a login screen will appear. Click the &#8220;Sign up&#8221; link and enter your name, email, and password. The first account created automatically becomes the administrator account. The purpose of creating an account is to store chat history and settings. This information is stored on the Spark.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_signup\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1024x579.webp\" alt class=\"img-responsive wp-image-1842\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-37\"><p>The model is automatically detected by Open WebUI and listed in the model selection menu. You will see the <code>Qwen\/Qwen3.6-35B-A3B-FP8<\/code> model in the menu. Select the model. If you are running multiple models at the same time, you can instantly switch between models from here. Additionally, the chat history tab on the left allows you to create multiple chat sessions and switch between them.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_signup\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1024x579.webp\" alt class=\"img-responsive wp-image-1842\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_signup.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-38\"><p>Type a question in the message box and press Enter. As the model responds, a collapsible reasoning section will appear at the top, and the response will appear below.<\/p>\n<p>Here are a few experiments we conducted to demonstrate what the model and web interface can do:<\/p>\n<p>First, to test the model&#8217;s Turkish comprehension skills, we asked the model to list Turkey&#8217;s three largest cities and provide brief information about each.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_sehirler-prompt\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-1024x579.webp\" alt class=\"img-responsive wp-image-1841\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_sehirler-prompt.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-39\"><p>Next, we asked the model to explain the benefits of artificial intelligence in the healthcare sector in three paragraphs.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_saglik-prompt\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-1024x579.webp\" alt class=\"img-responsive wp-image-1840\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_saglik-prompt.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-40\"><p>After that, to test the model&#8217;s programming skills, we asked it to create a Python function that checks whether a text is a palindrome.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_python-prompt\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-1024x579.webp\" alt class=\"img-responsive wp-image-1839\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_python-prompt.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-41\"><p>Using the file upload button in the message area, we sent the model an image of nature. The model described elements in the uploaded image such as flowers, leaves, water drops, and the background.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-6 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_image-prompt\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-1024x579.webp\" alt class=\"img-responsive wp-image-1837\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_image-prompt.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-42\"><p>From the same file upload section, this time we gave the model the DGX Spark datasheet and asked it to analyze it.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-7 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"open-webui_pdf-prompt\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-1024x579.webp\" alt class=\"img-responsive wp-image-1838\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/open-webui_pdf-prompt.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-43\"><p>Your local LLM setup on the Spark is ready! You can now chat with Qwen3.6 from all your devices on the same network.<\/p>\n<hr \/>\n<h2>10. Shutdown<\/h2>\n<p>When you are done, stop both containers:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-36 > .CodeMirror, .fusion-syntax-highlighter-36 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-36 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_36\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_36\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_36\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker stop vllm-qwen36-35b-fp8 open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-44\"><p>Although the stopped containers cease running, their data and configuration are preserved on disk. To restart the containers from where they left off:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-37 > .CodeMirror, .fusion-syntax-highlighter-37 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-37 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_37\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_37\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_37\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker start vllm-qwen36-35b-fp8 open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-45\"><p>To completely remove the containers:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-38 > .CodeMirror, .fusion-syntax-highlighter-38 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-38 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_38\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_38\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_38\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker rm -f vllm-qwen36-35b-fp8 open-webui<\/textarea><\/div><div class=\"fusion-text fusion-text-46\"><p>Even if you remove the containers, the Docker images and model files remain on disk. Therefore, you do not need to re-download to restart \u2014 simply run the <code>docker run<\/code> commands from steps 3 and 6 again. Chat history and account information are stored in the <code>open-webui-data<\/code> volume; even if the container is removed, this data is preserved on the Spark. If you want to delete this data as well, you can use the <code>docker volume rm open-webui-data<\/code> command.<\/p>\n<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":1933,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,17],"tags":[],"class_list":["post-1885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-cluster","category-generative-ai"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.3.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Serving a Local LLM with vLLM on DGX Spark - OpenZeka EN Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serving a Local LLM with vLLM on DGX Spark\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenZeka EN Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61576911356211\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-20T08:05:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-20T11:36:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Enhar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:site\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Enhar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/\"},\"author\":{\"name\":\"Enhar\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\"},\"headline\":\"Serving a Local LLM with vLLM on DGX Spark\",\"datePublished\":\"2026-08-20T08:05:32+00:00\",\"dateModified\":\"2026-08-20T11:36:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/\"},\"wordCount\":7048,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp\",\"articleSection\":[\"AI Cluster\",\"Generative AI\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/\",\"name\":\"Serving a Local LLM with vLLM on DGX Spark - OpenZeka EN Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp\",\"datePublished\":\"2026-08-20T08:05:32+00:00\",\"dateModified\":\"2026-08-20T11:36:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/serving-local-llm-on-dgx-spark\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serving a Local LLM with vLLM on DGX Spark\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"name\":\"Aetherix B.V.\",\"description\":\"NVIDIA Jetson Developer Kits &amp;Edge Devices\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\",\"name\":\"Aetherix B.V.\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"width\":421,\"height\":398,\"caption\":\"Aetherix B.V.\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61576911356211\",\"https:\\\/\\\/x.com\\\/Aetherixnl\",\"https:\\\/\\\/www.instagram.com\\\/aetherixnl\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@aetherixnl\"],\"description\":\"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.\",\"email\":\"info@aetherix.com\",\"legalName\":\"Aetherix B.V.\",\"vatID\":\"NL867727688B01\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\",\"name\":\"Enhar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"caption\":\"Enhar\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Serving a Local LLM with vLLM on DGX Spark - OpenZeka EN Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/","og_locale":"en_US","og_type":"article","og_title":"Serving a Local LLM with vLLM on DGX Spark","og_url":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/","og_site_name":"OpenZeka EN Blog","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61576911356211","article_published_time":"2026-08-20T08:05:32+00:00","article_modified_time":"2026-08-20T11:36:39+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp","type":"image\/webp"}],"author":"Enhar","twitter_card":"summary_large_image","twitter_creator":"@Aetherixnl","twitter_site":"@Aetherixnl","twitter_misc":{"Written by":"Enhar","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#article","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/"},"author":{"name":"Enhar","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb"},"headline":"Serving a Local LLM with vLLM on DGX Spark","datePublished":"2026-08-20T08:05:32+00:00","dateModified":"2026-08-20T11:36:39+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/"},"wordCount":7048,"publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp","articleSection":["AI Cluster","Generative AI"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/","url":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/","name":"Serving a Local LLM with vLLM on DGX Spark - OpenZeka EN Blog","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#primaryimage"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp","datePublished":"2026-08-20T08:05:32+00:00","dateModified":"2026-08-20T11:36:39+00:00","breadcrumb":{"@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#primaryimage","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Serving-a-Local-LLM-with-vLLM-on-DGX-Spark.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/blog.openzeka.com\/en\/serving-local-llm-on-dgx-spark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.openzeka.com\/en\/"},{"@type":"ListItem","position":2,"name":"Serving a Local LLM with vLLM on DGX Spark"}]},{"@type":"WebSite","@id":"https:\/\/blog.openzeka.com\/en\/#website","url":"https:\/\/blog.openzeka.com\/en\/","name":"Aetherix B.V.","description":"NVIDIA Jetson Developer Kits &amp;Edge Devices","publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.openzeka.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.openzeka.com\/en\/#organization","name":"Aetherix B.V.","url":"https:\/\/blog.openzeka.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","width":421,"height":398,"caption":"Aetherix B.V."},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61576911356211","https:\/\/x.com\/Aetherixnl","https:\/\/www.instagram.com\/aetherixnl\/","https:\/\/www.tiktok.com\/@aetherixnl"],"description":"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.","email":"info@aetherix.com","legalName":"Aetherix B.V.","vatID":"NL867727688B01"},{"@type":"Person","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb","name":"Enhar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","caption":"Enhar"}}]}},"_links":{"self":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/comments?post=1885"}],"version-history":[{"count":14,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1885\/revisions"}],"predecessor-version":[{"id":1966,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1885\/revisions\/1966"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media\/1933"}],"wp:attachment":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media?parent=1885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/categories?post=1885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/tags?post=1885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}