# Guides

[Le guidage sans classifieur](https://huggingface.co/papers/2207.12598) oriente la génération du modèle afin qu’elle corresponde mieux au prompt et est couramment utilisé pour améliorer la qualité, le contrôle et le respect des prompts. Il existe différents types de méthodes de guidage, et dans Diffusers, on les appelle des *guiders*. Tout comme pour les blocs, il est facile de basculer et d’utiliser différents guiders pour différents cas d’usage sans réécrire le pipeline.

Ce guide vous montre comment changer de guiders, ajuster les paramètres des guiders, ainsi que les charger et les partager sur le Hub.

## Changement de guides

[ClassifierFreeGuidance](/docs/diffusers/main/fr/api/modular_diffusers/guiders#diffusers.ClassifierFreeGuidance) est le guider par défaut et est créé lors de l’initialisation d’un pipeline avec [init_pipeline()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks.init_pipeline). Il est créé par `from_config`, ce qui signifie qu’il n’est pas nécessaire de charger des spécifications depuis un dépôt modulaire. Un guider ne sera pas répertorié dans `modular_model_index.json`.

Utilisez [get_component_spec()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.get_component_spec) pour inspecter un 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')
```

Passez à un autre guider en transmettant le nouveau guider à [update_components()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components).

> [!TIP]
> Changer les guiders renvoie un texte vous informant que vous changez le type de 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)
```

Utilisez à nouveau [get_component_spec()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.get_component_spec) pour vérifier que le type de guider est différent.

```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')
```

## Chargement de guiders personnalisés

Les guiders déjà enregistrés sur le Hub avec un fichier `modular_model_index.json` sont désormais considérés comme un composant `from_pretrained` plutôt que comme un composant `from_config`.

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

Le guider n'est créé qu'après l'appel de [load_components()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.load_components), en fonction de la spécification de chargement dans `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
```

## Changer les paramètres de guider

Les paramètres du guider peuvent être ajustés avec la méthode [create()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline_components#diffusers.ComponentSpec.create) et [update_components()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components). L'exemple ci-dessous modifie la valeur de `guidance_scale`.

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

## Téléchargement de guiders personnalisés

Appelez la méthode [push_to_hub()](/docs/diffusers/main/fr/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub) sur un guider personnalisé pour le partager sur le Hub.

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

Pour rendre ce guider disponible pour le pipeline, modifiez soit le fichier `modular_model_index.json`, soit utilisez la méthode [update_components()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components).

Modifiez le fichier `modular_model_index.json` et ajoutez une spécification de chargement pour le guider en pointant vers un dossier contenant la configuration du guider.

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

Modifiez `default_creation_method()` en `from_pretrained` et utilisez [update_components()](/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline.update_components) pour mettre à jour les spécifications du guider et des composants ainsi que la configuration du pipeline.

> [!TIP]
> Changer la méthode de création renvoie un texte vous indiquant que vous changez le type de création en `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)
```

Pour en faire le guider par défaut d'un pipeline, appelez [push_to_hub()](/docs/diffusers/main/fr/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub). Cette étape est facultative et n'est pas nécessaire si vous ne faites que des expérimentations en local.

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

