mirror of
https://github.com/katanemo/plano.git
synced 2026-04-27 01:36:33 +02:00
88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
|
|
import os
|
||
|
|
import sys
|
||
|
|
import time
|
||
|
|
import logging
|
||
|
|
import requests
|
||
|
|
import subprocess
|
||
|
|
import importlib
|
||
|
|
|
||
|
|
|
||
|
|
PROJ_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
|
|
||
|
|
|
||
|
|
# Default log directory and file
|
||
|
|
DEFAULT_LOG_DIR = os.path.join(PROJ_DIR, ".logs")
|
||
|
|
DEFAULT_LOG_FILE = "modelserver.log"
|
||
|
|
|
||
|
|
|
||
|
|
def get_model_server_logger(log_dir=None, log_file=None):
|
||
|
|
"""
|
||
|
|
Get or initialize the logger instance for the model server.
|
||
|
|
|
||
|
|
Parameters:
|
||
|
|
- log_dir (str): Custom directory to store the log file. Defaults to `./.logs`.
|
||
|
|
- log_file (str): Custom log file name. Defaults to `modelserver.log`.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
- logging.Logger: Configured logger instance.
|
||
|
|
"""
|
||
|
|
log_dir = log_dir or DEFAULT_LOG_DIR
|
||
|
|
log_file = log_file or DEFAULT_LOG_FILE
|
||
|
|
log_file_path = os.path.join(log_dir, log_file)
|
||
|
|
|
||
|
|
# Check if the logger is already configured
|
||
|
|
logger = logging.getLogger("model_server_logger")
|
||
|
|
if logger.hasHandlers():
|
||
|
|
# Return existing logger instance if already configured
|
||
|
|
return logger
|
||
|
|
|
||
|
|
# Ensure the log directory exists, create it if necessary
|
||
|
|
try:
|
||
|
|
# Create directory if it doesn't exist
|
||
|
|
os.makedirs(log_dir, exist_ok=True)
|
||
|
|
|
||
|
|
# Check for write permissions
|
||
|
|
if not os.access(log_dir, os.W_OK):
|
||
|
|
raise PermissionError(f"No write permission for the directory: {log_dir}")
|
||
|
|
except (PermissionError, OSError) as e:
|
||
|
|
raise RuntimeError(f"Failed to initialize logger: {e}")
|
||
|
|
|
||
|
|
# Configure logging to file
|
||
|
|
logging.basicConfig(
|
||
|
|
level=logging.INFO,
|
||
|
|
format="%(asctime)s - %(levelname)s - %(message)s",
|
||
|
|
handlers=[
|
||
|
|
# logging.FileHandler(log_file_path, mode="w"), # Overwrite logs in the file
|
||
|
|
logging.StreamHandler(), # Also log to console
|
||
|
|
],
|
||
|
|
)
|
||
|
|
|
||
|
|
return logger
|
||
|
|
|
||
|
|
|
||
|
|
logger = get_model_server_logger()
|
||
|
|
|
||
|
|
logging.info("initializing torch device ...")
|
||
|
|
import torch
|
||
|
|
|
||
|
|
|
||
|
|
def get_device():
|
||
|
|
available_device = {
|
||
|
|
"cpu": True,
|
||
|
|
"cuda": torch.cuda.is_available(),
|
||
|
|
"mps": (
|
||
|
|
torch.backends.mps.is_available()
|
||
|
|
if hasattr(torch.backends, "mps")
|
||
|
|
else False
|
||
|
|
),
|
||
|
|
}
|
||
|
|
|
||
|
|
if available_device["cuda"]:
|
||
|
|
device = "cuda"
|
||
|
|
elif available_device["mps"]:
|
||
|
|
device = "mps"
|
||
|
|
else:
|
||
|
|
device = "cpu"
|
||
|
|
|
||
|
|
return device
|