A.X-K2
Serve A.X-K2 with Dynamo and vLLM on B200 or H200, aggregated or disaggregated.
Deploy SK Telecom’s A.X-K2 with NVIDIA Dynamo and vLLM. B200 targets use NVFP4 weights; H200 targets use FP8 weights. H200 targets use BF16 KV cache; B200 targets use FP8 KV cache. All use EAGLE3 with three speculative tokens.
Choose your deployment target
Prerequisites
- A Kubernetes cluster with the Dynamo platform installed.
- A ReadWriteMany storage class for model weights.
- A Hugging Face token with access to
skt/A.X-K2,skt/A.X-K2-NVFP4, andskt/A.X-K2-EAGLE3.
Each worker needs four B200 GPUs and 400 GiB of host memory: eight GPUs total for aggregated serving or twelve for disaggregated serving.
Each target needs four workers with eight H200 GPUs each (32 GPUs total). Each worker requests 512 GiB of host memory with a 768 GiB limit. Use a cluster overlay to bind H200 scheduling and expose your RDMA devices and network interfaces; the generic manifests do not supply site bindings.
For H200 results, use the benchmark configuration described below.
Disaggregated serving also requires InfiniBand with one rdma/shared_ib
device resource available per worker for NIXL/UCX KV transfer.
Deploy
Run commands from the repository root. Set CONTEXT and NAMESPACE to your
cluster context and namespace, and set HF_TOKEN to your Hugging Face token.
Create the namespace and token secret:
Set storageClassName in
model-cache.yaml
to your cluster’s ReadWriteMany storage class. Create the PVC and download
the three pinned checkpoints:
All profiles and the download job mount model-cache. To use an existing
populated PVC, set claimName in the job and selected deployment source to
that PVC and skip creating a new claim. Regenerate the selected manifest
after editing its Kustomize source.
Deploy two aggregate workers:
The manifest is generated from
Kustomize sources.
To change a setting, edit kustomize/base/deploy.yaml and regenerate:
Deploy two prefill workers and one decode worker:
The manifest is generated from
Kustomize sources.
To change a setting, edit kustomize/base/deploy.yaml and regenerate:
Deploy four aggregate workers after applying your cluster bindings to the Kustomize sources and regenerating the manifest:
Deploy two prefill workers and two decode workers after applying your cluster bindings to the Kustomize sources and regenerating the manifest:
Smoke Test
Wait for the selected deployment, then forward its frontend port:
In another terminal, verify model discovery and a completion:
Model discovery should list skt/A.X-K2-NVFP4; the completion should contain
a choices array. Reasoning uses the deepseek_v3 parser, and tool calling
uses the hermes parser.
In another terminal, verify model discovery and a completion:
Model discovery should list A.X-K2; the completion should contain
a choices array. Reasoning uses the deepseek_v3 parser, and tool calling
uses the hermes parser.
Benchmark
The AIPerf workflow replays an 8K-input / 1K-output chat trace with 70% KV reuse against the aggregated profile at concurrency 32. It preserves expanded configurations, raw reports, and frontend metrics. Keep the default real EAGLE3 acceptance configuration for accuracy evaluation.
Before starting the benchmark, follow the workflow’s
trace-staging instructions
to copy the Git LFS chat trace from your checkout onto the model-cache PVC.
The job reads it through TRACE_FILE and verifies its SHA-256 and request
counts before sending traffic.
The checked-in benchmark job targets the aggregate frontend. To benchmark the disaggregated profile, update its endpoint and frontend selector to this deployment before applying the job.
Performance Results
Benchmarking uses synthetic EAGLE3 acceptance length 2.12.
Configure the H200 AIPerf Job for the running deployment using the benchmark instructions.
Run with 32 H200 GPUs, 1.4.1-a.x-k2-post.1, FP8 weights, BF16 KV cache,
flashinfer_cutlass, FLASH_ATTN_MLA_SPARSE, and EAGLE3 k=3 with real
acceptance. The checked-in AIPerf Job uses different sweep settings from the
measurements below.
H200 Performance Results
Recommendation
- Low concurrency or TTFT-first: prefer aggregated serving; 2P2D has no throughput gain at c16.
- Throughput/TPOT-first: consider 2P2D at c64, with TTFT p50 of 1.63 seconds.
- Higher concurrency: prefer aggregated at c128; 2P2D has lower throughput and TTFT p50 of 28.19 seconds.
Compare All Targets
B200
H200
If model initialization runs out of memory, lower --max-model-len to 32768
on every worker.