如何在TensorFlow中优化embedding_lookup_sparse以获取缓存数据?

时间:2017-05-09 02:33:39

标签: caching optimization tensorflow embedding inference

TensorFlow很棒,我们已经为推荐系统实现了神经网络模型。我们使用embedding_lookup_sparse来处理稀疏输入。然后使用SavedModel API导出模型,并使用TensorFlow Serving投放。一切都运作良好但我们认为我们可以优化数据集的过程。

这是我们的典型数据集。所有功能可分为两部分,“用户功能”和“项目功能”。每个批次都有多个来自同一用户的样本,因此这些样本具有相同的“用户特征”。

例如,这里有一批5个样本,前100个功能是“用户功能”。

label    user features          item features
1      2:1 15:1 30:1 70:1     110:1 190:1 200:1
0      2:1 15:1 30:1 70:1     170:1 290:1 300:1
1      2:1 15:1 30:1 70:1     180:1 390:1 400:1
1      2:1 15:1 30:1 70:1     190:1 490:1 500:1
0      2:1 15:1 30:1 70:1     200:1 590:1 600:1

因为每个批次的“用户特征”总是相同的,所以我们不需要“查找”完整的矩阵,而只需要查找第一个样本。

我们已经为Java中的缓存数据实现了这种优化,并且几乎获得了四倍的加速。但我们希望使用TensorFlow Serving来为模型提供服务,因此我们可能需要将“optimize embedding_lookup_sparse”实现为TensorFlow操作。

这种数据集格式在推荐系统中非常普遍,通过这种优化可以大大提高推理的性能。任何人都可以帮助或指明如何在TensorFlow中实现这一点吗?

顺便说一下,“项目功能”也可以全局缓存。这是优化器的另一种方式。

0 个答案:

没有答案