主要内容

利用序贯并行计算的光谱批处理

这个例子展示了如何使用一台计算机、多核计算机或一组计算机来预处理大量的质谱信号。注意:本示例的最后一部分需要并行计算工具箱™和MATLAB®并行服务器™。

简介

本例显示了在一个或多个目录中包含的一组质谱上建立批处理操作所需的步骤。您可以使用多核计算机或计算机集群按顺序或并行地实现此目标。批处理适应于单程序多数据(SPMD)并行计算模型,最适合于parallel computing Toolbox™和MATLAB®parallel Server™。

用于预处理的信号来自蛋白质表面增强激光解吸/电离飞行时间(SELDI-TOF)质谱。本例中的数据来自FDA-NCI临床蛋白质组学项目数据库.特别地,该示例使用了使用WCX2蛋白阵列生成的高分辨率卵巢癌数据集。该数据集的详细描述请参见[1]和[2]。

设置数据存储库

本例假设您已经下载数据集并将其解压缩到存储库中。理想情况下,您应该将数据集放在网络驱动器中。如果工作者都可以访问网络上相同的驱动器,那么他们就可以访问驻留在这些共享资源上的所需数据。这是共享数据的首选方法,因为它最大限度地减少了网络流量。

首先,获取数据存储库的名称和完整路径。定义了两个字符串:从本地计算机到存储库的路径和集群计算机访问同一目录所需的路径。根据您的网络配置更改两者。

local_repository =“C: / / MassSpecRepository / OvarianCD_PostQAQC /的例子;worker_repository =L: / / MassSpecRepository / OvarianCD_PostQAQC /例子'

对于这个特殊的例子,文件存储在两个子目录中:“Normal”和“Cancer”。属性可以创建包含要处理的文件的列表DIR命令,

