Базовая модель GPT-NeoXT-Chat-Base-20B для приложений чат-ботов теперь доступна на Amazon SageMaker | Веб-сервисы Амазонки

Базовая модель GPT-NeoXT-Chat-Base-20B для приложений чат-ботов теперь доступна на Amazon SageMaker | Веб-сервисы Амазонки

Исходный узел: 2096695

Сегодня мы рады сообщить, что базовая модель языка GPT-NeoXT-Chat-Base-20B компании Together Computer доступна для клиентов, использующих Amazon SageMaker JumpStart. GPT-NeoXT-Chat-Base-20B — это модель с открытым исходным кодом для создания диалоговых ботов. Вы можете легко опробовать эту модель и использовать ее с JumpStart. JumpStart — это центр машинного обучения (ML) Создатель мудреца Амазонки который предоставляет доступ к базовым моделям в дополнение к встроенным алгоритмам и шаблонам комплексных решений, чтобы помочь вам быстро приступить к работе с ML.

В этом посте мы рассмотрим, как развернуть GPT-NeoXT-чат-Base-20B модель и вызвать модель в OpenChatKit интерактивная оболочка. В этой демонстрации представлен чат-бот базовой модели с открытым исходным кодом для использования в вашем приложении.

В моделях JumpStart используется технология Deep Java Serving, в которой используется библиотека Deep Java (DJL) с высокоскоростными библиотеками для оптимизации моделей и минимизации задержки при выводе. Базовая реализация в JumpStart следует за реализацией, похожей на следующую ноутбук. Как клиент концентратора моделей JumpStart, вы получаете повышенную производительность без необходимости поддерживать сценарий модели вне SageMaker SDK. Модели JumpStart также обеспечивают повышенную безопасность благодаря конечным точкам, обеспечивающим сетевую изоляцию.

Базовые модели в SageMaker

JumpStart предоставляет доступ к ряду моделей из популярных концентраторов моделей, включая Hugging Face, PyTorch Hub и TensorFlow Hub, которые вы можете использовать в процессе разработки машинного обучения в SageMaker. Недавние достижения в области машинного обучения привели к появлению нового класса моделей, известных как модели фундамента, которые обычно обучаются на миллиардах параметров и адаптируются к широкому кругу вариантов использования, таких как суммирование текста, создание цифрового искусства и языковой перевод. Поскольку обучение этих моделей обходится дорого, клиенты хотят использовать существующие предварительно обученные базовые модели и настраивать их по мере необходимости, а не обучать эти модели самостоятельно. SageMaker предоставляет список моделей, которые вы можете выбрать на консоли SageMaker.

Теперь вы можете найти модели фундамента от разных поставщиков моделей в JumpStart, что позволит вам быстро приступить к работе с моделями фундамента. Вы можете найти базовые модели, основанные на различных задачах или поставщиках моделей, и легко просматривать характеристики моделей и условия использования. Вы также можете опробовать эти модели с помощью тестового виджета пользовательского интерфейса. Если вы хотите использовать базовую модель в масштабе, вы можете легко сделать это, не выходя из SageMaker, используя готовые блокноты от поставщиков моделей. Поскольку модели размещаются и развертываются на AWS, вы можете быть уверены, что ваши данные, независимо от того, используются ли они для оценки или использования модели в масштабе, никогда не будут переданы третьим лицам.

Базовая модель GPT-NeoXT-Chat-Base-20B

Вместе Компьютер разработал GPT-NeoXT-Chat-Base-20B, языковую модель с 20 миллиардами параметров, точно настроенную на основе модели GPT-NeoX от ElutherAI с более чем 40 миллионами инструкций, ориентированную на взаимодействие в стиле диалога. Кроме того, модель настроена на несколько задач, таких как ответы на вопросы, классификация, извлечение и обобщение. Модель основана на наборе данных OIG-43M, созданном в сотрудничестве с LAION и Ontocord.

В дополнение к вышеупомянутой тонкой настройке GPT-NeoXT-Chat-Base-20B-v0.16 также подвергся дальнейшей тонкой настройке с помощью небольшого количества данных обратной связи. Это позволяет модели лучше адаптироваться к человеческим предпочтениям в разговорах. GPT-NeoXT-Chat-Base-20B предназначен для использования в приложениях чат-ботов и может плохо работать в других случаях использования, выходящих за рамки его предполагаемой области применения. Вместе Ontocord и LAION совместно выпустили OpenChatKit, альтернативу ChatGPT с открытым исходным кодом с сопоставимым набором возможностей. OpenChatKit был запущен под лицензией Apache-2.0, предоставляющей полный доступ к исходному коду, весам моделей и обучающим наборам данных. Есть несколько задач, с которыми OpenChatKit отлично справляется из коробки. Сюда входят задачи суммирования, задачи извлечения, которые позволяют извлекать структурированную информацию из неструктурированных документов, и задачи классификации для классификации предложения или абзаца по разным категориям.

