簡體   English   中英

在集群上使用 R 進行內存虛擬化

[英]Memory virtualization with R on cluster

我對並行計算幾乎一無所知,所以這個問題可能非常愚蠢,而且可能無法做我想做的事情。

我正在使用具有 40 個節點的 linux 集群,但是由於我不知道如何在 RI 中編寫並行代碼,因此只能使用一個。 在這個節點上,我試圖分析充斥內存(大約 64GB)的數據。 所以我的問題不是缺乏計算能力而是內存限制。

我的問題是,是否甚至可以使用一些 R 包(如 doSnow)進行隱式並行化以使用 2-3 個節點來增加 RAM 限制,或者我是否必須從頭開始重寫腳本以使其顯式並行化?

對不起,如果我的問題很幼稚,歡迎提出任何建議。

謝謝,

西蒙

我不認為有這樣的包。 原因是擁有一個沒有多大意義。 內存訪問速度非常快,相比之下,通過網絡從另一台計算機訪問數據非常慢。 因此,如果存在這樣的包,它幾乎沒有用,因為處理器需要一直等待網絡上的數據,這會使計算變得非常非常緩慢。

對於從現成硬件構建的常見計算集群來說,情況確實如此。 如果您碰巧有一個特殊的集群,遠程內存訪問速度很快,並且作為操作系統的服務提供,那么當然可能還不錯。

否則,您需要做的是嘗試手動將問題分成多個部分,然后使用 R 或其他工具並行化。

另一種方法是將一些數據保留在磁盤上,而不是將所有數據都加載到內存中。 在加載另一部分數據之前,您仍然需要(某種)划分問題,以確保內存中的數據部分用於合理的計算時間。

是否值得(或完全可能)執行這些選項中的任何一個,完全取決於您的應用程序。

順便提一句。 R 中的高性能計算工具列表如下: http : //cran.r-project.org/web/views/HighPerformanceComputing.html

供日后查詢:

您可能想看看兩個包“snow”和“parallel”。 庫“snow”擴展了apply/lapply/sapply...的功能,可以在多個核心和/或一個節點上工作。

當然,您可以使用多個內核執行簡單的並行計算:

#SBATCH --cpus-per-task=(在此處輸入一些數字)

您還可以使用多個節點(最好使用前面提到的庫)執行並行計算:

#SBATCH --ntasks-per-node=(在此處輸入一些數字)

但是,對於一些含義,您可能想考慮使用 Python 而不是 R,其中使用“Dask”worker 並行性可以更有效。

您可能想看看 TidalScale,它可以讓您聚合集群上的節點,以使用底層節點的集體資源運行單個 Linux 實例。 www.tidalscale.com。 盡管 R 應用程序可能本質上是單線程的,但您將能夠為您的 R 應用程序提供跨節點的單一、簡單的連貫內存空間,這對您的應用程序是透明的。

祝你的項目好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM