Enabling Grids for E-sciencE Специальные типы заданий в ППО gLite Н. Клопов (Петербургский Институт Ядерной Физики РАН) www.eu-egee.org Simple job submission Enabling Grids for E-sciencE JDL- описание задания [ Type = “Job”; #Default JobType = “Normal”; #Default Executable = “test.sh”; StdOutput = “std.out”; StdError = “std.err”; InputSandbox = {“test.sh”,”inpdt”}; OutputSandbox = {“std.out”,”std.err”,”outdt”}; Requirements=RegExp(“*.cern*.*,other.GlueCEUniqueID) &&(Member(“POVRAY-3.5”, other.GlueHostApplicationSoftwareRunTimeEnvironment)) Network server •glite-job-submit <jdl> •glite-job-status <id> •glite-job-output <id> •glite-job-cancel <id> WMProxy •glite-wms-job-submit <jdl> •glite-wms-job-status <id> •glite-wms-job-output <id> •glite-wms-job-cancel <id> ] 2 WMProxy Enabling Grids for E-sciencE • WMProxy (Workload Manager Proxy) – это новый сервис, обеспечивающий доступ к gLite Workload Management System (WMS) через интерфейс Web Services. – был разработан для обеспечения обработки большого числа одновременных запросов на запуск задач: gLite 1.5 => ~180 secs for 500 jobs цель => ~60 secs for 1000 jobs – обеспечивает такие новые возможности как bulk submission и разделяемые и компрессируемые InputSandboxes. – предполагается в дальнейшем полностью перейти на WMProxy 3 ‘Scattered’ Input Sandboxes Enabling Grids for E-sciencE • Input Sandbox can contain – адреса локальных файлов на UI – URI указывающие на файлы на удаленных gridFTP/HTTPS серверах InputSandbox = { "gsiftp://neo.datamat.it:2811/var/prg/sim.exe", "https://ghemon.cnaf.infn.it:8443/data/idat_1", "file:///home/pacio/myconf“ }; • Может быть определен базовый URI, относящийся ко всем файлам из InputSandbox (кроме локальных) InputSandboxBaseURI = "gsiftp://matrix.datamat.it:2811/var"; • Только локальные файлы (file://) передаются на WMS • Удаленные файлы загружаются на WN скритом JobWrapper сразу перед стартом задачи 5 ‘Scattered’ Output Sandboxes Enabling Grids for E-sciencE • В JDL были добавлены новые атрибуты для спецификации места назначения выходных файлов в OutputSandbox OutputSandbox = { "jobOutput", "run1/event1", "jobError“ }; OutputSandboxDestURI = { "gsiftp://matrix.datamat.it/var/jobOutput", "https://grid003.ct.infn.it:8443/home/cms/event1", "jobError" }; • Можно определить базовый URI для всех файлов из Sandbox OutputSandboxBaseDestURI = "gsiftp://neo.datamat.it/home/run1/"; • Файлы будут копироваться после завершения задачи скриптом JobWrapper на место назначения без передачи их на WMS нод 6 Enabling Grids for E-sciencE Request types Job (default) Type= DAG (set of subjobs) Collection (set of subjobs)- WMProxy Job types Normal (default) Interactive JobType= MPICH Parametric (set of subjobs)- WMProxy Checkpointable Partitionable (set of subjobs)-WMProxy 7 DAG job Enabling Grids for E-sciencE •DAG - Directed Acyclic Graph 8 DAG job Enabling Grids for E-sciencE DAG (Directed Acyclic Graph)– это набор задач, где ввод, вывод или выполнение одних задач может зависить от других Зависимости представляются графом, где нодами являются задачи, а ребра определяют зависимости Зависимости не могут быть циклическими (Acyclic Graph) DAG в целом (как и его ноды) получает уникальный ID, который может использоваться для управления (cancel, get status, get output) nodeA nodeB nodeC NodeF nodeD 9 DAG job Enabling Grids for E-sciencE 10 DAG job Enabling Grids for E-sciencE [ ] type = "dag"; VirtualOrganisation = “ATLAS"; max_running_nodes = 4; Requirements=other.GlueCEInfoTotalCPUs>2; InputSandbox = ... nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ file ="nodes/nodeC.jdl" ; ]; nodeD = [file ="nodes/nodeD.jdl";]; dependencies = { {nodeA, nodeB},{nodeA, nodeC}, { {nodeB,nodeC}, nodeD } }; ]; DAG job : иерархия в jdl структуре Набор JDL атрибутов, описывающих DAG в целом и которые могут наследоваться нодами 11 DAG job Enabling Grids for E-sciencE [ type = "dag"; VirtualOrganisation = “ATLAS"; max_running_nodes = 4; nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ file ="nodes/nodeC.jdl" ; ]; nodeD = [ file ="nodes/nodeD.jdl"; ]; dependencies = { {nodeA, nodeB}, {nodeA, nodeC}, { {nodeB,nodeC}, nodeD } }; ]; ] DAG job : иерархия в jdl структуре Атрибут Nodes содержит описание всех нодов DAG и на том же уровне атрибут dependencies определяющий все зависимости между нодами. 12 DAG job Enabling Grids for E-sciencE [ type = "dag"; VirtualOrganisation = “ATLAS"; max_running_nodes = 4; nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ file ="nodes/nodeC.jdl" ; ]; nodeD = [ file ="nodes/nodeD.jdl"; ]; dependencies = { {nodeA, nodeB}, {nodeA, nodeC}, { {nodeB,nodeC}, nodeD } }; ]; ] DAG job : иерархия в jdl структуре Набор атрибутов (имена пределяются пользователем), каждый из которых относится к конкретному ноду и содержит его JDLописание 13 DAG job Enabling Grids for E-sciencE [ type = "dag"; VirtualOrganisation = “ATLAS"; max_running_nodes = 4; nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ description = [ JobType = "Normal"; Executable = "b.exe"; Arguments = "1 2 3"; InputSandbox={“b.exe”}; OutputSandbox = {"myoutput.txt“}; ]; ]; Описание нода может быть сделано здесь (description атрибут), вместо использования отдельного файла .. .. .. .. .. .. .. .. ] 14 DAG job: dependencies Enabling Grids for E-sciencE [ type = "dag"; VirtualOrganisation = “ATLAS"; max_nodes_running = 4; nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ file ="nodes/nodeC.jdl" ; ]; nodeD = [ file ="nodes/nodeD.jdl"; ]; dependencies = { {nodeA, nodeB}, {nodeA, nodeC}, { {nodeB,nodeC}, nodeD } }; ]; ] { nodeA, nodeB } means that nodeB cannot start before nodeA has completed its execution successfully { nodeA, nodeC } means that nodeC cannot start before nodeA has completed its execution successfully { { nodeB, nodeC}, nodeD } is equivalent to: – { nodeB, nodeD }, – { nodeC, nodeD } 15 DAG job Enabling Grids for E-sciencE [ type = "dag"; VirtualOrganisation = “ATLAS"; max_running_nodes = 4; nodes = [ nodeA = [ file ="nodes/nodeA.jdl" ; ]; nodeB = [ file ="nodes/nodeB.jdl" ; ]; nodeC = [ file ="nodes/nodeC.jdl" ; ]; nodeD = [ file ="nodes/nodeD.jdl"; ]; dependencies = { {nodeA, nodeB}, {nodeA, nodeC}, { {nodeB,nodeC}, nodeD } }; ]; ] max_running_nodes атрибутinteger >0 представляющее максимальное число нодов DAG, которое может быть запущено DAGMan в данное время. Напр., max_running_nodes=4 Это означает, что если в определенный момент есть N свободных от зависимости нодов, только 4 из них будет запущено. Default: 10 16 DAG: InputSandbox Enabling Grids for E-sciencE Все ноды, которые не содержат InputSandbox атрибут в своем описании, наследуют его значение от корневого InputSandbox атрибута DAG. Ноды, представляющие задачи без входных данных, должны содержать в своем описании пустой InputSandbox: InputSandbox = {}; В описании нода допускается делать ссылки на корневые атрибуты DAG или атрибуты другого нода. InputSandbox={root.InputSandbox, “file:///home/data/myfile.txt"}; 17 DAG: InputSandbox Enabling Grids for E-sciencE •InputSandbox файл как выходной файл из другого нода: nodeA=[ description=[ OutputSandbox={"gsiftp://neo.datamat.it:5432/tmp/a.dat“, …}; ……………. nodeB=[ description=[ InputSandbox={root.nodes.nodeA.description.OutputSandbox[0], …} ……………. 18 DAG job : OutputSandbox Enabling Grids for E-sciencE JDL описание DAG не может содержать OutputSandbox атрибута в корневой секции, а только в JDL описании нодов. OutputSandbox DAGа в целом рассматривается как сумма всех output sandboxes нодов. Когда glite-wms-job-output команда выдается для DAG ID, она запрашивает выходные файлы всех нодов, но сохраняет их в разных поддиректориях, соответствующих разным нодам. Это позволяет избежать перезаписи файлов с одинаковыми именами, которые относятся к разным нодам. Имена поддиректорий соответствуют именам нодов. 19 DAG job: get status Enabling Grids for E-sciencE > glite-wms-job-status <DAG ID> BOOKKEEPING INFORMATION: Status info for the Job : https://glite-rb.ct.infn.it:9000/GujM4PRwXLl1bAxiM37EZw Current Status: Running Status Reason: unavailable Destination: dagman Submitted: Sun Jul 16 21:46:07 2006 CEST ************************************************************* Nodes information: Status info for the Job : https://glite-rb.ct.infn.it:9000/E5ROK_BY3LzmpAGATayZ2g Node Name: nodeA Current Status: Scheduled Status Reason: Job successfully submitted to Globus Destination: grid-ce.bio.dist.unige.it:2119/jobmanager-lcgpbs-short Submitted: Sun Jul 16 21:46:07 2006 CEST ************************************************************* Status info for the Job : https://glite-rb.ct.infn.it:9000/5x0lRXgCg4nnw8duk7K5ew Node Name: nodeB Current Status: Submitted … … … … … … … … … … … … … … … … … ... 20 Job collection Enabling Grids for E-sciencE Job Collection (wmproxy submission) 21 Job Collection Enabling Grids for E-sciencE • Job collection- это набор независимых задач, который пользователь может запустить и мониторировать одним запросом • Задачи из Job collection запускаются как DAG ноды без зависимостей (dependencies) • JDL для описания Job collection: [ Type = "collection"; ................................................................. nodes = { [ <job descr 1 >], [ <job descr 2 >], … }; ] 22 Job collection example Enabling Grids for E-sciencE [ ] type = "collection"; InputSandbox = {"date.sh"}; All nodes will share RetryCount = 0; nodes = { this Input Sandbox [ file ="jobs/job1.jdl" ; ], [ [ NodeName = “job2”; Executable = "/bin/sh"; Arguments = "date.sh"; Stdoutput = "date.out"; StdError = "date.err"; OutputSandbox ={"date.out", "date.err"}; ] ], [ file ="jobs/job3.jdl" ; ] }; 23 Job collection via command Enabling Grids for E-sciencE • Набор независимых задач может быть запущен в gLite с использованием нового параметра –collection в команде glite-wms-job-submit: glite-wms-job-submit –collection <dirpath> ……. Эта опция позволяет определить путь до директории, которая содержит JDL файлы независимых задач, составляющих требуемую коллекцию. Команда glite-wms-job-submit сама создаст соответствующий JDL с типом Type=collection и запустит задание в gLite. 24 Parametric Job Enabling Grids for E-sciencE Parametric Job 25 Parametric Job Enabling Grids for E-sciencE • Parametric job- это задание, где один или более ее атрибутов параметризируемы и для каждого значения параметра создается отдельная задача [ JobType = "Parametric"; Executable = "/bin/sh"; Arguments = "md5.sh input_PARAM_.txt"; InputSandbox = {"md5.sh", "input_PARAM_.txt"}; StdOutput = "out_PARAM_.txt"; StdError = "err_PARAM_.txt"; Parameters = 10000; ParameterStart = 1000; ParameterStep = 100; OutputSandbox={"out_PARAM_.txt","err_PARAM_.txt"}; ] • Мониторирование и управление заданием производится через уникальный ID всего задания 26 Parametric Job Enabling Grids for E-sciencE Запуск такого JDL приведет к генерации N задач, где N = (Parameters – ParameterStart)/ParameterStep [ JobType = "Parametric"; Executable = "/bin/sh"; Arguments = "md5.sh input_PARAM_.txt"; InputSandbox = {"md5.sh", "input_PARAM_.txt"}; StdOutput = "out_PARAM_.txt"; StdError = "err_PARAM_.txt"; Parameters = 10000; ParameterStart = 1000; ParameterStep = 100; OutputSandbox ={"out_PARAM_.txt","err_PARAM_.txt"}; ] • Задача получает присвоенное ей значение параметра через переменную окружения (environment) ParamenterValue, которая устанавливается скриптом JobWrapper перед запуском задачи. 27 Parametric Job Enabling Grids for E-sciencE • Parameter может быть списком строк • InputSandbox (если есть) должен быть согласован с параметрами [ui-test] > cat param2.jdl [ JobType = "Parametric"; Executable = “/bin/cat"; Arguments = “input_PARAM_.txt”; InputSandbox = "input_PARAM_.txt"; StdOutput = "myoutput_PARAM_.txt"; StdError = "myerror_PARAM_.txt"; Parameters = {EARTH,MOON,MARS}; OutputSandbox = {“myoutput_PARAM_.txt”}; ] [ui-test] > ls inputEARTH.txt inputMARS.txt inputMOON.txt param2.jdl 28 NodesCollocation attribute Enabling Grids for E-sciencE The NodesCollocation attribute is a Boolean attribute. When set to true, i.e. NodesCollocation = true; makes the WMS submit all the instances of the parametric job to the same CE selected performing the matchmaking based on the Requirements and Rank expression specified in the JDL. – The NodesCollocation attribute is not mandatory. If not specified in the JDL it is assumed to be set to false. 29 Interactive job Enabling Grids for E-sciencE Interactive job 30 Interactive job Enabling Grids for E-sciencE • Это задача, стандартный ввод/выод которой перенаправляется на UI в real time. Pipe IN Process UI Listener Process Pipe Out Process X window or std no-gui 31 Interactive Jobs Enabling Grids for E-sciencE • Специфицируется установкой JobType = “Interactive” в JDL • Когда interactive job запускается, открывается окно для stdin, stdout, stderr потоков 32 MPI job Enabling Grids for E-sciencE Введение в MPI 33 MPI job Enabling Grids for E-sciencE • Возможность выполнения параллельных задач является важным требованием к GRID инфраструктуре • Наиболее используемая библиотека для поддержки параллельных задач является MPI (Message Passing Interface) • В настоящее время параллельные задачи могут выполняться только на одном Computing Elements (CE) • несколько различных проектов, касающихся возможности выполнения параллельных задач на WNs разных Ces, находятся сейчас в стадии разработки. 34 MPI job Enabling Grids for E-sciencE •Для того, чтобы MPI задача могла выполняться, должны быть выполнены следующие условия: •MPICH software должно быть установлено на каждом из WNs CE. •некоторые MPI приложения требуют разделяемую файловую систему среди WNs, на которых приложение будет выполняться. –Переменная VO_<name_of_VO>_SW_DIR будет содержать имя директории вслучае SHARED filesystem. –Переменная VO_<name_of_VO>_SW_DIR будет содержать “.” если NO SHARED filesystem. 35 MPI job Enabling Grids for E-sciencE • С точки зрения клиента, задачи, которые должны выполняться как MPI, специфицируются установкой JDL JobType атрибута в MPICH, а также NodeNumber атрибута. Например: … JobType = “MPICH”; NodeNumber = 4; … This attribute defines the required number of CPUs needed for the application 36 MPI job Enabling Grids for E-sciencE • Когда эти два атрибута включаются в JDL, User Interface (UI) автоматически добавляет следующее выражение в JDL Requirements атрибут, чтобы определить те ресурсы (CE), на которых приложение может выполняться: (other.GlueCEInfoTotalCPUs >= NodeNumber) && Member (“MPICH”,other.GlueHostApplicationSoftwareRunTimeEnvironment) 37 Checkpontable job Enabling Grids for E-sciencE Checkpointable job 38 Logical Checkpointable Jobs Enabling Grids for E-sciencE • Это задача, котороя может быть разбита на несколько шагов • На каждом шаге состояние задачи может быть сохранено в LB и восстановлено позже в случае сбоя • Задача может начать свое выполнение с сохраненного ранее состояния A B C D JOB’S START JOB’S END STEP 1 STEP 2 STEP 3 STEP 4 39 Checkpointable Jobs: JDL Structure Enabling Grids for E-sciencE • • • • • • • JobType = “checkpointable”; Executable = “…”; JobSteps = “list int | list string”; CurrentStep = “int > = 0”; Argument = “…”; Requirements = “…”; Rank = “”; Mandatory Mandatory Mandatory Mandatory Optional Optional Optional 40 Partitionable job Enabling Grids for E-sciencE Partitionable job 41 Partitionable job Enabling Grids for E-sciencE Цель- подзадания с одним и тем же исполняемым файлом, который требуется выполнить многократно с различными входными данными. JobType=“partitionable”; JobSteps={“st0",“st1", … “st10"}; CurrentStep=0; Executable=“hand.exe ... ... ... ... ... ... Prejob=[ ... ... ... ... ... ... ]; Postjob=[ JobType=checkpointable; ... ... ... ... ... ... ]; 42 Enabling Grids for E-sciencE Questions 43 Enabling Grids for E-sciencE 44