我是如何把48核心96线程的服务器跑瘫痪的

昨天兴高采烈的租到了一个50人共享的服务器,详见:明码标价之共享96线程384G内存服务器

今天就马上跑了一下TCGA中COAD的数据。之前因为自己的电脑是windows,没法用R调用多核,导致DESeq这一步怎么也过不去。

在我按下dds <- DESeq(dds)这个命令时,内心充满了喜悦,心想这回哥搞来了大杀器治你。结果一个小时过去了,毫无反应。

 

正当我觉得,这是什么破服务器,是不是给老子限速了的时候。

群里的唐老师发来了他64秒就跑完了与我相当的数据量。这时候我才发现,原来是我一直在用一个核心在跑。于是我在网上找到了这么一段命令。

if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("BiocParallel")
library("BiocParallel")
register(MulticoreParam(30))##这步就是启用核心数量

然后再加上网上找来的代码:

dds <- DESeq(dds,parallel =TRUE,modelMatrixType = "expanded",betaPrior = TRUE)

打开服务器,使用top命令一看,妥了!

多核启用成功。然后就等着收获的季节吧。结果手头有点事情,把这茬给忘了。没过多久,唐老师发来了警告。我把服务器cpu跑的满满的

img

卧槽,吓尿了,赶紧把任务停了。人家跑了60多秒,我这十几分钟都没结束。肯定是我的代码有问题,然后我就顺着捋。

结果发现在分组信息的部分。我把本来没有配对的分组加了进去。500多个样本被分成了400多组。导致了运算量极大。

主要是下面这两步:

paire_info <- as.factor(as.numeric(as.factor(substring(TCGA_id,1,12))))
dds <-DESeqDataSetFromMatrix(countData=exprSet, 
                         colData=metadata, 
                         design=~paire_info+sample,
                         tidy=FALSE)

应该把配对部分去掉

dds <-DESeqDataSetFromMatrix(countData=exprSet, 
                         colData=metadata, 
                         design=~sample,
                         tidy=FALSE)

同时,应该是

dds <- DESeq(dds,parallel =TRUE,modelMatrixType = "expanded",betaPrior = TRUE)

这部分命令里面后面那部分突破了开始的核心设置的限制,导致了过多核心的占用。把它改成

 dds <- DESeq(dds,parallel =TRUE)

问题终于解决了。最后提醒大家,像这种成熟的数据,如果别人告诉你是1分钟。那你就盯一分钟。如果两分钟了还没结束。那肯定是你代码的问题。别像我一样扔在那忘了,用一个bug让服务器算了个寂寞。

作者:wscx猿 链接:https://www.jianshu.com/p/5bf32c5cb97a 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(0)

相关推荐