@iresine 问:tensorflow 怎么配置非数据并行分布式?
假设模型有两个conv层和1个fc层,有3台服务器每台各一块显卡,请问要怎么实现把计算图拆成3部分,每块显卡分别计算一个层,而不是把计算图完整复制3份放到3块卡上独立计算?
来自社友的回答
▼▼▼
@王奇文:
你指的是in-graph模式的模型并行吧?思考以下几个问题:
①cpu和gpu的优势和劣势分别是什么?cpu擅长指定操作,逻辑判断,gpu擅长矩阵运算,二者相互补充,一边用cpu执行参数更新、逻辑运算,gpu执行矩阵运算
②tf的分布式实现有哪些类别?单机单卡,单机多卡,多机多卡。此处适用于多机多卡(单卡),3个服务器分成两类:参数服务器ps,计算服务器work,中间通过gRPC调用、传输
③2个卷积核1个fc真的有必要分散在三台机器吗?如果纯粹为了做实验,可以参考下tf官方的in-graph实现。基本方法是:
定义网络结构时,指定tf.device(''),如:
with tf.device('/job:ps/task:0'):#参数定义在机器D上
w=tf.get_variable('w',(2,2),tf.float32,initializer=tf.constant_initializer(2))
b=tf.get_variable('b',(2,2),tf.float32,initializer=tf.constant_initializer(5))
with tf.device('/job:worker/task:0/cpu:0'):#在机器A cpu上运行
addwb=w+b
with tf.device('/job:worker/task:1/cpu:0'):#在机器B cpu上运行
mutwb=w*b
with tf.device('/job:worker/task:2/cpu:0'):#在机器C cpu上运行
divwb=w/b