CI: use 'sglang serve' in CI tests (#18597)

Co-authored-by: Mick <mickjagger19@icloud.com>
Co-authored-by: sglang-bot <sglangbot@gmail.com>
This commit is contained in:
yrk111222
2026-02-28 06:00:41 +08:00
committed by GitHub
parent 776709efe8
commit e6da514c2c
3 changed files with 47 additions and 37 deletions

View File

@@ -26,6 +26,33 @@ def _get_lock(model_name_or_path: str, cache_dir: Optional[str] = None):
return lock
def _hf_hub_download(
repo_id: str,
filename: str,
local_dir: Optional[str] = None,
**kwargs,
) -> str:
"""Unified hf_hub_download supporting both Hugging Face Hub and ModelScope."""
if envs.SGLANG_USE_MODELSCOPE.get():
from modelscope import model_file_download
return model_file_download(
model_id=repo_id,
file_path=filename,
cache_dir=local_dir,
**kwargs,
)
else:
from huggingface_hub import hf_hub_download as _hf_hub_download_impl
return _hf_hub_download_impl(
repo_id=repo_id,
filename=filename,
local_dir=local_dir,
**kwargs,
)
# Copied and adapted from hf_diffusers_utils.py
def _maybe_download_model(
model_name_or_path: str, local_dir: str | None = None, download: bool = True
@@ -44,8 +71,6 @@ def _maybe_download_model(
Local directory path that contains the downloaded config file, or the original local directory.
"""
from sglang.multimodal_gen.runtime.utils.hf_diffusers_utils import hf_hub_download
if os.path.exists(model_name_or_path):
logger.debug("Model already exists locally")
return model_name_or_path
@@ -62,7 +87,7 @@ def _maybe_download_model(
source_hub,
model_name_or_path,
)
file_path = hf_hub_download(
file_path = _hf_hub_download(
repo_id=model_name_or_path,
filename="model_index.json",
local_dir=local_dir,
@@ -79,7 +104,7 @@ def _maybe_download_model(
source_hub,
model_name_or_path,
)
file_path = hf_hub_download(
file_path = _hf_hub_download(
repo_id=model_name_or_path,
filename="config.json",
local_dir=local_dir,

View File

@@ -11,7 +11,6 @@ import inspect
import math
import os
import signal
import socket
import sys
import threading
import traceback
@@ -23,7 +22,6 @@ from typing import Any, TypeVar, cast
import cloudpickle
import torch
import yaml
from remote_pdb import RemotePdb
from torch.distributed.fsdp import MixedPrecisionPolicy
import sglang.multimodal_gen.envs as envs
@@ -546,15 +544,6 @@ class TypeBasedDispatcher:
raise ValueError(f"Invalid object: {obj}")
# For non-torch.distributed debugging
def remote_breakpoint() -> None:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("localhost", 0)) # Let the OS pick an ephemeral port.
port = s.getsockname()[1]
RemotePdb(host="localhost", port=port).set_trace()
@dataclass
class MixedPrecisionState:
param_dtype: torch.dtype | None = None

View File

@@ -879,18 +879,22 @@ def popen_launch_server(
use_mixed_pd_engine = not pd_separated and num_replicas is not None
if pd_separated or use_mixed_pd_engine:
command = "sglang.launch_pd_server"
command = [
"python3",
"-m",
"sglang.launch_pd_server",
"--model-path",
model,
*[str(x) for x in other_args],
]
else:
command = "sglang.launch_server"
command = [
"python3",
"-m",
command,
"--model-path",
model,
*[str(x) for x in other_args],
]
command = [
"sglang",
"serve",
"--model-path",
model,
*[str(x) for x in other_args],
]
if pd_separated or use_mixed_pd_engine:
command.extend(["--lb-host", host, "--lb-port", port])
@@ -1308,7 +1312,7 @@ def run_score_benchmark(
json=warmup_data,
timeout=aiohttp.ClientTimeout(total=30),
)
except:
except Exception:
pass # Ignore warmup errors
test_requests = []
@@ -1376,17 +1380,9 @@ def run_embeddings_benchmark(
async def _run_benchmark():
# Load tokenizer for generating test data
from sglang.srt.utils.hf_transformers_utils import get_tokenizer
tokenizer = get_tokenizer(model)
def generate_text_with_token_count(num_tokens):
"""Generate text with precise token count using special tokens."""
# Use a token that reliably produces 1 token
special_token = "<|im_start|>"
# Verify it's a single token
test_tokens = tokenizer.encode(special_token, add_special_tokens=False)
text = special_token * num_tokens
return text
@@ -1406,7 +1402,7 @@ def run_embeddings_benchmark(
json=warmup_data,
timeout=aiohttp.ClientTimeout(total=30),
)
except:
except Exception:
pass # Ignore warmup errors
test_requests = []
@@ -1822,7 +1818,7 @@ def run_mulit_request_test(
},
},
)
ret = response.json()
response.json()
with ThreadPoolExecutor(2) as executor:
list(executor.map(run_one, list(range(4))))