Diffusers documentation

Topluluk boru hatları ve bileşenleri

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Topluluk boru hatları ve bileşenleri

Topluluk boru hatları, orijinal makale uygulamasından farklı olan DiffusionPipeline sınıflarıdır. Ek işlevsellik sağlarlar veya orijinal boru hattı uygulamasını genişletirler.

Çıkarım ve eğitim örnekleriyle nasıl kullanılacaklarını gösteren topluluk pipeline'larını diffusers/examples/community dizininde inceleyin.

Topluluk pipeline'ları ya Hub'da ya da Diffusers'ın GitHub deposunda saklanır. Hub pipeline'ları tamamen özelleştirilebilir (zamanlayıcı, modeller, pipeline kodu vb.)ken GitHub pipeline'ları yalnızca özel pipeline koduyla sınırlıdır. İki pipeline türünü aşağıdaki tabloda karşılaştırın.

GitHubHub
Kullanımcustom_pipeline="<filename_without_.py>"Hub depo kimliği veya _class_name özel koda işaret ettiğinde trust_remote_code=True
İnceleme süreciGitHub'da bir Pull Request açın ve birleştirilmeden önce Diffusers ekibinden bir inceleme sürecinden geçirin. Bu seçenek daha yavaştır.Bir Hub deposuna inceleme olmadan doğrudan yükleyin. Bu, en hızlı seçenektir.
GörünürlükResmî Diffusers deposu ve belgelerinde yer alır.Hub profilinizde yer alır ve görünürlük kazanmak için kendi kullanımınıza ve tanıtımınıza bağlıdır.

Bir topluluk hattı yükleme

custom_pipeline parametresini from_pretrained() fonksiyonuna ileterek topluluk kaynaklı her iki türden de pipeline yükleyebilirsiniz.

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"
)

Belirli bir sürümden (örneğin v0.30.0 veya main) topluluk hattı yüklemek için from_pretrained() fonksiyonuna custom_revision argümanını ekleyin. Varsayılan olarak, topluluk hatları Diffusers'ın en son kararlı sürümünden yüklenir.

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"
)

Hugging Face Hub dosyaları tarama yaparken, yine de Hub pipeline kodunu incelemeli ve güvenli olduğundan emin olmalısınız.

Bir topluluk hattını yüklemenin birkaç yolu vardır.

  • custom_pipeline parametresine yerel bir topluluk hattını yüklemek için bir yol iletin. Dizin, hat sınıfını içeren bir pipeline.py dosyası içermelidir.

    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"
    )
  • custom_pipeline argümanı, ek bellek kullanmadan boru hatlarını yeniden kullanmak için faydalı olan from_pipe() tarafından da desteklenir. Bu, bellek kullanımını yalnızca yüklenen en büyük boru hattıyla sınırlar.

    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"
    )

    from_pipe() yöntemi, topluluk boru hatlarını yüklemek için özellikle faydalıdır çünkü bunların çoğunun önceden eğitilmiş ağırlıkları yoktur. Topluluk boru hatları genellikle mevcut bir boru hattının üzerine bir özellik ekler.

Topluluk bileşenleri

Community components, Diffusers tarafından desteklenmeyen özel transformer, UNet, VAE ve scheduler'larla pipeline oluşturmanızı sağlar. Bu bileşenlerin kendi Python modüllerine ihtiyaç duyar.

Bu bölüm, kullanıcıların topluluk bileşenlerini kullanarak bir topluluk hattı oluşturmayı nasıl yapabileceklerini, örnek olarak showlab/show-1-base modelini kullanarak göstermektedir.

  1. Gerekli bileşenleri, zamanlayıcıyı ve görüntü işleyiciyi yükleyin. Metin kodlayıcı genellikle Transformers kütüphanesinden içe aktarılır.
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")

2. ve 3. adımlarda, özel UNet ve pipeline uygulamasının, bu örneğin çalışabilmesi için dosyalarında gösterilen biçimle eşleşmesi gerekir.

  1. Özel bir UNet yükleyin; bu, zaten showone_unet_3d_condition.py içinde uygulanmıştır. UNet3DConditionModel sınıf adı, Diffusers'ta zaten var olduğu için UNet3DConditionModel yerine özel uygulama olan ShowOneUNet3DConditionModel olarak yeniden adlandırılmıştır. ShowOneUNet3DConditionModel sınıfı için gerekli tüm bileşenler showone_unet_3d_condition.py dosyasında yer almalıdır.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel

unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
  1. Özel pipeline kodunu yükleyin (zaten pipeline_t2v_base_pixel.py içinde uygulandı). Bu betik, metinden video üretmek için özel bir TextToVideoIFPipeline sınıfı içerir. Özel UNet gibi, TextToVideoIFPipeline için gerekli olan tüm kod pipeline_t2v_base_pixel.py dosyasına yerleştirilmelidir.

TextToVideoIFPipeline'i ShowOneUNet3DConditionModel ile başlatın.

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. Pipeline'ı toplulukla paylaşmak için Hub'a gönderin.
pipeline.push_to_hub("custom-t2v-pipeline")

Pipeline başarıyla itildikten sonra aşağıdaki değişiklikleri yapın.

  • model_index.json dosyasındaki _class_name özniteliğini ["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"] olarak değiştirin.
  • showone_unet_3d_condition.py dosyasını unet alt klasörüne yükleyin.
  • pipeline_t2v_base_pixel.py dosyasını repository hattına yükleyin.

Çıkarım (inference) çalıştırmak için, arka plandaki tüm “sihirli” işlemleri yönetmek üzere pipeline'ı başlatırken trust_remote_code argümanını ekleyin.

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16
)

trust_remote_code=True ile ek bir önlem olarak, kodun yeni kötü amaçlı kodlarla güncellenmediğinden emin olmak için from_pretrained() içindeki revision argümanına bir commit hash'i iletin (model sahiplerine tamamen güvenmiyorsanız).

Sonraki adımlar

  • Herkesin işlerini yavaşlamadan kolayca paylaşmasına yardımcı olmak için topluluk boru hatlarını neden eklediğimiz hakkında daha fazla bağlam için #841 numaralı soruna göz atın.
  • Ek bir topluluk hattı örneği olarak trust_remote_code özelliğini de kullanan stabilityai/japanese-stable-diffusion-xl deposuna göz atın.
Update on GitHub