LLM Швидкісний Бенчмарк
Передісторія
Я створив 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.
Налаштування
-
Створіть та активуйте 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’s Console Page.
-
Натисніть кнопку “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, який ви обрали у цьому RunPod pod.
-
Якщо ви хочете скопіювати файл з 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