Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Graph4Rec的CPU分布式训练运行失败 #483

Open
Ramlinbird opened this issue Oct 24, 2022 · 18 comments
Open

Graph4Rec的CPU分布式训练运行失败 #483

Ramlinbird opened this issue Oct 24, 2022 · 18 comments

Comments

@Ramlinbird
Copy link

您好,我在单机上尝试Graph4Rec说到的单机训练,步骤如下:
1)先修改./toy_data/ip_list.txt文件,填写了ip地址,然后分别启动

python -m pgl.distributed.launch --ip_config ./toy_data/ip_list.txt --conf ./user_configs/metapath2vec.yaml  --shard_num 1000 --server_id 0 
python -m pgl.distributed.launch --ip_config ./toy_data/ip_list.txt --conf ./user_configs/metapath2vec.yaml  --shard_num 1000 --server_id 1

2)然后执行单机分布训练

CPU_NUM=4 fleetrun --log_dir ../../fleet_logs                     --worker_num 2                     --server_num 2                     dist_cpu_train.py --config ../../user_configs/metapath2vec.yaml                                       --ip ../../toy_data/ip_list.txt

但是很快就报错(all parameter server are killed)退出了。(如果只写1个IP地址,即单机非分布式,是可以正常运行),看了server的报错日志
image
不知道这个是因为什么原因呢?

另外,如果多机分布式,是要将所有服务地址都先写好在ip_list.txt,然后在各自机器上执行launch启动服务,然后在任意一台执行fleetrun吗?是否已经直接支持了metapath2vec、lightgcn等模型的多机分布式训练?谢谢~

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 24, 2022

请按照README 的步骤,一步一步运行看看。

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 24, 2022

如果有k8s 集群,就不用手动在各自机器上launch服务了。 支持的模型都在user_congfigs/目录里面体现了。 metapath2vec, lightgcn都是支持的。

@Ramlinbird
Copy link
Author

我是按readme执行的,但是执行Distributed CPU training and inference in a single machine小节的fleetrun报错退出了。只看到截图的报错信息,不知道是什么原因

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 24, 2022

paddle的版本是按照要求的吗?

@Ramlinbird
Copy link
Author

paddle的版本是按照要求的吗?

paddlepaddle-gpu是2.3.1(readme是2.3.0)、pgl是2.2.4(同readme)。paddle要降级吗?

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 24, 2022

最好按照要求的来。

@Ramlinbird
Copy link
Author

最好按照要求的来。

我将paddlepaddle-gpu版本降级到了2.3.0了,但是还是同样的问题。

@Ramlinbird
Copy link
Author

Ramlinbird commented Oct 24, 2022

补充说明一下,我看了一下trainer的日志,其实是有在跑的。启动了4个worker,worker0的日志正常打印Loss日志,但是最后没有保存模型,看到”saving model to ../../ckpt_custom/metapath2vec.0712“,但是目录下没有产出ckpt.pdparams,而是产出了一个000目录,下面是一堆part-**文件,看了一下文件内容,是一串数字(空格分隔,维度是72)。这是什么数据呢,为什么没有产出模型和单个embedding文件呢?

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 24, 2022

这是分布式训练,那个000目录就是模型文件了。 embedding需要另外infer,readme有写。

@Ramlinbird
Copy link
Author

这是分布式训练,那个000目录就是模型文件了。 embedding需要另外infer,readme有写。

啊啊,是的,试出来了😂谢谢了!我再试下多机CPU分布式。

@Ramlinbird
Copy link
Author

Ramlinbird commented Oct 24, 2022

如果有k8s 集群,就不用手动在各自机器上launch服务了。 支持的模型都在user_congfigs/目录里面体现了。 metapath2vec, lightgcn都是支持的。

请问下多机多CPU执行,ip_list.txt内容和参数中的--workers和--servers是什么关系呢?我试了一下没有改ip_list.txt(就是原始的127.0.0.x,4条记录),然后分别在两台机器上启动服务部署和训练程序。发现速度并没有预期的比单机快2倍,感觉更慢了?我看fleet_logs下只有一个worker.0和server.0,是没有成功多机多cpu吗?

@Ramlinbird
Copy link
Author

@Liwb5 抱歉打扰了,请问下上面这个多机多CPU的应该如何排查呢?谢谢

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 25, 2022

没有直接关系。 ip_list.txt 只是为了来启动图引擎。 单机情况下ip_list可以写127.0.0.1, 多机情况下就是要写每台机的真实ip地址。然后在每台机上启动图引擎。

成功启动图引擎之后,再在每台机上启动训练任务。

@Ramlinbird
Copy link
Author

没有直接关系。 ip_list.txt 只是为了来启动图引擎。 单机情况下ip_list可以写127.0.0.1, 多机情况下就是要写每台机的真实ip地址。然后在每台机上启动图引擎。

成功启动图引擎之后,再在每台机上启动训练任务。

不同机器上的ip_list要写各自"ip地址:port",是吗?--servers和--workers的ip列表值表示什么含义,和ip_list的内容是不重叠的吗?

@Ramlinbird
Copy link
Author

Ramlinbird commented Oct 25, 2022

没有直接关系。 ip_list.txt 只是为了来启动图引擎。 单机情况下ip_list可以写127.0.0.1, 多机情况下就是要写每台机的真实ip地址。然后在每台机上启动图引擎。
成功启动图引擎之后,再在每台机上启动训练任务。

不同机器上的ip_list要写各自"ip地址:port",是吗?--servers和--workers的ip列表值表示什么含义,和ip_list的内容是不重叠的吗?

@Liwb5 还在吗?fleetrun传递的servers和workers,如果和ip_list.txt的地址不相干的话,是用来做什么的?是随便设置两台机器ip+port就好(我就是随便设置的,但是如之前所述,好像没有成功进行多机多卡的训练)?不知道有没有关于这个分布式实现的原理性介绍。谢谢~

@Ramlinbird
Copy link
Author

@Liwb5 HI,能否介绍一下fleetrun的实现原理?ip_list.txt是各个机器上启动图引擎,fleetrun的servers和workers是作什么用的呢?thanks

@Liwb5
Copy link
Collaborator

Liwb5 commented Oct 26, 2022

这块得看一下paddlepaddle的官方文档: 比如这个
我们也是使用paddlepaddle进行图模型的研发的。

@Ramlinbird
Copy link
Author

Ramlinbird commented Oct 28, 2022

@Liwb5 抱歉又来打扰了,我手动在两个容器间实现了多机多CPU训练。但是在训练更大的图时(约100亿条边,2000万个节点,Lightgcn;边文件大小约150GB)时,容器失败了。我看了一下python -m pgl.distributed.launch xxx的执行日志中断在4246000000 edges are loaded from filepath,想问一下这种情况是容器内存不足吗?
根据您的训练经验,像这种规模的图,要多少节点、每个节点要求什么配置才训练的起来呢?谢谢~

我看了你之前解答过可以用公式边的数量 * int64 + 节点量 * 特征量 * float进行简单估计,我估计了一下,(10000000000*8+20000000*64*4)/1024/1024/1024=80GB,如果用多个容器,也是要求每个容器都要80GB?不是平均开来的吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants