我是如何把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跑的满满的
卧槽,吓尿了,赶紧把任务停了。人家跑了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 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。