interp-engine 1.5.0__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. {interp_engine-1.5.0 → interp_engine-1.6.0}/PKG-INFO +15 -14
  2. {interp_engine-1.5.0 → interp_engine-1.6.0}/README.md +14 -13
  3. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/report_bench.py +16 -0
  4. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/deepseek-v4-flash-0731__eager.json +47 -32
  5. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +41 -27
  6. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-static.json +32 -34
  7. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +49 -35
  8. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/gemma-2-2b__eager.json +30 -28
  9. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +27 -25
  10. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/gemma-2-2b__vllm-static.json +32 -30
  11. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/gemma-2-2b__vllm.json +33 -31
  12. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/llama-3.1-8b__eager.json +30 -28
  13. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +26 -24
  14. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/llama-3.1-8b__vllm-static.json +31 -29
  15. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/llama-3.1-8b__vllm.json +33 -31
  16. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3-4b__eager.json +31 -29
  17. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +27 -25
  18. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3-4b__vllm-static.json +33 -31
  19. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3-4b__vllm.json +35 -33
  20. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3.8-27b__eager.json +30 -28
  21. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +25 -23
  22. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3.8-27b__vllm-static.json +31 -29
  23. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results/qwen3.8-27b__vllm.json +33 -31
  24. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/results-latest.md +56 -56
  25. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/run_bench.py +14 -0
  26. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/workloads.py +22 -9
  27. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/PERFORMANCE.md +6 -5
  28. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/__init__.py +3 -1
  29. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/capture.py +19 -11
  30. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/facts.py +22 -5
  31. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/memory.py +163 -29
  32. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/model.py +135 -0
  33. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_backend.py +5 -1
  34. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/_hooks.py +14 -4
  35. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/_tree.py +50 -4
  36. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/requests.py +8 -2
  37. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/static.py +123 -26
  38. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/steering.py +9 -2
  39. {interp_engine-1.5.0 → interp_engine-1.6.0}/pyproject.toml +1 -1
  40. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_bench_workloads.py +24 -1
  41. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_facts.py +34 -0
  42. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_family_points.py +81 -0
  43. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_load.py +160 -0
  44. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_memory.py +98 -6
  45. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_qkv_layout.py +18 -0
  46. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_static_set.py +200 -0
  47. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_hyper_connections.py +5 -1
  48. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_new_points.py +28 -0
  49. interp_engine-1.5.0/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -104
  50. interp_engine-1.5.0/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -179
  51. {interp_engine-1.5.0 → interp_engine-1.6.0}/.gitignore +0 -0
  52. {interp_engine-1.5.0 → interp_engine-1.6.0}/LICENSE +0 -0
  53. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/README.md +0 -0
  54. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/__init__.py +0 -0
  55. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/bench_spec.py +0 -0
  56. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/cells.py +0 -0
  57. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/probe.py +0 -0
  58. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/probe_lens_stream.py +0 -0
  59. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/publish.py +0 -0
  60. {interp_engine-1.5.0 → interp_engine-1.6.0}/benchmarks/run_all.sh +0 -0
  61. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/AGENT_INTEGRATION.md +0 -0
  62. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/ARCHITECTURE_QUIRKS.md +0 -0
  63. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/COMPATIBILITY.md +0 -0
  64. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
  65. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/GRADIENTS.md +0 -0
  66. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/INTERNALS.md +0 -0
  67. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/PORTING.md +0 -0
  68. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/README.md +0 -0
  69. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/SUPPORTED_POINTS.md +0 -0
  70. {interp_engine-1.5.0 → interp_engine-1.6.0}/docs/USAGE.md +0 -0
  71. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/_loop.py +0 -0
  72. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/address.py +0 -0
  73. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/arch.py +0 -0
  74. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/attn_config.py +0 -0
  75. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/attn_scores.py +0 -0
  76. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/autograd_support.py +0 -0
  77. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/chat_compose.py +0 -0
  78. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/chat_conventions.py +0 -0
  79. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/chat_formatters.py +0 -0
  80. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/cuda_preflight.py +0 -0
  81. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/dispatch.py +0 -0
  82. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/hooks.py +0 -0
  83. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/lens.py +0 -0
  84. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/load.py +0 -0
  85. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/mappers.py +0 -0
  86. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/moe_routing.py +0 -0
  87. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/notebook_stdout.py +0 -0
  88. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/points.py +0 -0
  89. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/protocol.py +0 -0
  90. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/residual_basis.py +0 -0
  91. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/select.py +0 -0
  92. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/steer.py +0 -0
  93. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/steer_specs.py +0 -0
  94. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/sync.py +0 -0
  95. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/tokenize.py +0 -0
  96. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/__init__.py +0 -0
  97. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/_demux.py +0 -0
  98. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/_payload.py +0 -0
  99. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/attn.py +0 -0
  100. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/capture.py +0 -0
  101. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/graphs.py +0 -0
  102. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/lens/__init__.py +0 -0
  103. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/lens/intervene.py +0 -0
  104. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/lens/readout.py +0 -0
  105. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/lens/unembed.py +0 -0
  106. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/mhc.py +0 -0
  107. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_capture/native.py +0 -0
  108. {interp_engine-1.5.0 → interp_engine-1.6.0}/interp_engine/vllm_plugin.py +0 -0
  109. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/conftest.py +0 -0
  110. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/harness.py +0 -0
  111. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/model_expectations.yaml +0 -0
  112. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/synthetic_families.py +0 -0
  113. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_address.py +0 -0
  114. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_attn_config_tripwire.py +0 -0
  115. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_attn_probs_indexing.py +0 -0
  116. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_attn_scores.py +0 -0
  117. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_attn_z_gqa.py +0 -0
  118. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_autograd_support.py +0 -0
  119. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_capability_refusals.py +0 -0
  120. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_capture_addressing.py +0 -0
  121. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_chat_compose.py +0 -0
  122. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_chat_formatters.py +0 -0
  123. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_chat_templates.py +0 -0
  124. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_core.py +0 -0
  125. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_cuda_preflight.py +0 -0
  126. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_doc_code_fences.py +0 -0
  127. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_eager_autograd.py +0 -0
  128. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_gated_attn_out.py +0 -0
  129. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_gpu_sizer.py +0 -0
  130. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_head_contributions.py +0 -0
  131. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_hook_call_conventions.py +0 -0
  132. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_layer_kinds.py +0 -0
  133. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_logit_transform.py +0 -0
  134. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_mappers.py +0 -0
  135. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_mlp_internals.py +0 -0
  136. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_model_expectations.py +0 -0
  137. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_moe.py +0 -0
  138. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_multimodal_arch.py +0 -0
  139. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_new_models_gpu.py +0 -0
  140. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_no_chat_template.py +0 -0
  141. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_normalized_hook.py +0 -0
  142. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_notebook_stdout.py +0 -0
  143. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_packaging.py +0 -0
  144. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_parity_gpt2.py +0 -0
  145. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_per_layer_attn_dims.py +0 -0
  146. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_points_registry.py +0 -0
  147. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_protocol.py +0 -0
  148. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_published_benchmarks.py +0 -0
  149. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_qk_norm.py +0 -0
  150. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_reasoning_spans.py +0 -0
  151. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_release.py +0 -0
  152. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_resid_mid.py +0 -0
  153. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_residual_basis.py +0 -0
  154. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_sandwich_norms.py +0 -0
  155. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_select.py +0 -0
  156. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_sliding_window_attn.py +0 -0
  157. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_small_models_gpu.py +0 -0
  158. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_static_dsv4_gpu.py +0 -0
  159. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_static_parity_gpu.py +0 -0
  160. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_static_warmup.py +0 -0
  161. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_steer_context.py +0 -0
  162. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_steer_math_parity.py +0 -0
  163. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_sync_loop.py +0 -0
  164. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_sync_parity.py +0 -0
  165. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_unified_free_functions.py +0 -0
  166. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_unresolved_families.py +0 -0
  167. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_capture_gpu.py +0 -0
  168. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_capture_scales.py +0 -0
  169. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_engine_loop.py +0 -0
  170. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_graph_path.py +0 -0
  171. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_graphs_on_gpu.py +0 -0
  172. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_hook_availability.py +0 -0
  173. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_kv_isolation.py +0 -0
  174. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_only_families.py +0 -0
  175. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_plugin.py +0 -0
  176. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vllm_wire_grammar.py +0 -0
  177. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_vocabulary_boundary.py +0 -0
  178. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_worker_lens_capture_readout.py +0 -0
  179. {interp_engine-1.5.0 → interp_engine-1.6.0}/tests/test_worker_lens_readout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: interp-engine
