全基因组/全外显子dna序列中rna-seq、mirna-seq、chip-seq和变体调用的云优化初级分析管道

cirrus-ngs的Python项目详细描述


卷云

全基因组/全外显子组dna序列中rna-seq、mirna-seq、chip-seq和变体调用的云优化初级分析管道。

简介

大规模下一代测序数据的生物信息分析需要大量的计算资源。虽然云计算可以按需提供这种处理能力,但对大多数工作的生物学家来说,管理动态计算集群是一项艰巨的任务。为了解决这个难题,加州大学圣地亚哥分校计算生物学和生物信息学中心开发了Cirrus NGS,这是一个使用Amazon Web Services(AWS)进行通用NGS分析的交钥匙解决方案。

卷云ngs为rna-seq、mirna-seq、chip-seq和全基因组/全外显子组测序数据提供了初步分析管道。Cirrus用户不需要为这些管道安装任何生物信息学工具,因为所有计算都是使用AWS集群执行的,所有结果都上传到AWS的S3远程存储。集群是通过cirrus ngs动态创建的,它基于一个预先安装了所有必要软件的自定义机器映像。用户使用灵活但重量轻的Jupyter笔记本电脑从Web浏览器中管理群集和运行管道。

安装

获取AWS帐户

因为cirrus ngs使用aws进行计算和存储,所以用户必须拥有一个活动的aws帐户。如果您没有这样的帐户,请访问https://docs.aws.amazon.com/aws ec2/latest/userguide/get-set-up-for-amazon-ec2.html" rel="nofollow">https://docs.aws.amazon.com/awsec2/latest/userguide/get-set-up-for-amazon-ec2.html获取有关如何创建帐户的指导,并执行它描述的步骤。

安装PIP

pip可以按照https://pip.pypa.io/en/stable/installing/

安装conda

虽然cirrus ngs本身是通过github提供的,但其支持库最好通过跨平台的包管理器conda安装。如果尚未安装conda,请从以下链接下载相应的基于python-3.6的安装程序:

  • Linux:https://repo.continuum.io/miniconda/miniconda3-latest-linux-x86_64.sh" rel="nofollow">https://repo.continuum.io/miniconda/miniconda3-latest-linux-x86_64.sh
  • OSX:https://repo.continuum.io/miniconda/miniconda3-latest-macosx-x86_64.sh" rel="nofollow">https://repo.continuum.io/miniconda/miniconda3-latest-macosx-x86_64.sh

然后使用以下脚本运行安装程序,用上面下载的安装脚本的名称替换<;miniconda py3.sh>;

bash <miniconda_py3.sh> -b -p $HOME/miniconda3
echo "export PATH=\"$HOME/miniconda3/bin:\$PATH\"" >>$HOME/.bashrc
source $HOME/.bashrc	

安装卷云

Cirrus NGS可用于Linux-64或OSX-64平台,需要Python3.5或更高版本。

在要安装Cirrus NGS的目录中,运行以下命令:

conda install paramiko pyyaml git jupyter notebook
pip install scp cfncluster
git clone https://github.com/ucsd-ccbb/Cirrus-NGS.git

这些命令安装必要的支持库,并创建一个名为cirrus ngs的新目录来保存cirrus软件。

或者,可以使用pip和以下命令安装Cirrus NGS:

pip install cirrus-ngs

启动笔记本服务器

由于cirrus ngs接口是通过jupyter笔记本提供的,因此运行cirrus的第一步是启动本地jupyter笔记本服务器。从cirrus ngs目录中,运行:

cd notebooks/cirrus-ngs
jupyter notebook

您将收到一条消息,如

