# SD3 Transformer 모델

[Stable Diffusion 3](https://hf.co/papers/2403.03206)에 소개된 Transformer 모델입니다. MMDiT transformer 블록에 그 독창성이 있습니다.

## SD3Transformer2DModel[[diffusers.SD3Transformer2DModel]]

#### diffusers.SD3Transformer2DModel[[diffusers.SD3Transformer2DModel]]

```python
diffusers.SD3Transformer2DModel(sample_size: int = 128, patch_size: int = 2, in_channels: int = 16, num_layers: int = 18, attention_head_dim: int = 64, num_attention_heads: int = 18, joint_attention_dim: int = 4096, caption_projection_dim: int = 1152, pooled_projection_dim: int = 2048, out_channels: int = 16, pos_embed_max_size: int = 96, dual_attention_layers: tuple = (), qk_norm: str | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_sd3.py#L79)

**매개변수:**

sample_size (`int`, 기본값 `128`) : latents의 너비/높이입니다. 학습 중에 position embeddings의 수를 학습하는 데 사용되므로 고정됩니다.

patch_size (`int`, 기본값 `2`) : 입력 데이터를 작은 패치로 변환하기 위한 패치 크기.

in_channels (`int`, 기본값 `16`) : 입력의 잠재 채널 수입니다.

num_layers (`int`, 기본값 `18`) : 사용할 transformer 블록의 레이어 수입니다.

attention_head_dim (`int`, 기본값 `64`) : 각 헤드(head)의 채널 수.

num_attention_heads (`int`, 기본값 `18`) : multi-head attention에 사용할 헤드 수입니다.

joint_attention_dim (`int`, 기본값 `4096`) : 텍스트-이미지 결합 주의를 사용할 임베딩 차원입니다.

caption_projection_dim (`int`, 기본값 `1152`) : 캡션 임베딩의 임베딩 차원입니다.

pooled_projection_dim (`int`, 기본값 `2048`) : 풀링된 텍스트 투영의 임베딩 차원입니다.

out_channels (`int`, 기본값 `16`) : 출력의 잠재 채널 수입니다.

pos_embed_max_size (`int`, 기본값 `96`) : 위치 임베딩의 최대 잠재 높이/너비.

dual_attention_layers (`tuple[int, ...]`, 기본값 `()`) : 사용할 dual-stream transformer 블록의 수입니다.

qk_norm (`str`, *선택 사항*, 기본값 `None`) : attention 레이어에서 query와 key에 사용할 정규화입니다. `None`인 경우 정규화를 사용하지 않습니다.

[Stable Diffusion 3](https://huggingface.co/papers/2403.03206)에 소개된 Transformer 모델입니다.

#### enable_forward_chunking[[diffusers.SD3Transformer2DModel.enable_forward_chunking]]

```python
enable_forward_chunking(chunk_size: int | None = None, dim: int = 0)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_sd3.py#L175)

**매개변수:**

chunk_size (`int`, *선택 사항*) : 피드포워드 레이어의 청크 크기입니다. 지정하지 않으면 `dim` 차원의 각 텐서에 대해 피드포워드 레이어를 개별적으로 실행합니다.

dim (`int`, *선택 사항*, 기본값 `0`) : 피드포워드 계산을 청킹할 차원입니다. dim=0 (배치) 또는 dim=1 (시퀀스 길이) 중 하나를 선택합니다.

[feed forward chunking](https://huggingface.co/blog/reformer#2-chunked-feed-forward-layers)을 사용할 attention processor를 설정합니다.

#### forward[[diffusers.SD3Transformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor = None, pooled_projections: Tensor = None, timestep: LongTensor = None, block_controlnet_hidden_states: list = None, joint_attention_kwargs: dict[str, typing.Any] | None = None, return_dict: bool = True, skip_layers: list[int] | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_sd3.py#L248)

**매개변수:**

hidden_states (`torch.Tensor`, shape `(batch size, channel, height, width)`) : 입력 `hidden_states`.

encoder_hidden_states (`torch.Tensor`, shape `(batch size, sequence_len, embed_dims)`) : 사용할 조건 임베딩(프롬프트와 같은 입력 조건에서 계산된 임베딩).

pooled_projections (`torch.Tensor`, shape `(batch_size, projection_dim)`) : 입력 조건의 임베딩에서 투영된 임베딩.

timestep (`torch.LongTensor`) : 노이즈 제거 단계를 나타내는 데 사용됩니다.

block_controlnet_hidden_states (`list` of `torch.Tensor`) : 지정된 경우, transformer 블록의 잔차(residuals)에 추가되는 텐서 목록입니다.

joint_attention_kwargs (`dict`, *선택 사항*) : 지정된 경우 [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)의 `self.processor` 아래에서 정의된 `AttentionProcessor`로 전달되는 kwargs 사전입니다.

return_dict (`bool`, *선택 사항*, 기본값 `True`) : 일반 튜플 대신 `~models.transformer_2d.Transformer2DModelOutput`을 반환할지 여부.

skip_layers (`list` of `int`, *선택 사항*) : forward pass 중에 건너뛸 레이어 인덱스 목록입니다.

**반환값:**

`return_dict`가 True이면 `~models.transformer_2d.Transformer2DModelOutput`이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 `tuple`이 반환됩니다.

[SD3Transformer2DModel](/docs/diffusers/main/ko/api/models/sd3_transformer2d#diffusers.SD3Transformer2DModel)의 forward 메서드입니다.

#### fuse_qkv_projections[[diffusers.SD3Transformer2DModel.fuse_qkv_projections]]

```python
fuse_qkv_projections()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_sd3.py#L217)

융합된 QKV 투영을 활성화합니다. 셀프 어텐션 모듈의 경우, 모든 투영 행렬(즉, 쿼리, 키, 값)이 융합됩니다. 크로스 어텐션 모듈의 경우, 키와 값 투영 행렬이 융합됩니다.

> [!WARNING] > 이 API는 🧪 실험적입니다.

#### unfuse_qkv_projections[[diffusers.SD3Transformer2DModel.unfuse_qkv_projections]]

```python
unfuse_qkv_projections()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_sd3.py#L239)

활성화된 경우, 융합된 QKV 투영을 비활성화합니다.

> [!WARNING] > 이 API는 🧪 실험적입니다.

