Inference Engines

Framework-centric inference serving examples on AWS, organized by engine (vLLM, SGLang, NVIDIA Dynamo)

View on GitHub

Overview

This collection provides framework-centric inference examples on AWS, organized by serving engine. Each example deploys a modern LLM or VLM serving stack β€” with options for high-performance EFA networking, expert-parallel all-to-all communication, and disaggregated prefill/decode KV-cache transfer β€” across Amazon EKS, SageMaker HyperPod EKS, and EC2.

Available engines and test cases

EngineExampleDescription
vllmdsv3-uccl-nixlDeepSeek-V3 disaggregated (prefill/decode) inference with vLLM, UCCL-EP, and NIXL on EKS
vllmcosmos-reasonNVIDIA Cosmos Reason physical-reasoning VLM served by vLLM on EKS / SageMaker HyperPod EKS
sglangdsr1-deepep-efaDeepSeek-R1 on p5/p5en (EC2 + Docker) with DeepEP MoE all-to-all over NVSHMEM-libfabric/EFA β€” colocated and 2P2D PD-disaggregated
nvidia-dynamonvidia-dynamoNVIDIA Dynamo (SGLang backend) on SageMaker HyperPod EKS β€” aggregated and PD-disaggregated serving via the Dynamo operator
sglangqwen3.5-27b-b300-intra-pdQwen3.5-27B with intra-node prefill/decode disaggregation on a single B300 node
sglangkimi2.6-h200-1p1dKimi2.6 with node-level 1-prefill / 1-decode disaggregation across two H200 nodes
sglangdsv4pro-b300-single-nodeDeepSeek V4 Pro unified (non-PD) serving on a single B300 node
sglangdsv4flash-b300-intra-3p1dDeepSeek-V4-Flash with intra-node 3-prefill / 1-decode disaggregation (tp=2 each) on a single B300 node
sglangglm5.2-b300-tp2-dp4GLM-5.2 (NVFP4) as 4Γ— independent tp=2 engines behind an SGLang router on a single B300 node

More engines (TRT-LLM, NIM, Ray Serve, and others) are planned.

vLLM

vLLM is a high-throughput, OpenAI-API-compatible LLM serving engine. The samples deploy vLLM on AWS for inference workloads, with options for:

  • High-performance EFA networking
  • Expert-parallel all-to-all (UCCL-EP)
  • Disaggregated prefill/decode KV-cache transfer (NIXL)

DeepSeek-V3 disaggregated inference (dsv3-uccl-nixl)

This sample serves DeepSeek-V3-0324 (671B parameters, 256 experts, top-8 routing, MLA) with disaggregated prefill / decode across multiple p5en.48xlarge (8Γ—H200) nodes on Amazon EKS or SageMaker HyperPod EKS, using:

  • vLLM 0.21.0 for OpenAI-compatible serving
  • UCCL-EP (deepep_high_throughput, deepep_low_latency) for MoE expert-parallel all-to-all over EFA
  • NIXL (NVIDIA Inference Xfer Library) over LIBFABRIC for KV-cache transfer between prefill and decode pods
  • A simple Python proxy (toy_proxy_server.py shipped in vLLM) for routing

It benchmarks configurations from a single 8-GPU unified node up to a 6-node 1-prefill / 5-decode disaggregated topology, plus a UCCL-EP vs. AGRS (allgather_reducescatter) backend comparison.

Architecture

  • Prefill runs UCCL-EP deepep_high_throughput (high token/s under bursts)
  • Decode runs UCCL-EP deepep_low_latency (low TPOT, CUDA graphs)
  • NIXL transfers KV blocks from prefill β†’ decode over EFA via the LIBFABRIC backend
  • All pods run with hostNetwork: true so EFA / NIXL / NCCL can use the full 16-EFA, 3,200 Gbps fabric

Indicative results

Caveat. These numbers come from single-seed runs at --num-prompts 50. They are smoke-benchmark numbers, not statistically tight measurements. Treat the rankings as directionally informative, not as research findings. Source: the dsv3-uccl-nixl README.

ConfigNodesGPUsBurst RPSBurst tok/sP50 TPOT @1RPSP50 TPOT @bursttok/s/GPU
1N unified1813.493,45421.83ms44.00ms431.55
1P+1D21615.944,08220.93ms40.91ms255.10
1P+3D43217.224,40818.21ms33.76ms137.75
1P+4D54019.184,91017.81ms32.51ms122.75
1P+5D64817.164,39217.81ms30.34ms91.51
1P+3D AGRS43210.622,72123.30ms48.20ms85.03

