处理大矩阵的硬件要求 - python

时间:2016-07-24 18:03:26

标签: python numpy matrix

我正在开发一个python项目,我需要使用一个大小在10000X10000X10000左右的矩阵。

考虑到:

  • 矩阵将是密集的,应存储在RAM中。
  • 我需要在该矩阵上执行线性代数(我认为是numpy),大约为O(n ^ 3),其中n = 10000次操作(可并行化)。

我的要求是否切合实际?在合适的时间里,我需要以这种方式工作的硬件要求是什么?

如果可以提高性能,我也愿意切换语言(例如,在C中执行线性代数运算)。

3 个答案:

答案 0 :(得分:4)

那么,第一个问题是,您将在矩阵中存储哪种类型的值? 假设它是整数(并且假设每个字节使用ISO规范的大小,4个字节),你将有4 * 10 ^ 12个字节来存储。这是一个大量的信息(4 TB),所以,首先,我不知道你从哪里获取所有这些信息,我建议你只加载它的一部分,你可以轻松管理。

另一方面,正如你可以对它进行并列化,如果你买得起NVIDIA卡,我会建议你使用CUDA,这样你的性能会更好。

总之,很难只将所有信息都存储在RAM中,并使用paralell语言。

PD:你错误地使用了关于算法时间复杂度的O()方法。你应该说你有一个O(n),即n = size_of_the_matrix或O(n m t),n,m和t是矩阵的维数。

答案 1 :(得分:1)

实际上,记忆在这里是个大问题。取决于矩阵元素的类型。例如,每个浮点数占用24个字节,因为它是一个盒装对象。由于你的矩阵是10 ^ 12,你可以做数学运算。 切换到C可能会使内存效率更高,但速度更快,因为numpy本质上是用C语言编写的,并且有很多优化

答案 2 :(得分:1)

dask之类的东西可能适合你吗?还有其他方法可以使用numpy来实现这一点,例如使用内存映射的arrarys并以可并行化的块进行操作,但是如果你仍然熟悉Python,那将会更加困难。

就我个人而言,我没有看到使用不同语言完成此任务的好处。您仍然需要处理并行操作的硬件限制和分块。使用dask,这几乎是开箱即用的。