创建推理优化任务作业 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建推理优化任务作业

你可以使用 Studio 或 SageMaker AI Python SDK 创建推理优化作业。该作业通过应用您选择的技术来优化您的模型。有关更多信息,请参阅 优化技术

推理优化作业的实例定价

当您创建应用量化或编译的推理优化作业时, SageMaker AI 会选择使用哪种实例类型来运行该作业。根据使用的实例收费。

有关可能的实例类型及其定价详情,请参阅 Amazon 定价页面上的推理优化 SageMaker 定价信息。

应用推测解码的任务不会产生额外费用。

有关您可以优化的支持的模型,请参阅支持的模型参考

完成以下步骤在 Studio 中创建推理优化作业。

开始创建优化作业
  1. 在 SageMaker AI Studio 中,通过以下任一路径创建优化作业:

    • 要为 JumpStart 模型创建作业,请执行以下操作:

      1. 在导航菜单中,选择 JumpStart

      2. 全部公共模型页面,选择一个模型提供者,然后选择一个支持优化的模型。

      3. 在模型详细信息页面,选择优化。只有支持优化的模型才能启用此按钮。

      4. 创建推理优化作业页面上,某些 JumpStart 模型要求您签署最终用户许可协议 (EULA),然后才能继续。如果需要,请查看许可协议部分中的许可条款。如果您可以接受使用条款,请选择我接受 EULA 并阅读条款和条件的复选框。

    • 要为经过微调的 JumpStart 模型创建作业,请执行以下操作:

      1. 在导航菜单的作业下,选择训练

      2. 在 “训练作业” 页面上,选择用于微调 JumpStart模型的作业名称。这些作业的 Jo b 类型列中包含类型JumpStart训练

      3. 在训练作业的详细信息页面,选择优化

    • 要为自定义模型创建作业,请执行以下操作:

      1. 在导航菜单的作业下,选择推理优化

      2. 选择 Create new job (创建新任务)。

      3. 创建推理优化作业页面,选择添加模型

      4. 添加模型窗口中,选择自定义模型

      5. 对于自定义模型名称,请输入名称。

      6. S3 URI 中,输入存储模型构件的 Amazon S3 位置的 URI。

  2. 创建推理优化作业页面上,对于作业名称,您可以接受 SageMaker AI 分配的默认名称。或者,要输入自定义任务名称,请选择作业名称字段,然后选择输入作业名称

设置优化配置
  1. 对于部署实例类型,选择要优化模型的实例类型。

    实例类型会影响您可以选择的优化技术。对于大多数使用 GPU 硬件的类型,支持的技术有量化预测解码。如果您选择使用自定义芯片的实例,例如 Amazon Inferentia 实例 ml.inf2.8xlarge,则支持的技术是编译,您可以使用它来编译该特定硬件类型的模型。

  2. 从 Studio 提供的优化技术中选择一种或多种:

    • 如果选择量化,请为精确数据类型选择一种数据类型。

    • 如果选择 “推测性解码”,请选择以下选项之一:

      • 使用 SageMaker AI 草稿模型-选择使用 SageMaker AI 提供的草稿模型。

        注意

        如果您选择使用 A SageMaker I 草稿模型,则还必须启用网络隔离。Studio 在 “安全” 下提供了此选项。

      • 选择 JumpStart 绘制模型-选择从 JumpStart目录中选择一个模型用作草稿模型。

      • 选择自己的草稿模型-选择使用自己的草稿模型,并提供定位该模型的 S3 URI。

    • 如果您选择快速加载模型,Studio 会显示OPTION_TENSOR_PARALLEL_DEGREE环境变量。使用 Value 字段设置张量并行度。该值必须平均除以您为 Dep GPUs loyment 实例类型选择的实例的数量。例如,要在使用带有 8 的实例时对模型进行分片 GPUs,请使用值 2、4 或 8。

    • 如果您将 “部署” 实例类型设置为 Amazon Inferentia 或 Amazon Trainium 实例,Studio 可能会显示 “编译” 是唯一支持的选项。在这种情况下,Studio 会为您选择该选项。

  3. 对于输出,请输入 Amazon S3 中某个位置的 URI。在那里, SageMaker AI 存储了你的任务创建的优化模型的工件。

  4. (可选)扩展高级选项,对 IAM 角色、VPC 和环境变量等设置进行更精细的控制。有关更多信息,请参阅下文高级选项

  5. 完成作业配置后,选择创建作业

    Studio 显示作业详情页面,其中显示作业状态及其所有设置。

