|
47 | 47 | # LANGUAGE_MODEL_ONLY false (reference loads the vision tower) |
48 | 48 | # KV_CACHE_DTYPE fp8 (default for every arm; =auto for a bf16 A/B) |
49 | 49 | # MAX_MODEL_LEN unset (unset -> vLLM derives K3's 1M context) |
50 | | -# SPEC_DECODE false (DSpark; UNVALIDATED on ROCm) |
| 50 | +# SPEC_DECODE false (enabled by the _mtp DSpark wrapper) |
| 51 | +# ENFORCE_EAGER false (enabled by the _mtp DSpark wrapper) |
51 | 52 |
|
52 | 53 | source "$(dirname "$0")/../../benchmark_lib.sh" |
53 | 54 |
|
@@ -543,6 +544,11 @@ if [ -n "${MAX_MODEL_LEN:-}" ] && [ "${MAX_MODEL_LEN}" != "0" ]; then |
543 | 544 | MAX_MODEL_LEN_ARGS=(--max-model-len "$MAX_MODEL_LEN") |
544 | 545 | fi |
545 | 546 |
|
| 547 | +EAGER_ARGS=() |
| 548 | +if [ "${ENFORCE_EAGER:-false}" = "true" ]; then |
| 549 | + EAGER_ARGS=(--enforce-eager) |
| 550 | +fi |
| 551 | + |
546 | 552 | # The reference command passes neither --enable-prefix-caching nor |
547 | 553 | # --no-enable-prefix-caching, and this build's default is None (vLLM decides |
548 | 554 | # internally), so by default we pass nothing and stay aligned. Two reasons this |
|
579 | 585 |
|
580 | 586 | # The upstream DSpark config pins "attention_backend": "FLASHINFER_MLA", which |
581 | 587 | # is CUDA-only and cannot be used verbatim on gfx950; SPEC_ATTN_BACKEND |
582 | | -# overrides it. Golden AL on B300 is 3.78 at 7 draft tokens |
583 | | -# (golden_al_distribution/kimik3_dspark.yaml), so this is the largest decode-side |
584 | | -# lever if it can be made to run here. |
| 588 | +# overrides it. AgentX throughput uses synthetic acceptance pinned to the |
| 589 | +# committed golden curve. Eval-only runs use real block verification because |
| 590 | +# synthetic acceptance bypasses correctness verification. |
585 | 591 | SPEC_ARGS=() |
586 | 592 | if [ "${SPEC_DECODE:-false}" = "true" ]; then |
587 | 593 | SPEC_DRAFT_MODEL="${SPEC_DRAFT_MODEL:-Inferact/Kimi-K3-DSpark}" |
588 | 594 | SPEC_NUM_TOKENS="${SPEC_NUM_TOKENS:-7}" |
589 | 595 | SPEC_ATTN_BACKEND="${SPEC_ATTN_BACKEND:-TRITON_MLA}" |
| 596 | + SPEC_GOLDEN_AL="${SPEC_GOLDEN_AL:-3.84}" |
| 597 | + SPEC_GOLDEN_AL_FILE="${SPEC_GOLDEN_AL_FILE:-golden_al_distribution/kimik3_dspark_probabilistic_sample_method_block_rejection_sample_method.yaml}" |
| 598 | + FILE_GOLDEN_AL=$(awk -v k="$SPEC_NUM_TOKENS" ' |
| 599 | + /^kimi-k3:/ { in_model = 1; next } |
| 600 | + /^[^[:space:]#]/ { in_model = 0 } |
| 601 | + in_model && /thinking_on:/ { in_thinking = 1; next } |
| 602 | + in_thinking && $1 == k":" { print $2; exit } |
| 603 | + ' "$SPEC_GOLDEN_AL_FILE" 2>/dev/null) |
| 604 | + if [ "$FILE_GOLDEN_AL" != "$SPEC_GOLDEN_AL" ]; then |
| 605 | + echo "Error: DSpark golden AL mismatch: $SPEC_GOLDEN_AL_FILE gives" >&2 |
| 606 | + echo " '${FILE_GOLDEN_AL:-<unreadable>}' for k=$SPEC_NUM_TOKENS," >&2 |
| 607 | + echo " but the recipe pins $SPEC_GOLDEN_AL." >&2 |
| 608 | + exit 1 |
| 609 | + fi |
| 610 | + if [ "${EVAL_ONLY:-false}" = "true" ]; then |
| 611 | + SPEC_REJECTION_CONFIG="\"rejection_sample_method\":\"block\"" |
| 612 | + else |
| 613 | + SPEC_REJECTION_CONFIG="\"rejection_sample_method\":\"synthetic\",\"synthetic_acceptance_length\":$SPEC_GOLDEN_AL" |
| 614 | + fi |
590 | 615 | SPEC_ARGS=( |
591 | 616 | --speculative-config |
592 | | - "{\"model\":\"$SPEC_DRAFT_MODEL\",\"num_speculative_tokens\":$SPEC_NUM_TOKENS,\"method\":\"dspark\",\"attention_backend\":\"$SPEC_ATTN_BACKEND\",\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\"}" |
| 617 | + "{\"model\":\"$SPEC_DRAFT_MODEL\",\"num_speculative_tokens\":$SPEC_NUM_TOKENS,\"method\":\"dspark\",\"attention_backend\":\"$SPEC_ATTN_BACKEND\",\"draft_sample_method\":\"probabilistic\",$SPEC_REJECTION_CONFIG}" |
593 | 618 | ) |
594 | 619 | fi |
595 | 620 |
|
@@ -694,6 +719,7 @@ VLLM_CMD=( |
694 | 719 | "${MAX_MODEL_LEN_ARGS[@]}" |
695 | 720 | "${PREFIX_CACHE_ARGS[@]}" |
696 | 721 | "${KV_CACHE_DTYPE_ARGS[@]}" |
| 722 | + "${EAGER_ARGS[@]}" |
697 | 723 | "${SPEC_ARGS[@]}" |
698 | 724 | "${EVAL_SERVE_ARGS[@]}" |
699 | 725 | "${OFFLOAD_ARGS[@]}" |
|
0 commit comments