sglang 0.4.6.post5__py3-none-any.whl → 0.4.7__py3-none-any.whl

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 (318) hide show
  1. sglang/bench_offline_throughput.py +10 -4
  2. sglang/bench_one_batch_server.py +67 -11
  3. sglang/bench_serving.py +85 -74
  4. sglang/lang/backend/runtime_endpoint.py +24 -1
  5. sglang/profiler.py +167 -0
  6. sglang/srt/_custom_ops.py +34 -0
  7. sglang/srt/configs/internvl.py +8 -12
  8. sglang/srt/configs/model_config.py +27 -1
  9. sglang/srt/constrained/base_grammar_backend.py +5 -2
  10. sglang/srt/constrained/llguidance_backend.py +9 -8
  11. sglang/srt/constrained/outlines_backend.py +5 -4
  12. sglang/srt/constrained/xgrammar_backend.py +18 -18
  13. sglang/srt/conversation.py +46 -8
  14. sglang/srt/custom_op.py +38 -3
  15. sglang/srt/debug_utils.py +74 -0
  16. sglang/srt/disaggregation/common/__init__.py +1 -0
  17. sglang/srt/disaggregation/common/conn.py +407 -0
  18. sglang/srt/disaggregation/decode.py +67 -3
  19. sglang/srt/disaggregation/fake/conn.py +1 -0
  20. sglang/srt/disaggregation/kv_events.py +60 -5
  21. sglang/srt/disaggregation/launch_lb.py +140 -0
  22. sglang/srt/disaggregation/mini_lb.py +29 -48
  23. sglang/srt/disaggregation/mooncake/conn.py +432 -140
  24. sglang/srt/disaggregation/mooncake/transfer_engine.py +32 -16
  25. sglang/srt/disaggregation/nixl/conn.py +124 -432
  26. sglang/srt/disaggregation/prefill.py +2 -0
  27. sglang/srt/disaggregation/utils.py +38 -1
  28. sglang/srt/distributed/device_communicators/pymscclpp.py +315 -0
  29. sglang/srt/distributed/parallel_state.py +52 -5
  30. sglang/srt/entrypoints/EngineBase.py +6 -0
  31. sglang/srt/entrypoints/engine.py +102 -5
  32. sglang/srt/entrypoints/http_server.py +15 -2
  33. sglang/srt/function_call/base_format_detector.py +138 -86
  34. sglang/srt/function_call/deepseekv3_detector.py +54 -6
  35. sglang/srt/function_call/ebnf_composer.py +33 -19
  36. sglang/srt/function_call/function_call_parser.py +27 -0
  37. sglang/srt/function_call/llama32_detector.py +33 -14
  38. sglang/srt/function_call/mistral_detector.py +73 -26
  39. sglang/srt/function_call/pythonic_detector.py +86 -20
  40. sglang/srt/function_call/qwen25_detector.py +64 -10
  41. sglang/srt/function_call/utils.py +17 -0
  42. sglang/srt/hf_transformers_utils.py +4 -0
  43. sglang/srt/layers/attention/aiter_backend.py +488 -123
  44. sglang/srt/layers/attention/base_attn_backend.py +4 -0
  45. sglang/srt/layers/attention/cutlass_mla_backend.py +2 -19
  46. sglang/srt/layers/attention/flashattention_backend.py +103 -18
  47. sglang/srt/layers/attention/flashinfer_backend.py +45 -1
  48. sglang/srt/layers/attention/flashinfer_mla_backend.py +37 -1
  49. sglang/srt/layers/attention/intel_amx_backend.py +128 -0
  50. sglang/srt/layers/attention/tbo_backend.py +232 -0
  51. sglang/srt/layers/attention/torch_native_backend.py +3 -0
  52. sglang/srt/layers/attention/triton_backend.py +244 -5
  53. sglang/srt/layers/attention/triton_ops/extend_attention.py +12 -4
  54. sglang/srt/layers/communicator.py +260 -194
  55. sglang/srt/layers/dp_attention.py +6 -5
  56. sglang/srt/layers/layernorm.py +30 -19
  57. sglang/srt/layers/moe/cutlass_moe.py +170 -7
  58. sglang/srt/layers/moe/cutlass_moe_params.py +169 -0
  59. sglang/srt/layers/moe/ep_moe/kernels.py +27 -6
  60. sglang/srt/layers/moe/ep_moe/layer.py +94 -40
  61. sglang/srt/layers/moe/ep_moe/token_dispatcher.py +13 -8
  62. sglang/srt/layers/moe/fused_moe_native.py +4 -0
  63. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=257,N=128,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  64. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=257,N=128,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  65. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=257,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  66. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=257,N=256,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  67. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=257,N=256,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  68. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_2_0/E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3.json +146 -0
  69. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_3_1/E=257,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json +146 -0
  70. sglang/srt/layers/moe/fused_moe_triton/configs/triton_3_3_1/E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3.json +146 -0
  71. sglang/srt/layers/moe/fused_moe_triton/fused_moe.py +220 -25
  72. sglang/srt/layers/moe/fused_moe_triton/layer.py +34 -4
  73. sglang/srt/layers/moe/topk.py +44 -18
  74. sglang/srt/layers/multimodal.py +3 -3
  75. sglang/srt/layers/quantization/__init__.py +3 -2
  76. sglang/srt/layers/quantization/blockwise_int8.py +3 -0
  77. sglang/srt/layers/quantization/compressed_tensors/compressed_tensors_moe.py +5 -0
  78. sglang/srt/layers/quantization/deep_gemm.py +55 -56
  79. sglang/srt/layers/quantization/fp8.py +28 -23
  80. sglang/srt/layers/quantization/fp8_kernel.py +118 -66
  81. sglang/srt/layers/quantization/fp8_utils.py +165 -49
  82. sglang/srt/layers/quantization/modelopt_quant.py +334 -7
  83. sglang/srt/layers/quantization/moe_wna16.py +3 -0
  84. sglang/srt/layers/quantization/w8a8_fp8.py +3 -0
  85. sglang/srt/layers/quantization/w8a8_int8.py +3 -0
  86. sglang/srt/layers/rotary_embedding.py +6 -12
  87. sglang/srt/layers/sampler.py +80 -79
  88. sglang/srt/layers/utils.py +6 -0
  89. sglang/srt/lora/layers.py +12 -15
  90. sglang/srt/lora/lora.py +49 -5
  91. sglang/srt/lora/lora_manager.py +19 -5
  92. sglang/srt/lora/mem_pool.py +24 -16
  93. sglang/srt/lora/utils.py +17 -13
  94. sglang/srt/managers/data_parallel_controller.py +13 -5
  95. sglang/srt/managers/eplb_algorithms/__init__.py +63 -0
  96. sglang/srt/managers/eplb_algorithms/deepseek.py +223 -0
  97. sglang/srt/managers/{deepseek_eplb.py → eplb_algorithms/deepseek_vec.py} +5 -7
  98. sglang/srt/managers/eplb_manager.py +55 -14
  99. sglang/srt/managers/expert_distribution.py +220 -46
  100. sglang/srt/managers/expert_location.py +110 -56
  101. sglang/srt/managers/expert_location_dispatch.py +23 -6
  102. sglang/srt/managers/io_struct.py +15 -4
  103. sglang/srt/managers/mm_utils.py +88 -38
  104. sglang/srt/managers/multimodal_processors/base_processor.py +188 -16
  105. sglang/srt/managers/multimodal_processors/gemma3.py +4 -31
  106. sglang/srt/managers/multimodal_processors/internvl.py +4 -0
  107. sglang/srt/managers/multimodal_processors/kimi_vl.py +15 -34
  108. sglang/srt/managers/multimodal_processors/minicpm.py +2 -1
  109. sglang/srt/managers/multimodal_processors/phi4mm.py +87 -0
  110. sglang/srt/managers/multimodal_processors/qwen_vl.py +22 -64
  111. sglang/srt/managers/schedule_batch.py +140 -38
  112. sglang/srt/managers/scheduler.py +305 -112
  113. sglang/srt/managers/tokenizer_manager.py +134 -17
  114. sglang/srt/managers/utils.py +0 -4
  115. sglang/srt/metrics/collector.py +9 -0
  116. sglang/srt/model_executor/cuda_graph_runner.py +72 -61
  117. sglang/srt/model_executor/expert_location_updater.py +157 -22
  118. sglang/srt/model_executor/forward_batch_info.py +38 -17
  119. sglang/srt/model_executor/model_runner.py +96 -56
  120. sglang/srt/model_loader/utils.py +67 -1
  121. sglang/srt/models/deepseek_nextn.py +1 -1
  122. sglang/srt/models/deepseek_v2.py +609 -234
  123. sglang/srt/models/gemma3_causal.py +7 -0
  124. sglang/srt/models/gemma3_mm.py +19 -14
  125. sglang/srt/models/idefics2.py +342 -0
  126. sglang/srt/models/kimi_vl.py +4 -4
  127. sglang/srt/models/llama.py +1 -1
  128. sglang/srt/models/minicpmo.py +2 -5
  129. sglang/srt/models/minicpmv.py +3 -295
  130. sglang/srt/models/phi4mm.py +512 -0
  131. sglang/srt/models/qwen2.py +38 -9
  132. sglang/srt/models/qwen2_5_vl.py +3 -9
  133. sglang/srt/models/qwen2_eagle.py +4 -1
  134. sglang/srt/models/qwen2_moe.py +58 -191
  135. sglang/srt/models/qwen2_vl.py +3 -9
  136. sglang/srt/models/qwen3.py +41 -10
  137. sglang/srt/models/qwen3_moe.py +230 -191
  138. sglang/srt/models/registry.py +9 -1
  139. sglang/srt/models/transformers.py +291 -0
  140. sglang/srt/openai_api/adapter.py +86 -24
  141. sglang/srt/openai_api/protocol.py +31 -2
  142. sglang/srt/openai_api/utils.py +172 -0
  143. sglang/srt/operations.py +37 -2
  144. sglang/srt/operations_strategy.py +200 -24
  145. sglang/srt/sampling/sampling_batch_info.py +13 -1
  146. sglang/srt/sampling/sampling_params.py +2 -1
  147. sglang/srt/server_args.py +114 -27
  148. sglang/srt/speculative/build_eagle_tree.py +8 -8
  149. sglang/srt/speculative/eagle_draft_cuda_graph_runner.py +8 -11
  150. sglang/srt/speculative/eagle_draft_extend_cuda_graph_runner.py +253 -0
  151. sglang/srt/speculative/eagle_utils.py +51 -91
  152. sglang/srt/speculative/eagle_worker.py +101 -21
  153. sglang/srt/two_batch_overlap.py +635 -0
  154. sglang/srt/utils.py +129 -7
  155. sglang/test/runners.py +16 -7
  156. sglang/test/send_one.py +4 -0
  157. sglang/test/test_cutlass_moe.py +3 -3
  158. sglang/test/test_fp4_moe.py +248 -0
  159. sglang/test/test_utils.py +79 -6
  160. sglang/version.py +1 -1
  161. {sglang-0.4.6.post5.dist-info → sglang-0.4.7.dist-info}/METADATA +14 -11
  162. {sglang-0.4.6.post5.dist-info → sglang-0.4.7.dist-info}/RECORD +318 -291
  163. {sglang-0.4.6.post5.dist-info → sglang-0.4.7.dist-info}/WHEEL +1 -1
  164. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=14336,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=14336,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  165. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=14336,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=1,N=14336,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  166. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=1792,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=1792,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  167. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=1,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  168. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=3072,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=3072,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  169. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=3072,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=3072,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json} +0 -0
  170. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=3072,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=1,N=3072,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  171. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=3584,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=3584,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  172. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=1,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  173. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=7168,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=1,N=7168,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  174. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=1,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=1,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  175. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=144,N=512,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=144,N=512,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  176. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1024,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=16,N=1024,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  177. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1024,device_name=NVIDIA_H200.json → triton_3_1_0/E=16,N=1024,device_name=NVIDIA_H200.json} +0 -0
  178. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1344,device_name=NVIDIA_A100-SXM4-40GB.json → triton_3_1_0/E=16,N=1344,device_name=NVIDIA_A100-SXM4-40GB.json} +0 -0
  179. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1344,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=1344,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  180. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1344,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=16,N=1344,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  181. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=14336,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=14336,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  182. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=14336,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=14336,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  183. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1792,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=1792,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  184. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  185. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=16,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  186. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=2688,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=2688,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  187. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=2688,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=16,N=2688,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  188. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=3072,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=3072,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  189. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=3072,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=3072,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json} +0 -0
  190. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=3200,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=16,N=3200,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  191. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=3584,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=3584,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  192. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  193. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=6400,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=16,N=6400,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  194. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=7168,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=7168,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a16.json} +0 -0
  195. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=16,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  196. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=7168,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json → triton_3_1_0/E=16,N=7168,device_name=NVIDIA_H100_80GB_HBM3,dtype=int8_w8a16.json} +0 -0
  197. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=16,N=800,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=16,N=800,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  198. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=160,N=192,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_1_0/E=160,N=192,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  199. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=20,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=20,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  200. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=24,N=1024,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=24,N=1024,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  201. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a8,block_shape=[128, 128].json} +0 -0
  202. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a8.json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_A100-SXM4-80GB,dtype=int8_w8a8.json} +0 -0
  203. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8,block_shape=[128, 128].json} +0 -0
  204. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json} +0 -0
  205. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  206. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_H20,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_H20,block_shape=[128, 128].json} +0 -0
  207. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  208. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=128,device_name=NVIDIA_L20Y,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=128,device_name=NVIDIA_L20Y,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  209. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  210. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  211. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  212. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  213. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=NVIDIA_H20,dtype=int8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=NVIDIA_H20,dtype=int8_w8a8,block_shape=[128, 128].json} +0 -0
  214. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=256,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=256,N=256,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  215. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=64,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_1_0/E=256,N=64,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  216. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=64,device_name=NVIDIA_L20,dtype=int8_w8a8.json → triton_3_1_0/E=256,N=64,device_name=NVIDIA_L20,dtype=int8_w8a8.json} +0 -0
  217. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=256,N=64,device_name=NVIDIA_L40S,dtype=int8_w8a8.json → triton_3_1_0/E=256,N=64,device_name=NVIDIA_L40S,dtype=int8_w8a8.json} +0 -0
  218. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1024,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=64,N=1024,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  219. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  220. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  221. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  222. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  223. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  224. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=1280,device_name=NVIDIA_H200.json → triton_3_1_0/E=64,N=1280,device_name=NVIDIA_H200.json} +0 -0
  225. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=2560,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=2560,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  226. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=2560,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=2560,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  227. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=2560,device_name=NVIDIA_H200.json → triton_3_1_0/E=64,N=2560,device_name=NVIDIA_H200.json} +0 -0
  228. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=320,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=320,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  229. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=320,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=64,N=320,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  230. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=320,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=320,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  231. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=320,device_name=NVIDIA_H200.json → triton_3_1_0/E=64,N=320,device_name=NVIDIA_H200.json} +0 -0
  232. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=512,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_1_0/E=64,N=512,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  233. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  234. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  235. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_GeForce_RTX_4090,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_GeForce_RTX_4090,dtype=fp8_w8a8.json} +0 -0
  236. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  237. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  238. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  239. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=64,N=640,device_name=NVIDIA_H200.json → triton_3_1_0/E=64,N=640,device_name=NVIDIA_H200.json} +0 -0
  240. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=AMD_Instinct_MI300X.json → triton_3_1_0/E=8,N=14336,device_name=AMD_Instinct_MI300X.json} +0 -0
  241. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=AMD_Instinct_MI325X.json → triton_3_1_0/E=8,N=14336,device_name=AMD_Instinct_MI325X.json} +0 -0
  242. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=AMD_Radeon_Graphics.json → triton_3_1_0/E=8,N=14336,device_name=AMD_Radeon_Graphics.json} +0 -0
  243. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=14336,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  244. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=14336,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  245. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=14336,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=14336,device_name=NVIDIA_H200.json} +0 -0
  246. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=AMD_Instinct_MI300X.json → triton_3_1_0/E=8,N=1792,device_name=AMD_Instinct_MI300X.json} +0 -0
  247. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=AMD_Instinct_MI325X.json → triton_3_1_0/E=8,N=1792,device_name=AMD_Instinct_MI325X.json} +0 -0
  248. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=AMD_Radeon_Graphics.json → triton_3_1_0/E=8,N=1792,device_name=AMD_Radeon_Graphics.json} +0 -0
  249. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=NVIDIA_A100-SXM4-40GB.json → triton_3_1_0/E=8,N=1792,device_name=NVIDIA_A100-SXM4-40GB.json} +0 -0
  250. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=8,N=1792,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  251. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=8,N=1792,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  252. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=1792,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  253. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=1792,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=1792,device_name=NVIDIA_H200.json} +0 -0
  254. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=2048,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=8,N=2048,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  255. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=2048,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=2048,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  256. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=8,N=2048,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  257. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=2048,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=2048,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  258. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=2048,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=2048,device_name=NVIDIA_H200.json} +0 -0
  259. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=AMD_Instinct_MI300X.json → triton_3_1_0/E=8,N=3584,device_name=AMD_Instinct_MI300X.json} +0 -0
  260. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=AMD_Instinct_MI325X.json → triton_3_1_0/E=8,N=3584,device_name=AMD_Instinct_MI325X.json} +0 -0
  261. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=AMD_Radeon_Graphics.json → triton_3_1_0/E=8,N=3584,device_name=AMD_Radeon_Graphics.json} +0 -0
  262. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_A100-SXM4-40GB.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_A100-SXM4-40GB.json} +0 -0
  263. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  264. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_GeForce_RTX_4090,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_GeForce_RTX_4090,dtype=fp8_w8a8.json} +0 -0
  265. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  266. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  267. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  268. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_H200.json} +0 -0
  269. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=3584,device_name=NVIDIA_L40S.json → triton_3_1_0/E=8,N=3584,device_name=NVIDIA_L40S.json} +0 -0
  270. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=4096,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8.json} +0 -0
  271. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=4096,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8.json} +0 -0
  272. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=4096,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8.json} +0 -0
  273. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=8,N=4096,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  274. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=4096,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  275. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=8,N=4096,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  276. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=4096,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  277. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=4096,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=4096,device_name=NVIDIA_H200.json} +0 -0
  278. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=AMD_Instinct_MI300X.json → triton_3_1_0/E=8,N=7168,device_name=AMD_Instinct_MI300X.json} +0 -0
  279. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=AMD_Instinct_MI325X.json → triton_3_1_0/E=8,N=7168,device_name=AMD_Instinct_MI325X.json} +0 -0
  280. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=AMD_Radeon_Graphics.json → triton_3_1_0/E=8,N=7168,device_name=AMD_Radeon_Graphics.json} +0 -0
  281. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json → triton_3_1_0/E=8,N=7168,device_name=NVIDIA_A100-SXM4-80GB.json} +0 -0
  282. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  283. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_1_0/E=8,N=7168,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  284. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=7168,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  285. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=7168,device_name=NVIDIA_H200.json → triton_3_1_0/E=8,N=7168,device_name=NVIDIA_H200.json} +0 -0
  286. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=8192,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=8192,device_name=AMD_Instinct_MI300X,dtype=fp8_w8a8.json} +0 -0
  287. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=8192,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=8192,device_name=AMD_Instinct_MI325X,dtype=fp8_w8a8.json} +0 -0
  288. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=8192,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=8192,device_name=AMD_Radeon_Graphics,dtype=fp8_w8a8.json} +0 -0
  289. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=8192,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=8192,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8.json} +0 -0
  290. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=8,N=8192,device_name=NVIDIA_H200,dtype=fp8_w8a8.json → triton_3_1_0/E=8,N=8192,device_name=NVIDIA_H200,dtype=fp8_w8a8.json} +0 -0
  291. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=192,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_2_0/E=128,N=192,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  292. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=192,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_2_0/E=128,N=192,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  293. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=192,device_name=NVIDIA_H20.json → triton_3_2_0/E=128,N=192,device_name=NVIDIA_H20.json} +0 -0
  294. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=192,device_name=NVIDIA_H200.json → triton_3_2_0/E=128,N=192,device_name=NVIDIA_H200.json} +0 -0
  295. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=384,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_2_0/E=128,N=384,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  296. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=384,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=128,N=384,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  297. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=384,device_name=NVIDIA_H20.json → triton_3_2_0/E=128,N=384,device_name=NVIDIA_H20.json} +0 -0
  298. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=384,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=128,N=384,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  299. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=384,device_name=NVIDIA_H200.json → triton_3_2_0/E=128,N=384,device_name=NVIDIA_H200.json} +0 -0
  300. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=512,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_2_0/E=128,N=512,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  301. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  302. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_H100_80GB_HBM3.json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_H100_80GB_HBM3.json} +0 -0
  303. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  304. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_H20.json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_H20.json} +0 -0
  305. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  306. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=768,device_name=NVIDIA_H200.json → triton_3_2_0/E=128,N=768,device_name=NVIDIA_H200.json} +0 -0
  307. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=128,N=96,device_name=NVIDIA_H20.json → triton_3_2_0/E=128,N=96,device_name=NVIDIA_H20.json} +0 -0
  308. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=264,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json → triton_3_2_0/E=264,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json} +0 -0
  309. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=264,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=264,N=256,device_name=NVIDIA_B200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  310. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=264,N=256,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=264,N=256,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  311. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=264,N=256,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=264,N=256,device_name=NVIDIA_H200,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  312. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=272,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json → triton_3_2_0/E=272,N=128,device_name=NVIDIA_A800-SXM4-80GB,dtype=int8_w8a8.json} +0 -0
  313. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=272,N=128,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=272,N=128,device_name=NVIDIA_H100_80GB_HBM3,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  314. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=272,N=128,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json → triton_3_2_0/E=272,N=128,device_name=NVIDIA_H20,dtype=fp8_w8a8,block_shape=[128, 128].json} +0 -0
  315. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=272,N=64,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_2_0/E=272,N=64,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  316. /sglang/srt/layers/moe/fused_moe_triton/configs/{E=288,N=64,device_name=NVIDIA_A800-SXM4-80GB.json → triton_3_2_0/E=288,N=64,device_name=NVIDIA_A800-SXM4-80GB.json} +0 -0
  317. {sglang-0.4.6.post5.dist-info → sglang-0.4.7.dist-info}/licenses/LICENSE +0 -0
  318. {sglang-0.4.6.post5.dist-info → sglang-0.4.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,635 @@
1
+ import dataclasses
2
+ import logging
3
+ from typing import Dict, List, Optional, Sequence
4
+
5
+ import torch
6
+
7
+ from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
8
+ from sglang.srt.layers.communicator import (
9
+ CommunicateContext,
10
+ CommunicateSummableTensorPairFn,
11
+ ScatterMode,
12
+ )
13
+ from sglang.srt.layers.moe.ep_moe.token_dispatcher import DeepEPDispatcher
14
+ from sglang.srt.layers.quantization.deep_gemm import configure_deep_gemm_num_sms
15
+ from sglang.srt.managers.schedule_batch import global_server_args_dict
16
+ from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
17
+ from sglang.srt.operations import execute_operations, execute_overlapped_operations
18
+ from sglang.srt.operations_strategy import OperationsStrategy
19
+ from sglang.srt.utils import BumpAllocator, DeepEPMode, get_bool_env_var
20
+
21
+ _tbo_debug = get_bool_env_var("SGLANG_TBO_DEBUG")
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ # -------------------------------- Compute Basic Info ---------------------------------------
27
+
28
+
29
+ # TODO: may smartly disable TBO when batch size is too small b/c it will slow down
30
+ def compute_split_seq_index(
31
+ forward_mode: "ForwardMode",
32
+ num_tokens: int,
33
+ extend_lens: Optional[Sequence[int]],
34
+ ) -> Optional[int]:
35
+ if forward_mode.is_extend():
36
+ assert extend_lens is not None
37
+ return _split_array_by_half_sum(extend_lens)
38
+ elif forward_mode.is_decode():
39
+ return num_tokens // 2
40
+ elif forward_mode.is_idle():
41
+ assert num_tokens == 0
42
+ return 0
43
+ else:
44
+ raise NotImplementedError()
45
+
46
+
47
+ def _split_array_by_half_sum(arr: Sequence[int]) -> int:
48
+ overall_sum = sum(arr)
49
+ left_sum = 0
50
+ min_diff = float("inf")
51
+ best_index = 0
52
+
53
+ for i in range(1, len(arr)):
54
+ left_sum += arr[i - 1]
55
+ right_sum = overall_sum - left_sum
56
+ diff = abs(left_sum - right_sum)
57
+ if diff <= min_diff:
58
+ min_diff = diff
59
+ best_index = i
60
+ else:
61
+ break
62
+
63
+ return best_index
64
+
65
+
66
+ def compute_split_token_index(
67
+ split_seq_index: int,
68
+ forward_mode: "ForwardMode",
69
+ extend_seq_lens: Optional[Sequence[int]],
70
+ ) -> int:
71
+ if forward_mode.is_extend():
72
+ assert extend_seq_lens is not None
73
+ return sum(extend_seq_lens[:split_seq_index])
74
+ elif forward_mode.is_decode():
75
+ return split_seq_index
76
+ elif forward_mode.is_idle():
77
+ assert split_seq_index == 0
78
+ return 0
79
+ else:
80
+ raise NotImplementedError
81
+
82
+
83
+ def compute_split_indices_for_cuda_graph_replay(
84
+ forward_mode: ForwardMode,
85
+ cuda_graph_num_tokens: int,
86
+ ):
87
+ forward_mode_for_tbo_split = (
88
+ forward_mode if forward_mode != ForwardMode.IDLE else ForwardMode.DECODE
89
+ )
90
+ tbo_split_seq_index = compute_split_seq_index(
91
+ forward_mode=forward_mode_for_tbo_split,
92
+ num_tokens=cuda_graph_num_tokens,
93
+ extend_lens=None,
94
+ )
95
+ tbo_split_token_index = compute_split_token_index(
96
+ split_seq_index=tbo_split_seq_index,
97
+ forward_mode=forward_mode_for_tbo_split,
98
+ extend_seq_lens=None,
99
+ )
100
+ return tbo_split_seq_index, tbo_split_token_index
101
+
102
+
103
+ # -------------------------------- Preparation ---------------------------------------
104
+
105
+
106
+ class TboCudaGraphRunnerPlugin:
107
+ def __init__(self):
108
+ self._tbo_children_num_token_non_padded = torch.zeros((2,), dtype=torch.int32)
109
+
110
+ def capture_one_batch_size(self, batch: ForwardBatch, num_tokens: int):
111
+ if not global_server_args_dict["enable_two_batch_overlap"]:
112
+ return
113
+
114
+ batch.tbo_split_seq_index = compute_split_seq_index(
115
+ forward_mode=batch.forward_mode,
116
+ num_tokens=num_tokens,
117
+ extend_lens=None,
118
+ )
119
+ # For simplicity, when two_batch_overlap is enabled, we only capture CUDA Graph for tbo=true
120
+ assert batch.tbo_split_seq_index is not None, f"{num_tokens=}"
121
+
122
+ self._tbo_children_num_token_non_padded[...] = (
123
+ TboForwardBatchPreparer.compute_tbo_children_num_token_non_padded(batch)
124
+ )
125
+
126
+ TboForwardBatchPreparer.prepare_raw(
127
+ batch,
128
+ tbo_children_num_token_non_padded=self._tbo_children_num_token_non_padded,
129
+ )
130
+
131
+ def replay_prepare(
132
+ self, forward_mode: ForwardMode, bs: int, num_token_non_padded: int
133
+ ):
134
+ tbo_split_seq_index, tbo_split_token_index = (
135
+ compute_split_indices_for_cuda_graph_replay(
136
+ forward_mode=forward_mode,
137
+ # TODO support bs!=num_tokens
138
+ cuda_graph_num_tokens=bs,
139
+ )
140
+ )
141
+
142
+ self._tbo_children_num_token_non_padded[...] = (
143
+ TboForwardBatchPreparer.compute_tbo_children_num_token_non_padded_raw(
144
+ tbo_split_token_index=tbo_split_token_index,
145
+ num_token_non_padded=num_token_non_padded,
146
+ )
147
+ )
148
+
149
+
150
+ class TboDPAttentionPreparer:
151
+ def prepare_all_gather(
152
+ self, local_batch, deepep_mode, enable_deepep_moe, enable_two_batch_overlap
153
+ ):
154
+ self.enable_two_batch_overlap = enable_two_batch_overlap
155
+
156
+ if local_batch is not None:
157
+ self.local_tbo_split_seq_index = compute_split_seq_index(
158
+ forward_mode=local_batch.forward_mode,
159
+ num_tokens=local_batch.input_ids.shape[0],
160
+ extend_lens=local_batch.extend_lens,
161
+ )
162
+ resolved_deepep_mode = deepep_mode.resolve(local_batch.forward_mode)
163
+ local_can_run_tbo = (self.local_tbo_split_seq_index is not None) and not (
164
+ local_batch.forward_mode.is_extend()
165
+ and enable_deepep_moe
166
+ and (resolved_deepep_mode == DeepEPMode.low_latency)
167
+ )
168
+ else:
169
+ self.local_tbo_split_seq_index = 0
170
+ local_can_run_tbo = True
171
+
172
+ local_forward_mode = self._compute_local_forward_mode(local_batch)
173
+
174
+ return local_can_run_tbo, local_forward_mode
175
+
176
+ def compute_output(self, partial_global_info):
177
+ local_can_run_tbo_aggregated = min(partial_global_info[:, 0, 0].tolist())
178
+ forward_modes = partial_global_info[:, 0, 1].tolist()
179
+
180
+ global_forward_mode, forward_mode_agree = self._compute_global_forward_mode(
181
+ forward_modes
182
+ )
183
+
184
+ can_run_tbo = (
185
+ self.enable_two_batch_overlap
186
+ and local_can_run_tbo_aggregated
187
+ and forward_mode_agree
188
+ )
189
+
190
+ tbo_split_seq_index = self.local_tbo_split_seq_index if can_run_tbo else None
191
+ global_forward_mode = global_forward_mode if can_run_tbo else None
192
+ return tbo_split_seq_index, global_forward_mode
193
+
194
+ @staticmethod
195
+ def _compute_local_forward_mode(local_batch):
196
+ return (
197
+ local_batch.forward_mode if local_batch is not None else ForwardMode.IDLE
198
+ ).value
199
+
200
+ @staticmethod
201
+ def _compute_global_forward_mode(forward_modes):
202
+ converted_forward_modes = [
203
+ ForwardMode.DECODE.value if x == ForwardMode.IDLE.value else x
204
+ for x in forward_modes
205
+ ]
206
+ forward_mode_agree = TboDPAttentionPreparer._is_all_same(
207
+ converted_forward_modes
208
+ )
209
+ global_forward_mode = (
210
+ ForwardMode(converted_forward_modes[0]) if forward_mode_agree else None
211
+ )
212
+ return global_forward_mode, forward_mode_agree
213
+
214
+ @staticmethod
215
+ def _is_all_same(x):
216
+ return all(value == x[0] for value in x)
217
+
218
+
219
+ class TboForwardBatchPreparer:
220
+ @classmethod
221
+ def prepare(cls, batch: ForwardBatch):
222
+ if batch.tbo_split_seq_index is None:
223
+ return
224
+
225
+ tbo_children_num_token_non_padded = (
226
+ cls.compute_tbo_children_num_token_non_padded(batch)
227
+ )
228
+ cls.prepare_raw(
229
+ batch, tbo_children_num_token_non_padded=tbo_children_num_token_non_padded
230
+ )
231
+
232
+ @classmethod
233
+ def prepare_raw(
234
+ cls, batch: ForwardBatch, tbo_children_num_token_non_padded: torch.Tensor
235
+ ):
236
+ from sglang.srt.layers.attention.tbo_backend import TboAttnBackend
237
+
238
+ tbo_split_token_index = cls._compute_split_token_index(batch)
239
+
240
+ if _tbo_debug:
241
+ logger.info(
242
+ f"TboForwardBatchPreparer.prepare "
243
+ f"tbo_split_seq_index={batch.tbo_split_seq_index} "
244
+ f"tbo_split_token_index={tbo_split_token_index} "
245
+ f"extend_seq_lens={batch.extend_seq_lens_cpu}"
246
+ )
247
+
248
+ assert isinstance(batch.attn_backend, TboAttnBackend)
249
+ attn_backend_child_a, attn_backend_child_b = batch.attn_backend.children
250
+
251
+ [out_num_token_non_padded_a, out_num_token_non_padded_b] = (
252
+ tbo_children_num_token_non_padded
253
+ )
254
+
255
+ child_a = cls.filter_batch(
256
+ batch,
257
+ start_token_index=0,
258
+ end_token_index=tbo_split_token_index,
259
+ start_seq_index=0,
260
+ end_seq_index=batch.tbo_split_seq_index,
261
+ output_attn_backend=attn_backend_child_a,
262
+ out_num_token_non_padded=out_num_token_non_padded_a,
263
+ )
264
+ child_b = cls.filter_batch(
265
+ batch,
266
+ start_token_index=tbo_split_token_index,
267
+ end_token_index=batch.input_ids.shape[0],
268
+ start_seq_index=batch.tbo_split_seq_index,
269
+ end_seq_index=batch.batch_size,
270
+ output_attn_backend=attn_backend_child_b,
271
+ out_num_token_non_padded=out_num_token_non_padded_b,
272
+ )
273
+
274
+ assert batch.tbo_children is None
275
+ batch.tbo_children = [child_a, child_b]
276
+
277
+ @classmethod
278
+ def filter_batch(
279
+ cls,
280
+ batch: ForwardBatch,
281
+ *,
282
+ start_token_index: int,
283
+ end_token_index: int,
284
+ start_seq_index: int,
285
+ end_seq_index: int,
286
+ output_attn_backend: AttentionBackend,
287
+ out_num_token_non_padded: torch.Tensor,
288
+ ):
289
+ num_tokens = batch.input_ids.shape[0]
290
+ num_seqs = batch.batch_size
291
+
292
+ output_dict = dict()
293
+
294
+ for key in [
295
+ "input_ids",
296
+ "positions",
297
+ "out_cache_loc",
298
+ ]:
299
+ old_value = getattr(batch, key)
300
+ assert (
301
+ old_value.shape[0] == num_tokens
302
+ ), f"{key=} {old_value=} {num_tokens=} {batch=}"
303
+ output_dict[key] = old_value[start_token_index:end_token_index]
304
+
305
+ for key in [
306
+ "req_pool_indices",
307
+ "seq_lens",
308
+ "seq_lens_cpu",
309
+ "extend_seq_lens",
310
+ "extend_prefix_lens",
311
+ "extend_start_loc",
312
+ "extend_prefix_lens_cpu",
313
+ "extend_seq_lens_cpu",
314
+ "extend_logprob_start_lens_cpu",
315
+ "lora_paths",
316
+ ]:
317
+ old_value = getattr(batch, key)
318
+ if old_value is None:
319
+ continue
320
+ assert (
321
+ len(old_value) == num_seqs
322
+ ), f"{key=} {old_value=} {num_seqs=} {batch=}"
323
+ output_dict[key] = old_value[start_seq_index:end_seq_index]
324
+
325
+ for key in [
326
+ "forward_mode",
327
+ "return_logprob",
328
+ "req_to_token_pool",
329
+ "token_to_kv_pool",
330
+ "can_run_dp_cuda_graph",
331
+ "global_forward_mode",
332
+ "spec_info",
333
+ "spec_algorithm",
334
+ "capture_hidden_mode",
335
+ "padded_static_len",
336
+ "mrope_positions", # only used by qwen2-vl, thus not care
337
+ ]:
338
+ output_dict[key] = getattr(batch, key)
339
+
340
+ assert (
341
+ _compute_extend_num_tokens(batch.input_ids, batch.forward_mode)
342
+ == batch.extend_num_tokens
343
+ ), f"{batch=}"
344
+ extend_num_tokens = _compute_extend_num_tokens(
345
+ output_dict["input_ids"], output_dict["forward_mode"]
346
+ )
347
+
348
+ # TODO improve, e.g. unify w/ `init_raw`
349
+ if global_server_args_dict["moe_dense_tp_size"] == 1:
350
+ sum_len = end_token_index - start_token_index
351
+ gathered_buffer = torch.zeros(
352
+ (sum_len, batch.gathered_buffer.shape[1]),
353
+ dtype=batch.gathered_buffer.dtype,
354
+ device=batch.gathered_buffer.device,
355
+ )
356
+ else:
357
+ gathered_buffer = None
358
+
359
+ output_dict.update(
360
+ dict(
361
+ batch_size=end_seq_index - start_seq_index,
362
+ seq_lens_sum=(
363
+ output_dict["seq_lens_cpu"].sum()
364
+ if "seq_lens_cpu" in output_dict
365
+ else None
366
+ ),
367
+ extend_num_tokens=extend_num_tokens,
368
+ attn_backend=output_attn_backend,
369
+ num_token_non_padded=out_num_token_non_padded,
370
+ tbo_split_seq_index=None,
371
+ tbo_parent_token_range=(start_token_index, end_token_index),
372
+ tbo_children=None,
373
+ global_num_tokens_gpu=None,
374
+ global_num_tokens_cpu=None,
375
+ gathered_buffer=gathered_buffer,
376
+ global_num_tokens_for_logprob_gpu=None,
377
+ global_num_tokens_for_logprob_cpu=None,
378
+ sampling_info=None,
379
+ # For logits and logprobs post processing, thus we do not care
380
+ temp_scaled_logprobs=False,
381
+ temperature=None,
382
+ top_p_normalized_logprobs=False,
383
+ top_p=None,
384
+ mm_inputs=None,
385
+ )
386
+ )
387
+
388
+ errors = []
389
+ for field in dataclasses.fields(ForwardBatch):
390
+ if getattr(batch, field.name) is not None and field.name not in output_dict:
391
+ errors.append(
392
+ f"Field {field.name} has value, but is not yet supported (value={getattr(batch, field.name)} batch={batch})"
393
+ )
394
+ if len(errors) > 0:
395
+ raise Exception(f"{len(errors)} errors happen:\n" + "\n\n".join(errors))
396
+
397
+ return ForwardBatch(**output_dict)
398
+
399
+ @classmethod
400
+ def compute_tbo_children_num_token_non_padded(cls, batch: ForwardBatch):
401
+ return cls.compute_tbo_children_num_token_non_padded_raw(
402
+ tbo_split_token_index=cls._compute_split_token_index(batch),
403
+ num_token_non_padded=len(batch.input_ids),
404
+ )
405
+
406
+ @classmethod
407
+ def compute_tbo_children_num_token_non_padded_raw(
408
+ cls, tbo_split_token_index: int, num_token_non_padded: int
409
+ ):
410
+ # TODO we may make padding on both sub-batches to make it slightly more balanced
411
+ value_a = min(tbo_split_token_index, num_token_non_padded)
412
+ value_b = max(0, num_token_non_padded - tbo_split_token_index)
413
+ return torch.tensor([value_a, value_b], dtype=torch.int32).to(
414
+ device=global_server_args_dict["device"], non_blocking=True
415
+ )
416
+
417
+ @classmethod
418
+ def _compute_split_token_index(cls, batch: ForwardBatch):
419
+ return compute_split_token_index(
420
+ split_seq_index=batch.tbo_split_seq_index,
421
+ forward_mode=batch.forward_mode,
422
+ extend_seq_lens=batch.extend_seq_lens_cpu,
423
+ )
424
+
425
+
426
+ def _compute_extend_num_tokens(input_ids, forward_mode: ForwardMode):
427
+ if forward_mode.is_extend():
428
+ return input_ids.shape[0]
429
+ elif forward_mode.is_decode() or forward_mode.is_idle():
430
+ return None
431
+ raise NotImplementedError
432
+
433
+
434
+ # -------------------------------- Execution ---------------------------------------
435
+
436
+
437
+ def model_forward_maybe_tbo(
438
+ layers,
439
+ enable_tbo: bool,
440
+ positions: torch.Tensor,
441
+ forward_batch: ForwardBatch,
442
+ hidden_states: torch.Tensor,
443
+ input_data_scatter_mode: ScatterMode,
444
+ residual: Optional[torch.Tensor],
445
+ zero_allocator: Optional[BumpAllocator] = None,
446
+ ):
447
+ inputs = dict(
448
+ positions=positions,
449
+ hidden_states=hidden_states,
450
+ forward_batch=forward_batch,
451
+ residual=residual,
452
+ zero_allocator=zero_allocator,
453
+ )
454
+ layer_input_scatter_mode = layers[0].layer_scatter_modes.layer_input_mode
455
+ operations_strategy = OperationsStrategy.init_new_tbo(
456
+ layers, forward_batch.global_forward_mode
457
+ )
458
+ if enable_tbo:
459
+ return _model_forward_tbo(
460
+ inputs=inputs,
461
+ operations_strategy=operations_strategy,
462
+ input_data_scatter_mode=input_data_scatter_mode,
463
+ layer_input_scatter_mode=layer_input_scatter_mode,
464
+ )
465
+ else:
466
+ return _model_forward_non_tbo(inputs, operations_strategy)
467
+
468
+
469
+ def _model_forward_tbo(
470
+ inputs,
471
+ operations_strategy: OperationsStrategy,
472
+ input_data_scatter_mode: ScatterMode,
473
+ layer_input_scatter_mode: ScatterMode,
474
+ ):
475
+ inputs_arr = _model_forward_tbo_split_inputs(
476
+ **inputs,
477
+ input_data_scatter_mode=input_data_scatter_mode,
478
+ layer_input_scatter_mode=layer_input_scatter_mode,
479
+ )
480
+ del inputs
481
+
482
+ with configure_deep_gemm_num_sms(operations_strategy.deep_gemm_num_sms):
483
+ outputs_arr = execute_overlapped_operations(
484
+ inputs_arr=inputs_arr,
485
+ operations_arr=[operations_strategy.operations] * 2,
486
+ delta_stages=[0, operations_strategy.tbo_delta_stages],
487
+ )
488
+
489
+ return _model_forward_tbo_merge_outputs(*outputs_arr)
490
+
491
+
492
+ def _model_forward_non_tbo(inputs, operations_strategy: OperationsStrategy):
493
+ outputs = execute_operations(inputs, operations_strategy.operations)
494
+ return outputs["hidden_states"], outputs["residual"]
495
+
496
+
497
+ def _model_forward_tbo_split_inputs(
498
+ hidden_states: torch.Tensor,
499
+ residual: torch.Tensor,
500
+ positions: torch.Tensor,
501
+ forward_batch: ForwardBatch,
502
+ zero_allocator: Optional[BumpAllocator],
503
+ input_data_scatter_mode: ScatterMode,
504
+ layer_input_scatter_mode: ScatterMode,
505
+ ) -> List[Dict]:
506
+ tbo_splitter_scatter_mode = ScatterMode.TP_ATTN_FULL
507
+ context = CommunicateContext.init_new()
508
+
509
+ hidden_states, residual = CommunicateSummableTensorPairFn.execute(
510
+ hidden_states_input_mode=input_data_scatter_mode,
511
+ residual_input_mode=input_data_scatter_mode,
512
+ output_mode=tbo_splitter_scatter_mode,
513
+ hidden_states=hidden_states,
514
+ residual=residual,
515
+ forward_batch=forward_batch,
516
+ context=context,
517
+ )
518
+
519
+ inputs_arr = _model_forward_tbo_split_inputs_raw(
520
+ hidden_states=hidden_states,
521
+ residual=residual,
522
+ positions=positions,
523
+ forward_batch=forward_batch,
524
+ zero_allocator=zero_allocator,
525
+ )
526
+
527
+ def _post_transform(hidden_states, residual, forward_batch, **kwargs):
528
+ hidden_states, residual = CommunicateSummableTensorPairFn.execute(
529
+ hidden_states_input_mode=tbo_splitter_scatter_mode,
530
+ residual_input_mode=tbo_splitter_scatter_mode,
531
+ output_mode=layer_input_scatter_mode,
532
+ hidden_states=hidden_states,
533
+ residual=residual,
534
+ forward_batch=forward_batch,
535
+ context=context,
536
+ )
537
+ return dict(
538
+ hidden_states=hidden_states,
539
+ residual=residual,
540
+ forward_batch=forward_batch,
541
+ **kwargs,
542
+ )
543
+
544
+ return [_post_transform(**inputs) for inputs in inputs_arr]
545
+
546
+
547
+ def _model_forward_tbo_split_inputs_raw(
548
+ hidden_states: torch.Tensor,
549
+ residual: torch.Tensor,
550
+ positions: torch.Tensor,
551
+ forward_batch: ForwardBatch,
552
+ zero_allocator: Optional[BumpAllocator],
553
+ ) -> List[Dict]:
554
+ return [
555
+ dict(
556
+ **_model_forward_filter_inputs(
557
+ hidden_states=hidden_states,
558
+ residual=residual,
559
+ positions=positions,
560
+ output_forward_batch=output_forward_batch,
561
+ tbo_subbatch_index=tbo_subbatch_index,
562
+ ),
563
+ **(
564
+ dict(zero_allocator=zero_allocator)
565
+ if zero_allocator is not None
566
+ else {}
567
+ ),
568
+ )
569
+ for tbo_subbatch_index, output_forward_batch in enumerate(
570
+ forward_batch.tbo_children
571
+ )
572
+ ]
573
+
574
+
575
+ def _model_forward_filter_inputs(
576
+ hidden_states: torch.Tensor,
577
+ residual: torch.Tensor,
578
+ positions: torch.Tensor,
579
+ output_forward_batch: ForwardBatch,
580
+ tbo_subbatch_index: int,
581
+ ) -> Dict:
582
+ token_slice = slice(*output_forward_batch.tbo_parent_token_range)
583
+ return dict(
584
+ hidden_states=hidden_states[token_slice],
585
+ residual=None if residual is None else residual[token_slice],
586
+ positions=positions[token_slice],
587
+ forward_batch=output_forward_batch,
588
+ tbo_subbatch_index=tbo_subbatch_index,
589
+ )
590
+
591
+
592
+ def _model_forward_tbo_merge_outputs(output_a, output_b):
593
+ def _handle_key(name):
594
+ value_a = output_a[name]
595
+ value_b = output_b[name]
596
+ assert (value_a is None) == (value_b is None)
597
+ if value_a is None:
598
+ return None
599
+ return torch.concat([value_a, value_b], dim=0)
600
+
601
+ return _handle_key("hidden_states"), _handle_key("residual")
602
+
603
+
604
+ # -------------------------------- Utilities and wrappers ---------------------------------------
605
+
606
+
607
+ class MaybeTboDeepEPDispatcher:
608
+ def __init__(self, **kwargs):
609
+ num_inner_dispatchers = (
610
+ 2 if global_server_args_dict["enable_two_batch_overlap"] else 1
611
+ )
612
+ self._inners = [
613
+ DeepEPDispatcher(**kwargs) for _ in range(num_inner_dispatchers)
614
+ ]
615
+
616
+ def _execute(self, name, tbo_subbatch_index: Optional[int] = None, **kwargs):
617
+ return getattr(self._inners[tbo_subbatch_index or 0], name)(**kwargs)
618
+
619
+ def dispatch(self, **kwargs):
620
+ return self._execute("dispatch", **kwargs)
621
+
622
+ def dispatch_a(self, **kwargs):
623
+ return self._execute("dispatch_a", **kwargs)
624
+
625
+ def dispatch_b(self, **kwargs):
626
+ return self._execute("dispatch_b", **kwargs)
627
+
628
+ def combine(self, **kwargs):
629
+ return self._execute("combine", **kwargs)
630
+
631
+ def combine_a(self, **kwargs):
632
+ return self._execute("combine_a", **kwargs)
633
+
634
+ def combine_b(self, **kwargs):
635
+ return self._execute("combine_b", **kwargs)