为在线预测选择机器类型

AI Platform Prediction 会分配节点来处理发送到某一模型版本的在线预测请求。您部署模型版本时,可以自定义 AI Platform Prediction 用于这些节点的虚拟机类型。

机器类型具有以下不同之处:

通过选择具有更多计算资源的机器类型,您可以缩短执行预测的延迟时间,也可以同时处理更多预测请求。

可用机器类型

Compute Engine (N1) 机器类型和 mls1-c1-m2 机器类型进行在线预测。mls1-c4-m2 机器类型为 Beta 版。

下表比较各可用机器类型:

名称 可用性 vCPU 数量 内存 (GB) 是否支持 GPU? 机器学习框架支持 模型大小上限
mls1-c1-m2(全球端点上的默认值) 已全面推出 1 2 TensorFlow、XGBoost、scikit-learn(包括具有自定义代码的流水线)、自定义预测例程 500 MB
mls1-c4-m2 Beta 版 4 2 TensorFlow、XGBoost、scikit-learn(包括具有自定义代码的流水线)、自定义预测例程 500 MB
n1-standard-2(区域端点上的默认值) 已全面推出 2 7.5 TensorFlow、XGBoost、scikit-learn 10 GB
n1-standard-4 已全面推出 4 15 TensorFlow、XGBoost、scikit-learn 10 GB
n1-standard-8 已全面推出 8 30 TensorFlow、XGBoost、scikit-learn 10 GB
n1-standard-16 已全面推出 16 60 TensorFlow、XGBoost、scikit-learn 10 GB
n1-standard-32 已全面推出 32 120 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highmem-2 已全面推出 2 13 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highmem-4 已全面推出 4 26 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highmem-8 已全面推出 8 52 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highmem-16 已全面推出 16 104 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highmem-32 已全面推出 32 208 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highcpu-2 已全面推出 2 1.8 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highcpu-4 已全面推出 4 3.6 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highcpu-8 已全面推出 8 7.2 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highcpu-16 已全面推出 16 14.4 TensorFlow、XGBoost、scikit-learn 10 GB
n1-highcpu-32 已全面推出 32 28.8 TensorFlow、XGBoost、scikit-learn 10 GB

了解每种机器类型的价格。如需详细了解 Compute Engine (N1) 机器类型的规范,请参阅 Compute Engine 文档

指定机器类型

您可以在创建模型版本时,指定选择的机器类型。如果您没有指定机器类型,则您的模型版本默认为使用 n1-standard-2(如果您使用的是区域端点)和mls1-c1-m2(如果您使用的是全球端点)。

以下说明着重介绍您创建模型版本时,如何指定机器类型。它们以 n1-standard-4 机器类型为例进行说明。如需了解创建模型版本的完整过程,请参阅部署模型指南

Google Cloud 控制台

打开创建版本页面上的机器类型下拉列表,然后选择标准 > n1-standard-4

gcloud

将模型工件上传到 Cloud Storage 并创建模型资源后,您可以创建使用n1-standard-4机器类型的模型版本:

gcloud ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.11 \
  --python-version 3.7 \
  --framework ML_FRAMEWORK_NAME \
  --region us-central1 \
  --machine-type n1-standard-4

Python

本示例使用 Python 版 Google API 客户端库。运行以下代码示例之前,您必须设置身份验证。

将模型工件上传到 Cloud Storage 并创建模型资源后,您可以向模型的 projects.models.versions.create 方法发送请求并在请求正文中指定 machineType 字段:

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'n1-standard-4'
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

将 GPU 用于在线预测

对于某些配置,您可以选择添加 GPU 以加快每个预测节点的速度。如需使用 GPU,您必须考虑以下几个要求:

  • 您只能将 GPU 用于 Compute Engine (N1) 机器类型。旧版 (MLS1) 机器类型不支持 GPU。
  • 您只有在部署 TensorFlow SavedModel 时才能使用 GPU。您不能将 GPU 用于 scikit-learn 或 XGBoost 模型。
  • 每种 GPU 类型的可用性因模型使用的区域而异。了解哪些区域提供了哪些类型的 GPU
  • 您只能将一种 GPU 类型用于您的模型版本,并且您可以添加的 GPU 数量有一定限制,具体取决于您所用的机器类型。下表介绍了这些限制。

