# AutoModel

La classe [AutoModel](/docs/diffusers/v0.43.0/fr/api/models/auto_model#diffusers.AutoModel) détecte et charge automatiquement la classe de modèle appropriée (UNet, transformer, VAE) à partir d'un fichier `config.json`. Vous n'avez pas besoin de connaître à l'avance le nom spécifique de la classe de modèle. Elle prend en charge les types de données et le placement sur l'appareil, et fonctionne entre les différents types de modèles et les bibliothèques.

L’exemple ci-dessous charge un transformer depuis Diffusers et un encodeur de texte depuis Transformers. Utilisez le paramètre `subfolder` pour spécifier l’emplacement du fichier `config.json` à charger.

```py
import torch
from diffusers import AutoModel, DiffusionPipeline

transformer = AutoModel.from_pretrained(
    "Qwen/Qwen-Image", subfolder="transformer", dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)

text_encoder = AutoModel.from_pretrained(
    "Qwen/Qwen-Image", subfolder="text_encoder", dtype=torch.bfloat16, device_map="cuda"
)
```

## Modèles personnalisés

[AutoModel](/docs/diffusers/v0.43.0/fr/api/models/auto_model#diffusers.AutoModel) charge également les modèles du [Hub](https://huggingface.co/models) qui ne sont pas inclus dans Diffusers. Définissez `trust_remote_code=True` dans [AutoModel.from_pretrained()](/docs/diffusers/v0.43.0/fr/api/models/auto_model#diffusers.AutoModel.from_pretrained) pour charger des modèles personnalisés.

Un dépôt de modèle personnalisé nécessite un module Python contenant la classe du modèle, ainsi qu'un `config.json` avec une entrée `auto_map` qui associe `"AutoModel"` à `"module_file.ClassName"`.

```
custom/custom-transformer-model/
├── config.json
├── my_model.py
└── diffusion_pytorch_model.safetensors
```

Le `config.json` contient le champ `auto_map` pointant vers la classe personnalisée.

```json
{
  "auto_map": {
    "AutoModel": "my_model.MyCustomModel"
  }
}
```

Puis chargez-le avec `trust_remote_code=True`.

```py
import torch
from diffusers import AutoModel

transformer = AutoModel.from_pretrained(
    "custom/custom-transformer-model", trust_remote_code=True, dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
```

Pour un exemple concret, [Overworld/Waypoint-1-Small](https://huggingface.co/Overworld/Waypoint-1-Small/tree/main/transformer) héberge une classe `WorldModel` personnalisée répartie sur plusieurs modules dans son sous-dossier `transformer`.

```
transformer/
├── config.json          # auto_map: "model.WorldModel"
├── model.py
├── attn.py
├── nn.py
├── cache.py
├── quantize.py
├── __init__.py
└── diffusion_pytorch_model.safetensors
```

```py
import torch
from diffusers import AutoModel

transformer = AutoModel.from_pretrained(
    "Overworld/Waypoint-1-Small", subfolder="transformer", trust_remote_code=True, dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
```

Si le modèle personnalisé hérite de la classe [ModelMixin](/docs/diffusers/v0.43.0/fr/api/models/overview#diffusers.ModelMixin), il accède aux mêmes fonctionnalités que les classes de modèles Diffusers, comme la [compilation régionale](../optimization/fp16#regional-compilation) et le [déchargement par groupe](../optimization/memory#group-offloading).

> [!WARNING]
> Par précaution avec `trust_remote_code=True`, passez un hachage de commit à l'argument `revision` dans [AutoModel.from_pretrained()](/docs/diffusers/v0.43.0/fr/api/models/auto_model#diffusers.AutoModel.from_pretrained) pour vous assurer que le code n'a pas été mis à jour avec du nouveau code malveillant (sauf si vous faites entièrement confiance aux propriétaires du modèle).
>
> ```py
> transformer = AutoModel.from_pretrained(
>     "Overworld/Waypoint-1-Small", subfolder="transformer", trust_remote_code=True, revision="a3d8cb2"
> )
> ```

## Enregistrer des modèles personnalisés

Utilisez `register_for_auto_class()` pour ajouter automatiquement l’entrée `auto_map` à `config.json` lors de l’enregistrement. Cela évite d’avoir à modifier manuellement le fichier de configuration.

```py
# my_model.py
from diffusers import ModelMixin, ConfigMixin

class MyCustomModel(ModelMixin, ConfigMixin):
    ...

MyCustomModel.register_for_auto_class("AutoModel")

model = MyCustomModel(...)
model.save_pretrained("./my_model")
```

Le fichier `config.json` enregistré inclura le champ `auto_map`.

```json
{
  "auto_map": {
    "AutoModel": "my_model.MyCustomModel"
  }
}
```

## Étapes suivantes

En savoir plus sur l'implémentation de modèles personnalisés dans le guide [Composants de la communauté](../using-diffusers/custom_pipeline_overview#community-components).

