# パイプライン

## ModularPipeline[[diffusers.ModularPipeline]]

#### diffusers.ModularPipeline[[diffusers.ModularPipeline]]

```python
diffusers.ModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1700)

**パラメータ:**

blocks : パイプラインで使用されるブロックである ModularPipelineBlocks

すべての Modular パイプラインの基底クラス。

#### from_pretrained[[diffusers.ModularPipeline.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None, trust_remote_code: bool | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, **kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1925)

**パラメータ:**

pretrained_model_name_or_path (`str` または `os.PathLike`、省略可) : 事前学習済みパイプライン設定へのパスです。まず `modular_model_index.json` から設定を読み込もうとし、標準的な非モジュラーリポジトリとの互換性のために、失敗した場合は `model_index.json` にフォールバックします。pretrained_model_name_or_path にパイプライン設定が含まれていない場合、初期化時に None に設定されます。

trust_remote_code (`bool`, 省略可能) : パイプラインの読み込み時にリモートコードを信頼するかどうか。`pretrained_model_name_or_path` 内のカスタムコードに基づいてパイプラインブロックを作成する場合は、True に設定する必要があります。

components_manager (`ComponentsManager`、省略可) : 異なるパイプラインにまたがる複数のコンポーネントを管理し、オフローディング戦略を適用するための ComponentsManager インスタンス。

collection (`str`, 任意) -- ComponentsManager でコンポーネントを整理するためのコレクション名。

workflow (`str`, 省略可) : パイプラインブロックによって宣言されたワークフローの名前。指定した場合、ブロックはそのワークフローの実行ブロックに剪定されるため、パイプラインは、そのワークフローが使用するコンポーネントのみを期待し、`load_components()` もそのコンポーネントのみを読み込みます。

Hugging Face HubのリポジトリからModularPipelineを読み込みます。

#### get_component_spec[[diffusers.ModularPipeline.get_component_spec]]

```python
get_component_spec(name: str)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2401)

**戻り値:**

- 指定されたコンポーネント名に対応するComponentSpecオブジェクトのコピー

#### load_components[[diffusers.ModularPipeline.load_components]]

```python
load_components(names: list[str] | str | None = None, workflow: str | None = None, **kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2489)

**パラメータ:**

names : list of component names to load. If None, will load all components with default_creation_method == "from_pretrained". If provided as a list or string, will load only the specified components.

workflow : パイプラインブロックによって宣言されたワークフローの名前。指定した場合、そのワークフローの実行ブロックが使用するコンポーネントのみが読み込まれます。`names` と併用することはできません。

- ****kwargs** : `from_pretrained()`に渡す追加の引数。以下のような値を指定できます。 - 読み込むすべてのコンポーネントに適用される単一の値。例: dtype=torch.bfloat16 - 辞書。例: dtype={"unet": torch.bfloat16, "default": torch.float32} - kwargsに異なる読み込みフィールドが渡された場合、ComponentSpecをオーバーライドする可能性があります。例: `pretrained_model_name_or_path`、`variant`、`revision` など - kwargsに異なる読み込みフィールドが渡された場合、ComponentSpecをオーバーライドする可能性があります。例: `pretrained_model_name_or_path`、`variant`、`revision` など

スペックから選択されたコンポーネントを読み込みます。

#### register_components[[diffusers.ModularPipeline.register_components]]

```python
register_components(**kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2186)

**パラメータ:**

- ****kwargs** : キーがコンポーネント名、値がコンポーネントオブジェクトであるキーワード引数。例: register_components(unet=unet_model, text_encoder=encoder_model)

コンポーネントを、それに対応する仕様とともに登録します。

このメソッドは、以下を担当します:
1. コンポーネントのオブジェクトをローダーの属性として設定します（例: self.unet = unet）。
2. `save_pretrained` 時に `modular_model_index.json` として保存される設定辞書を更新します（from_pretrained コンポーネントのみ対象）
3. コンポーネントマネージャーがアタッチされている場合、コンポーネントを追加します（from_pretrainedコンポーネントのみ対象）

