首页 Paddle框架 帖子详情
paddle 多机分布式训练出错
收藏
快速回复
Paddle框架 问答深度学习 3260 11
paddle 多机分布式训练出错
收藏
快速回复
Paddle框架 问答深度学习 3260 11

大家好!

       这两天在尝试使用PaddlePaddle平台。之前按照操作说明单机训练可以有结果,但是进行多机训练时出错。

       按照 http://www.paddlepaddle.org/docs/0.14.0/documentation/fluid/zh/new_docs/user_guides/howto/training/cluster_quick_start.html 这个文档进行的操作。

      报错信息如下:

root@3374a3140ee5:/app/ap/recognize_digits# PADDLE_TRAINING_ROLE=TRAINER PADDLE_PSERVER_IPS=ps0.paddlepaddle.com,ps1.paddlepaddle.com PADDLE_TRAINERS=2 PADDLE_TRAINER_ID=1 PADDLE_PSERVER_PORT=6174 python fluid_dist.py
F0720 09:45:08.417428   591 grpc_client.cc:276] Send name:[fc_0.b_0@GRAD.trainer_1], ep:[ps1.paddlepaddle.com:6174] meets grpc error:Deadline Exceeded
*** Check failure stack trace: ***
    @     0x7f69cdad679d  google::LogMessage::Fail()
    @     0x7f69cdada24c  google::LogMessage::SendToLog()
    @     0x7f69cdad62c3  google::LogMessage::Flush()
    @     0x7f69cdadb75e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f69ce2e16ef  paddle::operators::distributed::GRPCClient::Proceed()
    @     0x7f69d8856c80  (unknown)
    @     0x7f6a198526ba  start_thread
    @     0x7f6a1958841d  clone
    @              (nil)  (unknown)
Aborted (core dumped)

     我是在docker里面进行操作的。  启用了4个docker实例,模拟4个主机。

     /etc/hosts 里面配置如下:

172.17.0.9 ps0.paddlepaddle.com
172.17.0.10 ps1.paddlepaddle.com
172.17.0.11 trainer0.paddlepaddle.com
172.17.0.12 trainer1.paddlepaddle.com

      4个docker实例可以互相访问,端口都打开着。

      大家在多机训练时是怎么做的。有人遇到过类似的问题吗?希望得到高手指点,在此先谢过了!

 

    

0
收藏
回复
全部评论(11)
时间顺序
哎呦不错哦
#2 回复于2018-07

rpc超时时间可能太短了。

在执行前加入一个环境变量的配置:

// 设置超时时间为5分钟,可以根据情况调整
export FLAGS_rpc_deadline=300000
0
回复
哎呦不错哦
#3 回复于2018-07

有以下几种情况都可能导致多级启动失败:

1. Pserver启动失败:

先启动Pserver, 直到Pserver端打印出类似日志后再启动Trainer.

I0724 07:58:37.768496  1040 grpc_server.cc:263] Server listening on 127.0.0.1:36001 selected port: 36001

 

2. trainer启动时间差了很多, 同步情况下,多个trainer会等待执行最慢的那个trainer。

因此尽量保证trainer能够一起启动,或者时间差不太大。可配合调整参数:

// 设置超时时间为5分钟,可以根据情况调整
export FLAGS_rpc_deadline=300000

 

3. 按照官方文档检查一下参数的配置,错误的 trainer count 也会导致该问题。

 

4. 检查端口连通性, 看Pserver启动的端口,在Trainer端能否正常连接。

 

0
回复
h
hclqs2011
#4 回复于2018-07

谢谢 ┞思恋变成爱┱ 的答复!

      我加入了export FLAGS_rpc_deadline=300000 ,执行还是报错。目前的错误信息如下:

