【问题标题】:GPU showing no speed up over CPUGPU显示没有超过CPU的速度
【发布时间】:2021-05-12 17:29:51
【问题描述】:

我正在训练一个具有 100*100 隐藏节点、四个输入/一个输出、批量大小为 32 的神经网络,我发现使用 GPU 与 CPU 相比,速度没有任何提升。我只有有限的数据集(1067 个样本,一开始全部复制到 GPU),但我原以为 33 个批次可以并行运行,而不是弥补复制到 GPU 的时间。我的数据集是否太小,还是可能存在其他问题?这是我的代码 sn-p:

def train_for_regression(X, T):
    BATCH_SIZE = 32
    n_epochs = 1000
    learning_rate = 0.01
    device = torch.device("cuda:0")
    Xt = torch.from_numpy(X).float().to(device) #Training inputs are 4 * 1067 samples
    Tt = torch.from_numpy(T).float().to(device) #Training outputs are 1 * 1067 samples
    
    nnet = torch.nn.Sequential(torch.nn.Linear(4, 100), 
                               torch.nn.Tanh(), 
                               torch.nn.Linear(100, 100), 
                               torch.nn.Tanh(),
                               torch.nn.Linear(100, 1))
    nnet.to(device)
    mse_f = torch.nn.MSELoss()
    optimizer = torch.optim.Adam(nnet.parameters(), lr=learning_rate)

    for epoch in range(n_epochs):
        for i in range(0, len(Xt), BATCH_SIZE):
            batch_Xt = Xt[i:i+BATCH_SIZE,:]
            batch_Tt = Tt[i:i+BATCH_SIZE,:]
            optimizer.zero_grad()
            Y = nnet(batch_Xt)
            mse = mse_f(Y, batch_Tt)
            mse.backward()
            optimizer.step()
    return nnet

【问题讨论】:

  • batch-file 和这里有什么关系? torch 是关于 Lua,而不是 Python。标记时阅读说明
  • 您应该使用DataLoader 而不是自己构建批次。 pytorch.org/docs/stable/data.html
  • 什么时候运行这个,同样的代码只有一行改成device = torch.device("cpu")
  • 不幸的是,我无法让 DataLoader 工作。我看到 CPU 运行时间为 36 秒,cuda:0 运行时间为 41 秒,但从底部的答案看来,数据集太小了。感谢您的帮助。

标签: python pytorch gpu cpu


【解决方案1】:

数据到达 GPU 所需的时间可能会抵消 GPU 的优势。在这种情况下,网络的规模似乎很小,以至于 CPU 应该足够高效,而 GPU 的加速不应该那么大。

此外,GPU 通常用于并行矩阵计算,或者在这种情况下 - 单个批次的数据乘以网络的权重。因此,除非您采取额外的步骤,例如使用额外的库和/或 GPU,否则不应并行处理批次。

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2015-01-04
    • 1970-01-01
    • 2019-04-18
    • 2015-12-27
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多