vocal-separation / zero.py
github-actions[bot]
Sync to HuggingFace Spaces
039e024
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)