About QosCosGrid (QCG)
QosCosGrid (QCG) is a two-layer architecture which is able to deal with computationally intensive, large-scale, complex and parallel simulations that require multiple computational sites. QosCosGrid is able to combine resources from different administrative domains into a single powerful machine and is tightly integrated with commonly used tools for parallel and multiscale simulations (e.g., OpenMPI, ProActive and more recently MUSCLE) using advance reservation and co-allocation features.
Currently, QosCosGrid supports a wide range of development frameworks and programming models relevant for multiscale application developers, QosCosGrid gives the ability to work across heterogeneous computing sites and hides the complexity of underlying e-Infrastructures by simplifying many complex deployment, advance reservation and access procedures.
More information available at: http://www.qoscosgrid.org
QosCosGrid tutorial
Running SimpleExample with QosCosGrid services #
- Initialize QCG environment:
[mschoolXX@grass1 ~]$ module load qcg-client/mapper
- Generate proxy (the private key is protected using the same password as your shell account):
[mschoolXX@grass1 ~]$ grid-proxy-init Your identity: /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 Enter GRID pass phrase for this identity: Creating proxy ...................................... Done
- Look at the example JobProfile (a QCG-Broker job description file)
vim /opt/app/mapper/qcg/SimpleExample/simple-mavrino-grass.xml
- In this file you specify:
<topology> <processes processesId="r"> <processesCount> <value>1</value> </processesCount> <candidateHosts> <hostName>mavrino.chem.ucl.ac.uk</hostName> </candidateHosts> </processes> <processes processesId="w"> <processesCount> <value>1</value> </processesCount> <candidateHosts> <hostName>grass1.man.poznan.pl</hostName> </candidateHosts> </processes> </topology>b) The first argument of the muscle application must be the CxA file name:
<arguments> <value>SimpleExample.cxa.rb</value> </arguments>c) One must specify how to stage the CxA file to the remote clusters (in this case the file is taken from examples directory located at grass1):
<stageInOut> <file name="SimpleExample.cxa.rb" type="in"> <location type="URL">gsiftp://grass1.man.poznan.pl///opt/app/mapper/qcg/SimpleExample /SimpleExample.cxa.rb</location> </file> </stageInOut>d) Also where to put output stdout and stderr files (we want to store the files in our home directory, using QCG Job ID as suffix for the file names):
<stdout> <directory> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stdout-${JOB_ID}</location> </directory> </stdout> <stderr> <directory> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stderr-${JOB_ID}</location> </directory> </stderr>e) And finally the execution duration of the experiment:
<executionTime> <executionDuration>P0Y0M0DT0H10M</executionDuration> </executionTime>
- Start the QCG-Broker client in -console mode
[mschoolXX@grass1 ~]$ qcg-client -console https://elder11.man.poznan.pl:8443/qcg/services/ /C=PL/O=GRID/O=PSNC/CN=qcg-broker/qcg-broker.man.poznan.pl UserDN = /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 ProxyLifetime = 0 Days 11 Hours 11 Minutes 51 Seconds qcg>
- You are ready to submit a job:
qcg> submit_job /opt/app/mapper/qcg/SimpleExample/simple-mavrino-grass.xml jobId = J1327856866253_MAPPER_5637
- After job is submitted you can query about it status:
qcg> task_info J1327856866253_MAPPER_5637 muscle TaskType: MAPPER SubmissionTime: Sun Jan 29 18:07:46 CET 2012 FinishTime: ProxyLifetime: PT0S Status: RUNNING StatusDesc: ScheduledTime: Sun Jan 29 18:08:00 CET 2012 - Sun Jan 29 18:19:00 CET 2012 StartTime: Sun Jan 29 18:07:56 CET 2012 Allocation: UserDN: /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 HostName: grass1.man.poznan.pl ProcessesCount: 1 ProcessesGroupId: w Status: RUNNING StatusDescription: SubmissionTime: Sun Jan 29 18:07:54 CET 2012 FinishTime: LocalSubmissionTime: Sun Jan 29 18:07:55 CET 2012 LocalStartTime: Sun Jan 29 18:08:06 CET 2012 LocalFinishTime: Allocation: UserDN: /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 HostName: mavrino.chem.ucl.ac.uk ProcessesCount: 1 ProcessesGroupId: r Status: RUNNING StatusDescription: SubmissionTime: Sun Jan 29 18:07:54 CET 2012 FinishTime: LocalSubmissionTime: Sun Jan 29 18:07:58 CET 2012 LocalStartTime: Sun Jan 29 18:08:08 CET 2012 LocalFinishTime:
- you can use $$ as the alias for the last submitted job id
qcg> task_info $$ muscle Command translated to: task_info J1327856866253_MAPPER_5637 muscle TaskType: MAPPER SubmissionTime: Sun Jan 29 18:07:46 CET 2012 FinishTime: Sun Jan 29 18:08:59 CET 2012 ProxyLifetime: PT0S Status: FINISHED StatusDesc: ScheduledTime: Sun Jan 29 18:08:00 CET 2012 - Sun Jan 29 18:19:00 CET 2012 StartTime: Sun Jan 29 18:07:56 CET 2012 Allocation: UserDN: /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 HostName: grass1.man.poznan.pl ProcessesCount: 1 ProcessesGroupId: w Status: FINISHED StatusDescription: SubmissionTime: Sun Jan 29 18:07:54 CET 2012 FinishTime: Sun Jan 29 18:08:32 CET 2012 LocalSubmissionTime: Sun Jan 29 18:07:55 CET 2012 LocalStartTime: Sun Jan 29 18:08:06 CET 2012 LocalFinishTime: Sun Jan 29 18:08:32 CET 2012 Allocation: UserDN: /O=Grid/OU=MAPPER/OU=simpleCA-MAPPER/OU=man.poznan.pl/CN=mschool01 HostName: mavrino.chem.ucl.ac.uk ProcessesCount: 1 ProcessesGroupId: r Status: FINISHED StatusDescription: SubmissionTime: Sun Jan 29 18:07:54 CET 2012 FinishTime: Sun Jan 29 18:08:58 CET 2012 LocalSubmissionTime: Sun Jan 29 18:07:58 CET 2012 LocalStartTime: Sun Jan 29 18:08:08 CET 2012 LocalFinishTime: Sun Jan 29 18:08:56 CET 2012
- The job is finished. You are now ready to quit the qcg-client and read the output of the application:
qcg> quit BYE ... [mschool01@grass1 ~]$ cat stdout-J1327856866253_MAPPER_5637/stdoutmavrino.chem.ucl.ac.uk_1 ... got: 0.0 got: 1.0 got: 2.0 got: 3.0 got: 4.0 got: 0.0 got: 1.0 got: 2.0 got: 3.0 got: 4.0 ...
- Complete QCG-Broker client manual can be found here
Running Canals Application with QosCosGrid services #
- In this example we define a workflow job that is composed of 3 tasks:
- muscle - a task that describe muscle simulation coallocated between two clusters
- render-images - a task depended on the muscle task that generates png images based on simulation data
- render-video - a task that generates video from images generated by render-images task
<qcgJob appId="MAPPER" xmlns:jxb="[http://java.sun.com/xml/ns/jaxb"] xmlns:xsi="[http://www.w3.org/2001/] XMLSchema-instance"> <task persistent="true" taskId="muscle"> <requirements> <topology> <processes processesId="SW1D_1B_001:SW1D_2B_005:SW1D_1B_011"> <processesCount> <value>1</value> </processesCount> <candidateHosts> <hostName>mavrino.chem.ucl.ac.uk</hostName> </candidateHosts> </processes> <processes processesId="LinearGate1B_021:SpillWay_015"> <processesCount> <value>1</value> </processesCount> <candidateHosts> <hostName>grass1.man.poznan.pl</hostName> </candidateHosts> </processes> </topology> </requirements> <execution type="mapper"> <executable> <application name="muscle"/> </executable> <arguments> <value>Canals.cxa.rb</value> </arguments> <stdout> <directory> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stdout-${JOB_ID}</location> </directory> </stdout> <stderr> <directory> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stderr-${JOB_ID}</location> </directory> </stderr> <stageInOut> <file name="Canals.cxa.rb" type="in"> <location type="URL">gsiftp://grass1.man.poznan.pl///opt/app/mapper/qcg/Canals /Canals.cxa.rb</location> </file> <directory name="outputs" type="out"> <location type="URL">gsiftp://grass1.man.poznan.pl/~/canals-output</location> </directory> </stageInOut> </execution> <executionTime> <executionDuration>P0Y0M0DT0H10M</executionDuration> </executionTime> </task> <task persistent="true" taskId="render-images"> <execution type="single"> <executable> <application name="CanalRenderer"/> </executable> <arguments> <value>canals-outputs</value> <value>canals-images</value> </arguments> <stdout> <file> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stdout-${JOB_ID}</location> </file> </stdout> <stderr> <file> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stderr-${JOB_ID}</location> </file> </stderr> <stageInOut> <directory name="canals-outputs" type="in"> <location type="URL">gsiftp://grass1.man.poznan.pl/~/canals-output.images</location> </directory> <directory name="canals-images" type="out"> <location type="URL">gsiftp://grass1.man.poznan.pl/~/canals-images.images</location> </directory> </stageInOut> </execution> <workflow> <parent triggerState="FINISHED">muscle</parent> </workflow> </task> <task persistent="true" taskId="render-video"> <execution type="single"> <executable> <application name="Mencoder"/> </executable> <arguments> <value>mf://canals-images/*.png</value> <value>-mf</value> <value>w=800:h=600:fps=25:type=png</value> <value>-ovc</value> <value>lavc</value> <value>-lavcopts</value> <value>vcodec=mpeg4:mbd=2:trell</value> <value>-oac</value> <value>copy</value> <value>-o</value> <value>canals.avi</value> </arguments> <stdout> <file> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stdout-${JOB_ID}.video</location> </file> </stdout> <stderr> <file> <location type="URL">gsiftp://grass1.man.poznan.pl/~/stderr-${JOB_ID}.video</location> </file> </stderr> <stageInOut> <directory name="canals-images" type="in"> <location type="URL">gsiftp://grass1.man.poznan.pl/~/canals-images</location> </directory> <file name="canals.avi" type="out"> <location type="URL">gsiftp://grass1.man.poznan.pl/~/canals.avi</location> </file> </stageInOut> </execution> <workflow> <parent triggerState="FINISHED">render-images</parent> </workflow> </task> </qcgJob>
- Submit the Canal workflow:
qcg> submit_job /opt/app/mapper/qcg/Canals/canals-mavrino-grass-workflow.xml jobId = J1327864110619_MAPPER_5509
- You can easily monitor the execution of the worklflow by using the task_statuses command:
qcg> tasks_statuses $$ Command translated to: tasks_statuses J1327864110619_MAPPER_5509 Number of tasks: 3 Tasks statuses: muscle : RUNNING render-video : UNSUBMITTED render-images : UNSUBMITTED ------ SUMMARY -------- Number of tasks: 3 UNSUBMITTED : 2 RUNNING : 1
- In the end you can view the canals.avi movie that was uploaded into your home directory.