在 ML Engine 中 运行 分布式训练的正确方法
Correct way to run distributed training in ML Engine
我正在尝试使用 ML Engine 中的分布式训练作业来训练我的模型(不是使用 tf.estimator 或 tf.keras 构建的)。
为了在 ML Engine 中 运行 分布式训练作业,我应该采取什么步骤?
我发现了以下准则:
- 提供
--scale-tier
参数,来自step-by-step guide
- 在代码中使用分布式策略API,来自recent google io talks
因此,如果前者在命令行中提供,是否意味着我不需要对后者做任何事情,因为 ML Engine 以某种方式负责跨设备分发我的图形?还是我需要两者都做?
如果我手动指定设备会发生什么:
with tf.device('/gpu:0/1/2/etc')
..然后 运行 带有 --scale-tier
?
的命令
有两种可能的情况:
- 您想使用具有 CPU 的机器:
在这种情况下,你是对的。使用 --scale-tier
参数足以在 ML Engine 中自动分发作业。
您有多个缩放层选项 {1}。
- 您想使用带 GPU 的机器:
在这种情况下,您必须定义一个 config.yaml 文件来描述您想要的 GPU 选项和 运行 一个 gcloud 命令来启动 ML Engine 作业 config.yaml 作为参数 {2}.
如果您在代码中使用 with tf.device('/gpu:0/1/2/etc')
,您将强制使用该设备并覆盖正常行为。 {3}.
{1}: https://cloud.google.com/ml-engine/reference/rest/v1/projects.jobs#scaletier
{2}: https://cloud.google.com/ml-engine/docs/tensorflow/using-gpus#requesting_gpu-enabled_machines
我正在尝试使用 ML Engine 中的分布式训练作业来训练我的模型(不是使用 tf.estimator 或 tf.keras 构建的)。
为了在 ML Engine 中 运行 分布式训练作业,我应该采取什么步骤?
我发现了以下准则:
- 提供
--scale-tier
参数,来自step-by-step guide - 在代码中使用分布式策略API,来自recent google io talks
因此,如果前者在命令行中提供,是否意味着我不需要对后者做任何事情,因为 ML Engine 以某种方式负责跨设备分发我的图形?还是我需要两者都做?
如果我手动指定设备会发生什么:
with tf.device('/gpu:0/1/2/etc')
..然后 运行 带有 --scale-tier
?
有两种可能的情况:
- 您想使用具有 CPU 的机器:
在这种情况下,你是对的。使用 --scale-tier
参数足以在 ML Engine 中自动分发作业。
您有多个缩放层选项 {1}。
- 您想使用带 GPU 的机器:
在这种情况下,您必须定义一个 config.yaml 文件来描述您想要的 GPU 选项和 运行 一个 gcloud 命令来启动 ML Engine 作业 config.yaml 作为参数 {2}.
如果您在代码中使用 with tf.device('/gpu:0/1/2/etc')
,您将强制使用该设备并覆盖正常行为。 {3}.
{1}: https://cloud.google.com/ml-engine/reference/rest/v1/projects.jobs#scaletier
{2}: https://cloud.google.com/ml-engine/docs/tensorflow/using-gpus#requesting_gpu-enabled_machines