Closed 20092136 closed 6 years ago
I1213 16:58:21.991075 31368 CostLayer.cpp:337] calc pos/neg: 40.1701 pos= 1.74596e+06 neg= 43464
I1213 17:47:35.715744 31368 CostLayer.cpp:337] calc pos/neg: 89566.7 pos= 1.79133e+06 neg= 20
补充信息,每个节点改为1个trainer的时候能够输出信息,但pos/neg看起来有问题
你好,我想先问几个问题。
上面提到:
相同配置下,单机运行是能正常打印指标的 能否提供一个正常的日志看一下现在你所期待的“正常”是什么样子。
上面提供的出错日志已经到pass2,请问是整个训练的一开始(第一个batch)就出现 pos/neg=0,还是会逐渐降到0。
I1215 14:22:11.560315 24762 Util.cpp:166] commandline: /home/huangwenzhi/paddle/usr/local/bin/../opt/paddle/bin/paddle_trainer --config=./job_config.py --use_gpu=false --num_passes=20 --log_period=200 --test_period=5000 --dot_period=20 --trainer_count=4 --saving_period=1 --save_dir=./modelout --config_args=is_local=1 [INFO 2017-12-15 14:22:12,054 networks.py:1459] The input order is [query, pos_data, neg_data, label] [INFO 2017-12-15 14:22:12,054 networks.py:1465] The output order is [rank_cost_0] I1215 14:22:12.059198 24762 Trainer.cpp:114] ignore sparse_remote_update=true due to --local=true I1215 14:22:12.059231 24762 Trainer.cpp:162] trainer mode: SgdSparseCpuTraining I1215 14:22:13.091187 24762 PyDataProvider2.cpp:243] loading dataprovider dataprovider::process [INFO 2017-12-15 14:22:16,707 dataprovider.py:53] dict len : 1549030 I1215 14:22:16.707571 24762 GradientMachine.cpp:85] Initing parameters.. I1215 14:22:33.421447 24762 GradientMachine.cpp:92] Init parameters done. ......... I1215 14:22:48.112035 24762 TrainerInternal.cpp:165] Batch=200 samples=25600 AvgCost=0.691248 CurrentCost=0.691248 Eval: CurrentEval: ......... I1215 14:22:59.665647 24762 TrainerInternal.cpp:165] Batch=400 samples=51200 AvgCost=0.690424 CurrentCost=0.689601 Eval: CurrentEval: ......... I1215 14:23:11.698137 24762 TrainerInternal.cpp:165] Batch=600 samples=76800 AvgCost=0.689806 CurrentCost=0.68857 Eval: CurrentEval: ......... I1215 14:23:23.848870 24762 TrainerInternal.cpp:165] Batch=800 samples=102400 AvgCost=0.689285 CurrentCost=0.687722 Eval: CurrentEval: ......... I1215 14:23:35.585708 24762 TrainerInternal.cpp:165] Batch=1000 samples=128000 AvgCost=0.688825 CurrentCost=0.686986 Eval: CurrentEval: ......... I1215 14:23:47.754395 24762 TrainerInternal.cpp:165] Batch=1200 samples=153600 AvgCost=0.688416 CurrentCost=0.686369 Eval: CurrentEval: ..I1215 14:23:50.455447 24762 CostLayer.cpp:337] calc pos/neg: 4.46556 pos= 32612 neg= 7303 I1215 14:23:50.455499 24762 CostLayer.cpp:337] calc pos/neg: 4.4762 pos= 32627 neg= 7289 I1215 14:23:50.455509 24762 CostLayer.cpp:337] calc pos/neg: 4.56321 pos= 32741 neg= 7175 I1215 14:23:50.455518 24762 CostLayer.cpp:337] calc pos/neg: 4.56011 pos= 32737 neg= 7179 I1215 14:23:50.920789 24762 TrainerInternal.cpp:181] Pass=0 Batch=1248 samples=159663 AvgCost=0.68833 Eval: I1215 14:23:50.921814 24762 GradientMachine.cpp:63] Saving parameters to ./modelout/pass-00000 ......... I1215 14:24:05.570590 24762 TrainerInternal.cpp:165] Batch=200 samples=25600 AvgCost=0.685831 CurrentCost=0.685831 Eval: CurrentEval: ......... I1215 14:24:17.453933 24762 TrainerInternal.cpp:165] Batch=400 samples=51200 AvgCost=0.685475 CurrentCost=0.685119 Eval: CurrentEval: ......... I1215 14:24:29.983072 24762 TrainerInternal.cpp:165] Batch=600 samples=76800 AvgCost=0.685187 CurrentCost=0.684611 Eval: CurrentEval: ......... I1215 14:24:41.913007 24762 TrainerInternal.cpp:165] Batch=800 samples=102400 AvgCost=0.684927 CurrentCost=0.684146 Eval: CurrentEval: ......... I1215 14:24:53.798105 24762 TrainerInternal.cpp:165] Batch=1000 samples=128000 AvgCost=0.68468 CurrentCost=0.683694 Eval: CurrentEval: ......... I1215 14:25:06.505194 24762 TrainerInternal.cpp:165] Batch=1200 samples=153600 AvgCost=0.684446 CurrentCost=0.683273 Eval: CurrentEval: ..I1215 14:25:08.867113 24762 CostLayer.cpp:337] calc pos/neg: 18.9514 pos= 37846 neg= 1997 I1215 14:25:08.867177 24762 CostLayer.cpp:337] calc pos/neg: 17.8924 pos= 37735 neg= 2109 I1215 14:25:08.867188 24762 CostLayer.cpp:337] calc pos/neg: 17.9278 pos= 37738 neg= 2105 I1215 14:25:08.867197 24762 CostLayer.cpp:337] calc pos/neg: 18.541 pos= 37805 neg= 2039 I1215 14:25:09.204318 24762 TrainerInternal.cpp:181] Pass=1 Batch=1246 samples=159374 AvgCost=0.684394 Eval: I1215 14:25:09.205173 24762 GradientMachine.cpp:63] Saving parameters to ./modelout/pass-00001
另外还有一个信息,这份数据全量有10000个part,此前我在相同的数据下用厂内另一个平台训过这个模型。相同的batch_size,相同的lr,几乎一致的网络结构,相同的样本构造和采样方法,除了
训练的模型中,pos/neg从第一个pass的1.5逐渐增长到150个pass以后的3.0,但paddle在单机训练的时候,用的是全量数据的千分之一(10个part),pos/neg头两个pass分别得到4.x和17.x
我不太确定这个数据量的缩减是否问题关键,仅觉得这个增幅有点不合理,所以想提供下这个信息
请问:
集群训练的时候,我设置了每个pass仅在训练完成时打印一次结果,从pass0开始,就是pos/neg=0
这时候 Cost 的下降是否正常呢?是否正常收敛。
I1213 13:14:55.372691 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.372946 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.372975 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.372998 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373028 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373044 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373073 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373095 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373116 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373144 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373172 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373212 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373232 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373253 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373273 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:55.373294 30749 CostLayer.cpp:337] calc pos/neg: 0 pos= 0 neg= 0 I1213 13:14:57.311453 30749 TrainerInternal.cpp:181] Pass=0 Batch=13994 samples=1791175 AvgCost=0 Eval:
pass0的时候输出如上
你好,从你上面的描述中,想起来我之前的一段经历,曾经因为工作需要对齐过Paddle和厂内另一个训练平台训练 pairwise ranking 任务。在当时的情况下, Paddle 没有实现 softsign (现在已经有了) 和 hingeloss。
https://github.com/lcy-seso/paddle_confs_v1/blob/master/ltr/pairwise_ltr.conf 这个配置就是当时任务最后留下的配置和超参数(效果几乎一致, 等于 softsign + hinge loss 的那个模型)。配置中的超参数是单机4卡GPU,如果是集群训练,batch size 和 learning rate 可能需要针对性再调一下。供参考。
正负例都是0这个确实非常奇怪,我们再想想。
训练的模型中,pos/neg从第一个pass的1.5逐渐增长到150个pass以后的3.0,但paddle在单机训练的时候,用的是全量数据的千分之一(10个part),pos/neg头两个pass分别得到4.x和17.x
这个不知道是不是指两个平台的直接输出指标?我觉得是不同平台之间具体计算方式的差异,之前我也有遇到。最后使用的评估方式是使用同样的测试集,线下以同一指标来进行评估。
@lcy-seso 您提供的信息对我来说很有帮助,十分感谢。我尝试按你说的评估方式来做。
相同配置下,单机运行是能正常打印指标的,但观察到集群训练的训练日志里,指标异常如下:
我的配置如下:
网络配置
训练配置:
训练命令: