Merge pull request #1 from iddl/chroma-fixes · huggingface/diffusers@e95ac9d · GitHub
Skip to content

Commit e95ac9d

Browse files
authored
Merge pull request #1 from iddl/chroma-fixes
2 parents 373106c + 104e163 commit e95ac9d

4 files changed

Lines changed: 100 additions & 83 deletions

File tree

‎src/diffusers/loaders/single_file_utils.py‎

Lines changed: 79 additions & 56 deletions

‎src/diffusers/models/embeddings.py‎

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,42 +1643,27 @@ def __init__(self, factor: int, hidden_dim: int, out_dim: int, n_layers: int, em
16431643

16441644
self.time_proj = Timesteps(num_channels=factor, flip_sin_to_cos=True, downscale_freq_shift=0)
16451645
self.guidance_proj = Timesteps(num_channels=factor, flip_sin_to_cos=True, downscale_freq_shift=0)
1646-
self.embedder = ChromaApproximator(
1647-
in_dim=factor * 4,
1648-
out_dim=out_dim,
1649-
hidden_dim=hidden_dim,
1650-
n_layers=n_layers,
1651-
)
1652-
self.embedding_dim = embedding_dim
16531646

16541647
self.register_buffer(
16551648
"mod_proj",
1656-
get_timestep_embedding(torch.arange(out_dim), 2 * factor, flip_sin_to_cos=True, downscale_freq_shift=0),
1649+
get_timestep_embedding(torch.arange(out_dim)*1000, 2 * factor, flip_sin_to_cos=True, downscale_freq_shift=0, ),
16571650
persistent=False,
16581651
)
16591652

16601653
def forward(
16611654
self, timestep: torch.Tensor, guidance: Optional[torch.Tensor], pooled_projections: torch.Tensor
16621655
) -> torch.Tensor:
16631656
mod_index_length = self.mod_proj.shape[0]
1664-
timesteps_proj = self.time_proj(timestep) + self.time_proj(pooled_projections)
1665-
if guidance is not None:
1666-
guidance_proj = self.guidance_proj(guidance)
1667-
else:
1668-
guidance_proj = torch.zeros(
1669-
(self.embedding_dim, self.guidance_proj.num_channels),
1670-
dtype=timesteps_proj.dtype,
1671-
device=timesteps_proj.device,
1672-
)
1657+
timesteps_proj = self.time_proj(timestep).to(dtype=timestep.dtype)
1658+
guidance_proj = self.guidance_proj(torch.tensor([0])).to(dtype=timestep.dtype, device=timestep.device)
16731659

16741660
mod_proj = self.mod_proj.to(dtype=timesteps_proj.dtype, device=timesteps_proj.device)
16751661
timestep_guidance = (
16761662
torch.cat([timesteps_proj, guidance_proj], dim=1).unsqueeze(1).repeat(1, mod_index_length, 1)
16771663
)
1678-
input_vec = torch.cat([timestep_guidance, mod_proj], dim=-1)
1679-
conditioning = self.embedder(input_vec)
1664+
input_vec = torch.cat([timestep_guidance, mod_proj.unsqueeze(0)], dim=-1)
16801665

1681-
return conditioning
1666+
return input_vec
16821667

16831668

16841669
class CogView3CombinedTimestepSizeEmbeddings(nn.Module):

‎src/diffusers/models/normalization.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def forward(
206206
) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
207207
if self.emb is not None:
208208
emb = self.emb(timestep, class_labels, hidden_dtype=hidden_dtype)
209-
scale_msa, shift_msa, gate_msa, scale_mlp, shift_mlp, gate_mlp = emb.chunk(6, dim=1)
209+
shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = emb.squeeze(0).chunk(6, dim=0)
210210
x = self.norm(x) * (1 + scale_msa[:, None]) + shift_msa[:, None]
211211
return x, gate_msa, shift_mlp, scale_mlp, gate_mlp
212212

@@ -267,7 +267,7 @@ def forward(
267267
x: torch.Tensor,
268268
emb: Optional[torch.Tensor] = None,
269269
) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
270-
scale_msa, shift_msa, gate_msa = emb.chunk(3, dim=1)
270+
shift_msa, scale_msa, gate_msa = emb.squeeze(0).chunk(3, dim=0)
271271
x = self.norm(x) * (1 + scale_msa[:, None]) + shift_msa[:, None]
272272
return x, gate_msa
273273

@@ -413,7 +413,7 @@ def __init__(
413413

414414
def forward(self, x: torch.Tensor, emb: torch.Tensor) -> torch.Tensor:
415415
# convert back to the original dtype in case `conditioning_embedding`` is upcasted to float32 (needed for hunyuanDiT)
416-
shift, scale = torch.chunk(emb.to(x.dtype), 2, dim=1)
416+
shift, scale = torch.chunk(emb.squeeze(0).to(x.dtype), 2, dim=0)
417417
x = self.norm(x) * (1 + scale)[:, None, :] + shift[:, None, :]
418418
return x
419419

‎src/diffusers/models/transformers/transformer_flux.py‎

Lines changed: 13 additions & 4 deletions

0 commit comments

Comments
 (0)