このメソッドは、次の場合に呼び出されます:
- コンポーネントはまず__init__で初期化されます:
  - from_pretrained によって __init__ 時に読み込まれないコンポーネントは None として登録されます。
  - __init__ 時に from_pretrained 以外のコンポーネントが作成され、オブジェクト自体として登録されます
- コンポーネントは`update_components()`メソッドで更新されます。例: loader.update_components(unet=unet) または loader.update_components(guider=guider_spec)
- (from_pretrained) コンポーネントは`load_components()`メソッドで読み込まれます。例えば、loader.load_components(names=["unet"])で特定のコンポーネントを読み込み、loader.load_components()でデフォルトのすべてのコンポーネントを読み込みます。

注:
- コンポーネントに None を登録すると、属性は None に設定されますが、spec は設定辞書と同期され、`save_pretrained` 実行時に `modular_model_index.json` として保存されます。
- このメソッドの外側、例えば`update_components()`メソッド内で、新しいコンポーネントに合わせてcomponent_specsが更新されます。

#### save_pretrained[[diffusers.ModularPipeline.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, safe_serialization: bool = True, variant: str | None = None, max_shard_size: int | str | None = None, push_to_hub: bool = False, **kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2026)

**パラメータ:**

save_directory (`str` または `os.PathLike`) : パイプラインを保存するディレクトリ。存在しない場合は作成されます。

safe_serialization (`bool`、*任意*、デフォルトは`True`) : モデルを`safetensors`で保存するか、`pickle`を用いた従来の PyTorch の方法で保存するかどうかを指定します。

variant (`str`, *任意*) : 指定した場合、重みは`pytorch_model.<variant>.bin`の形式で保存されます。

max_shard_size (`int` または `str`、デフォルトは `None`) : シャーディングされる前のチェックポイントの最大サイズ。シャーディング後の各チェックポイントは、このサイズ未満になります。文字列で指定する場合は、数字の後に単位（`"5GB"` など）を続ける必要があります。整数で指定する場合は、単位はバイトです。

push_to_hub (`bool`, *任意*, デフォルトは `False`) : パイプラインを保存した後、Hugging Face モデルハブにプッシュするかどうか。

- ****kwargs** : 追加のキーワード引数: - `overwrite_modular_index` (`bool`、*省略可能*、デフォルトは `True`): 保存された各コンポーネントの読み込み仕様を、Hub にプッシュする場合は `repo_id`、それ以外の場合は `save_directory` を指すように、`modular_model_index.json` を更新するかどうか。読み込まれていないコンポーネントは保存されず、常に記録された読み込み仕様を保持します。保存対象のコンポーネントについても記録された仕様を保持する場合は `False` を渡します（意図的に他のリポジトリを参照するインデックスなど）。ただし、load id を持たないコンポーネント（`update_components` で追加されたカスタムモデルなど）は、記録されたソースがないため、引き続き書き換えられます。 - `repo_id` (`str`、*省略可能*): パイプラインをプッシュするリポジトリの ID。デフォルトは `save_directory` の最後のコンポーネントです。 - `commit_message` (`str`、*省略可能*): Hub へのプッシュ操作のコミットメッセージ。 - `private` (`bool`、*省略可能*): リポジトリを非公開にするかどうか。 - `create_pr` (`bool`、*省略可能*、デフォルトは `False`): 直接プッシュする代わりに Pull Request を作成するかどうか。 - `token` (`str`、*省略可能*): 認証に使用する Hugging Face トークン。

パイプラインとそのすべてのコンポーネントをディレクトリに保存し、[from_pretrained()](/docs/diffusers/v0.43.0/ja/api/modular_diffusers/pipeline#diffusers.ModularPipeline.from_pretrained)クラスメソッドを使って再読み込みできるようにします。

#### へ[[diffusers.ModularPipeline.to]]

```python
to(*args, **kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2651)

**パラメータ:**

dtype (`torch.dtype`、*任意*) : 指定された[`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype)を持つパイプラインを返します

