我正在尝试运行分布式GCMLE培训工作,但不断出现以下错误:

An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error

该Trainer软件包是一个自定义估算器,其建模方式与cloudml-samples人口普查自定义估算器https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/census/customestimator/trainer相同。可以肯定地说task.py文件几乎是相同的,并且在model.py文件中input_fn()parse_csv()函数是相同的,唯一的不同是在model_fn()的详细信息之内。

如果我将模型配置为与单个standard_p100 GPU一起运行,则可以约15步/秒的速度进行训练。但是,如果我将配置更新为具有4个工作程序和3个参数服务器的分布式设置(请参阅下面的配置),则会弹出抢占错误,并且10个步骤将花费约600秒...

config-distributed.yaml:
trainingInput:
  scaleTier: CUSTOM
  masterType: standard_p100
  workerType: standard_p100
  parameterServerType: large_model
  workerCount: 3
  parameterServerCount: 3

如果我在普查自定义估算器样本中使用相同的配置,则模型的训练速度将比预期的更快,并且不会遇到抢占错误。我尝试修改人口普查示例以更精确地模仿我的确切代码,但仍然无法重现该错误。

尝试训练分布式ml引擎作业时,是否有人遇到过类似的抢占问题?关于如何更好地调试问题的任何建议?我在网上找到的唯一建议是建议参数服务器的数量至少为工作人员数量的一半(这就是为什么我将参数服务器提高到3个的原因),但是我仍然没有运气。

为了从日志中添加更多上下文,这是一种典型的(重复的)模式,当我尝试在分布式设置中进行训练时会发生这种情况:
master-replica-0 loss = 16.5019, step = 53 (124.505 sec)
master-replica-0 An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error
master-replica-0 Graph was finalized.
master-replica-0 Restoring parameters from gs://.../model.ckpt-0
master-replica-0 Running local_init_op.
master-replica-0 Done running local_init_op.
master-replica-0 Saving checkpoints for 0 into gs://...
master-replica-0 Skip the current checkpoint eval due to throttle secs (600 secs).
master-replica-0 An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error

然后重复此循环...

更新

我将参数服务器的数量增加到10个,并将步数/秒增加到5-10个之间(仅使用单个GPU仍少于15个),并且错误仍然发生,但偶尔出现。如果更多的参数服务器有所帮助,这将意味着什么?无论(

最佳答案

具有许多参数的分布式培训的瓶颈通常是网络带宽。如果您对网络的饱和度过高,则会丢失数据包,并且TensorFlow会认为参数服务器已关闭。通过添加更多参数服务器,您可以分配网络负载。

请记住,如果您的模型适合使用GPU,则通常在具有8个GPU的单台计算机上获得的吞吐量要比在具有单个GPU的8台计算机上获得的吞吐量要高得多,因为您无需承担任何网络开销。

关于tensorflow - 尝试运行分布式GCMLE作业时遇到抢占OS错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52794441/

10-16 11:50