Развертывание Falcon-40B с DLC для вывода больших моделей на Amazon SageMaker | Веб-сервисы Амазонки

Развертывание Falcon-40B с DLC для вывода больших моделей на Amazon SageMaker | Веб-сервисы Амазонки

На прошлой неделе Институт технологических инноваций (ТИИ) запустили ТИИ Сокол ЛЛМ, базовая модель большого языка (LLM) с открытым исходным кодом. Обучено на 1 трлн токенов с Создатель мудреца Амазонки, Falcon может похвастаться первоклассной производительностью (№1 в Таблица лидеров «Обнимающее лицо» на момент написания), будучи сравнительно легким и менее дорогим для размещения, чем другие LLM, такие как llama-65B. В этом посте мы покажем, как развернуть Falcon для таких приложений, как понимание языка и автоматическая помощь в написании, используя контейнеры глубокого обучения для вывода больших моделей в SageMaker.

Сокол приземлился на SageMaker

TII — организация прикладных исследований в Абу-Даби. Совет по исследованиям передовых технологий; его команда ученых, исследователей и инженеров занимается открытием преобразующих технологий и развитием научных прорывов, которые обеспечат будущее нашему обществу. Ранее в этом году TII приступила к обучению современного LLM с открытым исходным кодом и использовала инфраструктуру, инструменты и опыт SageMaker для выполнения работы (чтобы узнать больше о том, как эта модель была обучена на SageMaker , Ссылаться на Институт технологических инноваций обучает современную базовую модель Falcon LLM 40B на Amazon SageMaker.). Результатом этих усилий является ТИИ Сокол ЛЛМ.

Обученный на 1 триллионе токенов, Falcon может похвастаться первоклассной производительностью по сравнению с Система оценки языковой модели Eleuther AI и в настоящее время № 1 на Таблица лидеров «Обнимающее лицо» для точности. Модель доступна в двух размерах — Falcon-40B и Falcon-7B — и может использоваться для достижения самых современных результатов в таких приложениях, как понимание языка, разговорный опыт и автоматизированная помощь при письме. Этот пост поможет вам приступить к развертыванию Falcon на SageMaker для получения высокоточных логических выводов в таких областях.

DLC для вывода больших моделей SageMaker упрощают хостинг LLM

Размещение LLM, таких как Falcon-40B и Falcon-7B, может оказаться сложной задачей. Более крупные модели часто более точны, поскольку включают миллиарды параметров, но их размер также может привести к меньшей задержке логического вывода или снижению пропускной способности. Размещение LLM может потребовать больше памяти графического процессора и оптимизированных ядер для достижения приемлемой производительности. Еще больше усложняет ситуацию то, что, хотя меньшие модели, такие как Falcon-7B, обычно могут поместиться на одном графическом процессоре, таком как экземпляр NVIDIA A10G, который поддерживает типы экземпляров AWS G5, более крупные модели, такие как Falcon-40B, не могут. Когда это происходит, необходимо использовать такие стратегии, как тензорный параллелизм, чтобы разделить эту более крупную модель на несколько частей и использовать преимущества памяти нескольких графических процессоров. Устаревшие хостинговые решения, используемые для небольших моделей, обычно не предлагают такой функциональности, что усугубляет проблему.

Контейнеры глубокого обучения (DLC) SageMaker для вывода больших моделей (LMI) могут помочь. LMI DLC — это комплексное комплексное решение для размещения таких LLM, как Falcon-40B. Во внешнем интерфейсе они включают высокопроизводительный сервер моделей (DJL Serving), предназначенный для логического вывода больших моделей с такими функциями, как потоковая передача токенов и автоматическая репликация модели в экземпляре для увеличения пропускной способности. На серверной части LMI DLC также включают несколько высокопроизводительных параллельных движков моделей, таких как DeepSpeed ​​и FasterTransformer, которые могут разделять параметры модели и управлять ими на нескольких графических процессорах. Эти движки также включают оптимизированные ядра для популярных моделей трансформеров, которые могут ускорять вывод до трех раз быстрее. С LMI DLC вам просто нужно создать файл конфигурации, чтобы начать работу с хостингом LLM в SageMaker. Чтобы узнать больше о DLC для SageMaker LMI, см. Параллелизм моделей и вывод больших моделей и наш список доступных изображений. Вы также можете проверить наш предыдущий пост о хостинге Блум-175B на SageMaker используя LMI DLC.