下表展示了可用于在线预测的 GPU 以及可用于每种 Compute Engine 机器类型的每种 GPU 类型的数量:

每种机器类型的有效 GPU 数量
机器类型 NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-standard-32 4、8 2、4 2、4 2、4 4、8
n1-highmem-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-highmem-32 4、8 2、4 2、4 2、4 4、8
n1-highcpu-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-highcpu-32 4、8 2、4 2、4 2、4 4、8

GPU 为可选配置,会产生额外费用

指定 GPU

请在创建模型版本时指定 GPU。AI Platform Prediction 会根据您指定的数据为各预测节点分配 GPU 类型和数量。您可以自动扩缩(预览版)手动扩缩(正式版)预测节点,但是,当您创建模型版本时,每个节点使用的 GPU 数量是固定的。除非您具有高级使用场景,否则我们建议您在每个预测节点上配置一个 GPU;换言之,请将加速器数量设置为 1。

以下说明介绍了如何随时通过创建在两个预测节点的至少一个节点上运行的模型版本,来指定用于在线预测的 GPU。每个节点都使用 n1-standard-4 机器类型和一个 NVIDIA Tesla T4 GPU。

这些示例假设您已将 TensorFlow SavedModel 上传到 Cloud Storage,并已在支持 GPU 的区域中创建模型资源

Google Cloud 控制台

请按照指南创建模型版本。在创建版本页面上,指定以下选项:

  1. 扩缩下拉列表中,选择自动扩缩
  2. 最小节点数字段中,输入 2
  3. 机器类型下拉列表中,选择标准 > n1-standard-4
  4. 加速器类型下拉列表中,选择 NVIDIA_TESLA_T4
  5. 加速器数量下拉列表中,选择 1

gcloud

使用 gcloud CLI 创建模型版本。在此示例中,版本在 n1-standard-4 预测节点上运行,每个这些节点使用一个 NVIDIA Tesla T4 GPU。AI Platform Prediction 会根据任何给定时刻的 GPU 使用率将预测节点的数量自动扩缩为 2 到 4 之间的数字。该示例使用 us-central1 区域端点:

gcloud beta ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.11 \
  --python-version 3.7 \
  --framework tensorflow \
  --region us-central1 \
  --machine-type n1-standard-4 \
  --accelerator count=1,type=nvidia-tesla-t4 \
  --min-nodes 2 \
  --max-nodes 4 \
  --metric-targets gpu-duty-cycle=60

请注意,加速器名称采用小写形式指定,同时字词之间使用连字符

Python

本示例使用 Python 版 Google API 客户端库。运行以下代码示例之前,您必须设置身份验证。

该示例使用 us-central1 区域端点。

向模型的 projects.models.versions.create 方法发送请求,并在请求正文中指定 machineTypeacceleratorConfigmanualScaling 字段:

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'autoScaling': {
      'minNodes': 2,
      'maxNodes': 4,
      'metrics': [
        {
          'name': 'GPU_DUTY_CYCLE',
          'target': 60
        }
      ]
    }
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

请注意,加速器名称以大写形式指定,同时单词之间采用下划线

机器类型之间的区别

除了提供的计算资源量不同之外,在是否支持某些 AI Platform Prediction 特点方面,不同机器类型也存在差异。下表简要介绍 Compute Engine (N1) 机器类型与旧版 (MLS1) 机器类型之间的区别:

Compute Engine (N1) 机器类型 旧版 (MLS1) 机器类型
地区 所有区域端点区域 所有全球端点区域
机器学习工件的类型
运行时版本 1.11 或更高版本 所有可用的 AI Platform 运行时版本
自定义容器支持
模型大小上限 10 GB 500 MB
自动扩缩 最小节点数 = 1 最小节点数 = 0
手动扩缩 可以更新节点数量 创建模型版本后无法更新节点数量
GPU 支持 是(仅限 TensorFlow)
AI Explanations 支持 是(仅限 TensorFlow)
VPC Service Controls 支持
SLA 覆盖已全面推出的机器类型 在某些情况下是。

