Gradient делает бенчмаркинг LLM экономичным и простым с помощью AWS Inferentia | Веб-сервисы Amazon

Gradient делает бенчмаркинг LLM экономичным и простым с помощью AWS Inferentia | Веб-сервисы Amazon

Это гостевой пост, написанный совместно с Майклом Фейлом из Gradient.

Оценка производительности больших языковых моделей (LLM) — важный этап процесса предварительного обучения и тонкой настройки перед развертыванием. Чем быстрее и чаще вы сможете проверять производительность, тем выше вероятность, что вы сможете улучшить производительность модели.

At Градиент, мы работаем над индивидуальной разработкой LLM и совсем недавно запустили нашу Лаборатория разработки искусственного интеллекта, предлагая корпоративным организациям персонализированные комплексные услуги по разработке для создания частных индивидуальных LLM и вторых пилотов искусственного интеллекта (ИИ). В рамках этого процесса мы регулярно оцениваем производительность наших моделей (настроенных, обученных и открытых) по открытым и проприетарным тестам. Работая с командой AWS над обучением наших моделей AWS Трениум, мы поняли, что мы ограничены как видеопамятью, так и доступностью экземпляров графического процессора, когда дело дошло до основного инструмента для оценки LLM, lm-оценка-жгут. Эта платформа с открытым исходным кодом позволяет оценивать различные модели генеративного языка для различных задач оценки и тестов. Он используется в таблицах лидеров, таких как Обнимая лицо для публичного сравнительного анализа.

Чтобы преодолеть эти проблемы, мы решили создать и открыть исходный код нашего решения, интегрируя АВС Нейрон, библиотека позади Вывод AWS и Трейниум, в lm-evaluation-harness. Эта интеграция позволила оценить v-alpha-tross, ранняя версия нашей модели Альбатроса., по сравнению с другими публичными моделями во время процесса обучения и после него.

В контексте, эта интеграция выполняется как новый класс модели в lm-evaluation-harness, абстрагируя вывод токенов и логарифмическую оценку последовательностей, не затрагивая фактическую задачу оценки. Решение о переносе нашего внутреннего конвейера тестирования на Эластичное вычислительное облако Amazon (Амазон EC2) Инстансы Inf2 (на базе AWS Inferentia2) позволил нам получить доступ к общей памяти ускорителя объемом до 384 ГБ, что позволяет без труда соответствовать всем нашим текущим общедоступным архитектурам. Используя спотовые инстансы AWS, мы смогли воспользоваться неиспользуемыми мощностями EC2 в облаке AWS, что позволило сэкономить до 90 % средств со скидкой по сравнению с ценами по требованию. Это свело к минимуму время, необходимое для тестирования, и позволило нам проводить тестирование чаще, поскольку мы могли тестировать несколько экземпляров, которые были легко доступны, и выпускать экземпляры по завершении.

В этом посте мы даем подробное описание наших тестов, проблем, с которыми мы столкнулись, а также пример использования средств тестирования на AWS Inferentia.

Бенчмаркинг на AWS Inferentia2

Целью этого проекта было получение идентичных оценок, как показано на рисунке. Открыть таблицу лидеров LLM (для многих моделей CausalLM, доступных на Hugging Face), сохраняя при этом гибкость для сравнения с частными тестами. Дополнительные примеры доступных моделей см. AWS Inferentia и Trainium на обнимающемся лице.

Изменения кода, необходимые для переноса модели из трансформеров Hugging Face в Hugging Face. Оптимальный нейрон Библиотека Python была довольно низкой. Поскольку lm-evaluation-harness использует AutoModelForCausalLM, происходит падение замены при использовании NeuronModelForCausalLM. Без предварительно скомпилированной модели она автоматически компилируется в данный момент, что может добавить к работе 15–60 минут. Это дало нам возможность развертывать тестирование для любого экземпляра AWS Inferentia2 и поддерживать модель CausalLM.

Итоги

Из-за особенностей работы тестов и моделей мы не ожидали, что результаты будут точно совпадать в разных запусках. Однако они должны быть очень близки по стандартному отклонению, и мы постоянно это наблюдаем, как показано в следующей таблице. Все первоначальные тесты, которые мы проводили на AWS Inferentia2, были подтверждены таблицей лидеров Hugging Face.

In lm-evaluation-harness, в разных тестах используются два основных потока: generate_until и loglikelihood. Тест gsm8k в основном использует generate_until для генерации ответов так же, как во время вывода. Loglikelihood в основном используется при сравнительном анализе и тестировании и исследует вероятность получения различных результатов. Оба работают в Neuron, но loglikelihood Метод в SDK 2.16 использует дополнительные шаги для определения вероятностей и может занять дополнительное время.

