Как разделить память на кластерной машине (qsub openmpi)

Приветствую всех!

У меня вопрос по разделению памяти в кластере. Я новичок в кластере и не могу решить свою проблему после нескольких недель попыток, поэтому я ищу здесь помощи, любое предложение будет признательно!

Я хочу использовать soapdenovo, программное обеспечение, которое использовалось для сборки генома человека, чтобы собрать мои данные. Однако это не удалось сделать за один шаг из-за нехватки памяти (на моей машине память 512 ГБ). Поэтому я обратился к кластерной машине (у которой три больших узла, каждый узел также имеет 512 памяти) и начал изучать задание отправки с помощью qsub. Учитывая, что один узел не мог решить мою проблему, я погуглил и обнаружил, что openmpi может помочь, но когда я запускал openmpi с демонстрационными данными, казалось, что команда запускалась только несколько раз. Затем я обнаружил, что нужно использовать openmpi, программное обеспечение должно включать библиотеку openmpi, и я не знал, поддерживает ли soapdenovo openmpi, я задал вопрос, но автор еще не дал мне ответа. Предположим, что soapdenovo поддерживает openmpi, как мне решить мою проблему. Если он не поддерживает openmpi, могу ли я использовать память в разных узлах для запуска программного обеспечения?

Проблема так мучила меня, спасибо за любую помощь. Ниже приводится то, что я сделал, и некоторая информация о кластерной машине:

  1. Установите openmpi и отправьте задание

1) Скрипт задания:

#!/bin/bash
#
#$ -cwd
#$ -j y
#$ -S /bin/bash
#

export PATH=/tools/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/tools/openmpi/lib:$LD_LIBRARY_PATH
soapPath="/tools/SOAPdenovo2/SOAPdenovo-63mer"
workPath="/NGS"
outputPath="assembly/soap/demo"
/tools/openmpi/bin/mpirun $soapPath all -s $workPath/$outputPath/config_file -K 23 -R -F -p 60 -V -o $workPath/$outputPath/graph_prefix > $workPath/$outputPath/ass.log 2> $workPath/$outputPath/ass.err

2) Отправьте задание:

qsub -pe orte 60 mpi.qsub

3) Лог в ass.err

а) судя по логу несколько раз запускал соапденово

cat ass.err | grep "Pregraph" | wc -l
60

б) подробная информация

less ass.err (it seemed it only run soapdenov several times, because when I run it in my machine, it would only output one Pregraph):


Version 2.04: released on July 13th, 2012
Compile Apr 27 2016     15:50:02

********************
Pregraph
********************

Parameters: pregraph -s /NGS/assembly/soap/demo/config_file -K 23 -p 16 -R -o /NGS/assembly/soap/demo/graph_prefix 

In /NGS/assembly/soap/demo/config_file, 1 lib(s), maximum read length 35, maximum name length 256.


Version 2.04: released on July 13th, 2012
Compile Apr 27 2016     15:50:02

********************
Pregraph
********************

and so on

c) информация стандартного ввода

cat ass.log:

--------------------------------------------------------------------------
WARNING: A process refused to die despite all the efforts!
This process may still be running and/or consuming resources.

Host: smp03
PID:  75035

--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that process rank 58 with PID 0 on node c0214.local exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------
  1. Информация о кластере:

1) qconf-sql

all.q
smp.q

2) qconf -spl

mpi
mpich
orte
zhongxm

3) qconf -sp zhongxm

pe_name            zhongxm
slots              999
user_lists         NONE
xuser_lists        NONE
start_proc_args    /bin/true
stop_proc_args     /bin/true
allocation_rule    $fill_up
control_slaves     TRUE
job_is_first_task  FALSE
urgency_slots      min
accounting_summary FALSE

4) qconf -sq smp.q

qname                 smp.q
hostlist              @smp.q
seq_no                0
load_thresholds       np_load_avg=1.75
suspend_thresholds    NONE
nsuspend              1
suspend_interval      00:05:00
priority              0
min_cpu_interval      00:05:00
processors            UNDEFINED
qtype                 BATCH INTERACTIVE
ckpt_list             NONE
pe_list               make zhongxm
rerun                 FALSE
slots                 1
tmpdir                /tmp
shell                 /bin/csh
prolog                NONE
epilog                NONE
shell_start_mode      posix_compliant
starter_method        NONE
suspend_method        NONE
resume_method         NONE
terminate_method      NONE
notify                00:00:60
owner_list            NONE
user_lists            NONE
xuser_lists           NONE
subordinate_list      NONE
complex_values        NONE
projects              NONE
xprojects             NONE
calendar              NONE
initial_state         default
s_rt                  INFINITY
h_rt                  INFINITY
s_cpu                 INFINITY
h_cpu                 INFINITY
s_fsize               INFINITY
h_fsize               INFINITY
s_data                INFINITY
h_data                INFINITY
s_stack               INFINITY
h_stack               INFINITY
s_core                INFINITY
h_core                INFINITY
s_rss                 INFINITY
h_rss                 INFINITY
s_vmem                INFINITY
h_vmem                INFINITY

