单细胞数据分析中future包的使用

跑锚点整合的时候遇到报错

scRNA.anchors <- FindIntegrationAnchors(object.list = scRNAlist,
                                        normalization.method = "SCT",  
                                        anchor.features = scRNA.features)

提示future.globals.maxSize不足
解决办法参考:stackoverflow

library(future)
# 3250*1024^2 = 3407872000
options(future.globals.maxSize= 4000000000) #大于3407872000即可
scRNA.anchors <- FindIntegrationAnchors(object.list = scRNAlist,
                                        normalization.method = "SCT",  
                                        anchor.features = scRNA.features)

基于future的Seurat多线程并行策略

如何在Seurat中使用并行策略

在Seurat的 pipeline中,我们是可以使用future框架进行并行运算的。更多说明可以参考future。要访问 Seurat 中的并行函数版本,需要加载future包并设置plan。plan将指定如何运行该函数。默认行为是以非并行方式(按顺序)进行。为了实现并行,我们通常建议"多线程"策略。默认情况下,这将调用所有可用的核,但可以设置workers参数以限制同时活动future的数量。

library(future)
# check the current active plan
plan()
## sequential:
## - args: function (..., envir = parent.frame())
## - tweaked: FALSE
## - call: NULL
# change the current plan to access parallelization
plan("multiprocess", workers = 4)
plan()
## multiprocess:
## - args: function (..., envir = parent.frame(), workers = 4)
## - tweaked: TRUE
## - call: plan("multiprocess", workers = 4)
seurat的"futurized"功能

以下函数已被编写可以利用future 框架,如果设置适当的plan,将进行并行。

  • NormalizeData()
  • ScaleData()
  • JackStraw()
  • FindMarkers()
  • FindIntegrationAnchors()
  • FindClusters() - if clustering over multiple resolutions

例如,要运行并行版本,只需要设置future 并照常调用FindMarkers()功能。

例如在跑FindMarkers的时候

library(Seurat)
pbmc <- readRDS("../data/pbmc3k_final.rds")

# Enable parallelization
plan("multiprocess", workers = 4)
markers <- FindMarkers(pbmc, ident.1 = "NK", verbose = FALSE)
sequential vs. parallel

这里,我们将执行一个简单的比较,比较有和没有并行运行的时间差异。注意,虽然我们预计使用并行策略将减少上述函数的运行时间,但减少的幅度将取决于许多因素(例如数据集的大小、线程数、系统的规格、future框架等)。以下基准是在运行 Ubuntu 16.04.5 LTS 的计算机上执行的,配置是 Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz and 96 GB of RAM

library(ggplot2)
library(cowplot)
ggplot(timing.comparisons, aes(fxn, time)) + geom_bar(aes(fill = strategy), stat = "identity", position = "dodge") +
    ylab("Time(s)") + xlab("Function") + theme_cowplot()
常见问题
  • 我的进度栏去哪里了?
    遗憾的是,在任何平行模式下运行这些函数时,您将失去进度栏。这是由于future框架和 R 中的一些技术限制造成的。如果要监控函数进度,则需要放弃并行化,选择使用plan("sequential")。

  • 如果我不断看到以下错误,该怎么办?

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 ... 

对于某些函数,每个线程需要访问某些全局变量。如果这些大于默认限制,将看到此错误。要绕过这一点,可以设置 options(future.globals.maxSize = X),X 是字节中允许的最大值。因此,要将其设置为1GB,可运行options(future.globals.maxSize = 1000 * 1024^2)。注意,这将增加RAM使用量,因此请注意设置合适的数字。

参考:https://satijalab.org/seurat/articles/future_vignette.html

你可能感兴趣的:(单细胞数据分析中future包的使用)