Clean up logging (#15919)

This commit is contained in:
Lianmin Zheng
2025-12-27 15:27:12 -08:00
committed by GitHub
parent 2af955e16c
commit 183b65190a
9 changed files with 57 additions and 47 deletions
@@ -433,6 +433,25 @@ def dispatch_custom_allreduce():
On AMD with 1-stage AR enabled, use sglang's CustomAllreduce (has deterministic_all_reduce method). On AMD with 1-stage AR enabled, use sglang's CustomAllreduce (has deterministic_all_reduce method).
Otherwise use AiterCustomAllreduce if available. Otherwise use AiterCustomAllreduce if available.
""" """
if _is_cuda:
return CustomAllreduce
assert _is_hip
if envs.SGLANG_USE_1STAGE_ALLREDUCE.is_set():
if envs.SGLANG_USE_1STAGE_ALLREDUCE.get():
logger.debug(
"[AR] All-reduce: 1-stage kernel (SGLANG_USE_1STAGE_ALLREDUCE=1)"
)
else:
logger.debug("[AR] All-reduce: default (SGLANG_USE_1STAGE_ALLREDUCE=0)")
elif envs.SGLANG_ENABLE_DETERMINISTIC_INFERENCE.get():
logger.debug(
"[AR] All-reduce: 1-stage kernel (deterministic inference enabled)"
)
else:
logger.debug("[AR] All-reduce: default")
# Check if 1-stage AR should be used # Check if 1-stage AR should be used
if envs.SGLANG_USE_1STAGE_ALLREDUCE.is_set(): if envs.SGLANG_USE_1STAGE_ALLREDUCE.is_set():
use_1stage = envs.SGLANG_USE_1STAGE_ALLREDUCE.get() use_1stage = envs.SGLANG_USE_1STAGE_ALLREDUCE.get()
@@ -441,11 +460,10 @@ def dispatch_custom_allreduce():
# On AMD with 1-stage AR, use sglang's CustomAllreduce # On AMD with 1-stage AR, use sglang's CustomAllreduce
# (AiterCustomAllreduce doesn't have deterministic_all_reduce method) # (AiterCustomAllreduce doesn't have deterministic_all_reduce method)
if is_hip() and use_1stage: if use_1stage:
logger.info("[AR] Using sglang CustomAllreduce (1-stage kernel)")
return CustomAllreduce return CustomAllreduce
if is_hip() and get_bool_env_var("SGLANG_USE_AITER_AR", default="true"): if get_bool_env_var("SGLANG_USE_AITER_AR", default="true"):
try: try:
from aiter.dist.device_communicators.custom_all_reduce import ( from aiter.dist.device_communicators.custom_all_reduce import (
CustomAllreduce as AiterCustomAllreduce, CustomAllreduce as AiterCustomAllreduce,
@@ -460,5 +478,5 @@ def dispatch_custom_allreduce():
e, e,
) )
return CustomAllreduce return CustomAllreduce
logger.info("[AR] Using sglang CustomAllreduce")
return CustomAllreduce return CustomAllreduce
@@ -376,28 +376,12 @@ class GroupCoordinator:
group=self.cpu_group, group=self.cpu_group,
device=self.device, device=self.device,
) )
# Log which all-reduce mode will be used
if is_hip():
if envs.SGLANG_USE_1STAGE_ALLREDUCE.is_set():
if envs.SGLANG_USE_1STAGE_ALLREDUCE.get():
logger.info(
"[AR] All-reduce: 1-stage kernel (SGLANG_USE_1STAGE_ALLREDUCE=1)"
)
else:
logger.info(
"[AR] All-reduce: default (SGLANG_USE_1STAGE_ALLREDUCE=0)"
)
elif envs.SGLANG_ENABLE_DETERMINISTIC_INFERENCE.get():
logger.info(
"[AR] All-reduce: 1-stage kernel (deterministic inference enabled)"
)
else:
logger.info("[AR] All-reduce: default")
except Exception as e: except Exception as e:
logger.warning( logger.warning(
f"Setup Custom allreduce failed with {e}. To silence this " f"Setup Custom allreduce failed with {e}. To silence this "
"warning, specify --disable-custom-all-reduce explicitly." "warning, specify --disable-custom-all-reduce explicitly."
) )
if is_hip(): if is_hip():
try: try:
# Initialize a custom quick all-reduce implementation for AMD # Initialize a custom quick all-reduce implementation for AMD
+24 -19
View File
@@ -185,27 +185,11 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi
self.preferred_sampling_params = server_args.preferred_sampling_params self.preferred_sampling_params = server_args.preferred_sampling_params
self.crash_dump_folder = server_args.crash_dump_folder self.crash_dump_folder = server_args.crash_dump_folder
self.enable_trace = server_args.enable_trace self.enable_trace = server_args.enable_trace
# Read model args
self.model_path = server_args.model_path
self.served_model_name = server_args.served_model_name
self.model_config = ModelConfig.from_server_args(server_args)
self.is_generation = self.model_config.is_generation
self.is_image_gen = self.model_config.is_image_gen
self.context_len = self.model_config.context_len
self.image_token_id = self.model_config.image_token_id
self.max_req_input_len = None # Will be set later in engine.py
speculative_algorithm = SpeculativeAlgorithm.from_string(
server_args.speculative_algorithm
)
self.reserve_input_token_num = (
0
if speculative_algorithm.is_none()
else server_args.speculative_num_draft_tokens
)
set_global_server_args_for_tokenizer(server_args) set_global_server_args_for_tokenizer(server_args)
# Init model config
self.init_model_config()
# Initialize tokenizer and multimodalprocessor # Initialize tokenizer and multimodalprocessor
self.init_tokenizer_and_processor() self.init_tokenizer_and_processor()
@@ -233,6 +217,27 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi
# Init request dispatcher # Init request dispatcher
self.init_request_dispatcher() self.init_request_dispatcher()
def init_model_config(self):
server_args = self.server_args
# Read model args
self.model_path = server_args.model_path
self.served_model_name = server_args.served_model_name
self.model_config = ModelConfig.from_server_args(server_args)
self.is_generation = self.model_config.is_generation
self.is_image_gen = self.model_config.is_image_gen
self.context_len = self.model_config.context_len
self.image_token_id = self.model_config.image_token_id
self.max_req_input_len = None # Will be set later in engine.py
speculative_algorithm = SpeculativeAlgorithm.from_string(
server_args.speculative_algorithm
)
self.reserve_input_token_num = (
0
if speculative_algorithm.is_none()
else server_args.speculative_num_draft_tokens
)
def init_tokenizer_and_processor(self): def init_tokenizer_and_processor(self):
server_args = self.server_args server_args = self.server_args
@@ -140,7 +140,6 @@ class ModelRunnerKVCacheMixin:
if self.mambaish_config is not None: if self.mambaish_config is not None:
rest_memory = self.handle_max_mamba_cache(rest_memory) rest_memory = self.handle_max_mamba_cache(rest_memory)
logger.info(f"The available memory for KV cache is {rest_memory:.2f} GB.")
return int(rest_memory * (1 << 30)) // cell_size return int(rest_memory * (1 << 30)) // cell_size
def handle_max_mamba_cache(self: ModelRunner, total_rest_memory): def handle_max_mamba_cache(self: ModelRunner, total_rest_memory):
+5 -4
View File
@@ -1540,7 +1540,7 @@ class ServerArgs:
else: else:
self.attention_backend = "triton" self.attention_backend = "triton"
logger.warning( logger.info(
f"Attention backend not specified. Use {self.attention_backend} backend by default." f"Attention backend not specified. Use {self.attention_backend} backend by default."
) )
@@ -1981,19 +1981,20 @@ class ServerArgs:
): ):
self.disable_overlap_schedule = False self.disable_overlap_schedule = False
logger.warning( logger.warning(
"Beta spec is enabled for eagle/eagle3 speculative decoding and overlap schedule is turned on." "Spec v2 is enabled for eagle/eagle3 speculative decoding and overlap schedule is turned on."
) )
if ( if (
self.speculative_eagle_topk is not None self.speculative_eagle_topk is not None
and self.speculative_eagle_topk > 1 and self.speculative_eagle_topk > 1
): ):
raise ValueError( raise ValueError(
"Beta spec currently only supports topk = 1 for speculative decoding." "Spec v2 currently only supports topk = 1 for speculative decoding."
) )
else: else:
self.disable_overlap_schedule = True self.disable_overlap_schedule = True
logger.warning( logger.warning(
"Overlap scheduler is disabled when beta spec is off or using unsupported speculative algorithm." "Overlap scheduler is disabled when spec v2 is off or using unsupported speculative algorithm. "
"You can set env SGLANG_ENABLE_SPEC_V2=True to enable the experimental overlap scheduler. "
) )
if self.enable_mixed_chunk: if self.enable_mixed_chunk:
@@ -125,7 +125,7 @@ def get_hf_text_config(config: PretrainedConfig):
# read the wrong values from the unused default text_config. # read the wrong values from the unused default text_config.
# NOTE(HandH1998): We set `torch_dtype` of config to `torch.float16` for the weights, as # NOTE(HandH1998): We set `torch_dtype` of config to `torch.float16` for the weights, as
# `torch.float16` is default used for image features in `python/sglang/srt/models/llava.py`. # `torch.float16` is default used for image features in `python/sglang/srt/models/llava.py`.
setattr(config, "torch_dtype", torch.float16) setattr(config, "dtype", torch.float16)
return config return config
if hasattr(config, "text_config"): if hasattr(config, "text_config"):
+1
View File
@@ -683,6 +683,7 @@ def popen_launch_server(
response = session.get( response = session.get(
f"{base_url}/health_generate", f"{base_url}/health_generate",
headers=headers, headers=headers,
timeout=5,
) )
if response.status_code == 200: if response.status_code == 200:
return process return process
@@ -15,7 +15,7 @@ class TestNvidiaNemotronNanoV2VLTextOnly(GSM8KMixin, DefaultServerBase):
class TestNvidiaNemotronNanoV2VLMMMU(MMMUVLMTestBase): class TestNvidiaNemotronNanoV2VLMMMU(MMMUVLMTestBase):
accuracy = 0.454 accuracy = 0.444
model = MODEL model = MODEL
other_args = ["--max-mamba-cache-size", "128", "--trust-remote-code"] other_args = ["--max-mamba-cache-size", "128", "--trust-remote-code"]
mmmu_args = ["--limit=0.1"] mmmu_args = ["--limit=0.1"]
+2
View File
@@ -199,6 +199,7 @@ class TestVisionChunkedPrefill(CustomTestCase):
logger.info(f"Killing chunked server pid={chunked_server_pid}") logger.info(f"Killing chunked server pid={chunked_server_pid}")
kill_process_tree(chunked_server_pid) kill_process_tree(chunked_server_pid)
logger.info("Chunked server killed") logger.info("Chunked server killed")
time.sleep(4)
# None-chunked # None-chunked
logger.info("Phase 2: Testing with chunked_prefill_size=-1 (no chunking)") logger.info("Phase 2: Testing with chunked_prefill_size=-1 (no chunking)")
@@ -218,6 +219,7 @@ class TestVisionChunkedPrefill(CustomTestCase):
logger.info(f"Killing non-chunked server pid={no_chunked_server_pid}") logger.info(f"Killing non-chunked server pid={no_chunked_server_pid}")
kill_process_tree(no_chunked_server_pid) kill_process_tree(no_chunked_server_pid)
logger.info("Non-chunked server killed") logger.info("Non-chunked server killed")
time.sleep(4)
for output_chunked, output_no_chunked in zip( for output_chunked, output_no_chunked in zip(
outputs_chunked, outputs_no_chunked outputs_chunked, outputs_no_chunked