Comfy-Org / Comfy-Org/ComfyUI

Add new sampling

Open
#10,427 1 comment 0 reactions 0 assignees View on GitHub
Feature
Dominant language
Python
Stars
133k
Forks
15.7k
Avg merge
1d 7h
Merged PRs (30d)
158

Description

###` Feature Idea

Add new mu sampling.

### Existing Solutions

`@torch.no_grad()
def sample_ab4_delayed(model, x, sigmas, extra_args=None, callback=None, disable=None):
"""Использует Heun для первых 4 шагов, затем переключается на 4-й порядок Adams-Bashforth."""
extra_args = {} if extra_args is None else extra_args
s_in = x.new_ones([x.shape[0]])
ds = [] # история производных

for i in trange(len(sigmas) - 1, disable=disable):
sigma = sigmas[i]
sigma_next = sigmas[i + 1]
denoised = model(x, sigma * s_in, **extra_args)
d = to_d(x, sigma, denoised)
ds.append(d)

if callback is not None:
callback({'x': x, 'i': i, 'sigma': sigma, 'denoised': denoised})

dt = sigma_next - sigma

if len(ds) < 4:
# Первые 4 шага — Heun
x_high = x + d * dt
denoised2 = model(x_high, sigma_next * s_in, **extra_args)
d2 = to_d(x_high, sigma_next, denoised2)
x = x + (d + d2) * dt / 2
else:
# AB4: 4-й порядок
d0, d1, d2, d3 = ds[-1], ds[-2], ds[-3], ds[-4]
x = x + dt * (55 * d0 - 59 * d1 + 37 * d2 - 9 * d3) / 24

# Оставляем только последние 4 значения
ds = ds[-4:]

return x

return x`
`@torch.no_grad()
def sample_ab4_delayed_euler(model, x, sigmas, extra_args=None, callback=None, disable=None):
"""Использует Euler для первых 4 шагов, затем переключается на 4-й порядок Adams-Bashforth."""
extra_args = {} if extra_args is None else extra_args
s_in = x.new_ones([x.shape[0]])
ds = [] # история производных

for i in trange(len(sigmas) - 1, disable=disable):
sigma = sigmas[i]
denoised = model(x, sigma * s_in, **extra_args)
d = to_d(x, sigma, denoised)
ds.append(d)

if callback is not None:
callback({'x': x, 'i': i, 'sigma': sigma, 'denoised': denoised})

dt = sigmas[i + 1] - sigma

if len(ds) < 4:
# Первые 4 шага — метод Эйлера
x = x + d * dt
else:
# AB4: 4-й порядок
d0, d1, d2, d3 = ds[-1], ds[-2], ds[-3], ds[-4]
x = x + dt * (55 * d0 - 59 * d1 + 37 * d2 - 9 * d3) / 24

# Оставляем только последние 4 значения
ds = ds[-4:]

return x`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.