Skip to content

Commit 9182e86

Browse files
Log fully resolved pooling config at startup (#48030)
Signed-off-by: Taneem Ibrahim <taneem.ibrahim@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 313d01f commit 9182e86

3 files changed

Lines changed: 78 additions & 2 deletions

File tree

vllm/config/model.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
MMTensorIPC,
2121
MultiModalConfig,
2222
)
23-
from vllm.config.pooler import PoolerConfig
23+
from vllm.config.pooler import POOLER_CONFIG_LOG_FIELDS, PoolerConfig
2424
from vllm.config.quantization import QuantizationConfigArgs
2525
from vllm.config.scheduler import RunnerType
2626
from vllm.config.utils import config, getattr_iter
@@ -640,20 +640,32 @@ def __post_init__(
640640
if self.runner_type == "pooling":
641641
if self.pooler_config is None:
642642
self.pooler_config = PoolerConfig()
643+
pooler_config_sources: dict[str, str] = {}
644+
else:
645+
pooler_config_sources = {
646+
k: "user"
647+
for k in POOLER_CONFIG_LOG_FIELDS
648+
if getattr(self.pooler_config, k) is not None
649+
}
643650

644651
base_config = get_pooling_config(self.model, self.revision)
645652
if base_config is not None:
646653
# Only set values that are not overridden by the user
647654
for k, v in base_config.items():
648655
if getattr(self.pooler_config, k) is None:
649656
setattr(self.pooler_config, k, v)
657+
pooler_config_sources[k] = "sentence_transformers"
650658

651659
default_seq_pooling_type = self._model_info.default_seq_pooling_type
652660
if self.pooler_config.seq_pooling_type is None:
653661
self.pooler_config.seq_pooling_type = default_seq_pooling_type
662+
pooler_config_sources["seq_pooling_type"] = "model_default"
654663
default_tok_pooling_type = self._model_info.default_tok_pooling_type
655664
if self.pooler_config.tok_pooling_type is None:
656665
self.pooler_config.tok_pooling_type = default_tok_pooling_type
666+
pooler_config_sources["tok_pooling_type"] = "model_default"
667+
pooler_config_sources.setdefault("use_activation", "pooler_default")
668+
self._pooler_config_sources = pooler_config_sources
657669

658670
self.dtype: torch.dtype = _get_and_verify_dtype(
659671
self.model,

vllm/config/pooler.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
TokenPoolingType = Literal["ALL", "STEP"]
1717
TOK_POOLING_TYPES: tuple[TokenPoolingType, ...] = get_args(TokenPoolingType)
1818

19+
POOLER_CONFIG_LOG_FIELDS = (
20+
"seq_pooling_type",
21+
"tok_pooling_type",
22+
"use_activation",
23+
)
24+
1925

2026
@config
2127
class PoolerConfig:

vllm/v1/engine/core.py

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import vllm.envs as envs
2424
from vllm.config import ParallelConfig, VllmConfig
25+
from vllm.config.pooler import POOLER_CONFIG_LOG_FIELDS
2526
from vllm.distributed import (
2627
cleanup_dist_env_and_memory,
2728
stateless_destroy_torch_distributed_process_group,
@@ -121,6 +122,7 @@ def __init__(
121122

122123
# Setup Model.
123124
self.model_executor = executor_class(vllm_config)
125+
self._pooler_config_logged = False
124126
if executor_fail_callback is not None:
125127
self.model_executor.register_failure_callback(executor_fail_callback)
126128

@@ -348,7 +350,63 @@ def _initialize_kv_caches(self, vllm_config: VllmConfig) -> KVCacheConfig:
348350
return scheduler_kv_cache_config
349351

350352
def get_supported_tasks(self) -> tuple[SupportedTask, ...]:
351-
return self.model_executor.supported_tasks
353+
supported_tasks = self.model_executor.supported_tasks
354+
self._log_pooler_config(supported_tasks)
355+
return supported_tasks
356+
357+
def _log_pooler_config(self, supported_tasks: tuple[SupportedTask, ...]) -> None:
358+
if self._pooler_config_logged:
359+
return
360+
361+
model_config = self.vllm_config.model_config
362+
pooler_config = model_config.pooler_config
363+
if (
364+
self.vllm_config.parallel_config.data_parallel_rank_local
365+
or model_config.runner_type != "pooling"
366+
or pooler_config is None
367+
):
368+
return
369+
370+
supported_pooling_tasks = tuple(
371+
sorted(set(supported_tasks) & set(POOLING_TASKS))
372+
)
373+
if not supported_pooling_tasks:
374+
return
375+
376+
self._pooler_config_logged = True
377+
task_set = set(supported_pooling_tasks)
378+
use_activation = pooler_config.use_activation
379+
if use_activation is None:
380+
use_activation = True
381+
sources = getattr(model_config, "_pooler_config_sources", {})
382+
pooling_type_field = (
383+
"seq_pooling_type"
384+
if task_set & {"embed", "classify"}
385+
else "tok_pooling_type"
386+
)
387+
388+
def log_field(name: str, field: str) -> str:
389+
value = (
390+
use_activation
391+
if field == "use_activation"
392+
else getattr(pooler_config, field)
393+
)
394+
source = sources.get(field, "unknown")
395+
return f"{name}={value}(source={source})"
396+
397+
log_items = [("pooling_type", pooling_type_field)]
398+
log_items.extend(
399+
(field, field)
400+
for field in POOLER_CONFIG_LOG_FIELDS
401+
if field != pooling_type_field
402+
)
403+
config_fields = ", ".join(log_field(name, field) for name, field in log_items)
404+
405+
logger.info_once(
406+
"Resolved pooling config: %s, supported_tasks=%s",
407+
config_fields,
408+
supported_pooling_tasks,
409+
)
352410

353411
def get_kv_cache_group_metadata(self) -> list[dict[str, int | str | None]]:
354412
"""Return msgspec-serializable metadata for scheduler KV cache groups."""

0 commit comments

Comments
 (0)