Diffusers documentation
Pipeline dan komponen komunitas
Pipeline dan komponen komunitas
Pipeline komunitas adalah kelas DiffusionPipeline yang berbeda dari implementasi paper aslinya. Mereka menyediakan fungsionalitas tambahan atau memperluas implementasi pipeline aslinya.
Lihat pipeline komunitas di diffusers/examples/community dengan contoh inferensi dan pelatihan untuk cara menggunakannya.
Pipeline komunitas disimpan di Hub atau 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().
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() untuk memuat pipeline komunitas dari versi tertentu (misalnya, v0.30.0 atau main). Secara default, pipeline komunitas dimuat dari versi stabil terbaru dari Diffusers.
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"
)Saat Hugging Face Hub mengindap 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_pipelineuntuk memuat pipeline komunitas lokal. Direktori harus berisi filepipeline.pyyang berisi kelas pipeline.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_pipelinejuga didukung oleh from_pipe(), yang berguna untuk menggunakan kembali pipeline tanpa menggunakan memori tambahan. Hal ini membatasi penggunaan memori hanya pada pipeline terbesar yang dimuat.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() 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 sebagai contoh.
- Muat komponen yang diperlukan, yaitu scheduler dan image processor. Text encoder umumnya diimpor dari Transformers.
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")Pada langkah 2 dan 3, implementasi UNet dan pipeline kustom harus sesuai dengan format yang ditunjukkan di file mereka agar contoh ini dapat berfungsi.
- Muat UNet kustom yang sudah diimplementasikan di showone_unet_3d_condition.py. Nama kelas UNet3DConditionModel diganti menjadi implementasi kustom,
ShowOneUNet3DConditionModel, karena UNet3DConditionModel sudah ada di Diffusers. Semua komponen yang diperlukan untuk kelasShowOneUNet3DConditionModelharus ditempatkan dishowone_unet_3d_condition.py.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel
unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")- Muat kode pipeline kustom (sudah diimplementasikan di pipeline_t2v_base_pixel.py). Skrip ini berisi kelas kustom
TextToVideoIFPipelineuntuk menghasilkan video dari teks. Seperti UNet kustom, semua kode yang diperlukan untukTextToVideoIFPipelineharus ditempatkan dipipeline_t2v_base_pixel.py.
Inisialisasi TextToVideoIFPipeline dengan ShowOneUNet3DConditionModel.
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"- Dorong pipeline ke Hub untuk dibagikan dengan komunitas.
pipeline.push_to_hub("custom-t2v-pipeline")Setelah pipeline berhasil didorong, lakukan perubahan berikut.
- Ubah atribut
_class_namedi model_index.json menjadi["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]. - Unggah
showone_unet_3d_condition.pyke subfolder unet. - Unggah
pipeline_t2v_base_pixel.pyke repository pipeline.
Untuk menjalankan inferensi, tambahkan argumen trust_remote_code saat menginisialisasi pipeline untuk menangani semua “sihir” di balik layar.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16
)Sebagai tindakan pencegahan tambahan dengan
trust_remote_code=True, berikan commit hash ke argumenrevisiondi from_pretrained() untuk memastikan kode tidak diperbarui dengan kode berbahaya baru (kecuali Anda sepenuhnya mempercayai pemilik model).
Langkah selanjutnya
- Lihatlah Issue #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 untuk contoh tambahan pipeline komunitas yang juga menggunakan fitur
trust_remote_code.