device (`torch.Device`, *任意*) : 指定された [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) を持つパイプラインを返します

silence_dtype_warnings (`str`、*任意*、デフォルトは`False`) : 対象の`dtype`が対象の`device`と互換性がない場合、警告を省略するかどうか。

**戻り値:** [DiffusionPipeline](/docs/diffusers/v0.43.0/ja/api/pipelines/overview#diffusers.DiffusionPipeline)

パイプラインは、指定された`dtype`および/または`dtype`に変換されました。

Performs Pipeline dtype and/or device conversion. A torch.dtype and torch.device are inferred from the arguments of `self.to(*args, **kwargs).`

> [!TIP] > パイプラインがすでに正しい torch.dtype と torch.device を持っている場合、そのまま返されます。
それ以外の場合、> 返される pipeline は、指定された torch.dtype と torch.device を持つ self のコピーです。

`to`を呼び出す方法には、次のものがあります。

- `to(dtype, silence_dtype_warnings=False) → DiffusionPipeline` は、指定された [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) を持つパイプラインを返します
- `to(device, silence_dtype_warnings=False) → DiffusionPipeline` を呼び出すと、指定した [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) を持つパイプラインが返されます。
- `to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline` は、指定された [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) と [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) を持つパイプラインを返します。

#### unload_components[[diffusers.ModularPipeline.unload_components]]

```python
unload_components(names: list[str] | str)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2595)

**パラメータ:**

names : 読み込みを解除するコンポーネント名、またはコンポーネント名のリスト。

選択したコンポーネントをアンロードし、そのメモリを解放します。

コンポーネント属性は`None`にリセットされ、ComponentsManagerがアタッチされている場合は、コンポーネントがそこから削除されます。コンポーネントの仕様は変更されないため、後で`load_components()`を呼び出してコンポーネントを再度読み込むことができます。

#### update_components[[diffusers.ModularPipeline.update_components]]

```python
update_components(**kwargs)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L2408)

**パラメータ:**

- ****kwargs** : 更新するコンポーネントオブジェクトまたは設定値: - コンポーネントオブジェクト: `AutoModel.from_pretrained()` または `ComponentSpec.load()` で読み込まれたモデルには、読み込み情報が自動的にタグ付けされます。重みを持たない ConfigMixin オブジェクト（スケジューラやガイダーなど）は、そのまま直接渡すことができます。 - 設定値: 設定を更新するための単純な値（例: `requires_safety_checker=False`）

パイプラインがインスタンス化された後で、コンポーネントおよび設定値と仕様を更新します。

このメソッドを使用すると、以下を行うことができます:
1. 既存のコンポーネントを新しいコンポーネントに置き換えます（例：`self.unet`または`self.text_encoder`の更新）
2. 設定値を更新します（例：`self.requires_safety_checker` フラグの変更）

パイプラインの属性としてコンポーネントと設定値を更新するだけでなく、このメソッドは以下も更新します:
- `_component_specs` および `_config_specs` 内の対応する仕様
- `save_pretrained` 時に `modular_model_index.json` として保存される `config` ディクショナリ

例:
```python
# Update pre-trained model
pipeline.update_components(unet=new_unet_model, text_encoder=new_text_encoder)

# Update configuration values
pipeline.update_components(requires_safety_checker=False)
```

注:
- `AutoModel.from_pretrained()` または `ComponentSpec.load()` で読み込まれたコンポーネントには
シリアライズ用に保存されたスペックを読み込みます。Hubへの参照がないカスタムコンポーネントやローカルで読み込まれたコンポーネントについては、`save_pretrained()`の実行中に`modular_model_index.json`のエントリが自動的に更新されます。
- 重みを持たないConfigMixinオブジェクト（スケジューラーやガイダーなど）は、そのまま直接渡すことができます。