以下部分详细介绍了机器类型之间的区别。

区域可用性

当您在地区端点上部署模型时,可使用 Compute Engine (N1) 机器类型。使用 Compute Engine (N1) 计算机类型时,无法将模型部署到全球端点。

如果您将使用 Compute Engine (N1) 机器类型的模型版本扩展到两个或更多预测节点,那么这些节点将在同一地区的多个区域中运行。这可确保当其中一个区域发生中断时,服务持续可用。如需了解详情,请参阅本文档的“扩缩”部分

请注意,Compute Engine (N1) 机器类型的 GPU 可用性也会因区域而异

旧版 (MLS1) 机器类型在许多区域的全球端点上可用。旧版 (MLS1) 机器类型在区域端点上不可用。

批量预测支持

使用 mls1-c1-m2 机器类型的模型版本支持批量预测。使用其他机器类型的模型版本不支持批量预测。

机器学习框架支持

如果您使用某种 Compute Engine (N1) 机器类型,则可以使用导出预测模型指南中所述的所有模型工件来创建模型版本,但以下两种情况除外:

对于旧版 (MLS1) 机器类型,您可以使用 AI Platform Prediction 支持的任何类型的模型工件,包括具有自定义代码的 scikit-learn 流水线或自定义预测例程。

运行时版本支持

如果您使用 Compute Engine (N1) 机器类型,则必须为您的模型版本使用运行时版本 1.11 或更高版本

如果您使用旧版 (MLS1) 机器类型,则可以使用任何可用的 AI Platform 运行时版本

自定义容器支持

如需使用自定义容器提供在线预测,您必须使用 Compute Engine (N1) 机器类型。

模型大小上限

如果您使用旧版 (MLS1) 机器类型,则在创建模型版本时提供的模型工件的总文件大小必须小于 500 MB。如果您使用 Compute Engine (N1) 机器类型,则总文件大小上限为 10 GB。

日志记录预测

对于 Compute Engine (N1) 机器类型,控制台日志记录目前为预览版。对于旧版 (MLS1) 机器类型,控制台日志记录现已正式推出。

扩缩预测节点

预测节点的自动扩缩和手动扩缩具有不同的限制,具体取决于您使用的是 Compute Engine (N1) 机器类型还是旧版 (MLS1) 机器类型。

自动扩缩

如果您使用 Compute Engine (N1) 机器类型且启用了自动扩缩功能,您的模型版本必须始终至少有一个节点在运行。换言之,版本的 autoScaling.minNodes 字段默认为 1 且不能小于 1。 如果您将 autoScaling.minNodes 设置为 2 或更大的值,那么预测节点将在同一地区内的多个区域中运行。这可确保当其中一个区域发生中断时,服务持续可用。

请注意,如果分配的 vCPU 或 RAM 超出了机器学习模型需求,则自动扩缩功能可能无法正常工作。这可能会导致模型性能出现问题。尝试对模型使用不同的机器类型,以确保您不会提供过多的计算资源。

如果您使用旧版 (MLS1) 机器类型,则模型版本在没有接收到流量时可以缩减至零个节点:autoScaling.minNodes 可以设为 0,其默认设置为 0。如果模型版本未收到预测请求,则缩减至零可以降低费用。但是,当 AI Platform Prediction 在零节点期间之后分配新节点来处理请求时,它也可能导致延迟或错误。详细了解缩减至零

手动扩缩

如果您同时使用 Compute Engine (N1) 机器类型和手动扩缩功能,您可以使用 projects.models.versions.patch API 方法随时更新正在运行的预测节点的数量。 如果您将将 manualScaling.nodes 字段设置为 2 或更大的值,那么预测节点将在同一地区内的多个区域中运行。这可确保当其中一个区域发生中断时,服务持续可用。

如果您同时使用旧版 (MLS1) 机器类型和手动扩缩功能,则无法在创建模型版本后更新预测节点的数量。如果您想要更改节点数,则必须删除该版本并创建新版本。

VPC Service Controls 支持

如果您使用 VPC Service Controls 保护 AI Platform Prediction,则无法创建使用旧版 (MLS1) 机器类型的版本。在这种情况下必须使用 Compute Engine (N1) 机器类型。