cancerFiles = dir([local_repository . exe“癌症/ * . txt”) normalFiles = dir([local_repository .“正常/ * . txt”])
normalFiles = 95×1 struct array with fields: name folder date bytes isdir datenum

然后把它们放到一个变量里:

文件= [strcat(“癌症/”, {cancerFiles.name})...strcat (“正常/ ', {normalFiles.name}));N = numel(文件)文件总数的%
N = 216

顺序批处理

在尝试并行处理所有文件之前,需要使用for循环在本地测试算法。

编写一个带有顺序指令集的函数,该指令集需要应用于每个数据集。输入参数是数据的路径(取决于实际执行工作的机器如何查看它们)和要处理的文件列表。输出参数为预处理后的信号和M/Z向量。因为预处理后的每个谱图的M/Z向量都是相同的,所以只需要存储一次。例如:

类型msbatchprocessing
BIODISTCOMPDEMO % % [MZ,Y] = msbatchprocessing(repository,files)的示例函数预处理files中的%谱图,并返回质量/电荷(MZ)和离子%强度(Y)向量。预处理步骤中的硬编码参数已被调整,以处理示例的高分辨率光谱图。版权所有:The MathWorks, Inc.K = numel(文件);Y = 0 (15000,K);%需要预设Y的大小为内存性能MZ = 0 (15000,1);parfor k = 1: k文件=[存储库文件{k}];%读取质量电荷和强度值为两列的文本文件fid = fopen(文件,'r');Ftext = textscan(fid, '%f%f');文件关闭(fid); signal = ftext{1}; intensity = ftext{2}; % resample the signal to 15000 points between 2000 and 11900 mzout = (sqrt(2000)+(0:(15000-1))'*diff(sqrt([2000,11900]))/15000).^2; [mz,YR] = msresample(signal,intensity,mzout); % align the spectrograms to two good reference peaks P = [3883.766 7766.166]; YA = msalign(mz,YR,P,'WIDTH',2); % estimate and adjust the background YB = msbackadj(mz,YA,'STEP',50,'WINDOW',50); % reduce the noise using a nonparametric filter Y(:,k) = mslowess(mz,YB,'SPAN',5); % the mass/charge vector is the same for all spectra after the resample if k==1 MZ(:,k) = mz; end end

函数内部的注意事项MSBATCHPROCESSING故意使用PARFOR而不是.批处理通常由迭代之间独立的任务实现。在这种情况下,声明可以无所谓地变成PARFOR,创建了一系列MATLAB®语句(或程序),可以在顺序计算机、多核计算机或计算机集群上无缝运行,而无需修改。在这种情况下,循环将按顺序执行,因为您还没有创建并行池(假设在并行计算工具箱™首选项中,自动创建并行池的复选框未选中,否则MATLAB将并行执行)。举例来说,只有20个光谱图被预处理并存储在Y矩阵。函数可以测量MATLAB®完成循环所需的时间抽搐而且TOC命令。

Tic存储库= local_repository;K = 20;%更改为N以完成所有操作[MZ,Y] = msbatchprocessing(存储库,文件(1:K));disp (sprintf (%d谱图的连续时间:%f秒, K, toc))
20张谱图的连续时间:7.725275秒

多核计算机并行批处理

如果您有Parallel Computing Toolbox™,您可以使用本地工作者来并行化循环迭代。例如,如果你的本地机器有四个核,你可以使用默认的“本地”集群配置文件启动一个有四个worker的并行池:

POOL = parpool(“本地”4);Tic存储库= local_repository;K = 20;%更改为N以完成所有操作[MZ,Y] = msbatchprocessing(存储库,文件(1:K));disp (sprintf (与四名当地工作人员进行%d个频谱图的平行时间:%f秒, K, toc))
使用“本地”配置文件启动并行池(parpool)…连接并行池(工人人数:4人),与当地4名工人并行时间为3.549382秒,20个频谱图

停止本地工作池:

删除(池)

分布式计算并行批处理

如果您有并行计算工具箱™和MATLAB®并行服务器™,您还可以将循环迭代分发到更多数量的计算机上。在本例中,集群概要文件'compbio_config_01'链接到6个工作人员。有关设置和选择并行配置的信息,请参阅并行计算工具箱™文档中的“集群配置文件和计算扩展”。

注意,如果您已经编写了自己的批处理函数,则应该使用cluster profile Manager将其包含在相应的集群概要文件中。这将确保MATLAB®正确地将您的新函数传输给工作程序。您可以使用MATLAB®桌面上的并行下拉菜单访问集群配置文件管理器。

POOL = parpool(“compbio_config_01”6);Tic存储库= worker_repository;K = 20;%更改为N以完成所有操作[MZ,Y] = msbatchprocessing(存储库,文件(1:K));disp (sprintf (与6名远程工作人员进行%d个频谱图的并行时间:%f秒, K, toc))
使用'compbio_config_01'配置文件启动并行池(parpool)…连接到并行池(工人人数:6人)。与6个远程工人并行时间为3.541660秒,20个频谱图

停止集群池:

删除(池)

异步并行批处理

上面描述的执行方案都是同步操作的,也就是说,它们阻塞MATLAB®命令行,直到它们的执行完成。如果希望启动批处理作业并在计算异步运行(async)时访问命令行,则可以手动分发并行任务并稍后收集结果。本例使用与前面相同的集群概要文件。

用一个任务创建一个作业(MSBATCHPROCESSING).该任务在其中一个worker上运行,并在其内部运行PARFOR在并行配置中,循环被分配给所有可用的工作线程。注意,如果N(谱图的数量)远远大于并行配置中的可用工作人员的数量,并行计算工具箱™自动平衡工作负载,即使您有一个异构集群。

抽搐%开始计时存储库= worker_repository;K = n;%做所有的谱图CLUSTER = parcluster(“compbio_config_01”);JOB = create ecommunatingjob (CLUSTER,“NumWorkersRange”6 [6]);TASK = createTask(JOB,@msbatchprocessing,2,{存储库,文件(1:K)});提交(工作)

当作业提交时,本地MATLAB®提示符立即返回。一旦并行资源可用,您的并行作业就开始了。与此同时,可以通过检查任务工作对象。使用等待方法以编程方式等待任务完成:

等待(任务)的任务。OutputArguments
Ans = 1×2单元格数组{15000×1 double} {15000×216 double}
MZ = TASK.OutputArguments{1};Y = TASK.OutputArguments{2};破坏(工作)%已完成检索结果disp (sprintf (并行时间(异步)与6个远程工作人员进行%d频谱图:%f秒, K, toc))
并行时间(异步)与6个远程工作人员进行216个频谱图:68.368132秒

后处理

收集完所有数据后,即可在本地使用。例如,你可以应用组归一化:

Y = msnorm(MZ,Y,分位数的, 0.5,“限制”(3500 11000),“马克斯”, 50);

为每个谱图创建一个类型的分组向量以及索引向量。这种“标记”将有助于对数据集进行进一步分析。

GRP = [repmat({“癌症”},大小(cancerFiles));...repmat ({“正常”},大小(normalFiles));cancerIdx = find(strcmp(grp,“癌症”));元素个数(cancerIdx)“Cancer”子目录中的文件数量%
Ans = 121
normalIdx = find(strcmp(grp,“正常”));元素个数(normalIdx)Normal子目录下的文件数%
Ans = 95

一旦数据被标记,您可以使用不同的颜色显示每个类别的一些光谱图(本例中每个组的前五个)。

h = plot(MZ,Y(:,cancerIdx(1:5)),“b”MZ, Y (:, normalIdx (1:5)),“r”);轴([7650 8200 -2 50])xlabel(“质量/电荷(M / Z)”); ylabel (的相对强度) legend(h([1 end]),{卵巢癌的“控制”})标题(“预处理谱图区域”

保存预处理过的数据集,因为它将在示例中使用识别蛋白质的重要特征和分类而且质谱数据特征的遗传算法搜索

保存OvarianCancerQAQCdataset.matYMZgrp

免责声明

抽搐-TOC这里以计时为例。顺序和并行执行时间将根据所使用的硬件而有所不同。

参考文献

[1]Conrads, T P, V A Fusaro, S Ross, D Johann, V Rajapakse, B A Hitt, S M Steinberg等,“用于卵巢癌检测的高分辨率血清蛋白质组学特征”。内分泌相关癌症,2004,6,163-78。

[2]Petricoin, Emanuel F, Ali M Ardekani, Ben A Hitt, Peter J Levine, Vincent A Fusaro, Seth M Steinberg, Gordon B Mills等,“利用血清蛋白质组学模式识别卵巢癌”。《柳叶刀》359,没有。9306(2002年2月):572-77。

另请参阅

||||