关键词
- Parallelization in Seurat
- Seurat 并行化
- Seurat 加快运行速度
- Seurat 并行运算
- Seurat 提高效率
- Seurat 加快整合速度
- Seurat 加快ScaleData/NormalizeData/FindMarkers/FindIntegrationAnchors/FindClusters速度
- Seurat 加快SCTransform速度
适用背景
Seurat包好用是好用,但其分析流程中的某些函数运行起来实在太慢了,较小的数据集还好,但一旦超过10w以上,就需要等待很长时间。Seurat团队应该也发现了 这个问题,所以他们在v3.0版本开始就进行了优化,也就是只要Seurat版本>=3.0,就能对某些步骤实现并行化,从而提高运行效率。(Seurat 4系列版本也可用)
适用函数
Seurat的流程并不需要每个函数都并行化运算,所以根据官网介绍,只有以下几个函数能实现并行化运算:
- NormalizeData
- ScaleData
- JackStraw
- FindIntegrationAnchors
- FindMarkers
- FindClusters - if clustering over multiple resolutions
但根据本人实测发现,SCTransform函数也能实现并行化,但官网貌似没有更新。
使用方法
Seurat的并行策略是基于future包的plan函数,只需要加入以下三行内容,其中workers设置进程数,这个根据个人实际情况填写即可.
library(future)
plan("multiprocess", workers = 4)
options(future.globals.maxSize = 100000 * 1024^5)
future.globals.maxSize则是为了解除运行内存限制,不然会出现以下报错。
Error in getGlobalsAndPackages(expr, envir = envir, globals = TRUE) :
The total size of the X globals that need to be exported for the future expression ('FUN()') is X GiB. This exceeds the maximum allowed size of 500.00 MiB (option 'future.globals.maxSize'). The X largest globals are
加快SCTransform速度
SCTransform是官网推荐的数据预处理方法,但是极其慢,官网使用glmGamPoi进行优化提速,但是这是仅限于4.0版本及以上,本人在R3.6版本无法安装glmGamPoi包,而且Seurat 3的SCTransform函数也没有加入glmGamPoi方法,会报错。
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install("glmGamPoi")
pbmc <- SCTransform(pbmc, method = "glmGamPoi", vars.to.regress = "percent.mt", verbose = FALSE)
小结与补充
实现并行化后运行进度条可能会消失,官网解释这与future框架与R本身限制有关,具体我也不太懂,更多详细的内容可以浏览官方教程。
网友评论