""" System utilities for Lily LLM API """ import os import torch import logging logger = logging.getLogger(__name__) def configure_cpu_threads(): """CPU 스레드 환경 최적화 (vCPU 수에 맞게 조정).""" print(f"🔍 [DEBUG] configure_cpu_threads 시작") try: # 기본값: 환경변수 또는 시스템 CPU 수를 사용하되 과도한 스레드 방지 env_threads = os.getenv("CPU_THREADS") if env_threads is not None: threads = max(1, int(env_threads)) else: detected = os.cpu_count() or 2 # 컨테이너/서버의 vCPU 수를 그대로 사용하되 상한 16 적용 threads = max(1, min(detected, 16)) # OpenMP/MKL/numexpr os.environ["OMP_NUM_THREADS"] = str(threads) os.environ["MKL_NUM_THREADS"] = str(threads) os.environ.setdefault("NUMEXPR_NUM_THREADS", str(threads)) os.environ.setdefault("TOKENIZERS_PARALLELISM", "false") # PyTorch 내부 스레드 설정 try: torch.set_num_threads(threads) except Exception: pass try: # 연산 간 스레드 풀은 1~2 권장(컨텍스트 스위칭 비용 절감) torch.set_num_interop_threads(1 if threads <= 4 else 2) except Exception: pass logger.info(f"🧵 CPU thread config -> OMP/MKL/numexpr={threads}, torch_threads={threads}") except Exception as e: logger.warning(f"⚠️ CPU 스레드 설정 실패: {e}") print(f"🔍 [DEBUG] configure_cpu_threads 종료") def select_model_interactive(): """인터랙티브 모델 선택""" from ..models import list_available_models available_models = list_available_models() print("\n" + "="*60 + "\n🤖 Lily LLM API v2 - 모델 선택\n" + "="*60) for i, model_info in enumerate(available_models, 1): print(f"{i:2d}. {model_info['name']} ({model_info['model_id']})") while True: try: # choice = input(f"\n📝 사용할 모델 번호를 선택하세요 (1-{len(available_models)}): ") # selected_model = available_models[int(choice) - 1] selected_model = available_models[1] print(f"\n✅ '{selected_model['name']}' 모델을 선택했습니다.") return selected_model['model_id'] except (ValueError, IndexError): print(f"❌ 1에서 {len(available_models)} 사이의 숫자를 입력해주세요.") except KeyboardInterrupt: import sys sys.exit("\n\n👋 프로그램을 종료합니다.")