Давайте рассмотрим, как мы можем использовать модель GPT-NeoXT-Chat-Base-20B в JumpStart.

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

Вы можете найти код, показывающий развертывание GPT-NeoXT-Chat-Base-20B в SageMaker, и пример того, как использовать развернутую модель в диалоговом режиме с помощью командной оболочки, в следующем Блокнот GitHub.

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

  1. Настройте предварительные условия.
  2. Выберите предварительно обученную модель.
  3. Получите артефакты и разверните конечную точку.
  4. Запросите конечную точку и проанализируйте ответ.
  5. Используйте оболочку OpenChatKit для взаимодействия с развернутой конечной точкой.

Настроить предварительные условия

Этот блокнот был протестирован на экземпляре ml.t3.medium в Студия Amazon SageMaker с ядром Python 3 (Data Science) и в экземпляре ноутбука SageMaker с ядром conda_python3.

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

%pip install --upgrade sagemaker –quiet

Выберите предварительно обученную модель

Мы настраиваем сеанс SageMaker, как обычно, используя Boto3, а затем выбираем идентификатор модели, которую хотим развернуть:

model_id, model_version = "huggingface-textgeneration2-gpt-neoxt-chat-base-20b-fp16", "*"

Извлечение артефактов и развертывание конечной точки

С помощью SageMaker мы можем выполнять логические выводы на предварительно обученной модели, даже без ее предварительной точной настройки на новом наборе данных. Начнем с извлечения instance_type, image_uriкачества model_uri для предварительно обученной модели. Для размещения предварительно обученной модели мы создаем экземпляр sagemaker.model.Model и разверните его. В следующем коде в качестве конечной точки вывода используется ml.g5.24xlarge. Метод развертывания может занять несколько минут.

