Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞转录组数据分析||Seurat并行策略

单细胞转录组数据分析||Seurat并行策略

作者头像
生信技能树jimmy
发布于 2020-06-23 06:45:05
发布于 2020-06-23 06:45:05
3.7K00
代码可运行
举报
文章被收录于专栏:单细胞天地单细胞天地
运行总次数:0
代码可运行

作者 | 周运来

随着单细胞技术的成熟,单细胞数据分析往往不再是单个组织样本,这有时候在计算(资源与时间)上是一个挑战。为此,Seurat也提供了可以探索的并行策略。鉴于入门单细胞数据分析的同事大多不是计算机出身,我们借助知乎的回答来解释一下什么是并行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。
所以我认为它们最关键的点就是:是否是『同时』。

作者:知乎用户
链接:https://www.zhihu.com/question/33515481/answer/58849148
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在数据分析过程中,比如我们计算差异基因,其实是单个基因的计算,一般是算完一个再算下一个,并行的意思就是同时计算,以节约时间。

在Seurat中,我们选择使用future的并行化框架。在本文中,我们将演示如何从用户的角度利用某些Seurat函数的future实现。如果您有兴趣了解更多关于future框架的内容,请参阅这个R包文档以获得全面和详细的描述。

如何使用呢?

要访问Seurat中的函数的并行版本,需要加载future的包并设置plan。该plan将指定如何执行该函数。默认行为是以非并行的方式(顺序地)计算的。为了实现并行(异步)行为,我们通常推荐“多进程”策略。默认情况下,这将使用所有可用的内核,但是您可以设置workers参数来限制并发的数量。

首先应该检查你的计算机系统是否支持R的并行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(future)
# check the current active plan
plan()

sequential:
- args: function (expr, envir = parent.frame(), substitute = TRUE, lazy = FALSE, seed = NULL, globals = TRUE, local = TRUE, earlySignal = FALSE, label = NULL, ...)
- tweaked: FALSE
- call: NULL
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# change the current plan to access parallelization
plan("multiprocess", workers = 4)
plan()

## multiprocess:
## - args: function (expr, envir = parent.frame(), substitute = TRUE, lazy = FALSE, seed = NULL, globals = TRUE, workers = 4, gc = FALSE, earlySignal = FALSE, label = NULL, ...)
## - tweaked: TRUE
## - call: plan("multiprocess", workers = 4)

‘Futurized’ functions in Seurat

再看看Seurat哪些函数可以使用并行。

编写以下函数是为了利用future的框架,如果当前plan设置正确,这些函数将被并行化。重要的是,调用函数的方式不变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NormalizeData
ScaleData
JackStraw
FindMarkers
FindIntegrationAnchors
FindClusters - if clustering over multiple resolutions

例如,要运行findmarker的并行版本,只需设置计划并像往常一样调用该函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(Seurat)
pbmc <- readRDS("../data/pbmc3k_final.rds")

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

并行的比较

在这里,我们将对具有并行化和不具有并行化的相同函数调用的运行时进行一个简短的比较。请注意,虽然我们预期使用并行化策略将减少上面列出的函数的运行时,但是这种减少的幅度将取决于许多因素(例如数据集的大小、工作人员的数量、系统的规格、未来的策略等)。下面的基准测试是在运行Ubuntu 16.04.5 LTS和Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz和96 GB RAM的桌面计算机上进行的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timing.comparisons <- data.frame(fxn = character(), time = numeric(), strategy = character())
plan("sequential")
start <- Sys.time()
pbmc <- ScaleData(pbmc, vars.to.regress = "percent.mt", verbose = FALSE)
end <- Sys.time()
timing.comparisons <- rbind(timing.comparisons, data.frame(fxn = "ScaleData", time = as.numeric(end - 
    start, units = "secs"), strategy = "sequential"))

start <- Sys.time()
markers <- FindMarkers(pbmc, ident.1 = "NK", verbose = FALSE)
end <- Sys.time()
timing.comparisons <- rbind(timing.comparisons, data.frame(fxn = "FindMarkers", time = as.numeric(end - 
    start, units = "secs"), strategy = "sequential"))

plan("multiprocess", workers = 4)
start <- Sys.time()
pbmc <- ScaleData(pbmc, vars.to.regress = "percent.mt", verbose = FALSE)
end <- Sys.time()
timing.comparisons <- rbind(timing.comparisons, data.frame(fxn = "ScaleData", time = as.numeric(end - 
    start, units = "secs"), strategy = "multiprocess"))

start <- Sys.time()
markers <- FindMarkers(pbmc, ident.1 = "NK", verbose = FALSE)
end <- Sys.time()
timing.comparisons <- rbind(timing.comparisons, data.frame(fxn = "FindMarkers", time = as.numeric(end - 
    start, units = "secs"), strategy = "multiprocess"))

来看看效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

FAQ

  • 我的进度条去哪了? 不幸的是,当以任何并行计划模式运行这些函数时,您将丢失进度条。这是由于一些技术限制在未来的框架和R一般。如果您想监视函数的进度,就需要放弃并行化,而使用plan(“sequential”)。
  • 如果我一直看到以下错误,我应该怎么做?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 ... 

或者某些函数,每个worker需要访问某些全局变量。如果这些值大于默认限制,您将看到此错误。要解决这个问题,可以设置选项(future.globals。maxSize = X),其中X是允许的最大大小(以字节为单位)。因此,要将其设置为1GB,需要运行options(future.globals。maxSize = 1000 * 1024^2)。请注意,这将增加您的RAM使用量,因此请谨慎地设置这个数字。

说到底Seurat不过是个R包,想要并行计算是要懂一些R里面并行原理的:由内而外释放R的力量||摘自《R大数据分析实用指南》。特别地,当我们在R中计算的中途突然发现某个任务报错说超出内存了,怎么办呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用更少的线程进行并行;
如果你的电脑内存非常小,有一个简单的方法确定你的最大使用线程:max cores = memory.limit() / memory.size();
将大量的并行分小部分进行;
在代码中多使用rm()删除没用的变量,使用gc()回收内存空间;

References

