【问题标题】:Implementation of model parallelism in tensorflowtensorflow中模型并行的实现
【发布时间】:2023-03-06 19:29:01
【问题描述】:

我目前正在开发一个具有 2 个 GPU,每个 12GB 的系统。我想在两个 GPU 上实现模型并行性来训练大型模型。我一直在浏览整个互联网、SO、tensorflow 文档等,我能够找到模型并行性及其结果的解释,但我在任何地方都找不到关于如何使用实现它的小教程或小代码 sn-ps张量流。我的意思是我们必须在每一层之后交换激活,对吗?那么我们该怎么做呢?是否有在 tensorflow 中实现模型并行性的特定或更简洁的方法?如果您能建议我一个可以学习实现它的地方或一个简单的代码(例如使用“模型并行”在多个 GPU 上进行 mnist 训练),那将非常有帮助。

注意:我已经完成了类似 CIFAR10 - 多 GPU 教程中的数据并行,但我还没有找到模型并行的任何实现。

【问题讨论】:

    标签: parallel-processing tensorflow distributed


    【解决方案1】:

    这是一个例子。该模型在 GPU0 上有一些部分,在 GPU1 上有一些部分,在 CPU 上有一些部分,所以这是 3 路模型并行。

    with tf.device("/gpu:0"):
        a = tf.Variable(tf.ones(()))
        a = tf.square(a)
    with tf.device("/gpu:1"):
        b = tf.Variable(tf.ones(()))
        b = tf.square(b)
    with tf.device("/cpu:0"):
        loss = a+b
    opt = tf.train.GradientDescentOptimizer(learning_rate=0.1)
    train_op = opt.minimize(loss)
    
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    for i in range(10):
        loss0, _ = sess.run([loss, train_op])
        print("loss", loss0)
    

    【讨论】:

    • @Buatov - 感谢上述实现,但我一直在寻找的是,在为神经网络实现模型并行性时,我们必须在前向通过每一层后共享激活,所以我的主要疑问是我如何将权重矩阵从一台设备传递到另一台设备(即 GPU 之间)..
    • 这一切都是为您自动完成的。 IE,只需将上面代码中的tf.square部分替换为a=create_left_part_of_networkb=create_right_part_of_network,你最终会得到一个在gpu0和gpu1之间划分的网络
    • 它按我预期的那样工作,但它比我在一个 gpu 中运行所有东西所花费的时间要慢。你知道为什么会这样吗?这是代码的链接:multi_gpuone gpu
    • 你必须查看时间表并检查瓶颈是什么
    • 非常感谢您的帮助,它更快,但我面临的问题是多 GPU 程序占用的内存占用量是在一个 GPU 中运行整个程序的两倍。你能想到为什么会发生这种情况吗?代码的链接在上面。我会用最新的代码更新它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多