高级选项

创建推理优化作业时,您可以设置以下高级选项。

配置下,您可以设置以下选项:

张量并行度

张量并行度的值。张量并行性是模型并行性的一种,它在设备之间拆分特定的模型权重、梯度和优化器状态。该值必须平均除以集群 GPUs 中的数量。

最大令牌长度

模型生成的令牌数量限制。请注意,模型可能并不总是生成最大数量的令牌。

并发

在同一底层硬件上运行多个模型实例的能力。使用并发功能为多个用户提供预测服务,最大限度地提高硬件利用率。

批次大小

如果您的模型进行批量推理,请使用此选项来控制模型处理的批次大小。

批量推理根据一批观测数据生成模型预测。对于大型数据集或不需要立即响应推理请求的情况,这是一个不错的选择。

安全性下,您可以设置以下选项:

IAM 角色

一个 IAM 角色,允许 SageMaker AI 代表您执行任务。在模型优化期间, SageMaker AI 需要获得您的许可才能执行以下操作:

  • 从 S3 存储桶读取输入数据

  • 将模型构件写入 S3 存储桶

  • 将日志写入 Amazon CloudWatch 日志

  • 向 Amazon 发布指标 CloudWatch

您授予 IAM 角色执行所有这些任务的权限。

有关更多信息,请参阅 如何使用 SageMaker AI 执行角色

加密 KMS 密钥

Amazon Key Management Service (Amazon KMS) 中的一个密钥。 SageMaker 当 AI 将优化模型上传到 Amazon S3 时, SageMaker AI 使用它们的密钥来加密该模型的工件。

VPC

SageMaker AI 使用这些信息来创建网络接口并将其连接到您的模型容器。网络接口在未连接到互联网的 VPC 中为您的模型容器提供网络连接。它们还允许您的模型连接到私有 VPC 中的资源。

有关更多信息,请参阅 让 SageMaker AI 托管的终端节点访问您的 Amazon VPC 中的资源

启用网络隔离

如果您要限制容器的互联网访问,请激活此选项。以网络隔离方式运行的容器不能进行任何出站网络调用。

注意

当您使用推测性解码进行优化并使用 SageMaker AI 草稿模型时,必须激活此选项。

有关网络隔离的更多信息,请参见网络隔离

高级容器定义下,您可以设置以下选项:

停止条件

指定作业运行时间的限制。当作业达到时间限制时, SageMaker AI 会结束作业。使用此选项为成本设定上限。

标签

与优化作业相关的键值对。

有关标签的更多信息,请参阅 Amazon Web Services 一般参考 中的标记 Amazon 资源

环境变量

定义要在模型容器中设置的环境变量的键值对。

您可以在项目中使用 SageMaker AI Python SDK 创建推理优化作业。首先,使用ModelBuilder类来定义Model实例。然后,使用该optimize()方法运行一项通过量化、推测性解码或编译来优化模型的作业。任务完成后,您可以使用deploy()方法将模型部署到推理端点。

有关以下示例中使用的类和方法的更多信息,请参阅 APIs SageMaker AI Python SDK 文档。

设置项目
  1. 在应用程序代码中,导入必要的库。下面的示例导入了 Python SDK (Boto3)。它还会从 SageMaker AI Python SDK 中导入用于定义和处理模型的类:

    import boto3 from sagemaker.serve.builder.model_builder import ModelBuilder from sagemaker.serve.builder.schema_builder import SchemaBuilder from sagemaker.session import Session from pathlib import Path
  2. 初始化 A SageMaker I 会话。以下示例使用该Session()类:

    sagemaker_session = Session()