root@89b616b8afa4:/recognize_digits# PADDLE_TRAINING_ROLE=TRAINER PADDLE_PSERVER_IPS=ps0.paddlepaddle.com,ps1.paddlepaddle.com PADDLE_TRAINERS=2 PADDLE_TRAINER_ID=0 PADDLE_PSERVER_PORT=6174 python fluid_dist.py
step 10, loss: [265.1646728515625]
pure virtual method called
terminate called without an active exception
*** Aborted at 1532503364 (unix time) try "date -d @1532503364" if you are using GNU date ***
PC: @ 0x0 (unknown)
*** SIGABRT (@0x461) received by PID 1121 (TID 0x7f3f935b0700) from PID 1121; stack trace: ***
@ 0x7f3f9318d390 (unknown)
@ 0x7f3f92de7428 gsignal
@ 0x7f3f92de902a abort
@ 0x7f3f5215e84d __gnu_cxx::__verbose_terminate_handler()
@ 0x7f3f5215c6b6 (unknown)
@ 0x7f3f5215c701 std::terminate()
@ 0x7f3f5215d23f __cxa_pure_virtual
@ 0x7f3f47a00c86 grpc::Channel::~Channel()
@ 0x7f3f47a00d39 grpc::Channel::~Channel()
@ 0x7f3f47118e69 std::_Sp_counted_base<>::_M_release()
@ 0x7f3f4799c16e paddle::operators::distributed::GRPCClient::~GRPCClient()
@ 0x7f3f4799c281 paddle::operators::distributed::GRPCClient::~GRPCClient()
@ 0x7f3f479a3f2a std::unique_ptr<>::~unique_ptr()
@ 0x7f3f92debff8 (unknown)
@ 0x7f3f92dec045 exit
@ 0x7f3f92dd2837 __libc_start_main
@ 0x4933e9 _start
@ 0x0 (unknown)
Aborted (core dumped)

   pserver 端 我执行的命令是  PADDLE_TRAINING_ROLE=PSERVER PADDLE_CURRENT_IP=ps0.paddlepaddle.com PADDLE_PSERVER_IPS=ps0.paddleddle.com,ps1.paddlepaddle.com PADDLE_TRAINERS=2 PADDLE_PSERVER_PORT=6174 python train_digital.py  之后没有打印出任何提示信息。

  后来我把超时调整成50分钟,也还是报同样的错误。

   通过其他机器 telnet 可以访问到 6174 ,提示如下信息:

telnet 172.17.0.9 6174
Trying 172.17.0.9...
Connected to 172.17.0.9.
Escape character is '^]'.
@@ .Xshell

    

0
回复
挪威的仙人掌
#5 回复于2018-07

收到您的反馈,已经转入内部进行问题定位,请等待回复~~

0
回复
h
hclqs2011
#6 回复于2018-07

谢谢 “挪威的仙人掌”的回复。 我期待着你们的进一步回复。多谢!

0
回复
挪威的仙人掌
#7 回复于2018-07
谢谢 “挪威的仙人掌”的回复。 我期待着你们的进一步回复。多谢!

您好,此前是我们的版本内存在bug,非常感谢您的报错。

现在bug已经修复,您需要下载最新版本PaddlePaddle进行编译,能够解决问题。

0
回复
挪威的仙人掌
#8 回复于2018-07
0
回复
h
hclqs2011
#9 回复于2018-07

谢谢 “挪威的仙人掌” 的回复!

我重新下载最新的paddle代码,编译通过了。单机测试可以运行,多机训练又出现新的问题。

仍是按照 http://www.paddlepaddle.org/docs/0.14.0/documentation/fluid/zh/new_docs/user_guides/howto/training/cluster_quick_start.html 这个文档进行的操作,选择的测试代码 fluid_dist.py

 

报错信息如下:

Traceback (most recent call last):
  File "fluid_dist.py", line 54, in
    train(False, train_program)
  File "fluid_dist.py", line 38, in train
    train_func=train_program, place=place, optimizer_func=optimizer_func)
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/trainer.py", line 273, in __init__
    self._dist_transpile_if_necessary(optimize_ops, params_grads)
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/trainer.py", line 352, in _dist_transpile_if_necessary
    self.trainer_id, pservers=pserver_endpoints, trainers=trainers)
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/transpiler/distribute_transpiler.py", line 253, in transpile
    RPC_OP_ROLE_ATTR_NAME: RPC_OP_ROLE_ATTR_VALUE
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 1068, in _insert_op
    op = Operator(block=self, desc=op_desc, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 502, in __init__
    proto = OpProtoHolder.instance().get_op_proto(type)
  File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 407, in get_op_proto
    raise ValueError("Operator \"%s\" has not been registered." % type)
ValueError: Operator "send" has not been registered.

是不是代码里还有问题?  编译后的paddle 文件名称为 “paddlepaddle-0.0.0-cp27-cp27mu-linux_x86_64.whl”显示的版本号为 0.0.0

0
回复
哎呦不错哦
#11 回复于2018-08

我看一下这个问题,develop分支的代码比较新,文档可能没有跟上。

0
回复
挪威的仙人掌
#12 回复于2018-09

您这边可以再试一下,现在的文档是否能够满足需求

0
回复
须佐能泘丶
#14 回复于2019-01

您好,想问问您详细搭建的步骤,能请您教一下么?

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户