- 标题:使用NumpyArrayInitializer初始化embedding层爆内存
- 版本、环境信息:
1)PaddlePaddle版本:PaddlePaddle 1.8.0
2)AIStudio
- 问题描述:使用NumpyArrayInitializer初始化embedding层爆内存
用来初始化的数组大小为200w*300,也就5G大小,但是创建embedding的时候内存激增直到被killed(aistudio内存大小32G)
embedding_params = fluid.ParamAttr(name='emb', initializer=fluid.initializer.NumpyArrayInitializer(We), trainable=False)
emb = fluid.embedding( input=data, size=[input_dim, emb_dim], is_sparse=True, param_attr=embedding_params)
其中We的shape为200w*300
4条答案
按热度按时间gmxoilav1#
请问下你的input_dim, emb_dim对应也是200w, 300吗?另外你的输入data的shape是多少呢
dphi5xsq2#
嗯是的,定位到爆内存的代码是https://github.com/PaddlePaddle/Paddle/blob/release/1.8/python/paddle/fluid/initializer.py
第888行:
values = [float(v) for v in np_value.flat]
这句代码试图把数组里的数一个个取出来组成list,这一步内存消耗很大。
我把这行代码修改成
values = np_value.flatten()
这样内存只需增加一倍的数组大小,也就是5G
j91ykkif3#
现在numpy initializer的assign方式和assign op的使用方式是相同的,我确认下这种转换方法能不能优化下,你这边修改成flatten()能够正常运行了吗
ibrsph3r4#
嗯是的