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

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

История создания

Я создал 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.

Настройка

  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

    # install pytorch stable build, for linux, using 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",   # 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
    }
    
  3. Используя путь к файлу конфигурации, который вы создали на предыдущем шаге, выполните следующее, чтобы запустить бенчмарк (выберите один вариант):

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

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

Настройка RunPod:

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

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

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

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