| import torch |
| import logging |
|
|
| logger = logging.getLogger(__name__) |
|
|
| def get_available_gpu_count(): |
| """Get the number of available GPUs on the system. |
| |
| Returns: |
| int: Number of available GPUs, or 0 if no GPUs are available |
| """ |
| try: |
| if torch.cuda.is_available(): |
| return torch.cuda.device_count() |
| else: |
| return 0 |
| except Exception as e: |
| logger.warning(f"Error detecting GPUs: {e}") |
| return 0 |
|
|
| def get_gpu_info(): |
| """Get information about available GPUs. |
| |
| Returns: |
| list: List of dictionaries with GPU information |
| """ |
| gpu_info = [] |
| try: |
| if torch.cuda.is_available(): |
| for i in range(torch.cuda.device_count()): |
| gpu = { |
| 'index': i, |
| 'name': torch.cuda.get_device_name(i), |
| 'memory_total': torch.cuda.get_device_properties(i).total_memory |
| } |
| gpu_info.append(gpu) |
| except Exception as e: |
| logger.warning(f"Error getting GPU details: {e}") |
| |
| return gpu_info |
|
|
| def get_recommended_precomputation_items(num_videos, num_gpus): |
| """Calculate recommended precomputation items. |
| |
| Args: |
| num_videos (int): Number of videos in dataset |
| num_gpus (int): Number of GPUs to use |
| |
| Returns: |
| int: Recommended precomputation items value |
| """ |
| if num_gpus <= 0: |
| num_gpus = 1 |
| |
| |
| items_per_gpu = max(1, num_videos // num_gpus) |
| |
| |
| return min(512, items_per_gpu) |