# 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](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.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](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) yüklemenin nasıl yapılacağını gösterecektir.

## Bir pipeline yüklemek

[DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline), `model_index.json` dosyasını sınıf adını bulmak için tarayarak, [QwenImagePipeline](/docs/diffusers/main/tr/api/pipelines/qwenimage#diffusers.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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) parametresi olarak iletin.

```py
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](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.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](/docs/diffusers/main/tr/api/pipelines/qwenimage#diffusers.QwenImagePipeline) | metinden görüntüye |
| [QwenImageImg2ImgPipeline](/docs/diffusers/main/tr/api/pipelines/qwenimage#diffusers.QwenImageImg2ImgPipeline) | görselden görseli |
| [QwenImageInpaintPipeline](/docs/diffusers/main/tr/api/pipelines/qwenimage#diffusers.QwenImageInpaintPipeline) | inpaint |

Bir model kimliği geçirerek alt sınıfı doğrudan [from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) ile kullanabilirsiniz.

```py
import torch
from diffusers import QwenImagePipeline

pipeline = QwenImagePipeline.from_pretrained(
  "Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
```

> [!TIP]
> Tek dosya modellerinin nasıl yükleneceğini öğrenmek için [Single file format](./other-formats#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](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/file_download#huggingface_hub.snapshot_download) kullanın.

```py
from huggingface_hub import snapshot_download

local_dir = snapshot_download(repo_id="Qwen/Qwen-Image")
```

Yüklemek için o yolu [from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) parametresi olarak iletin.

```py
import torch
from diffusers import QwenImagePipeline

pipeline = QwenImagePipeline.from_pretrained(
  local_dir, dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
```

[from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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.

```py
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.

```py
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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) içinde `max_memory` argümanını kullanın. Varsayılan olarak Diffusers, kullanılabilir maksimum miktarı kullanır.

```py
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.

```py
print(pipeline.hf_device_map)
# {'transformer': 1, 'vae': 1, 'text_encoder': 0}
```

Bir `device_map` ayarını [reset_device_map()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.reset_device_map) yöntemiyle sıfırlayın. `.to()`, [enable_sequential_cpu_offload()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.enable_sequential_cpu_offload) ve [enable_model_cpu_offload()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) gibi yöntemleri kullanmak istiyorsanız bu işlem gereklidir.

```py
pipeline.reset_device_map()
```

## Paralel yükleme

Büyük modeller, yüklenmelerini kolaylaştırmak için genellikle [parçalara](../optimization/memory#sharded-checkpoints) 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.

```py
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](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.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.

```py
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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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)](../api/pipelines/pag) kullanarak üretim kalitesini iyileştirmek için [from_pipe()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) ile ikinci bir pipeline yükler.

> [!WARNING]
> [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) PAG'i desteklemediği için [AutoPipelineForText2Image](/docs/diffusers/main/tr/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image) kullanın. Daha fazla bilgi için [AutoPipeline](../tutorials/autopipeline) belgelerine bakın.

```py
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.

```py
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
```

> [!WARNING]
> [from_pipe()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) ile oluşturulan boru hatlarında doğru çalışmayabilir. Örneğin, [enable_model_cpu_offload()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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](./schedulers), gürültü azaltma algoritmasının değiştirilmesini ve yapılandırılmasını kapsar.
- [Model formatları](./other-formats), GGUF, tek dosyalık checkpoint'ler ve diğer ağırlık yerleşimlerini kapsar.
- [Bellek kullanımını azaltma](../optimization/memory), offloading ve diğer bellek araçlarını kapsar.
- [LoRA](../tutorials/using_peft_for_inference), bir pipeline üzerinde adaptörlerin yüklenmesini kapsar.
- [Eski kontrol noktaları](./legacy_checkpoints#safety-checker), eski Stable Diffusion kontrol noktaları için güvenlik denetleyicisini kapsar.

