指定机器类型或容量层级

在 AI Platform Training 上运行训练作业时,您必须指定所需的机器数量和类型。为了简化该过程,您可以从一组名为“容量层级”的预定义集群规格中进行选择。或者,您也可以选择自定义层级并自行指定机器类型

指定配置

如何指定集群配置取决于您计划如何运行训练作业:

gcloud

创建一个表示 TrainingInput 对象的 YAML 配置文件,并在该配置文件中指定规模层级标识符和机器类型。您可以随意命名该文件。按照惯例,名称为 config.yaml

以下示例展示了使用自定义处理集群的作业的配置文件 (config.yaml) 内容。

trainingInput:
  scaleTier: CUSTOM
  masterType: n1-highcpu-16
  workerType: n1-highcpu-16
  parameterServerType: n1-highmem-8
  evaluatorType: n1-highcpu-16
  workerCount: 9
  parameterServerCount: 3
  evaluatorCount: 1

运行 gcloud ai-platform jobs submit training 命令时,请在 --config 标志中提供 YAML 文件的路径:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \ 
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

或者,您也可以使用命令行标志(而不是在配置文件中)指定集群配置详细信息。详细了解如何使用这些标志

以下示例展示了在不使用配置文件的情况下如何提交配置与上一示例类似的训练作业:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --worker-machine-type n1-highcpu-16 \
        --parameter-server-machine-type n1-highmem-8 \
        --worker-count 9 \
        --parameter-server-count 3 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

如需了解详情,请参阅如何运行训练作业

Python

在作业配置的 TrainingInput 对象中,您可以指定规模层级标识符和机器类型。

以下示例展示了如何为使用自定义处理集群的作业构建作业表示法。

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'n1-highcpu-16',
    'workerType': 'n1-highcpu-16',
    'parameterServerType': 'n1-highmem-8',
    'evaluatorType': 'n1-highcpu-16',
    'workerCount': 9,
    'parameterServerCount': 3,
    'evaluatorCount': 1,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

请注意,training_inputsjob_spec 是任意标识符:您可以随意指定这些字典的名称。但是,字典键必须严格按照所示名称命名,才能与 JobTrainingInput 资源中的名称匹配。

容量层级

根据客户反馈和云资源的可用性,Google 可能会随时间优化不同作业的容量层级配置。每个规模层级依据其适合特定类型作业的程度来定义。通常,层级越高级,分配给集群的机器就越多,每个虚拟机的规格也越强大。随着扩缩层级复杂性的提高,训练作业的每小时费用(以训练单元数为计量单位)也会增加。请参阅价格页面来计算作业的费用。

对于 scikit-learn 或 XGBoost 代码,AI Platform Training 不支持分布式训练或使用加速器进行的训练。如果您的训练作业运行 scikit-learn 或 XGBoost 代码,则必须将规模层级设置为 BASICCUSTOM

下面是规模层级标识符:

AI Platform Training 规模层级
BASIC

单一工作器实例。该层级适合用于学习如何使用 AI Platform Training 以及如何使用小数据集来试验新模型。

Compute Engine 机器名称:n1-standard-4

STANDARD_1

一个主实例,以及四个工作器和三个参数服务器。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此规模层级。

Compute Engine 机器名称,主实例:n1-highcpu-8,工作器:n1-highcpu-8,参数服务器:n1-standard-4

PREMIUM_1

一个主实例,以及 19 个工作器和 11 个参数服务器。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此规模层级。

Compute Engine 机器名称,主实例:n1-highcpu-16,工作器:n1-highcpu-16,参数服务器:n1-highmem-8

BASIC_GPU

带有一个 NVIDIA Tesla K80 GPU 的单一工作器实例。如需详细了解图形处理单元 (GPU),请参阅关于使用 GPU 进行训练的部分。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此规模层级。

Compute Engine 机器名称:n1-standard-8;包括一个 k80 GPU

BASIC_TPU

一个主虚拟机和一个具有 8 个 TPU v2 核心的 Cloud TPU。请参阅如何使用 TPU 运行训练作业。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此规模层级。

Compute Engine 机器名称,主实例:n1-standard-4,工作器:Cloud TPU(8 个 TPU v2 核心)

CUSTOM

CUSTOM 层级不是预设层级,但允许您使用自定义集群规范。使用该层级时,请根据以下准则设置值,以配置处理集群:

  • 您必须设置 TrainingInput.masterType 以指定主节点使用的机器类型。这是唯一的必需设置。请参阅下面介绍的机器类型
  • 您可以设置 TrainingInput.workerCount 以指定要使用的工作器数量。如果您指定一个或多个工作器,则还必须设置 TrainingInput.workerType 以指定工作器节点使用的机器类型。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应指定工作器。
  • 您可以设置 TrainingInput.parameterServerCount 以指定要使用的参数服务器的数量。如果您指定一个或多个参数服务器,则还必须设置 TrainingInput.parameterServerType 以指定参数服务器使用的机器类型。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应指定参数服务器。
  • 您可以设置 TrainingInput.evaluatorCount 以指定要使用的评估器数量。如果您指定了一个或多个评估器,则还必须设置 TrainingInput.evaluatorType 以指定要用于评估器的机器类型。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应指定评估器。

自定义规模层级的机器类型