3
- Version: 1.5.0
3
+ Version: 1.6.0
4
4
  Summary: A fast, standardized, and easy to use interpretability engine.
5
5
  Project-URL: Homepage, https://github.com/decoderesearch/interp-engine
6
6
  Project-URL: Repository, https://github.com/decoderesearch/interp-engine
@@ -113,21 +113,21 @@ One stream (tok/s):
113
113
 
114
114
  | model | eager | vLLM | vLLM + static taps |
115
115
  | ------------------------ | ----- | ---------- | ------------------ |
116
- | `gemma-2-2b` | 31 | 31 (1.0x) | **214 (6.9x)** |
117
- | `qwen3-4b` | 24 | 47 (2.0x) | **296 (12.3x)** |
118
- | `llama-3.1-8b` | 33 | 57 (1.7x) | **256 (7.9x)** |
119
- | `qwen3.8-27b` | 9.9 | 12 (1.2x) | **63 (6.4x)** |
120
- | `deepseek-v4-flash-0731` | 3.3 | 2.9 (0.9x) | **119 (36x)** |
116
+ | `gemma-2-2b` | 75 | 88 (1.2x) | **220 (2.9x)** |
117
+ | `qwen3-4b` | 60 | 136 (2.3x) | **313 (5.2x)** |
118
+ | `llama-3.1-8b` | 84 | 163 (1.9x) | **258 (3.1x)** |
119
+ | `qwen3.8-27b` | 25 | 35 (1.4x) | **63 (2.5x)** |
120
+ | `deepseek-v4-flash-0731` | 5.3 | 15 (2.9x) | **132 (25x)** |
121
121
 
