В этом посте мы демонстрируем тонкую настройку модели Llama 2 с использованием метода точной настройки с учетом параметров (PEFT) и развертываем точно настроенную модель на AWS Inferentia2. Мы используем комплект разработки программного обеспечения (SDK) AWS Neuron для доступа к устройству AWS Inferentia2 и получения преимуществ от его высокой производительности. Затем мы используем большой контейнер вывода моделей на базе Глубокая библиотека Java (DJLServing) в качестве нашего решения для модельного обслуживания.
Обзор решения
Эффективная точная настройка Llama2 с использованием QLoRa
Семейство больших языковых моделей (LLM) Llama 2 представляет собой набор предварительно обученных и точно настроенных генеративных текстовых моделей с масштабом от 7 до 70 миллиардов параметров. Llama 2 был предварительно обучен на 2 триллионах токенов данных из общедоступных источников. Клиенты AWS иногда предпочитают точнее настраивать модели Llama 2, используя собственные данные клиентов, чтобы добиться более высокой производительности при выполнении последующих задач. Однако из-за большого количества параметров модели Llama 2 полная точная настройка может оказаться непомерно дорогой и трудоемкой. Подход с эффективной точной настройкой параметров (PEFT) может решить эту проблему путем точной настройки небольшого количества дополнительных параметров модели, одновременно замораживая большинство параметров предварительно обученной модели. Дополнительную информацию о PEFT можно прочитать здесь. почта. В этом посте мы используем QLoRa для доводки модели Llama 2 7B.
Разверните точно настроенную модель на Inf2 с помощью Amazon SageMaker.
AWS Inferentia2 — это специально созданный ускоритель машинного обучения (ML), предназначенный для рабочих нагрузок вывода и обеспечивающий высокую производительность при снижении затрат до 40 % для рабочих нагрузок генеративного искусственного интеллекта и LLM по сравнению с другими экземплярами, оптимизированными для вывода, на AWS. В этой статье мы используем экземпляр Amazon Elastic Compute Cloud (Amazon EC2) Inf2 с AWS Inferentia2, ускорителями Inferentia2 второго поколения, каждый из которых содержит два NeuronCores-v2. Каждый NeuronCore-v2 представляет собой независимый гетерогенный вычислительный блок с четырьмя основными ядрами: тензорными, векторными, скалярными и GPSIMD. Он включает в себя встроенную SRAM-память, управляемую программным обеспечением, для обеспечения максимальной локальности данных. Поскольку об Inf2 было опубликовано несколько блогов, читатель может обратиться к этому сообщению и нашему документация для получения дополнительной информации об Inf2.
Для развертывания моделей на Inf2 нам понадобится AWS Neuron SDK в качестве программного уровня, работающего поверх оборудования Inf2. AWS Neuron — это SDK, используемый для выполнения рабочих нагрузок глубокого обучения на экземплярах на базе AWS Inferentia и AWS Trainium. Это обеспечивает сквозной жизненный цикл разработки машинного обучения для создания новых моделей, обучения и оптимизации этих моделей, а также их развертывания в производстве. AWS Neuron включает в себя глубокое обучение компилятор, время выполненияи инструменты которые изначально интегрированы с популярными фреймворками, такими как TensorFlow и PyTorch. В этом блоге мы будем использовать transformers-neuronx
, который является частью AWS Neuron SDK для рабочих процессов вывода декодера преобразователя. Это поддерживает ряд популярных моделей, включая Llama 2.
Для развертывания моделей в Amazon SageMaker мы обычно используем контейнер, содержащий необходимые библиотеки, такие как Neuron SDK и transformers-neuronx
а также компонент обслуживания модели. Amazon SageMaker поддерживает контейнеры глубокого обучения (DLC) с популярными библиотеками с открытым исходным кодом для размещения больших моделей. В этом посте мы используем Контейнер вывода большой модели для нейрона. В этом контейнере есть все необходимое для развертывания модели Llama 2 на Inf2. Ресурсы для начала работы с LMI в Amazon SageMaker можно найти во многих наших существующих публикациях (блог 1, блог 2, блог 3) по этой теме. Короче говоря, вы можете запустить контейнер без написания дополнительного кода. Вы можете использовать обработчик по умолчанию для более удобного взаимодействия с пользователем и передайте одно из поддерживаемых названий моделей и любые настраиваемые параметры времени загрузки. Это компилирует и обслуживает LLM на экземпляре Inf2. Например, для развертывания OpenAssistant/llama2-13b-orca-8k-3319
вы можете предоставить следующую конфигурацию (как serving.properties
файл). В serving.properties
мы указываем тип модели как llama2-13b-orca-8k-3319
, размер пакета — 4, степень параллелизма тензора — 2, и все. Полный список настраиваемых параметров см. Все варианты конфигурации DJL.
Альтернативно вы можете написать свой собственный файл обработчика модели, как показано в этом документе. примерно для этого требуется реализация методов загрузки модели и вывода, которые будут служить мостом между API-интерфейсами DJLServing.
Предварительные условия
В следующем списке представлены предварительные условия для развертывания модели, описанной в этой записи блога. Вы можете реализовать это либо из консоли управления AWS, либо с помощью последней версии интерфейса командной строки AWS (AWS CLI).
Прохождение
В следующем разделе мы рассмотрим код, разделенный на две части:
- Точная настройка модели Llama2-7b и загрузка артефактов модели в указанное расположение корзины Amazon S3.
- Разверните модель в Inferentia2 с помощью обслуживающего контейнера DJL, размещенного в Amazon SageMaker.
Полные примеры кода с инструкциями можно найти в этом GitHub хранилище.
Часть 1. Точная настройка модели Llama2-7b с помощью PEFT.
Мы собираемся использовать недавно представленный в статье метод. QLoRA: настройка адаптера низкого ранга с учетом квантования для генерации языка Тим Деттмерс и др. QLoRA — это новый метод, позволяющий уменьшить объем памяти больших языковых моделей во время тонкой настройки без ущерба для производительности.
Примечание: Точная настройка модели llama2-7b, показанная ниже, была протестирована на ноутбуке Amazon SageMaker Studio с ядром, оптимизированным для графического процессора Python 2.0, с использованием мл.г5.2xбольшой тип экземпляра. Мы рекомендуем использовать интегрированную среду разработки (IDE) Amazon SageMaker Studio, запущенную в вашем собственном виртуальном частном облаке Amazon (Amazon VPC). Это позволяет вам контролировать, отслеживать и проверять сетевой трафик внутри и за пределами вашего VPC, используя стандартные возможности сети и безопасности AWS. Дополнительную информацию см. в разделе «Защита подключения к Amazon SageMaker Studio с помощью частного VPC».
Квантовать базовую модель
Сначала мы загружаем квантованную модель с 4-битным квантованием, используя Трансформеры Huggface библиотека следующим образом:
Загрузить набор обучающих данных
Затем мы загружаем набор данных, чтобы передать модель для этапа точной настройки, как показано ниже:
Прикрепите слой-адаптер
Здесь мы прикрепляем небольшой обучаемый слой адаптера, настроенный как ЛораКонфиг определяется в Обнимающем Лице пефт библиотека.
Обучение модели
Используя конфигурацию LoRA, показанную выше, мы настроим модель Llama2 вместе с гиперпараметрами. Фрагмент кода для обучения модели показан ниже:
Объединить вес модели
Точная настройка модели, выполненная выше, создала новую модель, содержащую обученные веса адаптера LoRA. В следующем фрагменте кода мы объединим адаптер с базовой моделью, чтобы можно было использовать точно настроенную модель для вывода.
Загрузите вес модели в Amazon S3.
На последнем этапе первой части мы сохраним веса объединенной модели в указанном месте Amazon S3. Вес модели будет использоваться контейнером обслуживания модели в Amazon SageMaker для размещения модели с использованием экземпляра Inferentia2.
Часть 2. Хост-модель QLoRA для вывода с помощью AWS Inf2 с использованием контейнера SageMaker LMI
В этом разделе мы рассмотрим этапы развертывания точно настроенной модели QLoRA в среде хостинга Amazon SageMaker. Мы будем использовать DJL-сервировка контейнер от SageMaker DLCкоторый интегрируется с трансформеры-нейронкс библиотека для размещения этой модели. Эта установка облегчает загрузку моделей в ускорители AWS Inferentia2, распараллеливает модель на нескольких нейронных ядрах и обеспечивает обслуживание через конечные точки HTTP.
Подготовьте артефакты модели
DJL поддерживает множество библиотек оптимизации глубокого обучения, включая DeepSpeed, FasterTransformer и другие. Для конкретных конфигураций модели мы предоставляем serving.properties
с ключевыми параметрами, такими как tensor_parallel_degree
и model_id
определить параметры загрузки модели. model_id
это может быть идентификатор модели Hugging Face или путь Amazon S3, где хранятся веса моделей. В нашем примере мы указываем местоположение нашей точно настроенной модели на Amazon S3. В следующем фрагменте кода показаны свойства, используемые для обслуживания модели:
Пожалуйста, обратитесь к этому документация для получения дополнительной информации о настраиваемых параметрах, доступных через serving.properties
. Обратите внимание, что мы используем option.n_position=512
в этом блоге для более быстрой компиляции AWS Neuron. Если вы хотите попробовать большую длину входного токена, мы рекомендуем читателю заранее скомпилировать модель (см. Модель предварительной компиляции AOT в EC2). В противном случае вы можете столкнуться с ошибкой тайм-аута, если время компиляции слишком велико.
После serving.properties
файл определен, мы упакуем его в tar.gz
формате, следующим образом:
Затем мы загрузим tar.gz в корзину Amazon S3:
Создайте конечную точку модели Amazon SageMaker.
Чтобы использовать для обслуживания экземпляр Inf2, мы используем LMI-контейнер Amazon SageMaker с поддержкой DJL NeuronX. Пожалуйста, обратитесь к этому сообщению для получения дополнительной информации об использовании контейнера DJL NeuronX для вывода. Следующий код показывает, как развернуть модель с помощью Amazon SageMaker Python SDK:
Конечная точка тестовой модели
После успешного развертывания модели мы можем проверить конечную точку, отправив образец запроса предиктору:
Пример вывода показан следующим образом:
В контексте анализа данных машинное обучение (МО) относится к статистическому методу, способному извлекать прогностическую силу из набора данных с возрастающей сложностью и точностью путем итеративного сужения области статистики.
Машинное обучение — это не новый статистический метод, а скорее комбинация существующих методов. Более того, он не предназначен для использования с конкретным набором данных или для получения конкретного результата. Скорее, он был разработан так, чтобы быть достаточно гибким, чтобы адаптироваться к любому набору данных и делать прогнозы относительно любого результата.
Очистить
Если вы решите, что больше не хотите, чтобы конечная точка SageMaker работала, вы можете удалить ее с помощью AWS SDK для Python (boto3), AWS CLI или консоли Amazon SageMaker. Кроме того, вы также можете отключить ресурсы Amazon SageMaker Studio, которые больше не нужны.
Заключение
В этом посте мы показали вам, как точно настроить модель Llama2-7b с помощью адаптера LoRA с 4-битным квантованием с использованием одного экземпляра графического процессора. Затем мы развернули модель на экземпляре Inf2, размещенном в Amazon SageMaker, с помощью обслуживающего контейнера DJL. Наконец, мы проверили конечную точку модели Amazon SageMaker с помощью прогноза генерации текста с помощью SageMaker Python SDK. Попробуйте, мы будем рады услышать ваши отзывы. Следите за обновлениями о дополнительных возможностях и новых инновациях AWS Inferentia.
Дополнительные примеры об AWS Neuron см. aws-нейрон-образцы.
Об авторах
Вэй Дэ — старший специалист по архитектуре решений AI/ML в AWS. Он с энтузиазмом помогает клиентам продвигать их путь к AWS, уделяя особое внимание сервисам машинного обучения Amazon и решениям на основе машинного обучения. Вне работы он любит активный отдых на свежем воздухе, например, кемпинг, рыбалку и пешие походы со своей семьей.
Цинвея Ли — специалист по машинному обучению в Amazon Web Services. Он получил докторскую степень. в области исследования операций после того, как он сломал счет гранта на исследования своего советника и не смог выплатить обещанную Нобелевскую премию. В настоящее время он помогает клиентам в сфере финансовых услуг и страхования создавать решения машинного обучения на AWS. В свободное время он любит читать и преподавать.