在Amazon SageMaker JumpStart中流式传输大型语言模型响应

关键要点

在这篇文章中,我们介绍了如何在Amazon SageMaker JumpStart中通过流式传输技术提升大型语言模型LLM的推理响应体验。我们展示了Falcon 7B Instruct模型的部署过程及如何实现响应流式传输,确保用户可以即时获得生成的结果,从而改善用户体验。

我们很高兴地宣布,Amazon SageMaker JumpStart 现已支持流式传输大型语言模型LLM的推理响应。通过令牌流式传输,您可以在模型生成响应时实时查看输出,而无需等待整个响应生成完成。SageMaker JumpStart中的流式传输功能可以帮助您构建更好的应用程序,为最终用户提供低延迟的体验。

在本文中,我们将演示如何部署并从Falcon 7B Instruct模型 的终端节点获取流式响应。

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

Mistral AI 7B,Mistral AI 7B InstructFalcon 180B,Falcon 180B ChatFalcon 40B,Falcon 40B InstructFalcon 7B,Falcon 7B InstructRinna Japanese GPT NeoX 4B Instruction PPORinna Japanese GPT NeoX 36B Instruction PPO

要查看支持流式传输模型的更新列表,请访问SageMaker文档中的预训练模型表,搜索“huggingfacellm”。

请注意,您可以使用Amazon SageMaker的流式传输功能 直接为通过SageMaker TGI深度学习容器DLC部署的任何模型而实现,如新Hugging Face LLM推理容器上线公告所示。

SageMaker中的基础模型

SageMaker JumpStart提供了一系列来自流行模型库包括Hugging Face、PyTorch Hub和TensorFlow Hub的模型,可以在您的ML开发工作流程中使用。最近,机器学习的进步催生了一类被称为基础模型的新型模型,这些模型通常通过数十亿个参数进行训练,能够适应各种用例,例如文本摘要、生成数字艺术和语言翻译。由于这些模型训练成本高昂,客户更倾向于使用现有的预训练基础模型并根据需要进行微调,而不是自行训练。SageMaker提供了一个精心挑选的模型列表,您可以在SageMaker控制台中选择使用。

您现在可以在SageMaker JumpStart中找到来自不同模型提供者的基础模型,使您能够快速开始使用基础模型。SageMaker JumpStart提供基于不同任务或模型提供者的基础模型,您可以轻松查看模型特性和使用条款。您还可以通过测试UI小部件试用这些模型。当您需要大规模使用基础模型时,您可以通过使用模型提供者的预构建笔记本在SageMaker中完成这一过程。由于这些模型托管并部署在AWS上,您可以信任您的数据,无论是用于评估还是大规模使用,都不会泄露给第三方。

令牌流式传输

令牌流式传输允许在模型生成时逐步返回推理响应。这样,您可以增量查看生成的响应,而无需等到模型完成后才提供完整响应。流式传输能提供更好的用户体验,因为它减少了最终用户的延迟感。随着生成的响应逐步到达,您能够及时察觉输出的实用性,并且可以早期停止生成,如果输出不符合您的需求。对于长时间运行的查询,流式传输尤为重要,您可以在输出生成的同时查看结果,由此形成较低的延迟感,尽管端到端的延迟保持不变。

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

无流式传输的响应有流式传输的响应

解决方案概述

在本文中,我们使用Falcon 7B Instruct模型展示了SageMaker JumpStart的流式传输功能。

您可以使用以下代码查找SageMaker JumpStart中支持流式传输的其他模型:

pythonfrom sagemakerjumpstartnotebookutils import listjumpstartmodelsfrom sagemakerjumpstartfilters import And

filtervalue = And(task == llm framework == huggingface)modelids = listjumpstartmodels(filter=filtervalue)print(modelids)

我们得到了支持流式传输的模型ID如下:

python[huggingfacellmbilingualrinna4binstructionppobf16 huggingfacellmfalcon180bbf16 huggingfacellmfalcon180bchatbf16 huggingfacellmfalcon40bbf16 huggingfacellmfalcon40binstructbf16 huggingfacellmfalcon7bbf16 huggingfacellmfalcon7binstructbf16 huggingfacellmmistral7b huggingfacellmmistral7binstruct huggingfacellmrinna36binstructionppobf16]

先决条件

在运行笔记本之前,需要进行一些初始设置步骤。请运行以下命令:

pythonpip install upgrade sagemaker quiet

