Diffusers documentation
Topluluk boru hatları ve bileşenleri
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.
| GitHub | Hub | |
|---|---|---|
| Kullanım | custom_pipeline="<filename_without_.py>" | Hub depo kimliği veya _class_name özel koda işaret ettiğinde trust_remote_code=True |
| İnceleme süreci | GitHub'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ük | Resmî 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_pipelineparametresine yerel bir topluluk hattını yüklemek için bir yol iletin. Dizin, hat sınıfını içeren birpipeline.pydosyası 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_pipelineargü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.
- 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.
- Ö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
ShowOneUNet3DConditionModelolarak yeniden adlandırılmıştır.ShowOneUNet3DConditionModelsınıfı için gerekli tüm bileşenlershowone_unet_3d_condition.pydosyasında yer almalıdır.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel
unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")- Özel pipeline kodunu yükleyin (zaten pipeline_t2v_base_pixel.py içinde uygulandı). Bu betik, metinden video üretmek için özel bir
TextToVideoIFPipelinesınıfı içerir. Özel UNet gibi,TextToVideoIFPipelineiçin gerekli olan tüm kodpipeline_t2v_base_pixel.pydosyası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"- 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.pydosyasını unet alt klasörüne yükleyin.pipeline_t2v_base_pixel.pydosyası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=Trueile ek bir önlem olarak, kodun yeni kötü amaçlı kodlarla güncellenmediğinden emin olmak için from_pretrained() içindekirevisionargü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.