Buckets:

mishig's picture
|
download
raw
4.78 kB
# 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).

Xet Storage Details

Size:
4.78 kB
·
Xet hash:
451849167db35f593cbc6999bcad444a7436aa897d92922fedbc4a81463ee75f

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.