2016-07-24 11 views
1

私は、サイズが約10000X10000X10000の行列で作業する必要があるpythonプロジェクトに取り組んでいます。大きな行列を処理するためのハードウェア要件 - python

  • 行列が密になり、RAMに格納されるべきである:ことを考慮

  • n = 10000の演算(並列化可能)のO(n^3)辺りの線形代数(numpy付き、私は思う)を実行する必要があります。

私の要件は現実的ですか?まともな時間にこのように作業する必要があるハードウェア要件はどれですか?

パフォーマンスを改善できる場合は、言語を切り替えることもできます(たとえば、Cで線形代数演算を実行するなど)。

答えて

0

実際、ここでのメモリは大きな問題になります。行列要素のタイプに依存します。それぞれの浮動小数点数は、ボックス化されたオブジェクトであるため、例えば24バイトです。行列が10^12であるので、数学を行うことができます。 Cに切り替えるとメモリ効率は向上しますが、numpyは本質的にCで多くの最適化が行われているため、より速くはありません

4

まず最初に質問したいのは、 これは整数であり、すべてのバイトが4バイトのISO仕様を使用するように指定すると、格納するサイズは4 * 10^12バイトになります。それは膨大な量の情報(4 TB)です。まず、情報をどこから取得しているのか分かりません。簡単に管理できる部分だけをロードすることをお勧めします。

反対に、パラレル化することができるので、NVIDIAカードを購入することができればCUDAを使用することをお勧めしますので、より良いパフォーマンスが得られます。

要するに、これらの情報をすべてRAMに保存するのは難しく、paralell languajesを使用します。

PD:アルゴリズムの複雑さに関するO()刺激が間違っています。あなたは、n = size_of_the_matrixまたはO(n m t)であるO(n)を行列の次元であるn、mおよびtとする必要があります。

1

多分daskのようなものがあなたに適していますか?メモリマップのアライバルを使用し、並列化可能なチャンクで操作を行うようなnumpyでこれを行うには他の方法がありますが、特にPythonに慣れている場合はもう少し難しくなります。

個人的には、私はこのタスクに別の言語を使用するメリットはありません。あなたは、ハードウェアの制限と並列操作のチャンクに対処する必要があります。 daskを使うと、これは非常に多くのことができます。

関連する問題