# Topluluk boru hatları ve bileşenleri

Topluluk boru hatları, orijinal makale uygulamasından farklı olan [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) sınıflarıdır. Ek işlevsellik sağlarlar veya orijinal boru hattı uygulamasını genişletirler.

> [!TIP]
> Çıkarım ve eğitim örnekleriyle nasıl kullanılacaklarını gösteren topluluk pipeline'larını [diffusers/examples/community](https://github.com/huggingface/diffusers/tree/main/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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) fonksiyonuna ileterek topluluk kaynaklı her iki türden de pipeline yükleyebilirsiniz.

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

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

> [!WARNING]
> Hugging Face Hub dosyaları [tarama](https://huggingface.co/docs/hub/security-malware) 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.

  ```py
  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](./loading#reusing-models-in-multiple-pipelines) için faydalı olan [from_pipe()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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.

  ```py
  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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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](https://huggingface.co/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](https://huggingface.co/docs/transformers/index) kütüphanesinden içe aktarılır.

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

> [!WARNING]
> 2. ve 3. adımlarda, özel [UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) ve [pipeline](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) uygulamasının, bu örneğin çalışabilmesi için dosyalarında gösterilen biçimle eşleşmesi gerekir.

2. [Özel bir UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) yükleyin; bu, zaten [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) içinde uygulanmıştır. [UNet3DConditionModel](/docs/diffusers/main/tr/api/models/unet3d-cond#diffusers.UNet3DConditionModel) sınıf adı, Diffusers'ta zaten var olduğu için [UNet3DConditionModel](/docs/diffusers/main/tr/api/models/unet3d-cond#diffusers.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.

```python
from showone_unet_3d_condition import ShowOneUNet3DConditionModel

unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
```

3. Özel pipeline kodunu yükleyin (zaten [pipeline_t2v_base_pixel.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/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.

```python
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"
```

4. Pipeline'ı toplulukla paylaşmak için Hub'a gönderin.

```python
pipeline.push_to_hub("custom-t2v-pipeline")
```

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

- [model_index.json](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2) dosyasındaki `_class_name` özniteliğini `["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]` olarak değiştirin.
- `showone_unet_3d_condition.py` dosyasını [unet](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) alt klasörüne yükleyin.
- `pipeline_t2v_base_pixel.py` dosyasını [repository](https://huggingface.co/sayakpaul/show-1-base-with-code/tree/main) 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.

```python
import torch
from diffusers import DiffusionPipeline

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

> [!WARNING]
> `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()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.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](https://github.com/huggingface/diffusers/issues/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](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) deposuna göz atın.

