在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 | 亚马逊网络服务

在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 | 亚马逊网络服务

我们很高兴地宣布这一点 亚马逊SageMaker JumpStart 现在可以流式传输大型语言模型 (LLM) 推理响应。 令牌流允许您在生成模型响应输出时查看模型响应输出,而不是等待 LLM 完成响应生成才可供您使用或显示。 SageMaker JumpStart 中的流处理功能可以通过为最终用户营造低延迟的感觉来帮助您构建具有更好用户体验的应用程序。

在这篇文章中,我们将介绍如何部署和流式传输来自 猎鹰7B指导模型 端点。

截至撰写本文时,SageMaker JumpStart 中提供的以下 LLM 支持流式传输:

  • 米斯特拉尔 AI 7B,米斯特拉尔 AI 7B 指导
  • 猎鹰 180B, 猎鹰 180B 聊天
  • 猎鹰 40B、猎鹰 40B 指导
  • 猎鹰 7B、猎鹰 7B 指导
  • Rinna 日本 GPT NeoX 4B 指令 PPO
  • Rinna 日本 GPT NeoX 3.6B 指令 PPO

要检查 SageMaker JumpStart 中支持流式传输的模型列表的更新,请在以下位置搜索“huggingface-llm”: 带有预训练模型表的内置算法.

请注意,您可以使用 流媒体功能 of 亚马逊SageMaker 开箱即用地托管使用 SageMaker TGI 深度学习容器 (DLC) 部署的任何模型,如中所述 宣布在 Amazon SageMaker 上推出新的 Hugging Face LLM 推理容器.

SageMaker 中的基础模型

SageMaker JumpStart 提供对流行模型中心的一系列模型的访问,包括 Hugging Face、PyTorch Hub 和 TensorFlow Hub,您可以在 SageMaker 的 ML 开发工作流程中使用这些模型。 机器学习的最新进展催生了一类新的模型,称为 基础模型,它们通常经过数十亿个参数的训练,可以适应广泛的用例,例如文本摘要、生成数字艺术和语言翻译。 由于这些模型的训练成本很高,因此客户希望使用现有的预先训练的基础模型并根据需要对其进行微调,而不是自己训练这些模型。 SageMaker 提供了精选的模型列表,您可以在 SageMaker 控制台上进行选择。

现在,您可以在 SageMaker JumpStart 中找到来自不同模型提供商的基础模型,从而使您能够快速开始使用基础模型。 SageMaker JumpStart 提供基于不同任务或模型提供商的基础模型,您可以轻松查看模型特征和使用条款。 您还可以使用测试 UI 小部件来尝试这些模型。 当您想要大规模使用基础模型时,无需离开 SageMaker,即可使用模型提供商提供的预构建笔记本来实现此目的。 由于模型在 AWS 上托管和部署,因此您相信您的数据(无论是用于评估还是大规模使用模型)都不会与第三方共享。

令牌流

令牌流允许在模型生成推理响应时返回该响应。 这样,您可以看到增量生成的响应,而不是等待模型完成后再提供完整的响应。 流媒体可以帮助实现更好的用户体验,因为它减少了最终用户的延迟感知。 您可以在生成输出时开始查看输出,因此如果输出看起来对您的目的没有用,您可以提前停止生成。 流式传输可以产生很大的影响,特别是对于长时间运行的查询,因为您可以开始看到生成的输出,这可以产生延迟较低的感觉,即使端到端延迟保持不变。

截至撰写本文时,您可以在 SageMaker JumpStart 中对利用 Hugging Face LLM 的模型使用流式处理 文本生成推理 DLC。

无蒸汽响应 流媒体响应

解决方案概述

在本文中,我们使用 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)

我们得到以下支持流式传输的型号 ID:

['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 模型。 有关完整说明,请参阅 TII 的 Falcon 180B 基础模型现已通过 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 中新推出的流式传输功能。 我们希望您使用令牌流功能来构建需要低延迟的交互式应用程序,以获得更好的用户体验。


关于作者

在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。拉奇纳查达 是 AWS 战略客户部门的首席 AI/ML 解决方案架构师。 Rachna 是一位乐观主义者,他相信以道德和负责任的方式使用人工智能可以改善未来社会,带来经济和社会繁荣。 在业余时间,Rachna 喜欢与家人共度时光、徒步旅行和听音乐。

在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。凯尔乌尔里希博士 是一名应用科学家 Amazon SageMaker 内置算法 团队。 他的研究兴趣包括可扩展机器学习算法、计算机视觉、时间序列、贝叶斯非参数和高斯过程。 他在杜克大学获得博士学位,并在 NeurIPS、Cell 和 Neuron 上发表了论文。

在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。Ashish Khetan 博士 是 Amazon SageMaker 内置算法的高级应用科学家,帮助开发机器学习算法。 他在伊利诺伊大学香槟分校获得博士学位。 他是机器学习和统计推理领域的活跃研究者,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。

时间戳记:

更多来自 AWS机器学习