Обзор решения

В этом посте вы узнаете, как разместить Falcon-40B с помощью DeepSpeed ​​на SageMaker с помощью LMI DLC. Falcon-40B требует, чтобы мы использовали несколько графических процессоров A10, тогда как для Falcon-7B требуется только один графический процессор. Мы также подготовили примеры, на которые вы можете ссылаться, чтобы разместить Falcon-40B и Falcon-7B с использованием как DeepSpeed, так и Accelerate. Вы можете найти наши примеры кода на GitHub.

Этот пример можно запустить в экземплярах блокнота SageMaker или Студия Amazon SageMaker блокноты. Для размещения Falcon-40B с использованием LMI и DeepSpeed ​​нам нужно использовать экземпляр ml.g5.24xlarge. Эти инстансы оснащены 4 графическими процессорами NVIDIA A10G, каждый из которых поддерживает 96 ГБ памяти графического процессора. Кроме того, хост предоставляет 96 виртуальных ЦП и 384 ГиБ памяти хоста. Контейнер LMI поможет решить большую часть недифференцированной тяжелой работы, связанной с размещением LLM, включая загрузку модели и разделение артефакта модели, чтобы содержащиеся в нем параметры можно было распределить между несколькими графическими процессорами.

Квоты для экземпляров машинного обучения SageMaker (ML) могут различаться в разных учетных записях. Если вы получили сообщение об ошибке, указывающее, что вы превысили свою квоту для экземпляров g5.24xlarge при просмотре этого сообщения, вы можете увеличить лимит с помощью Консоль сервисных квот.

Пошаговое руководство по записной книжке

Для начала мы начнем с установки и импорта необходимых зависимостей для нашего примера. Мы используем Boto3 SDK, а также SageMaker SDK. Обратите внимание, что мы используем Простой сервис хранения Amazon (Amazon S3) для хранения артефактов модели, необходимых для использования SageMaker и LMI, поэтому мы соответствующим образом настроили префиксную переменную S3. См. следующий код:

import sagemaker
import jinja2
from sagemaker import image_uris
import boto3
import os
import time
import json
from pathlib import Path
from sagemaker.utils import name_from_base role = sagemaker.get_execution_role() # execution role for the endpoint
sess = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs
bucket = sess.default_bucket() # bucket to house artifacts
model_bucket = sess.default_bucket() # bucket to house artifacts
s3_code_prefix_deepspeed = "hf-large-model-djl-/code_falcon40b/deepspeed" # folder within bucket where code artifact will go
region = sess._region_name
account_id = sess.account_id()
s3_client = boto3.client("s3")
sm_client = boto3.client("sagemaker")
smr_client = boto3.client("sagemaker-runtime")
jinja_env = jinja2.Environment()

Затем мы создаем локальную папку для нашей рабочей области для хранения артефактов нашей модели:

!mkdir -p code_falcon40b_deepspeed

Сначала мы создаем serving.properties файл конфигурации в созданном нами локальном каталоге. Этот serving.properties указывает контейнеру LMI и внешней библиотеке DJL Serving, какую модель распараллеливания и механизма оптимизации логического вывода мы хотим использовать. Вы можете найти параметры конфигурации для DeepSpeed ​​и Hugging Face Accelerate в Конфигурации и настройки. Здесь обратите внимание, что мы установили option.model_id параметр, чтобы определить, из какой модели Hugging Face брать. SageMaker упрощает работу с моделями Hugging Face, и вам достаточно одной этой строки. Кроме того, мы устанавливаем option.tensor_parallel_degree до значения 4, потому что у нас есть четыре графических процессора в нашем экземпляре ml.g5.24xlarge. Этот параметр определяет, сколько разделов модели необходимо создать и распределить. Обратите внимание, что если бы мы использовали более крупный экземпляр с восемью графическими процессорами, такой как ml.g5.48xlarge, и по-прежнему установили бы значение 4, то LMI автоматически создал бы две реплики модели (две реплики, распределенные по четырем графическим процессорам каждая). См. следующий код:

