在 Amazon SageMaker JumpStart 上使用 GPT 和 Bloom 模型运行文本生成

十二月2020, AWS 宣布 一般可用 亚马逊SageMaker JumpStart, 的能力 亚马逊SageMaker 帮助您快速轻松地开始使用机器学习 (ML)。 JumpStart 提供跨流行 ML 任务的各种预训练模型的一键式微调和部署,以及一系列解决常见业务问题的端到端解决方案。 这些功能消除了 ML 流程每个步骤的繁重工作,从而更容易开发高质量模型并缩短部署时间。

这篇文章是关于使用 JumpStart 执行特定 ML 任务的系列文章中的第四篇。 在里面 第一篇文章,我们展示了如何在 JumpStart 上运行图像分类用例。 在里面 第二篇文章,我们演示了如何运行文本分类用例。 在里面 第三篇,我们运行了图像分割用例。

在这篇文章中,我们提供了有关如何部署预训练文本生成模型的分步演练。 我们探索了两种获得相同结果的方法:通过 JumpStart 的图形界面 亚马逊SageMaker Studio,并以编程方式通过 JumpStart API.

如果您想直接跳转到我们在本文中介绍的 JumpStart API 代码,可以参考以下示例 Jupyter 笔记本: JumpStart 简介 – 文本生成.

JumpStart 概述

JumpStart 可帮助您开始使用 ML 模型执行各种任务,而无需编写一行代码。 目前,JumpStart 使您能够执行以下操作:

  • 为常见的 ML 任务部署预训练模型 – JumpStart 通过提供在大型、公开可用的数据集上预训练的模型的简单部署,使您无需开发工作即可解决常见的 ML 任务。 ML 研究社区投入了大量精力,使大多数最近开发的模型可供公众使用。 JumpStart 托管了 300 多个模型的集合,涵盖了 15 个最流行的 ML 任务,例如对象检测、文本分类和文本生成,使初学者可以轻松使用它们。 这些模型来自流行的模型中心,例如 TensorFlow、PyTorch、Hugging Face 和 MXNet。
  • 微调预训练模型 – JumpStart 允许您微调预训练模型,而无需编写自己的训练算法。 在 ML 中,将在一个领域中学到的知识迁移到另一个领域的能力称为 转移学习. 您可以使用迁移学习在较小的数据集上生成准确的模型,其训练成本比训练原始模型所涉及的成本低得多。 JumpStart 还包括基于 LightGBM、CatBoost、XGBoost 和 Scikit-learn 的流行训练算法,您可以从头开始训练这些算法以进行表格回归和分类。
  • 使用预先构建的解决方案 – JumpStart 为常见的 ML 用例提供了一组 17 个解决方案,例如需求预测以及工业和金融应用程序,您只需单击几下即可部署这些解决方案。 解决方案是端到端的 ML 应用程序,将各种 AWS 服务组合在一起以解决特定的业务用例。 他们使用 AWS CloudFormation 用于快速部署的模板和参考架构,这意味着它们是完全可定制的。
  • 请参阅 SageMaker 算法的笔记本示例 – SageMaker 提供了一套内置算法来帮助数据科学家和机器学习从业者快速开始训练和部署机器学习模型。 JumpStart 提供了示例笔记本,您可以使用它们来快速使用这些算法。
  • 查看培训视频和博客 – JumpStart 还提供大量博客文章和视频,教您如何使用 SageMaker 中的不同功能。

JumpStart 接受自定义 VPC 设置和 AWS密钥管理服务 (AWS KMS) 加密密钥,因此您可以在企业环境中安全地使用可用的模型和解决方案。 您可以在 Studio 中或通过 SageMaker Python SDK 将您的安全设置传递给 JumpStart。

文本生成、GPT-2 和 Bloom

文本生成是生成流畅的文本的任务,并且看起来与人类编写的文本没有区别。 它也被称为 自然语言生成.

GPT-2 是一种流行的基于 transformer 的文本生成模型。 它在没有人工标注的大型原始英语文本语料库上进行了预训练。 它接受的任务是,给定部分序列(句子或一段文本),模型需要预测序列中的下一个单词或标记。

Bloom 也是一种基于转换器的文本生成模型,其训练方式与 GPT-2 类似。 然而,Bloom 在 46 种不同的语言和 13 种编程语言上进行了预训练。 以下是使用 Bloom 模型运行文本生成的示例:

Input: "Some people like dogs, some people like cats"
Output: "Some people like dogs, some people like cats some people like birds, some people like fish,"

解决方案概述

以下部分提供了通过 Studio UI 和 JumpStart API 执行推理的分步演示。 我们将完成以下步骤:

  1. 通过 Studio UI 访问 JumpStart,以在预训练模型上部署和运行推理。
  2. 以编程方式将 JumpStart 与 SageMaker Python SDK 结合使用,以部署预训练模型并运行推理。

通过 Studio UI 访问 JumpStart 并使用预训练模型运行推理

