vllm_omni.diffusion.models.ovis_image ¶
Ovis Image 7B diffusion model components.
Modules:
| Name | Description |
|---|---|
ovis_image_transformer | |
pipeline_ovis_image | |
OvisImagePipeline ¶
Bases: Module, CFGParallelMixin, DiffusionPipelineProfilerMixin, SupportsComponentDiscovery
scheduler instance-attribute ¶
scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(
model,
subfolder="scheduler",
local_files_only=local_files_only,
)
system_prompt instance-attribute ¶
system_prompt = "Describe the image by detailing the color, quantity, text, shape, size, texture, spatial\n relationships of the objects and background: "
text_encoder instance-attribute ¶
text_encoder = from_pretrained_with_prefetch(
Qwen3Model.from_pretrained,
model,
subfolder="text_encoder",
prefetch_list=ovis_subfolders,
local_files_only=local_files_only,
torch_dtype=od_config.dtype,
)
tokenizer instance-attribute ¶
tokenizer = Qwen2TokenizerFast.from_pretrained(
model,
subfolder="tokenizer",
local_files_only=local_files_only,
)
vae instance-attribute ¶
vae = from_pretrained_with_prefetch(
AutoencoderKL.from_pretrained,
model,
subfolder="vae",
prefetch_list=ovis_subfolders,
local_files_only=local_files_only,
).to(self._execution_device)
vae_scale_factor instance-attribute ¶
vae_scale_factor = (
2 ** (len(self.vae.config.block_out_channels) - 1)
if getattr(self, "vae", None)
else 8
)
weights_sources instance-attribute ¶
weights_sources = [
DiffusersPipelineLoader.ComponentSource(
model_or_path=od_config.model,
subfolder="transformer",
revision=None,
prefix="transformer.",
fall_back_to_pt=True,
)
]
check_inputs ¶
check_inputs(
prompt,
height,
width,
negative_prompt=None,
prompt_embeds=None,
negative_prompt_embeds=None,
callback_on_step_end_tensor_inputs=None,
max_sequence_length=None,
)
diffuse ¶
diffuse(
latents: Tensor,
timesteps: Tensor,
prompt_embeds: Tensor,
negative_prompt_embeds: Tensor,
text_ids: Tensor,
negative_text_ids: Tensor,
latent_image_ids: Tensor,
do_true_cfg: bool,
guidance_scale: float,
cfg_normalize: bool = False,
) -> Tensor
Diffusion loop with optional classifier-free guidance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latents | Tensor | Noise latents to denoise | required |
timesteps | Tensor | Diffusion timesteps | required |
prompt_embeds | Tensor | Positive prompt embeddings | required |
negative_prompt_embeds | Tensor | Negative prompt embeddings | required |
text_ids | Tensor | Position IDs for positive text | required |
negative_text_ids | Tensor | Position IDs for negative text | required |
latent_image_ids | Tensor | Position IDs for image latents | required |
do_true_cfg | bool | Whether to apply CFG | required |
guidance_scale | float | CFG scale factor | required |
cfg_normalize | bool | Whether to normalize CFG output (default: False) | False |
Returns:
| Type | Description |
|---|---|
Tensor | Denoised latents |
encode_prompt ¶
encode_prompt(
prompt: str | list[str],
device: device | None = None,
num_images_per_prompt: int = 1,
prompt_embeds: FloatTensor | None = None,
)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prompt | `str` or `list[str]`, *optional* | prompt to be encoded | required |
device | device | None | ( | None |
num_images_per_prompt | int | ( | 1 |
prompt_embeds | FloatTensor | None | ( | None |
prepare_latents ¶
prepare_latents(
batch_size,
num_channel_latents,
height,
width,
dtype,
device,
generator,
latents=None,
)
OvisImageTransformer2DModel ¶
Bases: Module
The Transformer model introduced in Ovis-Image.
Reference: https://github.com/AIDC-AI/Ovis-Image
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
patch_size | `int`, defaults to `1` | Patch size to turn the input data into small patches. | 1 |
in_channels | `int`, defaults to `64` | The number of channels in the input. | 64 |
out_channels | `int`, *optional*, defaults to `None` | The number of channels in the output. If not specified, it defaults to | 64 |
num_layers | `int`, defaults to `6` | The number of layers of dual stream DiT blocks to use. | 6 |
num_single_layers | `int`, defaults to `27` | The number of layers of single stream DiT blocks to use. | 27 |
attention_head_dim | `int`, defaults to `128` | The number of dimensions to use for each attention head. | 128 |
num_attention_heads | `int`, defaults to `24` | The number of attention heads to use. | 24 |
joint_attention_dim | `int`, defaults to `2048` | The number of dimensions to use for the joint attention (embedding/channel dimension of | 2048 |
axes_dims_rope | `tuple[int]`, defaults to `(16, 56, 56)` | The dimensions to use for the rotary positional embeddings. | (16, 56, 56) |
context_embedder instance-attribute ¶
context_embedder_norm instance-attribute ¶
norm_out instance-attribute ¶
norm_out = AdaLayerNormContinuous(
self.inner_dim,
self.inner_dim,
elementwise_affine=False,
eps=1e-06,
)
pos_embed instance-attribute ¶
pos_embed = OvisImagePosEmbed(
theta=10000, axes_dim=axes_dims_rope
)
proj_out instance-attribute ¶
single_transformer_blocks instance-attribute ¶
single_transformer_blocks = nn.ModuleList(
[
(
OvisImageSingleTransformerBlock(
dim=self.inner_dim,
num_attention_heads=num_attention_heads,
attention_head_dim=attention_head_dim,
)
)
for _ in (range(num_single_layers))
]
)
time_proj instance-attribute ¶
timestep_embedder instance-attribute ¶
transformer_blocks instance-attribute ¶
transformer_blocks = nn.ModuleList(
[
(
OvisImageTransformerBlock(
dim=self.inner_dim,
num_attention_heads=num_attention_heads,
attention_head_dim=attention_head_dim,
)
)
for _ in (range(num_layers))
]
)
forward ¶
forward(
hidden_states: Tensor,
encoder_hidden_states: Tensor = None,
timestep: LongTensor = None,
img_ids: Tensor = None,
txt_ids: Tensor = None,
return_dict: bool = True,
) -> Tensor | Transformer2DModelOutput
The [OvisImageTransformer2DModel] forward method.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
hidden_states | `torch.Tensor` of shape `(batch_size, image_sequence_length, in_channels)` | Input | required |
encoder_hidden_states | `torch.Tensor` of shape `(batch_size, text_sequence_length, joint_attention_dim)` | Conditional embeddings (embeddings computed from the input conditions such as prompts) to use. | None |
timestep | `torch.LongTensor` | Used to indicate denoising step. | None |
img_ids | Tensor | ( | None |
txt_ids | `torch.Tensor` | The position ids for text tokens. | None |
return_dict | `bool`, *optional*, defaults to `True` | Whether or not to return a [ | True |
Returns:
| Type | Description |
|---|---|
Tensor | Transformer2DModelOutput | If |
Tensor | Transformer2DModelOutput |
|
get_ovis_image_post_process_func ¶
get_ovis_image_post_process_func(
od_config: OmniDiffusionConfig,
)