122
122
  8 concurrent requests (aggregate tok/s):
123
123
 
124
- | model | eager | vLLM | vLLM + static taps |
125
- | ------------------------ | ----- | ----------- | ------------------ |
126
- | `gemma-2-2b` | 30 | 226 (7.5x) | **1,238 (41x)** |
127
- | `qwen3-4b` | 24 | 333 (14.0x) | **1,018 (43x)** |
128
- | `llama-3.1-8b` | 32 | 419 (13.0x) | **1,536 (48x)** |
129
- | `qwen3.8-27b` | 9.5 | 87 (9.2x) | **386 (41x)** |
130
- | `deepseek-v4-flash-0731` | 3.2 | 23 (7.2x) | **402 (127x)** |
124
+ | model | eager | vLLM | vLLM + static taps |
125
+ | ------------------------ | ----- | ------------- | ------------------ |
126
+ | `gemma-2-2b` | 75 | 675 (9.0x) | **1,436 (19.2x)** |
127
+ | `qwen3-4b` | 61 | 973 (15.9x) | **2,219 (36x)** |
128
+ | `llama-3.1-8b` | 81 | 1,187 (14.6x) | **1,755 (22x)** |
129
+ | `qwen3.8-27b` | 24 | 246 (10.3x) | **408 (17.0x)** |
130
+ | `deepseek-v4-flash-0731` | 5.4 | 117 (22x) | **631 (116x)** |
131
131
 
132
132
  <!-- THROUGHPUT:END -->
133
133
 
@@ -148,7 +148,7 @@ We verify correctness in two main ways:
148
148
 