[I 10:48:39.779 NotebookApp] Serving notebooks from local directory: /Users/<YourName>/Cirrus-NGS/notebooks
[I 10:48:39.779 NotebookApp] 0 active kernels 
[I 10:48:39.779 NotebookApp] The Jupyter Notebook is running at: http://localhost:8889/?token=8dcb989e6852e3dfd679307470e17696c32771432c881573
[I 10:48:39.779 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

请注意服务器运行的URL。它通常是http://localhost:8888" rel="nofollow">http://localhost:8888,但如果您的系统已经在端口8888上运行了某些内容,则它可能是默认的,因此可能是其他内容(例如,在上面的示例中,它是http://loc主机:8889)。

在使用完Cirrus NGS之前,不要关闭Jupyter笔记本服务器或关闭它运行的终端窗口,因为它必须运行才能使Cirrus NGS笔记本正常工作。使用完Cirrus并准备关闭笔记本服务器后,只需在运行的终端窗口中键入control-c,然后按照提示进行操作。

运行卷云ngs

概述

用户首先定义一个计算集群。在此之后,sh/e决定要运行的管道,该管道确定所需的确切输入,然后(在电子表格程序或文本编辑器中)创建一个设计文件,指定输入排序数据的详细信息。他/她启动所选管道的jupyter笔记本,输入设计文件的路径和其他必需的输入(如aws凭据等),然后执行笔记本代码以开始管道处理。

该笔记本创建一个yaml文件,汇总所有用户输入,并将该文件传输到集群,在集群中,它指示集群本机代码以分布式方式顺序执行用户指定的分析步骤。在每个步骤完成后,输出被上传到用户指定的s3输出bucket,从中可以在任何点访问它。在处理过程中,用户可以从笔记本中检查管道运行的状态。

关于术语的说明:在整个过程中,术语"管道"用于描述分析一般类型测序(如rna序列或全基因组测序)的功能。每个流水线可以有多个更细粒度的"工作流",支持处理同一类型测序数据的不同方法;例如,rna-seq流水线包含四个不同的工作流(star-gatk、star-htseq、star-rsem和kallisto)。

收集所需输入

Cirrus NGS中的所有功能都需要以下信息:

  1. 您的aws帐户的aws访问密钥id
    • 请参见https://docs.aws.amazon.com/general/latest/gr/management-aws-access-keys.html" rel="nofollow">https://docs.aws.amazon.com/general/latest/gr/management aws access keys.html以查找现有的访问密钥或创建新的访问密钥)
  2. 您的AWS帐户的AWS密钥访问密钥(有关详细信息,请参见上面的链接)
  3. AWS帐户的有效密钥对(.pem)文件
    • 如果遇到"权限被拒绝(public key)"错误,请注意,必须设置对密钥(.pem)文件的权限,使其不是公共的,例如,在.pem文件所在的目录中运行chmod 0400<;mypemfilename>;.pem
    • 有关详细信息,请参见https://docs.aws.amazon.com/aws ec2/latest/userguide/ec2 key pairs.html having-ec2-create-your-key-pairs" rel="nofollow">https://docs.aws.amazon.com/awsec2/latest/userguide/ec2 key pairs.html having-ec2-create-your-key-pairs。

具体操作需要额外的输入,并在下面的相关章节中讨论。

定义群集

运行以下步骤以定义计算群集。然后,您可以使用该群集来执行所有卷云工作,而无需重新运行这些步骤(不过,如果需要,您也可以重新运行它们来创建其他群集)。

  1. 收集所需的设置信息;除了上述收集所需输入的值之外,您还需要:

    • 要在其中运行群集的AWS区域

      • 可用区域值的表显示在https://docs.aws.amazon.com/awsec2/latest/userguide/using regions availability zones.html concepts available regions" rel="nofollow">https://docs.aws.amazon.com/awsec2/latest/userguide/using regions availability zones.html概念可用区域。请注意,不同地区的计算费用不同,因此不要盲目选择。一般来说,您需要选择地理位置上离您最近的区域,该区域对于您希望运行的虚拟计算节点(称为"实例")具有可接受的价格(有关详细信息,请参见下文)。
    • 要用于群集主节点的实例类型

      • 只要集群处于活动状态,该节点就可以运行,并指导其他节点;由于它的中心角色,它将始终以AWS的标准"按需"定价运行。
      • 访问https://aws.amazon.com/ec2/pricing/on-demand/" rel="nofollow">https://aws.amazon.com/ec2/pricing/on-demand/并在"region"下拉框中选择与您相关的区域,以便查看该区域中可用实例类型的每小时价格。
      • 一般来说,主节点需要在至少有2个vcpu和至少8 gib内存的实例上运行(例如m4.large)。
    • 用于群集计算节点的实例类型

      • 这些节点被动态地添加到集群中并从集群中移除,以适应要求集群执行的计算量。
      • 一般来说,计算节点的cpu和内存容量需要大于或等于主节点的cpu和内存容量。
      • 这些节点以AWS的折扣"现货"价格运行(详见下文)。
    • 群集计算节点的现货价格

      • 如果aws在满足某一特定实例类型的所有按需请求后,已经剩余了该类型的容量,则它将以动态设置的更低价格出售剩余容量;您指定的"现货价格"是以美元表示的最大小时成本,您愿意为每个这样的实例付费(请参见https://aws.amazon.com/ec2/faqs/" rel="nofollow">https://aws.amazon.com/ec2/faqs/了解详细信息)。
      • 特定区域中特定实例类型的现行即期汇率根据需要不断变化。访问https://aws.amazon.com/ec2/spot/pricing/" rel="nofollow">https://aws.amazon.com/ec2/spot/pricing/(请记住为您选择正确的地区,如上所述!)查看您所在地区可用实例的当前现货价格。
      • 如果所选计算实例类型的当前即期汇率高于指定的即期汇率,则不会向您收取更多费用,但您的计算节点将在重新分配给其他用户时关闭,而不会发出警告。因此,明智的做法是选择一个代表您愿意支付的最高价格的现货价格,而不是低于投标价格。
    • 群集首次启动时的计算节点数

      • 如果您不知道需要多少,则默认情况下可以使用零。
    • 群集虚拟存储磁盘的大小(GiB)

    • 您的aws帐户的vpc(虚拟私有云)id

      • 如果您不知道vpc id,可以通过启动aws计算实例的过程找到它。按照https://docs.aws.amazon.com/awsec2/latest/userguide/launching-instance.html" rel="nofollow">https://docs.aws.amazon.com/awsec2/latest/userguide/launching-instance.html"中的说明进行操作,直到步骤6(在这些步骤中选择什么值并不重要,因为您不会需要实际启动实例)。第6步进入"配置实例详细信息"屏幕,您可以在其中找到您的VPC ID和子网ID(请参阅下一项):

      配置实例详细信息屏幕

    • AWS帐户的子网ID表示要在其中创建群集的区域(有关如何查找此值,请参见上文)

  2. 在浏览器中,访问Jupyter笔记本服务器运行的地址

    • 这通常是http://localhost:8888" rel="nofollow">http://localhost:8888,但有关更多详细信息,请参见启动笔记本服务器部分。
    • 您将看到所有Cirrus NGS笔记本的列表:

    Cirrus NGS笔记本列表

  3. 单击basiccfnclustersetup.ipynb笔记本启动它。

  4. 在笔记本的前两个单元格中填写参数,使用上面在相关的"收集所需输入"部分中确定的值。

  5. 运行笔记本。

运行管道

  1. 选择要运行的管道。

    • 卷云NGS目前为RNA序列、miRNA序列、芯片序列和全基因组/全外显子DNA序列中的变体调用提供管道。
  2. 为数据创建设计文件。

    • 设计文件是一个以制表符分隔的文本文件,有两列或三列(取决于所选的工作流),指定要处理的序列文件的名称和描述它们的必要元数据。
    • 有关设计文件格式的完整规范,请参见下面的"构建设计文件"部分。
  3. 收集所需的设置信息;除了上述收集所需输入的值之外,您还需要:

    • 已放置排序数据的现有aws s3远程存储桶的url。
      • 访问https://docs.aws.amazon.com/amazon s3/latest/gsg/getstartedwiths3.html" rel="nofollow">https://docs.aws.amazon.com/amazons3/latest/gsg/getstartedwiths3.html并执行"注册Amazon S3"和"创建Bucket"步骤(单击工作流图中的框详细说明)如果您还没有安装桶。
      • 要将序列文件放入bucket中,请按照"将对象添加到bucket"步骤的说明进行操作,或者使用启用了s3的传输客户端,如cyberduck
    • (可选)用于卷云NGS输出的第二个现有AWS S3远程存储桶的URL。
  4. 在浏览器中,访问Jupyter笔记本服务器运行的地址

    • 这通常是http://localhost:8888" rel="nofollow">http://localhost:8888,但有关更多详细信息,请参见启动笔记本服务器部分。
    • 您将看到所有Cirrus NGS笔记本的列表:

    Cirrus NGS笔记本列表

  5. 单击所选管道的相应笔记本启动它。

  6. 在笔记本的前两个单元格中填写参数,使用上面在相关的"收集所需输入"部分中确定的值。

  7. 运行笔记本。

  8. 管道处理完成后,从s3存储桶下载输出文件,以便在本地进行进一步分析。

      从你的bucket下载输出,按照"查看对象"步骤的说明操作,网址为https://docs.aws.amazon.com/amazon s3/latest/gsg/openinganobject.html" rel="nofollow">https://docs.aws.amazon.com/amazons3/latest/gsg/openinganobject.html或使用支持s3的传输客户端,如赛博鸭

创建设计文件

设计文件是cirrus ngs的主要用户输入。它是一个以制表符分隔的文本文件,指定要处理的序列文件的名称和描述它们的必要元数据。对于rna-seq和mirna-seq管道,它包含两列,而对于chip-seq和整个外显子/全基因组测序管道,它包含三列(其中前两列与两列格式相同)。设计文件没有标题行。

两列格式

在两列格式中,第一列是示例的文件名(扩展名为:例如fastq.gz),而第二列是与该示例关联的组的名称。(组名由用户决定,但通常设置为实验条件。例如,可以为所有控制样本指定一个名为"control"的组。

例如,两个名为mysample1mysample2的单端顺序示例的两列设计文件可能看起来像:

	mysample1.fastq.gz		groupA
	mysample2.fastq.gz		groupB

如果排序数据是成对结束的,则第一列包括正向排序文件的名称,后跟逗号,然后是反向排序文件的名称(请注意,这两个文件名之间必须有not空格--只有逗号!)一个两列设计文件的示例,用于名为mysample1mysample2的两对端排序示例,可能如下所示:

	mysample1_fwd.fastq.gz,mysample1_rev.fastq.gz		groupA
	mysample2_fwd.fastq.gz,mysample2_rev.fastq.gz		groupB

三列格式

三列格式的前两列与两列格式的前两列相同,但添加了第三列,其中包含管道特定标识符,用于区分芯片序列和全基因组/全外显子组测序管道的样本类型。

  • 对于chip seq流水线,每个样本被标识为chip或input。
  • 对于全基因组/全外显子组测序管道,每个样本被鉴定为肿瘤或正常。

以下约束适用于三列设计文件:

  • 样本类型标识符区分大小写

    • 例如,名为mysample1mysample2的两个成对端序芯片序列样本的三列设计文件可能看起来像
     mysample1_fwd.fastq.gz,mysample1_rev.fastq.gz		groupA		Chip
     mysample2_fwd.fastq.gz,mysample2_rev.fastq.gz		groupB		Input
    
  • 每个三列设计文件必须使用芯片和输入样本类型标识符正常和肿瘤样本类型标识符,但不能同时使用两者。

    • 因此,像下面的示例这样的设计文件将是无效的
     mysample1_fwd.fastq.gz,mysample1_rev.fastq.gz		badExample1		Chip
     mysample2_fwd.fastq.gz,mysample2_rev.fastq.gz		badExample1		Tumor
    
  • 每个组都必须有一个使用两个相关样本类型标识符中的每一个进行设计的样本。*因此,像下面的示例这样的设计文件将是无效的

    bash <miniconda_py3.sh> -b -p $HOME/miniconda3
    echo "export PATH=\"$HOME/miniconda3/bin:\$PATH\"" >>$HOME/.bashrc
    source $HOME/.bashrc	
    
    0
  • 如果两个样本被指定为构成芯片/输入或正常/肿瘤对,则它们必须具有相同的组。

    • 因此,像下面的示例这样的设计文件将是无效的:
    bash <miniconda_py3.sh> -b -p $HOME/miniconda3
    echo "export PATH=\"$HOME/miniconda3/bin:\$PATH\"" >>$HOME/.bashrc
    source $HOME/.bashrc	
    
    1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
请求响应模式的java JMS   java如何从SeleniumWebDriver中的“Span Type下拉列表”中选择值   java JPA相当于Hibernate的@Generated(GenerationTime.ALWAYS)   java ActiveMQ查询:如何启动   java如何在jsp文件中使用freemarker标记库?   java如何在TabsLayout中用另一个片段替换一个片段的内容?   国际化如何理解Java教程国际化定制资源包加载示例?   XML配置中的java spring log4j无法为日志信息创建文件   oracle11g JDK 6:有没有办法运行一个新的java进程来执行指定类的主方法   java在avro模式中使用“default”   缺陷跟踪我在哪里可以提交关于FOSS Java Sound实施组织的缺陷报告。类路径。冰岛。pulseaudio。Pulseaudiosourcedaline?   编码Java系统。在和系统中。Sun/Oracle和IBM JVM解决方案在读写标准字节数组方面存在差异   java如何将列表项作为查询参数添加到字符串url中?   将自定义库导出到可导入jar文件java