Accelerate documentation

Оценщик памяти модели

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

Оценщик памяти модели

Один из самых сложных аспектов при выборе модели для работы на вашем устройстве — это понимание того, насколько большой модель поместится в память вашего текущего устройства (например, при загрузке модели на CUDA или XPU).

Чтобы облегчить эту задачу, в Accelerate есть интерфейс командной строки через accelerate estimate-memory. В этом руководстве мы покажем, как им пользоваться, чего ожидать, а в конце дадим ссылку на интерактивную демонстрацию на Hub, где можно даже опубликовать полученные результаты прямо в репозитории модели!

В настоящее время мы поддерживаем поиск моделей, которые можно использовать в timm и transformers.

Этот API загружает модель в память на устройстве meta, поэтому мы фактически не скачиваем и не загружаем полные веса модели в память, и в этом нет необходимости. В результате можно без проблем работать с моделями на 8 миллиардов параметров (или больше), не беспокоясь о том, справится ли с этим ваша CPU!

Демо на Gradio

Ниже приведены несколько демонстраций на gradio, связанных с описанным выше. Первая — это официальное пространство Hugging Face для оценки памяти, использующее Accelerate напрямую:

Один из участников сообщества развил эту идею, добавив возможность напрямую фильтровать модели и проверять, можно ли запустить конкретную LLM с учётом ограничений GPU и конфигураций LoRA. Чтобы попробовать, см. здесь для получения подробностей.

Команда

При использовании accelerate estimate-memory необходимо указать имя модели, которую вы хотите использовать, при необходимости — фреймворк, в котором работает эта модель (если он не определяется автоматически), а также типы данных, в которых модель должна быть загружена.

Например, вот как можно рассчитать объём занимаемой памяти для bert-base-cased:

accelerate estimate-memory bert-base-cased

Это загрузит config.json для bert-based-cased, загрузит модель на устройство meta и сообщит, сколько места она займёт:

Использование памяти при загрузке bert-base-cased:

dtypeСамый большой слойОбщий размерОбучение с использованием Adam
float3284,95 МБ418,18 МБ1,61 ГБ
float1642,47 МБ206,59 МБ826.36 МБ
int821,24 МБ103,29 МБ413,18 МБ
int410,62 МБ51,65 МБ206,59 МБ

По умолчанию возвращаются все поддерживаемые dtypes (от int4 до float32), но при необходимости можно отфильтровать конкретные типы.

Определённые библиотеки

Если исходную библиотеку невозможно определить автоматически (как это возможно в случае с bert-base-cased), можно передать имя библиотеки.

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

Использование памяти при загрузке HuggingFaceM4/idefics-80b-instruct:

dtypeСамый большой слойОбщий размерОбучение с использованием Adam
float323,02 ГБ297,12 ГБ1,16 ТБ
float161,51 ГБ148,56 ГБ594.24 ГБ
int8772.52 МБ74,28 ГБ297,12 ГБ
int4386,26 МБ37,14 ГБ148,56 ГБ
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm

Использование памяти при загрузке timm/resnet50.a1_in1k:

dtypeСамый большой слойОбщий размерОбучение с использованием Adam
float329,0 МБ97,7 МБ390.78 МБ
float164,5 МБ48,85 МБ195,39 МБ
int82,25 МБ24,42 МБ97,7 МБ
int41,12 МБ12,21 МБ48,85 МБ

Конкретные dtypes

Как уже упоминалось, по умолчанию мы возвращаем значения в диапазоне от int4 до float32, но можно использовать любой тип данных: float32, float16, int8 и int4.

Для этого передайте их после указания --dtypes:

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

Использование памяти при загрузке bert-base-cased:

dtypeСамый большой слойОбщий размерОбучение с использованием Adam
float3284,95 МБ413,18 МБ1,61 ГБ
float1642,47 МБ206,59 МБ826.36 МБ

Ограничения этого калькулятора

Этот калькулятор покажет, сколько памяти требуется для простой загрузки модели, а не для выполнения инференса.

Этот расчёт точен с погрешностью в несколько процентов от фактического значения, поэтому он даёт очень хорошее представление о том, сколько памяти потребуется. Например, загрузка bert-base-cased на CUDA в полной точности фактически занимает 413.68 MB, а калькулятор оценивает 413.18 MB.

При выполнении инференсинга следует ожидать увеличение времени на 20%, как было установлено EleutherAI. Мы проводим исследование для получения более точной оценки этих значений и обновим этот калькулятор по его завершении.

Update on GitHub