在本节中,我们将演示如何通过 Studio UI 训练和部署 JumpStart 模型。

以下视频向您展示了如何在 JumpStart 上找到预训练的文本生成模型并进行部署。 模型页面包含有关模型及其使用方法的有价值信息。 您可以部署 JumpStart 中可用的任何预训练模型。 对于推理,我们选择 ml.p3.2xlarge 实例类型,因为它以低价位提供低推理延迟所需的 GPU 加速。 配置 SageMaker 托管实例后,选择 部署. 可能需要 20-25 分钟,直到您的持久端点启动并运行。

一旦您的端点可以运行,它就可以响应推理请求了!

为了加快推理时间,JumpStart 提供了一个示例笔记本,向您展示如何在新部署的端点上运行推理。 选择 打开笔记本使用 Studio 中的端点.

通过 SageMaker SDK 以编程方式使用 JumpStart

在上一节中,我们展示了如何使用 JumpStart UI 以交互方式部署预训练模型,只需单击几下即可。 但是,您也可以使用集成到 SageMaker SDK 中的 API 以编程方式使用 JumpStart 的模型。

在本节中,我们将通过一个快速示例来说明如何使用 SageMaker SDK 复制上述过程。 我们在 JumpStart 中选择合适的预训练模型,将该模型部署到 SageMaker 端点,然后在部署的端点上运行推理。 此演示中的所有步骤都可以在随附的笔记本中找到 JumpStart 简介 – 文本生成.

部署预训练模型

SageMaker 是一个平台,它广泛使用 Docker 容器来执行构建和运行时任务。 JumpStart 使用可用的特定框架 SageMaker 深度学习容器 (DLC)。 我们首先获取任何额外的包,以及用于处理所选任务的训练和推理的脚本。 最后,预训练的模型工件分别使用 model_uris,这为平台提供了灵活性。 您可以使用单个推理脚本在同一任务上预训练的任意数量的模型。 请参见以下代码:

model_id, model_version = "huggingface-textgeneration-bloom-560m", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Bloom 是一个非常大的模型,部署最多可能需要 20-25 分钟。 您还可以使用较小的模型,例如 GPT-2。 要部署预训练的 GPT-2 模型,您可以设置 model_id = huggingface-textgeneration-gpt2. 有关 JumpStart 中其他可用模型的列表,请参阅 JumpStart 可用型号表.

接下来,我们将资源输入到 SageMaker 模型 实例化并部署端点:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

部署模型后,我们可以从中实时获得预测!

运行推理

以下代码片段让您大致了解输出结果。 要向部署的模型发送请求,需要在 utf-8 编码格式。

def query(model_predictor, text):
    """Query the model predictor."""

    encoded_text = json.dumps(text).encode("utf-8")

    query_response = model_predictor.predict(
        encoded_text,
        {
            "ContentType": "application/x-text",
            "Accept": "application/json",
        },
    )
    return query_response

端点响应是一个 JSON 对象,其中包含输入文本和生成的文本:

def parse_response(query_response):
    """Parse response and return the generated text."""

    model_predictions = json.loads(query_response)
    generated_text = model_predictions["generated_text"]
    return generated_text
    
text = "Some people like dogs, some people like cats"
query_response = query(model_predictor, text)
parse_response(query_response)

我们的输出如下:

"Some people like dogs, some people like cats some people like birds, some people like fish,"

结论

在本文中,我们展示了如何使用 JumpStart 部署预训练的文本生成模型。 您无需编写代码即可完成此操作。 自己尝试解决方案并将您的意见发送给我们。 要了解有关 JumpStart 的更多信息以及如何将开源预训练模型用于各种其他 ML 任务,请查看以下内容 AWS re:Invent 2020 视频.


作者简介

在 Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence 上使用 GPT 和 Bloom 模型运行文本生成。 垂直搜索。 人工智能。Vivek Madan 博士 是 Amazon SageMaker JumpStart 团队的一名应用科学家。 他在伊利诺伊大学厄巴纳-香槟分校获得博士学位,并且是乔治亚理工学院的博士后研究员。 他是机器学习和算法设计方面的活跃研究员,并在 EMNLP、ICLR、COLT、FOCS 和 SODA 会议上发表过论文。

在 Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence 上使用 GPT 和 Bloom 模型运行文本生成。 垂直搜索。 人工智能。桑托什·库尔卡尼 是 Amazon Web Services 的企业解决方案架构师,与澳大利亚的体育客户合作。 他热衷于利用他在 AI/ML、大数据和软件开发方面的知识构建大型分布式应用程序来解决业务问题。

在 Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence 上使用 GPT 和 Bloom 模型运行文本生成。 垂直搜索。 人工智能。Ashish Khetan 博士 是 Amazon SageMaker 内置算法的高级应用科学家,帮助开发机器学习算法。 他在伊利诺伊大学香槟分校获得博士学位。 他是机器学习和统计推理领域的活跃研究者,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。

时间戳记:

更多来自 AWS机器学习