Accelerate documentation

Estimador de memoria del modelo

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

Estimador de memoria del modelo

Un aspecto muy difícil al explorar posibles modelos para usar en tu máquina es saber exactamente qué tan grande puede ser un modelo para que quepa en la memoria de tu dispositivo actual (como cargar el modelo en CUDA o XPU).

Para ayudar a mitigar esto, Accelerate cuenta con una interfaz de línea de comandos a través de accelerate estimate-memory. Este tutorial te guiará paso a paso en su uso, qué puedes esperar y, al final, enlaza con la demo interactiva alojada en el Hub, que incluso te permite publicar esos resultados directamente en el repositorio del modelo.

Actualmente, admitimos la búsqueda de modelos que pueden usarse en timm y transformers.

Esta API cargará el modelo en memoria en el dispositivo meta, por lo que no estamos descargando y cargando realmente los pesos completos del modelo en memoria, ni necesitamos hacerlo. Como resultado, es perfectamente viable medir modelos de 8 mil millones de parámetros (o más), sin tener que preocuparse por si tu CPU puede manejarlo.

Demos de Gradio

A continuación se muestran algunas demos de gradio relacionadas con lo descrito anteriormente. La primera es el espacio oficial de estimación de memoria de Hugging Face, que utiliza Accelerate directamente:

Un miembro de la comunidad ha tomado la idea y la ha expandido aún más, permitiéndote filtrar modelos directamente y ver si puedes ejecutar un LLM particular dado las restricciones de GPU y las configuraciones de LoRA. Para probarlo, consulta aquí para más detalles.

El comando

Al usar accelerate estimate-memory, debe pasar el nombre del modelo que desea utilizar, posiblemente el framework que utiliza ese modelo (si no se puede encontrar automáticamente) y los tipos de datos en los que desea cargar el modelo.

Por ejemplo, así es como podemos calcular la huella de memoria para bert-base-cased:

accelerate estimate-memory bert-base-cased

Esto descargará el config.json de bert-based-cased, cargará el modelo en el dispositivo meta e informará sobre la cantidad de espacio que ocupará:

Uso de memoria para cargar bert-base-cased:

dtypeCapa más grandeTamaño totalEntrenamiento usando Adam
float3284.95 MB418.18 MB1.61 GB
float1642.47 MB206.59 MB826.36 MB
int821.24 MB103.29 MB413.18 MB
int410.62 MB51.65 MB206.59 MB

Por defecto, devolverá todos los dtypes compatibles (desde int4 hasta float32), pero si te interesan algunos específicos, puedes filtrarlos.

Bibliotecas específicas

Si no se puede determinar automáticamente la biblioteca de origen (como sí se podría en el caso de bert-base-cased), se puede pasar un nombre de biblioteca.

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

Uso de memoria para cargar HuggingFaceM4/idefics-80b-instruct:

dtypeCapa más grandeTamaño totalEntrenamiento usando Adam
float323.02 GB297.12 GB1.16 TB
float161.51 GB148.56 GB594.24 GB
int8772.52 MB74.28 GB297.12 GB
int4386.26 MB37.14 GB148.56 GB
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm

Uso de memoria para cargar timm/resnet50.a1_in1k:

dtypeCapa más grandeTamaño totalEntrenamiento usando Adam
float329,0 MB97,7 MB390.78 MB
float164,5 MB48.85 MB195.39 MB
int82.25 MB24.42 MB97,7 MB
int41.12 MB12.21 MB48.85 MB

dtypes específicos

Como se mencionó anteriormente, aunque por defecto devolvemos int4 a través de float32, se puede utilizar cualquier dtype desde float32, float16, int8 y int4.

Para ello, pásalos después de especificar --dtypes:

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

Uso de memoria para cargar bert-base-cased:

dtypeCapa más grandeTamaño totalEntrenamiento usando Adam
float3284.95 MB413.18 MB1.61 GB
float1642.47 MB206.59 MB826.36 MB

Limitaciones de esta calculadora

Esta calculadora le indicará cuánta memoria se necesita para cargar el modelo, no para realizar la inferencia.

Este cálculo es preciso dentro de un margen de pocos % respecto al valor real, por lo que ofrece una muy buena idea de la cantidad de memoria que se requerirá. Por ejemplo, cargar bert-base-cased consume realmente 413.68 MB al cargarse en CUDA con precisión completa, y la calculadora estima 413.18 MB.

Al realizar la inferencia, puede esperar un aumento de hasta un 20 % adicional, según lo encontrado por EleutherAI. Estaremos realizando investigaciones para encontrar una estimación más precisa de estos valores y actualizaremos esta calculadora una vez finalizado.

Update on GitHub