Unverified Commit 7b0fad3f authored by William Arnold's avatar William Arnold Committed by GitHub
Browse files

fix: only log config on `debug` log level, fix trtllm warnings (#3590)


Signed-off-by: default avatarWilliam Arnold <7565007+Aphoh@users.noreply.github.com>
parent 9bb2bc93
...@@ -98,9 +98,9 @@ def dump_config(dump_config_to: Optional[str], config: Any) -> None: ...@@ -98,9 +98,9 @@ def dump_config(dump_config_to: Optional[str], config: Any) -> None:
Raises: Raises:
Logs errors but does not raise exceptions to ensure graceful degradation. Logs errors but does not raise exceptions to ensure graceful degradation.
""" """
config_dump_payload = get_config_dump(config)
if dump_config_to: if dump_config_to:
config_dump_payload = get_config_dump(config)
try: try:
dump_path = pathlib.Path(dump_config_to) dump_path = pathlib.Path(dump_config_to)
dump_path.parent.mkdir(parents=True, exist_ok=True) dump_path.parent.mkdir(parents=True, exist_ok=True)
...@@ -108,13 +108,17 @@ def dump_config(dump_config_to: Optional[str], config: Any) -> None: ...@@ -108,13 +108,17 @@ def dump_config(dump_config_to: Optional[str], config: Any) -> None:
f.write(config_dump_payload) f.write(config_dump_payload)
logger.info(f"Dumped config to {dump_path.resolve()}") logger.info(f"Dumped config to {dump_path.resolve()}")
except (OSError, IOError): except (OSError, IOError):
logger.exception(f"Failed to dump config to {dump_config_to}") logger.exception(
f"Failed to dump config to {dump_config_to}, dropping to stdout"
)
logger.info(f"CONFIG_DUMP: {config_dump_payload}") logger.info(f"CONFIG_DUMP: {config_dump_payload}")
except Exception: except Exception:
logger.exception("Unexpected error dumping config") logger.exception("Unexpected error dumping config, dropping to stdout")
logger.info(f"CONFIG_DUMP: {config_dump_payload}") logger.info(f"CONFIG_DUMP: {config_dump_payload}")
else: elif logger.getEffectiveLevel() <= logging.DEBUG:
logger.info(f"CONFIG_DUMP: {config_dump_payload}") # only collect/dump config if the logger is at DEBUG level or lower
config_dump_payload = get_config_dump(config)
logger.debug(f"CONFIG_DUMP: {config_dump_payload}")
def get_config_dump(config: Any, extra_info: Optional[Dict[str, Any]] = None) -> str: def get_config_dump(config: Any, extra_info: Optional[Dict[str, Any]] = None) -> str:
...@@ -183,6 +187,21 @@ def add_config_dump_args(parser: argparse.ArgumentParser): ...@@ -183,6 +187,21 @@ def add_config_dump_args(parser: argparse.ArgumentParser):
) )
try:
# trtllm uses pydantic, but it's not a hard dependency
import pydantic
def try_process_pydantic(obj: Any) -> Optional[dict]:
if isinstance(obj, pydantic.BaseModel):
return obj.model_dump()
return None
except ImportError:
def try_process_pydantic(obj: Any) -> Optional[dict]:
return None
@functools.singledispatch @functools.singledispatch
def _preprocess_for_encode(obj: object) -> object: def _preprocess_for_encode(obj: object) -> object:
""" """
...@@ -193,6 +212,10 @@ def _preprocess_for_encode(obj: object) -> object: ...@@ -193,6 +212,10 @@ def _preprocess_for_encode(obj: object) -> object:
""" """
if dataclasses.is_dataclass(obj) and not isinstance(obj, type): if dataclasses.is_dataclass(obj) and not isinstance(obj, type):
return dataclasses.asdict(obj) return dataclasses.asdict(obj)
if (result := try_process_pydantic(obj)) is not None:
return result
logger.warning(f"Unknown type {type(obj)}, using __dict__ or str(obj)") logger.warning(f"Unknown type {type(obj)}, using __dict__ or str(obj)")
if hasattr(obj, "__dict__"): if hasattr(obj, "__dict__"):
return obj.__dict__ return obj.__dict__
......
...@@ -8,7 +8,7 @@ from typing import Optional ...@@ -8,7 +8,7 @@ from typing import Optional
from tensorrt_llm.llmapi import BuildConfig from tensorrt_llm.llmapi import BuildConfig
from dynamo._core import get_reasoning_parser_names, get_tool_parser_names from dynamo._core import get_reasoning_parser_names, get_tool_parser_names
from dynamo.common.config_dump import add_config_dump_args from dynamo.common.config_dump import add_config_dump_args, register_encoder
from dynamo.trtllm import __version__ from dynamo.trtllm import __version__
from dynamo.trtllm.request_handlers.handler_base import ( from dynamo.trtllm.request_handlers.handler_base import (
DisaggregationMode, DisaggregationMode,
...@@ -98,6 +98,13 @@ class Config: ...@@ -98,6 +98,13 @@ class Config:
) )
@register_encoder(Config)
def _preprocess_for_encode_config(
obj: Config,
) -> dict: # pyright: ignore[reportUnusedFunction]
return obj.__dict__
def is_first_worker(config): def is_first_worker(config):
""" """
Check if the current worker is the first worker in the disaggregation chain. Check if the current worker is the first worker in the disaggregation chain.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment