# Kimi-K2-Thinking Usage Guide
[Kimi K2 Thinking](https://huggingface.co/moonshotai/Kimi-K2-Thinking/tree/main) is an advanced large language model created by [moonshotai](https://www.moonshot.ai/). It offers the following highlights:
- **Deep Thinking & Tool Orchestration**: End-to-end trained to interleave chain-of-thought reasoning with function calls, enabling autonomous research, coding, and writing workflows that last hundreds of steps without drift.
- **Native INT4 Quantization**: Quantization-Aware Training (QAT) is employed in post-training stage to achieve lossless 2x speed-up in low-latency mode.
- **Stable Long-Horizon Agency**: Maintains coherent goal-directed behavior across up to 200–300 consecutive tool invocations, surpassing prior models that degrade after 30–50 steps.
## Installing vLLM
```bash
uv venv
source .venv/bin/activate
uv pip install -U vllm --torch-backend auto
```
## Launching Kimi-K2-Thinking with vLLM
You can use 8x H200/H20 to launch this model. See sections below for detailed launch arguments for low latency and high throughput scenarios
Low Latency Scenarios
run tensor-parallel like this:
```bash
vllm serve moonshotai/Kimi-K2-Thinking \
--tensor-parallel-size 8 \
--enable-auto-tool-choice \
--tool-call-parser kimi_k2 \
--reasoning-parser kimi_k2 \
--trust-remote-code
```
The `--reasoning-parser` flag specifies the reasoning parser to use for extracting reasoning content from the model output.
High Throughput Scenarios
vLLM supports [Decode Context Parallel](https://docs.vllm.ai/en/latest/serving/context_parallel_deployment.html#decode-context-parallel), significant benefits in high throughput scenarios. You can enable DCP by adding `--decode-context-parallel-size number`, like:
```bash
vllm serve moonshotai/Kimi-K2-Thinking \
--tensor-parallel-size 8 \
--decode-context-parallel-size 8 \
--enable-auto-tool-choice \
--tool-call-parser kimi_k2 \
--reasoning-parser kimi_k2 \
--trust-remote-code
```
The `--reasoning-parser` flag specifies the reasoning parser to use for extracting reasoning content from the model output.
## Metrics
We tested the `GSM8K` accuracy of 2 types of launch scripts (TP8 vs TP8+DCP8)
- TP8
```bash
local-completions (model=moonshotai/Kimi-K2-Thinking,base_url=http://0.0.0.0:8000/v1/completions,tokenized_requests=False,tokenizer_backend=None,num_concurrent=32), gen_kwargs: (None), limit: None, num_fewshot: 5, batch_size: 1
|Tasks|Version| Filter |n-shot| Metric | |Value | |Stderr|
|-----|------:|----------------|-----:|-----------|---|-----:|---|-----:|
|gsm8k| 3|flexible-extract| 5|exact_match|↑ |0.9416|± |0.0065|
| | |strict-match | 5|exact_match|↑ |0.9409|± |0.0065|
```
- TP8+DCP8
```bash
local-completions (model=moonshotai/Kimi-K2-Thinking,temperature=0.0,base_url=http://0.0.0.0:8000/v1/completions,tokenized_requests=False,tokenizer_backend=None,num_concurrent=32,timeout=3000), gen_kwargs: (None), limit: None, num_fewshot: 5, batch_size: 1
|Tasks|Version| Filter |n-shot| Metric | |Value | |Stderr|
|-----|------:|----------------|-----:|-----------|---|-----:|---|-----:|
|gsm8k| 3|flexible-extract| 5|exact_match|↑ |0.9386|± |0.0066|
| | |strict-match | 5|exact_match|↑ |0.9371|± |0.0067|
```
## Benchmarking
We used the following script to benchmark `moonshotai/Kimi-K2-Thinking` on 8*H200.
```bash
vllm bench serve \
--model moonshotai/Kimi-K2-Thinking \
--dataset-name random \
--random-input 8000 \
--random-output 4000 \
--request-rate 100 \
--num-prompt 1000 \
--trust-remote-code
```
We separately benchmarked the performance of TP8 and TP8+DCP8.
### TP8 Benchmark Output
```shell
============ Serving Benchmark Result ============
Successful requests: 998
Failed requests: 2
Request rate configured (RPS): 100.00
Benchmark duration (s): 800.26
Total input tokens: 7984000
Total generated tokens: 388750
Request throughput (req/s): 1.25
Output token throughput (tok/s): 485.78
Peak output token throughput (tok/s): 2100.00
Peak concurrent requests: 988.00
Total Token throughput (tok/s): 10462.57
---------------Time to First Token----------------
Mean TTFT (ms): 271196.67
Median TTFT (ms): 227389.87
P99 TTFT (ms): 686294.46
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 381.29
Median TPOT (ms): 473.04
P99 TPOT (ms): 578.64
---------------Inter-token Latency----------------
Mean ITL (ms): 111.22
Median ITL (ms): 38.04
P99 ITL (ms): 490.93
==================================================
```
### TP8+DCP8 Benchmark Output
```shell
============ Serving Benchmark Result ============
Successful requests: 994
Failed requests: 6
Request rate configured (RPS): 100.00
Benchmark duration (s): 631.35
Total input tokens: 7952000
Total generated tokens: 438872
Request throughput (req/s): 1.57
Output token throughput (tok/s): 695.13
Peak output token throughput (tok/s): 2618.00
Peak concurrent requests: 988.00
Total Token throughput (tok/s): 13290.35
---------------Time to First Token----------------
Mean TTFT (ms): 227780.13
Median TTFT (ms): 227055.20
P99 TTFT (ms): 451255.55
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 398.60
Median TPOT (ms): 472.81
P99 TPOT (ms): 569.91
---------------Inter-token Latency----------------
Mean ITL (ms): 104.73
Median ITL (ms): 43.97
P99 ITL (ms): 483.37
==================================================
```
## DCP Gain Analysis
Furthermore we analyzed the gain achieved by DCP.
| Metric | TP8 | TP8+DCP8 | Change | Improvement(%) |
|--------|-------------|-------------|--------|---------------|
| Request Throughput(req/s) | 1.25 | 1.57 | +0.32 | +25.6% |
| Output Token Throughput(tok/s) | 485.78 | 695.13 | +209.35 | +43.1% |
| Mean TTFT (sec) | 271.2 | 227.8 | -43.4 | +16.0% |
| Median TTFT (sec) | 227.4 | 227.1 | -0.3 | +0.1% |
You can observe from the service startup logs that the kv cache token number has increased by 8 times.
- TP8
```shell
(Worker_TP0 pid=591236) INFO 11-06 12:08:54 [gpu_worker.py:349] Available KV cache memory: 46.80 GiB
(EngineCore_DP0 pid=591074) INFO 11-06 12:08:55 [kv_cache_utils.py:1229] GPU KV cache size: 715,072 tokens
```
- TP8+DCP8
```shell
(Worker_TP0 pid=666845) INFO 11-06 15:34:58 [gpu_worker.py:349] Available KV cache memory: 46.80 GiB
(EngineCore_DP0 pid=666657) INFO 11-06 15:34:59 [kv_cache_utils.py:1224] Multiplying the GPU KV cache size by the dcp_world_size 8.
(EngineCore_DP0 pid=666657) INFO 11-06 15:34:59 [kv_cache_utils.py:1229] GPU KV cache size: 5,721,088 tokens
```
Enabling DCP delivers strong advantages (43% faster token generation, 26% higher throughput) with minimal drawbacks (marginal median latency improvement). We recommend reading our [DCP DOC](https://docs.vllm.ai/en/latest/serving/context_parallel_deployment.html#decode-context-parallel) and trying out DCP in your LLM workloads.