Buckets:

hf-doc-build/doc / diffusers /main /id /using-diffusers /custom_pipeline_overview.md
mishig's picture
|
download
raw
9.32 kB
# Pipeline dan komponen komunitas
Pipeline komunitas adalah kelas [DiffusionPipeline](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline) yang berbeda dari implementasi paper aslinya. Mereka menyediakan fungsionalitas tambahan atau memperluas implementasi pipeline aslinya.
> [!TIP]
> Lihat pipeline komunitas di [diffusers/examples/community](https://github.com/huggingface/diffusers/tree/main/examples/community) dengan contoh inferensi dan pelatihan untuk cara menggunakannya.
Pipeline komunitas disimpan di Hub atau di repositori GitHub Diffusers. Pipeline Hub sepenuhnya dapat dikustomisasi (scheduler, model, kode pipeline, dll.), sedangkan pipeline GitHub dibatasi hanya pada kode pipeline kustom. Bandingkan kedua jenis pipeline dalam tabel di bawah.
| | GitHub | Hub |
|---|---|---|
| Penggunaan | `custom_pipeline="<filename_without_.py>"` | ID repo Hub atau `trust_remote_code=True` ketika `_class_name` menunjuk ke kode kustom |
| Proses peninjauan | Buka Pull Request di GitHub dan jalani proses review dari tim Diffusers sebelum digabungkan. Opsi ini lebih lambat. | Unggah langsung ke repositori Hub tanpa peninjauan. Ini adalah opsi tercepat. |
| Visibilitas | Termasuk dalam repositori dan dokumentasi resmi Diffusers. | Termasuk dalam profil Hub Anda dan bergantung pada penggunaan serta promosi Anda sendiri untuk mendapatkan visibilitas. |
## Memuat pipeline komunitas
Muat salah satu jenis pipeline komunitas dengan meneruskan `custom_pipeline` ke [from_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained).
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
```
Tambahkan argumen `custom_revision` ke [from_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) untuk memuat pipeline komunitas dari versi tertentu (misalnya, `v0.30.0` atau `main`). Secara default, pipeline komunitas dimuat dari versi stabil terbaru dari Diffusers.
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
custom_revision="main",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
```
> [!WARNING]
> Saat Hugging Face Hub [mengindap](https://huggingface.co/docs/hub/security-malware) file, Anda tetap harus memeriksa kode pipeline Hub dan memastikan bahwa kode tersebut aman.
Ada beberapa cara untuk memuat pipeline komunitas.
- Lewati path ke `custom_pipeline` untuk memuat pipeline komunitas lokal. Direktori harus berisi file `pipeline.py` yang berisi kelas pipeline.
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
custom_pipeline="path/to/pipeline_directory",
trust_remote_code=True,
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
```
- Argumen `custom_pipeline` juga didukung oleh [from_pipe()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe), yang berguna untuk [menggunakan kembali pipeline](./loading#reusing-models-in-multiple-pipelines) tanpa menggunakan memori tambahan. Hal ini membatasi penggunaan memori hanya pada pipeline terbesar yang dimuat.
```py
import torch
from diffusers import DiffusionPipeline
pipeline_sd = DiffusionPipeline.from_pretrained(
"emilianJR/CyberRealistic_V3", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline_lpw = DiffusionPipeline.from_pipe(
pipeline_sd, custom_pipeline="lpw_stable_diffusion"
)
```
Metode [from_pipe()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) sangat berguna untuk memuat pipeline komunitas karena banyak di antaranya tidak memiliki bobot terlatih. Pipeline komunitas umumnya menambahkan fitur di atas pipeline yang sudah ada.
## Komponen komunitas
Komponen komunitas memungkinkan Anda membangun pipeline dengan transformer, UNet, VAE, dan scheduler kustom yang tidak didukung oleh Diffusers. Komponen-komponen ini memerlukan modul Python mereka sendiri.
Bagian ini menunjukkan bagaimana pengguna dapat menggunakan komponen komunitas untuk membangun pipeline komunitas dengan [showlab/show-1-base](https://huggingface.co/showlab/show-1-base) sebagai contoh.
1. Muat komponen yang diperlukan, yaitu scheduler dan image processor. Text encoder umumnya diimpor dari [Transformers](https://huggingface.co/docs/transformers/index).
```python
from transformers import T5Tokenizer, T5EncoderModel, CLIPImageProcessor
from diffusers import DPMSolverMultistepScheduler
pipeline_id = "showlab/show-1-base"
tokenizer = T5Tokenizer.from_pretrained(pipeline_id, subfolder="tokenizer")
text_encoder = T5EncoderModel.from_pretrained(pipeline_id, subfolder="text_encoder")
scheduler = DPMSolverMultistepScheduler.from_pretrained(pipeline_id, subfolder="scheduler")
feature_extractor = CLIPImageProcessor.from_pretrained(pipeline_id, subfolder="feature_extractor")
```
> [!WARNING]
> Pada langkah 2 dan 3, implementasi [UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) dan [pipeline](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) kustom harus sesuai dengan format yang ditunjukkan di file mereka agar contoh ini dapat berfungsi.
2. Muat [UNet kustom](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) yang sudah diimplementasikan di [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py). Nama kelas [UNet3DConditionModel](/docs/diffusers/main/id/api/models/unet3d-cond#diffusers.UNet3DConditionModel) diganti menjadi implementasi kustom, `ShowOneUNet3DConditionModel`, karena [UNet3DConditionModel](/docs/diffusers/main/id/api/models/unet3d-cond#diffusers.UNet3DConditionModel) sudah ada di Diffusers. Semua komponen yang diperlukan untuk kelas `ShowOneUNet3DConditionModel` harus ditempatkan di `showone_unet_3d_condition.py`.
```python
from showone_unet_3d_condition import ShowOneUNet3DConditionModel
unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
```
3. Muat kode pipeline kustom (sudah diimplementasikan di [pipeline_t2v_base_pixel.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/pipeline_t2v_base_pixel.py)). Skrip ini berisi kelas kustom `TextToVideoIFPipeline` untuk menghasilkan video dari teks. Seperti UNet kustom, semua kode yang diperlukan untuk `TextToVideoIFPipeline` harus ditempatkan di `pipeline_t2v_base_pixel.py`.
Inisialisasi `TextToVideoIFPipeline` dengan `ShowOneUNet3DConditionModel`.
```python
import torch
from pipeline_t2v_base_pixel import TextToVideoIFPipeline
pipeline = TextToVideoIFPipeline(
unet=unet,
text_encoder=text_encoder,
tokenizer=tokenizer,
scheduler=scheduler,
feature_extractor=feature_extractor,
)
pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu"
```
4. Dorong pipeline ke Hub untuk dibagikan dengan komunitas.
```python
pipeline.push_to_hub("custom-t2v-pipeline")
```
Setelah pipeline berhasil didorong, lakukan perubahan berikut.
- Ubah atribut `_class_name` di [model_index.json](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2) menjadi `["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]`.
- Unggah `showone_unet_3d_condition.py` ke subfolder [unet](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py).
- Unggah `pipeline_t2v_base_pixel.py` ke [repository](https://huggingface.co/sayakpaul/show-1-base-with-code/tree/main) pipeline.
Untuk menjalankan inferensi, tambahkan argumen `trust_remote_code` saat menginisialisasi pipeline untuk menangani semua "sihir" di balik layar.
```python
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16
)
```
> [!WARNING]
> Sebagai tindakan pencegahan tambahan dengan `trust_remote_code=True`, berikan commit hash ke argumen `revision` di [from_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) untuk memastikan kode tidak diperbarui dengan kode berbahaya baru (kecuali Anda sepenuhnya mempercayai pemilik model).
## Langkah selanjutnya
- Lihatlah Issue [#841](https://github.com/huggingface/diffusers/issues/841) untuk konteks lebih lanjut tentang mengapa kami menambahkan community pipelines untuk membantu semua orang dengan mudah membagikan pekerjaan mereka tanpa terhambat.
- Lihat repositori [stabilityai/japanese-stable-diffusion-xl](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) untuk contoh tambahan pipeline komunitas yang juga menggunakan fitur `trust_remote_code`.

Xet Storage Details

Size:
9.32 kB
·
Xet hash:
7f0446b938c022eb68f4dc58c76743f065a28c30457a53d8da551a55047884a8

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.