Seurat提速——并行化(future包)2022-06-07

关键词

  • 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并行

适用函数

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本身限制有关,具体我也不太懂,更多详细的内容可以浏览官方教程

版权声明:
作者:Zad
链接:https://www.techfm.club/p/55803.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>