张量流如何处理无法存储在一个盒子中的大变量

2024-05-16

我想通过训练超过十亿特征维度的数据来训练 DNN 模型。因此第一层权重矩阵的形状将为(1,000,000,000, 512)。这个权重矩阵太大,无法存储在一个盒子中。

目前有没有什么解决方案来处理这么大的变量,例如将大的权重矩阵划分为多个框。

Update:

谢谢奥利维尔和凯维曼。让我添加有关我的问题的更多详细信息。 该示例非常稀疏,所有特征都是二进制值:0 或 1。参数权重看起来像 tf.Variable(tf.truncated_normal([1 000 000 000, 512],stddev=0.1))

kaveman给出的解决方案看起来很合理,我会在尝试后更新结果。


这个问题的答案很大程度上取决于您想要对权重矩阵执行什么操作。

处理如此大量特征的典型方法是处理512每个特征的向量作为嵌入。如果数据集中的每个示例仅具有 10 亿个特征中的一个,那么您可以使用tf.nn.embedding_lookup https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup函数来查找小批量示例中存在的特征的嵌入。如果每个示例都有多个功能,但可能只有少数几个,那么您可以使用tf.nn.embedding_lookup_sparse https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup_sparse查找嵌入。

在这两种情况下,您的权重矩阵可以分布在许多机器上。那就是params这两个函数的参数都是张量列表。您可以对大型权重矩阵进行分片并将分片放置在不同的机器中。请看tf.device https://www.tensorflow.org/api_docs/python/tf/deviceprimer https://www.tensorflow.org/deploy/distributed分布式执行,以了解数据和计算如何分布在许多机器上。

如果你确实想对权重矩阵进行一些密集运算,例如将矩阵与另一个矩阵相乘,这仍然是可以想象的,尽管 TensorFlow 中没有现成的方法来处理这个问题。您仍然需要在机器之间分割权重矩阵。但是,您必须在权重矩阵的分布式块上手动构建矩阵乘法序列,并将结果组合起来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

张量流如何处理无法存储在一个盒子中的大变量 的相关文章

随机推荐