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

Языковые модели масштаба в Amazon SageMaker JumpStart передача знаний в потоке

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

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

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

  • Mistral AI 7B, Mistral AI 7B Instruct
  • Falcon 180B, Falcon 180B Chat
  • Falcon 40B, Falcon 40B Instruct
  • Falcon 7B, Falcon 7B Instruct
  • Rinna Japanese GPT NeoX 4B Instruction PPO
  • Rinna Japanese GPT NeoX 3.6B Instruction PPO

Чтобы получать обновления списка моделей, поддерживающих потоковую передачу в SageMaker JumpStart, ищите «huggingface-llm» в разделе Built-in Algorithms with pre-trained Model Table.

Обратите внимание, что вы можете использовать функцию потоковой передачи хостинга Amazon SageMaker из коробки для любой модели, развернутой с использованием контейнера Deep Learning Container (DLC) SageMaker TGI, как описано в статье Announcing the launch of new Hugging Face LLM Inference containers on Amazon SageMaker.

Foundation models в SageMaker

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

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

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

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

На данный момент в SageMaker JumpStart вы можете использовать потоковую передачу данных для моделей, использующих Hugging Face LLM Text Generation Inference DLC.

Ответ без потоковой передачи Ответ с потоковой передачей

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

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

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

from sagemaker.jumpstart.notebook_utils import list_jumpstart_modelsfrom sagemaker.jumpstart.filters import Andfilter_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 foundation model from TII is now available via Amazon SageMaker JumpStart. Используйте следующий код:

from sagemaker.jumpstart.model import JumpStartModelmy_model = JumpStartModel(model_id="huggingface-llm-falcon-7b-instruct-bf16")predictor = my_model.deploy()

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

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

payload = {    "inputs": "Как создать веб-сайт?",    "parameters": {"max_new_tokens": 256},    "stream": True}

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

import ioimport jsonclass 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"])

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

import boto3client = 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 позволит включить визуальный поток без добавления символов новой строки. Это приводит к следующему выводу:

Создание веб-сайта может быть сложным процессом, но обычно включает в себя следующие этапы:1. Определение цели и задач вашего веб-сайта2. Выбор имени домена и хостинг-провайдера3. Проектирование и разработка веб-сайта с использованием HTML, CSS и JavaScript4. Добавление контента на веб-сайт и его оптимизация для поисковых систем5. Тестирование и устранение неполадок на веб-сайте, чтобы убедиться, что он работает должным образом6. Регулярное обслуживание и обновление веб-сайта для его безупречной работы.Существует много онлайн-ресурсов, которые могут помочь вам пройти через эти этапы, включая учебники и шаблоны. Также может быть полезно обратиться за советом к веб-разработчику или дизайнеру, если у вас есть сомнения относительно какого-либо из этих этапов.<|endoftext|>

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

Очистка

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

predictor.delete_model()predictor.delete_endpoint()

Заключение

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