Оцінка локальних моделей LLM
Передісторія
Я створив LLM Speed Benchmark (LLMSB) під час моєї роботи як стажер-інженер на неповний робочий день в Anarchy (YC W23). LLMSB - це інструмент для оцінки продуктивності моделі LLM. Він використовує бібліотеку HuggingFace transformers для завантаження та запуску моделі LLM і вимірює:
- загальний час виконання
- токени на секунду
- загальні характеристики обладнання
- використання ЦП (поточна частота та відсоток використання ядер з часом)
- використання ОП (ОП та своп з часом)
- використання ГП (навантаження, використання пам’яті та температура з часом)
ТУТ наведено приклад запуску бенчмарку для моделі codellama-13b-oasst-sft-v10, що працює на H100. Я особисто володію Nvidia RTX 2070 Ti, яка має 8 ГБ VRAM. На жаль, для більшості сучасних моделей LLM 8 ГБ VRAM недостатньо для взаємодії з моделлю. Через це я використовував RunPod для “оренди” ГП та запуску моїх бенчмарків на певних моделях.
Це була передісторія/походження 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 для завантаження та запуску моделей. Це працює наразі, але мета полягає в тому, щоб LLMSB підтримував кілька фреймворків, а не лише HuggingFace.
- Наразі всі моделі запускаються через логіку, представлену в функції run_llm(), розташованій у src/hf.py, де використовуються функції AutoTokenizer() та AutoModelForCausalLM() для завантаження та запуску моделі. Це працює, але обмежує, як ми можемо налаштовувати/оптимізувати конкретні моделі. Знаючи це, мета полягає в тому, щоб створити окремі класи для кожної популярної моделі та використовувати специфічні класи моделей HuggingFace, такі як LlamaTokenizer та LlamaForCausalLM.
- LLMSB збирає лише загальні, високорівневі метрики. У майбутньому ми хотіли б збирати метрики нижчого рівня. Ми вважаємо, що це частково можна зробити за допомогою обгортки профайлера Pytorch.
Приклад виходу
22 листопада 2023 року
LLMSB був запущений/перевірений на ГП 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
# встановіть стабільну версію pytorch для linux, використовуючи CUDA 12.1: pip3 install torch torchvision torchaudio -
Встановіть LLM-VM:
pip install llm-vm -
(необов’язково) Якщо ви використовуєте моделі, такі як LLAMA, вам знадобиться токен доступу HuggingFace. Налаштуйте свій токен доступу ТУТ, а потім збережіть свій токен у консолі, виконавши наступну команду:
huggingface-cli login
Як запустити
-
Завершіть кроки, наведені в розділі Налаштування.
-
Щоб налаштувати свій набір, вам потрібно створити файл json з наступними параметрами (ось приклад):
- ЗАУВАЖТЕ: не кожен фреймворк підтримує однакові параметри
{ "model": "bigscience/bloom-560m", # шлях/репозиторій моделі на HuggingFace (https://huggingface.co/models) "prompt": "Привіт, світ!", # запит, який ви хочете ввести в модель LLM "device": "cuda:0", # пристрій, на якому ви хочете запустити модель LLM (ГП/ЦП) "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" # назва фреймворку/бібліотеки, яку ви хочете використовувати для запуску моделі } -
Використовуючи шлях до файлу конфігурації, який ви створили на попередньому кроці, запустіть наступне, щоб почати бенчмарк (виберіть один варіант):
# запустіть один бенчмарк python3 run.py --config ./configs/llmvm_test.json # запустіть більше ніж один бенчмарк (в даному випадку 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 сертифікат/ключ і запустіть под. Ви можете отримати доступ до своїх подів на Консольній сторінці RunPod.
-
Натисніть кнопку “Підключитися”, щоб отримати інформацію про 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, ви повинні мати можливість підключитися до пода та використовувати ГП, який ви вибрали в цьому поді RunPod.
-
Якщо ви хочете скопіювати файл з пода на свій локальний комп’ютер, ви повинні виконати команду в такому форматі (це стосується змінних, показаних у кроці #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/
-
-
Після того, як ви закінчите з подом, вимкніть його або призупиніть. Але зауважте, що якщо ви призупините його, ви все ще будете отримувати рахунок, просто значно менше.
Чудові джерела:
- Набори запитів: awesome-chatgpt-prompts, bigscience/P3, та writing-prompts
- Дізнайтеся більше про параметри LLM
- Чудовий бенчмарк для оцінки моделей LLM на базі хмари
- Круті таблиці лідерів LLM: FastEval та open_llm_leaderboard