В этом примере показано, как можно использовать один компьютер, многоядерный компьютер или кластер компьютеров для предварительной обработки большого набора сигналов масс-спектрометрии. Примечание.Для последней части этого примера необходимы Parallel Computing Toolbox™ и MATLAB ® Parallel Server™.
В этом примере показаны необходимые шаги для настройки пакетной операции над группой масс-спектров, содержащихся в одном или нескольких каталогах. Этого можно добиться последовательно или параллельно с помощью многоядерного компьютера или кластера компьютеров. Пакетная обработка адаптируется к однопрограммной модели параллельных вычислений с несколькими данными (SPMD) и лучше всего подходит для Parallel Computing Toolbox™ и MATLAB ® Parallel Server™.
Сигналы для предварительной обработки поступают от белковых лазерных спектров с повышенной десорбцией/временем ионизации (SELDI-TOF). Данные в этом примере получены из банка данных программы клинической протеомики FDA-NCI. В частности, в примере используется набор данных о раке яичников с высоким разрешением, который был получен с использованием массива белков WCX2. Подробное описание этого набора данных см. в разделах [1] и [2].
В этом примере предполагается, что наборы данных загружены и распакованы в репозитории. В идеале следует поместить наборы данных на сетевой диск. Если все сотрудники имеют доступ к одним и тем же дискам в сети, они могут получить доступ к необходимым данным, находящимся на этих общих ресурсах. Это предпочтительный способ совместного использования данных, поскольку он минимизирует сетевой трафик.
Сначала введите имя и полный путь к хранилищу данных. Определены две строки: путь от локального компьютера к репозиторию и путь, необходимый компьютерам кластера для доступа к одному и тому же каталогу. Измените оба параметра в соответствии с конфигурацией сети.
local_repository = 'C:/Examples/MassSpecRepository/OvarianCD_PostQAQC/'; worker_repository = 'L:/Examples/MassSpecRepository/OvarianCD_PostQAQC/';
В данном примере файлы хранятся в двух подкаталогах: «Normal» и «Cancer». Можно создать списки, содержащие файлы для обработки, используя DIR команда,
cancerFiles = dir([local_repository 'Cancer/*.txt']) normalFiles = dir([local_repository 'Normal/*.txt'])
cancerFiles =
121×1 struct array with fields:
name
folder
date
bytes
isdir
datenum
normalFiles =
95×1 struct array with fields:
name
folder
date
bytes
isdir
datenum
и поместить их в одну переменную:
files = [ strcat('Cancer/',{cancerFiles.name}) ... strcat('Normal/',{normalFiles.name})]; N = numel(files) % total number of files
N = 216
Перед попыткой параллельной обработки всех файлов необходимо проверить алгоритмы локально с помощью цикла for.
Запишите функцию с последовательным набором команд, которые необходимо применить к каждому набору данных. Входными аргументами являются путь к данным (в зависимости от того, как их видит машина, которая будет фактически выполнять работу) и список файлов для обработки. Выходными аргументами являются предварительно обработанные сигналы и M/Z вектор. Так как вектор M/Z одинаков для каждой спектрограммы после предварительной обработки, его нужно хранить только один раз. Например:
type msbatchprocessing
function [MZ,Y] = msbatchprocessing(repository,files)
% MSBATCHPROCESSING Example function for BIODISTCOMPDEMO
%
% [MZ,Y] = MSBATCHPROCESSING(REPOSITORY,FILES) Preprocesses the
% spectrogram in files FILES and returns the mass/charge (MZ) and ion
% intensities (Y) vectors.
%
% Hard-coded parameters in the preprocessing steps have been adjusted to
% deal with the high-resolution spectrograms of the example.
% Copyright 2004-2012 The MathWorks, Inc.
K = numel(files);
Y = zeros(15000,K); % need to preset the size of Y for memory performance
MZ = zeros(15000,1);
parfor k = 1:K
file = [repository files{k}];
% read the two-column text file with mass-charge and intensity values
fid = fopen(file,'r');
ftext = textscan(fid, '%f%f');
fclose(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 вместо FOR. Пакетная обработка обычно реализуется задачами, не зависящими между итерациями. В таком случае заявление FOR может быть равнодушно изменено на PARFORсоздание последовательности инструкций (или программ) MATLAB ®, которые могут выполняться на последовательном компьютере, многоядерном компьютере или кластере компьютеров без необходимости их изменения. В этом случае цикл выполняется последовательно, поскольку вы не создали параллельный пул (при условии, что в настройках Toolbox™ параллельных вычислений флажок для автоматического создания параллельного пула не установлен, в противном случае MATLAB будет выполняться параллельно в любом случае). Для целей примера только 20 спектрограмм предварительно обрабатываются и хранятся в Y матрица. Вы можете измерить время, необходимое MATLAB ® для завершения цикла, используя TIC и TOC команды.
tic repository = local_repository; K = 20; % change to N to do all [MZ,Y] = msbatchprocessing(repository,files(1:K)); disp(sprintf('Sequential time for %d spectrograms: %f seconds',K,toc))
Sequential time for 20 spectrograms: 7.725275 seconds
При наличии Toolbox™ параллельных вычислений можно использовать локальных работников для параллелизма итераций цикла. Например, если локальный компьютер имеет четыре ядра, можно запустить параллельный пул с четырьмя работниками, используя профиль кластера по умолчанию «local»:
POOL = parpool('local',4); tic repository = local_repository; K = 20; % change to N to do all [MZ,Y] = msbatchprocessing(repository,files(1:K)); disp(sprintf('Parallel time with four local workers for %d spectrograms: %f seconds',K,toc))
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 4). Parallel time with four local workers for 20 spectrograms: 3.549382 seconds
Остановить локальный рабочий пул:
delete(POOL)
Если у вас есть Parallel Computing Toolbox™ и MATLAB ® Parallel Server™ вы также можете распределить итерации цикла на большее количество компьютеров. В этом примере профиль кластера «compbio _ config _ 01» связан с 6 работниками. Сведения о настройке и выборе параллельных конфигураций см. в разделе «Профили кластера и масштабирование вычислений» в документации по Toolbox™ параллельных вычислений.
Следует отметить, что если была создана собственная функция пакетной обработки, ее следует включить в соответствующий профиль кластера с помощью диспетчера профилей кластера. Это гарантирует, что MATLAB ® правильно передаст новую функцию работникам. Доступ к диспетчеру профилей кластера осуществляется с помощью выпадающего меню Parallel на рабочем столе MATLAB ®.
POOL = parpool('compbio_config_01',6); tic repository = worker_repository; K = 20; % change to N to do all [MZ,Y] = msbatchprocessing(repository,files(1:K)); disp(sprintf('Parallel time with 6 remote workers for %d spectrograms: %f seconds',K,toc))
Starting parallel pool (parpool) using the 'compbio_config_01' profile ... Connected to the parallel pool (number of workers: 6). Parallel time with 6 remote workers for 20 spectrograms: 3.541660 seconds
Остановите пул кластеров:
delete(POOL)
Описанные выше схемы выполнения работают синхронно, то есть блокируют командную строку MATLAB ® до завершения их выполнения. Если требуется запустить пакетное задание процесса и получить доступ к командной строке во время асинхронного выполнения вычислений, можно вручную распределить параллельные задачи и собрать результаты позже. В этом примере используется тот же профиль кластера, что и ранее.
Создать одно задание с одной задачей (MSBATCHPROCESSING). Задача выполняется одним из работников и его внутренним PARFOR цикл распределяется между всеми доступными рабочими в параллельной конфигурации. Обратите внимание, что если N (количество спектрограмм) намного больше, чем количество доступных работников в параллельной конфигурации, Parallel Computing Toolbox™ автоматически балансирует рабочую нагрузку, даже если у вас разнородный кластер.
tic % start the clock repository = worker_repository; K = N; % do all spectrograms CLUSTER = parcluster('compbio_config_01'); JOB = createCommunicatingJob(CLUSTER,'NumWorkersRange',[6 6]); TASK = createTask(JOB,@msbatchprocessing,2,{repository,files(1:K)}); submit(JOB)
После отправки задания локальная подсказка MATLAB ® немедленно возвращается. Параллельное задание запускается, как только становятся доступными параллельные ресурсы. Между тем, вы можете контролировать параллельное задание, проверяя TASK или JOB объекты. Используйте WAIT чтобы программно дождаться завершения задачи:
wait(TASK) TASK.OutputArguments
ans =
1×2 cell array
{15000×1 double} {15000×216 double}
MZ = TASK.OutputArguments{1};
Y = TASK.OutputArguments{2};
destroy(JOB) % done retrieving the results
disp(sprintf('Parallel time (asynchronous) with 6 remote workers for %d spectrograms: %f seconds',K,toc))
Parallel time (asynchronous) with 6 remote workers for 216 spectrograms: 68.368132 seconds
После сбора всех данных их можно использовать локально. Например, можно применить нормализацию группы:
Y = msnorm(MZ,Y,'QUANTILE',0.5,'LIMITS',[3500 11000],'MAX',50);
Создайте вектор группирования с типом для каждой спектрограммы, а также векторы индексирования. Эта «маркировка» поможет провести дальнейший анализ набора данных.
grp = [repmat({'Cancer'},size(cancerFiles));...
repmat({'Normal'},size(normalFiles))];
cancerIdx = find(strcmp(grp,'Cancer'));
numel(cancerIdx) % number of files in the "Cancer" subdirectory
ans = 121
normalIdx = find(strcmp(grp,'Normal')); numel(normalIdx) % number of files in the "Normal" subdirectory
ans =
95
После того как данные помечены, можно отобразить некоторые спектрограммы каждого класса с использованием различных цветов (первые пять из каждой группы в этом примере).
h = plot(MZ,Y(:,cancerIdx(1:5)),'b',MZ,Y(:,normalIdx(1:5)),'r'); axis([7650 8200 -2 50]) xlabel('Mass/Charge (M/Z)');ylabel('Relative Intensity') legend(h([1 end]),{'Ovarian Cancer','Control'}) title('Region of the pre-processed spectrograms')

Сохраните предварительно обработанный набор данных, поскольку он будет использоваться в примерах Идентификация значимых признаков и классификация профилей белков и поиск генетических алгоритмов для признаков в данных масс-спектрометрии.
save OvarianCancerQAQCdataset.mat Y MZ grp
TIC - TOC время представлено здесь в качестве примера. Время последовательного и параллельного выполнения зависит от используемого оборудования.
[1] Conrads, T P, V A Fusaro, S Ross, D Johann, V Rajapakse, B A Hitt, S M Steinberg, et al. «Сывороточные протеомные особенности высокого разрешения для обнаружения рака яичников». Эндокринный рак, июнь 2004, 163-78.
[2] Petricoin, Emanuel F, Ali M Ardekani, Ben A Hitt, Peter J Levine, Vincent A Fusaro, Seth M Steinberg, Gordon B Mills, et al. «Использование протеомных паттернов в сыворотке для выявления рака яичников». Ланцет 359, № 9306 (февраль 2002): 572-77.
msalign | msbackadj | mslowess | msnorm | msresample