Бенчмаркинг локальных LLM моделей

GitHub репозиторий проекта

Предыстория

Я создал LLM Speed Benchmark (LLMSB) во время своей работы стажером-инженером в Anarchy (YC W23). LLMSB — это инструмент бенчмаркинга для оценки производительности модели LLM. Он использует библиотеку HuggingFace transformers для загрузки и запуска модели LLM и измеряет:

  • общее время выполнения
  • токены в секунду
  • общие характеристики аппаратного обеспечения
  • использование процессора (текущая частота и % использования ядер с течением времени)
  • использование оперативной памяти (оперативная память и своп со временем)
  • использование графического процессора (нагрузка, использование памяти и температура со временем)

ЗДЕСЬ приведен пример бенчмарка для модели codellama-13b-oasst-sft-v10, работающей на H100. Лично я владею Nvidia RTX 2070 Ti, у которой 8 ГБ видеопамяти. К сожалению, для большинства современных моделей LLM 8 ГБ видеопамяти недостаточно для работы с моделью. Из-за этого я использовал 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.

Установка

  1. Создайте и активируйте окружение Python:

    python3 -m venv env
    source env/bin/activate
    
  2. Установите зависимости пакетов (с помощью APT):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. Установите зависимости Python:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Установите Pytorch

    # установить стабильную сборку pytorch для linux с использованием CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. Установите LLM-VM:

    pip install llm-vm
    
  6. (по желанию) Если вы используете модели, такие как LLAMA, вам понадобится токен доступа HuggingFace. Настройте свой токен доступа ЗДЕСЬ, а затем сохраните свой токен в консоли, выполнив следующую команду:

    huggingface-cli login
    

Как запустить

  1. Выполните шаги, перечисленные в разделе Установка.

  2. Чтобы настроить свой набор, вам нужно создать файл json с следующими параметрами (вот пример):

    • ПРИМЕЧАНИЕ: не каждый фреймворк поддерживает одни и те же параметры
    {
      "model": "bigscience/bloom-560m",   # путь/репозиторий модели на HuggingFace (https://huggingface.co/models)
      "prompt": "Hello World!",           # подсказка, которую вы хотите ввести в модель LLM
      "device": "cuda:0",                 # устройство, на котором вы хотите запустить модель LLM (GPU/CPU)
      "max_length": 50,                   # максимальная длина сгенерированных токенов
      "temperature": 0.9,                 # значение температуры для модели LLM
      "top_k": 50,                        # значение top-k для модели LLM
      "top_p": 0.9,                       # значение top-p для модели LLM
      "num_return_sequences": 1,          # количество независимо запущенных экземпляров модели
      "time_delay": 0,                    # задержка времени  секундах), которую сборщик метрик будет ждать за итерацию
      "model_start_pause": 1,             # время  секундах), которое тест будет ждать ПЕРЕД запуском модели LLM
      "model_end_pause": 1                # время  секундах), которое тест будет ждать ПОСЛЕ завершения работы модели LLM,
      "framework": "llm-vm"               # название фреймворка/библиотеки, которую вы хотите использовать для запуска модели
    }
    
  3. Используя путь к конфигурационному файлу, который вы создали на предыдущем шаге, выполните следующее, чтобы начать бенчмарк (выберите один вариант):

    # запустить один бенчмарк
    python3 run.py --config ./configs/llmvm_test.json
    
    # запустить более одного бенчмарка (в данном случае 3)
    python3 run.py --config ./configs/llmvm_test.json --loops 3
    
  4. После завершения бенчмарка проверьте окончательные результаты в файле, который должен выглядеть примерно так:

    report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
    

Настройка RunPod:

  1. Настройте RunPod, настройте свой ssh сертификат/ключ и запустите под. Вы можете получить доступ к своим подам на Консольной странице RunPod.

  2. Нажмите кнопку “Подключиться”, чтобы получить информацию о 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>
      
  3. Используя команду из шага #2, вы должны иметь возможность подключиться к поду и использовать GPU, который вы выбрали в этом поде RunPod.

  4. Если вы хотите скопировать файл из пода на свой локальный компьютер, выполните команду в следующем формате (это относится к переменным, показанным в шаге #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/
      
  5. После завершения работы с подом, выключите его или приостановите. Но предупреждение: если вы приостановите его, вы все равно будете получать счета, просто значительно меньше.

Отличные источники: