Buckets:
| # Hızlı Başlangıç | |
| Modular Diffusers, esnek ve özelleştirilebilir pipeline'ları hızlı bir şekilde oluşturmak için bir çerçevedir. Bu pipeline'lar, standart `DiffusionPipeline`'ların yapabildiklerinin ötesine geçebilir. Modular Diffusers'ın çekirdeğinde, yeni iş akışlarına uyum sağlamak için diğer bloklarla birleştirilebilen [ModularPipelineBlocks](/docs/diffusers/main/tr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) bulunur. Bloklar, üretim görevlerini çalıştırmak için kullanıcı dostu bir arayüz olan [ModularPipeline](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline)'a dönüştürülür. | |
| Bu kılavuz, modüler bir hattın (pipeline) nasıl çalıştırılacağını, yapısının nasıl anlaşıldığını ve onu oluşturan blokları değiştirerek nasıl özelleştirileceğini gösterir. [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline) ile aşinalığınız varsa, farklı çalışan konular için önce [DiffusionPipeline'dan Geliyorsanız](./coming_from_diffusion_pipeline) bölümünü okuyun. | |
| ## Bir pipeline çalıştırın | |
| [ModularPipeline](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline), modüler boru hatlarını yükleme, çalıştırma ve yönetme için ana arayüzdür. | |
| ```py | |
| import torch | |
| from diffusers import ModularPipeline, ComponentsManager | |
| # Use ComponentsManager to enable auto CPU offloading for memory efficiency | |
| manager = ComponentsManager() | |
| manager.enable_auto_cpu_offload(device="cuda:0") | |
| pipe = ModularPipeline.from_pretrained("Qwen/Qwen-Image", components_manager=manager) | |
| pipe.load_components(dtype=torch.bfloat16) | |
| image = pipe( | |
| prompt="cat wizard with red hat, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney", | |
| ).images[0] | |
| image | |
| ``` | |
| [from_pretrained()](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.from_pretrained) tembel yükleme kullanır - her bileşenin nereden yükleneceğini öğrenmek için yapılandırmayı okur, ancak [load_components()](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.load_components) çağrılana kadar model ağırlıklarını gerçekten yüklemez. Bu, bileşenlerin ne zaman ve nasıl yükleneceği üzerinde size kontrol sağlar. | |
| > [!TIP] | |
| > `ComponentsManager`, `enable_auto_cpu_offload` ile birlikte, büyük modeller (ör. Qwen-Image) için bellek kullanımını azaltmak amacıyla modelleri gerektiğinde otomatik olarak CPU ile GPU arasında taşır. Daha fazla bilgi için [ComponentsManager](./components_manager) kılavuzuna göz atın. | |
| > | |
| > Offloading'e ihtiyacınız yoksa, `components_manager` argümanını kaldırın ve hattı `to("cuda")` ile cihazınıza manuel olarak taşıyın. | |
| [Pipeline oluşturma](https://huggingface.co/docs/diffusers/modular_diffusers/modular_pipeline#creating-a-pipeline) ve [Bileşenleri yükleme](https://huggingface.co/docs/diffusers/modular_diffusers/modular_pipeline#loading-components) kılavuzlarında pipeline oluşturma ve yükleme hakkında daha fazla bilgi edinin. | |
| ## Yapıyı anlama | |
| Bir [ModularPipeline](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline) iki parçadan oluşur: bir **tanım** (bloklar) ve bir **durum** (yüklenmiş bileşenler ve yapılandırmalar). | |
| Halinizi görmek için pipeline'ı yazdırın — bileşenler ve yükleme durumları ile yapılandırmaları. | |
| ```py | |
| print(pipe) | |
| ``` | |
| ``` | |
| QwenImageModularPipeline { | |
| "_blocks_class_name": "QwenImageAutoBlocks", | |
| "_class_name": "QwenImageModularPipeline", | |
| "_diffusers_version": "0.37.0.dev0", | |
| "transformer": [ | |
| "diffusers", | |
| "QwenImageTransformer2DModel", | |
| { | |
| "pretrained_model_name_or_path": "Qwen/Qwen-Image", | |
| "revision": null, | |
| "subfolder": "transformer", | |
| "type_hint": [ | |
| "diffusers", | |
| "QwenImageTransformer2DModel" | |
| ], | |
| "variant": null | |
| } | |
| ], | |
| ... | |
| } | |
| ``` | |
| Tanıma `pipe.blocks` üzerinden erişin — bu, hattın iş akışlarını, girdilerini, çıktılarını ve hesaplama mantığını tanımlayan [ModularPipelineBlocks](/docs/diffusers/main/tr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)'tür. | |
| ```py | |
| print(pipe.blocks) | |
| ``` | |
| ``` | |
| QwenImageAutoBlocks( | |
| Class: SequentialPipelineBlocks | |
| Description: Auto Modular pipeline for text-to-image, image-to-image, inpainting, and controlnet tasks using QwenImage. | |
| Supported workflows: | |
| - `text2image`: requires `prompt` | |
| - `image2image`: requires `prompt`, `image` | |
| - `inpainting`: requires `prompt`, `mask_image`, `image` | |
| - `controlnet_text2image`: requires `prompt`, `control_image` | |
| ... | |
| Components: | |
| text_encoder (`Qwen2_5_VLForConditionalGeneration`) | |
| vae (`AutoencoderKLQwenImage`) | |
| transformer (`QwenImageTransformer2DModel`) | |
| ... | |
| Sub-Blocks: | |
| [0] text_encoder (QwenImageAutoTextEncoderStep) | |
| [1] vae_encoder (QwenImageAutoVaeEncoderStep) | |
| [2] controlnet_vae_encoder (QwenImageOptionalControlNetVaeEncoderStep) | |
| [3] denoise (QwenImageAutoCoreDenoiseStep) | |
| [4] decode (QwenImageAutoDecodeStep) | |
| ) | |
| ``` | |
| Çıktı şunu döndürür: | |
| - Desteklenen iş akışları (text2image, image2image, inpainting vb.) | |
| - Bileşen olarak içerdiği Alt-Bloklar (text_encoder, vae_encoder, denoise, decode) | |
| ### İş Akışları | |
| Bu pipeline birden çok iş akışını destekler ve sağladığınız girdilere göre davranışını uyarlar. Örneğin, pipeline'a `image` geçirirseniz, metinden görüntüye değil, görüntüden görüntüye iş akışını çalıştırır. Bunun alt yapısında nasıl çalıştığı hakkında daha fazla bilgi için [AutoPipelineBlocks](https://huggingface.co/docs/diffusers/modular_diffusers/auto_pipeline_blocks) kılavuzuna göz atın. | |
| ```py | |
| from diffusers.utils import load_image | |
| input_image = load_image("https://github.com/Trgtuan10/Image_storage/blob/main/cute_cat.png?raw=true") | |
| image = pipe( | |
| prompt="cat wizard with red hat, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney", | |
| image=input_image, | |
| ).images[0] | |
| ``` | |
| Belirli bir iş akışının bloklarını çıkarmak için `get_workflow()` kullanın. Yalnızca o iş akışına ait blokları almak için iş akışı adını (ör. `"image2image"`, `"inpainting"`, `"controlnet_text2image"`) iletin. Bu, belirli bir iş akışını özelleştirmek veya hata ayıklamak istediğinizde kullanışlıdır. Kullanılabilir tüm iş akışlarını görmek için `pipe.blocks.available_workflows` öğesini kontrol edebilirsiniz. | |
| ```py | |
| img2img_blocks = pipe.blocks.get_workflow("image2image") | |
| ``` | |
| ### Alt bloklar | |
| Bloklar, diğer blokları içerebilir. `pipe.blocks` üst düzey blok tanımını (burada `QwenImageAutoBlocks`) size verirken, `sub_blocks` içindeki daha küçük bloklara erişmenizi sağlar. | |
| `QwenImageAutoBlocks` şu bileşenlerden oluşur: `text_encoder`, `vae_encoder`, `controlnet_vae_encoder`, `denoise` ve `decode`. | |
| Bu alt bloklar sırayla çalışır ve veri bir bloktan diğerine doğrusal olarak akar — her bloğun `intermediate_outputs` değeri, bir sonraki blok için `inputs` olarak kullanılabilir hale gelir. [`SequentialPipelineBlocks`](./sequential_pipeline_blocks) tam olarak bu şekilde çalışır. | |
| Bunlara `sub_blocks` özelliği üzerinden erişebilirsiniz. `doc` özelliği, girdileri, çıktıları ve bileşenleri dahil olmak üzere herhangi bir bloğun tam dokümantasyonunu görmek için kullanışlıdır. | |
| ```py | |
| vae_encoder_block = pipe.blocks.sub_blocks["vae_encoder"] | |
| print(vae_encoder_block.doc) | |
| ``` | |
| Bu blok, [init_pipeline()](/docs/diffusers/main/tr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks.init_pipeline) ile kendi başına çalışabilmesi için bir pipeline'a dönüştürülebilir. | |
| ```py | |
| vae_encoder_pipe = vae_encoder_block.init_pipeline() | |
| # Reuse the VAE we already loaded, we can reuse it with update_components() method | |
| vae_encoder_pipe.update_components(vae=pipe.vae) | |
| # Run just this block | |
| image_latents = vae_encoder_pipe(image=input_image).image_latents | |
| print(image_latents.shape) | |
| ``` | |
| Orijinal hattımızdaki VAE'yi yeniden yüklemek yerine yeniden kullanır ve bellek kullanımını verimli tutar. Daha fazla bilgi için [Bileşenleri yükleme](https://huggingface.co/docs/diffusers/modular_diffusers/modular_pipeline#loading-components) kılavuzuna göz atın. | |
| Bloklar birleştirilebilir olduğundan, yeni iş akışları oluşturmak için hattın tanımına blok ekleyerek, çıkararak veya değiştirerek değişiklik yapabilirsiniz. Bir sonraki bölümde, ControlNet hattına bir canny kenar algılama bloğu ekleyeceğiz; böylece önceden işlenmiş bir canny kenar haritası yerine normal bir görsel geçebilirsiniz. | |
| ## Yeni iş akışları oluşturun | |
| Bir ControlNet hattına canny kenar algılama bloğu ekleyelim. Önce, Hub'dan hazır bir canny bloğu yükleyin (kendi bloğunuzu oluşturmak için [Özel Blokların Oluşturulması](https://huggingface.co/docs/diffusers/modular_diffusers/custom_blocks) bölümüne bakın). | |
| ```py | |
| from diffusers.modular_pipelines import ModularPipelineBlocks | |
| # Load a canny block from the Hub | |
| canny_block = ModularPipelineBlocks.from_pretrained( | |
| "diffusers-internal-dev/canny-filtering", | |
| trust_remote_code=True, | |
| ) | |
| print(canny_block.doc) | |
| ``` | |
| ``` | |
| class CannyBlock | |
| Inputs: | |
| image (`Union[Image, ndarray]`): | |
| Image to compute canny filter on | |
| low_threshold (`int`, *optional*, defaults to 50): | |
| Low threshold for the canny filter. | |
| high_threshold (`int`, *optional*, defaults to 200): | |
| High threshold for the canny filter. | |
| ... | |
| Outputs: | |
| control_image (`PIL.Image`): | |
| Canny map for input image | |
| ``` | |
| `get_workflow` işlevini kullanarak `QwenImageAutoBlocks` içinden ControlNet iş akışını çıkarın. | |
| ```py | |
| # Get the controlnet workflow that we want to work with | |
| blocks = pipe.blocks.get_workflow("controlnet_text2image") | |
| print(blocks.doc) | |
| ``` | |
| ``` | |
| class SequentialPipelineBlocks | |
| Inputs: | |
| prompt (`str`): | |
| The prompt or prompts to guide image generation. | |
| control_image (`Image`): | |
| Control image for ControlNet conditioning. | |
| ... | |
| ``` | |
| Çıkarılan iş akışı bir [`SequentialPipelineBlocks`](./sequential_pipeline_blocks) olup şu anda girdi olarak `control_image` gerektirir. Hattın bir düzenli görüntü kabul etmesi için canny bloğunu başa ekleyin. | |
| ```py | |
| # Insert canny at the beginning | |
| blocks.sub_blocks.insert("canny", canny_block, 0) | |
| # Check the updated structure: CannyBlock is now listed as first sub-block | |
| print(blocks) | |
| # Check the updated doc | |
| print(blocks.doc) | |
| ``` | |
| ``` | |
| class SequentialPipelineBlocks | |
| Inputs: | |
| image (`Union[Image, ndarray]`): | |
| Image to compute canny filter on | |
| low_threshold (`int`, *optional*, defaults to 50): | |
| Low threshold for the canny filter. | |
| high_threshold (`int`, *optional*, defaults to 200): | |
| High threshold for the canny filter. | |
| prompt (`str`): | |
| The prompt or prompts to guide image generation. | |
| ... | |
| ``` | |
| Artık pipeline, `control_image` yerine `image` girdisi alır. Bir dizideki bloklar verileri otomatik olarak paylaştığı için, canny bloğunun çıktısı (`control_image`) buna ihtiyaç duyan denoise bloğuna akar ve canny bloğunun girdisi (`image`), daha önceki bir blok tarafından sağlanmadığı için bir pipeline girdisi haline gelir. | |
| Değiştirilen bloklardan bir pipeline oluşturun ve bir ControlNet modeli yükleyin. ControlNet, orijinal model deposunun bir parçası değildir, bu nedenle ayrı olarak yükleyin ve [update_components()](/docs/diffusers/main/tr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components) ile ekleyin. | |
| ```py | |
| pipeline = blocks.init_pipeline("Qwen/Qwen-Image", components_manager=manager) | |
| pipeline.load_components(dtype=torch.bfloat16) | |
| # Load the ControlNet model | |
| controlnet_spec = pipeline.get_component_spec("controlnet") | |
| controlnet_spec.pretrained_model_name_or_path = "InstantX/Qwen-Image-ControlNet-Union" | |
| controlnet = controlnet_spec.load(dtype=torch.bfloat16) | |
| pipeline.update_components(controlnet=controlnet) | |
| ``` | |
| Şimdi hattı çalıştırın - canny bloğu, görüntüyü ControlNet için ön işler. | |
| ```py | |
| from diffusers.utils import load_image | |
| prompt = "cat wizard with red hat, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney" | |
| image = load_image("https://github.com/Trgtuan10/Image_storage/blob/main/cute_cat.png?raw=true") | |
| output = pipeline( | |
| prompt=prompt, | |
| image=image, | |
| ).images[0] | |
| output | |
| ``` | |
| ## Sonraki adımlar | |
| Modular Diffusers'ın temel yapı taşlarını anlayın: | |
| - [ModularPipelineBlocks](./pipeline_block): Bir pipeline'da bir adım tanımlamak için temel birim. | |
| - [SequentialPipelineBlocks](./sequential_pipeline_blocks): Blokları sırayla çalışacak şekilde zincirle. | |
| - [AutoPipelineBlocks](./auto_pipeline_blocks): Birden fazla iş akışını destekleyen boru hatları oluşturun. | |
| - [Durumlar](./modular_diffusers_states): Bloklar arasında verilerin nasıl paylaşıldığı. | |
| Özel mantık içeren kendi bloklarınızı nasıl oluşturacağınızı [Özel Bloklar Oluşturma](./custom_blocks) kılavuzunda öğrenin. | |
| Birden çok hattın arasında modelleri paylaşmak ve belleği verimli bir şekilde yönetmek için [`ComponentsManager`](./components_manager) kullanın. | |
| Modüler boru hatlarını, iş akışları oluşturmak için görsel, düğüme dayalı bir arayüz olan [Mellon](https://github.com/cubiq/Mellon) ile bağlayın. Modular Diffusers ile oluşturulan özel bloklar, Mellon ile hazır olarak çalışır - arayüz kodu gerekmez. Daha fazla bilgi için Mellon kılavuzunu okuyun. | |
Xet Storage Details
- Size:
- 13.9 kB
- Xet hash:
- a2c91b990aebff17c426ecbdc9f889d422eb04569adf7fb93a4dd79f933ea3ed
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.