{"record":{"id":"8816120269ddb3de","repo":"vllm-project/vllm","slug":"expert-parallelism-load-balancing-is-only-supporte","errorCode":null,"errorMessage":"Expert parallelism load balancing is only supported on CUDA devices or ROCm devices now.","messagePattern":"Expert parallelism load balancing is only supported on CUDA devices or ROCm devices now\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vllm/config/parallel.py","lineNumber":495,"sourceCode":"                f\"data_parallel_size_local ({self.data_parallel_size_local}) \"\n                f\"must be <= data_parallel_size ({self.data_parallel_size})\"\n            )\n\n        if self.data_parallel_size <= 1 and self.data_parallel_external_lb:\n            raise ValueError(\n                \"data_parallel_external_lb can only be set when data_parallel_size > 1\"\n            )\n\n        if not self.numa_bind and (\n            self.numa_bind_nodes is not None or self.numa_bind_cpus is not None\n        ):\n            raise ValueError(\n                \"numa_bind_nodes and numa_bind_cpus require numa_bind=True.\"\n            )\n\n        if self.enable_eplb:\n            if not current_platform.is_cuda_alike():\n                raise ValueError(\n                    \"Expert parallelism load balancing is only supported on \"\n                    \"CUDA devices or ROCm devices now.\"\n                )\n            if not self.enable_expert_parallel:\n                raise ValueError(\"enable_expert_parallel must be True to use EPLB.\")\n            # The EP group spans the TP x PCP x DP ranks. EPLB therefore needs\n            # TP, PCP, or DP > 1.\n            if (\n                self.tensor_parallel_size\n                * self.prefill_context_parallel_size\n                * self.data_parallel_size\n                <= 1\n            ):\n                raise ValueError(\n                    \"EPLB requires tensor, prefill-context, or data parallelism, \"\n                    f\"but got TP={self.tensor_parallel_size}, \"\n                    f\"PCP={self.prefill_context_parallel_size}, \"\n                    f\"DP={self.data_parallel_size}.\"","sourceCodeStart":477,"sourceCodeEnd":513,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/vllm/config/parallel.py#L477-L513","documentation":"Expert parallelism load balancing (EPLB) is implemented only for CUDA and ROCm platforms. ParallelConfig calls current_platform.is_cuda_alike() and raises when EPLB is requested on any other backend (CPU, HPU, TPU, NPU, etc.).","triggerScenarios":"Running --enable-eplb on a non-CUDA/ROCm platform, e.g. CPU-only container, Intel Gaudi, or Ascend NPU.","commonSituations":"Config template written for GPU clusters reused on alternative accelerators; CI sanity job on CPU-only runners inheriting the full production flag set.","solutions":["Run the EPLB deployment on CUDA or ROCm GPUs.","Or remove --enable-eplb (and any eplb_config with num_redundant_experts != 0) when serving on other platforms.","Gate the flag by detected platform in your launch script so CPU/NPU runs never pass it."],"exampleFix":"# before\nvllm serve Qwen3-MoE --enable-eplb   # on CPU\n# after\nvllm serve Qwen3-MoE                    # on CPU; keep --enable-eplb only on CUDA/ROCm","handlingStrategy":"validation","validationCode":"from vllm.platforms import current_platform\n\ndef eplb_supported() -> bool:\n    return current_platform.is_cuda_alike()","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Gate EPLB flags on current_platform.is_cuda_alike() in launch scripts.","Keep a platform-specific flag set per hardware target instead of one global template."],"tags":["eplb","moe","platform-support","configuration"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}