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

paddle v2 训练速度慢 #3675

Closed
xlhlhlx opened this issue Aug 25, 2017 · 13 comments
Closed

paddle v2 训练速度慢 #3675

xlhlhlx opened this issue Aug 25, 2017 · 13 comments
Assignees
Labels
User 用于标记用户问题

Comments

@xlhlhlx
Copy link

xlhlhlx commented Aug 25, 2017

背景

预提交到mpi集群的paddle任务(预测用户对视频内容的阅读时长),本地单机调试的过程中,发现500条sample,batch_size=256,20个pass,每个pass要跑70秒左右,后续全量数据训练样本数量级大概在亿级别,因此先本地进行训练速度上的优化。

当前问题

性能瓶颈在哪里?如何优化?
打印了reader和总的每个pass的处理时间,具体如下:
88
后续把用户及视频内容的泛化特征给都去掉,只保留id特征,reader的时间未发生变化(因为读取的数据字段还是跟之前一样,只是在模型训练的时候未用到,所以这块儿的处理时间肯定是一样的),但每个pass的处理时间却快了10倍,由原来的70秒左右变成了7秒左右,具体如下:
new cost

读取数据的代码

reader

获取用户特征的代码

user

获取内容特征的代码

content

@QiJune
Copy link
Member

QiJune commented Aug 25, 2017

你删减数据是怎么做的,在feed data的时候有没有做删减?

@typhoonzero
Copy link
Contributor

@QiJune 讨论,提升reader性能可能需要将v1中的dataprovider中的pool直接暴露给Python API,python的reader不直接yield是数据而是直接把数据feed到dataprovider的pool中。我看下这快,可能下周可以提交一个PR。

@xlhlhlx
Copy link
Author

xlhlhlx commented Aug 25, 2017

其它都没有变过,就是只用user_id和content_id这两个特征,具体改动的代码如下:
clean data

@caijinlong
Copy link

@xlhlhlx 我也在用 paddle 集群,并且我们解的问题有点类似,可以私下交流下吗

@lutaojian
Copy link

我光看这个issue里面的讨论内容,感觉思路很混乱...确定现在问题是样本读取慢吗?
@typhoonzero 下周pr的优化是减少v2中reader yield数据这一步,直接进入dataprovider pool中从而解决数据读取慢的问题??

@typhoonzero
Copy link
Contributor

typhoonzero commented Aug 27, 2017

@lutaojian

  1. v2 reader的实现中的确有可以优化的地方,所以感觉可以先从这里开始优化下,看能多大程度提升性能
  2. 对于本issue中的例子,并不能确定优化数据读取之后可以完全解决性能问题,不过最终训练也不能只用id特征吧,使用权量特征才行。

@helinwang
Copy link
Contributor

helinwang commented Sep 29, 2017

@xlhlhlx @typhoonzero @QiJune @qingqing01 @lutaojian 从讨论来看似乎不能推断出是reader效率低的原因。
@xlhlhlx加速方案 删掉了好多个embedding层,也大大降低了usr_combined_features这个fc层中W矩阵的大小。

@helinwang
Copy link
Contributor

helinwang commented Sep 29, 2017

可以尝试一下V2 API的prefetch data的功能,详见这里的第一条。

@xlhlhlx
Copy link
Author

xlhlhlx commented Nov 6, 2017

从运行的时间来看,性能瓶颈应该不在reader这块儿啊,不管用多少特征,前后reader的耗时都基本在0.02秒左右,还是后面的模型训练慢哇,并且我又试验过,把每个fc的向量长度都由原来的64改为8,速度上没有什么太大变化,把title、brief两个卷积去掉也没有太大变化。而我同事,仿照paddle 上的dssm(https://github.com/PaddlePaddle/models/tree/develop/dssm) 写了一个我们的应用,速度也是比我这个快,一个batch 1000条数据大概需要200毫秒左右,但是从代码上来看,都是差不多的啊,不明白到底我这个为啥会如此慢。

@xlhlhlx
Copy link
Author

xlhlhlx commented Nov 6, 2017

附上我同事写的代码,基本是一样的,分user和item两个向量的,每个特征基本都是embedding,再接fc的:
yj1
yj2

@luotao1
Copy link
Contributor

luotao1 commented Nov 6, 2017

不明白到底我这个为啥会如此慢

请问你这个是哪个,是你同事的代码和dssm比?能说清楚是哪个配置和哪个配置比么?因为这个issue的内容比较多。

@xlhlhlx
Copy link
Author

xlhlhlx commented Nov 7, 2017

@luotao1 这个issue最开始提出的时候,是我仿照个性化推荐的例子写了一个用户个性化视频内容的阅读时长预测(最上面贴的代码),但是速度太慢,发现500条sample,batch_size=256,20个pass,每个pass要跑70秒左右,当时做过试验,只保留一个id特征,每个pass的处理速度变成了7秒左右,也不知道问题到底出在哪里?昨天,我同事仿照dssm写了一个类似的用户个性化视频内容推荐(就是我昨天上面贴的那段儿代码),其实本质也是user、item分别向量化,再做分类或者回归,但是3w条sample,batch_size=1000,每个batch是200ms左右,不知道这两种方式速度上相差这么远的本质问题在什么呢?

@lcy-seso
Copy link
Contributor

lcy-seso commented Nov 7, 2017

这个 issue 里面的信息已经太多且没有条理。这些口语化的描述我已经对不到程序的细节上,主观描述并不能帮助定位问题。能不能重启一个issue,整理一下你的信息。

比如:

只保留一个id特征。

id特征对应到Paddle里面是什么类型?如何参与运算?

我同事仿照dssm写了一个类似的用户个性化视频内容推荐(就是我昨天上面贴的那段儿代码),其实本质也是user、item分别向量化,再做分类或者回归,但是3w条sample,batch_size=1000,每个batch是200ms左右,

从你上面贴图的几个网络,输入类型,网络规模完全不在同一个量级,运算量也不相同,速度有差异并不奇怪。问题在于,你认为的别人的网络快,你的任务慢底是怎么对比呢?是否在公平条件下对比?

另外,既然有一快一慢两种配置,那控制变量一点一点比diff,先定位,再解释原因。如果你定位到某一处但想知道PaddlePaddle内部实现/内部机制,我们可以具体解释。

如果不能思路清晰的让别人快速理解问题,我们该如何帮你解决问题呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
User 用于标记用户问题
Projects
None yet
Development

No branches or pull requests

10 participants