本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
你可以使用 Studio 或 SageMaker Python SDK 创建推理优化作业。
推理优化任务的实例定价
当您创建应用量化或编译的推理优化作业时,请 SageMaker 选择要使用的实例类型来运行该作业。根据使用的实例向您收费。
有关可能的实例类型及其定价详情,请参阅 Amazon 定价页面上的推理优化 SageMaker 定价
使用投机性解码的工作不会产生任何额外费用。
完成以下步骤,在 Studio 中创建推理优化作业。
开始创建优化作业
-
在 SageMaker Studio 中,通过以下任一路径创建优化作业:
-
要为 JumpStart 模型创建作业,请执行以下操作:
-
在导航菜单中,选择 JumpStart。
-
在所有公共模型页面上,选择一个模型提供者,然后选择一个支持优化的模型。
-
在模型详细信息页面上,选择优化。此按钮仅对支持优化的模型启用。
-
在创建推理优化作业页面上,某些 JumpStart 模型要求您签署最终用户许可协议 (EULA),然后才能继续。如果需要,请查看 “许可协议” 部分中的许可条款。如果您的用例可以接受这些条款,请选中 “我接受” 复选框EULA,然后阅读条款和条件。
-
-
要为经过微调的 JumpStart 模型创建作业,请执行以下操作:
-
在导航菜单中的 “作业” 下,选择 “培训”。
-
在 “训练作业” 页面上,选择用于微调 JumpStart 模型的作业名称。这些作业的 Jo b 类型列中包含类型JumpStart 训练。
-
在训练作业的详细信息页面上,选择优化。
-
-
要为自定义模型创建作业,请执行以下操作:
-
在导航菜单中的作业下,选择推理优化。
-
选择 Create new job (创建新任务)。
-
在创建推理优化作业页面上,选择添加模型。
-
在添加模型窗口中,选择自定义模型。
-
在自定义模型名称中,输入一个名称。
-
对于 S3 URI,请输入您在 Amazon S3 中存储模型工件的位置。URI
-
-
-
在创建推理优化作业页面上,对于作业名称,您可以接受 SageMaker 分配的默认名称。或者,要输入自定义作业名称,请选择作业名称字段,然后选择输入作业名称。
设置优化配置
-
对于 Dep loyment 实例类型,选择要优化模型的实例类型。
实例类型会影响您可以选择的优化技术。对于大多数使用GPU硬件的类型,支持的技术是量化和推测性解码。如果您选择使用自定义芯片的实例,例如 AWS Inferentia 实例 ml.inf2.8xlarge,则支持的技术是编译,您可以使用它来编译该特定硬件类型的模型。
-
选择 Studio 提供的一种或多种优化技术:
-
如果选择 “量化”,请为 “精度” 数据类型选择一种数据类型。
-
如果选择推测性解码,则如果要使用提供的SageMaker 草稿模型, SageMaker 请选择草稿模型。或者,如果您想使用自己的草稿模型,请选择使用自己的草稿模型,然后提供定位URI该模型的 S3。
-
如果您选择使用自定义芯片的实例,Studio 可能会显示编译是唯一支持的选项。在这种情况下,Studio 会为您选择此选项。
-
-
在输出中,输入 Amazon S3 中某个位置的。URI在那里, SageMaker 存储你的任务创建的优化模型的工件。
-
(可选)展开 “高级” 选项,以便对IAM角色VPC、和环境变量等设置进行更精细的控制。有关更多信息,请参阅下面的高级选项。
-
配置完作业后,选择创建作业。
Studio 显示作业详细信息页面,其中显示了作业状态及其所有设置。
高级选项
在创建推理优化作业时,您可以设置以下高级选项。
在 “配置” 下,您可以设置以下选项:
- 张量并行度
-
张量并行度值。张量并行性是模型并行性的一种,它在设备之间拆分特定的模型权重、梯度和优化器状态。该值必须平均除以集群GPUs中的数量。
- 最大代币长度
-
模型生成的代币数量限制。请注意,模型可能并不总是生成最大数量的代币。
- 并发
-
能够在同一个底层硬件上运行模型的多个实例。使用并发向多个用户提供预测并最大限度地提高硬件利用率。
- 批次大小
-
如果您的模型进行批量推理,请使用此选项来控制模型处理的批次的大小。
Batch 推理会根据一批观测值生成模型预测。对于大型数据集或您不需要立即响应推理请求时,这是一个不错的选择。
在 “安全” 下,您可以设置以下选项:
- IAM角色
-
SageMaker 能够代表您执行任务的IAM角色。在模型优化期间, SageMaker 需要获得您的许可才能执行以下操作:
-
从 S3 存储桶读取输入数据
-
将模型项目写入 S3 存储桶
-
将日志写入 Amazon CloudWatch 日志
-
向 Amazon 发布指标 CloudWatch
您可以向IAM角色授予所有这些任务的权限。
有关更多信息,请参阅 如何使用 SageMaker 执行角色。
-
- 加密密KMS钥
-
AWS Key Management Service (AWS KMS) 中的一个密钥。 SageMaker 在将模型 SageMaker 上传到 Amazon S3 时,使用它们的密钥来加密优化模型的工件。
- VPC
-
SageMaker 使用此信息创建网络接口并将其连接到您的模型容器。网络接口为您的模型容器提供了一个未连接VPC到 Internet 的网络连接。它们还使您的模型能够连接到您的私有资源VPC。
有关更多信息,请参阅 允许 SageMaker 托管终端节点访问您的 Amazon 中的资源 VPC。
- 启用网络隔离
-
如果您想限制集装箱的互联网访问,请激活此选项。在网络隔离下运行的容器无法进行任何出站网络呼叫。
在 “高级容器定义” 下,您可以设置以下选项:
- 停止条件
-
指定作业可以运行多长时间的限制。当作业达到时间限制时, SageMaker 结束作业。使用此选项来限制成本。
- 标签
-
与优化作业关联的键值对。
有关标签的更多信息,请参阅中的为AWS 资源添加标签。AWS 一般参考
- 环境变量
-
键值对,用于定义要在模型容器中设置的环境变量。
以下代码示例演示了如何使用 Amaz SageMaker on 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
sagemaker_session = Session()
artifacts_bucket_name = sagemaker_session.default_bucket()
execution_role_arn = sagemaker_session.get_caller_identity_arn()
js_model_id = "meta-textgeneration-llama-3-70b"
instance_type = "ml.p4d.24xlarge"
例 模型定义
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)
model_builder = ModelBuilder( model=js_model_id, schema_builder=schema_builder, sagemaker_session=sagemaker_session, role_arn=execution_role_arn, )
例 量化优化作业
optimized_model = model_builder.optimize(
instance_type=instance_type,
accept_eula=True,
quantization_config={
"OverrideEnvironment": {
"OPTION_QUANTIZE": "awq",
},
},
output_path="s3://output_path
",
)
predictor = optimized_model.deploy(
instance_type="ml.g5.12xlarge",
accept_eula=True,
)
例 使用草稿模型进行推测性解码的 SageMaker 优化工作
optimized_model = model_builder.optimize(
instance_type=instance_type,
accept_eula=True,
speculative_decoding_config={
"ModelProvider": "SAGEMAKER",
},
)
predictor = optimized_model.deploy(accept_eula=True)
例 使用自定义草稿模型进行推测性解码的优化工作
import huggingface_hub
custom_draft_model_id="meta-llama/Meta-Llama-3-8B
"
hf_local_download_dir = download_dir
huggingface_hub.snapshot_download(
repo_id=custom_draft_model_id,
revision="main",
local_dir=hf_local_download_dir,
token=hf_access_token
,
)
custom_draft_model_uri = sagemaker_session.upload_data(
path=hf_local_download_dir.as_posix(),
bucket=artifacts_bucket_name,
key_prefix="spec-dec-custom-draft-model
",
)
optimized_model = model_builder.optimize(
instance_type=instance_type,
accept_eula=True,
speculative_decoding_config={
"ModelSource": custom_draft_model_uri + "/",
},
)
predictor = optimized_model.deploy(accept_eula=True)
例 用于编译的优化作业
optimized_model = model_builder.optimize(
instance_type="ml.inf2.48xlarge",
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
",
)
predictor = optimized_model.deploy(accept_eula=True)
例 推理请求
predictor.predict(sample_input)
{'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 . . .'}
例 清理
predictor.delete_model()
predictor.delete_endpoint(delete_endpoint_config=True)