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

关于工业级生产tfrecord的疑问,希望作者帮我解惑 #14

Open
TzeSing opened this issue May 13, 2020 · 4 comments
Open

关于工业级生产tfrecord的疑问,希望作者帮我解惑 #14

TzeSing opened this issue May 13, 2020 · 4 comments

Comments

@TzeSing
Copy link

TzeSing commented May 13, 2020

一般做法是用spark生成tfrecord再拉到本地GPU跑,但是如果CTR数据集如果小的话(2000W条以下,50个特征以下),能读进内存里,发现用tf.data.TFRecordDataset反而很慢。

本人用pandas读进内存再用tf.keras.utils.sequence构造数据生成器,大概只需要20ms/step
但用tf.data.TFRecordDataset就上升到了2s/step
总共21个step每个epoch

不知道作者是否有些建议给我,指点迷津。
例如生成tfrecord的内部格式是如何的,我现在是一个record有n个特征(key)
等等的建议,谢谢作者

@qiaoguan
Copy link
Owner

抱歉,刚看到,tfrecord本身存在一些缺陷,低层采用pb,解析速度较慢,而且工业界分布式hadoop/spark生成tfrecord,int型只提供int64,所以可能tfrecord样本比原始csv样本还大很多,占用存储空间, 由于推荐模型本身网络比较简单,再加上tfrecord格式解析慢,可能用GPU训练并不比cpu快多少。 你这个相差这么多,感觉应该不至于,你检查看看应该是其他什么问题导致的,另外,你可以看看tensorflow的dataset API, 有一些参数可以调调,比如sloppy参数设为true等等。

@TzeSing
Copy link
Author

TzeSing commented Jun 15, 2020

抱歉,刚看到,tfrecord本身存在一些缺陷,低层采用pb,解析速度较慢,而且工业界分布式hadoop/spark生成tfrecord,int型只提供int64,所以可能tfrecord样本比原始csv样本还大很多,占用存储空间, 由于推荐模型本身网络比较简单,再加上tfrecord格式解析慢,可能用GPU训练并不比cpu快多少。 你这个相差这么多,感觉应该不至于,你检查看看应该是其他什么问题导致的,另外,你可以看看tensorflow的dataset API, 有一些参数可以调调,比如sloppy参数设为true等等。

谢谢作者回复,我现在优化过后的tfrecord读取速度是200-300ms,相比也还是慢点,能接受,我再认真研读一下dataset的api

@Ethan199111
Copy link

@TzeSing 要注意map的位置,放的不对会非常慢

@TzeSing
Copy link
Author

TzeSing commented Jul 14, 2020

@TzeSing 要注意map的位置,放的不对会非常慢

我是batch后map(tf.io.parse_example)的

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

No branches or pull requests

3 participants