【问题标题】:Out of memory running correlation analysis in JuliaJulia中的内存不足运行相关性分析
【发布时间】:2020-01-03 08:25:43
【问题描述】:

我在 Julia 中有一个大型稀疏矩阵,我想对其进行相关性分析,但遇到了:

ERROR: OutOfMemoryError()

我的稀疏矩阵细节是:

200833×200833 SparseMatrixCSC{Float64,Int64} with 209018611 stored entries:

我在 sparsematrix 上运行了cor() 命令,但根据上面的错误,我无法得到结果。

我可以做些什么来获得我的结果?

谢谢

【问题讨论】:

    标签: julia sparse-matrix correlation


    【解决方案1】:

    cor 函数计算每对列(或取决于dim 参数的行)的相关性。 由于您有 200k 列,因此您的相关矩阵的大小为 320GB。

    现在,假设您有足够的计算能力来处理此类任务,最好的办法是成对执行计算并将结果存储到文件中。

    假设您的 s 是您的稀疏矩阵:

    for (i,j) in Iterators.product(1:size(s,2),1:size(s,2))
         if (i<j)
             cor_v = cor(@view(s[:,i]), @view(s[:,j]))
             #TODO save it somewhere since you have a total of 320 GB of data!
         end
    end
    

    由于这是一项大型计算任务,您可能会使用@distributed 宏将其分布在您的集群上,但这是一个单独的主题。

    【讨论】:

    • 谢谢!我需要保存cor_v,因为集群在它们上工作还是在完成计算后写入?
    • 有很多模式可以做到这一点,具体取决于您的集群配置或节点持久性等因素(即,如果您使用 AWS Spot 或 GCE Preemtible 实例)。通常,最好以这样一种方式设计您的计算,即每个工作进程每 5 或 10 分钟存储一次数据。我通常使用 AWS 进行计算,使用 S3 进行存储。有关一些灵感,您可以查看 github.com/pszufe/KissCluster 或在 StackOverflow 上发布不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多