File size: 1,825 Bytes
01bb284 9fa15f3 01bb284 9fa15f3 01bb284 9fa15f3 01bb284 9fa15f3 01bb284 9fa15f3 01bb284 9fa15f3 01bb284 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# decorators.py
import functools
import torch
import threading
import time
class spaces:
@staticmethod
def GPU(duration=0):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
# Verifica si la GPU est谩 disponible, si no lanza un error controlado
if torch.cuda.is_available():
device = torch.device('cuda')
print("GPU disponible. Ejecutando en GPU.")
else:
raise RuntimeError("No se detecta la GPU. Aseg煤rate de que los drivers CUDA est谩n instalados y configurados correctamente.")
# Pasar el dispositivo a la funci贸n como argumento
kwargs['device'] = device
result = [None]
exception = [None]
def target():
try:
result[0] = func(*args, **kwargs)
except Exception as e:
exception[0] = e
# Ejecutar la funci贸n en un hilo separado
thread = threading.Thread(target=target)
thread.start()
thread.join(duration)
if thread.is_alive():
raise TimeoutError(f"La ejecuci贸n de la funci贸n excedi贸 {duration} segundos.")
if exception[0]:
raise exception[0]
return result[0]
except RuntimeError as e:
print(f"Error: {str(e)}")
raise e # Lanzar el error de GPU para que se maneje adecuadamente
return wrapper
return decorator
|