使用 Amazon SageMaker 轻松部署 Hugging Face 模型 🏎

发布于 2021 年 7 月 8 日
在 GitHub 上更新
hugging-face-and-aws-logo

今年早些时候,我们宣布与 Amazon 建立战略合作关系,旨在让公司更轻松地在 Amazon SageMaker 中使用 Hugging Face,并更快地发布尖端机器学习功能。我们推出了新的 Hugging Face 深度学习容器 (DLC),用于在 Amazon SageMaker 中训练 Hugging Face Transformer 模型

今天,我们很高兴与您分享一种新的推理解决方案,它使使用 Amazon SageMaker 部署 Hugging Face Transformers 比以往任何时候都更容易!借助新的 Hugging Face 推理 DLC,您只需多一行代码即可部署训练好的模型进行推理,或者从模型中心选择任何 10,000 多个公开可用的模型,并将其部署到 Amazon SageMaker。

在 SageMaker 中部署模型为您提供生产就绪的端点,这些端点可以在您的 AWS 环境中轻松扩展,并具有内置监控和大量企业级功能。这是一次令人惊叹的合作,我们希望您能充分利用它!

以下是如何使用新的SageMaker Hugging Face 推理工具包来部署基于 Transformers 的模型

from sagemaker.huggingface import HuggingFaceModel

# create Hugging Face Model Class and deploy it as SageMaker Endpoint
huggingface_model = HuggingFaceModel(...).deploy()

就是这样!🚀

要了解有关使用 Amazon SageMaker Python SDK 访问和使用新的 Hugging Face DLC 的更多信息,请查看下面的指南和资源。


资源、文档和示例 📄

您可以在下面找到将模型部署到 Amazon SageMaker 的所有重要资源。

博客/视频

示例/文档


SageMaker Hugging Face 推理工具包 ⚙️

除了用于推理的 Hugging Face Transformers 优化深度学习容器外,我们还为 Amazon SageMaker 创建了一个新的推理工具包。这个新的推理工具包利用 transformers 库中的 pipelines,允许无需编写任何预处理或后处理代码即可进行零代码部署模型。在下面的“入门”部分中,您将找到两个如何将模型部署到 Amazon SageMaker 的示例。

除了零代码部署之外,推理工具包还支持“自带代码”方法,您可以在其中覆盖默认方法。您可以在此处的文档中了解有关“自带代码”的更多信息,或者查看示例笔记本“将自定义推理代码部署到 Amazon SageMaker”。

API - 推理工具包描述

我们使用 transformers pipelines 设计了一个 API,让您可以轻松地利用所有 pipelines 功能。该 API 具有与 🤗 Accelerated Inference API 类似的接口,这意味着您的输入需要定义在 inputs 键中,如果您需要额外的受支持的 pipelines 参数,可以将它们添加到 parameters 键中。您可以在下面找到请求示例。

# text-classification request body
{
    "inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}
# question-answering request body
{
    "inputs": {
        "question": "What is used for inference?",
        "context": "My Name is Philipp and I live in Nuremberg. This model is used with sagemaker for inference."
    }
}
# zero-shot classification request body
{
    "inputs": "Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!",
    "parameters": {
        "candidate_labels": [
            "refund",
            "legal",
            "faq"
        ]
    }
}

入门 🧭

在本指南中,我们将使用新的 Hugging Face 推理 DLC 和 Amazon SageMaker Python SDK 部署两个 Transformer 模型进行推理。

在第一个示例中,我们部署在 Amazon SageMaker 中训练的 Hugging Face Transformer 模型进行推理。

在第二个示例中,我们直接将 Hugging Face 模型中心中 10,000 多个公开可用的 Hugging Face Transformers 模型之一部署到 Amazon SageMaker 进行推理。

设置环境

我们将使用 Amazon SageMaker Notebook Instance 作为示例。您可以在此处了解如何设置笔记本实例。首先,进入 Jupyter Notebook 或 JupyterLab,使用 conda_pytorch_p36 内核创建一个新笔记本。

注意:使用 Jupyter 是可选的:我们也可以从任何安装了 SDK、连接到云以及具有适当权限的地方(例如笔记本电脑、其他 IDE 或 Airflow 或 AWS Step Functions 等任务调度程序)启动 SageMaker API 调用。

之后,我们可以安装所需的依赖项。

pip install "sagemaker>=2.48.0" --upgrade

要在 SageMaker 上部署模型,我们需要创建一个 sagemaker 会话并提供具有正确权限的 IAM 角色。get_execution_role 方法由 SageMaker SDK 提供,作为一种可选的便利。您还可以通过编写要让端点使用的特定角色 ARN 来指定角色。此 IAM 角色将稍后附加到端点,例如从 Amazon S3 下载模型。

import sagemaker

sess = sagemaker.Session()
role = sagemaker.get_execution_role()

将训练好的 Hugging Face Transformer 模型部署到 SageMaker 进行推理

有两种方法可以部署您在 SageMaker 中训练的 Hugging Face 模型。您可以在训练完成后立即部署,或者稍后使用指向 Amazon S3 中保存模型的 model_data 进行部署。除了下面提到的两种选项之外,您还可以使用较低级别的 SDK(如 boto3AWS CLITerraform 和 CloudFormation 模板)实例化 Hugging Face 端点。

使用 Estimator 类在训练后直接部署模型

如果您在训练后直接部署模型,则需要确保所有必需的模型 artifact 都保存在您的训练脚本中,包括 tokenizer 和模型。直接在训练后部署的一个好处是 SageMaker 模型容器元数据将包含源训练作业,从而提供从训练作业到已部署模型的谱系。

from sagemaker.huggingface import HuggingFace

############ pseudo code start ############

# create HuggingFace estimator for running training
huggingface_estimator = HuggingFace(....)

# starting the train job with our uploaded datasets as input
huggingface_estimator.fit(...)

############ pseudo code end ############

# deploy model to SageMaker Inference
predictor = hf_estimator.deploy(initial_instance_count=1, instance_type="ml.m5.xlarge")

# example request, you always need to define "inputs"
data = {
   "inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}
# request
predictor.predict(data)

运行请求后,我们可以再次使用以下命令删除端点。

# delete endpoint
predictor.delete_endpoint()

使用 HuggingFaceModel 类从预训练检查点部署模型

如果您已经训练好模型并希望在稍后部署,则可以使用 model_data 参数指定 tokenizer 和模型权重的位置。

from sagemaker.huggingface.model import HuggingFaceModel

# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
   model_data="s3://models/my-bert-model/model.tar.gz",  # path to your trained sagemaker model
   role=role, # iam role with permissions to create an Endpoint
   transformers_version="4.6", # transformers version used
   pytorch_version="1.7", # pytorch version used
)
# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
   initial_instance_count=1, 
   instance_type="ml.m5.xlarge"
)

# example request, you always need to define "inputs"
data = {
   "inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}

# request
predictor.predict(data)

运行请求后,我们可以再次使用以下命令删除端点。

# delete endpoint
predictor.delete_endpoint()

将 10,000+ Hugging Face Transformers 模型之一部署到 Amazon SageMaker 进行推理

要将模型直接从 Hugging Face 模型中心部署到 Amazon SageMaker,我们需要在创建 HuggingFaceModel 时定义两个环境变量。我们需要定义:

  • HF_MODEL_ID:定义模型 ID,它将在创建 SageMaker 端点时自动从huggingface.co/models加载。🤗 Hub 通过此环境变量提供了 10,000 多个模型。
  • HF_TASK:定义所用 🤗 Transformers 管道的任务。任务的完整列表可以在这里找到。
from sagemaker.huggingface.model import HuggingFaceModel

# Hub Model configuration. <https://huggingface.co/models>
hub = {
  'HF_MODEL_ID':'distilbert-base-uncased-distilled-squad', # model_id from hf.co/models
  'HF_TASK':'question-answering' # NLP task you want to use for predictions
}

# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
   env=hub, # configuration for loading model from Hub
   role=role, # iam role with permissions to create an Endpoint
   transformers_version="4.6", # transformers version used
   pytorch_version="1.7", # pytorch version used
)

# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
   initial_instance_count=1,
   instance_type="ml.m5.xlarge"
)

# example request, you always need to define "inputs"
data = {
"inputs": {
    "question": "What is used for inference?",
    "context": "My Name is Philipp and I live in Nuremberg. This model is used with sagemaker for inference."
    }
}

# request
predictor.predict(data)

运行请求后,我们可以再次使用以下命令删除端点。

# delete endpoint
predictor.delete_endpoint()

常见问题 🎯

您可以在文档中找到完整的常见问题解答

问:我可以部署哪些模型进行推理?

答:您可以部署:

  • 在 Amazon SageMaker 或其他兼容平台中训练的任何 🤗 Transformers 模型,并且可以适应 SageMaker Hosting 设计
  • 来自 Hugging Face 模型中心的 10,000 多个公开可用的 Transformer 模型中的任何一个,或者
  • 您在 Hugging Face 高级帐户中托管的私有模型!

问:推理工具包支持哪些管道和任务?

答:推理工具包和 DLC 支持任何 transformers pipelines。您可以在此处找到完整列表。

问:在托管 SageMaker 端点时,我必须使用 transformers pipelines 吗?

答:不,您也可以编写自定义推理代码来服务您自己的模型和逻辑,具体请参阅此处的文档。

问:我必须使用 SageMaker Python SDK 才能使用 Hugging Face 深度学习容器 (DLC) 吗?

答:您可以在不使用 SageMaker Python SDK 的情况下使用 Hugging Face DLC,并使用其他 SDK(例如 AWS CLIboto3Cloudformation)将模型部署到 SageMaker。DLC 也可通过 Amazon ECR 获得,并且可以在任何选择的环境中拉取和使用。

问:我为什么要使用 Hugging Face 深度学习容器?

答:DLC 是经过全面测试、维护和优化的深度学习环境,无需安装、配置或维护。特别是,我们的推理 DLC 附带了一个预先编写的服务堆栈,这大大降低了 DL 服务的技术门槛。

问:Amazon SageMaker 如何保护我的数据和代码?

答:Amazon SageMaker 提供多种安全机制,包括静态加密传输中加密虚拟私有云 (VPC) 连接以及身份和访问管理 (IAM)。要了解有关 AWS 云和 Amazon SageMaker 中安全的更多信息,您可以访问Amazon SageMaker 中的安全AWS 云安全

问:这在我的区域可用吗?

答:有关受支持区域的列表,请访问AWS 区域表,了解所有 AWS 全球基础设施。

问:您是否为此解决方案提供高级支持或支持 SLA?

答:AWS 技术支持级别可从 AWS 获得,涵盖 AWS 产品和服务的开发和生产问题——请参阅 AWS 支持以获取具体内容和范围。

如果您有问题需要 Hugging Face 社区帮助回答和/或从中受益,请在 Hugging Face 论坛上发布


如果您需要 Hugging Face 团队的高级支持以加速您的 NLP 路线图,我们的专家加速计划提供来自我们开源、科学和机器学习工程团队的直接指导。

社区

注册登录评论