[1] 由内而外释放R的力量||摘自《R大数据分析实用指南》: https://www.jianshu.com/p/db95385b5340 [2] https://satijalab.org/seurat/v3.1/future_vignette.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Seurat4.0系列教程19:多线程并行策略
在Seurat,我们选择使用future框架进行并行。如果您有兴趣了解更多有关future框架的内容,请点击future[1]了解全面而详细的描述。
生信技能树jimmy
2022/01/10
2.3K0
Seurat4.0系列教程19:多线程并行策略
跟着大神学单细胞数据分析
这是 Tang Ming 大神分享的单细胞分析的seurat流程。今天我们来理一下大致的分析思路,当然里面好多细节的部分还需要自己下功夫慢慢研究。
生信技能树jimmy
2020/03/30
3.7K0
单细胞数据分析——ICITools使用流程
近期看了一些在植物上发表的单细胞的文章,大家在进行细胞分群注释之后,都会选择ICITools这个方法来对分群的结果进行验证,由于最近的人工鉴定分群的结果已经结束,为了确定分群结果的可靠性,我准备也选用文献的这个内容进行尝试,验证一下相关的结果。
小胡子刺猬的生信学习123
2022/07/09
5320
单细胞数据分析——ICITools使用流程
速度上吊打FindAllMarkers的单细胞亚群特异性高表达基因查询算法
但是, 最开始我们得到几十个单细胞亚群的时候,就需要对每个亚群找一下各自的单细胞亚群特异性高表达基因,通常是使用Seurat包的FindAllMarkers函数,这个函数的帮助文档写的是:Finds markers (differentially expressed genes) for each of the identity classes in a dataset ,默认使用 Wilcoxon Rank Sum test (default) 方法。
生信技能树
2022/06/08
7.2K0
速度上吊打FindAllMarkers的单细胞亚群特异性高表达基因查询算法
单细胞转录组之Seurat包全流程-数据过滤、降维分群及可视化
对于之前从CellRanger得到的比对结果,读取sample/outs/filtered_feature_bc_matrix文件夹下的三个文件:barcodes.tsv(1列,为barcode名);genes.tsv(2列,第1列为ENS编号,第2列为基因名);matrix.mtx(3列,第1列为基因编号,第2列为细胞编号,第3列为对应的reads数)
青青青山
2022/06/16
13.1K0
单细胞转录组之Seurat包全流程-数据过滤、降维分群及可视化
各个单细胞亚群特异性的转录因子热图
虽然转录因子分析作为单细胞转录组数据分析的3大高级分析之一名满天下,但是因为它太耗费计算资源导致绝大部分人敬而远之,我们其实也多次分享过细节教程:
生信技能树
2022/03/03
2.2K0
各个单细胞亚群特异性的转录因子热图
单细胞DEGs、markers、celltypes | 专辑完结篇
生物学重复的不同条件下的scrna-seq数据的差异基因表达分析 (https://www.10xgenomics.com/resources/analysis-guides/differential-gene-expression-analysis-in-scrna-seq-data-between-conditions-with-biological-replicates)
生信菜鸟团
2023/09/19
3.1K0
单细胞DEGs、markers、celltypes | 专辑完结篇
Seurat标准流程
前面介绍了自己利用cellranger count的结果进行seurat分析,但是整合数据方面做得还是不如原作者优秀,虽然我们不知道他们是如何处理的,但还是可以继续向下进行,而且这一次将会使用他们合并好的数据
生信技能树jimmy
2020/03/30
2.8K0
单细胞转录组3大R包之Seurat
牛津大学的Rahul Satija等开发的Seurat,最早公布在Nature biotechnology, 2015,文章是; Spatial reconstruction of single-cell gene expression data , 在2017年进行了非常大的改动,所以重新在biorxiv发表了文章在 Integrated analysis of single cell transcriptomic data across conditions, technologies, and spe
生信技能树
2018/03/09
23.3K0
单细胞转录组3大R包之Seurat
Seurat包的findmarkers函数只能根据划分好的亚群进行差异分析吗
虽然是免费的, 但是学员关于课程的提问,我还是会尽我所能帮忙的。当然,受限于时间和精力,只能是挑选重点和普适性的有价值的问题,比如其中一个问题是:
生信技能树jimmy
2020/04/28
17.5K0
整合单细胞和空转数据多种方法之R包semla
我注意到这个R包也提供了一个整合单细胞和空转数据的算法NNLS(https://ludvigla.github.io/semla/articles/cell_type_mapping_with_NNLS.html)。因此,本文对这个算法进行测试。
生信菜鸟团
2024/04/25
6150
整合单细胞和空转数据多种方法之R包semla
细胞亚群的生物学命名
也就是把四个时间点映射到上面的tsne坐标中,并且理论上应该是:每群细胞都覆盖到四个时间点
生信技能树jimmy
2020/03/30
2.2K0
跟着Seurat 官网学单细胞转录组分析
在大家进行了一段时间的R语言与Linux学习后,我们开启单细胞测序数据的学习。接下来的教程中,我们将以Seurat 分析框架 为基础,从数据预处理、聚类分析到可视化的完整流程,深入讲解如何从原始数据中提取有意义的生物学信息。
天意生信云
2025/01/22
1270
跟着Seurat 官网学单细胞转录组分析
Seurat 包图文详解 | 单细胞转录组(scRNA-seq)分析02
使用的示例数据集来自10X Genome 测序的 Peripheral Blood Mononuclear Cells (PBMC)。
白墨石
2021/01/13
3.4K0
Seurat 包图文详解 | 单细胞转录组(scRNA-seq)分析02
单细胞水平看生存分析相关基因
针对每个癌症的全部基因批量了做了单基因的cox分析,挑选统计学显著的去对应的癌症去打分,看看是否有单细胞亚群特异性。
凑齐六个字吧
2024/07/02
1500
单细胞水平看生存分析相关基因
STUtility || 空间转录组多样本分析框架(二)
我们在上一篇文章 STUtility || 空间转录组多样本分析框架(一)中演示了用STUtility分析空转多样本,主要是对空间信息和图像信息的分析,可以说凸显了空转应有的特性。在这里,我们将探讨:
生信技能树jimmy
2021/02/08
1.1K0
各个单细胞亚群的差异基因数量投射到umap图
我简单读了一下文章,其实就降维聚类分群后,每个单细胞亚群在两个分组简单的做一下差异分析,有多少个单细胞亚群就做多少次差异分析,差异分析的上下调基因数量就是umap图里面的每个细胞的颜色情况。
生信技能树jimmy
2022/06/13
2.9K0
各个单细胞亚群的差异基因数量投射到umap图
Python版SCENIC转录因子分析(四)一文就够了
在升级了pySCENIC后,发现转录因子数据库更新了。因此本文基于更新后的转录因子数据库,再次记录了从软件部署到pySCENIC的运行,最后进行可视化的详细笔记,希望对大家有所帮助,少走弯路。
生信技能树
2023/02/27
16.3K0
Python版SCENIC转录因子分析(四)一文就够了
你的服务器够快吗?一文说清如何衡量服务器的性能?
本文以一个标准的 Seurat 单细胞分析流程为例,深入探讨衡量计算性能的关键指标——运行时间(Elapsed Time)、CPU 时间(CPU Time)和等待时间(Wait Time)——揭示它们在单线程与多线程环境下的差异及其反映的系统瓶颈。提供可复现的 R 代码,大家可以评估自身服务器环境,理解并优化计算资源利用。
天意生信云
2025/04/22
1120
你的服务器够快吗?一文说清如何衡量服务器的性能?
多组cellchat细胞通讯批量分析
上面是之前我们分享的数据集处理过程,今天我们来看看如何进行cellchat分析:1.批量运行多组cellchat 2.比较两组cellchat结果
生信菜鸟团
2025/02/10
2330
多组cellchat细胞通讯批量分析
推荐阅读
相关推荐
Seurat4.0系列教程19:多线程并行策略
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验