Home Машинное обучение Потоковая передача ответов на большие языковые модели в Amazon SageMaker JumpStart | DeepTech

Потоковая передача ответов на большие языковые модели в Amazon SageMaker JumpStart | DeepTech

0
Потоковая передача ответов на большие языковые модели в Amazon SageMaker JumpStart
 | DeepTech

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

В этом посте мы рассмотрим, как развернуть и передать ответ от Модель Falcon 7B Instruct конечная точка.

На момент написания этой статьи следующие LLM, доступные в SageMaker JumpStart, поддерживают потоковую передачу:

  • Мистраль АИ 7Б, Мистраль АИ 7Б Инструктировать
  • Сокол 180Б, Сокол 180Б Чат
  • Сокол 40Б, Сокол 40Б Инструктировать
  • Сокол 7Б, Сокол 7Б Инструктировать
  • Rinna Японский GPT NeoX 4B Инструкция PPO
  • Rinna Японский GPT NeoX 3.6B Инструкция PPO

Чтобы проверить наличие обновлений в списке моделей, поддерживающих потоковую передачу, в SageMaker JumpStart найдите «huggingface-llm» по адресу Встроенные алгоритмы с предварительно обученной таблицей моделей.

Обратите внимание, что вы можете использовать функцию потоковой передачи хостинга Amazon SageMaker «из коробки» для любой модели, развернутой с помощью контейнера глубокого обучения (DLC) SageMaker TGI, как описано в разделе «Объявление о запуске новых контейнеров вывода Hugging Face LLM на Amazon SageMaker».

Модели фундамента в SageMaker

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

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

Потоковая передача токенов

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

На момент написания этой статьи вы можете использовать потоковую передачу в SageMaker JumpStart для моделей, использующих Hugging Face LLM. Вывод генерации текста ДЛЦ.

Ответ без пропаривания Ответ с помощью потоковой передачи

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

В этом посте мы используем модель Falcon 7B Instruct, чтобы продемонстрировать возможности потоковой передачи SageMaker JumpStart.

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

from sagemaker.jumpstart.notebook_utils import list_jumpstart_models
from sagemaker.jumpstart.filters import And

filter_value = And("task == llm", "framework == huggingface")
model_ids = list_jumpstart_models(filter=filter_value)
print(model_ids)

Мы получаем следующие идентификаторы моделей, поддерживающих потоковую передачу:

('huggingface-llm-bilingual-rinna-4b-instruction-ppo-bf16', 'huggingface-llm-falcon-180b-bf16', 'huggingface-llm-falcon-180b-chat-bf16', 'huggingface-llm-falcon-40b-bf16', 'huggingface-llm-falcon-40b-instruct-bf16', 'huggingface-llm-falcon-7b-bf16', 'huggingface-llm-falcon-7b-instruct-bf16', 'huggingface-llm-mistral-7b', 'huggingface-llm-mistral-7b-instruct', 'huggingface-llm-rinna-3-6b-instruction-ppo-bf16')

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

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

%pip install --upgrade sagemaker –quiet

Развертывание модели

В качестве первого шага используйте SageMaker JumpStart для развертывания модели Falcon 7B Instruct. Подробные инструкции см. в модели фундамента Falcon 180B от TII, которая теперь доступна через Amazon SageMaker JumpStart. Используйте следующий код:

from sagemaker.jumpstart.model import JumpStartModel

my_model = JumpStartModel(model_id="huggingface-llm-falcon-7b-instruct-bf16")
predictor = my_model.deploy()

Запрос конечной точки и потоковый ответ

Затем создайте полезную нагрузку для вызова развернутой конечной точки. Важно отметить, что полезная нагрузка должна содержать пару ключ/значение. "stream": True. Это указывает серверу вывода генерации текста сгенерировать потоковый ответ.

payload = {
    "inputs": "How do I build a website?",
    "parameters": {"max_new_tokens": 256},
    "stream": True
}

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

import io
import json

class TokenIterator:
    def __init__(self, stream):
        self.byte_iterator = iter(stream)
        self.buffer = io.BytesIO()
        self.read_pos = 0

    def __iter__(self):
        return self

    def __next__(self):
        while True:
            self.buffer.seek(self.read_pos)
            line = self.buffer.readline()
            if line and line(-1) == ord("\n"):
                self.read_pos += len(line) + 1
                full_line = line(:-1).decode("utf-8")
                line_data = json.loads(full_line.lstrip("data:").rstrip("/n"))
                return line_data("token")("text")
            chunk = next(self.byte_iterator)
            self.buffer.seek(0, io.SEEK_END)
            self.buffer.write(chunk("PayloadPart")("Bytes"))

Теперь вы можете использовать Boto3 invoke_endpoint_with_response_stream API на конечной точке, которую вы создали, и включите потоковую передачу, выполнив итерацию по TokenIterator пример:

import boto3

client = boto3.client("runtime.sagemaker")
response = client.invoke_endpoint_with_response_stream(
    EndpointName=predictor.endpoint_name,
    Body=json.dumps(payload),
    ContentType="application/json",
)

for token in TokenIterator(response("Body")):
    print(token, end="")

Указание пустого end параметр для print Функция включит визуальный поток без вставки символов новой строки. Это дает следующий результат:

Building a website can be a complex process, but it generally involves the following steps:

1. Determine the purpose and goals of your website
2. Choose a domain name and hosting provider
3. Design and develop your website using HTML, CSS, and JavaScript
4. Add content to your website and optimize it for search engines
5. Test and troubleshoot your website to ensure it is working properly
6. Maintain and update your website regularly to keep it running smoothly.

There are many resources available online to guide you through these steps, including tutorials and templates. It may also be helpful to seek the advice of a web developer or designer if you are unsure about any of these steps.<|endoftext|>

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

Очистить

Наконец, не забудьте очистить развернутую модель и конечную точку, чтобы избежать дополнительных затрат:

predictor.delete_model()
predictor.delete_endpoint()

Заключение

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


Об авторах

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

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

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here