tensorflow session run 的 overhead 太大怎么办?

l
lshtar
楼主 (未名空间)

用tensorflow做ctr预估,我用cpu单机调用tensorflow estimator api训练一个简单的模型,比如FFM,每一个minibatch的训练速度其实很快,比如一个batch 500个样本,
速度2ms吧。想提高训练速度。。我发现tensorflow session.run()的开销挺大的,因
为每次都检查输入的是什么。。estimator api调用monitoredsession,session.run之前之后检查各种hook,开销更大~1ms。所以这个模型一半的时间消耗在python代码里,难以提速。

请教大牛,大样本的ctr预估模型,一般怎么加速?调c++ api么?多谢!

----------------------------
补一句啊,我觉得根本原因是tf.session run是串行的。。单机多核应该可以用
hogwild--数据并行,并发更新参数。但是session.run 没法并行运行,或者可能可以
,但我不会。。

l
lightroom

你这个模型应该上TF v2,TF.function 可以让一句python跑n iterations. 所以
python的overhead大大减少。我的gnn, 用tf.function比eager快了快一倍,估计比v1
的静态图快20-40%

【在 lshtar(Ishtar)的大作中提到:】
:用tensorflow做ctr预估,我用cpu单机调用tensorflow estimator api训练一个简单的模型,比如FFM,每一个minibatch的训练速度其实很快,比如一个batch 500个样本,
:速度2ms吧。想提高训练速度。。我发现tensorflow session.run()的开销挺大的,因

l
lshtar

多谢!TF2.0 的estimator api 比TF1.x快么?我回去研究一下

【 在 lightroom (吃一条鱼,思考一个问题,法号三丰) 的大作中提到: 】
: 你这个模型应该上TF v2,TF.function 可以让一句python跑n iterations. 所以
: python的overhead大大减少。我的gnn, 用tf.function比eager快了快一倍,估计比
v1
: 的静态图快20-40%
: :用tensorflow做ctr预估,我用cpu单机调用tensorflow estimator api训练一个简单
: 的模型,比如FFM,每一个minibatch的训练速度其实很快,比如一个batch 500个样
本,
: :速度2ms吧。想提高训练速度。。我发现tensorflow session.run()的开销挺大的
,因

b
beidapig

训练用python,训练完export成saved model,用model server serving。
l
lshtar

是的想提高训练的速度
【 在 beidapig (做人要谦虚) 的大作中提到: 】
: 训练用python,训练完export成saved model,用model server serving。

l
lightroom

不清楚。我v1也用estimator, v2不用了。主要是虽然还支持但不鼓励。我用keras建模,但自己写train loop, 这样自己好控制

【在 lshtar(Ishtar)的大作中提到:】
:多谢!TF2.0 的estimator api 比TF1.x快么?我回去研究一下