Accelerate documentation
Estimador de memoria del modelo
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:
| dtype | Capa más grande | Tamaño total | Entrenamiento usando Adam |
|---|---|---|---|
| float32 | 84.95 MB | 418.18 MB | 1.61 GB |
| float16 | 42.47 MB | 206.59 MB | 826.36 MB |
| int8 | 21.24 MB | 103.29 MB | 413.18 MB |
| int4 | 10.62 MB | 51.65 MB | 206.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:
| dtype | Capa más grande | Tamaño total | Entrenamiento usando Adam |
|---|---|---|---|
| float32 | 3.02 GB | 297.12 GB | 1.16 TB |
| float16 | 1.51 GB | 148.56 GB | 594.24 GB |
| int8 | 772.52 MB | 74.28 GB | 297.12 GB |
| int4 | 386.26 MB | 37.14 GB | 148.56 GB |
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm
Uso de memoria para cargar timm/resnet50.a1_in1k:
| dtype | Capa más grande | Tamaño total | Entrenamiento usando Adam |
|---|---|---|---|
| float32 | 9,0 MB | 97,7 MB | 390.78 MB |
| float16 | 4,5 MB | 48.85 MB | 195.39 MB |
| int8 | 2.25 MB | 24.42 MB | 97,7 MB |
| int4 | 1.12 MB | 12.21 MB | 48.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:
| dtype | Capa más grande | Tamaño total | Entrenamiento usando Adam |
|---|---|---|---|
| float32 | 84.95 MB | 413.18 MB | 1.61 GB |
| float16 | 42.47 MB | 206.59 MB | 826.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