File size: 815 Bytes
f8d4986
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""ZeroGPU helpers.

`gpu` é um decorator: no HF Spaces (ZeroGPU) ele aloca uma GPU por chamada;
localmente (sem o pacote `spaces`) vira um no-op transparente. Assim o mesmo
código roda nas 3060 locais e no Space.
"""
import functools

try:
    import spaces  # disponível só nos Spaces ZeroGPU
    _HAS_SPACES = True
except Exception:
    _HAS_SPACES = False


def gpu(duration: int = 60):
    """Aloca GPU por `duration`s na chamada (ZeroGPU). No-op local."""
    def decorate(fn):
        if _HAS_SPACES:
            return spaces.GPU(duration=duration)(fn)

        @functools.wraps(fn)
        def wrapper(*args, **kwargs):
            return fn(*args, **kwargs)

        return wrapper

    return decorate


def device() -> str:
    import torch
    return "cuda" if torch.cuda.is_available() else "cpu"