Managing Multiple vLLM Models on DGX Spark with LiteLLM

While experimenting with DGX Spark, I found that running models with vLLM is fairly straightforward, but managing multiple local models becomes repetitive very quickly.

Most of my use cases require switching between different models depending on the task. For RAG, I typically need both an inference model and a prompt guard model. For coding, I use a dedicated coding model. Running all of these simultaneously is often not practical on a single Spark due to memory constraints, so I ended up maintaining a collection of Docker command lines and manually starting and stopping models as needed.

This quickly became tedious and error-prone, so I built a small LiteLLM / NVIDIA vLLM Docker orchestrator.

The goal of this project is not to provide another inference engine or orchestration platform, but rather a thin management layer around LiteLLM and vLLM that:

  • defines models once in a configuration (config.yaml + .env)
  • starts and stops model containers consistently
  • reuses existing containers whenever possible
  • provides access to logs without relying on tmux or manual Docker commands
  • keeps secrets separate from model parameters
  • exposes everything through a single OpenAI-compatible LiteLLM endpoint

An additional goal was consistency: the same commands, parameter names, and model aliases regardless of which model is being deployed.

On a single DGX Spark, this has proven useful for experimenting with different models and serving configurations while keeping operational overhead low. The project is essentially a convenience tool for local inference workflows rather than a production orchestration system.

Repository:

harinezumigel-llm-stack

I’m posting it mainly to compare approaches with others running multi-model setups on Spark. I’m particularly interested in how people handle:

  • model lifecycle management
  • port allocation
  • container reuse
  • switching between models when GPU memory is the limiting resource
  • routing requests between local models

I would also be interested to know whether others solved this with custom scripts, tmux/screen sessions, Kubernetes, Docker Compose, llama-swap, or some other approach.

Yo, this is solid. Switching between inference, coding, guard, and RAG models gets painful real quick with the memory limits.

I built Spark Studio to handle a lot of what you’re describing (model management, clean switching, consistent endpoints, container orchestration). It’s been a game changer for my workflows.

Repo is private right now, but I can share access if you’re interested. How are you handling hot swapping when VRAM gets tight?

I would love to try out Spark Studio - this is exactly what I’ve been looking for.

I would also love to try out Spark Sudio. The model stack switching is a major issue particually for vLLM. One of the reasons I love atlas is the fast loading of models.

I would also like to try Spark Studio

Thanks

Mike

Very interested to try your Spark Studio

Thanks for the interest, I just said F that and made it public, let me know what you think: Check out the post: Spark Studio — Open-source inference dashboard for DGX Spark - DGX Spark / GB10 User Forum / DGX Spark / GB10 - NVIDIA Developer Forums

Honestly I don’t manage / calculate VRAM usage. My use case is running either guard + inference on Spark or a coder model.
For my RAG framework, mistral_7b and llama_guard3_8b fit nicely into the Spark VRAM.
When I need the coding LLM I fire this up on the Spark. On my development machine I have a Tesla T4 that runs mistral and llama guard.

To answer your question: It is up to the user to test what model(s) fit into VRAM. Actually, finding out took me a bit of time. So users might be interested in the models defined in the config.yaml file.

I had a look at your repo and it is very interesting. Thank you for sharing. You got a star.

I built something similar for myself too. GitHub - kshetrajna12/sparkstation: Unified LLM orchestration and gateway service for DGX Spark — dynamically manages vLLM, SGLang, and TensorRT-LLM backends under a single OpenAI-compatible API. · GitHub If anyone is interested.

Thanks. Star for a Star :)