Spaces:
Running
on
Zero
Running
on
Zero
File size: 1,289 Bytes
039e024 |
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 |
from typing import Callable
from functools import partial
import gradio as gr
import spaces
import spaces.config
from spaces.zero.decorator import P, R
def _dynGPU(
fn: Callable[P, R] | None, duration: Callable[P, int], min=30, max=300, step=10
) -> Callable[P, R]:
if not spaces.config.Config.zero_gpu:
return fn
funcs = [
(t, spaces.GPU(duration=t)(lambda *args, **kwargs: fn(*args, **kwargs)))
for t in range(min, max + 1, step)
]
def wrapper(*args, **kwargs):
requirement = duration(*args, **kwargs)
# find the function that satisfies the duration requirement
for t, func in funcs:
if t >= requirement:
gr.Info(f"Acquiring ZeroGPU for {t} seconds")
return func(*args, **kwargs)
# if no function is found, return the last one
gr.Info(f"Acquiring ZeroGPU for {funcs[-1][0]} seconds")
return funcs[-1][1](*args, **kwargs)
return wrapper
def dynGPU(
fn: Callable[P, R] | None = None,
duration: Callable[P, int] = lambda: 60,
min=30,
max=300,
step=10,
) -> Callable[P, R]:
if fn is None:
return partial(_dynGPU, duration=duration, min=min, max=max, step=step)
return _dynGPU(fn, duration, min, max, step)
|