Pytorch Pytork';在每个GPU中加载相同的模型?

Pytorch Pytork';在每个GPU中加载相同的模型?,pytorch,gpu,multi-gpu,Pytorch,Gpu,Multi Gpu,它看起来(逻辑上)工作的唯一方式是在每个GPU中加载模型。这意味着在更新权重时,每个GPU也需要更新权重,从而与单个GPU相比增加了工作量。这条推理路线正确吗?首先,改用 您可以查看描述流程的文档(您还可以检查并深入了解模块复制的执行方式) 下面是大致的操作过程: 初始化 所有(或选择的)设备ID都保存在构造函数和维度中,数据将沿着该维度分散(几乎总是0,这意味着它将沿着批次拆分为设备) 向前地 这是在每次向前运行期间完成的: 输入是分散的(沿维度的张量,tuple,list,dict浅复制,其

它看起来(逻辑上)工作的唯一方式是在每个GPU中加载模型。这意味着在更新权重时,每个GPU也需要更新权重,从而与单个GPU相比增加了工作量。这条推理路线正确吗?

首先,改用

您可以查看描述流程的文档(您还可以检查并深入了解模块复制的执行方式)

下面是大致的操作过程:

初始化 所有(或选择的)设备ID都保存在构造函数和维度中,数据将沿着该维度分散(几乎总是
0
,这意味着它将沿着批次拆分为设备)

向前地 这是在每次
向前运行期间完成的:

  • 输入是分散的(沿维度的张量,
    tuple
    list
    dict
    浅复制,其他数据在线程之间共享)
  • 如果只有一个设备,只需返回
    模块(*args,**kwargs)
  • 如果有多个设备,请将网络从源计算机复制到其他设备(每次都会这样做!)
  • 在每个设备上使用各自的输入向前运行
  • 将设备的输出收集到源计算机上的单个源设备(输出的串联)
  • 运行代码的其余部分,backprop,更新源机器上的权重等
  • 默认情况下,源计算机是
    cuda:0
    ,但可以选择。此外,重量在单个
    设备上更新,只有批次分散,输出集中。

    首先,使用

    您可以查看描述流程的文档(您还可以检查并深入了解模块复制的执行方式)

    下面是大致的操作过程:

    初始化 所有(或选择的)设备ID都保存在构造函数和维度中,数据将沿着该维度分散(几乎总是
    0
    ,这意味着它将沿着批次拆分为设备)

    向前地 这是在每次
    向前运行期间完成的:

  • 输入是分散的(沿维度的张量,
    tuple
    list
    dict
    浅复制,其他数据在线程之间共享)
  • 如果只有一个设备,只需返回
    模块(*args,**kwargs)
  • 如果有多个设备,请将网络从源计算机复制到其他设备(每次都会这样做!)
  • 在每个设备上使用各自的输入向前运行
  • 将设备的输出收集到源计算机上的单个源设备(输出的串联)
  • 运行代码的其余部分,backprop,更新源机器上的权重等
  • 默认情况下,源计算机是
    cuda:0
    ,但可以选择。此外,在单个
    设备上更新权重,仅分散批次并收集输出