| |
|
|
| import os |
| import torch |
|
|
| class GPUManager: |
| """ |
| Gerencia e aloca GPUs disponíveis para diferentes serviços (LTX, SeedVR). |
| """ |
| def __init__(self): |
| self.total_gpus = torch.cuda.device_count() |
| self.ltx_gpus = [] |
| self.seedvr_gpus = [] |
| self._allocate_gpus() |
|
|
| def _allocate_gpus(self): |
| """ |
| Divide as GPUs disponíveis entre os serviços LTX e SeedVR. |
| """ |
| print("="*50) |
| print("🤖 Gerenciador de GPUs inicializado.") |
| print(f" > Total de GPUs detectadas: {self.total_gpus}") |
|
|
| if self.total_gpus == 0: |
| print(" > Nenhuma GPU detectada. Operando em modo CPU.") |
| elif self.total_gpus == 1: |
| print(" > 1 GPU detectada. Modo de compartilhamento de memória será usado.") |
| |
| self.ltx_gpus = [0] |
| self.seedvr_gpus = [0] |
| else: |
| |
| mid_point = self.total_gpus // 2 |
| self.ltx_gpus = list(range(0, mid_point)) |
| self.seedvr_gpus = list(range(mid_point, self.total_gpus)) |
| print(f" > Alocação: LTX usará GPUs {self.ltx_gpus}, SeedVR usará GPUs {self.seedvr_gpus}.") |
| |
| print("="*50) |
|
|
| def get_ltx_device(self): |
| """Retorna o dispositivo principal para o LTX.""" |
| if not self.ltx_gpus: |
| return torch.device("cpu") |
| |
| return torch.device(f"cuda:{self.ltx_gpus[0]}") |
|
|
| def get_seedvr_devices(self) -> list: |
| """Retorna a lista de IDs de GPU para o SeedVR.""" |
| return self.seedvr_gpus |
|
|
| def requires_memory_swap(self) -> bool: |
| """Verifica se é necessário mover modelos entre CPU e GPU.""" |
| return self.total_gpus < 2 |
|
|
| |
| gpu_manager = GPUManager() |