From 3a50c678848953a2a1e43831f4d81ba351d62b2d Mon Sep 17 00:00:00 2001 From: root Date: Wed, 2 Sep 2026 09:39:03 +0000 Subject: [PATCH] add dp 2 --- qwen3_6_scripts/serving_chat.py | 14 ++++++++++++++ .../vendor_overrides/vllm/engine/arg_utils.py | 9 ++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/qwen3_6_scripts/serving_chat.py b/qwen3_6_scripts/serving_chat.py index e8a3d9aa..156669a0 100644 --- a/qwen3_6_scripts/serving_chat.py +++ b/qwen3_6_scripts/serving_chat.py @@ -243,6 +243,7 @@ class OpenAIServingChat(OpenAIServing): # set up reasoning parser self.reasoning_parser_cls = None + self._template_patched = False # [BI100] one-shot chat template patch if reasoning_parser: try: from vllm.reasoning import ReasoningParserManager @@ -309,6 +310,19 @@ class OpenAIServingChat(OpenAIServing): model_config = self.model_config tokenizer = await self.engine_client.get_tokenizer(lora_request) + # [BI100] Runtime equivalent of patch_chat_template.py. + # Qwen3.5/3.6-MoE templates inject '\n\n\n\n' + # when enable_thinking=false, which causes the model to + # degenerate (outputs '!!!!!'). Patch it out once. + if not self._template_patched and hasattr(tokenizer, 'chat_template'): + _tgt = r"{{- '\n\n\n\n' }}" + if isinstance(tokenizer.chat_template, str) and _tgt in tokenizer.chat_template: + tokenizer.chat_template = tokenizer.chat_template.replace( + _tgt, "{{- '' }}", 1) + logger.info("[BI100] Patched chat_template: removed empty " + " block for non-thinking mode") + self._template_patched = True + conversation, mm_data_future = parse_chat_messages_futures( request.messages, model_config, tokenizer) diff --git a/qwen3_6_scripts/vendor_overrides/vllm/engine/arg_utils.py b/qwen3_6_scripts/vendor_overrides/vllm/engine/arg_utils.py index fc62d52c..89260489 100644 --- a/qwen3_6_scripts/vendor_overrides/vllm/engine/arg_utils.py +++ b/qwen3_6_scripts/vendor_overrides/vllm/engine/arg_utils.py @@ -1,6 +1,7 @@ import argparse import dataclasses import json +import os from dataclasses import dataclass from typing import (TYPE_CHECKING, Any, Dict, List, Literal, Mapping, Optional, Tuple, Type, Union) @@ -105,7 +106,7 @@ class EngineArgs: Type[ExecutorBase]]] = None pipeline_parallel_size: int = 1 tensor_parallel_size: int = 1 - data_parallel_size: int = 1 + data_parallel_size: int = int(os.environ.get("VLLM_DATA_PARALLEL_SIZE", "1")) max_parallel_loading_workers: Optional[int] = None block_size: int = 16 enable_prefix_caching: bool = False @@ -349,12 +350,6 @@ class EngineArgs: type=int, default=EngineArgs.tensor_parallel_size, help='Number of tensor parallel replicas.') - parser.add_argument('--data-parallel-size', - '-dp', - type=int, - default=EngineArgs.data_parallel_size, - help='Number of data parallel replicas. ' - 'Total GPUs = tp * pp * dp.') parser.add_argument( '--max-parallel-loading-workers', type=int,