0

私は filebacked.big.matrix を使用して、非常に大きなマトリックス (~100 万 x 20,000) を格納しています。非常に高いメモリを備えたクラスターで作業していますが、それほど多くはありません。私は以前、うまく機能し、行列のサイズにもかかわらずメモリ使用量を一定に保つ ff パッケージを使用しましたが、行列の項目が 10^32 を超えたときに停止しました (R コミュニティは本当にその問題を修正する必要があります)。filebacked.big.matrix は最初は非常にうまく機能しているように見え、通常は問題なく実行されますが、メモリ使用量を確認すると、数百 GB に急上昇することがあります。一度に比較的少数の行だけを読み書きするように気をつけているので、一度に多くのメモリが必要ではないと思います。

ある種の自動メモリ キャッシングまたはメモリ使用量を増加させる何かを行いますか? もしそうなら、このキャッシングを無効にするか制限することができますか? 高いメモリ使用量がクラスタに厄介な副作用を引き起こしているため、メモリ ニュートラルでこれを行う方法が必要です。filebacked.big.matrix ヘルプ ページを確認しましたが、適切な情報が見つかりません。ありがとう!

更新:
bigmemoryExtras も使用しています。
以前は間違っていました。マトリックス全体をループして別の小さな file.backed マトリックスに読み込むと、次のように問題が発生します。

tmpGeno=fileBackedMatrix(rowIndex-1,numMarkers,'double',tmpDir)  
front=1  
 back=40000  
 large matrix must be copied in chunks to avoid integer.max errors  
 while(front < rowIndex-1){  
     if(back>rowIndex-1) back=rowIndex-1 
     tmpGeno[front:back,1:numMarkers]=genotypeMatrix[front:back,1:numMarkers,drop=F]  
     front=front+40000  
     back=back+40000  
}  

物理メモリの使用量は、最初は非常に低く (仮想メモリが非常に高く) なっています。しかし、このループの実行中、および終了後でも、ほとんどの行列が物理メモリに保持されているように見えます。一度にメモリに行列の小さなチャンクを 1 つだけ保持する必要があります。

更新 2:
ちょっとわかりにくいです: クラスター メトリックスとtopコマンドでは、大量のメモリ (~80GB) を使用していると言われていますが、gc() コマンドでは、メモリ使用量が 2GB を超えたことはありません。このfreeコマンドは、すべてのメモリが使用されていることを示していますが、-/+ buffers/cache 行では、合計で 7GB しか使用されていないことが示されています。

4

0 に答える 0