vocal-separation / zero.py
github-actions[bot]
Sync to HuggingFace Spaces
039e024
raw
history blame contribute delete
No virus
1.29 kB
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)