Lm-оценка-обвязка Результаты
Конфигурация оборудования Оригинальная система AWS Inferentia inf2.48xlarge
Время с пакетным размером = 1 для оценки mistralai/Mistral-7B-Instruct-v0.1 на gsm8k 103 минут 32 минут
Оценка на gsm8k (получение-ответ — точное_совпадение со стандартом) 0.3813 – 0.3874 (± 0.0134) 0.3806 – 0.3844 (± 0.0134)

Начало работы с Neuron и lm-evaluation-harness

Код в этом разделе может помочь вам использовать lm-evaluation-harness и протестируйте его на поддерживаемых моделях на Hugging Face. Чтобы просмотреть некоторые доступные модели, посетите AWS Inferentia и Trainium на обнимающемся лице.

Если вы знакомы с запуском моделей на AWS Inferentia2, вы можете заметить, что здесь нет num_cores передана настройка. Наш код определяет, сколько ядер доступно, и автоматически передает это число в качестве параметра. Это позволяет запускать тест с использованием одного и того же кода независимо от размера используемого экземпляра. Вы также можете заметить, что мы ссылаемся на исходную модель, а не на скомпилированную версию Neuron. При необходимости программа автоматически компилирует модель.

Следующие шаги покажут вам, как развернуть градиент. gradientai/v-alpha-tross модель, которую мы тестировали. Если вы хотите протестировать меньший пример на меньшем экземпляре, вы можете использовать команду mistralai/Mistral-7B-v0.1 модели.

  1. Квота по умолчанию для запуска экземпляров Inf по требованию равна 0, поэтому вам следует запросить увеличение с помощью квот обслуживания. Добавьте еще один запрос для всех запросов спотовых инстансов Inf, чтобы можно было протестировать их с помощью спотовых инстансов. Для этого примера вам потребуется квота в 192 виртуальных ЦП с использованием экземпляра inf2.48xlarge или квота в 4 виртуальных ЦП для базового экземпляра inf2.xlarge (если вы развертываете модель Mistral). Квоты зависят от региона AWS, поэтому обязательно отправляйте запрос в us-east-1 or us-west-2.
  2. Определитесь с экземпляром, исходя из вашей модели. Потому что v-alpha-tross Это архитектура 70B, мы решили использовать экземпляр inf2.48xlarge. Разверните файл inf2.xlarge (для модели 7B Mistral). Если вы тестируете другую модель, вам может потребоваться настроить экземпляр в зависимости от размера вашей модели.
  3. Разверните экземпляр с помощью Обнимающее лицо DLAMI версия 20240123, чтобы были установлены все необходимые драйверы. (Указанная цена включает стоимость экземпляра и не требует дополнительной платы за программное обеспечение.)
  4. Настройте размер диска на 600 ГБ (100 ГБ для Mistral 7B).
  5. Клонировать и установить lm-evaluation-harness на экземпляре. Мы указываем сборку, чтобы знать, что любые отклонения связаны с изменениями модели, а не с изменениями тестов или кода.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. Run lm_eval с типом модели hf-neuron и убедитесь, что у вас есть ссылка на обратный путь к модели на Hugging Face:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

Если вы запустите предыдущий пример с помощью Mistral, вы должны получить следующий результат (на меньшем файле inf2.xlarge запуск может занять 250 минут):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

Убирать

Когда вы закончите, обязательно остановите экземпляры EC2 через консоль Amazon EC2.

Заключение

Команды Gradient и Neuron рады видеть более широкое внедрение оценки LLM в этом выпуске. Попробуйте сами и запустите самую популярную среду оценки на экземплярах AWS Inferentia2. Теперь вы можете воспользоваться доступностью AWS Inferentia2 по требованию при использовании индивидуальная разработка LLM от Gradient. Начните размещать модели на AWS Inferentia с помощью этих учебные пособия.


Об авторах

Gradient делает бенчмаркинг LLM экономичным и простым с помощью AWS Inferentia | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Майкл Фейл — инженер по искусственному интеллекту в Gradient, ранее работал инженером по машинному обучению в Rodhe & Schwarz и исследователем в Институте интеллектуальных систем Макса-Планка и Bosch Rexroth. Майкл является ведущим автором различных библиотек вывода с открытым исходным кодом для студентов LLM и проектов с открытым исходным кодом, таких как StarCoder. Майкл получил степень бакалавра в области мехатроники и информационных технологий в KIT и степень магистра в области робототехники в Техническом университете Мюнхена.

Gradient делает бенчмаркинг LLM экономичным и простым с помощью AWS Inferentia | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Джим Бертофт является старшим архитектором решений для стартапов в AWS и напрямую работает с такими стартапами, как Gradient. Джим — CISSP, член технического сообщества AWS AI/ML, представитель Neuron и работает с сообществом разработчиков ПО с открытым исходным кодом, чтобы обеспечить возможность использования Inferentia и Trainium. Джим получил степень бакалавра математики в Университете Карнеги-Меллона и степень магистра экономики в Университете Вирджинии.

Отметка времени:

Больше от Машинное обучение AWS