%%writefile ./code_falcon40b_deepspeed/serving.properties
engine=Python
#to deploy falcon-40b-instruct set the model_id value to 'tiiuae/falcon-40b-instruct'
option.model_id=tiiuae/falcon-40b
option.tensor_parallel_degree=4
#option.s3url = {{s3url}}

Вы также можете поменять местами tiiuae/falcon-40b tiiuae/falcon-40b-instruct если это лучше соответствует вашим потребностям.

Мы также включаем requirements.txt файл, который вы можете указать для установки необходимых вам пакетов:

%%writefile ./code_falcon40b_deepspeed/requirements.txt
einops
torch==2.0.1

Последнее, что нам нужно, это model.py файл, который будет использоваться с вашей моделью:

%%writefile ./code_falcon40b_deepspeed/model.py
from djl_python import Input, Output
import os
import torch
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
from typing import Any, Dict, Tuple
import warnings predictor = None def get_model(properties): model_name = properties["model_id"] local_rank = int(os.getenv("LOCAL_RANK", "0")) model = AutoModelForCausalLM.from_pretrained( model_name, low_cpu_mem_usage=True, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained(model_name) generator = pipeline( task="text-generation", model=model, tokenizer=tokenizer, device_map="auto" ) return generator def handle(inputs: Input) -> None: global predictor if not predictor: predictor = get_model(inputs.get_properties()) if inputs.is_empty(): # Model server makes an empty call to warmup the model on startup return None data = inputs.get_as_json() text = data["text"] text_length = data["text_length"] outputs = predictor(text, do_sample=True, min_length=text_length, max_length=text_length) result = {"outputs": outputs} return Output().add_as_json(result)

Вот и все! На данный момент мы создали все артефакты, которые вам понадобятся для развертывания Falcon-40B с DeepSpeed! Мы упаковываем каталог в файл *.tar.gz и загружаем его на Amazon S3. Обратите внимание, что фактическая модель не была загружена или упакована в этот файл. Контейнер LMI загрузит модель для вас напрямую из Hugging Face. У вас также есть возможность настроить таргетинг на корзину S3, если вы хотите, чтобы ваша собственная копия модели находилась в месте, которое будет более производительным для загрузки. LMI также включает оптимизацию для загрузки с Amazon S3 с высокой производительностью. См. следующий код:

s3_code_artifact_deepspeed= sess.upload_data("model.tar.gz", bucket, s3_code_prefix_deepspeed)
print(f"S3 Code or Model tar for deepspeed uploaded to --- > {s3_code_artifact_deepspeed}")

Все, что осталось сделать на этом этапе, — это определить контейнер, который мы хотим использовать, и создать объект модели:

inference_image_uri = ( f"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0.22.1-deepspeed0.8.3-cu118"
)
model_name_acc = name_from_base(f"falcon40b-model-ds")
create_model_response = sm_client.create_model( ModelName=model_name_acc, ExecutionRoleArn=role, PrimaryContainer={"Image": inference_image_uri, "ModelDataUrl": s3_code_artifact_deepspeed},
)
model_arn = create_model_response["ModelArn"]

Затем мы создаем конфигурацию конечной точки и создаем конечную точку:


endpoint_config_name = f"{model_name}-config"
endpoint_name = f"{model_name}-endpoint"
endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": "ml.g5.24xlarge", "InitialInstanceCount": 1, "ModelDataDownloadTimeoutInSeconds": 3600, "ContainerStartupHealthCheckTimeoutInSeconds": 3600, # "VolumeSizeInGB": 512 }, ],
)
endpoint_config_response create_endpoint_response = sm_client.create_endpoint( EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)
print(f"Created Endpoint: {create_endpoint_response['EndpointArn']}")

Элементы конфигурации, о которых следует помнить для успешного хостинга

Важным соображением при размещении крупных моделей является обеспечение достаточного времени для загрузки модели с Hugging Face. В наших тестах загрузка Falcon-40B в инстанс заняла около 90 минут. Ключевой набор конфигураций, позволяющих это сделать, ContainerStartupHealthCheckTimeoutInSeconds и Моделдатадунлоадтимеаутинсекондс. Убедитесь, что конфигурация конечной точки SageMaker имеет значение 3600 для каждого из них. Кроме того, намного проще загружать из Amazon S3 вместо исходного зоопарка моделей с помощью контейнеров LMI, специально разработанных для LLMS, использующих утилиту S5cmd, которая сокращает время загрузки модели примерно до 10 минут.

