在 Lenovo P50 上比较 64gb dd3 ram 与 2gb Quadro M1000M gpu

计算科学 显卡 内存管理
2021-12-20 16:20:58

我经常在我的联想 P50 工作站上使用 Keras 和 tensorflow-gpu,它有 64GB 内存和 2GB Nvidia QUadro M1000M GPU。

今天在 GPU 上训练我的模型时,它遇到了内存错误并在这一行退出:

da_ta = np.zeros((len(data),sequence_length, cls.get_vector_size(model)), dtype=K.floatx())

所以我的问题是如何比较 64GB 内存和 2GB gpu?
这个比那个好吗?
如果这不是正确的地方,请将我的问题迁移到适当的论坛。

谢谢你。

1个回答

在我看来,没有比其他更好的内存类型了。只是它们是不同的东西。

普通内存仅由 cpu 使用,而 gpu ram 仅由 gpu 使用。当您直接在 CUDA 中编码时,这一点非常清楚,即如果您希望 gpu 在普通 ram 中使用一些数据,您必须将它们移动到 gpu 内存(主机 -> 设备)。如果你想在 cpu 中使用一些 gpu 结果,你必须移动它们(设备 -> 主机)。请注意,在某些语言中存在避免显式通过的“技巧”,例如统一内存编程

底层系统管理 CUDA 程序中的数据访问和位置,无需显式内存复制调用。

幕后有运动(注意最好是这个或手动运动这是另一个问题....)。

Keras 和 tensorflow 被用来隐藏这个级别的细节,所以你不会直接看到它。

对于上述动机是不正确的比较两个内存。

如果您想对尺寸比较有所了解,这里很大程度上取决于问题。我尝试用 CUDA 来解释。一个 gpu 可以使用不同的数据并行执行 N 次相同的函数(读取内核)。请参阅SIMD,每个新数据都分配给不同的线程。现在通常你有很多情况要详细说明 >> N 所以 gpu 分组和组织线程,看这个,在 N 的池中,这些池是按顺序执行的。

通过一些简化,您可以考虑每个线程使用多少内存(这里严重依赖于问题)并乘以 N。通过这种方式,您可以粗略估计 gpu 使用的内存,并且您可以了解如果 2 GB 的 gpu足够 64 gp 的 cpu 内存。