Amazon ec2エラーのRランダムフォレスト:サイズ5.4 Gbのベクターを割り当てることができません


9

私はRでランダムフォレストモデルをトレーニングrandomForest()し、約20の予測子と600K行の1000個の木とデータフレームを使用しています。私のラップトップではすべてが正常に動作しますが、amazon ec2に移動して同じことを実行すると、エラーが発生します。

Error: cannot allocate vector of size 5.4 Gb
Execution halted

私はc3.4xlargeインスタンスタイプを使用しているので、かなり頑丈です。誰かがこれをこのインスタンスで実行するための回避策を知っていますか?この問題の原因となるメモリの微妙な違いについて、ラップトップではなくec2インスタンスでのみ知りたい(OS X 10.9.5プロセッサ2.7 GHz Intel Core i7、メモリ16 GB 1600 MHz DDR3)

ありがとう。

回答:


5

ここにいくつかのアドバイスがあります(あなた自身の責任で使用してください!):

上記の単純な方法では効果がない場合、または単一のマシンまたは複数のマシン間でプロセスを並列化する機能など、より高いスケーラビリティパフォーマンスを実現したい場合は、Rパッケージの使用を検討してください:http:// cran。 r-project.org/web/packages/bigrf。次のディスカッションも参照してください:https : //stackoverflow.com/q/1358003/2872891bigrf


2

他のアイデアへの追加:Amazonインスタンスで実行できるものを理解するまでデータを減らします。10万行を実行できない場合は、何かが非常に間違っています。59万行で失敗すると、限界になります。

c3.4xlargeインスタンスには30GbのRAMがあるため、はい、それで十分です。


2

ベクトルの実際のメモリなどの詳細を除いて、表示されている正確なエラーをGoogleだけで確認すると常に役立ちます。私にとって、最初のヒットは「R:Rのメモリ制限」と呼ばれる興味深いドキュメントでした。「Unix」の下では、次のように読むことができます。

アドレス空間の制限はシステム固有です。32ビットOSは4Gb以下の制限を課します。多くの場合3Gbです。64ビットOSで32ビット実行可能ファイルを実行すると、同様の制限があります。64ビット実行可能ファイルには、本質的に無限のシステム固有の制限があります(たとえば、x86_64 cpus上のLinuxでは128Tb)。

単一のプロセスで使用可能なリソースに制限を課す方法については、limitやulimitなどのコマンドに関するOS /シェルのヘルプを参照してください。たとえば、bashユーザーは

ulimit -t 600 -v 4000000

一方、cshユーザーは

limit cputime 10m limit vmemoryuse 4096m

プロセスを10分のCPU時間と(約)4Gbの仮想メモリに制限します。(使用中のRAMを設定するオプションは他にもありますが、それらは一般的に名誉を与えられていません。)

だから、あなたはチェックする必要があります

  1. EC2インスタンスで実行しているOSのタイプ
  2. そのOSで実行しているRビルドのタイプ。64ビットバージョンを実行していることを確認してください。
  3. 両方がすでに64ビットである場合は、を使用ulimitしてメモリをたとえば8Gbに設定します。ulimit -v 8000000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.