# Pemandu

[Classifier-free guidance](https://huggingface.co/papers/2207.12598) mengarahkan generasi model agar lebih sesuai dengan prompt dan umum digunakan untuk meningkatkan kualitas, kontrol, serta kepatuhan terhadap prompt. Terdapat berbagai jenis metode guidance, dan di Diffusers, metode-metode ini dikenal sebagai *guiders*. Sama seperti blocks, mudah untuk beralih dan menggunakan guiders yang berbeda untuk berbagai kasus penggunaan tanpa perlu menulis ulang pipeline.

Panduan ini akan menunjukkan cara Anda mengganti guider, menyesuaikan parameter guider, serta memuat dan membagikannya ke Hub.

## Mengganti guiders

[ClassifierFreeGuidance](/docs/diffusers/main/id/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance) adalah guider bawaan yang dibuat saat pipeline diinisialisasi dengan [init_pipeline()](/docs/diffusers/main/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks.init_pipeline). Guider ini dibuat oleh `from_config`, yang berarti tidak memerlukan pemuatan spesifikasi dari repositori modular. Guider tidak akan terdaftar di `modular_model_index.json`.

Gunakan [get_component_spec()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.get_component_spec) untuk memeriksa sebuah guider.

```py
t2i_pipeline.get_component_spec("guider")
ComponentSpec(name='guider', type_hint=<class 'diffusers.guiders.classifier_free_guidance.ClassifierFreeGuidance'>, description=None, config=FrozenDict([('guidance_scale', 7.5), ('guidance_rescale', 0.0), ('use_original_formulation', False), ('start', 0.0), ('stop', 1.0), ('_use_default_values', ['start', 'guidance_rescale', 'stop', 'use_original_formulation'])]), repo=None, subfolder=None, variant=None, revision=None, default_creation_method='from_config')
```

Beralih ke guider yang berbeda dengan meneruskan guider baru ke [update_components()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components).

> [!TIP]
> Mengubah guider akan mengembalikan teks yang memberi tahu Anda bahwa Anda sedang mengubah tipe guider.
> ```bash
> ModularPipeline.update_components: adding guider with new type: PerturbedAttentionGuidance, previous type: ClassifierFreeGuidance
> ```

```py
from diffusers import LayerSkipConfig, PerturbedAttentionGuidance

config = LayerSkipConfig(indices=[2, 9], fqn="mid_block.attentions.0.transformer_blocks", skip_attention=False, skip_attention_scores=True, skip_ff=False)
guider = PerturbedAttentionGuidance(
    guidance_scale=5.0, perturbed_guidance_scale=2.5, perturbed_guidance_config=config
)
t2i_pipeline.update_components(guider=guider)
```

Gunakan [get_component_spec()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.get_component_spec) lagi untuk memverifikasi bahwa tipe guider berbeda.

```py
t2i_pipeline.get_component_spec("guider")
ComponentSpec(name='guider', type_hint=<class 'diffusers.guiders.perturbed_attention_guidance.PerturbedAttentionGuidance'>, description=None, config=FrozenDict([('guidance_scale', 5.0), ('perturbed_guidance_scale', 2.5), ('perturbed_guidance_start', 0.01), ('perturbed_guidance_stop', 0.2), ('perturbed_guidance_layers', None), ('perturbed_guidance_config', LayerSkipConfig(indices=[2, 9], fqn='mid_block.attentions.0.transformer_blocks', skip_attention=False, skip_attention_scores=True, skip_ff=False, dropout=1.0)), ('guidance_rescale', 0.0), ('use_original_formulation', False), ('start', 0.0), ('stop', 1.0), ('_use_default_values', ['perturbed_guidance_start', 'use_original_formulation', 'perturbed_guidance_layers', 'stop', 'start', 'guidance_rescale', 'perturbed_guidance_stop']), ('_class_name', 'PerturbedAttentionGuidance'), ('_diffusers_version', '0.35.0.dev0')]), repo=None, subfolder=None, variant=None, revision=None, default_creation_method='from_config')
```

## Memuat panduan kustom

Guiders yang sudah disimpan di Hub dengan file `modular_model_index.json` sekarang dianggap sebagai komponen `from_pretrained` alih-alih komponen `from_config`.

```json
{
  "guider": [
    null,
    null,
    {
      "repo": "YiYiXu/modular-loader-t2i-guider",
      "revision": null,
      "subfolder": "pag_guider",
      "type_hint": [
        "diffusers",
        "PerturbedAttentionGuidance"
      ],
      "variant": null
    }
  ]
}
```

Guider hanya dibuat setelah memanggil [load_components()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.load_components) berdasarkan spesifikasi pemuatan di `modular_model_index.json`.

```py
t2i_pipeline = t2i_blocks.init_pipeline("YiYiXu/modular-doc-guider")
# not created during init
assert t2i_pipeline.guider is None
t2i_pipeline.load_components()
# loaded as PAG guider
t2i_pipeline.guider
```

## Mengubah parameter guider

Parameter guider dapat disesuaikan dengan metode [create()](/docs/diffusers/main/id/api/modular_diffusers/pipeline_components#diffusers.ComponentSpec.create) dan [update_components()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components). Contoh di bawah ini mengubah nilai `guidance_scale`.

```py
guider_spec = t2i_pipeline.get_component_spec("guider")
guider = guider_spec.create(guidance_scale=10)
t2i_pipeline.update_components(guider=guider)
```

## Mengunggah panduan kustom

Panggil metode [push_to_hub()](/docs/diffusers/main/id/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub) pada guider kustom untuk membagikannya ke Hub.

```py
guider.push_to_hub("YiYiXu/modular-loader-t2i-guider", subfolder="pag_guider")
```

Untuk membuat guider ini tersedia untuk pipeline, ubah file `modular_model_index.json` atau gunakan metode [update_components()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components).

Edit file `modular_model_index.json` dan tambahkan spesifikasi pemuatan untuk guider dengan menunjuk ke folder yang berisi konfigurasi guider.

```json
{
  "guider": [
    "diffusers",
    "PerturbedAttentionGuidance",
    {
      "repo": "YiYiXu/modular-loader-t2i-guider",
      "revision": null,
      "subfolder": "pag_guider",
      "type_hint": [
        "diffusers",
        "PerturbedAttentionGuidance"
      ],
      "variant": null
    }
  ],
```

Ubah `default_creation_method()` menjadi `from_pretrained` dan gunakan [update_components()](/docs/diffusers/main/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components) untuk memperbarui spesifikasi guider dan komponen serta konfigurasi pipeline.

> [!TIP]
> Mengubah metode pembuatan akan mengembalikan teks yang memberi tahu Anda bahwa Anda mengubah tipe pembuatan menjadi `from_pretrained`.
> ```bash
> ModularPipeline.update_components: changing the default_creation_method of guider from from_config to from_pretrained.
> ```

```py
guider_spec = t2i_pipeline.get_component_spec("guider")
guider_spec.default_creation_method="from_pretrained"
guider_spec.pretrained_model_name_or_path="YiYiXu/modular-loader-t2i-guider"
guider_spec.subfolder="pag_guider"
pag_guider = guider_spec.load()
t2i_pipeline.update_components(guider=pag_guider)
```

Untuk menjadikannya guider default untuk sebuah pipeline, panggil [push_to_hub()](/docs/diffusers/main/id/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub). Ini adalah langkah opsional dan tidak diperlukan jika Anda hanya bereksperimen secara lokal.

```py
t2i_pipeline.push_to_hub("YiYiXu/modular-doc-guider")
```

