{
  "date": "2026-06-12",
  "repo_commit": "615c0b5",
  "hardware": {
    "gpu": "NVIDIA GB10",
    "driver": "580.126.09",
    "pytorch": "2.11.0+cu130",
    "cuda": "13.0"
  },
  "audio": {
    "name": "ref2_16k.wav",
    "duration_sec": 10.9227,
    "sample_rate_hz": 16000,
    "channels": 1
  },
  "settings": {
    "dtype": "bf16",
    "language": "English",
    "batch_size": 1,
    "warmup": "1+ (graph runs include the one-time torch.compile in warmup)",
    "runs": 5,
    "metric": "best wall time after CUDA synchronize for Torch paths; direct vLLM uses synchronous llm.chat wall time",
    "note": "All Torch-stack entries remeasured 2026-06-12 with GPU mel feature extraction (gpu-feature-extraction branch). Direct vLLM entries are from the 2026-06-11 run on their own documented stack. Same-process A/B isolates the GPU feature extraction change from normal session-to-session variance."
  },
  "baseline": {
    "name": "qwen-asr (official, https://github.com/QwenLM/Qwen3-ASR)",
    "configuration": "transformers backend, SDPA, generate()-based decoding, called directly without this wrapper"
  },
  "direct_vllm_baseline": {
    "name": "direct vLLM Qwen3-ASR path from the official README",
    "configuration": "vllm.LLM(...).chat(...) with audio_url data URL input, max_model_len=4096, gpu_memory_utilization=0.65, async_scheduling=False, max_tokens=256, best of five after one warmup",
    "runtime": {
      "vllm": "0.19.1+cu130",
      "pytorch": "2.10.0+cu130",
      "transformers": "5.6.1",
      "cuda": "13.0"
    },
    "package_stack_note": "The exact qwen-asr[vllm] package stack (qwen-asr 0.0.6, vLLM 0.14.0, transformers 4.57.6) could not be benchmarked on this GB10 CUDA 13 host because the available vLLM 0.14 wheel was linked against CUDA 12 (libcudart.so.12).",
    "measured": "2026-06-11"
  },
  "results": {
    "0.6B": {
      "qwen_asr_official": {
        "best_sec": 0.4119,
        "audio_sec": 10.9227,
        "rtf": 26.52
      },
      "direct_vllm_compiled_graphs": {
        "best_sec": 0.2933,
        "audio_sec": 10.9227,
        "rtf": 37.24,
        "speedup_vs_qwen_asr_transformers": 1.4,
        "faster_qwen_asr_bf16_speedup_vs_direct_vllm": 1.43,
        "note": "vLLM compile/CUDA graph path enabled"
      },
      "direct_vllm_eager": {
        "best_sec": 0.3363,
        "audio_sec": 10.9227,
        "rtf": 32.47,
        "note": "vLLM enforce_eager=True; torch.compile and CUDA graphs disabled"
      },
      "faster_qwen_asr_dynamic_decode": {
        "best_sec": 0.4833,
        "audio_sec": 10.9227,
        "rtf": 22.6,
        "note": "internal fallback path (--no-cuda-graph), manual greedy decode"
      },
      "faster_qwen_asr_cuda_graph": {
        "best_sec": 0.2058,
        "audio_sec": 10.9227,
        "rtf": 53.07,
        "speedup_vs_qwen_asr": 2.0
      },
      "faster_qwen_asr_cuda_graph_int8": {
        "best_sec": 0.1388,
        "audio_sec": 10.9227,
        "rtf": 78.68,
        "speedup_vs_qwen_asr": 2.97,
        "speedup_vs_bf16_graph": 1.48,
        "quantization": "int8 weight-only (torchao), text decoder + lm_head only, opt-in"
      }
    },
    "1.7B": {
      "qwen_asr_official": {
        "best_sec": 0.8464,
        "audio_sec": 10.9227,
        "rtf": 12.91
      },
      "direct_vllm_compiled_graphs": {
        "best_sec": 0.7361,
        "audio_sec": 10.9227,
        "rtf": 14.84,
        "speedup_vs_qwen_asr_transformers": 1.15,
        "faster_qwen_asr_bf16_speedup_vs_direct_vllm": 1.51,
        "note": "vLLM compile/CUDA graph path enabled"
      },
      "direct_vllm_eager": {
        "best_sec": 0.777,
        "audio_sec": 10.9227,
        "rtf": 14.06,
        "note": "vLLM enforce_eager=True; torch.compile and CUDA graphs disabled"
      },
      "faster_qwen_asr_dynamic_decode": {
        "best_sec": 0.906,
        "audio_sec": 10.9227,
        "rtf": 12.06,
        "note": "internal fallback path (--no-cuda-graph), manual greedy decode"
      },
      "faster_qwen_asr_cuda_graph": {
        "best_sec": 0.489,
        "audio_sec": 10.9227,
        "rtf": 22.34,
        "speedup_vs_qwen_asr": 1.73
      },
      "faster_qwen_asr_cuda_graph_int8": {
        "best_sec": 0.3097,
        "audio_sec": 10.9227,
        "rtf": 35.27,
        "speedup_vs_qwen_asr": 2.73,
        "speedup_vs_bf16_graph": 1.58,
        "quantization": "int8 weight-only (torchao), text decoder + lm_head only, opt-in"
      }
    }
  },
  "same_process_ab": {
    "configuration": "Interleaved same-process comparison on the PR branch after CUDA graph warmup, monkey-patching only TorchQwenASRBackend._prepare_inputs to alternate between the old CPU processor path and the PR GPU feature extraction path.",
    "0.6B_bf16_cuda_graph": {
      "runs_per_variant": 12,
      "cpu_feature_extraction": {
        "best_sec": 0.2141,
        "median_sec": 0.2167,
        "avg_sec": 0.2171
      },
      "gpu_feature_extraction": {
        "best_sec": 0.2045,
        "median_sec": 0.206,
        "avg_sec": 0.2062
      },
      "median_delta_sec": -0.0107,
      "median_speedup": 1.0517
    },
    "1.7B_bf16_cuda_graph": {
      "runs_per_variant": 8,
      "cpu_feature_extraction": {
        "best_sec": 0.5003,
        "median_sec": 0.503,
        "avg_sec": 0.5028
      },
      "gpu_feature_extraction": {
        "best_sec": 0.4909,
        "median_sec": 0.4937,
        "avg_sec": 0.493
      },
      "median_delta_sec": -0.0093,
      "median_speedup": 1.0188
    }
  },
  "notes": {
    "configuration": "faster-qwen-asr CUDA graph decode is the default path: self-feeding captured graph (token feedback, mask and position computation in-graph) with a torch.compile'd (max-autotune-no-cudagraphs) decode step, prefill written directly into the StaticCache.",
    "direct_vllm": "Direct vLLM returns raw Qwen ASR text such as 'language English<asr_text>...' when not routed through qwen_asr.parse_asr_output; timings measure generation only, not wrapper parsing.",
    "correctness": "bf16 transcripts byte-identical to the pre-optimization implementation on a 4-clip x 2-size x 2-path verification set. int8: 7/8 transcripts identical, one clip changed a single word.",
    "previous_baseline": "Pre-optimization (commit 20ee9b1, 11.0s JFK clip): 0.6B dynamic 0.3951s / graph 0.2863s; 1.7B dynamic 1.5435s / graph 0.6296s."
  }
}