5) qconf -sq all.q

qname                 all.q
hostlist              @allhosts
seq_no                0
load_thresholds       np_load_avg=1.75
suspend_thresholds    NONE
nsuspend              1
suspend_interval      00:05:00
priority              0
min_cpu_interval      00:05:00
processors            UNDEFINED
qtype                 BATCH INTERACTIVE
ckpt_list             NONE
pe_list               make zhongxm
rerun                 FALSE
slots                 16,[c0219.local=32]
tmpdir                /tmp
shell                 /bin/csh
prolog                NONE
epilog                NONE
shell_start_mode      posix_compliant
starter_method        NONE
suspend_method        NONE
resume_method         NONE
terminate_method      NONE
notify                00:00:60
owner_list            NONE
user_lists            mobile
xuser_lists           NONE
subordinate_list      NONE
complex_values        NONE
projects              NONE
xprojects             NONE
calendar              NONE
initial_state         default
s_rt                  INFINITY
h_rt                  INFINITY
s_cpu                 INFINITY
h_cpu                 INFINITY
s_fsize               INFINITY
h_fsize               INFINITY
s_data                INFINITY
h_data                INFINITY
s_stack               INFINITY
h_stack               INFINITY
s_core                INFINITY
h_core                INFINITY
s_rss                 INFINITY
h_rss                 INFINITY
s_vmem                INFINITY
h_vmem                INFINITY

person lam138138    schedule 12.06.2016    source источник
comment
lam, сделайте ldd /tools/SOAPdenovo2/SOAPdenovo-63mer (если это настоящий двоичный файл ELF), чтобы узнать, есть ли какой-либо libmpi, связанный с приложением. Для использования MPI приложение должно быть написано с использованием вызовов MPI и скомпилировано с вашей версией библиотеки MPI (OpenMPI, а не MPICH).   -  person osgx    schedule 12.06.2016


Ответы (2)


Согласно https://hpc.unt.edu/soapdenovo, программное обеспечение не поддерживает MPI:

Этот код НЕ скомпилирован с помощью MPI и должен использоваться только параллельно на ОДНОМ узле через многопоточную модель.

Таким образом, вы не можете просто запустить программное обеспечение с помощью mpiexec в кластере, чтобы получить доступ к большему количеству памяти. Машины кластера связаны некогерентными сетями (Ethernet, Infiniband), которые медленнее, чем шина памяти, а ПК в кластере не делят свою память. Кластеры используют библиотеки MPI (OpenMPI или MPICH) для работы с сетью, и все запросы между узлами являются явными: программа вызывает MPI_Send в одном процессе и MPI_Recv в другом. Существуют также односторонние вызовы, такие как MPI_Put/MPI_Get, для доступа к удаленной памяти (RDMA — удаленный прямой доступ к памяти), но это не то же самое, что локальная память.

person osgx    schedule 12.06.2016
comment
Привет, osgx, спасибо за ваш ответ, и у меня есть несколько новых вопросов, не могли бы вы мне помочь? - person lam138138; 13.06.2016

osgx, большое спасибо за ваш ответ и извините за задержку этого сообщения.

Поскольку я не специализируюсь на компьютерах, я думаю, что не очень хорошо понимаю некоторые словари, например, ELF. Итак, есть несколько новых вопросов, и я перечисляю свой вопрос следующим образом, спасибо за помощь:

1) Когда я «ldd SOAPdenovo-63mer», он выдал «не динамический исполняемый файл», означало ли это, что «код не соответствует MPI», о котором вы упомянули?

2) Короче не могу решить проблему с кластером, и надо искать машину с памятью больше 512G?

