Overview
ModelExpress (MX) is a component from the NVIDIA Dynamo project that sits next to an existing inference server and answers one question before a model loads: where does a compatible copy of these weights already live? Instead of treating every replica as an independent cold start, it discovers available sources and picks the fastest supported path into GPU memory — a peer-to-peer RDMA transfer from a replica that is already serving, a server-side cache, InstantTensor from local safetensors, a concurrent ranged fetch through ModelStreamer, GPUDirect Storage, or the engine's own loader as a fallback. The first applicable strategy runs; if one fails before changing model state it moves to the next, and it reinitialises the model rather than serve a partially loaded one.
It also transfers the JIT compilation caches that dominate warmup — compatible vLLM and SGLang TorchInductor, Triton, DeepGEMM, TileLang, CuTe DSL and FlashInfer caches move from a ready replica instead of being rebuilt. The published benchmark: DeepSeek-V4-Pro weights loaded from a serving replica in 11 seconds, a 48× speedup over the 8m 53s cold Hugging Face pull in the same environment, and process-start-to-API-ready cut from 8m 01s to 1m 44s (4.6×), measured with vLLM 0.23.0 at TP=8 on an 8×B200 node with ConnectX-7 NICs.
The control plane brokers metadata only — through Redis, Kubernetes CRDs, or a decentralised `k8s-service` backend — while weight bytes move directly between the source and the target on the data plane. Integrations are native where possible: `--load-format modelexpress` in vLLM 0.23.0+, SGLang's `remote_instance` loader with the `modelexpress` backend, `checkpoint_format="MX"` in TensorRT-LLM (beta, Llama family), the Dynamo vLLM and SGLang runtimes, and an upstream llm-d baseline integration. It ships a Helm chart, CRDs and a Rust CLI, and is Apache-2.0.
What it does
- Fixed loading-strategy chain — P2P RDMA → server cache → InstantTensor → ModelStreamer → GPUDirect Storage → native loader — with safe fallback at each step
- GPU-to-GPU weight transfer over NVIDIA NIXL across InfiniBand, RoCE, NVLink and EFA; each new replica joins the source pool
- JIT kernel-cache transfer for vLLM and SGLang, so scale-out does not rebuild compilation caches
- Metadata backends: Redis, Kubernetes CRD, or decentralised Kubernetes Service routing — weight bytes never pass through the server
- Model pull providers beyond Hugging Face: NGC catalog and Google Cloud Storage, plus S3, Azure Blob and local paths via ModelStreamer
- Kubernetes deployment with a Helm chart, CRDs, PVC-backed Hugging Face cache and init-container pre-warming
- Rust CLI for health, download, list, validate and clear operations
Getting started
ModelExpress runs as a server plus a client that plugs into your inference engine. The fastest way to see it work is to switch vLLM's load format.
Point vLLM at ModelExpress
vLLM 0.23.0 and later carry the loader natively; older versions use the ModelExpress plugin. With a compatible replica already serving, weights and JIT caches transfer peer-to-peer rather than being reloaded.
vllm serve <model> --load-format modelexpressOr use the SGLang backend
SGLang's `remote_instance` loader takes `modelexpress` as its backend, with `transport=nixl` or `transport=transfer_engine`. The nixl transport also carries JIT caches.
# see docs/SGLANG.md in the repository for the full flag set
--load-format remote_instance --remote-instance-backend modelexpress --transport nixlOr set the TensorRT-LLM checkpoint format
TensorRT-LLM support is beta and covers the Llama family.
checkpoint_format="MX"Deploy the server on Kubernetes
The repository ships a Helm chart and CRDs, plus `examples/p2p_transfer_k8s/` and `examples/dynamo_p2p_transfer_k8s/` as working references. Configuration and the strategy chain are documented in docs/CONFIGURATION.md.
Commands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Reach for it when autoscaling an LLM service and each new replica spends minutes pulling the same weights
- Reach for it when JIT warmup, not the weight download, is what dominates your time-to-first-request
- Reach for it when many nodes need one model and you would rather not multiply external egress from Hugging Face or S3
- Reach for it when you have RDMA fabric between GPUs and want to use it for model loading, not just inference traffic
How ModelExpress compares
ModelExpress alongside other open-source serving & deployment tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Transformers | ★ 165k | Hugging Face Transformers is a Python framework that defines and runs state-of-the-art pretrained models for text, vision, audio, and multimodal tasks, for both inference and training. |
| vLLM | ★ 91.4k | A high-throughput LLM serving engine that uses PagedAttention and continuous batching to serve many requests at once. |
| SGLang | ★ 35.8k | A serving framework for LLMs and multimodal models that boosts throughput by reusing shared prompt prefixes across requests. |
| Modular Platform | ★ 29.7k | Modular's AI platform: the MAX inference framework with an OpenAI-compatible serving endpoint and GPU kernel library, plus the Mojo language and compiler. |
| TensorRT-LLM | ★ 14.6k | NVIDIA's library that compiles LLMs into optimized engines for the fastest inference on its data-center GPUs. |
| OpenLLM | ★ 12.5k | A tool to run any open-source LLM as an OpenAI-compatible API endpoint locally or in the cloud. |
| LMCache | ★ 11.7k | A KV-cache layer that stores and shares cached attention state across engines and requests to cut repeated computation. |
| ModelExpress | ★ 147 | A sidecar for inference servers that finds the fastest available copy of a model's weights and moves it into GPU memory, instead of cold-loading from storage |