LLM Швидкісний Бенчмарк

GitHub репозиторій проєкту

Передісторія

Я створив LLM Speed Benchmark (LLMSB) під час роботи неповний робочий день інженерним стажером у Anarchy (YC W23). LLMSB — це інструмент бенчмаркінгу для оцінки продуктивності моделі LLM. Він використовує бібліотеку [transformers] від HuggingFace для завантаження та запуску моделі 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 секунди на збір. Це означає, що в найшвидшому випадку ми можемо збирати апаратні метрики кожну секунду.
  • LLMSB використовує лише HuggingFace для завантаження та запуску моделей. Поки це працює, але мета — підтримка кількох фреймворків, а не лише 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’s Console Page.

  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, який ви обрали у цьому RunPod pod.

  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, вимкніть його або призупиніть. Але зауважте, що при призупиненні ви все одно будете платити, лише значно менше.

Корисні Джерела: