??Seurat作為知名的單細(xì)胞數(shù)據(jù)分析框架,雖然很好用,但在大數(shù)據(jù)集一直存在速度上的短板,尤其在FindAllMarkers。所以其一直也在試圖解決,比如通過引入feature多線程來加速,但做FindMarkers時(shí)效果沒有想象中的那么好。但是,現(xiàn)在新版的Seurat再一次對(duì)速度動(dòng)手了,在FindAllMarkers中引入了presto包來加速,這一次提升效果著實(shí)驚喜。
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
??四十多萬個(gè)細(xì)胞要是使用FindAllMarkers來做差異分析,這一步預(yù)估需要三個(gè)多小時(shí),這與少量細(xì)胞的秒出結(jié)果相比可謂是天壤之別了。即使可以通過feature多線程加速FindMarkers,效果也沒好到哪去,而且還需要循環(huán)來完成所有細(xì)胞類型,因?yàn)椴皇侵苯蛹铀?code>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
??設(shè)置12個(gè)核,單獨(dú)跑一個(gè)細(xì)胞類型的差異基因需要20分鐘左右,也不知道是不是沒有設(shè)置好,這速度看起來并沒有提升。
??但是,V5在presto的加持下速度明顯提升很多,如果沒有提前安裝好presto包,運(yùn)行時(shí)會(huì)有提示:
library(Seurat)
packageVersion('Seurat')
[1] ‘5.1.0’
system.time(dge <- FindAllMarkers(obj))
user system elapsed
1243.400 152.781 1399.859
??全部細(xì)胞類型的差異基因運(yùn)行下來也就20分鐘左右,這速度相比前面的3個(gè)多小時(shí),確實(shí)省去了很多的等待時(shí)間。如果還想要更快,可以直接使用presto包里面的函數(shù),速度直接起飛,時(shí)間由原先的半天直接下降到2分鐘以內(nèi):
library(presto)
system.time(dge <- wilcoxauc(obj, group_by='celltype'))
user system elapsed
81.629 5.347 87.192