Run DeepSeek V4 Flash on a DGX Spark pair
Two NVIDIA DGX Sparks connected by their QSFP cable can serve DeepSeek V4 Flash Vision Exp, the 305-billion-parameter reasoning and vision model, at its full 1,048,576-token context with six requests in flight at once. Sogni runs three such pairs in production; this page is the same deployment packaged for anyone who owns a pair.
The pair is one Sogni worker. The first Spark (the head) exposes the model and runs the Sogni sidecar; the second Spark (the worker rank) holds the other half of the model over the cable. Never register the second Spark as a separate worker.
This is sustained, memory-saturating GPU work on both machines. Each Spark holds about 110 GB of its 128 GB unified memory for the model, so nothing else can run on either Spark while the pair is serving. Review the operator responsibilities before installing.
#Requirements
- Two NVIDIA DGX Sparks running DGX OS (Ubuntu 24.04, ARM64), connected directly by the QSFP cable. Both Sparks must be able to reach each other over that link with private addresses you assign, for example 192.168.100.10 and 192.168.100.11.
- Docker Engine with Compose v2 and the NVIDIA Container Toolkit on both machines, with your user in the
dockergroup on both. - About 200 GB free on each Spark for the 157 GB checkpoint and caches, or only on the head if you choose the NFS option in the settings file.
- The same username on both Sparks and key-based SSH from the head to the worker rank that works without a prompt.
earlyoomdisabled on both machines. It cannot tell a healthy 110 GB model server from a memory leak and will kill it under load.- Internet access on the head for the one-time checkpoint download from Hugging Face. No Hugging Face account is needed; the model is published under the MIT license.
- One Sogni account with its API key and one Fast Worker NFT token ID for the pair.
The pair serves only DeepSeek V4 Flash Vision Exp. It does not serve the general LLM Worker catalog, and the regular Fast Worker installer refuses the LLM Worker choice on a DGX Spark for that reason.
#Install
Everything runs on the head Spark as your normal user. The installer, settings template and acceptance tests ship inside the sidecar image, so the first step is to extract them.
-
Extract the pair kit:
mkdir -p ~/sogni-dspark && docker run --rm --entrypoint tar \ sogni/sogni-llm-worker:deepseek-v4-flash-dspark-external-worker-1.0.19 \ -C /opt/llm/dspark-kit -cf - . | tar -xf - -C ~/sogni-dspark --one-top-level=kit -
Create your settings file and fill in every value. It holds your API key, so keep it private:
cp ~/sogni-dspark/kit/pair.env.example ~/sogni-dspark/pair.env chmod 600 ~/sogni-dspark/pair.env nano ~/sogni-dspark/pair.envThe file asks for the SSH target of the worker rank, the two cable addresses and port names, the cache path, and your Sogni credentials. Comments in the file explain how to find each value.
-
Check both machines before anything is changed:
~/sogni-dspark/kit/install-pair.sh preflightFix every line marked
FAILand run it again until it reportspreflight passed. -
Install:
~/sogni-dspark/kit/install-pair.sh allThis checks out the pinned serving recipe on both Sparks, pulls the pinned runtime image, downloads and verifies the checkpoint, and installs a background service that starts the pair and the Sogni sidecar. The download is 157 GB per Spark and takes as long as your connection allows. The first start compiles GPU kernels and takes 15 to 30 minutes; later starts take a few minutes.
-
Open dashboard.sogni.ai/fast-workers and confirm the NFT is online. The worker appears as one GB10 LLM worker.
To run each step yourself instead of all, use fetch, pull, weights, start, canary, sidecar and enable in that order. canary runs the same acceptance tests Sogni's own pairs passed before going live: a plain reply, a streamed reply, a tool call, an image, and six requests at once.
#Operate
| Task | Command on the head |
|---|---|
| State of the service, backend, containers and sidecar | ~/sogni-dspark/kit/install-pair.sh status |
| Follow the service | journalctl --user -u sogni-dspark-pair.service -f |
| Stop everything | ~/sogni-dspark/kit/install-pair.sh stop |
| Start again | systemctl --user start sogni-dspark-pair.service |
The service restarts the pair after a crash and after a reboot of either Spark. While the model is loading, the Sogni sidecar stays offline so the worker never advertises capacity it cannot serve.
#What the pair serves and earns
The worker serves deepseek-v4-flash-vision-exp-dspark-1m: text chat, reasoning, tool calling, structured output and image input, with a 1,048,576-token context and up to six requests at once. Requests come from Unlimited subscribers, Premium Spark and SOGNI-paid users; Free Spark is not accepted for this model. Token-paid jobs credit as they complete, and subscription jobs count toward subscription earnings once your account has opted in from the Workers dashboard.
The model is priced per token, so what a pair earns follows how busy the network is. At the current price and the request mix Sogni observed on its own pairs, a fully busy pair processes on the order of 600 requests an hour.
#Exact versions
Every pair on the network runs exactly the same checkpoint, runtime and serving settings, and the Sogni sidecar refuses to start if the backend it finds differs. The kit pins them for you; do not edit the rendered recipe settings by hand.
| Component | Version |
|---|---|
| Model | deepseek-ai/DeepSeek-V4-Flash-Vision-Exp, revision 86f746b3 |
| Serving runtime | vLLM 0.25.2.dev0+g752a3a504.d20260714 from ghcr.io/anemll/dspark-vllm-gx10:0.1.1 |
| Two-node recipe | MiaAI-Lab DeepSeek-v4-Flash-DSpark-2x-DGX-Spark, commit f3d76450 |
| Sogni sidecar | sogni/sogni-llm-worker:deepseek-v4-flash-dspark-external-worker-1.0.19 |
There is no floating latest tag for this image. When Sogni publishes a new pair version it is announced in the LLM Worker release notes; upgrade by extracting the new kit and running install-pair.sh all again. A version change may also change the model contract, in which case the previous version stops being accepted.
#Troubleshooting
preflightreports the RoCE device or interface is missing. Look atls /sys/class/infinibandandip -br addron that Spark and put the port that carries the cable address into the settings file. The two QSFP ports areenp1s0f0np0/rocep1s0f0andenp1s0f1np1/rocep1s0f1.- The backend never becomes healthy. Read
~/sogni-dspark/logs/startup.log. A line readingboot shape warmup incompletemeans the pair started but did not pass its own warm-up; the sidecar is deliberately kept offline. Stop, make sure nothing else is using memory on either Spark, and start again. - The sidecar says the backend does not match. The rendered recipe settings were changed, or a different image or checkpoint is being served. Run
install-pair.sh fetchto re-render the settings andinstall-pair.sh pullto restore the pinned image. - The pair goes offline after a reboot. Confirm
loginctl show-user $USER -p Lingerreportsyeson the head. Without lingering, user services only run while you are logged in. - Something else needs a Spark. Stop the pair first. It cannot share either machine.