部署模型

第一步,使用SageMaker JumpStart部署Falcon 7B Instruct模型。完整说明请参考Falcon 180B基础模型现已通过Amazon SageMaker JumpStart提供。使用以下代码:

pythonfrom sagemakerjumpstartmodel import JumpStartModel

mymodel = JumpStartModel(modelid=huggingfacellmfalcon7binstructbf16)predictor = mymodeldeploy()

查询终端节点并流式响应

接下来,构建一个有效载荷以调用已部署的终端节点。重要的是,载荷应包含键/值对stream True,这表明文本生成推理服务器应生成流式响应。

pythonpayload = { inputs 我该如何建立一个网站? parameters {maxnewtokens 256} stream True}

在您查询终端节点之前,您需要创建一个迭代器,可以解析来自终端节点的字节流响应。每个令牌的数据以响应中的单独行提供,因此此迭代器在识别到流式缓冲区中的新行时返回一个令牌。该迭代器设计较为简单,您可以根据自己的用例调整其行为;例如,尽管该迭代器返回令牌字符串,但行数据也包含其他信息,例如令牌的对数概率,这些信息可能很有用。

在 Amazon SageMaker JumpStart 中流式传输大型语言模型响应 机器学习博客

pythonimport ioimport json

class TokenIterator def init(self stream) selfbyteiterator = iter(stream) selfbuffer = ioBytesIO() selfreadpos = 0

def iter(self)    return selfdef next(self)    while True        selfbufferseek(selfreadpos)        line = selfbufferreadline()        if line and line[1] == ord(n)            selfreadpos = len(line)  1            fullline = line[1]decode(utf8)            linedata = jsonloads(fulllinelstrip(data)rstrip(/n))            return linedata[token][text]        chunk = next(selfbyteiterator)        selfbufferseek(0 ioSEEKEND)        selfbufferwrite(chunk[PayloadPart][Bytes])

现在,您可以在创建的终端节点上使用Boto3的invokeendpointwithresponsestream API,并通过迭代TokenIterator实例来启用流式传输:

pythonimport boto3

client = boto3client(runtimesagemaker)response = clientinvokeendpointwithresponsestream( EndpointName=predictorendpointname Body=jsondumps(payload) ContentType=application/json)

for token in TokenIterator(response[Body]) print(token end=)

将print函数的end参数设为空,能够实现无新行字符插入的可视化流式输出。最终生成的输出如下:

建立网站可以是一个复杂的过程,但一般涉及以下步骤:1 确定您网站的目的和目标2 选择域名和托管服务提供商3 使用HTML、CSS和JavaScript设计和开发您的网站4 向网站添加内容并优化搜索引擎5 测试和排错以确保您的网站正常工作6 定期维护和更新网站以保持其顺利运行。在线有许多资源可以引导您完成这些步骤,包括教程和模板。如果对这些步骤中的任何一步不确定,寻求网页开发者或设计师的建议也会很有帮助。

一元机场 ink

您可以在笔记本或其他应用程序如Streamlit或Gradio中使用这些代码,实际体验流式传输为客户提供的体验。

清理

最后,请记得清理已部署的模型和终端节点,以避免产生额外费用:

pythonpredictordeletemodel()predictordeleteendpoint()

结论

在本文中,我们向您展示了如何使用SageMaker JumpStart中新推出的流式传输功能。希望您能利用令牌流式传输能力开发出需要低延迟的交互式应用程序,以提供更好的用户体验。

关于作者

Rachna Chadha 是AWS战略客户的首席解决方案架构师AI/ML。她坚信,伦理和负责任的AI使用能够在未来改善社会,带来经济和社会繁荣。闲暇时间,Rachna喜欢与家人共度时光,徒步旅行和听音乐。

Dr Kyle Ulrich 是Amazon SageMaker内置算法团队的应用科学家。他的研究兴趣包括可扩展的机器学习算法、计算机视觉、时间序列、贝叶斯非参数及高斯过程。他在杜克大学获得博士学位,并在NeurIPS、Cell和Neuron等期刊发表过多篇论文。

Dr Ashish Khetan 是Amazon SageMaker内置算法的高级应用科学家,致力于开发机器学习算法。他获得伊利诺伊大学厄本那香槟分校的博士学位,是机器学习和统计推断领域的活跃研究者,在NeurIPS、ICML、ICLR、JMLR、ACL和EMNLP等会议中发表了多篇论文。