Seurat | 解决了FindAllMarkers在大数据集上
2024-12-21 本文已影响0人
生信云笔记
Seurat
作为知名的单细胞数据分析框架,虽然很好用,但在大数据集一直存在速度上的短板,尤其在FindAllMarkers
。所以其一直也在试图解决,比如通过引入feature
多线程来加速,但做FindMarkers
时效果没有想象中的那么好。但是,现在新版的Seurat
再一次对速度动手了,在FindAllMarkers
中引入了presto
包来加速,这一次提升效果着实惊喜。
library(Seurat)
packageVersion('Seurat')
[1] ‘4.1.1’
obj <- readRDS('seurat_object.rds')
obj
An object of class Seurat
33469 features across 445809 samples within 1 assay
Active assay: RNA (33469 features, 2000 variable features)
4 dimensional reductions calculated: pca, tsne, umap, harmony
length(unique(obj$celltype))
[1] 12
system.time(dge <- FindAllMarkers(obj))
Calculating cluster vCMs
|++++ | 6 % ~03h 24m 54s
四十多万个细胞要是使用FindAllMarkers
来做差异分析,这一步预估需要三个多小时,这与少量细胞的秒出结果相比可谓是天壤之别了。即使可以通过feature
多线程加速FindMarkers
,效果也没好到哪去,而且还需要循环来完成所有细胞类型,因为不是直接加速FindAllMarkers
。
library(future)
plan("multicore", workers = 12)
system.time(dge <- FindMarkers(obj, ident.1 = "B cells"))
user system elapsed
123.768 44.450 1123.624
设置12个核,单独跑一个细胞类型的差异基因需要20分钟左右,也不知道是不是没有设置好,这速度看起来并没有提升。
但是,V5
在presto
的加持下速度明显提升很多,如果没有提前安装好presto
包,运行时会有提示:
library(Seurat)
packageVersion('Seurat')
[1] ‘5.1.0’
system.time(dge <- FindAllMarkers(obj))
user system elapsed
1243.400 152.781 1399.859
全部细胞类型的差异基因运行下来也就20分钟左右,这速度相比前面的3个多小时,确实省去了很多的等待时间。如果还想要更快,可以直接使用presto
包里面的函数,速度直接起飞,时间由原先的半天直接下降到2分钟以内:
library(presto)
system.time(dge <- wilcoxauc(obj, group_by='celltype'))
user system elapsed
81.629 5.347 87.192