0

次のソース コードを含む R スクリプトがあります。

genofile<-read.table("D_G.txt", header=T, sep=',')
genofile<-genofile[genofile$"GC_SCORE">0.15,]
cat(unique(as.vector(genofile[,2])), file="GF_uniqueIDs.txt", sep='\n')

D_G.txt は、約 5 GB の巨大なファイルです。

現在、計算は Microsoft HPC クラスターで実行されているため、ご存知のように、ジョブを送信すると、異なる物理ノードに「分割」されます。私の場合、それぞれに 4 GB の RAM メモリがあります。

一定の時間が経過すると、悪名高いエラーcannot allocate vector of size xxx Mbメッセージが表示されます。使用可能なメモリを制限するスイッチを使用しようとしました:

--max-memory=1GB

しかし、何も変わりません。

Rscript 2.15.0 を 32 ビットと 64 ビットの両方で試しましたが、うまくいきませんでした。

4

1 に答える 1

2

データセット自体が 1 つのノードのメモリに収まる必要があるという事実は、分析を実行するときにメモリに収まることを意味するわけではありません。多くの場合、分析によってデータがコピーされます。さらに、ユーザー側の非効率的なプログラミングによって、メモリ使用量が増加する可能性もあります。スイッチを設定して R のメモリ使用を制限すると、状況が悪化するだけです。実際のメモリ使用量を制限するのではなく、最大メモリ使用量を制限します。また、32 ビット OS を使用して 1 つのプロセスでアドレス指定できる最大メモリは 4 GB 未満であるため、32 ビット OS を使用することは、メモリに関しては常にちょっとしたアイデアです。

これ以上の詳細がなければ、この問題についてこれ以上手助けすることは困難です. 一般に、成功するまで、データセットをどんどん小さく分割することをお勧めします。あなたの問題は恥ずかしいほど並列であり、データセットをさらに切り詰めても出力は何も変わらないと思います。

于 2012-04-17T08:50:43.463 に答える