Buckets:

hf-doc-build/doc / diffusers /main /ru /api /schedulers /block_refinement.md
mishig's picture
|
download
raw
13.9 kB
# BlockRefinementScheduler
`BlockRefinementScheduler` управляет блочным итеративным уточнением для дискретной диффузии токенов. На каждом шаге он фиксирует наиболее уверенные токены и при необходимости редактирует уже зафиксированные токены, если модель предсказывает другой токен с высокой степенью уверенности.
Этот планировщик используется в [LLaDA2Pipeline](/docs/diffusers/main/ru/api/pipelines/llada2#diffusers.LLaDA2Pipeline).
## BlockRefinementScheduler[[diffusers.BlockRefinementScheduler]]
#### diffusers.BlockRefinementScheduler[[diffusers.BlockRefinementScheduler]]
```python
diffusers.BlockRefinementScheduler(block_length: int = 32, num_inference_steps: int = 32, threshold: float = 0.95, editing_threshold: float | None = None, minimal_topk: int = 1)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L54)
Планировщик для блочного итеративного уточнения (коммит по степени уверенности).
На каждом шаге планировщик выбирает кандидаты токены из логитов модели и фиксирует те, у которых уверенность максимальна. Количество токенов, фиксируемых на каждом шаге, определяется равномерным распределением длины блока на количество шагов уточнения.
Необязательно поддерживает редактирование: после разрешения всех маскирующих токенов токены могут быть заменены, если модель предсказывает другой токен с уверенностью выше положительного `editing_threshold` (`None`, `0.0` или отрицательное значение отключает редактирование).
#### add_noise[[diffusers.BlockRefinementScheduler.add_noise]]
```python
add_noise(original_samples: torch.LongTensor, attention_mask: torch.LongTensor, prompt_length: int, block_length: int, mask_token_id: int, generator: torch.Generator | None = None)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L456)
**Параметры:**
original_samples (`torch.LongTensor` формы `(batch_size, seq_len)`) : Чистые идентификаторы токенов.
attention_mask (`torch.LongTensor` формы `(batch_size, seq_len)`) : Маска отступов (1 для валидных токенов, 0 для отступов).
prompt_length (`int`) : Количество начальных токенов промпта, которые нужно оставить без маски.
block_length (`int`) : Размер блока для маскирования.
mask_token_id (`int`) : Идентификатор токена, используемый для замаскированных позиций.
generator (`torch.Generator`, *необязательный*) : генератор случайных чисел для воспроизводимости.
**Возвращает:** `tuple[torch.LongTensor, torch.LongTensor, torch.BoolTensor, torch.BoolTensor]`
`(noisy, noisy_rev, masked, masked_rev)` — две взаимодополняющие зашумленные последовательности и соответствующие им булевы маски.
Примените прямой (шумовой) процесс для маскирования блоков в полуавто-регрессивном режиме.
Для каждого блока после промпта случайная доля валидных (не служебных) токенов заменяется на `mask_token_id`. Возвращаются два взаимодополняющих представления: `noisy` и `noisy_rev`, где замаскированные позиции в одном из них являются незамаскированными в другом.
#### check_block_should_continue[[diffusers.BlockRefinementScheduler.check_block_should_continue]]
```python
check_block_should_continue(step_idx: int, masks_remaining: bool, editing_enabled: bool, editing_transfer_index: torch.BoolTensor, post_steps: int, max_post_steps: int, finished: torch.BoolTensor)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L412)
**Параметры:**
step_idx (`int`) : Текущий индекс шага уточнения в пределах этого блока.
masks_remaining (`bool`) : Остались ли в блоке какие-либо маскирующие токены.
editing_enabled (`bool`) : Активен ли режим редактирования.
editing_transfer_index (`torch.BoolTensor`) : Какие токены были изменены на этом шаге.
post_steps (`int`) : Количество шагов редактирования после маски, выполненных на данный момент.
max_post_steps (`int`) : Максимально допустимое количество шагов редактирования после маски.
finished (`torch.BoolTensor`) : Флаги завершения для каждой партии (из детектирования EOS).
**Возвращает:** `bool`
`True`, если уточнение должно продолжаться, `False` — для прерывания.
Определите, следует ли продолжать внутренний цикл уточнения для текущего блока.
#### check_eos_finished[[diffusers.BlockRefinementScheduler.check_eos_finished]]
```python
check_eos_finished(cur_x: torch.LongTensor, sampled_tokens: torch.LongTensor, final_transfer: torch.BoolTensor, finished: torch.BoolTensor, eos_token_id: int, mask_token_id: int, prompt_length: int)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L362)
**Параметры:**
cur_x (`torch.LongTensor` формы `(batch_size, seq_len)`) : Текущая полная последовательность, включающая все блоки до текущего окна.
sampled_tokens (`torch.LongTensor` формы `(batch_size, block_length)`) : Токены, выбранные планировщиком на этом шаге.
final_transfer (`torch.BoolTensor` формы `(batch_size, block_length)`) : Соединённая маска зафиксированных и отредактированных позиций.
finished (`torch.BoolTensor` формы `(batch_size,)`) : Текущие флаги завершения для каждой партии.
eos_token_id (`int`) : ID токена EOS.
mask_token_id (`int`) : ID маскирующего токена.
prompt_length (`int`) : Количество токенов промпта в начале последовательности.
**Возвращает:** `torch.BoolTensor`
Обновлены флаги finished.
Обновляйте флаги завершения для каждой партии при фиксации токенов EOS.
#### get_num_transfer_tokens[[diffusers.BlockRefinementScheduler.get_num_transfer_tokens]]
```python
get_num_transfer_tokens(block_length: int, num_inference_steps: int)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L102)
Равномерно распределите коммиты токенов `block_length` по `num_inference_steps` шагам.
#### шаг[[diffusers.BlockRefinementScheduler.step]]
```python
step(model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.LongTensor, mask_token_id: int | None = None, temperature: float = 0.0, top_p: float | None = None, top_k: int | None = None, sampling_method: str = 'auto', threshold: float | None = None, editing_threshold: float | None = None, minimal_topk: int | None = None, prompt_mask: torch.BoolTensor | None = None, generator: torch.Generator | None = None, return_dict: bool = True)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L181)
**Параметры:**
model_output (`torch.Tensor` формы `(batch_size, block_length, vocab_size)`) : Сырые логиты модели для текущего блока.
timestep (`int` или `torch.Tensor`) : Текущий индекс шага в расписании уточнения блока.
sample (`torch.LongTensor` формы `(batch_size, block_length)`) : ID токенов текущего блока (в режиме на основе маски содержит маскирующие токены для неподтверждённых позиций).
mask_token_id (`int`, *optional*) : Идентификатор токена, используемый для замаскированных позиций. Если `None`, планировщик работает в режиме равномерного повреждения: он внутренне отслеживает зафиксированные позиции (сбрасывая их при `timestep == 0`) и добавляет шум к незафиксированным позициям с помощью равномерно случайных токенов, что соответствует блочному сэмплеру уточнения DiffusionGemma.
temperature (`float`) : Температура выборки.
top_p (`float`, *необязательный*) : Порог обрезки для ядерной выборки.
top_k (`int`, *optional*) : Порог выборки Top-k.
sampling_method (`str`) : Метод выборки (`auto`, `greedy`, `multinomial`).
threshold (`float`, *необязательный*) : Порог уверенности для фиксации токенов. По умолчанию используется значение из конфигурации.
editing_threshold (`float`, *optional*) : Порог уверенности для редактирования токенов вне маски; должен быть положительным для включения редактирования. По умолчанию используется значение из конфигурации.
minimal_topk (`int`, *optional*) : Минимальное количество токенов для фиксации на каждом шаге. По умолчанию используется значение из конфигурации.
prompt_mask (`torch.BoolTensor`, *необязательный*) : Булева маска формы `(block_length,)`, где `True` отмечает позиции промпта (не редактируемые).
generator (`torch.Generator`, *необязательный*) : генератор случайных чисел для выборки.
return_dict (`bool`) : Нужно ли возвращать `BlockRefinementSchedulerOutput` или кортеж.
Выполните один шаг уточнения: сгенерируйте токены из логитов, зафиксируйте уверенные токены и при необходимости отредактируйте существующие.
## BlockRefinementSchedulerOutput[[diffusers.BlockRefinementSchedulerOutput]]
#### diffusers.BlockRefinementSchedulerOutput[[diffusers.BlockRefinementSchedulerOutput]]
```python
diffusers.BlockRefinementSchedulerOutput(prev_sample: torch.LongTensor, transfer_index: torch.BoolTensor, editing_transfer_index: torch.BoolTensor, sampled_tokens: torch.LongTensor, sampled_probs: torch.Tensor, pred_logits: torch.Tensor)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_block_refinement.py#L27)
**Параметры:**
prev_sample (`torch.LongTensor` формы `(batch_size, block_length)`) : Обновлённые токены блока после текущего шага уточнения.
transfer_index (`torch.BoolTensor` формы `(batch_size, block_length)`) : Булева маска, указывающая, какие токены были зафиксированы (mask-filling).
editing_transfer_index (`torch.BoolTensor` формы `(batch_size, block_length)`) : Булева маска, указывающая, какие токены были отредактированы (замена без маски).
sampled_tokens (`torch.LongTensor` формы `(batch_size, block_length)`) : Сэмплированные идентификаторы токенов из логитов модели.
sampled_probs (`torch.Tensor` формы `(batch_size, block_length)`) : Вероятности сэмплированных токенов.
pred_logits (`torch.Tensor` формы `(batch_size, block_length, vocab_size)`) : Логиты денойзера, передаваемые для самоусловливания следующего шага.
Класс вывода для планирования уточнения блоков.

Xet Storage Details

Size:
13.9 kB
·
Xet hash:
ade954ea492731466698eadb9a75787cff9f4dfa005c64ddf042a683412efb97

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.