2

人工ニューラル ネットワークを学習するためのプログラムがあり、トレーニング データとして 2 次元の numpy 配列を使用します。使用したいデータ配列のサイズは、約 300,000 x 400 float です。私が使用しているライブラリ (DeepLearningTutorials) はトレーニング データとして単一の numpy 配列を使用するため、ここではチャンキングを使用できません。

このプロセスによる RAM 使用量が約 1.6Gb の場合 (システム モニターで確認しました)、コードは MemoryError を示しますが、合計 RAM は 8GB です。また、システムは Ubuntu-12.04 32 ビットです。

または他の同様の質問の回答を確認しましたが、Pythonプログラムにメモリを割り当てるようなものは何もないと言われ、プロセスメモリを増やす方法についての回答が明確ではありません。

興味深い点の 1 つは、同じコードを別のマシンで実行していて、ほぼ 1,500,000 x 400 の浮動小数点数の numpy 配列を問題なく使用できることです。もう一方のマシンが 64 ビットで、こちらのマシンが 32 ビットであることを除いて、基本的な構成は似ています。

なぜこれに大きな違いがあるのか​​ 、それともこれが私の問題の唯一の理由なのかについて、誰かが理論的な答えを教えてください。

4

1 に答える 1

2

32 ビット OS は最大約 4 GB の RAM しかアドレス指定できませんが、64 ビット OS はさらに多くの RAM (理論上は 1680 万テラバイト) を利用できます。お使いの OS は 32 ビットであるため、OS は 4GB しか利用できないため、他の 4GB は使用されません。

他の 64 ビット マシンには 4 GB RAM の制限がないため、インストールされているすべての RAM を利用できます。

これらの制限は、32 ビット マシンが 32 バイトのメモリ アドレス (ポインタ) しか格納できないという事実に由来するため、コンピュータが識別できるメモリ位置は 2^32 通りあります。同様に、64 ビット マシンは 2^64 の異なるメモリ位置を識別できるため、2^64 の異なるバイトをアドレス指定できます。

于 2013-07-19T23:04:53.663 に答える