Diffusers documentation

Pipeline dan komponen komunitas

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

GitHubHub
Penggunaancustom_pipeline="<filename_without_.py>"ID repo Hub atau trust_remote_code=True ketika _class_name menunjuk ke kode kustom
Proses peninjauanBuka 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.
VisibilitasTermasuk 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_pipeline untuk memuat pipeline komunitas lokal. Direktori harus berisi file pipeline.py yang 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_pipeline juga 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.

  1. 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.

  1. 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 kelas ShowOneUNet3DConditionModel harus ditempatkan di showone_unet_3d_condition.py.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel

unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
  1. Muat kode pipeline kustom (sudah diimplementasikan di 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.

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"
  1. 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_name di model_index.json menjadi ["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"].
  • Unggah showone_unet_3d_condition.py ke subfolder unet.
  • Unggah pipeline_t2v_base_pixel.py ke 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 argumen revision di 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.
Update on GitHub