亚马逊AWS官方博客

Amazon SageMaker 增加新的推理功能,帮助降低基础模型的部署成本和延迟



今天,我们宣布推出新的 Amazon SageMaker 推理功能,帮助您优化部署成本,并降低延迟。借助新的推理功能,您可以在同一个 SageMaker 端点上部署一个或多个基础模型(FM),并控制为每个 FM 预留的加速器数量和内存容量。这有助于提高资源利用率,将模型的部署成本平均降低 50%,并使您能够根据用例扩展端点。

对于每个 FM,您都可以定义单独的扩展策略,以适应模型使用模式,同时进一步优化基础设施成本。此外,SageMaker 还会主动监控正在处理推理请求的实例,并根据实例的可用情况,智能地发送请求,从而帮助将推理延迟平均降低 20%。

关键组件
新的推理功能基于 SageMaker 的实时推理端点。和往常一样,您需要通过端点配置创建 SageMaker 端点,在配置中定义端点的实例类型以及初始实例的数量。模型则在名为推理组件的新结构中配置。您需要在其中指定要分配给每个模型副本的加速器数量和内存容量,以及模型构件、容器镜像和要部署的模型副本数量。

Amazon SageMaker - MME

我将向您演示具体做法。

新推理功能的实战运用
你可以通过 SageMaker StudioSageMaker Python SDKAWS SDKAWS 命令行界面(AWS CLI)开始使用新的推理功能。AWS CloudFormation 也支持这些新功能。

在这个演示中,我将通过适用于 Python 的 Amazon SDK(Boto3),利用新的推理功能在 SageMaker 实时端点上部署来自 Hugging Face 模型中心Dolly v2 7B 模型副本和 FLAN-T5 XXL 模型副本。

创建 SageMaker 端点配置

import boto3
import sagemaker

role = sagemaker.get_execution_role()
sm_client = boto3.client(service_name="sagemaker")

sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ExecutionRoleArn=role,
    ProductionVariants=[{
        "VariantName": "AllTraffic",
        "InstanceType": "ml.g5.12xlarge",
        "InitialInstanceCount": 1,
		"RoutingConfig": {
            "RoutingStrategy": "LEAST_OUTSTANDING_REQUESTS"
        }
    }]
)

创建 SageMaker 端点

sm_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)

创建推理组件之前,您需要创建与 SageMaker 兼容的模型,并指定要使用的容器镜像。对于这两款模型,我采用了 Hugging Face LLM 推理容器,配合 Amazon SageMaker 使用。 这些深度学习容器(DLC)包含了在 SageMaker 上托管大型模型所需的组件、库和驱动程序。

准备 Dolly v2 模型

from sagemaker.huggingface import get_huggingface_llm_image_uri

# 检索容器镜像 URI
hf_inference_dlc = get_huggingface_llm_image_uri(
  "huggingface",
  version="0.9.3"
)

# 配置模型容器
dolly7b = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'databricks/dolly-v2-7b',
        'HF_TASK':'text-generation',
    }
}

# 创建 SageMaker 模型
sagemaker_client.create_model(
    ModelName        = "dolly-v2-7b",
    ExecutionRoleArn = role,
    Containers       = [dolly7b]
)

准备 FLAN-T5 XXL 模型

# 配置模型容器
flant5xxlmodel = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'google/flan-t5-xxl',
        'HF_TASK':'text-generation',
    }
}

# 创建 SageMaker 模型
sagemaker_client.create_model(
    ModelName        = "flan-t5-xxl",
    ExecutionRoleArn = role,
    Containers       = [flant5xxlmodel]
)

现在,您可以创建推理组件了。

为每个模型创建推理组件
为要在端点上部署的每个模型指定推理组件。推理组件允许您指定与 SageMaker 兼容的模型,以及要分配的计算资源和内存资源。为 CPU 工作负载定义要分配的内核数量。为加速器工作负载定义加速器的数量。RuntimeConfig 定义了您要部署的模型副本数量。

# 针对 Dolly v2 7B 的推理组件
sm_client.create_inference_component(
    InferenceComponentName="IC-dolly-v2-7b",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "dolly-v2-7b",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2,
			"NumberOfCpuCoresRequired": 2,
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

# 针对 FLAN-T5 XXL 的推理组件
sm_client.create_inference_component(
    InferenceComponentName="IC-flan-t5-xxl",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "flan-t5-xxl",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2,
			"NumberOfCpuCoresRequired": 1,
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

成功部署推理组件后,您就可以调用模型了。

运行推理
要在端点上调用模型,请指定相应的推理组件。

import json
sm_runtime_client = boto3.client(service_name="sagemaker-runtime")
payload = {"inputs": "Why is California a great place to live?"}

response_dolly = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-dolly-v2-7b",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

response_flant5 = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-flan-t5-xxl",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

result_dolly = json.loads(response_dolly['Body'].read().decode())
result_flant5 = json.loads(response_flant5['Body'].read().decode())

接下来,通过注册扩展目标,并将扩展策略应用至推理组件,您可以为每个模型定义单独的扩展策略。如需详细说明,请查阅《SageMaker 开发人员指南》

新的推理功能提供每个模型的 CloudWatch 指标和 CloudWatch 日志,并且可以在基于 SageMaker CPU 和 GPU 的计算实例中,与任何 SageMaker 兼容的容器镜像一起使用。在容器镜像的支持下,您还可以使用响应流。

现已推出
新的 Amazon SageMaker 推理功能现已在以下AWS 区域推出:美国东部(俄亥俄州、弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(雅加达、孟买、首尔、新加坡、悉尼、东京)、加拿大(中部)、欧洲地区(法兰克福、爱尔兰、伦敦、斯德哥尔摩)、中东地区(阿联酋)和南美洲(圣保罗)。有关定价的详细信息,请访问 Amazon SageMaker 定价。要了解更多信息,请访问 Amazon SageMaker

开始使用
立即登录 AWS 管理控制台,使用新的 SageMaker 推理功能部署您的 FM!

— Antje