Compare MTP steps and prefill batches; retain qualified MTP 2 baseline

This commit is contained in:
2026-09-18 23:22:45 +08:00
parent 918b78a3b8
commit c8bfe6b9ab
45 changed files with 3785 additions and 3 deletions
@@ -0,0 +1,46 @@
name: qwen38-flash-rtx6000d
services:
vllm:
image: local/qwen38-flash-6000d:0bfc7a15
build: .
container_name: qwen38-flash-6000d
gpus: all
shm_size: 8g
mem_limit: 210g
memswap_limit: 210g
restart: "no"
ports:
- "${BIND_ADDRESS:-127.0.0.1}:${API_PORT:-8000}:8000"
environment:
HF_HUB_OFFLINE: "1"
VLLM_USE_V2_MODEL_RUNNER: "1"
VLLM_WORKER_MULTIPROC_METHOD: spawn
OMP_NUM_THREADS: "8"
TORCHINDUCTOR_COMPILE_THREADS: "2"
CUTE_DSL_ARCH: sm_120a
volumes:
- /data/flash-next/models/nvidia-Qwen3.8-Flash-Next-NVFP4:/model:ro
- /data/flash-next/cache:/root/.cache
- ./secrets/api-key:/run/secrets/api-key:ro
entrypoint: ["/bin/bash", "-lc"]
command:
- >-
exec vllm serve /model
--served-model-name qwen3.8-flash-next
--host 0.0.0.0 --port 8000
--tensor-parallel-size 1 --dtype bfloat16
--engram-config '{"cpu_offload":true}'
--kv-cache-dtype fp8 --gpu-memory-utilization 0.985
--max-model-len 131072 --max-num-seqs 1 --max-num-batched-tokens 2048
--enable-chunked-prefill --enable-prefix-caching
--speculative-config '{"method":"mtp","num_speculative_tokens":1}'
--compilation-config '{"mode":0,"cudagraph_mode":"FULL","cudagraph_capture_sizes":[1,2]}' --no-enable-flashinfer-autotune
--load-format safetensors
--reasoning-parser qwen3 --tool-call-parser qwen3_xml --enable-auto-tool-choice
--api-key "$$(cat /run/secrets/api-key)"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5)"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30m
@@ -0,0 +1,24 @@
# HELP vllm:spec_decode_num_drafts_total Number of spec decoding drafts.
# TYPE vllm:spec_decode_num_drafts_total counter
vllm:spec_decode_num_drafts_total{engine="0",model_name="qwen3.8-flash-next"} 13297.0
# HELP vllm:spec_decode_num_drafts_created Number of spec decoding drafts.
# TYPE vllm:spec_decode_num_drafts_created gauge
vllm:spec_decode_num_drafts_created{engine="0",model_name="qwen3.8-flash-next"} 1.7897433982360141e+09
# HELP vllm:spec_decode_num_draft_tokens_total Number of draft tokens.
# TYPE vllm:spec_decode_num_draft_tokens_total counter
vllm:spec_decode_num_draft_tokens_total{engine="0",model_name="qwen3.8-flash-next"} 13297.0
# HELP vllm:spec_decode_num_draft_tokens_created Number of draft tokens.
# TYPE vllm:spec_decode_num_draft_tokens_created gauge
vllm:spec_decode_num_draft_tokens_created{engine="0",model_name="qwen3.8-flash-next"} 1.7897433982360315e+09
# HELP vllm:spec_decode_num_accepted_tokens_total Number of accepted tokens.
# TYPE vllm:spec_decode_num_accepted_tokens_total counter
vllm:spec_decode_num_accepted_tokens_total{engine="0",model_name="qwen3.8-flash-next"} 10374.0
# HELP vllm:spec_decode_num_accepted_tokens_created Number of accepted tokens.
# TYPE vllm:spec_decode_num_accepted_tokens_created gauge
vllm:spec_decode_num_accepted_tokens_created{engine="0",model_name="qwen3.8-flash-next"} 1.789743398236043e+09
# HELP vllm:spec_decode_num_accepted_tokens_per_pos_total Accepted tokens per draft position.
# TYPE vllm:spec_decode_num_accepted_tokens_per_pos_total counter
vllm:spec_decode_num_accepted_tokens_per_pos_total{engine="0",model_name="qwen3.8-flash-next",position="0"} 10374.0
# HELP vllm:spec_decode_num_accepted_tokens_per_pos_created Accepted tokens per draft position.
# TYPE vllm:spec_decode_num_accepted_tokens_per_pos_created gauge
vllm:spec_decode_num_accepted_tokens_per_pos_created{engine="0",model_name="qwen3.8-flash-next",position="0"} 1.7897433982360573e+09
@@ -0,0 +1,7 @@
{"name": "invoice-extraction", "passed": true, "elapsed_s": 1.6113444969960256, "response": {"id": "chatcmpl-b16e6f7979109685", "object": "chat.completion", "created": 1789743630, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"supplier\":\"North Star Ltd\",\"currency\":\"CNY\",\"total\":476,\"due_date\":\"2026-10-03\"}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "The user wants me to extract invoice data into JSON format. Let me parse the information:\n\n- Supplier: North Star Ltd\n- Currency: CNY\n- Rows: 3 items at 125 each = 375, 2 items at 48 each = 96\n- Shipping: 20\n- Discount: 15\n- Total: 375 + 96 + 20 - 15 = 476\n- Due date: 2026-10-03\n\nThe total must be an integer: 476\n\nKeys required: supplier, currency, total, due_date\n\nLet me format as JSON only.\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 90, "total_tokens": 275, "completion_tokens": 185, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 150}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "deduplicate", "passed": true, "elapsed_s": 2.2101684480003314, "response": {"id": "chatcmpl-b7a2d1e2b74737cb", "object": "chat.completion", "created": 1789743632, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"ids\":[\"A\",\"B\",\"D\"],\"total\":48}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "Let me process the orders step by step.\n\nInput orders:\n1. A pending 12\n2. B paid 20\n3. A paid 15\n4. C cancelled 99\n5. D paid 8\n6. B paid 25\n\nStep 1: Keep the last occurrence of each ID.\n- A: last occurrence is \"A paid 15\" (order 3)\n- B: last occurrence is \"B paid 25\" (order 6)\n- C: last occurrence is \"C cancelled 99\" (order 4)\n- D: last occurrence is \"D paid 8\" (order 5)\n\nStep 2: Discard cancelled orders.\n- C is cancelled, so discard it.\n- Remaining: A paid 15, B paid 25, D paid 8\n\nStep 3: Sort IDs alphabetically.\n- A, B, D\n\nStep 4: Calculate total.\n- 15 + 25 + 8 = 48\n\nOutput: {\"ids\":[\"A\",\"B\",\"D\"],\"total\":48}\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 78, "total_tokens": 342, "completion_tokens": 264, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 247}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "schedule", "passed": true, "elapsed_s": 2.493778939002368, "response": {"id": "chatcmpl-94ebf857ca1ee68c", "object": "chat.completion", "created": 1789743634, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"earliest_finish\":10,\"critical_path\":[\"A\",\"B\",\"D\"]}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "Let me analyze this scheduling problem carefully.\n\nJobs and their durations:\n- A: 3 hours (starts at hour 0)\n- B: 5 hours, starts after A\n- C: 4 hours, starts after A\n- D: 2 hours, starts after both B and C\n\nLet me trace the timeline:\n\n- A starts at hour 0, finishes at hour 3.\n- B starts after A → starts at hour 3, finishes at hour 3+5 = 8.\n- C starts after A → starts at hour 3, finishes at hour 3+4 = 7.\n- D starts after both B and C → starts at max(8, 7) = 8, finishes at 8+2 = 10.\n\nEarliest finish: 10 hours.\n\nCritical path: The longest path through the dependency graph.\n- Path A → B → D: 3 + 5 + 2 = 10\n- Path A → C → D: 3 + 4 + 2 = 9\n\nThe critical path is A → B → D with total duration 10.\n\nSo critical_path = [\"A\", \"B\", \"D\"]\nearliest_finish = 10\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 68, "total_tokens": 359, "completion_tokens": 291, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 271}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "chinese-policy", "passed": true, "elapsed_s": 1.6490989489975618, "response": {"id": "chatcmpl-9c57abdc32a627c6", "object": "chat.completion", "created": 1789743637, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"甲\":\"主管\",\"乙\":\"经理\",\"丙\":\"经理\",\"丁\":\"总监\"}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "让我仔细分析审批制度:\n\n- 金额不超过5000元:主管审批\n- 超过5000且不超过20000:经理审批\n- 超过20000:总监审批\n- 加急不改变审批人\n\n现在分析各申请:\n\n甲:5000元 → 不超过5000 → 主管\n乙:5001元加急 → 超过5000且不超过20000 → 经理(加急不改变审批人)\n丙:20000元 → 超过5000且不超过20000 → 经理\n丁:20001元 → 超过20000 → 总监\n\n输出JSON格式。\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 106, "total_tokens": 295, "completion_tokens": 189, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 169}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "merge-intervals", "passed": true, "validation_stdout": "passed\n", "validation_stderr": "", "response": {"id": "chatcmpl-b3de4e6b44566b44", "object": "chat.completion", "created": 1789743638, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"code\": \"def merge_intervals(intervals):\\n if len(intervals) == 0:\\n return []\\n sorted_intervals = sorted(intervals)\\n merged = [sorted_intervals[0].copy()]\\n for i in range(1, len(sorted_intervals)):\\n current = sorted_intervals[i]\\n last = merged[len(merged) - 1]\\n if current[0] <= last[1]:\\n last[1] = max(last[1], current[1])\\n else:\\n merged.append(current.copy())\\n return merged\"}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "The user wants a Python function `merge_intervals` that merges overlapping integer intervals, including touching endpoints. Let me think about the requirements:\n\n1. Merge overlapping intervals, including touching endpoints (e.g., [1,3] and [3,5] should merge to [1,5])\n2. Return sorted merged intervals as lists\n3. Reply ONLY a JSON object with a code string\n4. No imports, type annotations, decorators, top-level statements or helper functions\n5. Allowed builtins: sorted, len, range, min, max, list, enumerate, sum\n6. Allowed methods: append, sort, copy\n\nLet me write the function:\n\n```python\ndef merge_intervals(intervals):\n if len(intervals) == 0:\n return []\n sorted_intervals = sorted(intervals, key=lambda x: x[0])\n merged = [sorted_intervals[0].copy()]\n for i in range(1, len(sorted_intervals)):\n current = sorted_intervals[i]\n last = merged[len(merged) - 1]\n if current[0] <= last[1]:\n last[1] = max(last[1], current[1])\n else:\n merged.append(current.copy())\n return merged\n```\n\nWait, I need to check - can I use lambda? The allowed builtins are: sorted, len, range, min, max, list, enumerate, sum. Lambda isn't explicitly listed but it's a language construct, not a builtin. Let me think... `sorted` with a key function requires a callable. I could use `sorted(intervals)` since lists sort lexicographically by default, which would sort by first element then second element. That works for intervals!\n\nActually, `sorted(intervals)` on a list of lists will sort by the first element, then second element. That's exactly what we need.\n\nLet me also check: can I use `lambda`? It's not a builtin, it's a keyword/expression. The restriction says \"no imports, type annotations, decorators, top-level statements or helper functions.\" Lambda isn't a helper function per se, it's an anonymous function expression. But to be safe, let me just use `sorted(intervals)` without a key since default sorting of lists works correctly for intervals.\n\nAlso, I need to be careful about `.copy()` - it's in the allowed methods list. And `.append()` and `.sort()` are allowed.\n\nLet me also check: `len(merged) - 1` to get the last index - that's fine.\n\nLet me also make sure I'm not using any disallowed things. No type annotations, no decorators, no top-level statements, no helper functions. The function itself is fine.\n\nLet me format as JSON with a \"code\" key.\n\n```json\n{\"code\": \"def merge_intervals(intervals):\\n if len(intervals) == 0:\\n return []\\n sorted_intervals = sorted(intervals)\\n merged = [sorted_intervals[0].copy()]\\n for i in range(1, len(sorted_intervals)):\\n current = sorted_intervals[i]\\n last = merged[len(merged) - 1]\\n if current[0] <= last[1]:\\n last[1] = max(last[1], current[1])\\n else:\\n merged.append(current.copy())\\n return merged\"}\n```\n\nWait, I should double-check: `sorted(intervals)` on a list of lists like `[[1,3],[2,6],[8,10]]` will sort correctly by first element. Yes, Python's default list comparison is lexicographic, so it compares element by element. This is correct for our use case.\n\nAlso checking: touching endpoints means [1,3] and [3,5] merge. My condition `current[0] <= last[1]` handles this since 3 <= 3 is true.\n\nThis looks good. Let me format the JSON properly.\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 81, "total_tokens": 1071, "completion_tokens": 990, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 857}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "binary-search", "passed": true, "validation_stdout": "passed\n", "validation_stderr": "", "response": {"id": "chatcmpl-b6b995fb183886f7", "object": "chat.completion", "created": 1789743647, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": "\n\n{\"code\": \"def lower_bound(nums, target):\\n lo = 0\\n hi = len(nums)\\n while lo < hi:\\n mid = (lo + hi) // 2\\n if nums[mid] < target:\\n lo = mid + 1\\n else:\\n hi = mid\\n return lo\"}", "refusal": null, "annotations": null, "audio": null, "function_call": null, "reasoning": "The user wants a Python function `lower_bound` that finds the index of the first element >= target in a sorted list `nums`, or `len(nums)` if none exists.\n\nConstraints:\n- Return ONLY a JSON object with a \"code\" string\n- No imports, type annotations, decorators, top-level statements, or helper functions\n- Allowed builtins: sorted, len, range, min, max, list, enumerate, sum\n- Allowed methods: append, sort, copy\n\nLet me write a binary search implementation for lower_bound:\n\n```python\ndef lower_bound(nums, target):\n lo = 0\n hi = len(nums)\n while lo < hi:\n mid = (lo + hi) // 2\n if nums[mid] < target:\n lo = mid + 1\n else:\n hi = mid\n return lo\n```\n\nThis is a standard binary search for lower bound. Let me check constraints:\n- No imports ✓\n- No type annotations ✓\n- No decorators ✓\n- No top-level statements ✓\n- No helper functions ✓\n- Uses `len` which is allowed ✓\n- Uses basic operators and comparisons ✓\n\nNow I need to wrap this in a JSON object with a \"code\" string.\n"}, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 92, "total_tokens": 438, "completion_tokens": 346, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 269}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
{"name": "tool-arguments", "passed": true, "response": {"id": "chatcmpl-a63e6f2654b5a582", "object": "chat.completion", "created": 1789743650, "model": "qwen3.8-flash-next", "choices": [{"index": 0, "message": {"role": "assistant", "content": null, "refusal": null, "annotations": null, "audio": null, "function_call": null, "tool_calls": [{"id": "chatcmpl-tool-8666af43eb56d793", "type": "function", "function": {"name": "create_ticket", "arguments": "{\"title\": \"GPU cooling failure\", \"priority\": \"urgent\", \"asset\": \"GPU-092\"}"}}], "reasoning": "The user wants me to create a ticket with specific parameters:\n- title: \"GPU cooling failure\" (exactly)\n- priority: \"urgent\"\n- asset: \"GPU-092\" (exactly)\n\nThis is straightforward - I'll call the create_ticket function with these exact values.\n"}, "logprobs": null, "finish_reason": "tool_calls", "stop_reason": null, "token_ids": null, "routed_experts": null}], "service_tier": null, "system_fingerprint": "vllm-0.3.1.dev3+g0bfc7a15d-9cae8d63", "usage": {"prompt_tokens": 325, "total_tokens": 447, "completion_tokens": 122, "prompt_tokens_details": null, "completion_tokens_details": {"reasoning_tokens": 65}}, "prompt_logprobs": null, "prompt_token_ids": null, "prompt_text": null, "kv_transfer_params": null, "ec_transfer_params": null, "metrics": null}}
@@ -0,0 +1,8 @@
{"name": "invoice-extraction", "passed": true, "elapsed_s": 1.6113444969960256}
{"name": "deduplicate", "passed": true, "elapsed_s": 2.2101684480003314}
{"name": "schedule", "passed": true, "elapsed_s": 2.493778939002368}
{"name": "chinese-policy", "passed": true, "elapsed_s": 1.6490989489975618}
{"name": "merge-intervals", "passed": true, "validation_stdout": "passed\n", "validation_stderr": ""}
{"name": "binary-search", "passed": true, "validation_stdout": "passed\n", "validation_stderr": ""}
{"name": "tool-arguments", "passed": true}
QUALITY_COMPLETE
File diff suppressed because one or more lines are too long
@@ -0,0 +1,38 @@
{"name": "arithmetic-0", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 141, "completion_tokens": 82, "completion_tokens_details": {"reasoning_tokens": 75}}, "ttft_s": 0.6788992599977064, "elapsed_s": 1.330652390999603, "decode_tps": 124.28018546759276, "max_stream_gap_s": 0.016711308002413716, "events": 42, "sha256": "d929fd317464b07ece811a135b5937af8eb36ea0b1e88ec82bc5137102d0a62c"}
{"name": "arithmetic-1", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 96, "completion_tokens": 37, "completion_tokens_details": {"reasoning_tokens": 30}}, "ttft_s": 0.08442727399960859, "elapsed_s": 0.38878584299527574, "decode_tps": 118.28153916873126, "max_stream_gap_s": 0.017301366999163292, "events": 19, "sha256": "5cd050422245af84010bf1c71082001dcd6d880bdd6dd7002e69a8402ab6c73c"}
{"name": "arithmetic-2", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 125, "completion_tokens": 66, "completion_tokens_details": {"reasoning_tokens": 59}}, "ttft_s": 0.08499549300177023, "elapsed_s": 0.6222111509996466, "decode_tps": 120.99423952430095, "max_stream_gap_s": 0.03257976900204085, "events": 32, "sha256": "c6dabe0673abae92ebdac3d245deb7c9ca89c874d316c46b8ce09fde923a752f"}
{"name": "arithmetic-3", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 98, "completion_tokens": 39, "completion_tokens_details": {"reasoning_tokens": 31}}, "ttft_s": 0.08491974999924423, "elapsed_s": 0.39251107800373575, "decode_tps": 123.54054402809794, "max_stream_gap_s": 0.03264573799970094, "events": 19, "sha256": "4f382303f23d66fb4abcb57f3ad914e7f87831db4a3757ab5fdab83d25b58b1b"}
{"name": "arithmetic-4", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 131, "completion_tokens": 72, "completion_tokens_details": {"reasoning_tokens": 64}}, "ttft_s": 0.085520082997391, "elapsed_s": 0.6701685270018061, "decode_tps": 121.4405010876311, "max_stream_gap_s": 0.032602148996375035, "events": 36, "sha256": "5c8a761b69d32970d9e4021e9cddda2caf44a6201a9bf34e503844cd2ce1dc0c"}
{"name": "arithmetic-5", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 101, "completion_tokens": 42, "completion_tokens_details": {"reasoning_tokens": 34}}, "ttft_s": 0.08477247699920554, "elapsed_s": 0.4252711029985221, "decode_tps": 120.41164594914487, "max_stream_gap_s": 0.032577335005044006, "events": 21, "sha256": "38ecdb08b2fcabd6a6a91e18d08f90ca325aae7f5c9ee565aa360e4d3cb610e9"}
{"name": "arithmetic-6", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 130, "completion_tokens": 71, "completion_tokens_details": {"reasoning_tokens": 63}}, "ttft_s": 0.08490634099871386, "elapsed_s": 0.6701965460015344, "decode_tps": 119.59878945806493, "max_stream_gap_s": 0.03245343499293085, "events": 36, "sha256": "7ac565b6322b904ff447bc9ef3ed069ebc4e48b8a51e72f9e18919bd8e3000d1"}
{"name": "arithmetic-7", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 153, "completion_tokens": 94, "completion_tokens_details": {"reasoning_tokens": 86}}, "ttft_s": 0.0855920120011433, "elapsed_s": 0.8476354470039951, "decode_tps": 122.04028763747826, "max_stream_gap_s": 0.03259085400350159, "events": 47, "sha256": "e7b73eb708d2c4c7d2fc5dca2aed40a571c8b0445cd1867d916b47f57ec4cac0"}
{"name": "arithmetic-8", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 144, "completion_tokens": 85, "completion_tokens_details": {"reasoning_tokens": 77}}, "ttft_s": 0.08551327399618458, "elapsed_s": 0.7655381610020413, "decode_tps": 123.52489093428804, "max_stream_gap_s": 0.03254275799554307, "events": 42, "sha256": "9d93671c15eac2005a27c4fe38e5d4285b3feca77fa1e90f138c71a2b5164db8"}
{"name": "arithmetic-9", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 59, "total_tokens": 143, "completion_tokens": 84, "completion_tokens_details": {"reasoning_tokens": 76}}, "ttft_s": 0.08536207699944498, "elapsed_s": 0.7670097699956386, "decode_tps": 121.7637803997724, "max_stream_gap_s": 0.016597622001427226, "events": 42, "sha256": "6b95a8b82a4ba5a8335b5f10899663aeebe71fed7e5673836b82ec74cfa1cbee"}
{"name": "arithmetic-10", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 60, "total_tokens": 143, "completion_tokens": 83, "completion_tokens_details": {"reasoning_tokens": 75}}, "ttft_s": 0.08568318800098496, "elapsed_s": 0.7488038730007247, "decode_tps": 123.65773207637488, "max_stream_gap_s": 0.03235569100070279, "events": 41, "sha256": "662f32768d742ea67e45b8109190fc2ba55c429346f4be9b9492ff457cdacc48"}
{"name": "arithmetic-11", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 61, "total_tokens": 151, "completion_tokens": 90, "completion_tokens_details": {"reasoning_tokens": 82}}, "ttft_s": 0.08726995399774751, "elapsed_s": 0.8155018589968677, "decode_tps": 122.21381594110125, "max_stream_gap_s": 0.016604981996351853, "events": 45, "sha256": "cdbf70494a3484ed891137af4bad12b7417009befd921930fc1fa5e5e3907e27"}
{"name": "json", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 66, "total_tokens": 109, "completion_tokens": 43, "completion_tokens_details": {"reasoning_tokens": 26}}, "ttft_s": 0.10169535600289237, "elapsed_s": 0.4396858489999431, "decode_tps": 124.26385022719111, "max_stream_gap_s": 0.016457880003144965, "events": 22, "sha256": "2acba5868b21fa90ff7d281b66898b4ed66b6ff2f42a3d5a1d5bd11569806949"}
{"name": "multiturn", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 82, "total_tokens": 145, "completion_tokens": 63, "completion_tokens_details": {"reasoning_tokens": 51}}, "ttft_s": 0.08512602300470462, "elapsed_s": 0.6315631280012894, "decode_tps": 113.46228034860022, "max_stream_gap_s": 0.0164907750004204, "events": 34, "sha256": "dd12a39a5152c7bd1ce0e00fedc430e10a83c25c8a7850e9be06dcc0b4fe0353"}
{"name": "image-ocr", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 3135, "total_tokens": 3263, "completion_tokens": 128, "completion_tokens_details": {"reasoning_tokens": 107}}, "ttft_s": 0.7587772789993323, "elapsed_s": 1.8307137399970088, "decode_tps": 118.4771715683578, "max_stream_gap_s": 0.017939804994966835, "events": 67, "sha256": "8921e4d6739375a20a9acdb345ebda84acb52f498071a986927bd0a4e61a3779"}
{"name": "video-120s", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 12069, "total_tokens": 12197, "completion_tokens": 128, "completion_tokens_details": {"reasoning_tokens": 114}}, "ttft_s": 2.490573155002494, "elapsed_s": 3.5669434599985834, "decode_tps": 117.98913386082441, "max_stream_gap_s": 0.03252299100131495, "events": 66, "sha256": "3c4546e143b0d70a31d19afcd37f4462f9f4bc75d2ed102649b295b696577524"}
{"name": "multi-image", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 12356, "total_tokens": 12427, "completion_tokens": 71, "completion_tokens_details": {"reasoning_tokens": 60}}, "ttft_s": 1.4522779820035794, "elapsed_s": 2.0256833830062533, "decode_tps": 122.07767816207503, "max_stream_gap_s": 0.01650294200226199, "events": 37, "sha256": "81142145348f20b3b8803d7c6d9426ccc5641f864e2bd78da3e927825dc764b3"}
{"name": "warmup-code", "passed": true, "finish": "length", "usage": {"prompt_tokens": 77, "total_tokens": 333, "completion_tokens": 256, "completion_tokens_details": {"reasoning_tokens": 256}}, "ttft_s": 0.08386934799636947, "elapsed_s": 2.4533141759966384, "decode_tps": 107.62014670550964, "max_stream_gap_s": 0.016294626002490986, "events": 150, "sha256": "ae01d596ec7a45f3c398b1526e5f345c2a100644fe1e8d2975c98d406465b7ad"}
{"name": "perf-code-0", "passed": true, "finish": "length", "usage": {"prompt_tokens": 77, "total_tokens": 2125, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2048}}, "ttft_s": 0.0830643839944969, "elapsed_s": 18.754658626996388, "decode_tps": 109.6317739856207, "max_stream_gap_s": 0.016825594000692945, "events": 1176, "sha256": "4906c37a2e701fd6633345dd53b182e28095d6b5da93f478eac8d410d6af322a"}
{"name": "perf-code-1", "passed": true, "finish": "length", "usage": {"prompt_tokens": 77, "total_tokens": 2125, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2048}}, "ttft_s": 0.07255172300210688, "elapsed_s": 18.743193971000437, "decode_tps": 109.63736398620448, "max_stream_gap_s": 0.01642427300248528, "events": 1176, "sha256": "bfcbf92932af2de82cc8324af42ba2d393695f14eb500ea32fbcad6f781dcfaf"}
{"name": "perf-code-2", "passed": true, "finish": "length", "usage": {"prompt_tokens": 77, "total_tokens": 2125, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2048}}, "ttft_s": 0.07399964099749923, "elapsed_s": 18.77744392999739, "decode_tps": 109.44508232656955, "max_stream_gap_s": 0.01670600000215927, "events": 1178, "sha256": "685a932841c3272e4da5b4f12e188bdb7fd6b50b4b564bc426e3e139793f068c"}
{"name": "warmup-chinese", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 335, "completion_tokens": 256, "completion_tokens_details": {"reasoning_tokens": 182}}, "ttft_s": 0.08481309299531858, "elapsed_s": 2.3875851429984323, "decode_tps": 110.73610173427943, "max_stream_gap_s": 0.03143068100325763, "events": 145, "sha256": "c7ecb8327c0218df2d04be1c67cec8ee285dd526519e8615316908f083855b7c"}
{"name": "perf-chinese-0", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 182}}, "ttft_s": 0.08440493299713125, "elapsed_s": 18.277994324002066, "decode_tps": 112.5121577720147, "max_stream_gap_s": 0.03122073299891781, "events": 1147, "sha256": "5e28251162bb5f8117e86f4f2cb747928f5bb5287e6cec1443d2d64deefb8fb3"}
{"name": "perf-chinese-1", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 182}}, "ttft_s": 0.07261836499674246, "elapsed_s": 18.21824221299903, "decode_tps": 112.80956869528413, "max_stream_gap_s": 0.03128572199784685, "events": 1144, "sha256": "314d5c03936def50095096c59aab4bfc5743e49e546edd449ec7db880db067df"}
{"name": "perf-chinese-2", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 182}}, "ttft_s": 0.07247121300315484, "elapsed_s": 18.250864649002324, "decode_tps": 112.60621062069599, "max_stream_gap_s": 0.03126876999886008, "events": 1146, "sha256": "18736c57814a1186850c8f28964837b22549363a2ab0e0e00f2332ebe1aeaa88"}
{"name": "warmup-reasoning", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 335, "completion_tokens": 256, "completion_tokens_details": {"reasoning_tokens": 256}}, "ttft_s": 0.0831944410019787, "elapsed_s": 2.406979079998564, "decode_tps": 109.7347816663895, "max_stream_gap_s": 0.01621198299835669, "events": 148, "sha256": "d557c88f4473c4da0f26d8a2bfdb8aae0734ac1d790d7d3f74c26151b5cbe509"}
{"name": "perf-reasoning-0", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2047}}, "ttft_s": 0.0725614070033771, "elapsed_s": 18.94562807300099, "decode_tps": 108.46144064588867, "max_stream_gap_s": 0.031187818000034895, "events": 1189, "sha256": "e35a9f765a93cce044543990fe166bfafe2cb845b0e603c334dc449496e21491"}
{"name": "perf-reasoning-1", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2047}}, "ttft_s": 0.0843369200010784, "elapsed_s": 18.989241095994657, "decode_tps": 108.27878210561818, "max_stream_gap_s": 0.03129963100218447, "events": 1191, "sha256": "10121a80459a4b8f8a0773b132bcdb6398463e07aa0645ee478ad590cd9def46"}
{"name": "perf-reasoning-2", "passed": true, "finish": "length", "usage": {"prompt_tokens": 79, "total_tokens": 2127, "completion_tokens": 2048, "completion_tokens_details": {"reasoning_tokens": 2047}}, "ttft_s": 0.07209744000283536, "elapsed_s": 18.980188051005825, "decode_tps": 108.26053471569521, "max_stream_gap_s": 0.03122235600312706, "events": 1191, "sha256": "10121a80459a4b8f8a0773b132bcdb6398463e07aa0645ee478ad590cd9def46"}
{"name": "long-context-0", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 125995, "total_tokens": 126130, "completion_tokens": 135, "completion_tokens_details": {"reasoning_tokens": 115}}, "ttft_s": 14.440546402998734, "elapsed_s": 15.590460605999397, "decode_tps": 116.53043300998588, "max_stream_gap_s": 0.032008403999498114, "events": 71, "sha256": "ee0579233e57d5accc2cf35a71509aa83fe7dcf3a2727f10f973dec75ff41759"}
{"name": "long-context-1", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 125995, "total_tokens": 126129, "completion_tokens": 134, "completion_tokens_details": {"reasoning_tokens": 114}}, "ttft_s": 0.856336849006766, "elapsed_s": 1.9747926430063671, "decode_tps": 118.91395325012499, "max_stream_gap_s": 0.03192400800617179, "events": 69, "sha256": "9400cbc20a09d71e03a4c31d5413dd314ee75a387fce3dc146f230a763b8faf3"}
{"name": "long-context-2", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 125995, "total_tokens": 126128, "completion_tokens": 133, "completion_tokens_details": {"reasoning_tokens": 113}}, "ttft_s": 0.853535173999262, "elapsed_s": 1.9229757680004695, "decode_tps": 123.4290158241842, "max_stream_gap_s": 0.03247794899652945, "events": 67, "sha256": "48e028596401908f642e64f951e3f0c5c7b6314e6a46a87c047b4728d9438d99"}
{"name": "long-context-image", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 111670, "total_tokens": 111863, "completion_tokens": 193, "completion_tokens_details": {"reasoning_tokens": 148}}, "ttft_s": 12.791386062002857, "elapsed_s": 14.462968651001574, "decode_tps": 114.86121072546499, "max_stream_gap_s": 0.03197040300437948, "events": 103, "sha256": "410a369097c639859051822f809cd9adecfca2ac1f489544f9525a65f25ef94a"}
{"name": "queued-0", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 55, "total_tokens": 119, "completion_tokens": 64, "completion_tokens_details": {"reasoning_tokens": 58}}, "ttft_s": 0.08371570699819131, "elapsed_s": 0.5917828360034036, "decode_tps": 123.99936229559475, "max_stream_gap_s": 0.03208907500084024, "events": 32, "sha256": "c775e82fbe7367311970d698f4880b3e86da93aa21640d45d95ee9475e335166"}
{"name": "queued-1", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 55, "total_tokens": 98, "completion_tokens": 43, "completion_tokens_details": {"reasoning_tokens": 37}}, "ttft_s": 0.6603063000002294, "elapsed_s": 0.9943764119961997, "decode_tps": 125.72211189160979, "max_stream_gap_s": 0.03203328799281735, "events": 21, "sha256": "577bfda055d6b1f136ea30fd3c42b3954036dd654d2eb7cace48396c49aa115a"}
{"name": "queued-2", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 55, "total_tokens": 119, "completion_tokens": 64, "completion_tokens_details": {"reasoning_tokens": 58}}, "ttft_s": 1.0632171030010795, "elapsed_s": 1.5722418850054964, "decode_tps": 123.76607628398992, "max_stream_gap_s": 0.01634497399936663, "events": 32, "sha256": "4e0dac459752edb516d9c610865ec672d6805ddc71af097d21b28f7c53179b47"}
{"name": "queued-3", "passed": true, "finish": "stop", "usage": {"prompt_tokens": 55, "total_tokens": 119, "completion_tokens": 64, "completion_tokens_details": {"reasoning_tokens": 58}}, "ttft_s": 1.6414810709975427, "elapsed_s": 2.150085207002121, "decode_tps": 123.86843822173104, "max_stream_gap_s": 0.016239169002801646, "events": 32, "sha256": "fbb92f72869a68308179711e06612346b886a880c1f5fbd390eb0731790dbd0c"}
SUITE_COMPLETE
@@ -0,0 +1,339 @@
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347]
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347] █ █ █▄ ▄█
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347] ▄▄ ▄█ █ █ █ ▀▄▀ █ version 0.3.1.dev3+g0bfc7a15d
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347] █▄█▀ █ █ █ █ model /model
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347] ▀▀ ▀▀▀▀▀ ▀▀▀▀▀ ▀ ▀
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:347]
(APIServer pid=1) INFO 09-18 14:54:04 [api_utils.py:286] non-default args: {'model_tag': '/model', 'enable_auto_tool_choice': True, 'tool_call_parser': 'qwen3_xml', 'host': '0.0.0.0', 'api_key': '***', 'model': '/model', 'dtype': 'bfloat16', 'max_model_len': 131072, 'served_model_name': ['qwen3.8-flash-next'], 'load_format': 'safetensors', 'reasoning_parser': 'qwen3', 'gpu_memory_utilization': 0.985, 'kv_cache_dtype': 'fp8', 'enable_prefix_caching': True, 'max_num_batched_tokens': 2048, 'max_num_seqs': 1, 'enable_chunked_prefill': True, 'enable_flashinfer_autotune': False, 'speculative_config': {'method': 'mtp', 'num_speculative_tokens': 1}, 'compilation_config': {'mode': <CompilationMode.NONE: 0>, 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': [], 'ir_enable_torch_wrap': None, 'splitting_ops': None, 'compile_mm_encoder': False, 'cudagraph_mm_encoder': False, 'encoder_cudagraph_token_budgets': [], 'encoder_cudagraph_max_vision_items_per_batch': 0, 'encoder_cudagraph_max_frames_per_batch': None, 'compile_sizes': None, 'compile_ranges_endpoints': None, 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': <CUDAGraphMode.FULL: 2>, 'cudagraph_num_of_warmups': 0, 'cudagraph_capture_sizes': [1, 2], 'cudagraph_copy_inputs': False, 'cudagraph_specialize_lora': True, 'use_inductor_graph_partition': None, 'pass_config': {}, 'max_cudagraph_capture_size': None, 'dynamic_shapes_config': {'type': <DynamicShapesType.BACKED: 'backed'>, 'evaluate_guards': False, 'assume_32_bit_indexing': False}, 'local_cache_dir': None, 'fast_moe_cold_start': None, 'static_all_moe_layers': []}, 'engram_config': EngramConfig(cpu_offload=True, embedding_across_dp=False, dp_shared_memory=False)}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) INFO 09-18 14:54:04 [model.py:691] Resolved architecture: Qwen4ExpForConditionalGeneration
(APIServer pid=1) INFO 09-18 14:54:04 [model.py:2024] Using max model len 131072
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) INFO 09-18 14:54:07 [cache.py:345] Using fp8 data type to store kv cache. It reduces the GPU memory footprint and boosts the performance. Meanwhile, it may cause accuracy drop without a proper scaling factor
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) INFO 09-18 14:54:07 [model.py:691] Resolved architecture: Qwen4ExpMTP
(APIServer pid=1) INFO 09-18 14:54:07 [model.py:2024] Using max model len 262144
(APIServer pid=1) INFO 09-18 14:54:07 [speculative.py:1653] Overriding draft model max model len from 262144 to 131072
(APIServer pid=1) INFO 09-18 14:54:07 [config.py:625] Mamba cache mode is set to 'align' for Qwen4ExpForConditionalGeneration by default when prefix caching is enabled
(APIServer pid=1) INFO 09-18 14:54:07 [vllm.py:1271] Resolved Engram configuration: EngramConfig(cpu_offload=True, embedding_across_dp=False, dp_shared_memory=False)
(APIServer pid=1) INFO 09-18 14:54:07 [vllm.py:781] Auto-enabling VLLM_USE_BREAKABLE_CUDAGRAPH=1. Set VLLM_USE_BREAKABLE_CUDAGRAPH=0 to opt out.
(APIServer pid=1) INFO 09-18 14:54:07 [kernel.py:408] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native'], gelu_and_mul_sparse=['triton', 'native'])
(APIServer pid=1) WARNING 09-18 14:54:07 [vllm.py:2152] max_num_scheduled_tokens is set to 2048 based on the speculative decoding settings. This may lead to suboptimal performance. Consider increasing max_num_batched_tokens to accommodate the additional draft token slots, or decrease num_speculative_tokens.
(APIServer pid=1) INFO 09-18 14:54:07 [compilation.py:331] Enabled custom fusions: norm_quant, act_quant
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] The `use_fast` parameter is deprecated and will be removed in a future version. Use `backend="torchvision"` instead of `use_fast=True`, or `backend="pil"` instead of `use_fast=False`.
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(EngineCore pid=112) INFO 09-18 14:54:20 [core.py:123] Initializing a V1 LLM engine (v0.3.1.dev3+g0bfc7a15d) with config: model='/model', speculative_config=SpeculativeConfig(method='mtp', model='/model', num_spec_tokens=1), tokenizer='/model', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=False, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=safetensors, tensor_parallel_size=1, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=False, quantization=modelopt_mixed, quantization_config=None, enforce_eager=False, enable_return_routed_experts=False, kv_cache_dtype=fp8, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='qwen3', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, per_request_spec_decode_metrics='none', kv_cache_metrics=False, kv_cache_metrics_sample=0.01, cudagraph_metrics=False, enable_layerwise_nvtx_tracing=False, enable_mfu_metrics=False, enable_mm_processor_stats=False, enable_logging_iteration_details=False, jit_monitor_mode='warn', jit_monitor_verbose=False), seed=0, served_model_name=qwen3.8-flash-next, enable_prefix_caching=True, enable_chunked_prefill=True, pooler_config=None, compilation_config={'mode': <CompilationMode.NONE: 0>, 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['+quant_fp8', 'all', '+quant_fp8'], 'ir_enable_torch_wrap': False, 'splitting_ops': [], 'compile_mm_encoder': False, 'cudagraph_mm_encoder': False, 'encoder_cudagraph_token_budgets': [], 'encoder_cudagraph_max_vision_items_per_batch': 0, 'encoder_cudagraph_max_frames_per_batch': None, 'compile_sizes': [], 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': <CUDAGraphMode.FULL: 2>, 'cudagraph_num_of_warmups': 1, 'cudagraph_capture_sizes': [1, 2], 'cudagraph_copy_inputs': False, 'cudagraph_specialize_lora': True, 'use_inductor_graph_partition': False, 'pass_config': {'fuse_norm_quant': True, 'fuse_act_quant': True, 'fuse_attn_quant': False, 'enable_sp': False, 'fuse_gemm_comms': False, 'fuse_allreduce_rms': False, 'enable_qk_norm_rope_fusion': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False, 'fuse_qk_norm_rope_kvcache': False}, 'max_cudagraph_capture_size': 2, 'dynamic_shapes_config': {'type': <DynamicShapesType.BACKED: 'backed'>, 'evaluate_guards': False, 'assume_32_bit_indexing': False}, 'local_cache_dir': None, 'fast_moe_cold_start': False, 'static_all_moe_layers': []}, kernel_config=KernelConfig(ir_op_priority=IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native'], gelu_and_mul_sparse=['triton', 'native']), enable_flashinfer_autotune=False, enable_cutedsl_warmup=True, enable_jit_warmup=True, moe_backend='auto', sparse_indexer_topk_backend='auto', linear_backend='auto', linear_backend_per_quant=None)
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) INFO 09-18 14:54:21 [parallel_state.py:1825] world_size=1 rank=0 local_rank=0 distributed_init_method=file:///tmp/vllm_dist_d75d110cee7b4c8d8fc41c851dee4d8c backend=nccl
(EngineCore pid=112) INFO 09-18 14:54:21 [parallel_state.py:2269] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, ETP rank 0, EP rank 0, EPLB rank N/A
(EngineCore pid=112) INFO 09-18 14:54:21 [gpu_worker.py:441] Using V2 Model Runner
(EngineCore pid=112) INFO 09-18 14:54:22 [model_runner.py:387] Loading model from scratch...
(EngineCore pid=112) INFO 09-18 14:54:22 [cuda.py:595] Using backend AttentionBackendEnum.FLASH_ATTN for vit attention
(EngineCore pid=112) INFO 09-18 14:54:22 [mm_encoder_attention.py:372] Using AttentionBackendEnum.FLASH_ATTN for MMEncoderAttention.
(EngineCore pid=112) INFO 09-18 14:54:22 [qwen_gdn_linear_attn.py:176] Using FlashInfer GDN prefill kernel (requested=auto, head_k_dim=128).
(EngineCore pid=112) INFO 09-18 14:54:22 [qwen_gdn_linear_attn.py:528] GDN decode kernel: cuda
(EngineCore pid=112) INFO 09-18 14:54:24 [nvfp4.py:302] Using 'FLASHINFER_CUTLASS' NvFp4 MoE backend out of potential backends: ['FLASHINFER_TRTLLM', 'FLASHINFER_CUTEDSL', 'FLASHINFER_CUTEDSL_BATCHED', 'FLASHINFER_CUTLASS', 'VLLM_CUTLASS', 'MARLIN', 'HUMMING', 'EMULATION'].
(APIServer pid=1) [transformers] Qwen3VL video processing does not apply the per-frame pixel cap the reference implementation (qwen-vl-utils) applies, so some videos cost far more tokens than they would there. In v5.22 the capped behavior will become the default and `cap_pixels_per_frame` will be removed. Pass `cap_pixels_per_frame=True` to adopt the reference behavior now, or `False` to keep the current behavior and silence this warning.
(APIServer pid=1) INFO 09-18 14:54:26 [base.py:261] Multi-modal warmup completed in 12.108s
(APIServer pid=1) INFO 09-18 14:54:27 [base.py:261] Readonly multi-modal warmup completed in 1.295s
(EngineCore pid=112) INFO 09-18 14:54:58 [ngram_embedding.py:720] Initialized PLE embedding language_model.model.layers.1.ple.ple_embedding.ngram_embedding: quantization_method=Qwen4ExpPLEFp8EmbeddingMethod, weight_dtype=torch.float8_e4m3fn, weight_device=cpu, pinned=True
(EngineCore pid=112) INFO 09-18 14:54:58 [flash_attn.py:1115] Using FlashAttention version 2
(EngineCore pid=112) WARNING 09-18 14:54:58 [compilation.py:1350] Op 'quant_fp8' not present in model, enabling with '+quant_fp8' has no effect
(EngineCore pid=112) INFO 09-18 14:54:58 [weight_utils.py:900] Filesystem type for checkpoints: EXT4. Checkpoint size: 123.57 GiB. Available RAM: 142.31 GiB.
(EngineCore pid=112) INFO 09-18 14:54:58 [weight_utils.py:923] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre). If you want to force prefetching, start vLLM with --safetensors-load-strategy=prefetch.
(EngineCore pid=112)
Loading safetensors checkpoint shards: 0% Completed | 0/11 [00:00<?, ?it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 9% Completed | 1/11 [00:01<00:17, 1.73s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 18% Completed | 2/11 [00:07<00:35, 3.98s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 27% Completed | 3/11 [00:13<00:38, 4.80s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 36% Completed | 4/11 [00:18<00:36, 5.19s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 45% Completed | 5/11 [00:24<00:32, 5.45s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 55% Completed | 6/11 [00:30<00:28, 5.61s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 64% Completed | 7/11 [00:36<00:22, 5.67s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 73% Completed | 8/11 [00:42<00:17, 5.74s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 82% Completed | 9/11 [00:43<00:08, 4.41s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:44<00:00, 2.51s/it]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:44<00:00, 4.06s/it]
(EngineCore pid=112)
(EngineCore pid=112) INFO 09-18 14:55:43 [default_loader.py:430] Loading weights took 44.78 seconds
(EngineCore pid=112) INFO 09-18 14:55:43 [nvfp4.py:611] Using MoEPrepareAndFinalizeNoDPEPModular
(EngineCore pid=112) INFO 09-18 14:55:43 [vllm.py:1271] Resolved Engram configuration: EngramConfig(cpu_offload=True, embedding_across_dp=False, dp_shared_memory=False)
(EngineCore pid=112) INFO 09-18 14:55:43 [kernel.py:408] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native'], gelu_and_mul_sparse=['triton', 'native'])
(EngineCore pid=112) WARNING 09-18 14:55:43 [vllm.py:2152] max_num_scheduled_tokens is set to 2048 based on the speculative decoding settings. This may lead to suboptimal performance. Consider increasing max_num_batched_tokens to accommodate the additional draft token slots, or decrease num_speculative_tokens.
(EngineCore pid=112) INFO 09-18 14:55:43 [compilation.py:331] Enabled custom fusions: norm_quant, act_quant
(EngineCore pid=112) INFO 09-18 14:55:44 [fp8.py:433] Using DEEPGEMM Fp8 MoE backend out of potential backends: ['AITER', 'FLASHINFER_TRTLLM', 'FLASHINFER_CUTLASS', 'DEEPGEMM', 'TRITON', 'MARLIN', 'HUMMING', 'BATCHED_DEEPGEMM', 'BATCHED_TRITON', 'XPU', 'CPU', 'HPC'].
(EngineCore pid=112) INFO 09-18 14:55:44 [weight_utils.py:900] Filesystem type for checkpoints: EXT4. Checkpoint size: 123.57 GiB. Available RAM: 142.17 GiB.
(EngineCore pid=112)
Loading safetensors checkpoint shards: 0% Completed | 0/11 [00:00<?, ?it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 18% Completed | 2/11 [00:00<00:01, 5.16it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 27% Completed | 3/11 [00:00<00:01, 4.04it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 36% Completed | 4/11 [00:01<00:01, 3.65it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 45% Completed | 5/11 [00:01<00:01, 3.44it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 55% Completed | 6/11 [00:01<00:01, 3.32it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 64% Completed | 7/11 [00:01<00:01, 3.26it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 73% Completed | 8/11 [00:02<00:00, 3.22it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 82% Completed | 9/11 [00:02<00:00, 3.72it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:02<00:00, 3.91it/s]
(EngineCore pid=112)
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:02<00:00, 3.70it/s]
(EngineCore pid=112)
(EngineCore pid=112) INFO 09-18 14:55:47 [default_loader.py:430] Loading weights took 2.98 seconds
(EngineCore pid=112) INFO 09-18 14:55:47 [deep_gemm.py:196] deep_gemm not found in site-packages, trying vendored vllm.third_party.deep_gemm
(EngineCore pid=112) INFO 09-18 14:55:47 [deep_gemm.py:223] DeepGEMM PDL enabled on vllm.third_party.deep_gemm.
(EngineCore pid=112) INFO 09-18 14:55:47 [deep_gemm.py:136] DeepGEMM E8M0 enabled on current platform.
(EngineCore pid=112) INFO 09-18 14:55:50 [fp8.py:733] Using MoEPrepareAndFinalizeNoDPEPModular
(EngineCore pid=112) WARNING 09-18 14:55:50 [speculator.py:235] Draft model Qwen4ExpMTP does not support external multimodal embeddings. Embeddings from the target model will not be passed to the drafter; using text-only draft inputs instead.
(EngineCore pid=112) INFO 09-18 14:55:51 [model_runner.py:419] Model loading took 76.36 GiB memory and 89.100896 seconds
(EngineCore pid=112) INFO 09-18 14:55:51 [topk_topp_sampler.py:78] Using FlashInfer for top-p & top-k sampling.
(EngineCore pid=112) INFO 09-18 14:55:51 [interface.py:918] Setting attention block size to 3152 tokens to ensure that attention page size is >= mamba page size.
(EngineCore pid=112) INFO 09-18 14:55:51 [utils.py:320] Using BLNHC KV cache layout.
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] The `use_fast` parameter is deprecated and will be removed in a future version. Use `backend="torchvision"` instead of `use_fast=True`, or `backend="pil"` instead of `use_fast=False`.
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_interleaved', 'mrope_section'}
(EngineCore pid=112) INFO 09-18 14:55:55 [encoder_runner.py:131] Encoder cache will be initialized with a budget of 16384 tokens, and profiled with 1 image items of the maximum feature size.
(EngineCore pid=112) WARNING 09-18 14:56:17 [kv_cache_utils.py:2219] Speculative decoding (method=mtp) is enabled but no KV cache group could be identified as the draft model's.
(EngineCore pid=112) WARNING 09-18 14:56:17 [compilation.py:1415] CUDAGraphMode.FULL is not supported with GDNAttentionBackend backend (support: AttentionCGSupport.UNIFORM_BATCH); setting cudagraph_mode=FULL_DECODE_ONLY
(EngineCore pid=112)
Capturing CUDA graphs (FULL): 0%| | 0/1 [00:00<?, ?it/s]
Capturing CUDA graphs (FULL): 100%|██████████| 1/1 [00:01<00:00, 1.81s/it]
Capturing CUDA graphs (FULL): 100%|██████████| 1/1 [00:01<00:00, 1.81s/it]
(EngineCore pid=112) INFO 09-18 14:56:19 [speculator.py:150] Capturing model for speculator...
(EngineCore pid=112)
Capturing prefill CUDA graphs (FULL): 0%| | 0/1 [00:00<?, ?it/s]
Capturing prefill CUDA graphs (FULL): 100%|██████████| 1/1 [00:00<00:00, 1.95it/s]
Capturing prefill CUDA graphs (FULL): 100%|██████████| 1/1 [00:00<00:00, 1.95it/s]
(EngineCore pid=112) INFO 09-18 14:56:20 [model_runner.py:1057] Graph capturing finished in 3 secs, took 0.14 GiB
(EngineCore pid=112) INFO 09-18 14:56:21 [gpu_worker.py:641] Available KV cache memory: 2.78 GiB
(EngineCore pid=112) INFO 09-18 14:56:21 [gpu_worker.py:656] CUDA graph memory profiling is enabled (default since v0.21.0). The current --gpu-memory-utilization=0.9850 is equivalent to --gpu-memory-utilization=0.9833 without CUDA graph memory profiling. To maintain the same effective KV cache size as before, increase --gpu-memory-utilization to 0.9867. To disable, set VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0.
(EngineCore pid=112) WARNING 09-18 14:56:21 [kv_cache_utils.py:2219] Speculative decoding (method=mtp) is enabled but no KV cache group could be identified as the draft model's.
(EngineCore pid=112) INFO 09-18 14:56:21 [kv_cache_utils.py:2404] GPU KV cache size: 159,669 tokens, Maximum concurrency for 131,072 tokens per request: 1.22x
(EngineCore pid=112) INFO 09-18 14:56:21 [kernel_warmup.py:171] JIT kernel warmup starting.
(EngineCore pid=112) INFO 09-18 14:56:21 [kernel_warmup.py:184] JIT kernel warmup finished in 0.00s.
(EngineCore pid=112) INFO 09-18 14:56:21 [qwen_vl_triton_warmup.py:57] Warmed position embedding and vision rotary kernels on grids=[(1, 16, 16), (1, 16, 2), (1, 2, 16), (1, 2, 2)].
(EngineCore pid=112) INFO 09-18 14:56:21 [qwen_vl_triton_warmup.py:98] Warmed M-RoPE Triton kernels.
(EngineCore pid=112) INFO 09-18 14:56:21 [mamba_triton_warmup.py:42] Warmed Mamba batch_memcpy_kernel.
(EngineCore pid=112) INFO 09-18 14:56:22 [qwen4_exp_qsa_warmup.py:71] Warmed up Qwen4Exp QSA decode kernels: ((1, 1), (2, 1)).
(EngineCore pid=112) INFO 09-18 14:56:27 [qwen4_exp_qsa_warmup.py:85] Warmed up Qwen4Exp QSA sparse attention kernels: ((32, 2, 1), (32, 4, 4), (64, 1, 2), (64, 4, 4), (64, 8, 4), (64, 33, 8), (128, 4, 4), (128, 8, 4)).
(EngineCore pid=112) INFO 09-18 14:56:27 [kernel_warmup.py:254] Skipping FlashInfer autotune because it is disabled.
(EngineCore pid=112)
Capturing CUDA graphs (FULL): 0%| | 0/1 [00:00<?, ?it/s]
Capturing CUDA graphs (FULL): 100%|██████████| 1/1 [00:00<00:00, 9.68it/s]
Capturing CUDA graphs (FULL): 100%|██████████| 1/1 [00:00<00:00, 9.67it/s]
(EngineCore pid=112) INFO 09-18 14:56:36 [speculator.py:150] Capturing model for speculator...
(EngineCore pid=112)
Capturing prefill CUDA graphs (FULL): 0%| | 0/1 [00:00<?, ?it/s]
Capturing prefill CUDA graphs (FULL): 100%|██████████| 1/1 [00:00<00:00, 120.04it/s]
(EngineCore pid=112) INFO 09-18 14:56:36 [model_runner.py:1057] Graph capturing finished in 1 secs, took 0.10 GiB
(EngineCore pid=112) INFO 09-18 14:56:36 [gpu_worker.py:824] CUDA graph pool memory: 0.1 GiB (actual), 0.14 GiB (estimated), difference: 0.04 GiB (37.7%).
(EngineCore pid=112) INFO 09-18 14:56:36 [gpu_worker.py:887] Free memory on device (82.59/83.05 GiB) on startup. Desired GPU memory utilization is (0.985, 81.8 GiB). Actual usage is 77.82 GiB for consumed memory (weights + non-torch), 1.2 GiB for peak activation, and 0.1 GiB for CUDAGraph memory. Replace gpu_memory_utilization config with `--kv-cache-memory=2718838744` (2.53 GiB) to fit into requested memory, or `--kv-cache-memory=3565505536` (3.32 GiB) to fully utilize gpu memory. Current kv cache memory in use is 2.78 GiB.
(EngineCore pid=112) INFO 09-18 14:56:37 [jit_monitor.py:84] Kernel JIT monitor activated; monitored JIT compilations during inference will use mode=warn.
(EngineCore pid=112) WARNING 09-18 14:56:38 [torch_utils.py:274] OMP_NUM_THREADS=8 is set; leaving Torch threads at 8 for serving. Multi-threaded torch CPU ops during serving can degrade performance through spin-wait contention and cgroup CPU-quota throttling.
(EngineCore pid=112) INFO 09-18 14:56:38 [core.py:380] init engine (profile, create kv cache, warmup model) took 47.02 s
(EngineCore pid=112) INFO 09-18 14:56:38 [kv_cache_utils.py:762] kv cache group sizes [3152, 3152, 3152, 3152, 8, 3152]
(EngineCore pid=112) INFO 09-18 14:56:38 [kv_cache_utils.py:763] kv lcm block sizes 3152
(EngineCore pid=112) INFO 09-18 14:56:38 [kernel.py:408] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['vllm_c', 'native'], fused_add_rms_norm=['vllm_c', 'native'], gelu_and_mul_sparse=['triton', 'native'])
(APIServer pid=1) INFO 09-18 14:56:38 [entry.py:132] Supported tasks: ['generate']
(APIServer pid=1) INFO 09-18 14:56:38 [factories.py:76] Scale-out endpoints are disabled. Set --enable-scale-out to enable them.
(APIServer pid=1) INFO 09-18 14:56:38 [parser_manager.py:34] "auto" tool choice has been enabled.
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) [transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='default': {'mrope_section', 'mrope_interleaved'}
(APIServer pid=1) INFO 09-18 14:56:38 [hf.py:642] Detected the chat template content format to be 'openai'. You can set `--chat-template-content-format` to override this.
(APIServer pid=1) WARNING 09-18 14:56:38 [model.py:1769] Default vLLM sampling parameters have been overridden by the model's `generation_config.json`: `{'temperature': 1.0, 'top_k': 20, 'top_p': 0.95}`. If this is not intended, please relaunch vLLM instance with `--generation-config vllm`.
(APIServer pid=1) INFO 09-18 14:56:38 [entry.py:136] Starting vLLM server on http://0.0.0.0:8000
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:60] Available routes are:
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /openapi.json, Methods: HEAD, GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /docs, Methods: HEAD, GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /docs/oauth2-redirect, Methods: HEAD, GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /redoc, Methods: HEAD, GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /load, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /version, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /health, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /metrics, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /tokenize, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /detokenize, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/models, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /ping, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /ping, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /invocations, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/chat/completions, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/chat/completions/batch, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/responses, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/responses/{response_id}, Methods: GET
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/responses/{response_id}/cancel, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/completions, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/messages, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /v1/messages/count_tokens, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /generative_scoring, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /scale_elastic_ep, Methods: POST
(APIServer pid=1) INFO 09-18 14:56:38 [launcher.py:69] Route: /is_scaling_elastic_ep, Methods: POST
(APIServer pid=1) INFO: Started server process [1]
(APIServer pid=1) INFO: Waiting for application startup.
(APIServer pid=1) INFO: Application startup complete.
(APIServer pid=1) INFO: 172.21.0.1:38360 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38376 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(EngineCore pid=112) WARNING 09-18 14:56:41 [jit_monitor.py:140] Triton kernel JIT compilation during inference: layer_norm_fwd_kernel. This causes a latency spike; consider extending warmup to cover this shape/config.
(EngineCore pid=112) WARNING 09-18 14:56:41 [jit_monitor.py:140] Triton kernel JIT compilation during inference: _count_expert_num_tokens. This causes a latency spike; consider extending warmup to cover this shape/config.
(EngineCore pid=112) WARNING 09-18 14:56:41 [jit_monitor.py:140] Triton kernel JIT compilation during inference: _compute_local_logits_stats_kernel. This causes a latency spike; consider extending warmup to cover this shape/config.
(EngineCore pid=112) WARNING 09-18 14:56:41 [jit_monitor.py:140] Triton kernel JIT compilation during inference: _rejection_kernel. This causes a latency spike; consider extending warmup to cover this shape/config.
(EngineCore pid=112) WARNING 09-18 14:56:41 [jit_monitor.py:140] Triton kernel JIT compilation during inference: _resample_kernel. This causes a latency spike; consider extending warmup to cover this shape/config.
(APIServer pid=1) INFO: 172.21.0.1:38386 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38400 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 127.0.0.1:41714 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38404 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38416 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52596 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52608 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52624 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52626 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52628 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52642 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52646 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:56:49 [loggers.py:323] Engine 000: Avg prompt throughput: 64.7 tokens/s, Avg generation throughput: 73.5 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%
(APIServer pid=1) INFO 09-18 14:56:49 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.99, Accepted throughput: 36.01 tokens/s, Drafted throughput: 36.56 tokens/s, Accepted: 396 tokens, Drafted: 402 tokens, Per-position acceptance rate: 0.985, Avg Draft acceptance rate: 98.5%
(APIServer pid=1) INFO: 172.21.0.1:52658 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52666 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52672 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52688 - "POST /v1/chat/completions HTTP/1.1" 200 OK
[rank0]:[W918 14:56:53.391378074 CUDACachingAllocator.cpp:3933] memory allocation failed with OOM on device 0 while trying to allocate 377487360 bytes (free: 83820544, total: 89173131264).
(APIServer pid=1) INFO: 172.21.0.1:53008 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:53016 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:56:59 [loggers.py:323] Engine 000: Avg prompt throughput: 2778.3 tokens/s, Avg generation throughput: 59.7 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:56:59 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.90, Accepted throughput: 28.10 tokens/s, Drafted throughput: 31.20 tokens/s, Accepted: 281 tokens, Drafted: 312 tokens, Per-position acceptance rate: 0.901, Avg Draft acceptance rate: 90.1%
(APIServer pid=1) INFO: 172.21.0.1:53018 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:09 [loggers.py:323] Engine 000: Avg prompt throughput: 7.7 tokens/s, Avg generation throughput: 109.1 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:09 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.75, Accepted throughput: 46.60 tokens/s, Drafted throughput: 62.40 tokens/s, Accepted: 466 tokens, Drafted: 624 tokens, Per-position acceptance rate: 0.747, Avg Draft acceptance rate: 74.7%
(APIServer pid=1) INFO: 127.0.0.1:34068 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:19 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 108.5 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:19 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.72, Accepted throughput: 45.60 tokens/s, Drafted throughput: 62.90 tokens/s, Accepted: 456 tokens, Drafted: 629 tokens, Per-position acceptance rate: 0.725, Avg Draft acceptance rate: 72.5%
(APIServer pid=1) INFO: 172.21.0.1:44752 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:29 [loggers.py:323] Engine 000: Avg prompt throughput: 7.7 tokens/s, Avg generation throughput: 111.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:29 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.77, Accepted throughput: 48.40 tokens/s, Drafted throughput: 62.60 tokens/s, Accepted: 484 tokens, Drafted: 626 tokens, Per-position acceptance rate: 0.773, Avg Draft acceptance rate: 77.3%
(APIServer pid=1) INFO: 172.21.0.1:55170 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:39 [loggers.py:323] Engine 000: Avg prompt throughput: 7.7 tokens/s, Avg generation throughput: 107.2 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:39 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.72, Accepted throughput: 44.80 tokens/s, Drafted throughput: 62.40 tokens/s, Accepted: 448 tokens, Drafted: 624 tokens, Per-position acceptance rate: 0.718, Avg Draft acceptance rate: 71.8%
(APIServer pid=1) INFO: 127.0.0.1:39416 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:49 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 111.3 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:49 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.77, Accepted throughput: 48.30 tokens/s, Drafted throughput: 63.00 tokens/s, Accepted: 483 tokens, Drafted: 630 tokens, Per-position acceptance rate: 0.767, Avg Draft acceptance rate: 76.7%
(APIServer pid=1) INFO: 172.21.0.1:49960 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:49968 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:57:59 [loggers.py:323] Engine 000: Avg prompt throughput: 15.8 tokens/s, Avg generation throughput: 105.9 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:57:59 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.71, Accepted throughput: 43.90 tokens/s, Drafted throughput: 61.80 tokens/s, Accepted: 439 tokens, Drafted: 618 tokens, Per-position acceptance rate: 0.710, Avg Draft acceptance rate: 71.0%
(APIServer pid=1) INFO 09-18 14:58:09 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 113.3 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:09 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.80, Accepted throughput: 50.20 tokens/s, Drafted throughput: 63.10 tokens/s, Accepted: 502 tokens, Drafted: 631 tokens, Per-position acceptance rate: 0.796, Avg Draft acceptance rate: 79.6%
(APIServer pid=1) INFO: 127.0.0.1:41032 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:35070 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:58:19 [loggers.py:323] Engine 000: Avg prompt throughput: 7.9 tokens/s, Avg generation throughput: 110.7 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:19 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.77, Accepted throughput: 48.20 tokens/s, Drafted throughput: 62.50 tokens/s, Accepted: 482 tokens, Drafted: 625 tokens, Per-position acceptance rate: 0.771, Avg Draft acceptance rate: 77.1%
(APIServer pid=1) INFO 09-18 14:58:29 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 113.6 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:29 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.80, Accepted throughput: 50.49 tokens/s, Drafted throughput: 63.09 tokens/s, Accepted: 505 tokens, Drafted: 631 tokens, Per-position acceptance rate: 0.800, Avg Draft acceptance rate: 80.0%
(APIServer pid=1) INFO: 172.21.0.1:36238 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:58:39 [loggers.py:323] Engine 000: Avg prompt throughput: 7.9 tokens/s, Avg generation throughput: 110.6 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:39 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.77, Accepted throughput: 48.00 tokens/s, Drafted throughput: 62.60 tokens/s, Accepted: 480 tokens, Drafted: 626 tokens, Per-position acceptance rate: 0.767, Avg Draft acceptance rate: 76.7%
(APIServer pid=1) INFO: 127.0.0.1:47540 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:58:49 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 113.9 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:49 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.81, Accepted throughput: 50.80 tokens/s, Drafted throughput: 63.09 tokens/s, Accepted: 508 tokens, Drafted: 631 tokens, Per-position acceptance rate: 0.805, Avg Draft acceptance rate: 80.5%
(APIServer pid=1) INFO: 172.21.0.1:46184 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:34866 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:58:59 [loggers.py:323] Engine 000: Avg prompt throughput: 15.8 tokens/s, Avg generation throughput: 109.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:58:59 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.75, Accepted throughput: 46.80 tokens/s, Drafted throughput: 62.10 tokens/s, Accepted: 468 tokens, Drafted: 621 tokens, Per-position acceptance rate: 0.754, Avg Draft acceptance rate: 75.4%
(APIServer pid=1) INFO 09-18 14:59:09 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 108.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:09 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.71, Accepted throughput: 45.00 tokens/s, Drafted throughput: 63.00 tokens/s, Accepted: 450 tokens, Drafted: 630 tokens, Per-position acceptance rate: 0.714, Avg Draft acceptance rate: 71.4%
(APIServer pid=1) INFO: 127.0.0.1:32954 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:54998 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:59:19 [loggers.py:323] Engine 000: Avg prompt throughput: 7.9 tokens/s, Avg generation throughput: 108.8 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:19 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.74, Accepted throughput: 46.20 tokens/s, Drafted throughput: 62.50 tokens/s, Accepted: 462 tokens, Drafted: 625 tokens, Per-position acceptance rate: 0.739, Avg Draft acceptance rate: 73.9%
(APIServer pid=1) INFO 09-18 14:59:29 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 107.5 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:29 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.71, Accepted throughput: 44.49 tokens/s, Drafted throughput: 62.99 tokens/s, Accepted: 445 tokens, Drafted: 630 tokens, Per-position acceptance rate: 0.706, Avg Draft acceptance rate: 70.6%
(APIServer pid=1) INFO: 172.21.0.1:48116 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:59:39 [loggers.py:323] Engine 000: Avg prompt throughput: 7.9 tokens/s, Avg generation throughput: 108.6 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:39 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.74, Accepted throughput: 46.10 tokens/s, Drafted throughput: 62.50 tokens/s, Accepted: 461 tokens, Drafted: 625 tokens, Per-position acceptance rate: 0.738, Avg Draft acceptance rate: 73.8%
(APIServer pid=1) INFO: 127.0.0.1:53944 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:59:49 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 107.3 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:49 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.70, Accepted throughput: 44.30 tokens/s, Drafted throughput: 63.00 tokens/s, Accepted: 443 tokens, Drafted: 630 tokens, Per-position acceptance rate: 0.703, Avg Draft acceptance rate: 70.3%
(APIServer pid=1) [transformers] Token indices sequence length is longer than the specified maximum sequence length for this model (268298 > 262144). Running this sequence through the model will result in indexing errors
(APIServer pid=1) INFO: 172.21.0.1:43784 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:43794 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:43806 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:43814 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:43818 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40940 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40946 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40952 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40964 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40968 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40970 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40984 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:40986 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:41002 - "POST /tokenize HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:41010 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 14:59:59 [loggers.py:323] Engine 000: Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 43.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 39.4%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 14:59:59 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.72, Accepted throughput: 18.10 tokens/s, Drafted throughput: 25.00 tokens/s, Accepted: 181 tokens, Drafted: 250 tokens, Per-position acceptance rate: 0.724, Avg Draft acceptance rate: 72.4%
(APIServer pid=1) INFO 09-18 15:00:09 [loggers.py:323] Engine 000: Avg prompt throughput: 12599.4 tokens/s, Avg generation throughput: 0.7 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 74.2%, Prefix cache hit rate: 0.0%, MM cache hit rate: 66.7%
(APIServer pid=1) INFO 09-18 15:00:09 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 2.00, Accepted throughput: 0.30 tokens/s, Drafted throughput: 0.30 tokens/s, Accepted: 3 tokens, Drafted: 3 tokens, Per-position acceptance rate: 1.000, Avg Draft acceptance rate: 100.0%
(APIServer pid=1) INFO: 172.21.0.1:52464 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52476 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 127.0.0.1:57076 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:52546 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 15:00:19 [loggers.py:323] Engine 000: Avg prompt throughput: 1243.7 tokens/s, Avg generation throughput: 39.5 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 42.4%, Prefix cache hit rate: 46.2%, MM cache hit rate: 71.4%
(APIServer pid=1) INFO 09-18 15:00:19 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.92, Accepted throughput: 18.90 tokens/s, Drafted throughput: 20.60 tokens/s, Accepted: 189 tokens, Drafted: 206 tokens, Per-position acceptance rate: 0.917, Avg Draft acceptance rate: 91.7%
(APIServer pid=1) INFO: 172.21.0.1:38136 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38144 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38150 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38158 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 15:00:29 [loggers.py:323] Engine 000: Avg prompt throughput: 11171.3 tokens/s, Avg generation throughput: 24.7 tokens/s, Running: 1 reqs, Waiting: 3 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 46.2%, MM cache hit rate: 71.4%
(APIServer pid=1) INFO 09-18 15:00:29 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.87, Accepted throughput: 11.40 tokens/s, Drafted throughput: 13.10 tokens/s, Accepted: 114 tokens, Drafted: 131 tokens, Per-position acceptance rate: 0.870, Avg Draft acceptance rate: 87.0%
(APIServer pid=1) INFO: 172.21.0.1:38172 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:38188 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:34860 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:34870 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 15:00:39 [loggers.py:323] Engine 000: Avg prompt throughput: 58.8 tokens/s, Avg generation throughput: 114.1 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 46.1%, MM cache hit rate: 71.4%
(APIServer pid=1) INFO 09-18 15:00:39 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.95, Accepted throughput: 55.30 tokens/s, Drafted throughput: 58.40 tokens/s, Accepted: 553 tokens, Drafted: 584 tokens, Per-position acceptance rate: 0.947, Avg Draft acceptance rate: 94.7%
(APIServer pid=1) INFO: 127.0.0.1:44446 - "GET /health HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:34880 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO 09-18 15:00:49 [loggers.py:323] Engine 000: Avg prompt throughput: 9.2 tokens/s, Avg generation throughput: 117.2 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.2%, Prefix cache hit rate: 46.1%, MM cache hit rate: 71.4%
(APIServer pid=1) INFO 09-18 15:00:49 [metrics.py:120] SpecDecoding metrics: Mean acceptance length: 1.89, Accepted throughput: 55.10 tokens/s, Drafted throughput: 62.10 tokens/s, Accepted: 551 tokens, Drafted: 621 tokens, Per-position acceptance rate: 0.887, Avg Draft acceptance rate: 88.7%
(APIServer pid=1) INFO: 172.21.0.1:34804 - "POST /v1/chat/completions HTTP/1.1" 200 OK
(APIServer pid=1) INFO: 172.21.0.1:34816 - "POST /v1/chat/completions HTTP/1.1" 200 OK
@@ -0,0 +1,5 @@
{
"startup": true,
"records": 44,
"failures": []
}