akshan-main's picture
Upload DiffusionGemmaModularPipeline
eb50ef7 verified
|
Raw
History Blame Contribute Delete
5.42 kB
---
library_name: diffusers
tags:
- modular-diffusers
- diffusers
- diffusion-gemma
- text-to-image
- modular-diffusers
- diffusers
- diffusion-gemma
- text-to-image
---
This is a modular diffusion pipeline built with 🧨 Diffusers' modular pipeline framework.
**Pipeline Type**: DiffusionGemmaBlocks
**Description**: Modular blocks for DiffusionGemma block-diffusion text generation.
- `text_encoder` applies the chat template and tokenizes the prompt
- `prepare_generation` sizes the canvases, creates the KV cache and resolves EOS
- `set_timesteps` splits the forward budget and configures the scheduler
- `denoise` generates the text canvas by canvas
- `decode` trims at EOS and decodes the token IDs into text
This pipeline uses a 5-block architecture that can be customized and extended.
## Example Usage
[TODO]
## Pipeline Architecture
This modular pipeline is composed of the following blocks:
1. **text_encoder** (`DiffusionGemmaTextEncoderStep`)
- Text encoder step that applies the chat template to a `prompt` or a raw `messages` conversation and tokenizes it into the prompt token IDs consumed by the encoder prefill
2. **prepare_generation** (`DiffusionGemmaPrepareGenerationStep`)
- Prepare step that sizes the generation into canvases, creates the encoder KV cache, and resolves the EOS token used for early stopping and trimming
3. **set_timesteps** (`DiffusionGemmaSetTimestepsStep`)
- Step that splits the per-canvas forward budget into predictor and corrector steps and configures the scheduler's refinement schedule
4. **denoise** (`DiffusionGemmaDenoiseStep`)
- Canvas denoise step that iterates over canvases.
5. **decode** (`DiffusionGemmaDecodeStep`)
- Decode step that trims each generated sequence at its first EOS token and decodes the token IDs into text with the processor
## Model Components
1. processor (`ProcessorMixin`)
2. model (`DiffusionGemmaForBlockDiffusion`)
3. scheduler (`BlockRefinementScheduler`)
## Input/Output Specification
**Inputs:**
- `prompt` (`str`, *optional*): Prompt text, wrapped in a chat template and tokenized
- `messages` (`list`, *optional*): A raw chat conversation to encode instead of `prompt`, e.g. `[{"role": "user", "content": "Hello"}]` or a multi-turn / multimodal conversation.
- `image` (`Image | ndarray | Tensor | list | list | list`, *optional*): Image(s) to pair with `prompt` for multimodal generation. For richer layouts, put the image content directly in `messages`.
- `add_generation_prompt` (`bool`, *optional*, defaults to `True`): Whether to add the generation prompt when applying the chat template.
- `gen_length` (`int`, *optional*, defaults to `256`): Number of tokens to generate, rounded up to a multiple of the model's `canvas_length`.
- `cache_implementation` (`str`, *optional*): Set to `"static"` to use a fixed-shape `StaticCache` so the decoder can be compiled.
- `eos_token_id` (`int`, *optional*): EOS token ID for early stopping. Falls back to the processor's tokenizer.
- `num_inference_steps` (`int`, *optional*, defaults to `48`): Number of denoising steps per canvas, i.e. the per-canvas budget of model forwards.
- `eos_early_stop` (`bool`, *optional*, defaults to `True`): Whether to stop generating further canvases once every sequence has emitted EOS.
- `generator` (`Generator`, *optional*): Torch generator for deterministic generation.
- `temperature` (`float`, *optional*, defaults to `0.0`): Sampling temperature (`0.0` is greedy). Other sampling knobs are scheduler config.
- `stability_threshold` (`int`, *optional*, defaults to `1`): Consecutive steps the argmax prediction must be unchanged for a canvas to count as stable. Only used when `confidence_threshold` is set.
- `confidence_threshold` (`float`, *optional*, defaults to `0.005`): Leave the refinement loop early once every example is stable and the mean per-token entropy is below this value. Set to `None` to always run all steps.
**Outputs:**
- `prompt_ids` (`LongTensor`): Tokenized prompt of shape `(batch_size, prompt_length)`.
- `prompt_attention_mask` (`LongTensor`): Attention mask for `prompt_ids`.
- `multimodal_inputs` (`dict`): Image tensors the processor produced for the encoder prefill.
- `canvas_length` (`int`): The model's canvas length, i.e. the number of tokens denoised per block.
- `num_canvases` (`int`): Number of canvases to generate.
- `past_key_values` (`object`): The encoder KV cache reused across canvases and denoising steps.
- `eos_token_id` (`int`): The resolved EOS token ID (user-provided or from the processor's tokenizer).
- `finished` (`Tensor`): Per-example flags marking sequences that already emitted EOS.
- `predictor_steps` (`int`): Predictor steps run per canvas.
- `corrected_steps` (`int`): Number of leading predictor steps that also run corrector sweeps.
- `corrector_steps` (`int`): Corrector sweeps run after each of the first `corrected_steps` predictor steps.
- `decoder_position_ids` (`LongTensor`): Position IDs of the canvas tokens, continuing the running sequence.
- `decoder_attention_mask_mapping` (`object`): The decoder attention mask mapping built over the populated cache plus the canvas.
- `canvas` (`LongTensor`): The noisy canvas of shape `(batch_size, canvas_length)` being denoised.
- `sequences` (`LongTensor`): The generated token IDs of shape `(batch_size, generated_length)`.
- `texts` (`list`): The decoded generated text, one string per prompt.