82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Qwen3-ASR server CLI entrypoint."""
|
|
|
|
import os
|
|
import sys
|
|
import multiprocessing as mp
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
|
|
os.environ.setdefault("TQDM_DISABLE", "1")
|
|
os.environ.setdefault("DISABLE_TQDM", "1")
|
|
os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn")
|
|
|
|
|
|
def _disable_third_party_progress_bars() -> None:
|
|
try:
|
|
from transformers.utils import logging as transformers_logging
|
|
|
|
transformers_logging.disable_progress_bar()
|
|
transformers_logging.set_verbosity_error()
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def _configure_multiprocessing() -> None:
|
|
# vLLM launches EngineCore in a child process. CUDA cannot be re-initialized
|
|
# in a forked subprocess, so we must force spawn before importing the app.
|
|
current = mp.get_start_method(allow_none=True)
|
|
if current != "spawn":
|
|
mp.set_start_method("spawn", force=True)
|
|
|
|
|
|
def _run_server(workers: int) -> None:
|
|
from app.core.config import settings
|
|
import uvicorn
|
|
|
|
print(f"Qwen3-ASR | http://{settings.HOST}:{settings.PORT} | {settings.DEVICE}")
|
|
|
|
if workers == 1:
|
|
from app.bootstrap import run_cli_preflight
|
|
|
|
if not run_cli_preflight():
|
|
sys.exit(1)
|
|
elif workers > 1:
|
|
print(f"多Worker模式({workers}),启动前仅进行最小 preflight")
|
|
|
|
uvicorn.run(
|
|
"app.main:app",
|
|
host=settings.HOST,
|
|
port=settings.PORT,
|
|
workers=workers,
|
|
reload=settings.DEBUG if workers == 1 else False,
|
|
log_level="debug" if settings.DEBUG else settings.LOG_LEVEL.lower(),
|
|
access_log=True,
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
"""主入口"""
|
|
workers = int(os.getenv("WORKERS", "1"))
|
|
_disable_third_party_progress_bars()
|
|
_configure_multiprocessing()
|
|
|
|
try:
|
|
_run_server(workers)
|
|
except KeyboardInterrupt:
|
|
print("\n已停止")
|
|
sys.exit(0)
|
|
except Exception as e:
|
|
print(f"启动失败: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|