Home Машинное обучение Gradient делает бенчмаркинг LLM экономичным и простым с помощью AWS Inferentia | DeepTech

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

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

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

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

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

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

В контексте, эта интеграция выполняется как новый класс модели в lm-evaluation-harness, абстрагируя вывод токенов и логарифмическую оценку последовательностей, не затрагивая фактическую задачу оценки. Решение перенести наш внутренний конвейер тестирования на инстансы Inf2 Amazon Elastic Compute Cloud (Amazon EC2) (на базе 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.

В 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 или us-west-2.
  2. Определитесь с экземпляром, исходя из вашей модели. Потому что v-alpha-tross Это архитектура 70B, мы решили использовать экземпляр inf2.48xlarge. Разверните файл inf2.xlarge (для модели 7B Mistral). Если вы тестируете другую модель, вам может потребоваться настроить экземпляр в зависимости от размера вашей модели.
  3. Разверните экземпляр с помощью Hugging Face 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. Бегать 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, ранее работал инженером по машинному обучению в Rodhe & Schwarz и исследователем в Институте интеллектуальных систем Макса Планка и Bosch Rexroth. Майкл является ведущим автором различных библиотек вывода с открытым исходным кодом для студентов LLM и проектов с открытым исходным кодом, таких как StarCoder. Майкл получил степень бакалавра в области мехатроники и информационных технологий в KIT и степень магистра в области робототехники в Техническом университете Мюнхена.

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here