94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
154 lines
5.8 KiB
Python
154 lines
5.8 KiB
Python
import os
|
||
import re
|
||
import tempfile
|
||
import time
|
||
|
||
import requests
|
||
|
||
from sglang.srt.utils import kill_process_tree
|
||
from sglang.test.ascend.test_ascend_utils import LLAMA_3_2_1B_INSTRUCT_WEIGHTS_PATH
|
||
from sglang.test.test_utils import (
|
||
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
||
DEFAULT_URL_FOR_TEST,
|
||
CustomTestCase,
|
||
popen_launch_server,
|
||
)
|
||
|
||
|
||
class TestNPULoggingBase(CustomTestCase):
|
||
"""Testcase:Test base class to verify whether the parameters in the logging function are correct.
|
||
|
||
Description:
|
||
Includes methods for initializing data and methods for verifying the correctness of the logging function.
|
||
|
||
[Test Category] Parameter
|
||
[Test Target] --log-requests; --log-requests-level; --log-requests-target; --uvicorn-access-log-exclude-prefixes;
|
||
--enable-metrics; --enable-metrics-for-all-scheduler;
|
||
--bucket-time-to-first-token; --bucket-inter-token-latency; --bucket-e2e-request-latency;
|
||
--collect-tokens-histogram; --prompt-tokens-buckets; --generation-tokens-buckets;
|
||
--tokenizer-metrics-custom-labels-header; --tokenizer-metrics-allowed-custom-labels;
|
||
--gc-warning-threshold-secs
|
||
"""
|
||
|
||
@staticmethod
|
||
def get_lines_with_keyword(filename, keyword):
|
||
"""Find and return lines matching a regex keyword from a specified file, with line numbers and content.
|
||
|
||
Function Description:
|
||
Reads the target file line by line, uses the input keyword as a regular expression pattern to match each line's content.
|
||
For each line that matches the regex pattern, encapsulates the line number (1-indexed) and content into a dictionary,
|
||
and finally returns a list of dictionaries containing all matched lines.
|
||
|
||
Args:
|
||
filename (str): Path to the file to be read
|
||
keyword (str): Regular expression pattern for matching
|
||
|
||
Returns:
|
||
List[Dict[str, Union[str, int]]]
|
||
List of dictionaries for matched lines, each dictionary contains two key-value pairs:
|
||
- "line_number": int - Line number of the matched line (starts from 1)
|
||
- "content": str - Full text content of the matched line
|
||
"""
|
||
results = []
|
||
try:
|
||
with open(filename, "r", encoding="utf-8") as file:
|
||
for line_num, line in enumerate(file, 1):
|
||
if re.match(keyword, line):
|
||
results.append(
|
||
{
|
||
"line_number": line_num,
|
||
"content": line.strip(),
|
||
}
|
||
)
|
||
return results
|
||
except Exception as e:
|
||
print(f"error:{e}")
|
||
return []
|
||
|
||
@classmethod
|
||
def setUpClass(cls):
|
||
cls.model = LLAMA_3_2_1B_INSTRUCT_WEIGHTS_PATH
|
||
cls.base_url = DEFAULT_URL_FOR_TEST
|
||
cls.other_args = [
|
||
"--trust-remote-code",
|
||
"--mem-fraction-static",
|
||
"0.8",
|
||
"--attention-backend",
|
||
"ascend",
|
||
"--disable-cuda-graph",
|
||
"--log-requests",
|
||
]
|
||
cls.out_log_file_obj = tempfile.NamedTemporaryFile(
|
||
mode="w+", encoding="utf-8", delete=False, suffix=".txt"
|
||
)
|
||
cls.out_log_name = cls.out_log_file_obj.name
|
||
cls.out_log_file = cls.out_log_file_obj
|
||
cls.err_log_file_obj = tempfile.NamedTemporaryFile(
|
||
mode="w+", encoding="utf-8", delete=False, suffix=".txt"
|
||
)
|
||
cls.err_log_name = cls.err_log_file_obj.name
|
||
cls.err_log_file = cls.err_log_file_obj
|
||
cls.process = None
|
||
|
||
@classmethod
|
||
def tearDownClass(cls):
|
||
if cls.process:
|
||
kill_process_tree(cls.process.pid)
|
||
cls.out_log_file.close()
|
||
os.remove(cls.out_log_name)
|
||
cls.err_log_file.close()
|
||
os.remove(cls.err_log_name)
|
||
|
||
@classmethod
|
||
def launch_server(cls):
|
||
cls.process = popen_launch_server(
|
||
cls.model,
|
||
cls.base_url,
|
||
timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
||
other_args=cls.other_args,
|
||
return_stdout_stderr=(cls.out_log_file, cls.err_log_file),
|
||
)
|
||
|
||
def inference_once(self, max_tokens=32):
|
||
response = requests.post(
|
||
f"{self.base_url}/generate",
|
||
json={
|
||
"text": "The capital of France is",
|
||
"sampling_params": {
|
||
"temperature": 0,
|
||
"max_new_tokens": max_tokens,
|
||
},
|
||
},
|
||
)
|
||
|
||
self.assertEqual(response.status_code, 200, "Failed to call generate API")
|
||
self.assertIn("Paris", response.text, "Inference out error.")
|
||
|
||
def wait_for_log_content(self, timeout=30):
|
||
"""Wait for and return the content of the specified log file, with timeout handling.
|
||
|
||
Function Description:
|
||
Continuously reads the target log file in a loop within the set timeout period,
|
||
avoids assertion failures caused by reading the log too early before log writing is completed.
|
||
Returns the log content immediately once the file has non-empty content,
|
||
otherwise waits and retries reading at intervals until the timeout is reached.
|
||
|
||
Args:
|
||
timeout (int, optional): Maximum waiting time in seconds, default value is 30 seconds.
|
||
|
||
Returns:
|
||
str
|
||
Full text content read from the log file:
|
||
- Non-empty string if log content is detected within the timeout period
|
||
- Empty string if no log content is found after the timeout expires
|
||
"""
|
||
start_time = time.time()
|
||
content = ""
|
||
while time.time() - start_time < timeout:
|
||
with open(self.out_log_file.name, "r", encoding="utf-8") as f:
|
||
content = f.read()
|
||
if content:
|
||
break
|
||
time.sleep(0.5)
|
||
return content
|