定义模型
  1. 创建 SchemaBuilder 实例,并提供输入和输出样本。在定义模型时,您需要向 ModelBuilder 类提供该实例。借助它, SageMaker AI 会自动生成编组函数,用于序列化和反序列化输入和输出。

    有关使用 SchemaBuilderModelBuilder 类的更多信息,请参阅 使用 Amazon A SageMaker I 创建模型 ModelBuilder

    下面的示例提供了 SchemaBuilder 类的输入和输出字符串示例:

    response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun." sample_input = { "inputs": "What is the largest planet in the solar system?", "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6}, } sample_output = [{"generated_text": response}] schema_builder = SchemaBuilder(sample_input, sample_output)
  2. 将您的模型定义为 SageMaker AI。下面的示例设置了初始化 ModelBuilder 实例的参数:

    model_builder = ModelBuilder( model="jumpstart-model-id", schema_builder=schema_builder, sagemaker_session=sagemaker_session, role_arn=sagemaker_session.get_caller_identity_arn(), )

    此示例使用 JumpStart 模型。jumpstart-model-id替换为 JumpStart 模型的 ID,例如meta-textgeneration-llama-3-70b

    注意

    如果要使用推测性解码进行优化,并且要使用 SageMaker AI 草稿,则必须启用网络隔离。要启用它,请在初始化ModelBuilder实例时加入以下参数:

    enable_network_isolation=True,

    有关网络隔离的更多信息,请参见网络隔离

使用量化进行优化
  1. 要运行量化作业,请使用optimize()方法并设置quantization_config参数。以下示例在优化容器中设置OPTION_QUANTIZE为环境变量:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, quantization_config={ "OverrideEnvironment": { "OPTION_QUANTIZE": "awq", }, }, output_path="s3://output-path", )

    在此示例中,instance-type替换为 ML 实例,例如ml.p4d.24xlarges3://output-path替换为存储任务创建的优化模型的 S3 位置的路径。

    optimize()方法返回一个Model对象,您可以使用该对象将模型部署到端点。

  2. 任务完成后,部署模型。以下示例使用该deploy()方法:

    predictor = optimized_model.deploy( instance_type="instance-type", accept_eula=True, )

    在此示例中,instance-type替换为 ML 实例,例如ml.p4d.24xlarge

    deploy()方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。

使用 SageMaker AI 草稿模型通过推测性解码进行优化

当你使用推测性解码来优化模型时,你可以选择使用 A SageMaker I 提供的草稿模型,也可以使用自己的模型。以下示例使用 SageMaker AI 草稿模型。

先决条件

要使用推测性解码和 SageMaker AI 草稿模型进行优化,必须在定义模型时启用网络隔离。

  1. 要运行推测性解码作业,请使用optimize()方法并设置参数。speculative_decoding_config以下示例设置了使用 SageMaker AI 提供的草稿模型的ModelProvider密钥。SAGEMAKER

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelProvider": "SAGEMAKER", }, )

    在此示例中,instance-type替换为 ML 实例,例如ml.p4d.24xlarge

    optimize()方法返回一个Model对象,您可以使用该对象将模型部署到端点。

  2. 任务完成后,部署模型。以下示例使用该deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy()方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。

使用自定义草稿模型通过推测性解码进行优化

在向 SageMaker AI 提供自定义草稿模型之前,必须先将模型工件上传到 Amazon S3。

以下示例演示了提供自定义草稿模型的一种可能方法。这些示例从 Hugging Face Hub 下载模型草稿,将其上传到 Amazon S3,然后为参数提供 S3 URI。speculative_decoding_config

  1. 如果要从 Hugging Face Hub 下载模型,请将huggingface_hub该库添加到您的项目中,然后使用snapshot_download()该方法下载模型。以下示例将模型下载到本地目录:

    import huggingface_hub huggingface_hub.snapshot_download( repo_id="model-id", revision="main", local_dir=download-dir, token=hf-access-token, )

    在此示例中,将 Hu model-id gging Face Hub 替换为模型的 ID,例如meta-llama/Meta-Llama-3-8Bdownload-dir替换为本地目录。hf-access-token替换为您的用户访问令牌。要了解如何获取访问令牌,请参阅 Hugging Face 文档中的用户访问令牌

    有关该huggingface_hub库的更多信息,请参阅 Hugging Face 文档中的 Hub 客户端库

  2. 要将您下载的模型提供给 SageMaker AI,请将其上传到 Amazon S3。以下示例上传带有sagemaker_session对象的模型:

    custom_draft_model_uri = sagemaker_session.upload_data( path=hf_local_download_dir.as_posix(), bucket=sagemaker_session.default_bucket(), key_prefix="prefix", )

    在此示例中,prefix替换为可帮助您区分 S3 中草稿模型的限定符,例如spec-dec-custom-draft-model

    upload_data()方法返回模型工件的 S3 URI。

  3. 要运行推测性解码作业,请使用optimize()方法并设置参数。speculative_decoding_config以下示例将ModelSource密钥设置为自定义草稿模型的 S3 URI:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelSource": custom_draft_model_uri + "/", }, )

    在此示例中,instance-type替换为 ML 实例,例如ml.p4d.24xlarge

    optimize()方法返回一个Model对象,您可以使用该对象将模型部署到端点。

  4. 任务完成后,部署模型。以下示例使用该deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy()方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。

