tensorflow参数分割存储

在tensorflow的分布式训练中,默认将参数以变量名的维度分布式存储在不同ps上。如将item_embedding存储在ps0上,item_bias存储在ps1上。默认不会将同一个变量存储在不同的ps上。
在实际情况中,有的变量行数很多,如item_embedding的行数一般有几百万量级,如果存储在同一个ps上,会导致该ps成为性能瓶颈。为了解决以上问题,在tensorflow中可以通过定义partitioner的方式将同一个变量分布式存储在不同ps上。具体使用方法如下:

self.partitioner = tf.fixed_size_partitioner(10)   #定义partitioner,均匀分布存储在10个ps上
with tf.variable_scope('embedding',partitioner=self.partitioner):  #定义variable时加上partitioner
   self.item_embedding = tf.get_variable('item_embedding',[item_num, emb_size])

以上定义会将item_embedding均匀分布存储在10个ps上,如下图所示:
在这里插入图片描述
注意在直接访问item_embedding的地方,都要加上with tf.variable_scope(‘xxxx’,partitioner=self.partitioner):,如下面的语句

with tf.variable_scope("network_part",partitioner=self.partitioner):
   item_list_emb = tf.nn.embedding_lookup(self.item_embedding,features['itemlist'])

后面继续访问item_list_emb,则可以不需要加上with tf.variable_scope(‘xxxx’,partitioner=self.partitioner):了

另外在导出模型中item_embedding时,需要在变量名后加上/part_xx,如embedding/item_embedding/part_0。
如需导出所有item_embedding,将变量名embedding/item_embedding/part_0,embedding/item_embedding/part_1,… embedding/item_embedding/part_9分别导出后合并到一个文件里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值