# Pipeline

## 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1701)

**Parameter:**

blocks : ModularPipelineBlocks, blok yang akan digunakan dalam pipeline

Kelas dasar untuk semua pipeline 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1926)

**Parameter:**

pretrained_model_name_or_path (`str` atau `os.PathLike`, opsional) : Path ke konfigurasi pipeline pretrained. Sistem akan pertama kali mencoba memuat config dari `modular_model_index.json`, lalu fallback ke `model_index.json` untuk kompatibilitas dengan repositori non-modular standar. Jika pretrained_model_name_or_path tidak mengandung konfigurasi pipeline apa pun, nilainya akan diset ke None selama inisialisasi.

trust_remote_code (`bool`, opsional) : Apakah kode jarak jauh akan dipercaya saat memuat pipeline, perlu diatur ke True jika Anda ingin membuat blok pipeline berdasarkan kode kustom di `pretrained_model_name_or_path`

components_manager (`ComponentsManager`, opsional) : instance ComponentsManager untuk mengelola beberapa komponen lintas pipeline yang berbeda dan menerapkan strategi offloading.

collection (`str`, opsional) --` Nama koleksi untuk mengorganisasi komponen di dalam ComponentsManager.

workflow (`str`, opsional) : Nama workflow yang dideklarasikan oleh blok pipeline. Jika diberikan, blok-blok akan dipangkas menjadi blok eksekusi workflow tersebut, sehingga pipeline hanya mengharapkan — dan `load_components()` hanya memuat — komponen yang digunakan oleh workflow tersebut.

Muat ModularPipeline dari repositori huggingface hub.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2412)

**Mengembalikan:**

- salinan objek ComponentSpec untuk nama komponen yang diberikan

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2500)

**Parameter:**

names : daftar nama komponen yang akan dimuat. Jika None, akan memuat semua komponen dengan default_creation_method == "from_pretrained". Jika diberikan sebagai daftar atau string, hanya komponen yang ditentukan yang akan dimuat.

workflow : nama workflow yang dideklarasikan oleh blok pipeline. Jika diberikan, hanya komponen yang digunakan oleh blok eksekusi workflow tersebut yang dimuat. Tidak dapat digabungkan dengan `names`.

- ****kwargs** : kwargs tambahan yang akan diteruskan ke `from_pretrained()`. Dapat berupa: - nilai tunggal yang diterapkan ke semua komponen yang akan dimuat, mis. dtype=torch.bfloat16 - dict, mis. dtype={"unet": torch.bfloat16, "default": torch.float32} - jika berpotensi menimpa ComponentSpec jika field pemuatan yang berbeda diteruskan dalam kwargs, mis. `pretrained_model_name_or_path`, `variant`, `revision`, dll. - jika berpotensi menimpa ComponentSpec jika field pemuatan yang berbeda diteruskan dalam kwargs, mis. `pretrained_model_name_or_path`, `variant`, `revision`, dll.

Muat komponen yang dipilih dari spesifikasi.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2197)

**Parameter:**

- ****kwargs** : Argumen kata kunci di mana kuncinya adalah nama komponen dan nilainya adalah objek komponen. Contoh: register_components(unet=unet_model, text_encoder=encoder_model)

Daftarkan komponen dengan spesifikasi yang sesuai.

Metode ini bertanggung jawab untuk:
1. Menetapkan objek komponen sebagai atribut pada loader (misalnya, self.unet = unet)
2. Memperbarui dict config, yang akan disimpan sebagai `modular_model_index.json` selama `save_pretrained` (hanya untuk komponen from_pretrained)
3. Menambahkan komponen ke manajer komponen jika ada yang terpasang (hanya untuk komponen from_pretrained)

Metode ini dipanggil ketika:
- Komponen pertama kali diinisialisasi di __init__:
  - komponen from_pretrained tidak dimuat selama __init__ sehingga didaftarkan sebagai None;
  - non from_pretrained dibuat selama __init__ dan didaftarkan sebagai objek itu sendiri
- Komponen diperbarui dengan metode `update_components()`: misalnya loader.update_components(unet=unet) atau loader.update_components(guider=guider_spec)
- (from_pretrained) Komponen dimuat dengan metode `load_components()`: misalnya loader.load_components(names=["unet"]) atau loader.load_components() untuk memuat semua komponen default

Catatan:
- Saat mendaftarkan None untuk sebuah komponen, atribut diset ke None tetapi spesifikasi tetap disinkronkan dengan dict konfigurasi, yang akan disimpan sebagai `modular_model_index.json` selama `save_pretrained`
- component_specs diperbarui agar sesuai dengan komponen baru di luar metode ini, misalnya pada metode `update_components()`

#### 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2027)

**Parameter:**

save_directory (`str` atau `os.PathLike`) : Direktori untuk menyimpan pipeline. Akan dibuat jika belum ada.

safe_serialization (`bool`, *opsional*, defaultnya `True`) : Apakah model disimpan menggunakan `safetensors` atau cara tradisional PyTorch dengan `pickle`.

variant (`str`, *opsional*) : Jika ditentukan, bobot disimpan dalam format `pytorch_model.<variant>.bin`.

max_shard_size (`int` atau `str`, defaultnya `None`) : Ukuran maksimum untuk checkpoint sebelum di-shard. Checkpoint yang di-shard kemudian akan masing-masing berukuran lebih kecil dari ukuran ini. Jika dinyatakan sebagai string, harus berupa angka diikuti oleh satuan (seperti `"5GB"`). Jika dinyatakan sebagai integer, satuannya adalah byte.

push_to_hub (`bool`, *opsional*, defaultnya `False`) : Apakah akan mendorong pipeline ke Hugging Face model hub setelah menyimpannya.

- ****kwargs** : Argumen kata kunci tambahan: - `overwrite_modular_index` (`bool`, *opsional*, default `True`): Apakah akan memperbarui `modular_model_index.json` sehingga spesifikasi pemuatan setiap komponen yang disimpan menunjuk ke tujuan: `repo_id` saat mendorong ke Hub, selain itu `save_directory`. Komponen yang tidak dimuat tidak disimpan dan selalu mempertahankan spesifikasi pemuatan yang tercatat. Berikan `False` untuk juga mempertahankan spesifikasi yang tercatat dari komponen yang sedang disimpan (misalnya untuk indeks yang sengaja merujuk ke repositori lain); komponen tanpa id pemuatan (seperti model kustom yang ditambahkan dengan `update_components`) tetap ditulis ulang karena tidak memiliki sumber yang tercatat. - `repo_id` (`str`, *opsional*): ID repositori untuk mendorong pipeline ke sana. Default ke komponen terakhir dari `save_directory`. - `commit_message` (`str`, *opsional*): Pesan commit untuk operasi dorong ke hub. - `private` (`bool`, *opsional*): Apakah repositori harus bersifat privat. - `create_pr` (`bool`, *opsional*, default `False`): Apakah akan membuat pull request alih-alih mendorong secara langsung. - `token` (`str`, *opsional*): Token Hugging Face yang akan digunakan untuk autentikasi.

Simpan pipeline dan semua komponennya ke sebuah direktori, sehingga dapat dimuat ulang menggunakan metode kelas [from_pretrained()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.from_pretrained).

#### ke[[diffusers.ModularPipeline.to]]

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2662)

**Parameter:**

dtype (`torch.dtype`, *opsional*) : Mengembalikan pipeline dengan [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) yang ditentukan

device (`torch.Device`, *opsional*) : Mengembalikan pipeline dengan [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) yang ditentukan

silence_dtype_warnings (`str`, *opsional*, defaultnya `False`) : Apakah akan mengabaikan peringatan jika `dtype` target tidak kompatibel dengan `device` target.

**Mengembalikan:** [DiffusionPipeline](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline)

Pipeline dikonversi ke `dtype` dan/atau `dtype` yang ditentukan.

Melakukan konversi dtype dan/atau perangkat Pipeline. Sebuah torch.dtype dan torch.device disimpulkan dari argumen `self.to(*args, **kwargs).`

> [!TIP] > Jika pipeline sudah memiliki torch.dtype dan torch.device yang benar, maka pipeline tersebut dikembalikan apa adanya.
Jika tidak, > pipeline yang dikembalikan adalah salinan dari self dengan torch.dtype dan torch.device yang diinginkan.

Berikut adalah cara untuk memanggil `to`:

- `to(dtype, silence_dtype_warnings=False) → DiffusionPipeline` untuk mengembalikan pipeline dengan [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) yang ditentukan
- `to(device, silence_dtype_warnings=False) → DiffusionPipeline` untuk mengembalikan pipeline dengan [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) yang ditentukan
- `to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline` untuk mengembalikan pipeline dengan [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) dan [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) yang ditentukan

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2606)

**Parameter:**

names : nama komponen atau daftar nama komponen untuk dimuat ulang.

Muat turun komponen yang dipilih, membebaskan memori mereka.

Atribut komponen diatur kembali ke `None` dan, jika ComponentsManager terlampir, komponen dihapus darinya. Spesifikasi komponen tidak diubah, sehingga komponen dapat dimuat kembali nanti dengan `load_components()`.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2419)

**Parameter:**

- ****kwargs** : Objek komponen atau nilai konfigurasi untuk diperbarui: - Objek komponen: Model yang dimuat dengan `AutoModel.from_pretrained()` atau `ComponentSpec.load()` secara otomatis diberi tag dengan informasi pemuatan. Objek ConfigMixin tanpa bobot (misalnya, scheduler, guider) dapat diteruskan secara langsung. - Nilai konfigurasi: Nilai sederhana untuk memperbarui pengaturan konfigurasi (misalnya, `requires_safety_checker=False`)

Perbarui komponen dan nilai konfigurasi serta spesifikasi setelah pipeline diinstansiasi.

Metode ini memungkinkan Anda untuk:
1. Ganti komponen yang ada dengan yang baru (misalnya, memperbarui `self.unet` atau `self.text_encoder`)
2. Perbarui nilai konfigurasi (misalnya, mengubah flag `self.requires_safety_checker`)

Selain memperbarui komponen dan nilai konfigurasi sebagai atribut pipeline, metode ini juga memperbarui:
- spesifikasi yang sesuai di `_component_specs` dan `_config_specs`
- dict `config`, yang akan disimpan sebagai `modular_model_index.json` selama `save_pretrained`

Contoh:
```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)
```

Catatan:
- Komponen yang dimuat dengan `AutoModel.from_pretrained()` atau `ComponentSpec.load()` akan memiliki
spesifikasi yang dimuat dipertahankan untuk serialisasi. Komponen kustom atau yang dimuat secara lokal tanpa referensi Hub akan memiliki entri `modular_model_index.json` yang diperbarui secara otomatis selama `save_pretrained()`.
- Objek ConfigMixin tanpa bobot (misalnya, scheduler, guider) dapat diteruskan secara langsung.