使用编译进行优化
  1. 要运行编译作业,请使用optimize()方法并设置compilation_config参数。以下示例使用OverrideEnvironment密钥在优化容器中设置必要的环境变量:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, compilation_config={ "OverrideEnvironment": { "OPTION_TENSOR_PARALLEL_DEGREE": "24", "OPTION_N_POSITIONS": "8192", "OPTION_DTYPE": "fp16", "OPTION_ROLLING_BATCH": "auto", "OPTION_MAX_ROLLING_BATCH_SIZE": "4", "OPTION_NEURON_OPTIMIZE_LEVEL": "2", } }, output_path="s3://output-path", )

    在此示例中,设置instance-type为具有加速硬件的 ML 实例类型。例如,要使用 Inf Amazon erentia 加速推理,您可以将类型设置为 Inf2 实例,例如。ml.inf2.48xlarges3://output-path替换为存储任务创建的优化模型的 S3 位置的路径。

  2. 任务完成后,部署模型。以下示例使用该deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy()方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。

使用推理请求测试模型
  • 要向已部署的模型发送测试推理请求,请使用预测器对象predict()的方法。以下示例传递了在示例中也传递给SchemaBuilder类的sample_input变量来定义您的模型:

    predictor.predict(sample_input)

    示例输入有提示"What is the largest planet in the solar system?"。该predict()方法返回模型生成的响应,如以下示例所示:

    {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}

SageMaker AI 草稿模型的局限性

对于您使用 SageMaker AI 草稿模型优化的任何模型,请注意要求、限制和支持的环境变量。

要求

您必须执行以下操作:

  • 使用提供的模型 SageMaker JumpStart。

  • 为模型部署启用网络隔离。

  • 如果您将模型部署到大型模型推理 (LMI) 容器,请使用版本 0.28.0 或更高版本的 DJLServing 容器。

    有关可用容器,请参阅 Deep Learn ing Containers GitHub 存储库中的大型模型推理容器。

  • 如果您对 JumpStart 模型进行微调,请使用 safetensors 格式作为模型权重。

    有关此格式的更多信息,请参阅 Hugging Face 文档中的 Safetensor s。

限制

您无法执行以下操作:

  • 在本地模式下创建的本地测试环境中使用该模型。

    有关本地模式的更多信息,请参阅 SageMaker AI Python SDK 文档中的本地模式

  • 通过 Amazon Systems Manager 代理(SSM 代理)访问模型容器。SSM 代理提供对模型容器的外壳级访问权限,以便您可以使用 Amazon 调试流程和记录命令。 CloudWatch

    有关此特征的更多信息,请参阅通过 SSM 访问容器

  • 为进程崩溃时发生的核心转储配置模型容器。

    有关来自模型容器的核心转储的更多信息,请参阅ProductionVariantCoreDumpConfig

  • 将模型部署到多模型端点、多容器端点或托管推理组件的端点。

    有关这些终端节点类型的更多信息,请参阅多模型端点多容器端点、和推理组件

  • 为模型创建模型包。您可以使用模型包来创建可在上 Amazon Web Services Marketplace面发布的可部署模型。

    有关此特征的更多信息,请参阅创建模型包资源

  • 在模型容器中使用您自己的推理代码。

  • 使用模型容器中的requirements.txt文件。这种类型的文件列出了软件包的依赖关系。

  • 启用 Hugging Face 参数trust_remote_code

支持的环境变量

您只能使用以下环境变量配置容器:

  • 大型模型推理 (LMI) 容器的常见环境变量。

    有关这些变量的更多信息,请参阅 LMI 容器文档中的环境变量配置

  • Hugging Face Hub 在其 Git 存储库中提供的软件包的常用环境变量。

    有关存储库,请参阅 Hugging Fac GitHub e on

  • 常用 PyTorch 和 CUDA 环境变量。

    有关这些变量的更多信息,请参阅 PyTorch 文档中的 Torch 环境变量