使用自定义规模层级,您可以对用于训练模型的处理集群进行更精细的控制。您可以在作业配置的 TrainingInput 对象中指定配置。如果您使用 gcloud ai-platform jobs submit training 命令来提交训练作业,则可以使用相同的标识符。

  • 将规模层级 (scaleTier) 设置为 CUSTOM

  • 为您需要的工作器数量 (workerCount)、参数服务器数量 (parameterServerCount) 和评估器数量 (evaluatorCount) 设置值。

    只有在使用 TensorFlow 进行训练或使用自定义容器时,AI Platform Training 才支持分布式训练。如果您的训练作业运行 scikit-learn 或 XGBoost 代码,请勿指定工作器、参数服务器或评估器。

  • 设置主实例工作器的机器类型 (masterType)。如果您已选择使用工作器、参数服务器或评估器,请分别在 workerTypeparameterServerTypeevaluatorType 字段中设置它们的机器类型。

    您可以为 masterTypeworkerTypeparameterServerTypeevaluatorType 指定不同的机器类型,但不能针对个别实例使用不同的机器类型。例如,您可以针对参数服务器使用 n1-highmem-8 机器类型,但不能将一些参数服务器设置为使用 n1-highmem-8,而将另一些参数服务器设置为使用 n1-highcpu-16

  • 如果您只需要一个具有自定义配置的工作器(而非完整集群),则应该仅针对主实例指定具有一种机器类型的自定义规模层级。这样一来,您将只获得单个工作器。以下是示例 config.yaml 文件:

    trainingInput:
      scaleTier: CUSTOM
      masterType: n1-highcpu-16
    

Compute Engine 机器类型

您可以为作业的 masterTypeworkerTypeparameterServerTypeevaluatorType 使用某些 Compute Engine 预定义机器类型的名称。如果您要使用 TensorFlow 进行训练或使用自定义容器,则可以选择将这些机器类型与各种类型的 GPU 搭配使用

以下列表包含可用于训练作业的 Compute Engine 机器类型标识符:

  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60
  • m1-ultramem-40
  • m1-ultramem-80
  • m1-ultramem-160
  • m1-megamem-96
  • a2-highgpu-1g*(预览版)
  • a2-highgpu-2g*(预览版)
  • a2-highgpu-4g*(预览版)
  • a2-highgpu-8g*(预览版)
  • a2-megagpu-16g*(预览版)

如需了解每种机器类型的技术规范,请参阅有关机器类型的 Compute Engine 文档

旧版机器类型

您可以为作业指定旧版机器类型名称,而不是使用 Compute Engine 机器类型。这些机器类型提供与 Compute Engine 机器类型等效的 vCPU 和内存资源,但它们具有其他配置限制:

  • 您不能使用 acceleratorConfig 自定义 GPU 使用量。不过,某些旧版机器类型包括 GPU。请参阅下表。

  • 如果您的训练作业配置使用多个机器,则不能将 Compute Engine 机器类型与旧版器类型混合使用。主实例工作器、工作器、参数服务器和评估器必须全部使用其中一种机器类型。

    例如,如果将 masterType 配置为 n1-highcpu-32(Compute Engine 机器类型),则不能将 workerType 设置为 complex_model_m(旧版机器类型),但可以将它们设置为 n1-highcpu-16(另一种 Compute Engine 机器类型)。

下表介绍了旧版机器类型:

旧版机器类型
standard

基本的机器配置,适合使用中小型数据集来训练简单模型。

Compute Engine 机器名称:n1-standard-4

large_model

具有大量内存的机器,如果您的模型很大(具有许多隐藏层或者节点数量庞大的层),则特别适合参数服务器。

Compute Engine 机器名称:n1-highmem-8

complex_model_s

如果您的模型所需的计算量超出标准机器能够妥善处理的能力,则该机器适合用于集群的主实例和工作器。

Compute Engine 机器名称:n1-highcpu-8

complex_model_m

该机器的核心数量和内存约为 complex_model_s 的两倍。

Compute Engine 机器名称:n1-highcpu-16

complex_model_l

该机器的核心数量和内存约为 complex_model_m 的两倍。

Compute Engine 机器名称:n1-highcpu-32

standard_gpu

相当于 standard 的机器,还包括一个 NVIDIATesla K80 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-8;包括一个 k80 GPU

complex_model_m_gpu

相当于 complex_model_m 的机器,还包括四个 NVIDIA Tesla K80 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-16-k80x4

complex_model_l_gpu

相当于 complex_model_l 的机器,还包括八个 NVIDIA Tesla K80 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-32-k80x8

standard_p100

相当于 Standard 的机器,还包括一个 NVIDIATesla P100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-8-p100x1

complex_model_m_p100

相当于 complex_model_m 的机器,还包括四个 NVIDIA Tesla P100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-16-p100x4

standard_v100

相当于 Standard 的机器,还配备了一个 NVIDIATesla V100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-8-v100x1

large_model_v100

相当于 large_model 的机器,还包括一个 NVIDIATesla V100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-highmem-8-v100x1

complex_model_m_v100

相当于 complex_model_m 的机器,还包括四个 NVIDIA Tesla V100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-16-v100x4

complex_model_l_v100

相当于 complex_model_l 的机器,还包括八个 NVIDIA Tesla V100 GPU。只有在使用 TensorFlow 进行训练或使用自定义容器时,才应使用此机器类型。

Compute Engine 机器名称:n1-standard-32-v100x8

使用 GPU 和 TPU 进行训练

部分容量层级和旧版机器类型包含图形处理单元 (GPU)。如果您使用的是 Compute Engine 机器类型,则还可以附加自己选择的多个 GPU。如需了解详情,请参阅使用 GPU 进行训练

若要使用张量处理单元 (TPU) 进行训练,您必须使用 BASIC_TPU 规模层级或 cloud_tpu 机器类型。cloud_tpu 机器类型具有特殊的配置选项:既可与 Compute Engine 机器类型搭配使用,也可与旧版机类型搭配使用,您可以将其配置为使用 8 个 TPU v2 核心或 8 个 TPU v3 核心。了解如何为您的训练作业使用 TPU

后续步骤