Buckets:
DiffusionPipeline
Diffüzyon modelleri, UNet'ler veya diffüzyon transformatorları (DiT), metin kodlayıcılar, varyasyonel otoenkoderler (VAE) ve zamanlayıcılar gibi birden fazla bileşenden oluşur. DiffusionPipeline, bu bileşenlerin tümünü, bileşenlerini değiştirme esnekliğinden vazgeçmeden, tek bir kullanımı kolay API içinde bir araya getirir.
Bu kılavuz, bir DiffusionPipeline yüklemenin nasıl yapılacağını gösterecektir.
Bir pipeline yüklemek
DiffusionPipeline, model_index.json dosyasını sınıf adını bulmak için tarayarak, QwenImagePipeline gibi bir modelin pipeline alt sınıfının bir örneğini otomatik olarak seçen ve döndüren temel bir pipeline sınıfıdır.
Bir pipeline yüklemek için bir model kimliğini from_pretrained() parametresi olarak iletin.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
Her modelin, DiffusionPipeline sınıfından türeyen belirli bir pipeline alt sınıfı vardır. Bir alt sınıf genellikle dar bir odak noktasına sahiptir ve görev bazlıdır. Örnek için aşağıdaki tabloya bakın.
| pipeline alt sınıfı | görev |
|---|---|
| QwenImagePipeline | metinden görüntüye |
| QwenImageImg2ImgPipeline | görselden görseli |
| QwenImageInpaintPipeline | inpaint |
Bir model kimliği geçirerek alt sınıfı doğrudan from_pretrained() ile kullanabilirsiniz.
import torch
from diffusers import QwenImagePipeline
pipeline = QwenImagePipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
Tek dosya modellerinin nasıl yükleneceğini öğrenmek için Single file format belgelerine bakın.
Yerel boru hatları
Pipelines yerel olarak da çalıştırılabilir. Bir model deposunu indirmek için snapshot_download kullanın.
from huggingface_hub import snapshot_download
local_dir = snapshot_download(repo_id="Qwen/Qwen-Image")
Yüklemek için o yolu from_pretrained() parametresi olarak iletin.
import torch
from diffusers import QwenImagePipeline
pipeline = QwenImagePipeline.from_pretrained(
local_dir, dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
from_pretrained() yöntemi, yerel bir yol algıladığında Hub'dan dosya indirmez. Ancak bu, modele yapılan güncellemelerin de indirilip önbelleğe alınmayacağı anlamına gelir.
Pipeline veri türleri
Belirli bir veri türüyle bir model yüklemek için from_pretrained() içindeki dtype argümanını kullanın. Bu, farklı modelleri farklı hassasiyetlerde yüklemenizi sağlar. Örneğin, büyük bir transformer modelini yarı hassasiyette yüklemek, gereken belleği azaltır.
Her model için veri türünü bir sözlük olarak dtype parametresine iletin. Varsayılan veri türünü ayarlamak için default anahtarını kullanın. Bir model sözlükte yer almıyorsa ve default belirtilmemişse, model tam hassasiyetle (torch.float32) yüklenir.
import torch
from diffusers import QwenImagePipeline
pipeline = QwenImagePipeline.from_pretrained(
"Qwen/Qwen-Image",
dtype={"transformer": torch.bfloat16, "default": torch.float16},
)
print(pipeline.transformer.dtype, pipeline.vae.dtype)
Tüm modelleri aynı veri türünde yüklüyorsanız bir sözlük kullanmanıza gerek yoktur.
import torch
from diffusers import QwenImagePipeline
pipeline = QwenImagePipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16
)
print(pipeline.transformer.dtype, pipeline.vae.dtype)
Cihaz yerleşimi
device_map argümanı, bir hattı (pipeline) cihazlara yerleştirir. Çalışma zamanında Diffusers, "balanced", "cpu" ve bulunduğunuz makine için hızlandırıcı dizgesini (genellikle "cuda", "mps" veya "xpu") kabul eder.
| parametre | açıklama |
|---|---|
| accelerator dizesi | Hattı (pipeline) bu cihaza yerleştirir. Makinenizin desteklediği hızlandırıcıyı, örneğin "cuda", "mps" veya "xpu" gibi, iletin. |
"balanced" |
Spreads, pipeline bileşenlerini görünür GPU'lara dağıtır. Cihaz başına sınırlara ihtiyacınız olduğunda max_memory ile kullanın. |
"cpu" |
Hattı CPU üzerine yerleştirir. |
Her cihazda kullanılacak maksimum bellek miktarını ayarlamak için from_pretrained() içinde max_memory argümanını kullanın. Varsayılan olarak Diffusers, kullanılabilir maksimum miktarı kullanır.
import torch
from diffusers import DiffusionPipeline
max_memory = {0: "16GB", 1: "16GB"}
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image",
dtype=torch.bfloat16,
device_map="balanced",
max_memory=max_memory,
)
hf_device_map özniteliği, device_map'e erişmenizi ve görüntülemenizi sağlar.
print(pipeline.hf_device_map)
# {'transformer': 1, 'vae': 1, 'text_encoder': 0}
Bir device_map ayarını reset_device_map() yöntemiyle sıfırlayın. .to(), enable_sequential_cpu_offload() ve enable_model_cpu_offload() gibi yöntemleri kullanmak istiyorsanız bu işlem gereklidir.
pipeline.reset_device_map()
Paralel yükleme
Büyük modeller, yüklenmelerini kolaylaştırmak için genellikle parçalara ayrılır. Diffusers, yükleme sürecini hızlandırmak için parçaların paralel olarak yüklenmesini destekler.
Paralel shard yüklemeyi etkinleştirmek için HF_ENABLE_PARALLEL_LOADING değerini "YES" olarak ayarlayın.
device_map argümanı, model boyutuna dayalı olarak büyük bir bellek dilimini önceden ayırmak için "cuda" olarak ayarlanmalıdır. Bu, bellek ayıracının ısınma sürecinin daha sonraki birçok küçük ayıracı çağrısını önlemesi sayesinde model yükleme süresini önemli ölçüde azaltır.
import os
import torch
from diffusers import DiffusionPipeline
os.environ["HF_ENABLE_PARALLEL_LOADING"] = "YES"
pipeline = DiffusionPipeline.from_pretrained(
"Wan-AI/Wan2.2-I2V-A14B-Diffusers", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
Bir boru hattındaki modellerin değiştirilmesi
DiffusionPipeline esnektir ve başka modellerin veya zamanlayıcıların yüklenmesine olanak tanır. Üretim hızını veya kalitesini optimize etmek için farklı zamanlayıcılarla deney yapabilir ve modelleri daha yüksek performanslı olanlarla değiştirebilirsiniz.
Aşağıdaki örnek daha kararlı bir VAE sürümünü kullanır.
import torch
from diffusers import DiffusionPipeline, AutoModel
vae = AutoModel.from_pretrained(
"madebyollin/sdxl-vae-fp16-fix", dtype=torch.float16
)
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
vae=vae,
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
Birden çok boru hattında modelleri yeniden kullanma
Aynı modeli kullanan birden çok pipeline ile çalışırken, from_pipe() yöntemi modeli her seferinde yeniden yüklemek yerine yeniden kullanılmasını sağlar. Bu sayede bellek kullanımını artırmadan birden çok pipeline kullanabilirsiniz.
Hafıza kullanımı, kaç tane boru hattı olduğundan bağımsız olarak, en yüksek hafıza gereksinimine sahip boru hattı tarafından belirlenir.
Aşağıdaki örnek bir pipeline yükler ve ardından perturbed-attention guidance (PAG) kullanarak üretim kalitesini iyileştirmek için from_pipe() ile ikinci bir pipeline yükler.
DiffusionPipeline PAG'i desteklemediği için AutoPipelineForText2Image kullanın. Daha fazla bilgi için AutoPipeline belgelerine bakın.
import torch
from diffusers import AutoPipelineForText2Image
pipeline_sdxl = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu"
)
prompt = """
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
"""
image = pipeline_sdxl(prompt).images[0]
print(f"Max memory reserved: {torch.cuda.max_memory_allocated() / 1024**3:.2f} GB")
# Max memory reserved: 10.47 GB
PAG'i etkinleştirmek için ikinci pipeline'da enable_pag=True ayarlayın. İkinci pipeline, model ağırlıklarını birinci pipeline ile paylaştığı için aynı miktarda bellek kullanır.
pipeline = AutoPipelineForText2Image.from_pipe(
pipeline_sdxl, enable_pag=True
)
prompt = """
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
"""
image = pipeline(prompt).images[0]
print(f"Max memory reserved: {torch.cuda.max_memory_allocated() / 1024**3:.2f} GB")
# Max memory reserved: 10.47 GB
from_pipe() ile oluşturulan pipeline'lar aynı modelleri ve state durumunu paylaşır. Bir pipeline'da bir modelin durumunu değiştirmek, aynı modeli paylaşan diğer tüm pipeline'ları etkiler.
Bazı yöntemler, from_pipe() ile oluşturulan boru hatlarında doğru çalışmayabilir. Örneğin, enable_model_cpu_offload() benzersiz bir model çalışma sırasına dayanır ve bu sıra yeni boru hattında farklılık gösterebilir. Doğru işlevselliği sağlamak için bu yöntemleri yeni boru hattına yeniden uygulayın.
Sonraki adımlar
Bir pipeline yüklendikten sonra genellikle gürültü azaltma zamanlamasını ayarlarsınız, ağırlık biçimlerini değiştirirsiniz veya adaptörler eklersiniz.
- Schedulers, gürültü azaltma algoritmasının değiştirilmesini ve yapılandırılmasını kapsar.
- Model formatları, GGUF, tek dosyalık checkpoint'ler ve diğer ağırlık yerleşimlerini kapsar.
- Bellek kullanımını azaltma, offloading ve diğer bellek araçlarını kapsar.
- LoRA, bir pipeline üzerinde adaptörlerin yüklenmesini kapsar.
- Eski kontrol noktaları, eski Stable Diffusion kontrol noktaları için güvenlik denetleyicisini kapsar.
Xet Storage Details
- Size:
- 12.8 kB
- Xet hash:
- aff501a18e75434b56b145b53f904806c8897bb2668491720f396bfaf4dd2dbd
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.