{"record":{"id":"67c08906d4c3c2f4","repo":"sgl-project/sglang","slug":"pd-disagg-heterogeneous-tp-not-supported-for-mini","errorCode":null,"errorMessage":"PD disagg: heterogeneous TP not supported for MiniMax sparse index yet.","messagePattern":"PD disagg: heterogeneous TP not supported for MiniMax sparse index yet\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/disaggregation/mooncake/conn.py","lineNumber":1397,"sourceCode":"                        dst_data_indices=np.array(dst_indices_local, dtype=np.int32),\n                        executor=executor,\n                        state_type=st,\n                    )\n                    or rc\n                )\n            elif st == StateType.MINIMAX_INDEX_K:\n                # Equal-TP / PP=1 only. Sub-pools are compacted sparse-layer\n                # lists, so PP>1 mis-slices and heterogeneous TP is unsupported.\n                if self.pp_size is not None and self.pp_size > 1:\n                    raise RuntimeError(\n                        \"PD disagg: PP>1 not supported for MiniMax sparse index yet.\"\n                    )\n                if (\n                    target_rank_registration_info is not None\n                    and self.attn_tp_size\n                    != target_rank_registration_info.dst_attn_tp_size\n                ):\n                    raise RuntimeError(\n                        \"PD disagg: heterogeneous TP not supported for MiniMax \"\n                        \"sparse index yet.\"\n                    )\n                src_indices = list(indices)\n                dst_indices_local = list(dst_indices)\n                if len(src_indices) > len(dst_indices_local):\n                    src_indices = src_indices[: len(dst_indices_local)]\n                elif len(src_indices) < len(dst_indices_local):\n                    dst_indices_local = dst_indices_local[: len(src_indices)]\n                rc = (\n                    self._send_kvcache_generic(\n                        mooncake_session_id=req.mooncake_session_id,\n                        src_data_ptrs=src_data_ptrs,\n                        dst_data_ptrs=dst_data_ptrs,\n                        item_lens=src_item_lens,\n                        prefill_data_indices=np.array(src_indices, dtype=np.int32),\n                        dst_data_indices=np.array(dst_indices_local, dtype=np.int32),\n                        executor=executor,","sourceCodeStart":1379,"sourceCodeEnd":1415,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/disaggregation/mooncake/conn.py#L1379-L1415","documentation":"Same guard as the PP check but for tensor parallelism: MiniMax sparse index sub-pools cannot be resliced across differing attn TP sizes between prefill and decode.","triggerScenarios":"MINIMAX_INDEX_K transfer with prefill attn TP != decode attn TP per target registration info.","commonSituations":"Heterogeneous TP PD setups on MiniMax sparse models.","solutions":["Match attention TP sizes between prefill and decode","Redeploy with uniform TP until heterogeneous TP support lands for MiniMax"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"assert attn_tp_size == dst_registration.dst_attn_tp_size for minimax models","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Topology lint for sparse-attention models"],"tags":["pd-disagg","minimax","tp-degree-mismatch"],"backgroundTag":"tp-degree-mismatch","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}