3) Кроме того, я использовал другое программное обеспечение под названием ALLPATHS-LG (http://www.broadinstitute.org/software/allpaths-lg/blog/), который также не удалось выполнить из-за нехватки памяти, и согласно FAQ C1 (http://www.broadinstitute.org/software/allpaths-lg/blog/?page_id=336), что "он использует распараллеливание совместно используемой памяти " означает ли это, что он может использовать память в кластере или только память в узле, и мне нужно найти машину с достаточным объемом памяти?

C1. Can I run ALLPATHS-LG on a cluster?
You can, but it will only use one machine, not the entire cluster.  That machine would need to have enough memory to fit the entire assembly. ALLPATHS-LG does not support distributed computing using MPI, instead it uses Shared Memory Parallelization.

Кстати, это первый раз, когда я публикую здесь, я думаю, что я должен использовать фиксацию для ответа, учитывая так много слов, я использую «Ответить на ваш вопрос».

person lam138138    schedule 13.06.2016
comment
1) это означает, что 63mer скорее всего скрипт, а ldd будет работать только для реального ELF файла приложения. 2) Да (или спросите у авторов SOAPdenovo напрямую или через список рассылки) 3) Да, использование одной машины связано с распараллеливанием потоков, а не с кластерными API, такими как MPI/PGAS. - person osgx; 13.06.2016
comment
Лам, как долго будет работать программа? Может быть и другой вариант расширения памяти, который значительно удлинит работу - добавить большой SSD-диск в качестве подкачки. Приложение сможет использовать больше памяти, но при рабочем наборе > 512 ГБ будет много медленных ошибок страниц (перекачка страницы наружу, подкачка страницы). SSD очень плох в записи, но всего в ~100-1000 раз хуже памяти в чтении. - person osgx; 13.06.2016
comment
lam, в случае короткого пробега вы также можете попробовать некоторые облачные серверы, но стоимость серверов с высокой памятью очень высока, и вы можете тратить сотни долларов в день со своей кредитной карты. Например, у AWS есть x1.32xlarge с ~2 ТБ памяти и ~15$ в час за аренду процессора по требованию. - person osgx; 13.06.2016
comment
Привет большое спасибо! Это около 4 дней этой программы, я думаю, что я должен искать облачные серверы или пытаться уменьшить свои данные. Кроме того, я пользуюсь программой vSMP (scalemp.com/products/vsmp-foundation). -бесплатно), что может помочь! Спасибо еще раз! - person lam138138; 13.06.2016
comment
lam, vSMP может эмулировать машину с большей памятью из кластерных машин, но: в бесплатной версии не более 1 ТБ ОЗУ (два узла по 0,5 ТБ ОЗУ); и между узлами все еще существует медленная сеть (обычно доступ к памяти дешевле, чем доступ к сети, даже с Infiniband), и доступ к памяти с другого узла, вероятно, будет обрабатываться как ошибка страницы (дополнительная стоимость прерывания и доступа к сети). - person osgx; 13.06.2016
comment
Привет, ОСГХ! Думаю, 800 ГБ ОЗУ мне будет достаточно, и 1) что означают два узла по 0,5 ТБ ОЗУ. Учитывая, что у меня есть три узла, каждый из которых имеет 512 ГБ памяти, могу ли я использовать vSMP для получения 1 ТБ ОЗУ? 2) Должен ли я быть пользователем root, чтобы использовать vSMP? 3) Я не знаю, как были соединены узлы, я думаю, что это будет Ethernet, и я не несу скорость, пока она может закончиться за две недели, так что вы думаете, что vSMP поможет? На самом деле, кластер, который я использовал, принадлежит другой школе, и администрация тоже занимается биологией, у нас мало знаний о кластере, мы очень благодарны за все, что вы помогли! - person lam138138; 13.06.2016
comment
Кроме того, я не могу найти настройку, которая отправляла бы мне электронное письмо, когда есть ответ, поэтому я просто обновляю веб-страницу, чтобы узнать, был ли у вас ответ, поэтому мой ответ может быть с некоторой задержкой...... - person lam138138; 13.06.2016
comment
lam, не два, а три больших узла, каждый узел тоже имеет 512 памяти, как вы сказали. Вы можете попробовать vSMP, но он будет работать только на некоторых поддерживаемых аппаратных средствах, а не на других. vSMP требует перезагрузки компьютеров в настраиваемый гипервизор, это не root-доступ, это должен быть физический доступ к узлам (свяжитесь с их персоналом, чтобы поэкспериментировать с vSMP). Чтобы получить информацию о соединениях, выполните команду lspci и найдите сетевые контроллеры (Mellanox для Infiniband). Можете ли вы разделить свою задачу на несколько более мелких задач, так будет удобнее? - person osgx; 13.06.2016
comment
Привет, ОСГХ! Я бы попробовал vSMP, может поможет. Жаль, что кластер курируется нами, и ни у кого нет больших знаний в компьютере, поэтому я должен попробовать сам....... Согласно меню SOAPdenovo и ALLPATHS-LG, я думаю, что это не мог разделить работу на несколько мелких работ. Когда введите lspci | grep -i network, это контроллер Ethernet: Intel Corporation I350 Gigabit Network Connection, так что это не будет Infiniband, я прав? - person lam138138; 13.06.2016