Бенчмарк локальных моделей LLM
История создания
Я создал LLM Speed Benchmark (LLMSB) во время моей работы в качестве стажёра-инженера на неполную ставку в Anarchy (YC W23). LLMSB — это инструмент бенчмаркинга для оценки производительности модели LLM. Он использует библиотеку HuggingFace transformers для загрузки и запуска модели LLM и измеряет:
- общее время выполнения
- токенов в секунду
- общие характеристики аппаратного обеспечения
- использование CPU (текущая частота и процент использования ядер во времени)
- использование RAM (RAM и swap во времени)
- использование GPU (нагрузка, использование памяти и температура во времени)
ЗДЕСЬ находится пример прогона бенчмарка для модели codellama-13b-oasst-sft-v10, запущенной на H100. Лично я владею Nvidia RTX 2070 Ti, у которой 8 ГБ VRAM. К сожалению, для большинства современных моделей LLM 8 ГБ VRAM недостаточно, чтобы работать с моделью. Из-за этого я использовал RunPod, чтобы «арендовать» GPU и запускать мои бенчмарки на определённых моделях.
Это была предыстория/история появления LLMSB. Поскольку проект с открытым исходным кодом, вы можете посмотреть код ЗДЕСЬ. Ниже я включил README из репозитория, если вы захотите с ним ознакомиться.
О проекте
🚧 LLM Speed Benchmark (LLMSB) в настоящее время находится в бета-версии (v0). Пожалуйста, не используйте это в продакшене, либо используйте на свой страх и риск. Мы всё ещё устраняем некоторые недочёты и улучшаем функциональность. Если вы столкнётесь с багами или у вас есть предложения, пожалуйста, сообщайте о них в ISSUES. Ваши отзывы бесценны!
LLM Speed Benchmark (LLMSB) — это инструмент бенчмаркинга для оценки производительности моделей LLM на различных аппаратных платформах. Его конечная цель — собрать исчерпывающий набор данных, описывающий производительность моделей LLM на различных системах, что позволит пользователям более эффективно выбирать подходящие модели LLM для своих проектов.
Ограничения
LLMSB находится в версии v0, поэтому у него есть ограничения:
- Предназначен только для запуска на операционных системах на базе Debian, то есть не предназначен для работы в Windows. Это связано с тем, что LLMSB использует neofetch и nvidia-smi для сбора метрик «под капотом», а логика путей к файлам основана на Unix-операционных системах.
- Из-за того, как записываются метрики, сборщику метрик может потребоваться до 1 секунды на одну итерацию сбора. Это означает, что в лучшем случае мы можем собирать аппаратные метрики каждые 1 секунду.
- LLMSB использует только HuggingFace для загрузки и запуска моделей. Сейчас это работает, но цель состоит в том, чтобы LLMSB поддерживал несколько фреймворков, а не только HuggingFace.
- В настоящее время все модели запускаются через логику, представленную в функции run_llm(), расположенной в src/hf.py, где используются функции AutoTokenizer() и AutoModelForCausalLM() для загрузки и запуска модели. Это работает, но ограничивает то, как мы можем настраивать/оптимизировать конкретные модели. Учитывая это, цель — создать отдельные классы для каждой популярной модели и вместо этого использовать специфичные для моделей классы HuggingFace, такие как LlamaTokenizer и LlamaForCausalLM.
- LLMSB собирает только общие, высокоуровневые метрики. В будущем мы хотели бы собирать метрики более низкого уровня. Мы считаем, что это частично можно сделать с помощью обёртки профилировщика Pytorch.
Примеры вывода
22 ноября 2023
LLMSB был запущен/протестирован на GPU L40 и H100 через RunPod. В этих бенчмарках были протестированы модели llama-2-7b-hf, codellama-13b-oasst-sft-v10 и mpt-7b. Ознакомьтесь с результатами ЗДЕСЬ. Если замечены какие-либо ошибки/проблемы, пожалуйста, сообщайте о них в ISSUES.
Настройка
-
Создайте и активируйте окружение Python:
python3 -m venv env source env/bin/activate -
Установите зависимости пакетов (используя APT):
apt -y update apt install -y vim apt install -y neofetch -
Установите зависимости Python:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
Установите Pytorch
# install pytorch stable build, for linux, using CUDA 12.1: pip3 install torch torchvision torchaudio -
Установите LLM-VM:
pip install llm-vm -
(необязательно) Если вы используете модели вроде LLAMA, вам понадобится токен доступа HuggingFace. Настройте ваш токен доступа ЗДЕСЬ, затем сохраните токен в своей консоли, выполнив следующую команду:
huggingface-cli login
Как запустить
-
Выполните шаги, перечисленные в разделе Настройка.
-
Чтобы настроить свой набор, вам нужно создать JSON-файл со следующими параметрами (вот пример):
- ПРИМЕЧАНИЕ: не каждый фреймворк поддерживает одни и те же параметры
{ "model": "bigscience/bloom-560m", # the model's path/repo on HuggingFace (https://huggingface.co/models) "prompt": "Hello World!", # the prompt you want to input into the LLM model "device": "cuda:0", # the device you want to run the LLM model on (GPU/CPU) "max_length": 50, # the maximun length of the generated tokens "temperature": 0.9, # temperatue value for the LLM model "top_k": 50, # top-k value for the LLM model "top_p": 0.9, # top-p value for the LLM model "num_return_sequences": 1, # the number of independently ran instances of the model "time_delay": 0, # the time delay (seconds) the metrics-collecter will wait per interation "model_start_pause": 1, # the time (seconds) the test will wait BEFORE running the LLM model "model_end_pause": 1 # the time (seconds) the test will wait AFTER the LLM model is done running, "framework": "llm-vm" # the name of the framework/library you want to use to run the model } -
Используя путь к файлу конфигурации, который вы создали на предыдущем шаге, выполните следующее, чтобы запустить бенчмарк (выберите один вариант):
# run one benchmark python3 run.py --config ./configs/llmvm_test.json # run more then one benchmark (in this case 3) python3 run.py --config ./configs/llmvm_test.json --loops 3 -
После завершения прогона бенчмарка проверьте финальные результаты в файле, который должен выглядеть примерно так:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
Настройка RunPod:
-
Настройте RunPod, настройте ваш ssh-сертификат/ключ и запустите pod. Вы можете получить доступ к вашему pod(ам) на странице консоли RunPod.
-
Нажмите кнопку “Connect”, чтобы получить информацию для SSH-подключения. Эта информация должна выглядеть примерно так:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
Эта команда будет отформатирована вот так:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
Используя команду из шага #2, вы должны иметь возможность подключиться по SSH к pod и использовать выбранный вами GPU в этом pod RunPod.
-
Если вы хотите скопировать файл с pod на локальную машину, вы выполните команду в таком формате (это относится к переменным, показанным в шаге #2):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>-
Вот пример такой команды:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
После того как вы закончите с pod, выключите его или приостановите. Но предупреждение: если вы приостановите его, с вас всё равно будут взимать плату, просто намного меньше.
Отличные источники:
- Наборы данных для промптов: awesome-chatgpt-prompts, bigscience/P3 и writing-prompts
- Узнать больше о параметрах LLM
- Отличный бенчмарк для бенчмаркинга облачных моделей LLM
- Классные рейтинговые таблицы интеллектуальных возможностей LLM: FastEval и open_llm_leaderboard