149
149
  [docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
150
150
 
151
- Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~40k tokens for the KV Cache.
151
+ Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~160k tokens for the KV Cache.
152
152
 
153
153
  ## Why use an Interpretability Engine instead of building from scratch?
154
154
 
@@ -160,6 +160,7 @@ Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tell
160
160
 
161
161
  - **Gemma 4 requires transformers 5.14.1** because 5.15 moved `head_dim` into `per_layer_config` and vLLM's config read dies before a weight loads ([vllm#51744](https://github.com/vllm-project/vllm/issues/51744)).
162
162
  - **DeepSeek-V2 on transformers older than 5.15.0** captures a wrong attention temperature — the engine warns at load, and upgrading is the fix ([COMPATIBILITY.md](docs/COMPATIBILITY.md)).
163
+ - **DeepSeek-V4 on the eager backend needs two flags outside Hopper.** Its FP8 paths reach for `kernels-community/deep-gemm`, which declares a `9.0a` build, and with `kernels` >= 0.16.1 the arch refusal escapes transformers' Triton fallback and kills the first forward. Load with `TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1` and `experts_implementation="grouped_mm"`, which transformers [already recommends on B200](https://github.com/huggingface/transformers/blob/93c8b7b485963a10800c91f55304db6be211c2bd/src/transformers/integrations/finegrained_fp8.py#L252-L254) for an unrelated DeepGEMM accuracy problem. The engine raises `HubKernelUnsupported` naming both; vLLM is unaffected.
163
164
  - **MXFP4 checkpoints (gpt-oss) need `interp-engine[quant]`**, which the `[vllm]` extra does not include; without it transformers dequantizes them to bf16 at roughly 3x the weights, which can turn a model that fits into one that does not.
164
165
 
165
166
  Per-architecture structural quirks — which points a family serves and why — are not caveats but facts about the architecture, and live in [ARCHITECTURE_QUIRKS.md](docs/ARCHITECTURE_QUIRKS.md).
@@ -82,21 +82,21 @@ One stream (tok/s):
82
82
 
83
83
  | model | eager | vLLM | vLLM + static taps |
84
84
  | ------------------------ | ----- | ---------- | ------------------ |
85
- | `gemma-2-2b` | 31 | 31 (1.0x) | **214 (6.9x)** |
86
- | `qwen3-4b` | 24 | 47 (2.0x) | **296 (12.3x)** |
87
- | `llama-3.1-8b` | 33 | 57 (1.7x) | **256 (7.9x)** |
88
- | `qwen3.8-27b` | 9.9 | 12 (1.2x) | **63 (6.4x)** |
89
- | `deepseek-v4-flash-0731` | 3.3 | 2.9 (0.9x) | **119 (36x)** |
85
+ | `gemma-2-2b` | 75 | 88 (1.2x) | **220 (2.9x)** |
86
+ | `qwen3-4b` | 60 | 136 (2.3x) | **313 (5.2x)** |
87
+ | `llama-3.1-8b` | 84 | 163 (1.9x) | **258 (3.1x)** |
88
+ | `qwen3.8-27b` | 25 | 35 (1.4x) | **63 (2.5x)** |
89
+ | `deepseek-v4-flash-0731` | 5.3 | 15 (2.9x) | **132 (25x)** |
90
90
 
91
91
  8 concurrent requests (aggregate tok/s):
92
92
 
93
- | model | eager | vLLM | vLLM + static taps |
94
- | ------------------------ | ----- | ----------- | ------------------ |
95
- | `gemma-2-2b` | 30 | 226 (7.5x) | **1,238 (41x)** |
96
- | `qwen3-4b` | 24 | 333 (14.0x) | **1,018 (43x)** |
97
- | `llama-3.1-8b` | 32 | 419 (13.0x) | **1,536 (48x)** |
98
- | `qwen3.8-27b` | 9.5 | 87 (9.2x) | **386 (41x)** |
99
- | `deepseek-v4-flash-0731` | 3.2 | 23 (7.2x) | **402 (127x)** |
93
+ | model | eager | vLLM | vLLM + static taps |
94
+ | ------------------------ | ----- | ------------- | ------------------ |
95
+ | `gemma-2-2b` | 75 | 675 (9.0x) | **1,436 (19.2x)** |
96
+ | `qwen3-4b` | 61 | 973 (15.9x) | **2,219 (36x)** |
97
+ | `llama-3.1-8b` | 81 | 1,187 (14.6x) | **1,755 (22x)** |
98
+ | `qwen3.8-27b` | 24 | 246 (10.3x) | **408 (17.0x)** |
99
+ | `deepseek-v4-flash-0731` | 5.4 | 117 (22x) | **631 (116x)** |
100
100
 
101
101
  <!-- THROUGHPUT:END -->
102
102
 
@@ -117,7 +117,7 @@ We verify correctness in two main ways:
117
117
 
118
118
  [docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
119
119
 
120
- Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~40k tokens for the KV Cache.
120
+ Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~160k tokens for the KV Cache.
121
121
 
122
122
  ## Why use an Interpretability Engine instead of building from scratch?
123
123
 
@@ -129,6 +129,7 @@ Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tell
129
129
 
130
130
  - **Gemma 4 requires transformers 5.14.1** because 5.15 moved `head_dim` into `per_layer_config` and vLLM's config read dies before a weight loads ([vllm#51744](https://github.com/vllm-project/vllm/issues/51744)).
131
131
  - **DeepSeek-V2 on transformers older than 5.15.0** captures a wrong attention temperature — the engine warns at load, and upgrading is the fix ([COMPATIBILITY.md](docs/COMPATIBILITY.md)).
132
+ - **DeepSeek-V4 on the eager backend needs two flags outside Hopper.** Its FP8 paths reach for `kernels-community/deep-gemm`, which declares a `9.0a` build, and with `kernels` >= 0.16.1 the arch refusal escapes transformers' Triton fallback and kills the first forward. Load with `TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1` and `experts_implementation="grouped_mm"`, which transformers [already recommends on B200](https://github.com/huggingface/transformers/blob/93c8b7b485963a10800c91f55304db6be211c2bd/src/transformers/integrations/finegrained_fp8.py#L252-L254) for an unrelated DeepGEMM accuracy problem. The engine raises `HubKernelUnsupported` naming both; vLLM is unaffected.
132
133
  - **MXFP4 checkpoints (gpt-oss) need `interp-engine[quant]`**, which the `[vllm]` extra does not include; without it transformers dequantizes them to bf16 at roughly 3x the weights, which can turn a model that fits into one that does not.
133
134
 
134
135
  Per-architecture structural quirks — which points a family serves and why — are not caveats but facts about the architecture, and live in [ARCHITECTURE_QUIRKS.md](docs/ARCHITECTURE_QUIRKS.md).
@@ -123,6 +123,19 @@ def _columns(cells: list[dict[str, Any]]) -> list[str]:
123
123
  return [k for k in COLUMNS if k in present] + [k for k in present if k not in COLUMNS]
124
124
 
125
125
 
126
+ def _rendered(cells: list[dict[str, Any]]) -> list[dict[str, Any]]:
127
+ """The cells this report actually shows, which is what its header has to be about.
128
+
129
+ Dropping :data:`EXCLUDED` from the columns was not enough: the cell count, the run's date range
130
+ and the environment table were all still computed over everything on disk, so a dspark cell left
131
+ over from an older stack described the whole report. It really happened -- a table whose figures
132
+ were all measured on vLLM 0.28 carried an environment block reading 0.26, because the stalest
133
+ cell in the directory sorted first and the block takes the first one it is given.
134
+ """
135
+ shown = set(_columns(cells))
136
+ return [c for c in cells if c["variant"]["key"] in shown]
137
+
138
+
126
139
  def _variant_specs(cells: list[dict[str, Any]]) -> list[Any]:
127
140
  """The specs behind :func:`_columns`, in the same order, for the report's variant table."""
128
141
  by_key = {v.key: v for v in VARIANTS}
@@ -350,6 +363,9 @@ def _steering_overhead(cells: list[dict[str, Any]]) -> list[str]:
350
363
 
351
364
 
352
365
  def build_report(cells: list[dict[str, Any]], sweep_command: str) -> str:
366
+ if not cells:
367
+ return "# interp-engine speed benchmarks\n\nNo results found.\n"
368
+ cells = _rendered(cells)
353
369
  if not cells:
354
370
  return "# interp-engine speed benchmarks\n\nNo results found.\n"
355
371
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": 2,
3
- "started_at": "2026-08-19T16:17:03+00:00",
3
+ "started_at": "2026-09-04T08:04:10+00:00",
4
4
  "command": "python -m benchmarks.run_bench --model deepseek-v4-flash-0731 --variant eager",
5
5
  "python": "python",
6
6
  "model": {
@@ -11,12 +11,26 @@
11
11
  "dtype": "bfloat16",
12
12
  "min_gpu_gib": 170.0,
13
13
  "capture_point": "mlp_out",
14
+ "per_variant_vllm_kwargs": {
15
+ "vllm-static": {
16
+ "max_num_batched_tokens": 1024,
17
+ "compilation_config": {
18
+ "cudagraph_capture_sizes": [
19
+ 1,
20
+ 2,
21
+ 4,
22
+ 8,
23
+ 16,
24
+ 32
25
+ ]
26
+ }
27
+ }
28
+ },
29
+ "static_capture_point": "resid_streams",
14
30
  "extra_eager_kwargs": {
15
31
  "device_map": "cuda"
16
32
  },
17
- "extra_vllm_kwargs": {
18
- "kv_cache_dtype": "fp8"
19
- },
33
+ "extra_vllm_kwargs": {},
20
34
  "gpu_memory_utilization": 0.95,
21
35
  "native_dtype": "bfloat16"
22
36
  },
@@ -25,20 +39,21 @@
25
39
  "backend": "eager",
26
40
  "note": "raw HF forward; attn_implementation=eager, the engine's default",
27
41
  "kwargs": {
28
- "device_map": "cuda"
42
+ "device_map": "cuda",
43
+ "model_kwargs": "{'experts_implementation': 'grouped_mm'}"
29
44
  }
30
45
  },
31
46
  "env": {
32
47
  "gpu_name": "NVIDIA B200",
33
- "gpu_total_gib": 178.3511962890625,
34
- "driver_version": "580.105.08",
48
+ "gpu_total_gib": 178.35107421875,
49
+ "driver_version": "580.126.20",
35
50
  "cuda_version": "13.0",
36
- "torch_version": "2.11.0+cu130",
37
- "vllm_version": "0.26.0",
38
- "transformers_version": "5.14.1",
39
- "interp_engine_version": "1.2.0",
40
- "python_version": "3.12.3",
41
- "platform": "linux 6.8.0-90-generic",
51
+ "torch_version": "2.13.0+cu130",
52
+ "vllm_version": "0.28.0",
53
+ "transformers_version": "5.16.1",
54
+ "interp_engine_version": "1.6.0",
55
+ "python_version": "3.13.8",
56
+ "platform": "linux 6.8.0-100-generic",
42
57
  "extra": {
43
58
  "VLLM_DEEP_GEMM_WARMUP": "skip"
44
59
  }
@@ -48,10 +63,10 @@
48
63
  "status": "ok",
49
64
  "reason": "",
50
65
  "metrics": {
51
- "ttft_ms": 447.032670956105,
52
- "prefill_tok_s": 1145.330158766571,
53
- "decode_tok_s": 3.2860430257568205,
54
- "total_s": 39.095339769963175
66
+ "ttft_ms": 348.0888856574893,
67
+ "prefill_tok_s": 1470.8886755545395,
68
+ "decode_tok_s": 5.334557839162081,
69
+ "total_s": 24.1551229134202
55
70
  },
56
71
  "detail": {
57
72
  "prompt_tokens": 512,
@@ -63,9 +78,9 @@
63
78
  "status": "ok",
64
79
  "reason": "",
65
80
  "metrics": {
66
- "total_s": 324.3678773867432,
67
- "aggregate_tok_s": 3.1569093963613626,
68
- "per_request_s": 40.5459846733429
81
+ "total_s": 188.6664756303653,
82
+ "aggregate_tok_s": 5.427567333192873,
83
+ "per_request_s": 23.583309453795664
69
84
  },
70
85
  "detail": {
71
86
  "concurrency": 8,
@@ -78,8 +93,8 @@
78
93
  "status": "ok",
79
94
  "reason": "",
80
95
  "metrics": {
81
- "latency_ms": 438.4800470434129,
82
- "prompt_tok_s": 1167.6700079110053,
96
+ "latency_ms": 322.7837970480323,
97
+ "prompt_tok_s": 1586.2010568139242,
83
98
  "transported_mib": 4.0
84
99
  },
85
100
  "detail": {
@@ -95,8 +110,8 @@
95
110
  "status": "ok",
96
111
  "reason": "",
97
112
  "metrics": {
98
- "latency_ms": 527.5651426054537,
99
- "prompt_tok_s": 970.4962641607004,
113
+ "latency_ms": 371.26773688942194,
114
+ "prompt_tok_s": 1379.0586930328764,
100
115
  "transported_mib": 172.0
101
116
  },
102
117
  "detail": {
@@ -112,7 +127,7 @@
112
127
  "status": "ok",
113
128
  "reason": "",
114
129
  "metrics": {
115
- "latency_ms": 10090.246555861086,
130
+ "latency_ms": 6102.334971539676,
116
131
  "transported_mib": 1.2421875
117
132
  },
118
133
  "detail": {
@@ -130,7 +145,7 @@
130
145
  "status": "ok",
131
146
  "reason": "",
132
147
  "metrics": {
133
- "latency_ms": 10067.315930966288,
148
+ "latency_ms": 6089.949840679765,
134
149
  "transported_mib": 1.2421875
135
150
  },
136
151
  "detail": {
@@ -148,8 +163,8 @@
148
163
  "status": "ok",
149
164
  "reason": "",
150
165
  "metrics": {
151
- "latency_ms": 2.645158674567938,
152
- "rows_per_s": 193561.16701907513,
166
+ "latency_ms": 1.2944107875227928,
167
+ "rows_per_s": 395546.76532003516,
153
168
  "result_mib": 0.048828125
154
169
  },
155
170
  "detail": {
@@ -161,9 +176,9 @@
161
176
  }
162
177
  },
163
178
  "load": {
164
- "construct_s": 74.84105253126472,
165
- "warmup_s": 2.330029383301735e-05,
166
- "ready_s": 74.84107583155856,
179
+ "construct_s": 19.825129061937332,
180
+ "warmup_s": 6.800517439842224e-06,
181
+ "ready_s": 19.825135862454772,
167
182
  "n_layers": 43,
168
183
  "d_model": 4096,
169
184
  "device": "cuda:0",
@@ -171,5 +186,5 @@
171
186
  "resolved_dtype": "bfloat16",
172
187
  "grad_through_forward": false
173
188
  },
174
- "finished_at": "2026-08-19T16:34:07+00:00"
189
+ "finished_at": "2026-09-04T08:15:23+00:00"
175
190
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": 2,
3
- "started_at": "2026-08-19T14:49:37+00:00",
3
+ "started_at": "2026-09-04T08:24:40+00:00",
4
4
  "command": "python -m benchmarks.run_bench --model deepseek-v4-flash-0731 --variant vllm-cudagraph",
5
5
  "python": "python",
6
6
  "model": {
@@ -11,12 +11,26 @@
11
11
  "dtype": "bfloat16",
12
12
  "min_gpu_gib": 170.0,
13
13
  "capture_point": "mlp_out",
14
+ "per_variant_vllm_kwargs": {
15
+ "vllm-static": {
16
+ "max_num_batched_tokens": 1024,
17
+ "compilation_config": {
18
+ "cudagraph_capture_sizes": [
19
+ 1,
20
+ 2,
21
+ 4,
22
+ 8,
23
+ 16,
24
+ 32
25
+ ]
26
+ }
27
+ }
28
+ },
29
+ "static_capture_point": "resid_streams",
14
30
  "extra_eager_kwargs": {
15
31
  "device_map": "cuda"
16
32
  },
17
- "extra_vllm_kwargs": {
18
- "kv_cache_dtype": "fp8"
19
- },
33
+ "extra_vllm_kwargs": {},
20
34
  "gpu_memory_utilization": 0.95,
21
35
  "native_dtype": "bfloat16"
22
36
  },
@@ -27,20 +41,20 @@
27
41
  "kwargs": {
28
42
  "max_model_len": "2048",
29
43
  "gpu_memory_utilization": "0.95",
30
- "extra_vllm_kwargs": "{'kv_cache_dtype': 'fp8', 'enable_prefix_caching': False}"
44
+ "extra_vllm_kwargs": "{'enable_prefix_caching': False}"
31
45
  }
32
46
  },
33
47
  "env": {
34
48
  "gpu_name": "NVIDIA B200",
35
- "gpu_total_gib": 178.3511962890625,
36
- "driver_version": "580.105.08",
49
+ "gpu_total_gib": 178.35107421875,
50
+ "driver_version": "580.126.20",
37
51
  "cuda_version": "13.0",
38
- "torch_version": "2.11.0+cu130",
39
- "vllm_version": "0.26.0",
40
- "transformers_version": "5.14.1",
41
- "interp_engine_version": "1.2.0",
42
- "python_version": "3.12.3",
43
- "platform": "linux 6.8.0-90-generic",
52
+ "torch_version": "2.13.0+cu130",
53
+ "vllm_version": "0.28.0",
54
+ "transformers_version": "5.16.1",
55
+ "interp_engine_version": "1.6.0",
56
+ "python_version": "3.13.8",
57
+ "platform": "linux 6.8.0-100-generic",
44
58
  "extra": {
45
59
  "VLLM_DEEP_GEMM_WARMUP": "skip"
46
60
  }
@@ -50,10 +64,10 @@
50
64
  "status": "ok",
51
65
  "reason": "",
52
66
  "metrics": {
53
- "ttft_ms": 390.6881511211395,
54
- "prefill_tok_s": 1310.5081342516723,
55
- "decode_tok_s": 151.38788310571746,
56
- "total_s": 1.2295928071253002
67
+ "ttft_ms": 76.75724849104881,
68
+ "prefill_tok_s": 6670.379802107,
69
+ "decode_tok_s": 152.09943506242846,
70
+ "total_s": 0.9117373386397958
57
71
  },
58
72
  "detail": {
59
73
  "prompt_tokens": 512,
@@ -65,9 +79,9 @@
65
79
  "status": "ok",
66
80
  "reason": "",
67
81
  "metrics": {
68
- "total_s": 2.3538868555333465,
69
- "aggregate_tok_s": 435.0251574721423,
70
- "per_request_s": 0.2942358569416683
82
+ "total_s": 1.3893375098705292,
83
+ "aggregate_tok_s": 737.0419302185438,
84
+ "per_request_s": 0.17366718873381615
71
85
  },
72
86
  "detail": {
73
87
  "concurrency": 8,
@@ -104,8 +118,8 @@
104
118
  "status": "ok",
105
119
  "reason": "",
106
120
  "metrics": {
107
- "latency_ms": 107.80607210472226,
108
- "rows_per_s": 4749.268663667162,
121
+ "latency_ms": 26.252491399645805,
122
+ "rows_per_s": 19502.910874466863,
109
123
  "result_mib": 0.05859375
110
124
  },
111
125
  "detail": {
@@ -113,15 +127,15 @@
113
127
  "top_n": 10,
114
128
  "path": "worker-side top-k (decode_residuals_topk)",
115
129
  "repeats": 3,
116
- "topk_id_overlap_vs_full": 0.9848,
130
+ "topk_id_overlap_vs_full": 0.9816,
117
131
  "topk_worst_shortfall_frac_of_range": 0.0
118
132
  }
119
133
  }
120
134
  },
121
135
  "load": {
122
- "construct_s": 1.623564304318279,
123
- "warmup_s": 1416.6046979688108,
124
- "ready_s": 1418.228262273129,
136
+ "construct_s": 1.4092194680124521,
137
+ "warmup_s": 215.26768506783992,
138
+ "ready_s": 216.67690453585237,
125
139
  "n_layers": 43,
126
140
  "d_model": 4096,
127
141
  "device": "cuda (vllm worker)",
@@ -129,5 +143,5 @@
129
143
  "resolved_dtype": "bfloat16",
130
144
  "grad_through_forward": false
131
145
  },
132
- "finished_at": "2026-08-19T15:13:34+00:00"
146
+ "finished_at": "2026-09-04T08:28:27+00:00"
133
147
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": 2,
3
- "started_at": "2026-08-19T19:27:24+00:00",
3
+ "started_at": "2026-09-04T07:18:04+00:00",
4
4
  "command": "python -m benchmarks.run_bench --model deepseek-v4-flash-0731 --variant vllm-static",
5
5
  "python": "python",
6
6
  "model": {
@@ -30,9 +30,7 @@
30
30
  "extra_eager_kwargs": {
31
31
  "device_map": "cuda"
32
32
  },
33
- "extra_vllm_kwargs": {
34
- "kv_cache_dtype": "fp8"
35
- },
33
+ "extra_vllm_kwargs": {},
36
34
  "gpu_memory_utilization": 0.95,
37
35
  "native_dtype": "bfloat16"
38
36
  },
@@ -45,20 +43,20 @@
45
43
  "static_writes": "[('resid_streams', 21)]",
46
44
  "max_model_len": "2048",
47
45
  "gpu_memory_utilization": "0.95",
48
- "extra_vllm_kwargs": "{'kv_cache_dtype': 'fp8', 'max_num_batched_tokens': 1024, 'compilation_config': {'cudagraph_capture_sizes': [1, 2, 4, 8, 16, 32]}, 'enable_prefix_caching': False}"
46
+ "extra_vllm_kwargs": "{'max_num_batched_tokens': 1024, 'compilation_config': {'cudagraph_capture_sizes': [1, 2, 4, 8, 16, 32]}, 'enable_prefix_caching': False}"
49
47
  }
50
48
  },
51
49
  "env": {
52
50
  "gpu_name": "NVIDIA B200",
53
- "gpu_total_gib": 178.3511962890625,
54
- "driver_version": "580.105.08",
51
+ "gpu_total_gib": 178.35107421875,
52
+ "driver_version": "580.126.20",
55
53
  "cuda_version": "13.0",
56
- "torch_version": "2.11.0+cu130",
57
- "vllm_version": "0.26.0",
58
- "transformers_version": "5.14.1",
59
- "interp_engine_version": "1.2.0",
60
- "python_version": "3.12.3",
61
- "platform": "linux 6.8.0-90-generic",
54
+ "torch_version": "2.13.0+cu130",
55
+ "vllm_version": "0.28.0",
56
+ "transformers_version": "5.16.1",
57
+ "interp_engine_version": "1.6.0",
58
+ "python_version": "3.13.8",
59
+ "platform": "linux 6.8.0-100-generic",
62
60
  "extra": {
63
61
  "VLLM_DEEP_GEMM_WARMUP": "skip"
64
62
  }
@@ -68,10 +66,10 @@
68
66
  "status": "ok",
69
67
  "reason": "",
70
68
  "metrics": {
71
- "ttft_ms": 318.4659071266651,
72
- "prefill_tok_s": 1607.707414019547,
73
- "decode_tok_s": 118.92239360242137,
74
- "total_s": 1.3863892490044236
69
+ "ttft_ms": 75.92793833464384,
70
+ "prefill_tok_s": 6743.235905384625,
71
+ "decode_tok_s": 131.86411564042513,
72
+ "total_s": 1.0390406046062708
75
73
  },
76
74
  "detail": {
77
75
  "prompt_tokens": 512,
@@ -83,14 +81,14 @@
83
81
  "status": "ok",
84
82
  "reason": "",
85
83
  "metrics": {
86
- "total_s": 2.5435977161396295,
87
- "aggregate_tok_s": 402.1862393997538,
88
- "per_request_s": 0.3179497145174537
84
+ "total_s": 1.6222849520854652,
85
+ "aggregate_tok_s": 631.2084684528675,
86
+ "per_request_s": 0.20278561901068315
89
87
  },
90
88
  "detail": {
91
89
  "concurrency": 8,
92
90
  "prompt_tokens": 512,
93
- "generated_tokens_total": 1023,
91
+ "generated_tokens_total": 1024,
94
92
  "repeats": 2
95
93
  }
96
94
  },
@@ -98,8 +96,8 @@
98
96
  "status": "ok",
99
97
  "reason": "",
100
98
  "metrics": {
101
- "latency_ms": 484.4155637547374,
102
- "prompt_tok_s": 1056.943744811694,
99
+ "latency_ms": 131.99533242732286,
100
+ "prompt_tok_s": 3878.9250391252217,
103
101
  "transported_mib": 32.0
104
102
  },
105
103
  "detail": {
@@ -115,8 +113,8 @@
115
113
  "status": "ok",
116
114
  "reason": "",
117
115
  "metrics": {
118
- "latency_ms": 5581.670379731804,
119
- "prompt_tok_s": 91.728813270518,
116
+ "latency_ms": 2049.1460720077157,
117
+ "prompt_tok_s": 249.86017687765508,
120
118
  "transported_mib": 1376.0
121
119
  },
122
120
  "detail": {
@@ -132,7 +130,7 @@
132
130
  "status": "ok",
133
131
  "reason": "",
134
132
  "metrics": {
135
- "latency_ms": 604.7434308566153,
133
+ "latency_ms": 336.8926215916872,
136
134
  "transported_mib": 9.9375
137
135
  },
138
136
  "detail": {
@@ -150,7 +148,7 @@
150
148
  "status": "ok",
151
149
  "reason": "",
152
150
  "metrics": {
153
- "latency_ms": 631.2098908238113,
151
+ "latency_ms": 324.6788289397955,
154
152
  "transported_mib": 9.9375
155
153
  },
156
154
  "detail": {
@@ -168,8 +166,8 @@
168
166
  "status": "ok",
169
167
  "reason": "",
170
168
  "metrics": {
171
- "latency_ms": 97.82497305423021,
172
- "rows_per_s": 5233.837373164089,
169
+ "latency_ms": 24.669302627444267,
170
+ "rows_per_s": 20754.538858768017,
173
171
  "result_mib": 0.05859375
174
172
  },
175
173
  "detail": {
@@ -177,15 +175,15 @@
177
175
  "top_n": 10,
178
176
  "path": "worker-side top-k (decode_residuals_topk)",
179
177
  "repeats": 3,
180
- "topk_id_overlap_vs_full": 0.9848,
178
+ "topk_id_overlap_vs_full": 0.9846,
181
179
  "topk_worst_shortfall_frac_of_range": 0.0
182
180
  }
183
181
  }
184
182
  },
185
183
  "load": {
186
- "construct_s": 1.8341202763840556,
187
- "warmup_s": 1073.8554912502877,
188
- "ready_s": 1075.6896115266718,
184
+ "construct_s": 1.3641586303710938,
185
+ "warmup_s": 126.34760607592762,
186
+ "ready_s": 127.71176470629871,
189
187
  "n_layers": 43,
190
188
  "d_model": 4096,
191
189
  "device": "cuda (vllm worker)",
@@ -193,5 +191,5 @@
193
191
  "resolved_dtype": "bfloat16",
194
192
  "grad_through_forward": false
195
193
  },
196
- "finished_at": "2026-08-19T19:46:07+00:00"
194
+ "finished_at": "2026-09-04T07:20:35+00:00"
197
195
  }