mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-12-24 13:28:13 +08:00
[BugFix] fix work metrics not returned by metrics api (#4912)
* [BugFix] fix work metrics not returned by metrics api * [fix] fix conflict * [fix] fix ci
This commit is contained in:
@@ -17,11 +17,20 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
# suppress warning log from paddlepaddle
|
||||
os.environ["GLOG_minloglevel"] = "2"
|
||||
# suppress log from aistudio
|
||||
os.environ["AISTUDIO_LOG"] = "critical"
|
||||
# set prometheus dir
|
||||
if os.getenv("PROMETHEUS_MULTIPROC_DIR", "") == "":
|
||||
prom_dir = f"/tmp/fd_prom_{str(uuid.uuid4())}"
|
||||
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
|
||||
if os.path.exists(prom_dir):
|
||||
os.rmdir(prom_dir)
|
||||
os.mkdir(prom_dir)
|
||||
|
||||
import typing
|
||||
|
||||
from paddleformers.utils.log import logger as pf_logger
|
||||
|
||||
@@ -60,7 +60,6 @@ from fastdeploy.entrypoints.openai.utils import UVICORN_CONFIG, make_arg_parser
|
||||
from fastdeploy.envs import environment_variables
|
||||
from fastdeploy.metrics.metrics import (
|
||||
EXCLUDE_LABELS,
|
||||
cleanup_prometheus_files,
|
||||
get_filtered_metrics,
|
||||
main_process_metrics,
|
||||
)
|
||||
@@ -630,17 +629,19 @@ def launch_metrics_server():
|
||||
if not is_port_available(args.host, args.metrics_port):
|
||||
raise Exception(f"The parameter `metrics_port`:{args.metrics_port} is already in use.")
|
||||
|
||||
prom_dir = cleanup_prometheus_files(True)
|
||||
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
|
||||
# Move setting prometheus directory to fastdeploy/__init__.py
|
||||
# prom_dir = cleanup_prometheus_files(True)
|
||||
# os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
|
||||
metrics_server_thread = threading.Thread(target=run_metrics_server, daemon=True)
|
||||
metrics_server_thread.start()
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def setup_metrics_environment():
|
||||
"""Prepare Prometheus multiprocess directory before starting API workers."""
|
||||
prom_dir = cleanup_prometheus_files(True)
|
||||
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
|
||||
# NOTE: This is commented out since PROMETHEUS_MULTIPROC_DIR is already set up in fastdeploy/__init__.py
|
||||
# def setup_metrics_environment():
|
||||
# """Prepare Prometheus multiprocess directory before starting API workers."""
|
||||
# prom_dir = cleanup_prometheus_files(True)
|
||||
# os.environ["PROMETHEUS_MULTIPROC_DIR"] = prom_dir
|
||||
|
||||
|
||||
controller_app = FastAPI()
|
||||
@@ -755,7 +756,7 @@ def main():
|
||||
launch_metrics_server()
|
||||
console_logger.info(f"Launching metrics service at http://{args.host}:{args.metrics_port}/metrics")
|
||||
else:
|
||||
setup_metrics_environment()
|
||||
# setup_metrics_environment()
|
||||
console_logger.info(f"Launching metrics service at http://{args.host}:{args.port}/metrics")
|
||||
console_logger.info(f"Launching chat completion service at http://{args.host}:{args.port}/v1/chat/completions")
|
||||
console_logger.info(f"Launching completion service at http://{args.host}:{args.port}/v1/completions")
|
||||
|
||||
@@ -184,27 +184,17 @@ def test_config_info_process_object_branches():
|
||||
assert "without_dict" in data and data["without_dict"] is None
|
||||
|
||||
|
||||
def test_setup_metrics_environment_sets_env_var(tmp_path):
|
||||
# Cover calling setup_metrics_environment()
|
||||
with (
|
||||
patch("fastdeploy.utils.FlexibleArgumentParser.parse_args") as mock_parse_args,
|
||||
patch("fastdeploy.utils.retrive_model_from_server") as mock_retrive_model,
|
||||
patch("fastdeploy.entrypoints.chat_utils.load_chat_template") as mock_load_template,
|
||||
):
|
||||
mock_parse_args.return_value = _build_mock_args()
|
||||
mock_retrive_model.return_value = "test-model"
|
||||
mock_load_template.return_value = None
|
||||
def test_setup_metrics_environment_sets_env_var():
|
||||
# Cover 'fastdeploy/__init__.py'
|
||||
import fastdeploy
|
||||
|
||||
from fastdeploy.entrypoints.openai import api_server as api_server_mod
|
||||
|
||||
api_server = importlib.reload(api_server_mod)
|
||||
|
||||
desired_dir = str(tmp_path / "prom_multiproc")
|
||||
|
||||
# Patch the name imported into api_server so we don't touch real FS
|
||||
with patch("fastdeploy.entrypoints.openai.api_server.cleanup_prometheus_files", return_value=desired_dir):
|
||||
api_server.setup_metrics_environment()
|
||||
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR") == desired_dir
|
||||
# clear PROMETHEUS_MULTIPROC_DIR
|
||||
os.environ.pop("PROMETHEUS_MULTIPROC_DIR")
|
||||
# reload fastdeploy
|
||||
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR") is None
|
||||
importlib.reload(fastdeploy)
|
||||
# check if PROMETHEUS_MULTIPROC_DIR is reinitialized
|
||||
assert os.environ.get("PROMETHEUS_MULTIPROC_DIR").startswith("/tmp/fd_prom")
|
||||
|
||||
|
||||
def test_metrics_app_routes_when_metrics_port_diff():
|
||||
|
||||
Reference in New Issue
Block a user