Deploying Self-Hosted n8n AI Workflows on NVIDIA DGX Spark with Zero Cloud APIs
What changed
n8n has detailed a design pattern for deploying a fully air-gapped, self-hosted AI architecture on an NVIDIA DGX Spark desktop workstation. The setup serves multiple local models behind a unified LiteLLM proxy, allowing standard n8n OpenAI nodes to execute multimodal tasks—such as call transcription, document extraction, text generation, and image generation—without transmitting data to external cloud APIs.
The deployment relies on the DGX Spark’s GB10 Grace Blackwell Superchip, which features 128GB of unified memory shared between the CPU and GPU (with Linux reporting roughly 121GB of total available memory) and a memory bandwidth of 273 GB/s.
To keep all required models simultaneously loaded in unified memory, the architecture pairs lightweight specialized models with a single primary Mixture-of-Experts (MoE) LLM for all text, vision, and reasoning jobs. All models in the stack carry permissive commercial licenses (Apache 2.0 or MIT):
- Primary LLM/Vision/Coding:
nvidia/Qwen3.6-35B-A3B-NVFP4(Apache 2.0; 35B total parameters, ~3B active parameters per token) - Embeddings:
Qwen/Qwen3-Embedding-4B(Apache 2.0) - Reranking:
Qwen/Qwen3-Reranker-0.6B(Apache 2.0) - Speech-to-Text:
openai/whisper-large-v3-turbo(MIT) - Document OCR:
zai-org/GLM-OCR(MIT) - Image Generation:
Tongyi-MAI/Z-Image-Turbo(Apache 2.0) - Text-to-Speech:
hexgrad/Kokoro-82M(Apache 2.0)
In testing on the DGX Spark, the main Qwen3.6-35B-A3B-NVFP4 model delivered 120 tokens per second for a single user and 359 tokens per second total across eight concurrent users (inclusive of model reasoning tokens).
Why it matters
For organizations operating under strict legal, regulatory, or privacy mandates—such as law firms, accounting practices, and healthcare clinics—sending customer data to cloud API providers introduces compliance risks and data sovereignty issues. Self-hosting the entire AI stack on local hardware ensures data remains strictly within physical premises and under internal audit control.
From an automation architecture standpoint, routing all models through a single LiteLLM gateway exposes an OpenAI-compatible endpoint. This allows teams building custom automation workflows or configuring dedicated agents to point n8n directly to local IP addresses while enforcing per-team API keys and rate management.
What to do next
Practitioners looking to replicate this air-gapped setup on a DGX Spark should follow these configuration steps:
- Pre-cache and lock models: Download models locally using the
huggingface_hubCLI and save specific commit hashes into amodels.lockfile. Start containers using the--revisionflag referencing these commits to guarantee offline execution and protection against upstream license or weight modifications. - Pin vLLM container versions: Use the official
vllm/vllm-omni:v0.30.0arm64 container rather than unpinned floating tags (likecu130-nightly, which can lock to older vLLM releases that fail to parse newer Qwen model architectures). Becausevllm-omnidoes not usevllm serveas its default entrypoint, wrap the container with a custom Dockerfile. - Optimize serving parameters: Serve the primary LLM container using explicit memory and kernel flags:
- Set
--gpu-memory-utilization 0.32to cap the LLM at ~32% of unified memory, leaving room for background services (Whisper, OCR, TTS, image generation). - Enable
--kv-cache-dtype fp8to halve the memory overhead of the KV cache. - Set
--moe-backend marlinfor quantized expert layers. - Enable speculative execution using multi-token prediction via
--speculative-config '{"method":"mtp","num_speculative_tokens":3,"moe_backend":"triton"}'. - Specify
--reasoning-parser qwen3and--tool-call-parser qwen3_xmlto handle tool calls and reasoning outputs cleanly.
- Set
Limitations and caveats
While NVFP4 quantization reduces memory weight transfer overhead by storing weights in 4-bit format via the Marlin kernel (MarlinNvFp4LinearKernel), current vLLM builds on the GB10 chip perform mathematical operations in 16-bit precision rather than native FP4 computation. Additionally, initial cold startup times for the primary LLM container take approximately 311 seconds before serving endpoints become fully available.
Sources
Share Article
If this article helped you, please share it with others!