Accelerate documentation

Estimateur de mémoire du modèle

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Estimateur de mémoire du modèle

Un aspect très difficile lors de l’exploration des modèles potentiels à utiliser sur votre machine est de savoir à quel point un modèle peut être gros pour tenir en mémoire avec votre appareil actuel (comme le chargement du modèle sur CUDA ou XPU).

Pour atténuer ce problème, Accelerate propose une interface en ligne de commande via accelerate estimate-memory. Ce tutoriel vous guide dans son utilisation, vous explique à quoi vous attendre et, à la fin, vous renvoie vers la démonstration interactive hébergée sur le Hub, qui vous permet même de publier ces résultats directement sur le dépôt du modèle !

Nous prenons actuellement en charge la recherche de modèles utilisables dans timm et transformers.

Cette API charge le modèle en mémoire sur le périphérique meta, de sorte que nous ne téléchargeons pas réellement les poids complets du modèle en mémoire, et nous n’en avons pas besoin. Par conséquent, il est tout à fait possible de mesurer des modèles de 8 milliards de paramètres (ou plus), sans avoir à se soucier de savoir si votre CPU peut le supporter !

Démonstrations Gradio

Voici quelques démos gradio liées à ce qui a été décrit ci-dessus. La première est l’espace officiel d’estimation de la mémoire de Hugging Face, qui utilise directement Accelerate :

Un membre de la communauté a repris cette idée et l’a développée davantage, vous permettant de filtrer directement les modèles et de vérifier si vous pouvez exécuter un LLM particulier compte tenu des contraintes GPU et des configurations LoRA. Pour l’essayer, consultez ici pour plus de détails.

La commande

Lors de l’utilisation de accelerate estimate-memory, vous devez transmettre le nom du modèle que vous souhaitez utiliser, éventuellement le framework utilisé par ce modèle (s’il ne peut pas être détecté automatiquement), ainsi que les types de données dans lesquels vous souhaitez charger le modèle.

Par exemple, voici comment nous pouvons calculer l'empreinte mémoire de bert-base-cased :

accelerate estimate-memory bert-base-cased

Cela téléchargera le config.json pour bert-based-cased, chargera le modèle sur le périphérique meta et indiquera l’espace qu’il occupera :

Mémoire utilisée pour charger bert-base-cased :

dtypeCouche la plus volumineuseTaille totaleEntraînement à l'aide d'Adam
float3284,95 Mo418,18 Mo1,61 Go
float1642,47 Mo206,59 Mo826.36 Mo
int821,24 Mo103,29 Mo413,18 Mo
int410,62 Mo51,65 Mo206,59 Mo

Par défaut, elle renvoie tous les dtypes pris en charge (de int4 à float32), mais si vous êtes intéressé par des types spécifiques, vous pouvez les filtrer.

Bibliothèques spécifiques

Si la bibliothèque source ne peut pas être déterminée automatiquement (comme ce serait possible dans le cas de bert-base-cased), un nom de bibliothèque peut être transmis.

accelerate estimate-memory HuggingFaceM4/idefics-80b-instruct --library_name transformers

Utilisation de la mémoire pour le chargement de HuggingFaceM4/idefics-80b-instruct :

dtypeCouche la plus volumineuseTaille totaleEntraînement à l'aide d'Adam
float323,02 Go297,12 Go1,16 To
float161,51 Go148,56 Go594.24 Go
int8772.52 Mo74,28 Go297,12 Go
int4386.26 Mo37,14 Go148,56 Go
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm

Mémoire utilisée pour charger timm/resnet50.a1_in1k :

dtypeCouche la plus volumineuseTaille totaleEntraînement à l'aide d'Adam
float329,0 Mo97,7 Mo390.78 Mo
float164,5 Mo48,85 Mo195,39 Mo
int82,25 Mo24,42 Mo97,7 Mo
int41,12 Mo12,21 Mo48,85 Mo

dtypes spécifiques

Comme mentionné précédemment, bien que nous renvoyions par défaut int4 via float32, tout type de données peut être utilisé parmi float32, float16, int8 et int4.

Pour ce faire, passez-les après avoir spécifié --dtypes :

accelerate estimate-memory bert-base-cased --dtypes float32 float16

Mémoire utilisée pour charger bert-base-cased :

dtypeCouche la plus volumineuseTaille totaleEntraînement à l'aide d'Adam
float3284,95 Mo413,18 Mo1,61 Go
float1642,47 Mo206,59 Mo826.36 Mo

Limites de cette calculatrice

Cette calculatrice vous indique la quantité de mémoire nécessaire pour charger le modèle, non pour effectuer l'inférence.

Ce calcul est précis à quelques % près de la valeur réelle, ce qui en fait une très bonne estimation de la quantité de mémoire nécessaire. Par exemple, le chargement de bert-base-cased nécessite réellement 413.68 MB lorsqu’il est chargé sur CUDA en pleine précision, et le calculateur estime 413.18 MB.

Lors de l’inférence, vous pouvez vous attendre à une surcharge allant jusqu’à 20 % supplémentaires, comme l’ont constaté EleutherAI. Nous menons des recherches afin d’obtenir une estimation plus précise de ces valeurs et mettrons à jour cette calculatrice dès que ce sera fait.

Update on GitHub