Spaces:
Runtime error
Runtime error
| # hardware_manager.py | |
| # Gerencia a detecção e alocação de GPUs para os especialistas. | |
| # Copyright (C) 2025 Carlos Rodrigues dos Santos | |
| import torch | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| class HardwareManager: | |
| def __init__(self): | |
| self.gpus = [] | |
| self.allocated_gpus = set() | |
| if torch.cuda.is_available(): | |
| self.gpus = [f'cuda:{i}' for i in range(torch.cuda.device_count())] | |
| logger.info(f"Hardware Manager: Encontradas {len(self.gpus)} GPUs disponíveis: {self.gpus}") | |
| def allocate_gpus(self, specialist_name: str, num_required: int) -> list[str]: | |
| if not self.gpus or num_required == 0: | |
| logger.warning(f"Nenhuma GPU disponível ou solicitada para '{specialist_name}'. Alocando para CPU.") | |
| return ['cpu'] | |
| available_gpus = [gpu for gpu in self.gpus if gpu not in self.allocated_gpus] | |
| if len(available_gpus) < num_required: | |
| error_msg = f"Recursos de GPU insuficientes para '{specialist_name}'. Solicitado: {num_required}, Disponível: {len(available_gpus)}." | |
| logger.error(error_msg) | |
| raise RuntimeError(error_msg) | |
| allocated = available_gpus[:num_required] | |
| self.allocated_gpus.update(allocated) | |
| logger.info(f"Hardware Manager: Alocando GPUs {allocated} para o especialista '{specialist_name}'.") | |
| return allocated | |
| hardware_manager = HardwareManager() |