endpoint_name = name_from_base(f"jumpstart-example-{model_id}") # Retrieve the inference instance type for the specified model.
instance_type = instance_types.retrieve_default( model_id=model_id, model_version=model_version, scope="inference"
) # Retrieve the inference docker container uri.
image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=instance_type,
) # Retrieve the model uri.
model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="inference"
) # Create the SageMaker model instance. The inference script is prepacked with the model artifact.
model = Model( image_uri=image_uri, model_data=model_uri, role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # Set the serializer/deserializer used to run inference through the sagemaker API.
serializer = JSONSerializer()
deserializer = JSONDeserializer() # Deploy the Model.
predictor = model.deploy( initial_instance_count=1, instance_type=instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name, serializer=serializer, deserializer=deserializer
)

Запросите конечную точку и проанализируйте ответ

Далее мы покажем вам пример того, как вызвать конечную точку с подмножеством гиперпараметров:

payload = { "text_inputs": "<human>: Tell me the steps to make a pizzan<bot>:", "max_length": 500, "max_time": 50, "top_k": 50, "top_p": 0.95, "do_sample": True, "stopping_criteria": ["<human>"],
}
response = predictor.predict(payload)
print(response[0][0]["generated_text"])

Вот ответ, который мы получаем:

<human>: Tell me the steps to make a pizza
<bot>: 1. Choose your desired crust, such as thin-crust or deep-dish. 2. Preheat the oven to the desired temperature. 3. Spread sauce, such as tomato or garlic, over the crust. 4. Add your desired topping, such as pepperoni, mushrooms, or olives. 5. Add your favorite cheese, such as mozzarella, Parmesan, or Asiago. 6. Bake the pizza according to the recipe instructions. 7. Allow the pizza to cool slightly before slicing and serving.
<human>:

Здесь мы предоставили аргумент полезной нагрузки "stopping_criteria": ["<human>"], что привело к тому, что ответ модели закончился генерацией последовательности слов <human>. Сценарий модели JumpStart будет принимать любой список строк в качестве желаемых стоп-слов, преобразовать этот список в действительный аргумент ключевого слова stop_criteria преобразователям генерировать API и останавливать генерацию текста, когда выходная последовательность содержит какие-либо указанные стоп-слова. Это полезно по двум причинам: во-первых, время вывода сокращается, поскольку конечная точка не продолжает генерировать нежелательный текст за пределами стоп-слов, а во-вторых, это предотвращает появление в модели OpenChatKit галлюцинаций дополнительных ответов человека и бота до тех пор, пока не будут выполнены другие критерии остановки. .

Используйте оболочку OpenChatKit для взаимодействия с развернутой конечной точкой.

OpenChatKit предоставляет оболочку командной строки для взаимодействия с чат-ботом. На этом шаге вы создаете версию этой оболочки, которая может взаимодействовать с вашей развернутой конечной точкой. В этом репозитории OpenChatKit мы предоставляем минимальное упрощение сценариев логического вывода, которые могут взаимодействовать с нашей развернутой конечной точкой SageMaker.

В этом есть два основных компонента:

  • Интерпретатор оболочки (JumpStartOpenChatKitShell), что позволяет выполнять итеративные вызовы логического вывода конечной точки модели.
  • Объект разговора (Conversation), который сохраняет предыдущие взаимодействия человека и чат-бота локально в интерактивной оболочке и соответствующим образом форматирует прошлые разговоры для будущего контекста вывода.

Ассоциация Conversation объект импортируется как есть из репозитория OpenChatKit. Следующий код создает собственный интерпретатор оболочки, который может взаимодействовать с вашей конечной точкой. Это упрощенная версия реализации OpenChatKit. Мы рекомендуем вам изучить репозиторий OpenChatKit, чтобы увидеть, как вы можете использовать в этом контексте более подробные функции, такие как потоковая передача токенов, модели модерации и расширенная генерация извлечения. Контекст этой записной книжки сосредоточен на демонстрации минимально жизнеспособного чат-бота с конечной точкой JumpStart; здесь вы можете добавить сложность по мере необходимости.

Небольшая демонстрация для демонстрации JumpStartOpenChatKitShell показано в следующем видео.

Следующий фрагмент показывает, как работает код:

class JumpStartOpenChatKitShell(cmd.Cmd): intro = ( "Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to " "list commands. For example, type /quit to exit shell.n" ) prompt = ">>> " human_id = "<human>" bot_id = "<bot>" def __init__(self, predictor: Predictor, cmd_queue: Optional[List[str]] = None, **kwargs): super().__init__() self.predictor = predictor self.payload_kwargs = kwargs self.payload_kwargs["stopping_criteria"] = [self.human_id] if cmd_queue is not None: self.cmdqueue = cmd_queue def preloop(self): self.conversation = Conversation(self.human_id, self.bot_id) def precmd(self, line): command = line[1:] if line.startswith('/') else 'say ' + line return command def do_say(self, arg): self.conversation.push_human_turn(arg) prompt = self.conversation.get_raw_prompt() payload = {"text_inputs": prompt, **self.payload_kwargs} response = self.predictor.predict(payload) output = response[0][0]["generated_text"][len(prompt):] self.conversation.push_model_response(output) print(self.conversation.get_last_turn()) def do_reset(self, arg): self.conversation = Conversation(self.human_id, self.bot_id) def do_hyperparameters(self, arg): print(f"Hyperparameters: {self.payload_kwargs}n") def do_quit(self, arg): return True

Теперь вы можете запустить эту оболочку как командный цикл. Это будет неоднократно выдавать приглашение, принимать ввод, анализировать вводную команду и отправлять действия. Поскольку результирующая оболочка может использоваться в бесконечном цикле, в этом ноутбуке предусмотрена очередь команд по умолчанию (cmdqueue) в виде списка входных строк в очереди. Поскольку последним вводом является команда /quit, оболочка завершит работу после исчерпания очереди. Чтобы динамически взаимодействовать с этим чат-ботом, удалите cmdqueue.

cmd_queue = [ "Hello!",
]
JumpStartOpenChatKitShell( endpoint_name=endpoint_name, cmd_queue=cmd_queue, max_new_tokens=128, do_sample=True, temperature=0.6, top_k=40,
).cmdloop()

Пример 1: контекст разговора сохраняется

Следующая подсказка показывает, что чат-бот может сохранять контекст разговора, чтобы отвечать на дополнительные вопросы:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the capital of US? <<< The capital of US is Washington, D.C. >>> How far it is from PA ? <<< It is approximately 1100 miles.

Пример 2: Классификация настроений

В следующем примере чат-бот выполнил задачу классификации, определив тональность предложения. Как видите, чат-бот смог успешно классифицировать положительные и отрицательные настроения.

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the sentiment of this sentence "The weather is good and I am going to play outside, it is sunny and warm" <<< POSITIVE >>> What is the sentiment of this sentence " The news this morning was tragic and it created lot of fear and concerns in city" <<< NEGATIVE

Пример 3: задачи суммирования

Затем мы попробовали суммировать задачи с оболочкой чат-бота. В следующем примере показано, как длинный текст о Amazon Comprehend был сведен к одному предложению, и чат-бот смог ответить на дополнительные вопросы по тексту:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Write a short summary for this text: Amazon Comprehend uses natural language processing (NLP) to extract insights about the content of documents. It develops insights by recognizing the entities, key phrases, language, sentiments, and other common elements in a document. Use Amazon Comprehend to create new products based on understanding the structure of documents. For example, using Amazon Comprehend you can search social networking feeds for mentions of products or scan an entire document repository for key phrases. nYou can access Amazon Comprehend document analysis capabilities using the Amazon Comprehend console or using the Amazon Comprehend APIs. You can run real-time analysis for small workloads or you can start asynchronous analysis jobs for large document sets. You can use the pre-trained models that Amazon Comprehend provides, or you can train your own custom models for classification and entity recognition. nAll of the Amazon Comprehend features accept UTF-8 text documents as the input. In addition, custom classification and custom entity recognition accept image files, PDF files, and Word files as input. nAmazon Comprehend can examine and analyze documents in a variety of languages, depending on the specific feature. For more information, see Languages supported in Amazon Comprehend. Amazon Comprehend's Dominant language capability can examine documents and determine the dominant language for a far wider selection of languages. <<< Amazon Comprehend is a natural language processing (NLP) service that uses deep learning and other advanced AI techniques to extract insights from unstructured text. >>> What kind of files does custom entity recognition accept as inputs? <<< Image files, PDF files, and Word files

Пример 4. Извлечение структурированной информации из неструктурированного текста

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

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Generate a table summarizing the options outlined in this email. Team, we need to plan a project. The first task is for creating a web app and will take 3 developers, 2 testers with duration of 3 weeks. This is priority 1 The second task is for refactoring a web app and will take 2 developers, 5 testers with duration of 4 weeks. This is priority 2 A markdown table with 2 rows and six columns: (1) Task ID , (2) Task Description, (3) Developers, (4) Testers, (5) Duration, (6) Priority <<< | Task ID | Task Description | Developers | Testers | Duration | Priority |
| --------- | --------- | --------- | --------- | --------- | --------- |
| 1 | Create a web app | 3 | 2 | 3 weeks | 1 |
| 2 | Refactor a web app | 2 | 5 | 4 weeks | 2 |

Пример 5: Команды в качестве входных данных для чат-бота

Мы также можем предоставить ввод в виде команд, таких как /hyperparameters чтобы увидеть значения гиперпараметров и /quit чтобы выйти из командной оболочки:

>>> /hyperparameters <<< Hyperparameters: {'max_new_tokens': 128, 'do_sample': True, 'temperature': 0.6, 'top_k': 40, 'stopping_criteria': ['<human>']} >>> /quit

Эти примеры продемонстрировали лишь некоторые из задач, в которых OpenChatKit превосходно справляется. Мы рекомендуем вам попробовать различные подсказки и посмотреть, что лучше всего подходит для вашего случая использования.

Убирать

После того, как вы протестировали конечную точку, убедитесь, что вы удалили конечную точку вывода SageMaker и модель, чтобы избежать взимания платы.

Заключение

В этом посте мы показали вам, как тестировать и использовать модель GPT-NeoXT-Chat-Base-20B с помощью SageMaker и создавать интересные приложения для чат-ботов. Попробуйте базовую модель в SageMaker сегодня и поделитесь с нами своим мнением!

Это руководство предназначено только для информационных целей. Вы по-прежнему должны проводить свою собственную независимую оценку и принимать меры для обеспечения соблюдения ваших собственных конкретных методов и стандартов контроля качества, а также местных правил, законов, положений, лицензий и условий использования, которые применяются к вам, вашему контенту и сторонняя модель, упомянутая в этом руководстве. AWS не имеет контроля или полномочий в отношении сторонней модели, упомянутой в этом руководстве, и не делает никаких заявлений и не гарантирует, что сторонняя модель безопасна, не содержит вирусов, работоспособна или совместима с вашей производственной средой и стандартами. AWS не делает никаких заявлений и не гарантирует, что любая информация, содержащаяся в этом руководстве, приведет к определенному результату или результату.


Об авторах

Рахна Чадха является главным архитектором решений AI/ML в области стратегических счетов в AWS. Рахна — оптимистка, считающая, что этичное и ответственное использование ИИ может улучшить общество в будущем и принести экономическое и социальное процветание. В свободное время Рахна любит проводить время со своей семьей, ходить в походы и слушать музыку.

Доктор Кайл Ульрих является ученым-прикладником с Встроенные алгоритмы Amazon SageMaker команда. Его исследовательские интересы включают масштабируемые алгоритмы машинного обучения, компьютерное зрение, временные ряды, байесовские непараметрические и гауссовские процессы. Его докторская степень получена в Университете Дьюка, и он опубликовал статьи в NeurIPS, Cell и Neuron.

Доктор Ашиш Хетан — старший научный сотрудник, работающий со встроенными алгоритмами Amazon SageMaker и помогающий разрабатывать алгоритмы машинного обучения. Он получил докторскую степень в Университете Иллинойса в Урбана-Шампейн. Он является активным исследователем в области машинного обучения и статистических выводов и опубликовал множество статей на конференциях NeurIPS, ICML, ICLR, JMLR, ACL и EMNLP.

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

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