Directional observations:

  1. Disaggregation pays off mostly in latency, not throughput. Unified has the best tok/s/GPU; disaggregation lowers burst TPOT roughly 44ms β†’ 30ms but only modestly increases peak RPS.
  2. The 1P:4D ratio appears to be the knee β€” beyond that, the single prefill node looks like the bottleneck.
  3. UCCL-EP outperforms AGRS for this MLA + 256-expert MoE model in these runs.

Prerequisites

  • Amazon EKS or SageMaker HyperPod EKS, version 1.33+ (1.33 added native EFA traffic in the default EKS security group)
  • 1–6 Γ— p5en.48xlarge GPU nodes (8Γ—H200 141GB, 16Γ—EFA, ~30 TB NVMe)
  • NVIDIA device plugin and EFA device plugin installed
  • (Recommended) FSx for Lustre PVC for the model cache, or local NVMe
  • Hugging Face token with access to deepseek-ai/DeepSeek-V3-0324
  • ~680 GB of fast storage for the FP8 weights cache

Key software versions: vLLM 0.21.0, UCCL commit 0dc87eb, NIXL v1.1.0, PyTorch 2.11.0 (cu130), Ray 2.55.1, EFA installer 1.48.0, NCCL v2.30.4-1. These pins, the EKS 1.33+ EFA note, and the results table are transcribed from the dsv3-uccl-nixl README; the Cosmos Reason image tags (vllm/vllm-openai:v0.21.0 for the plain-EKS path and the AWS DLC vllm:0.17-gpu-py312 for the HyperPod path β€” two distinct images) are from the cosmos-reason README. The upstream repo is forward-dated; these versions reflect the source as published.

NVIDIA Cosmos Reason (cosmos-reason)

Online inference reference for NVIDIA’s Cosmos Reason physical-reasoning Vision-Language Model, served by vLLM on Amazon EKS or SageMaker HyperPod EKS. Cosmos Reason generates chain-of-thought reasoning traces about safety, causality, object interactions, and spatiotemporal dynamics in videos and images β€” the building block for auto-labeling Synthetic Data Generation (SDG) pipelines, Reasoning VLA models, and video Q&A workloads.

This test case provides two parallel kubectl-only deployment paths, both serving the same model with the same vLLM CLI args:

PathPurpose
kubernetes/Plain EKS users with an existing vLLM deployment. No HyperPod required. Vendor vllm/vllm-openai:v0.21.0 image.
hyperpod-eks/HyperPod EKS clusters using the Inference Operator β€” auto KEDA + Karpenter scale-to-zero, managed KV cache, intelligent routing. AWS-managed vllm:0.17-gpu-py312 Deep Learning Container.

Supported models are parameterized via ${MODEL_ID}:

ModelBackboneMin GPU memoryRecommended --max-model-lenReasoning parser
nvidia/Cosmos-Reason1-7B (default for sm_8x)Qwen2.5-VL24 GB24576 / 32768None β€” <think> inline in content
nvidia/Cosmos-Reason2-2BQwen3-VL24 GB16384--reasoning-parser qwen3
nvidia/Cosmos-Reason2-8B (default for sm_9x)Qwen3-VL32 GB16384--reasoning-parser qwen3

Both paths expose an OpenAI-compatible /v1/chat/completions endpoint and ship example clients for image VQA, video VQA, and SDG auto-labeling. Video workloads require an expanded encoder cache; the kubernetes/ path (upstream vLLM v0.21.0) includes the necessary flags by default, while the HyperPod DLC path is recommended for image workloads.

SGLang

Multiple SGLang test cases cover DeepSeek-R1 on p5/p5en with DeepEP MoE all-to-all over NVSHMEM-libfabric/EFA, along with newer single-node and node-level prefill/decode disaggregation topologies on H200 and B300 hardware β€” spanning Qwen3.5-27B, Kimi2.6, DeepSeek V4 Pro/Flash, and GLM-5.2.

Each sample is self-contained: most are EKS / SageMaker HyperPod manifests applied with kubectl, while dsr1-deepep-efa runs directly on EC2 with Docker. Except for GLM-5.2 (which uses a digest-pinned dev-glm52-nvfp4 image for NVFP4 support), the manifest-applied samples serve on the upstream lmsysorg/sglang:v0.5.12.post1-cu130 image; Kimi adds an EFA layer on top for inter-node RDMA. See the dedicated SGLang inference examples for the full per-sample topology, images, and shared helpers (EFA image build, model pre-staging, metrics).

NVIDIA Dynamo

The nvidia-dynamo example serves models with NVIDIA Dynamo (SGLang backend) on SageMaker HyperPod EKS, supporting both aggregated and PD-disaggregated serving via the Dynamo operator. See examples/inference/nvidia-dynamo for deployment, benchmarks, and observability.

Source

All examples on this page are maintained in examples/inference in the awsome-distributed-ai repository.