本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建推理优化任务作业
你可以使用 Studio 或 SageMaker AI Python SDK 创建推理优化作业。该作业通过应用您选择的技术来优化您的模型。有关更多信息,请参阅 优化技术。
推理优化作业的实例定价
当您创建应用量化或编译的推理优化作业时, SageMaker AI 会选择使用哪种实例类型来运行该作业。根据使用的实例收费。
有关可能的实例类型及其定价详情,请参阅 Amazon 定价页面上的推理优化 SageMaker 定价
应用推测解码的任务不会产生额外费用。
有关您可以优化的支持的模型,请参阅支持的模型参考。
完成以下步骤在 Studio 中创建推理优化作业。
开始创建优化作业
-
在 SageMaker AI Studio 中,通过以下任一路径创建优化作业:
-
要为 JumpStart 模型创建作业,请执行以下操作:
-
在导航菜单中,选择 JumpStart。
-
在全部公共模型页面,选择一个模型提供者,然后选择一个支持优化的模型。
-
在模型详细信息页面,选择优化。只有支持优化的模型才能启用此按钮。
-
在创建推理优化作业页面上,某些 JumpStart 模型要求您签署最终用户许可协议 (EULA),然后才能继续。如果需要,请查看许可协议部分中的许可条款。如果您可以接受使用条款,请选择我接受 EULA 并阅读条款和条件的复选框。
-
-
要为经过微调的 JumpStart 模型创建作业,请执行以下操作:
-
在导航菜单的作业下,选择训练。
-
在 “训练作业” 页面上,选择用于微调 JumpStart模型的作业名称。这些作业的 Jo b 类型列中包含类型JumpStart训练。
-
在训练作业的详细信息页面,选择优化。
-
-
要为自定义模型创建作业,请执行以下操作:
-
在导航菜单的作业下,选择推理优化。
-
选择 Create new job (创建新任务)。
-
在创建推理优化作业页面,选择添加模型。
-
在添加模型窗口中,选择自定义模型。
-
对于自定义模型名称,请输入名称。
-
在 S3 URI 中,输入存储模型构件的 Amazon S3 位置的 URI。
-
-
-
在创建推理优化作业页面上,对于作业名称,您可以接受 SageMaker AI 分配的默认名称。或者,要输入自定义任务名称,请选择作业名称字段,然后选择输入作业名称。
设置优化配置
-
对于部署实例类型,选择要优化模型的实例类型。
实例类型会影响您可以选择的优化技术。对于大多数使用 GPU 硬件的类型,支持的技术有量化和预测解码。如果您选择使用自定义芯片的实例,例如 Amazon Inferentia 实例 ml.inf2.8xlarge,则支持的技术是编译,您可以使用它来编译该特定硬件类型的模型。
-
从 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 会为您选择该选项。
-
-
对于输出,请输入 Amazon S3 中某个位置的 URI。在那里, SageMaker AI 存储了你的任务创建的优化模型的工件。
-
(可选)扩展高级选项,对 IAM 角色、VPC 和环境变量等设置进行更精细的控制。有关更多信息,请参阅下文高级选项。
-
完成作业配置后,选择创建作业。
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
设置项目
-
在应用程序代码中,导入必要的库。下面的示例导入了 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
-
初始化 A SageMaker I 会话。以下示例使用该
Session()
类:sagemaker_session = Session()
定义模型
-
创建
SchemaBuilder
实例,并提供输入和输出样本。在定义模型时,您需要向ModelBuilder
类提供该实例。借助它, SageMaker AI 会自动生成编组函数,用于序列化和反序列化输入和输出。有关使用
SchemaBuilder
和ModelBuilder
类的更多信息,请参阅 使用 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)
-
将您的模型定义为 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 模型的 ID,例如jumpstart-model-id
meta-textgeneration-llama-3-70b
。注意
如果要使用推测性解码进行优化,并且要使用 SageMaker AI 草稿,则必须启用网络隔离。要启用它,请在初始化
ModelBuilder
实例时加入以下参数:enable_network_isolation=True,
有关网络隔离的更多信息,请参见网络隔离。
使用量化进行优化
-
要运行量化作业,请使用
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
", )在此示例中,
替换为 ML 实例,例如instance-type
ml.p4d.24xlarge
。
替换为存储任务创建的优化模型的 S3 位置的路径。s3://output-path
该
optimize()
方法返回一个Model
对象,您可以使用该对象将模型部署到端点。 -
任务完成后,部署模型。以下示例使用该
deploy()
方法:predictor = optimized_model.deploy( instance_type="
instance-type
", accept_eula=True, )在此示例中,
替换为 ML 实例,例如instance-type
ml.p4d.24xlarge
。该
deploy()
方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。
使用 SageMaker AI 草稿模型通过推测性解码进行优化
当你使用推测性解码来优化模型时,你可以选择使用 A SageMaker I 提供的草稿模型,也可以使用自己的模型。以下示例使用 SageMaker AI 草稿模型。
先决条件
要使用推测性解码和 SageMaker AI 草稿模型进行优化,必须在定义模型时启用网络隔离。
-
要运行推测性解码作业,请使用
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", }, )在此示例中,
替换为 ML 实例,例如instance-type
ml.p4d.24xlarge
。该
optimize()
方法返回一个Model
对象,您可以使用该对象将模型部署到端点。 -
任务完成后,部署模型。以下示例使用该
deploy()
方法:predictor = optimized_model.deploy(accept_eula=True)
该
deploy()
方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。
使用自定义草稿模型通过推测性解码进行优化
在向 SageMaker AI 提供自定义草稿模型之前,必须先将模型工件上传到 Amazon S3。
以下示例演示了提供自定义草稿模型的一种可能方法。这些示例从 Hugging Face Hub 下载模型草稿,将其上传到 Amazon S3,然后为参数提供 S3 URI。speculative_decoding_config
-
如果要从 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
gging Face Hub 替换为模型的 ID,例如model-id
meta-llama/Meta-Llama-3-8B
。
替换为本地目录。download-dir
替换为您的用户访问令牌。要了解如何获取访问令牌,请参阅 Hugging Face 文档中的用户访问令牌hf-access-token
。 有关该
huggingface_hub
库的更多信息,请参阅 Hugging Face 文档中的 Hub 客户端库。 -
要将您下载的模型提供给 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
", )在此示例中,
替换为可帮助您区分 S3 中草稿模型的限定符,例如prefix
spec-dec-custom-draft-model
。该
upload_data()
方法返回模型工件的 S3 URI。 -
要运行推测性解码作业,请使用
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 + "/", }, )在此示例中,
替换为 ML 实例,例如instance-type
ml.p4d.24xlarge
。该
optimize()
方法返回一个Model
对象,您可以使用该对象将模型部署到端点。 -
任务完成后,部署模型。以下示例使用该
deploy()
方法:predictor = optimized_model.deploy(accept_eula=True)
该
deploy()
方法返回一个预测器对象,您可以使用该对象向托管模型的端点发送推理请求。
使用编译进行优化
-
要运行编译作业,请使用
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
", )在此示例中,设置
为具有加速硬件的 ML 实例类型。例如,要使用 Inf Amazon erentia 加速推理,您可以将类型设置为 Inf2 实例,例如。instance-type
ml.inf2.48xlarge
替换为存储任务创建的优化模型的 S3 位置的路径。s3://output-path
-
任务完成后,部署模型。以下示例使用该
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 环境变量
。