Windows 11
Use OpenClaw Windows Hub for Command Center, notifications and an optional Windows node. The current bleeding-edge containment route adds Windows Insider and MXC; ordinary remote chat does not move the gateway onto Windows.
Operate DGX Spark from desktop, browser or messaging clients while keeping its gateway, model and retrieval ports private.
The operator device can be a phone, laptop or desktop without moving the gateway, memory, models or jobs off the always-on Linux host.
Use OpenClaw Windows Hub for Command Center, notifications and an optional Windows node. The current bleeding-edge containment route adds Windows Insider and MXC; ordinary remote chat does not move the gateway onto Windows.
Use the OpenClaw menu bar app in Remote mode. It can own the SSH tunnel, health checks and Web Chat while the gateway remains loopback-bound on Spark.
Use the Linux companion, CLI, browser Control UI or an SSH tunnel. It is also the closest match to Spark when you need to reproduce commands locally.
DGX Spark and the pre-release RTX Spark family publish strikingly similar headline numbers, up to one petaflop and up to 128 GB unified memory, but NVIDIA currently lists them as different product categories: DGX Spark is a Linux companion system, while RTX Spark is a Windows primary system. Public documentation does not establish that their drivers, firmware or boards are interchangeable, and NVIDIA has announced no Windows driver, Windows image or upgrade path for DGX Spark.
Buy DGX Spark only if DGX OS works for the machine's useful life. Future Windows support is possible in theory, but today it is speculation. There is also no public evidence for claims about NVIDIA's commercial motive; the support gap itself is the decision-relevant fact.
NVIDIA's own DGX Spark listing displayed this price and was out of stock when checked. Use it as a reference for the NVIDIA-branded system, not a ceiling for partner products. OEMs choose their own configurations and selling prices.
Check the current NVIDIA Marketplace price →A 90-day NVIDIA AI Enterprise - DGX Spark evaluation exists only when it is purchased, requested or explicitly issued on the NVIDIA Entitlement Certificate (EC); not every OEM offer includes it. Record the EC/order line, GPU metric, start and end date, support route and renewal before deployment. It is an evaluation, not a public free-forever entitlement to the complete supported production suite.
Free components remain useful for development: Omniverse and NVIDIA AI Workbench are free, and the standard NVIDIA Developer Program NIM route is for development, research and test up to 16 GPUs with community support. Production self-hosting generally needs NVIDIA AI Enterprise.
These NVIDIA and Microsoft videos show the platform framing, an announced product, example workloads and one model-routing layer. Treat them as vendor demonstrations: they clarify positioning, but they do not prove interchangeability, delivery timing or performance for your workflow.
Use this overview to understand NVIDIA's intended product category. Keep the announced positioning separate from tested application support on a shipping system.
The Surface RTX Spark Dev Box is a separate announced Windows product. Its existence is not evidence that a DGX Spark can be converted into one.
The architectural-design demo shows how NVIDIA imagines agents using the platform. It is a useful workflow reference, not a benchmark or compatibility matrix.
The demo shows a Hermes agent monitoring communication channels, prioritizing an urgent software issue and coordinating debugging and quality assurance on RTX Spark. It demonstrates NVIDIA's intended always-on local workflow, not measured autonomy, task success or hardware performance.
The keynote gives the broad RTX Spark context. If 128 GB is the constraint rather than the solution, the DGX Station guide maps the 748 GB tier, realistic model fits and the current benchmark gap.
NVIDIA's walkthrough shows a router selecting among models in a configured pool. On Spark, add that layer only after one private endpoint passes the task acceptance set. Record which choices stay local: a router can introduce new model, provider, logging, cost and data-boundary decisions.
Hands-on third-party tests agree on the shape even when engines, quants and prompts differ: 128 GB unlocks models that ordinary small systems cannot load, while 273 GB/s LPDDR5X limits dense single-stream decode.
Its early-access Spark ran GPT-OSS 20B MXFP4 at 49.7 decode tok/s, but Llama 3.1 70B FP8 at 2.7 decode tok/s. Llama 3.1 8B scaled to 368 aggregate decode tok/s at batch 32. NVIDIA supplied early access, and the authors warn that software results can age.
A separate published comparison reported 4.67 tok/s for Llama 3.3 70B, 38.03 tok/s for Qwen3 Coder and 60.33 tok/s for GPT-OSS 20B on Spark. Treat these as workload-specific results, not universal product scores.
StorageReview tested Dell, GIGABYTE and HP pairs over the 200 Gb fabric and found OEM performance within a narrow band. For batched inference at practical concurrency, its pipeline-parallel layout mattered more than small chassis differences.
These videos add independent system context. Keep their software versions, workloads and methodology attached to any performance observation, and use the normalized table below for direct comparisons.
Level1Techs examines DGX Spark as a system rather than a specification sheet. Treat its observations as independent context and keep software versions and workload conditions attached to any result.
Level1Techs compares a dual-Spark setup with more expensive cluster configurations. Keep model, quantization, parallelism, concurrency and software versions attached to the result; it does not show that two Sparks replace every larger system.
This longer independent discussion focuses on what the machine is and how its development role differs from a simple inference appliance. Pair the framing with the measured limits below before buying.
“Tokens per second” without those fields is not a benchmark. Prefill and decode are separate, and aggregate batch throughput is not the speed each interactive user sees.
| Source | Model and format | Workload | Measured Spark result | What it supports |
|---|---|---|---|---|
| LMSYS · Oct 2025 | GPT-OSS 20B · MXFP4 · Ollama | Single-stream decode | 49.7 tok/s | A small sparse model can be comfortably interactive. |
| LMSYS · Oct 2025 | Llama 3.1 70B · FP8 · SGLang | Batch 1 decode | 2.7 tok/s | Loading a large dense model is not the same as serving it quickly. |
| LMSYS · Oct 2025 | Llama 3.1 8B · FP8 · SGLang | Batch 32 aggregate decode | 368 tok/s | Batching can use compute that one bandwidth-bound stream leaves idle. |
| Third-party comparison · Oct 2025 | Llama 3.3 70B | Single prompt | 4.67 tok/s | A second setup reproduces the slow dense-70B shape, not the exact LMSYS number. |
| Community recipe · Jul 2026 | GLM-4.7 355B · NVFP4 · custom vLLM · TP=2 | Two Sparks · 65,536 max sequence length · single-stream decode | About 17.5 tok/s | Two 128 GB nodes can serve the full checkpoint, but only through a pinned patched stack. |
| Level1 practitioner · Aug 2026 | DeepSeek-V4-Flash-0731 304B · custom vLLM · NVFP4 KV · TP=2 | Warm decode · stream:false | 67.5 mean tok/s · 219-227 aggregate at c6 | Speculative-decode acceptance and concurrency make prompt shape part of the result. |
| Level1 practitioner · Aug 2026 | DeepSeek-V4-Flash-0731 304B · same service | 40 min · c4 mixed agent traffic · 532 requests | 87.2 aggregate · 21.8 per stream · 0 request errors | The pinned service survived this bounded soak; it does not establish long-term production reliability. |
| NVIDIA SANA · Aug 2026 | MiniMax H3 · pruned FP8 · Sol Engine | 5 s video · 480p · 124 frames · 50 steps | 181.3 s optimized · 3.92× | A specialized FP8 runtime makes H3 fit and materially faster; generation remains far from real time. |
A July practitioner recipe serves the full GLM-4.7 355B Salyut1 NVFP4 checkpoint, about 188 GB across 41 shards, on two DGX Sparks over the built-in ConnectX-7 fabric. The author reports about 17.5 tok/s with vLLM TP=2, CUDA graphs enabled and a configured 65,536-token ceiling. The setup passed the author's coherent-completion and tool-call checks plus an exact needle-recall check around 21K tokens; that is not a full-64K quality validation. It is not a stock install: the recipe uses a development vLLM image, an open loader-fix pull request, a no-Ray launch path, explicit GB10 NCCL handling, capped batch settings and 0.90 memory utilization. The author also reports about 9.5 minutes to load the checkpoint.
An August Level1Techs report measures the official DeepSeek-V4-Flash-0731 304B checkpoint on two Sparks with TP=2 over dual 200 Gb/s RoCE. Here, NVFP4 describes the KV cache rather than the model weights. On a custom vLLM fork at the model's calibrated 1,048,576-token ceiling, with six sequence slots, five speculative tokens, warm kernels and non-streamed accounting, the author measured 84.1 tok/s peak, 67.5 mean decode, 219.2-226.9 aggregate tok/s at concurrency six and about 2,690 prefill tok/s at 100K. A separate 40-minute mixed-temperature, mixed-budget soak at concurrency four produced 87.2 aggregate and 21.8 per stream across 532 requests without a request error.
Do not turn the RTX comparison into a quality ranking. The forum's temperature-zero diagnostic found stack-specific counting and arithmetic differences, but its expanded artifacts were not publicly downloadable when checked. DeepSeek recommends temperature 1.0 and top-p 0.95 for agentic local use. The public recipe also changes quickly and contains results for both the official 0731 checkpoint and an earlier preview. Keep the checkpoint, commit, container, patches, prompt, sampling, warm-up, stream mode and concurrency attached to every number.
Meta’s Apache-2.0 Muse Glimmer 30B is a dense local-agent model with tool use, coding and optional image input. Its official GGUF release provides 16.76 GB and 19.65 GB language-model builds, plus a separate 1.40 GB perception encoder and optional 1.63 GB DFlash drafter. That leaves ample room inside a 128 GB Spark-class system for runtime and a useful context budget, although the advertised 131,072+ model limit is not a promise that the maximum context will be fast or memory-efficient.
Early owner runs provide a useful speed range, not a controlled benchmark. On one DGX Spark, a llama.cpp run reported about 10.5 tok/s conventional decode and 36-38 tok/s with the official DFlash drafter at 15 speculative tokens; a separate vLLM run rose from 5-8 tok/s to about 23 tok/s at the same setting. Workload, draft acceptance, quant, context depth and engine build can move those numbers.
The llama.cpp test also reported about 700 tok/s prefill at short context, about 390 tok/s deep into an 832K-token prompt, and 3/3 needle retrieval at 97K, 188K, 415K and 832K after an 8× YaRN and metadata override. Treat that as an extended-context experiment rather than a new guaranteed model limit. Its two-Spark RPC layer split slowed decode to 25-28 tok/s, so a model this size is better run as one instance per Spark unless a measured workload proves otherwise. Pin the exact engine revision and rerun your own tool-call, recovery, context and latency harness.
NVIDIA’s SANA team ran the 33B dense MiniMax H3 audio-video generator on one DGX Spark at 832×480, 24 fps, 124 frames and 50 denoising steps. Sol Engine reduced end-to-end wall time from 710.6 to 181.3 seconds, a reported 3.92× speedup. The full recipe combines kernel work with approximate Sol-Attn sparse attention and cross-step caching, so the accompanying near-lossless quality assessment is part of the vendor experiment, not proof that every prompt is unchanged. NVIDIA’s separate GeForce RTX 5090 result uses 1344×768 and must not be treated as an RTX Spark benchmark or compared by raw time.
The ordinary BF16 FL2VA package is about 134.2 GiB before activations, so NVIDIA’s GB10 runtime uses a pruned FP8 DiT, FP8 Qwen3-VL conditioner and the released VAEs, with one resident model process. MiniMax’s downloadable local system produces 768p H3-Base output; the recommended Context-IR preprocessing and Regenerate-2K stage remain hosted. There is also a procurement-level license gate: the community license excludes the EU, UK, United States and South Korea, with a separate application route for those territories.
NVFP4 is promising here because it can shrink weights and reduce memory traffic while preserving more quality than a crude four-bit conversion. For planning, reserving 20-25% of Spark's 128 GB and assuming a mixed checkpoint at roughly 5.0-5.2 bits per parameter gives an estimated 150-165B parameter single-node fit. That is below NVIDIA's “up to 200B” capacity ceiling because this estimate leaves useful room for the runtime and cache.
Two linked Sparks provide a speculative 295-330B parameter planning band with the same reserve. NVIDIA has demonstrated Qwen-235B in NVFP4 on two systems and markets an up-to-405B model ceiling, but neither statement guarantees your model, context, kernel or interactive speed.
The active products share the compact GB10, 128 GB coherent-memory class, but not necessarily NVIDIA's DGX Spark product name, factory image, storage, regional price or support terms. HP advised directly that ZGX Nano is discontinued, so it remains here as a clearly labelled historical reference.
GB10 AI mini workstation.
GB10 desktop AI supercomputer.
GB10 micro workstation.
GB10 AI TOP system.
GB10 nano AI station.
GB10 AI development workstation.
GB10 AI supercomputer.
Authorized DGX Spark channel route. The current NVIDIA/PNY offer advertises an optional free 90-day NVIDIA AI Enterprise - DGX Spark evaluation after registration and entitlement; it is time-limited, offers community-driven support only, and is not a production-support entitlement.
Before committing four, five or six figures to a Spark or larger deployment, rent the candidate workload and prove the whole operator path. A rental is a test drive, not a guarantee of GPU availability, equivalent hardware, benchmark transfer or price.
The keynote explains the platform story, the PNY film shows one product implementation, and the assistant and GraphRAG sessions demonstrate intended workflows. All four are vendor presentations, use the independent review block above for measured model performance.
The keynote segment sets out NVIDIA's original product positioning and target users. Compare those claims with current documentation and the independent throughput results on this page.
The short film shows the PNY implementation and intended compact appliance experience. It does not establish model quality, sustained tokens per second, thermals or equivalence with other OEM systems.
This concise NVIDIA walkthrough shows a Hugging Face assistant build on DGX Spark. Use it for workflow ideas and product setup context, not as independent performance evidence.
The NVIDIA Developer session demonstrates text processing for GraphRAG with an LLM of up to 120B parameters. It shows an intended capacity-led workflow, not a standardized throughput benchmark.
A phone is enough for chat, status and approvals. Desktop- or mobile-node permissions are optional additions for workflows that genuinely need to touch the operator device.
Best native OpenClaw diagnostics and Windows-node experience. Use the Insider path below when you want the current session-isolation work; use SSH, Web Chat or messaging when the Windows machine is only an operator.
Point the signed macOS companion at user@SPARK_IP. Its default remote mode manages a strict-host-key SSH tunnel, health checks and Web Chat without starting a second gateway on the Mac.
Use the Linux desktop companion when you want a tray and Canvas, or forward port 18789 and open the Control UI on localhost. The CLI is the simplest path on a minimal workstation.
Official Linux guide →OpenClaw Windows Hub can run on ordinary Windows builds. This guide targets the newer MXC session-isolation and agent-policy work Microsoft is still shipping through Windows Insider.
Use a secondary device or separate system image when possible. Enable BitLocker or device encryption, Secure Boot, Windows Hello and Defender; create a tested recovery drive and backup before enrolling. Run the companion as a standard user, not from a shared or daily administrator account.
Experimental is where Microsoft says actively developed features appear first. Stay on the 25H2 or 26H1 line offered for your hardware rather than the separate Future Platforms option. After updating, confirm the actual build with winver; MXC currently documents build 26300.8553 as the minimum for its isolation_session backend.
Install the current feature and platform updates, then check the OpenClaw release notes for MXC support and confirm that the requested backend is available. An Insider badge alone proves nothing. Microsoft currently describes OpenClaw's Windows node and gateway as an MXC integration, but the MXC repository also warns that its early-preview profiles are still overly permissive in known cases.
If MXC or the expected session backend is unavailable, stop. Do not silently fall back to unrestricted execution and call the result hardened.
Download the x64 or ARM64 asset and checksum file from the project's latest release. Compare the SHA-256 value before opening it, retain SmartScreen and Defender checks, and reject a binary whose publisher or digest does not match.
Get-FileHash .\OpenClawTray-Setup-x64.exe -Algorithm SHA256Choose the remote or existing-gateway route in Windows Hub. Keep the gateway on Spark bound to loopback and let the Hub manage an SSH tunnel, or use a private Tailnet with authentication. The local WSL gateway is a fallback for people without an always-on host, not the default topology here.
Approve the Windows node from the Spark gateway. Begin with notifications and device information/status. Leave command execution, screen capture, camera, location, speech and browser control disabled until a named workflow needs them and both the gateway policy and MXC policy deny everything else.
openclaw devices list
openclaw devices approve <device-id>system.notify · device.info · device.statusOpenClaw requires exact command names. If system.run is later enabled, keep the separate Windows node execution policy default-deny as well.
Run ten harmless actions, inspect the activity and MXC diagnostics, disconnect the gateway, reject an unexpected pairing request, attempt access to a deliberately denied file and domain, and confirm that every disabled node capability fails. Re-run this after Windows, Hub, MXC, OpenShell or gateway updates.
OpenClaw extensions execute inside a trust boundary. Install fewer, inspect them and pin versions where the package route supports it.
Use the platform companion for health, chat and notifications without moving the gateway. Enable a desktop node only when the agent must act on that device; operator access and node authority are separate choices.
Compare platforms →Prefer the Hub's SSH-tunnel support or Tailscale Serve over firewalling the gateway port open. Keep the gateway bound to loopback and authenticate every client.
OpenClaw remote access →Use only when the workflow must operate an already signed-in browser tab. Share an explicit OpenClaw tab group, keep the relay on loopback and assume the agent can act with that tab's account permissions.
Extension security model →Search by the exact capability you need, inspect source and scan state, then install into one workspace before promoting it. A popular package is still executable code, not a permission boundary.
Put tool execution behind NVIDIA OpenShell where its backend fits, then layer the host controls: MXC preview on Windows, Bubblewrap or LXC on Linux, and Seatbelt-backed containment on macOS. Test denied files and destinations on the actual host.
Record the package, version, owner, data it can read, actions it can take, token scopes and removal test. Re-run the ten-action test after every gateway, node or plugin update.
Use the ten-run method →The agent does not disappear when a laptop sleeps. Gateway state, model serving and scheduled work remain together on the always-on host.
OpenClaw's own model is one gateway with many clients: the gateway owns sessions, authentication profiles, channels and state. Hermes is similarly comfortable on a remote Linux host with its dashboard and messaging gateway exposed only through the private access layer. A local laptop gateway is the fallback for someone without an always-on server, not the target architecture here.
When the laptop model cannot finish the hard part, keep the original and the identity map local. Send a stronger model only the smallest reviewed artifact that policy permits.
Microsoft says Bayer fine-tuned a small Phi model on proprietary crop-protection labels, regulatory rules and expert-authored Q&A. Labels can exceed 100 pages; Bayer reports early complex questions falling from days or weeks to under 30 seconds.
Read the Microsoft customer story →Discovery fine-tuned five variants across Azure OpenAI 4o-mini and 4.1-mini for company language, SQL shape and workflow templates. It reports average response time dropping from five or six seconds to 1.5-2 seconds.
Read the Microsoft customer story →A downloaded model can flag candidate names, secrets, clauses and contextual identifiers without giving the source file to a model provider. It can also finish simple extraction or comparison locally. Escalation begins only when a harder model adds enough value to justify a reviewed data crossing.
Run the one-document test →Redaction is not deletion and pseudonymization is not anonymity. The original, findings manifest and re-identification map stay local. Credentials are removed rather than tokenized, and the cloud service never receives the map. If context still identifies the person, client, transaction or project, the file remains red.
During a connected maintenance window, install LM Studio and download one instruction-tuned local model, its runtime and any local embedding model the attachment workflow requires. Test with a synthetic file, close the app, move the authorized copy outside synced folders, then switch off Wi-Fi and unplug Ethernet before reopening it.
Load locally. Choose only the downloaded model; start with an 8,192-token context and temperature 0.
Remove side doors. Turn off tools, MCP, web search, plugins, cloud models and automatic fallback.
Keep the server closed. Leave it off; if an integration needs it, bind only to 127.0.0.1 with authentication.
Return locations, not prose. Ask first for exact span, page, category, reason, confidence and a proposed token.
Work only with the attached local document. Do not use tools, web search, external sources or a remote model. Find DIRECT_IDENTIFIER, CREDENTIAL_OR_SECRET, REGULATED_DATA, COMMERCIAL_CONFIDENTIAL, QUASI_IDENTIFIER and UNCERTAIN spans. Return exact text, page or section, reason, confidence and a stable token such as [PERSON-001]. Do not rewrite yet. Do not infer missing identities.RAG may retrieve only selected passages. Long documents require page-by-page or overlapping-chunk inspection, deterministic secret and identifier checks, a fresh rescan of the derivative and human approval. Any unreadable or skipped content stops cloud routing.
Credentials, identity evidence, health or KYC records, privileged advice, protected investigations, safety-critical material, raw client or board files, and anything with unclear authority or processor terms. Use approved private infrastructure or no model.
Internal contracts, narratives or reports that can lose direct identifiers and distinctive combinations without losing the task. Name the exact service, purpose, region, retention, logging, training and deletion terms before sending.
Published material, genuinely synthetic tests, checked templates or content explicitly approved for this external purpose. Inspect comments, metadata, tracked changes, hidden sheets, notes and embedded objects too.
Microsoft says Azure-hosted direct-model inputs, outputs, embeddings and training data are not made available to model providers or used to improve foundation models without permission, and that a customer's fine-tuned model is exclusive to that customer. Those are useful privacy commitments. They do not by themselves make the resulting weights exportable or the workflow provider-independent.
Read the current Foundry data terms →Store rules, source provenance, prompts, schemas, corrections, permission policy and an untouched evaluation set in exportable formats. Treat a fine-tune as a replaceable build artifact, not the only copy of what the company learned.
Could we replace the model in 30 days using only the artifacts we can export today, then prove the replacement against the same holdout?
The walkthrough includes the full LM Studio pilot, red/amber/green router, verification gates, laptop-to-enterprise thresholds and portability test. The companion Codex skill prepares the derivative and review package, then stops before transmission.
Use NVIDIA's Spark-specific playbooks. Generic CUDA, x86 container or desktop instructions can fail on ARM64/Blackwell even when the project itself supports NVIDIA GPUs.
Record the installed DGX OS release, driver, CUDA stack and firmware. Apply NVIDIA-recommended updates through DGX Dashboard, then verify health before adding services. Do not replace the OS with generic Ubuntu or Windows.
After updating DGX OS, create a named non-root account, install an SSH key and choose the least-powerful route that covers the operator's work. Keep it on a trusted LAN or Tailnet, retain host firewall rules and never publish SSH or remote-desktop ports directly to the internet.
Community installer warning · checked 22 August 2026: treat the linked repository as a bootstrap, not a reliable one-command finish. Its current checked revision still forces DISPLAY=:0, chooses a fixed Sunshine output and writes host options rejected by Sunshine 2026.516.143833. If you use ./install.sh, reboot and run ./after-install.sh, follow the repair section before pairing Moonlight, or give the standalone Markdown runbook to Codex or another terminal-capable AI agent. For access beyond the LAN, use a private Tailnet and confirm a direct peer-to-peer path.
Use the Qwen3.8-27B FP8 trial below as the default Spark vLLM path, then compare another model only after the endpoint, tool loop and edit result pass a fixed acceptance set. Pin the container and official model revision, set explicit context, cache and concurrency budgets, and keep the endpoint on loopback.
Start with Qdrant only if filters, hybrid search, persistence or multiple collections justify a service. Store the original document and page metadata with every chunk; back up source documents and collection configuration, then test a restore.
Use the private-document recipe →Install one primary agent through its supported Linux path, point it at vLLM's loopback OpenAI-compatible endpoint and keep its sessions, memory and channels on persistent storage. OpenClaw uses its gateway service; Hermes can expose its dashboard and messaging gateway. Run both only when you have intentionally separated their state, ports and permissions.
Bind the gateway, vLLM and Qdrant to loopback unless a private container network requires otherwise. Run high-authority agent tools through an OpenShell sandbox where supported, then test its filesystem and outbound-network denies. Expose only the application endpoint the chosen operator route needs.
Do not let a training job silently evict or starve the always-on model. Use explicit service and training modes, drain requests, stop vLLM when the recipe needs the memory, checkpoint to persistent storage and restore serving from a known configuration.
Back up only what cannot be recreated: gateway configuration and keys, source data, dataset manifests, adapters, evaluation sets and service definitions. Rebuild one clean service from the manifest before calling the system production-ready.
NVIDIA Sync is the launcher and SSH tunnel, not the container runtime. The Open WebUI container, bundled Ollama and both persistent data volumes live on the Spark.
NVIDIA's remote recipe pulls ghcr.io/open-webui/open-webui:ollama and creates a Docker container named open-webui. Spark port 12000 maps to container port 8080; Sync forwards the same port to localhost:12000 on the operator device.
open-webui is mounted at /app/backend/data for accounts, chats, settings and uploads. open-webui-ollama is mounted at /root/.ollama for Ollama model data. Docker manages their host paths; inspect and back them up instead of editing the mountpoints directly.
The custom script creates the container only when it is absent. Later launches restart the same container, and closing the launcher stops it. Custom scripts are saved per remote device, so this launcher follows the same Spark across Sync clients; it is not copied automatically to every Spark.
docker ps -a --filter 'name=^/open-webui$'
docker inspect open-webui --format '{{.Config.Image}}'
docker inspect open-webui --format \
'{{range .Mounts}}{{println .Name "->" .Destination}}{{end}}'
docker volume inspect open-webui open-webui-ollama
# Check the state before using docker exec.
running=$(docker inspect open-webui --format '{{.State.Running}}')
printf 'running=%s\n' "$running"
if [ "$running" = true ]; then
docker exec open-webui ollama --version
else
printf '%s\n' 'Ollama version check skipped: open-webui is stopped.'
fi
The volume inspection output includes Docker's current host mountpoint. Treat that path as implementation state, not a user-managed application folder.
docker exec requires a running container. The inspection block now reports the stopped state without failing. If you need the bundled Ollama version while docker ps -a shows Exited (0), start Open WebUI from NVIDIA Sync first (preferred), or use the one-shot check below. A stopped container does not mean either named volume is missing.
When the Sync launcher is stopped, an optional one-shot check restores the prior stopped state:
was_running=$(docker inspect open-webui --format '{{.State.Running}}')
if [ "$was_running" != true ]; then docker start open-webui >/dev/null; fi
docker exec open-webui ollama --version
if [ "$was_running" != true ]; then docker stop open-webui >/dev/null; fi
Pulling the moving :ollama tag changes the local image, but it does not replace an existing container. Before an update, review the Open WebUI release notes and back up at least the application volume; the Ollama model-volume backup is optional but can be very large. Replace YYYY-MM-DD with the actual backup date.
mkdir -p "$PWD/open-webui-backups"
docker run --rm \
-v open-webui:/data:ro \
-v "$PWD/open-webui-backups:/backup" \
alpine tar czf /backup/open-webui-YYYY-MM-DD.tar.gz /data
# Optional: preserve downloaded Ollama models as well.
docker run --rm \
-v open-webui-ollama:/data:ro \
-v "$PWD/open-webui-backups:/backup" \
alpine tar czf /backup/ollama-models-YYYY-MM-DD.tar.gz /data
Stop Open WebUI with the x beside its Sync launcher. In a Sync terminal, pull the image and remove only the stopped container. Do not remove either named volume.
docker pull ghcr.io/open-webui/open-webui:ollama
docker rm open-webui
Launch Open WebUI from Sync again. Its script now creates a new container from the pulled image and reattaches both volumes. Then inspect startup and the bundled runtime:
docker ps --filter 'name=^/open-webui$'
docker logs --tail 100 open-webui
docker exec open-webui ollama --version
The combined image carries its own Ollama build. It can lag the newest standalone release, and current Ollama model metadata can declare a minimum required runtime version. If a new model refuses to pull or load, compare docker exec open-webui ollama --version with the model requirement before diagnosing the GPU. Updating the combined image is the clean route; replacing Ollama inside a running container creates an unrepeatable installation.
When a model's minimum required version outpaces the bundled build, decoupling Ollama from Open WebUI is a practical lower-complexity step before a vLLM migration. That is an operational comparison, not a vendor support or cost guarantee. Decoupling is what upgrades Ollama, not the tag switch: a moving :main tag tracks Open WebUI on its own schedule, while the host Ollama service tracks the standalone release independently.
Install standalone Ollama with the official installer. On the Spark, NVIDIA's recipe uses that same installer, and it detects the GB10 Blackwell GPU.
curl -fsSL https://ollama.com/install.sh | sh
Stop the newly installed service before copying. Create the destination for the ollama service account, copy the model store, restore ownership, then verify one real GPU-backed inference before switching Open WebUI. The old named volume remains untouched as the immediate rollback copy.
sudo systemctl stop ollama
sudo install -d -o ollama -g ollama /usr/share/ollama/.ollama
docker run --rm \
-v open-webui-ollama:/data:ro \
-v /usr/share/ollama/.ollama:/store \
alpine cp -a /data/. /store/
sudo chown -R ollama:ollama /usr/share/ollama/.ollama
sudo systemctl start ollama
ollama list
model_tag='replace-with-model-tag'
ollama run "$model_tag" 'Reply with exactly: migration verified'
ollama ps
Then stop the Sync launcher, rename the retained combined container so the open-webui name is free, and start the ordinary image against the host service. Replace YYYY-MM-DD and the secret placeholder before running the commands. Docker host networking keeps Open WebUI on host port 12000 and lets it reach loopback-bound Ollama without exposing port 11434 to the LAN.
docker stop open-webui
docker rename open-webui open-webui-bundled-rollback-YYYY-MM-DD
docker run -d \
--network=host \
-e PORT=12000 \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-e WEBUI_SECRET_KEY='<replace-with-a-long-random-secret>' \
-v open-webui:/app/backend/data \
--name open-webui \
--restart unless-stopped \
ghcr.io/open-webui/open-webui:main
The current DGX Spark run pairs RadixArk/Qwen3.8-27B-NVFP4-BF16-LMHead with the incoai/Qwen3.8-27B-DFlash2 drafter in a digest-pinned SGLang container. Two top-level VS Code agent tasks produced 161 successful local model calls. SGLang returned 166 successful chat-completion responses when five separate readiness and acceptance calls are included, with no inference HTTP failure in the recorded run.
Across 1,242 server windows with one active request, generation throughput averaged 20.4 tok/s and had an 18.6 tok/s median. Another 102 windows with two active requests averaged 36.6 aggregate tok/s. The DFlash windows averaged a 3.39-token acceptance length and a 34.2% acceptance rate. VS Code round-trip latency had a 20.1-second median and a 278.8-second 95th percentile across the 161 calls; that client timing includes prompt handling, reasoning, generation, transport and harness overhead.
During the VS Code interval, SGLang's prefill records represented 14,316,770 prompt tokens: 290,146 newly processed tokens and 14,026,624 reused cache tokens, for a 98.0% cached share. Across 84 complete uncached 2,048-token chunks, input throughput had a 1,005 tok/s median and a 1,239.1 tok/s mean. High cache reuse is useful for an agent loop, but it also means this session is not a cold-prompt benchmark.
The recipe below pins the tested container digest and the locally observed target and draft revisions. It binds the endpoint to loopback, limits the container to 96 GB and leaves system memory outside the service. Re-test before changing any pin, memory fraction or speculative setting.
cache_root="${XDG_CACHE_HOME:-${HOME}/.cache}"
mkdir -p "$cache_root/huggingface" "$cache_root/sglang-qwen38"
docker run -d \
--name sglang-qwen38 \
--restart unless-stopped \
--gpus all \
--network host \
--ipc host \
--shm-size 16g \
--memory 96g \
--memory-swap 96g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
-e HF_HOME=/root/.cache/huggingface \
-e SGLANG_CACHE_DIR=/root/.cache/sglang \
-v "$cache_root/huggingface:/root/.cache/huggingface" \
-v "$cache_root/sglang-qwen38:/root/.cache/sglang" \
--entrypoint "" \
lmsysorg/sglang@sha256:616a3e97f45191af975896cfa644279096cb31bd408a071c2e99ca7209c3cafe \
python3 -m sglang.launch_server \
--trust-remote-code \
--model-path RadixArk/Qwen3.8-27B-NVFP4-BF16-LMHead \
--revision 009632fef96dd349150baa780c984e62e70e91fe \
--served-model-name qwen38-dev \
--context-length 262144 \
--tp-size 1 \
--host 127.0.0.1 \
--port 30000 \
--mem-fraction-static 0.60 \
--kv-cache-dtype auto \
--attention-backend flashinfer \
--chunked-prefill-size 2048 \
--max-running-requests 4 \
--mamba-radix-cache-strategy extra_buffer_lazy \
--mamba-ssm-dtype float32 \
--max-mamba-cache-size 16 \
--cuda-graph-max-bs-decode 4 \
--disable-prefill-cuda-graph \
--speculative-algorithm DFLASH \
--speculative-draft-model-path incoai/Qwen3.8-27B-DFlash2 \
--speculative-draft-model-revision dedf8df68adfb1afeaf7b7480c0a0243108177b4 \
--speculative-num-draft-tokens 8 \
--speculative-draft-model-quantization unquant \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--enable-metrics \
--enable-cache-report \
--sleep-on-idle
The tested startup loaded 22.68 GB for the target and 3.64 GB for the draft. It allocated 19.48 GB of FP8 target KV cache and 12.18 GB of BF16 draft KV cache for 638,179 tokens, then reported 41.52 GB available after CUDA graph capture. End-to-end engine startup took 165.2 seconds. The 638,179-token pool is shared across active requests; four configured running requests do not mean four simultaneous 262,144-token contexts.
Check health and the served model before connecting an interface. Then run a bounded acceptance task that must read once, edit once and verify the diff. Stop if the same tool request repeats, if no edit appears, or if the harness changes the requested model name.
curl -fsS http://127.0.0.1:30000/health
curl -fsS http://127.0.0.1:30000/v1/models
Once the loopback SGLang endpoint is proven, run the ordinary Open WebUI image and connect it to the private OpenAI-compatible URL. Keep the open-webui application volume; retire the bundled-Ollama image and its model volume only after exporting anything you still need.
A user service can be active while capture and every encoder probe fail. Fix the graphical-session environment first, select the connected numeric Sunshine display ID, then judge success from encoder discovery.
| Concept | What it provides | What it does not provide |
|---|---|---|
| Physical-monitor mode | A real connected output in a logged-in GNOME X11 desktop. | A desktop before the user logs in. |
| Virtual/headless mode | An Xorg virtual display without an HDMI dummy plug. | A desktop session by itself; GDM autologin or another session creator is still required. |
| User-manager lingering | A systemd user manager before login. | An X server, GNOME desktop or capturable display. |
| Graphical autologin | An unattended X11 desktop after boot. | The same local-login security as an interactive sign-in; enable it deliberately. |
Run these commands in a terminal inside the logged-in GNOME desktop. A plain SSH shell may not carry the graphical values.
echo "$XDG_SESSION_TYPE"
echo "$DISPLAY"
echo "$XAUTHORITY"
xrandr --listmonitors
systemctl --user show-environment |
grep -E '^(DISPLAY|XAUTHORITY|XDG_SESSION_TYPE)='
Continue only with the display belonging to the logged-in X11 desktop. GDM can use :0 for its greeter and :1 for the user session. Never force either value in generic instructions.
Add this exact line to ~/.xprofile, then run it once from the current graphical terminal:
dbus-update-activation-environment --systemd DISPLAY XAUTHORITY
Remove every hardcoded Environment="DISPLAY=..." shown by systemctl --user cat sunshine.service. In the user-service drop-in, keep the session ordering and replace any old pre-start check with this one:
[Unit]
After=graphical-session.target
Wants=graphical-session.target
StartLimitBurst=5
StartLimitIntervalSec=60
[Service]
ExecStartPre=
ExecStartPre=/bin/sh -c 'i=0; while [ "$$i" -lt 60 ]; do env="$$(systemctl --user show-environment)"; printf "%%s\n" "$$env" | grep -q "^DISPLAY=" && printf "%%s\n" "$$env" | grep -q "^XAUTHORITY=" && exit 0; i=$$((i + 1)); sleep 1; done; echo "DISPLAY/XAUTHORITY not available in systemd user environment" >&2; exit 1'
The format string must be %%s. systemd treats a single % as a specifier, so %s can be expanded before the shell sees it.
Back up ~/.config/sunshine/sunshine.conf. Remove resolutions, nvenc_tuning_info, bitrate, channels, nvenc_multipass, nvenc_rc, fps and codec when the tested release reports them as unrecognized. Set requested resolution, frame rate, bitrate and codec in Moonlight. Preserve site-specific csrf_allowed_origins locally.
adapter_name = /dev/dri/renderD128
capture = x11
encoder = nvenc
min_threads = 2
nvenc_preset = 1
nvenc_spatial_aq = 1
nvenc_twopass = quarter_res
nvenc_vbv_increase = 0
output_name = <numeric ID reported as connected>
qp = 20
journalctl --user -u sunshine.service -n 200 --no-pager |
grep "Detected display"
Choose the numeric id: <N> on the row that says connected: true. Do not copy an example number, assume HDMI is ID 0, or use a connector string such as USB-C-2; the reproduced Sunshine build converted that string into an invalid display number.
systemctl --user daemon-reload
systemctl --user enable sunshine.service
systemctl --user restart sunshine.service
systemctl --user is-enabled sunshine.service
systemctl --user is-active sunshine.service
journalctl --user -u sunshine.service --since "2 minutes ago" --no-pager |
grep -E \
"Detected display|Configuring selected display|Found .*encoder|System tray|Fatal|Unable to"
Success means the connected ID is selected and the log finds h264_nvenc, hevc_nvenc and av1_nvenc. If cuda::cuda_t doesn't support any format other than AV_PIX_FMT_NV12 appears during probing but all three encoders are found afterward, it is not the startup failure.
The standalone Markdown begins with read-only discovery, backs up the existing service and configuration, defines stop conditions for an AI operator, includes the exact systemd escaping, and ends with rollback plus log-based acceptance checks.
NVIDIA publishes PyTorch and NeMo fine-tuning playbooks for Spark. Their example model sizes describe tested recipes, not universal capacity or speed guarantees.
| Question | First method | NVIDIA Spark example | Artifact to keep | Gate |
|---|---|---|---|---|
| Does the data pipeline work? | Small LoRA run | 8B LoRA path | Adapter + run manifest | Loss is sane and sample outputs improve without obvious memorization. |
| Can a larger model learn the behavior? | LoRA or QLoRA | 70B LoRA / 70B QLoRA paths | Adapter, tokenizer config and holdout results | Beats the unchanged base model on the untouched test set. |
| Is full-weight training justified? | Full SFT only after adapter evidence | 3B full SFT path | Checkpoint + reproducible environment | Material gain over LoRA, retention tests pass and operating cost is acceptable. |
Run the gateway on the most reliable machine you already own: WSL 2 on Windows, a launchd service on macOS, or a systemd user service on Linux. Keep it loopback-bound, use a small local model or hosted endpoint and operate it from the same companion, browser and messaging surfaces. This proves the workflow; it does not reproduce Spark's unified memory or sustained service role.
Power, unified memory, networking, remote access and troubleshooting answers checked against current NVIDIA documentation.
Budget for the included 240W power supply. NVIDIA specifies a 140W TDP for the GB10 SoC and reserves 100W for ConnectX-7, Wi-Fi, storage, USB-C and other system components. Its EU technical disclosure reports 233.2W maximum and 38W idle under the stated test method. The power shown by nvidia-smi is not whole-system power at the wall.
nvidia-smi report “Memory-Usage: Not Supported”?This is expected. DGX Spark’s integrated GPU shares unified system memory instead of having dedicated framebuffer memory, so nvidia-smi does not provide the usual aggregate VRAM-usage field. Use top, htop, free -h or DGX Dashboard for system-memory monitoring. Open the dashboard locally at http://localhost:11000; remote access needs NVIDIA Sync or an SSH tunnel.
Unified-memory applications can report less allocatable memory than the system can reclaim, and some software does not yet account correctly for swap or cache. Start with free -h, the process allocations and swap use. Linux normally reclaims clean cache automatically. For a controlled diagnostic only, not routine memory management, sync writes and drop reclaimable cache with:
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
Dropping caches can create significant I/O and CPU work; stop the affected workload first and remeasure before treating cache as the cause.
A stale SSH Host alias may remain. Back up the file, remove only the exact stale Host block, then add the device again. Current Sync documentation uses ~/.ssh/config on macOS and Ubuntu and C:\Users\<username>\.ssh\config on Windows. Older Sync builds may also have a managed file at the paths below.
Windows: C:\Users\<username>\AppData\Local\NVIDIA Corporation\Sync\config\ssh_config
macOS: /Users/<username>/Library/Application Support/NVIDIA/Sync/config/ssh_config
Linux: /home/<username>/.config/NVIDIA/Sync/config/ssh_config
Review NVIDIA Sync SSH aliases →
No. DGX Spark’s unified-memory architecture does not support GPUDirect RDMA, nvidia-peermem, dma-buf or GDRCopy for CUDA device allocations. A portable application should query CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED and CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORT, then use a supported fallback. For Linux ibverbs applications, NVIDIA suggests cudaHostAlloc memory registered with ibv_reg_mr.
Connect Ethernet first. Try the Spark’s spark-hostname.local address; if mDNS is unavailable, find its wired IP in the router. Connect with NVIDIA Sync or SSH, identify the Wi-Fi device, join the new network without putting the password in shell history, and note the Wi-Fi address before unplugging Ethernet:
nmcli device status
sudo nmcli --ask device wifi connect "<wifi-name>"
ip -4 address show
CUDA sources built through CMake can miss OpenMP compiler support. Pass -Xcompiler=-fopenmp for CUDA compilation, rebuild and remeasure the CPU-bound section.
# CMakeLists.txt
target_compile_options(mytarget PRIVATE
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-fopenmp>
)
# Command line
nvcc -Xcompiler=-fopenmp ...
NVIDIA DGX Spark compiling guide →
There is no documented user reset for a lost firmware Administrator password. Contact NVIDIA hardware support for a Founders Edition system or the device manufacturer for an OEM model. Do not assume that an OS recovery or “Restore Defaults” in UEFI clears the security credential.
lspci?The January 2026 DGX OS release added ConnectX-7 hot-plug power management. With it enabled, the adapter can stay powered down until a QSFP cable is inserted, saving up to 18W. Connecting the cable activates the adapter and increases system power and temperature. To keep ConnectX-7 active without hot-plug power saving, remove the marker; recreate it to re-enable the feature:
sudo rm -f /etc/nvidia/cx7-hotplug-enabled
sudo touch /etc/nvidia/cx7-hotplug-enabled
NVIDIA January 2026 release note →
Current NVIDIA Sync supports two or three systems with direct 200 Gb/s QSFP cabling, or up to four systems through a switch. Use an approved cable and the NVIDIA Sync Cluster Assistant or the matching two-node, three-node or switched NVIDIA playbook; four devices are not supported as a direct-cabled topology.
Keep the agent on the server. Grant every client capability separately.