Вы можете контролировать состояние конечной точки, позвонив DescribeEndpoint, который сообщит вам, когда все будет готово. Ваша конечная точка теперь готова отвечать на запросы логического вывода! Поскольку LMI выполняет за вас разделение и оркестровку модели, каждый запрос будет обрабатываться с использованием всех 4 графических процессоров, доступных в нашем экземпляре ml.g5.12xlarge. Это позволяет нам размещать LLM и повышать производительность при горизонтальном масштабировании ускорителей GPU. См. следующий код:

response_model = smr_client.invoke_endpoint( EndpointName=endpoint_name, Body=json.dumps({"text": "What is the purpose of life?", "text_length": 150}), ContentType="application/json",
) response_model["Body"].read().decode("utf8")

Если вы закончили и хотите удалить конфигурацию конечной точки, конечную точку и объект модели, вы можете запустить следующие команды:

sm_client.delete_endpoint(EndpointName=endpoint_name)
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
sm_client.delete_model(ModelName=model_name)

Этот код, на который мы ссылались в этом посте, можно найти в полном Блокнот на GitHub.

Заключение

SageMaker Hosting и LMI DLC упрощают размещение таких LLM, как Falcon-40B. Он берет на себя тяжелую работу по организации того, что требуется для размещения моделей на нескольких графических процессорах, и предоставляет настраиваемые параметры в соответствии с вашими потребностями. Кроме того, использование моделей Hugging Face становится очень простым благодаря встроенной поддержке этих моделей.

В этом посте мы показали, как вы можете использовать SageMaker для размещения модели Falcon-40B с помощью DeepSpeed. Кроме того, мы привели примеры в GitHub для размещения Falcon-40B с использованием Accelerate и меньших моделей Falcon-7B. Мы рекомендуем вам попробовать SageMaker с LMI и освоить самую эффективную общедоступную LLM на сегодняшний день!


Об авторах

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Джеймс Парк работает архитектором решений в Amazon Web Services. Он работает с Amazon.com над проектированием, созданием и развертыванием технологических решений на AWS и проявляет особый интерес к искусственному интеллекту и машинному обучению. В свободное время ему нравится знакомиться с новыми культурами, получать новый опыт и быть в курсе последних технологических тенденций. Вы можете найти его на LinkedIn.

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Абхи Шивадитья — старший архитектор решений в AWS, работающий со стратегическими глобальными корпоративными организациями, чтобы облегчить внедрение сервисов AWS в таких областях, как искусственный интеллект, распределенные вычисления, сети и хранилища. Его опыт заключается в глубоком обучении в областях обработки естественного языка (NLP) и компьютерного зрения. Abhi помогает клиентам эффективно развертывать высокопроизводительные модели машинного обучения в экосистеме AWS.

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Роберт Ван Дусен является старшим менеджером по продуктам в Amazon SageMaker. Он возглавляет оптимизацию моделей глубокого обучения для таких приложений, как вывод больших моделей.

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Эвандро Франко является специалистом по архитектуре решений AI/ML, работающим над Amazon Web Services. Он помогает клиентам AWS преодолевать бизнес-проблемы, связанные с искусственным интеллектом и машинным обучением поверх AWS. Он более 15 лет работает с технологиями, от разработки программного обеспечения, инфраструктуры, бессерверных технологий до машинного обучения.

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Цин Лан является инженером-разработчиком программного обеспечения в AWS. Он работал над несколькими сложными продуктами в Amazon, включая высокопроизводительные решения для логического вывода машинного обучения и высокопроизводительную систему ведения журналов. Команда Цин успешно запустила первую модель с миллиардом параметров в Amazon Advertising с очень низкой задержкой. Цин обладает глубокими знаниями по оптимизации инфраструктуры и ускорению глубокого обучения.

Deploy Falcon-40B with large model inference DLCs on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Фрэнк Лю является инженером-программистом для AWS Deep Learning. Он специализируется на создании инновационных инструментов глубокого обучения для инженеров-программистов и ученых. В свободное время он любит ходить в походы с друзьями и семьей.

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

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