Kimi-K3.1-Pro
Serve Kimi-K3.1-Pro with Dynamo using vLLM or SGLang.
Serve moonshotai/Kimi-K3.1-Pro with NVIDIA Dynamo using vLLM or SGLang. Pick your framework, GPU, and serving topology; deployment commands update to match. SGLang targets are experimental, text-only, and functional-only; no performance claims are made.
Choose your deployment target
Prerequisites
- A Kubernetes cluster with the Dynamo platform installed and 8 GB300 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 24 GB300 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 8 GB300 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 16 GB300 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 16 B200 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 16 VR200 GPUs available. See the Kubernetes Deployment Guide.
- A Kubernetes cluster with the Dynamo platform installed and 24 VR200 GPUs available. See the Kubernetes Deployment Guide.
- A Hugging Face token with access to
moonshotai/Kimi-K3.1-Pro. - Access to the runtime images referenced by the selected manifest.
- The NVIDIA DRA driver with ComputeDomain support for multi-node NVLink serving. Every GB300 and VR200 manifest includes a ComputeDomain and worker channel claims.
Create the namespace and token secret:
Review storage paths, node placement, registry credentials, and resource claims before applying the selected manifest.
Deploy
Create the shared model cache and download the main and draft checkpoints:
Edit storageClassName in recipes/kimi-k3.1-pro/model-cache/model-cache.yaml to a ReadWriteMany class on your cluster before you apply it.
The download Job populates the Hugging Face cache with moonshotai/Kimi-K3.1-Pro and Inferact/Kimi-K3-DSpark, using HF_HOME=/shared-model-cache. Workers resolve these Hugging Face IDs offline from the same PVC. To change the checkpoints, update MODEL_NAME and DRAFT_MODEL_NAME in the Job and the corresponding worker settings.
The B200 worker uses the draft checkpoint downloaded by the Job.
Both VR200 topologies use the draft checkpoint downloaded by the Job and mount shared-model-cache only in the workers; frontends do not mount the PVC.
Deploy the selected DynamoGraphDeployment (DGD):
For image and video input, apply the multimodal overlay instead:
For image and video input, apply the multimodal overlay instead:
Each target’s Kustomize overlay produces the corresponding manifest above. Customize node placement and registry credentials for your cluster before deployment; the published manifests do not include node selectors, tolerations, or image pull secrets.
B200 and VR200 targets enable DSpark with natural acceptance. Their manifests include a commented synthetic-acceptance alternative for benchmarking.
Smoke Test
The deploy command sets DGD to the selected resource name. Wait for readiness and forward the frontend port:
Send a chat completion with the served model name moonshotai/Kimi-K3.1-Pro:
Benchmark
Use perf.yaml to run AIPerf 0.13.0 against the deployment. It runs aiperf profile with the chat endpoint type and streaming on the AgentX agentic trace (semianalysis_cc_traces_weka_062126), scenario inferencex-agentx-mvp, with an agentic warmup and a 1200 s profiling phase. The tokenizer is resolved by Hugging Face ID with HF_HOME=/shared-model-cache.
The performance results use text-only AgentX traffic. For B200 and VR200 benchmarking, edit the selected target’s kustomize/base/deploy.yaml: uncomment both lines of the synthetic SPECULATIVE_CONFIG alternative and comment out both lines of the active natural-acceptance entry. Keep exactly one active entry per worker; update both prefill and decode for disaggregated VR200. Regenerate and apply the selected manifest before running AIPerf:
Wait for the replacement workers to become Ready before measuring. Restore natural acceptance, regenerate, and reapply the manifest before returning to normal serving.
The synthetic acceptance length of 3.84 was measured offline on the SpeedBench (qualitative) coding subset using the same DSpark draft length as this recipe: 7 draft tokens. The AgentX dataset and scenario above describe the throughput benchmark, not the offline acceptance-length measurement.
Set these values in the Job env section for your target:
ENDPOINT: the frontend Service of the DynamoGraphDeployment,${DGD}-frontend:8000(substitute the selected deployment name).CONCURRENCY: GB300 uses 32 for vLLM aggregated and 48 for disaggregated. Reported VR200 points use 180 for aggregated and 174 for disaggregated; B200 uses 48.
The benchmark Job uses the same shared-model-cache PVC and tokenizer files as the deployment.
Results are written to /shared-model-cache/perf/<epoch>_<job-name>/. Restart the workers between independent runs to reset KV-cache and routing state.
Optimization Targets
The AgentX benchmark targets use the following interactivity goals:
Performance Results
All results below measure text-only traffic; the selected target is highlighted. B200 and VR200 use synthetic draft acceptance (AL 3.84); GB300 has speculative decoding disabled.
Compare All Targets
GPU counts below describe the checked-in manifests. P counts prefill workers; D counts decode workers.
Notes
- SGLang targets are experimental, text-only, and functional-only. No SGLang performance claims are made. Use the vLLM multimodal overlays for image and video input.
- Synthetic draft acceptance is for benchmarking. Keep the natural-acceptance configuration active for normal serving.
- Disaggregated performance depends on your fabric; RDMA tuning is cluster-specific.
Source
-
Deployment assets: Kimi-K3.1-Pro recipes
-
Setup assets: model-cache.yaml and model-download.yaml
-
Benchmark manifest: perf.yaml
-
B200 aggregated: deployment manifest
-
VR200 aggregated: deployment manifest
-
VR200 disaggregated: deployment manifest