QCG-SimpleClient oferuje prosty, wzorowany na poleceniech systemu kolejkowego, interfejs do infrastruktury QCG.
Polecenia
- qcg-cancel - anulowanie zadania
- qcg-clean - usunięcie katalogu roboczego zadnia
- qcg-connect - interaktywne "podłączenie" się do działającego zadania
- qcg-info - wyświetlenie szczegółowej informacji o danym zadaniu
- qcg-interactive - zlecenie zadania interaktywnego
- qcg-list - wyświetlenie listy zleconych zadań wraz z informacjami o nich
- qcg-peek - podgląd wyjścia (stdout, stderr) aplikacji
- qcg-proxy - utworzenie certyfikatu proxy użytkownika
- qcg-rcancel - anulowanie rezerwacji
- qcg-refetch - ponowne skopiowanie plików wynikowych zadania
- qcg-reserve - rezerwacja zasobów
- qcg-rinfo - wyświetlenie szczegółowej informacji o rezerwacji
- qcg-rlist - wyświetlenie listy rezerwacji wraz z informacjami o nich
qcg-sub - zlecenie zadania do wykonania na infrastrukturze QCG zgodnie z uproszczonym opisem
Składnia poleceń
qcg-sub
qcg-list
qcg-list czas_jednostka [stan,[stan]]
Wyświetlenie listy zleconych zadań wraz z informacjami o nich.
czas_jednostka - Opcjonalnie można podać z jakiego czasu mają być zadania - z ostatnich „liczba” dni („d”), godzin („h”), minut („m”).
stan - Drugim opcjonalnym parametrem jest lista stanów zadań oddzielonych przecinkami (bez spacji). W przypadku niepodania stanów wyświetlane są zadania niezakończone.
qcg-list
qcg-list 7d
qcg-list 1m
qcg-list 7d finished
qcg-list 1m finished,failed
Dla wygody użytkowników zamiast listy stanów możliwe jest podanie zdefiniowanych stałych:
- all - zadania we wszystkich stanach,
- terminated - zadania zakończone,
- unterminated - zadania niezakończone.
qcg-list 7d all
qcg-list 7d terminated
qcg-list 7d unterminated
qcg-info
qcg-info jobId pokaz_opis
Wyświetlenie szczegółowej informacji o danym zadaniu.
jobId - identyfikator eksperymentu.
pokaz_opis- Jeśli pokaz_opis ma wartość „true” to dodatkowo wyświetlany jest opis zadnia. Domyślną wartością jest „false”.
qcg-info J1331196390748_date_3099 true
qcg-peek
gcg-peek jobId liczba_znaków
Podgląd wyjścia (stdout, stderr) aplikacji.
jobId - identyfikator eksperymentu,
liczba_znaków- liczba znaków do wyświetlenia,
qcg-peek J1331196390748_date_3099
qcg-peek J1331196390748_date_3099 10
qcg-proxy
qcg-proxy
Utworzenie certyfikatu proxy użytkownika.
qcg-cancel
qcg-cancel jobId
Anulowanie zadania.
jobId - identyfikator eksperymentu
qcg-cancel J1331196390748_date_3099
qcg-clean
qcg-clean jobId
Usunięcie katalogu roboczego zadnia.
jobId - identyfikator eksperymentu
qcg-clean J1331196390748_date_3099
qcg-interactive
qcg-interactive plik_z_opisem
Zlecenie zadania interaktywnego.
plik_z_opisem - ścieżka do pliku z uproszczonym opisem zadania
qcg-interactive /home/piontek/tasks/bash.qcg
qcg-interactive ./tasks/bash.qcg
Korzystając z polecenia qcg-interactive można zlecić wykonanie dowolnej interaktywnej tekstowej aplikacji.
Szczególnie częstym i użytecznym przypadkiem jest interaktywne uruchomienie konsoli poleceń umożliwiające np. kompilację oprogramowani na klastrze, do którego nie ma dostępu poprzez SSH.
W opisie zadania dla interaktywnego uruchomienia konsoli poleceń wystarczy podać nazwę klastra, na którym ma sie uruchomić konsola oraz podać scieżkę do preferowanego interpretera poleceń (np. bash).
#QCG host=inula.man.poznan.pl
/bin/bash
W opisie zadania interaktywnego można korzystać również z innych dyrektyw QCG celem podania np. wymagań zasobowych dla zadania interaktywnego.
qcg-connect
qcg-connetct jobId
Utworzenie z klienta QCG interaktywnej sesji w katalogu roboczym danego zadania
jobId - identyfikator eksperymentu
qcg-connect J1331196390748_date_3099
qcg-refetch
qcg-refetch jobId
Ponowne skopiowanie plików wynikowych zadania.
jobId - identyfikator eksperymentu
qcg-refetch J1331196390748_date_3099
Zlecany plik jest plikiem tekstowym, który może zawierać dyrektywy infrastruktury QCG.
Dyrektywą jest każda linia zaczynająca się od ”#QCG”.
Lista dyrektyw
application
- application - nazwa aplikacji do uruchomienia.
argument
- argument - argument aplikacji w przypadku użycia dyrektywy „executable” lub „application”. Argument może wystąpić wielokrotnie. Każdy argument powinien być przekazany w osobnej dyrektywie. Argumenty do aplikacji przekazywane są w kolejności ich wystąpienia w pliku opisu
#QCG argument=arg1
#QCG argument=arg2
deadline
- deadline - dyrektywa umożliwiająca zdefiniowanie, że zadanie ma być wykonane „w czasie nie dłuższym niż”. Dyrektywa wymusza użycie mechanizmu rezerwacji zasobów z wyprzedzeniem. Nie może być użyta równocześnie z dyrektywą „reservation”. Argumentem dyrektywy jest przedział czasu w formacie PnYnMnDTnHnMnS (ISO 8601) gdzie:
- P - obowiązkowy znak rozpoczynający definicję okresu,
- nY - liczba lat,
- nM - liczba miesięcy,
- nD - liczba dni,
- T - separator czasu (musi być obecny, jeśli zdefiniowane są poniższe wartości)
- nH - liczba godzin,
- nM - liczba minut,
- nS - liczba sekund.
W przypadku nie podania dyrektywy „not_before” system próbuje dokonać rezerwacji zasobów od aktualnej chwili. Dyrektywa wyklucza równoczesne użycie „not_after”.
#QCG not-before=2012.07.25
#QCG deadline=P3DT12H
environment
- environment - ustawianie zmiennych środowiskowych. Składnia „nazwa → wartość”. Każda zmienna musli być ustawiana w osobnej linii.
#QCG environment=name -> piontek
#QCG environment=location -> poznan
error
executable
- executable - lokalizacja pliku do uruchomienia. Lokalizacja może być lokalizacją gsiftp lub ścieżką do pliku. W tym drugim przypadku przyjmuje się, że jest ustalana względem katalogu, z którego zlecone zostało zadanie. Opcjonalnie możliwe jest podanie nazwy pod jaką ma być zapisany plik wykonywalny. W przypadku braku nazwy zapisywany jest pod oryginalna nazwą.
#QCG executable=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/executables/exec1
#QCG executable=executables/exec1
#QCG executable=executables/exec1 -> exec-file
grant
- grant - nazwa grantu, w ramach którego ma być wykonane zadanie.
#QCG grant=plgpiontek_grant
host
- host - nazwa maszyny na której może być uruchomione zadanie. Może być wiele takich dyrektyw dla alternatywnych maszyn.
#QCG host=reef.man.poznan.pl
#QCG host=zeus.cyfronet.pl
- input - lokalizacja skąd ma być wzięte standardowe wejście dla aplikacji (stdin). Jeśli nie jest to lokalizacja gsiftp zakłada się, że jest ustalana względem katalogu, z którego zlecono zadanie.
#QCG input=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/inputs/experiment.input
#QCG input=input.txt
memory
- memory - dyrektywa definiująca deklarowane maksymalne zapotrzebowanie aplikacji na pamięć operacyjną. Podana wartość jest w MB.
module
- module - dyrektywa umożliwiająca zdefiniowanie wymaganego przez zadanie modułu (nazwy programu/biblioteki oraz wersji). Możliwe jest wielokrotne podanie dyrektywy. Przy wyborze klastra do uruchomienia zadania system weźmie pod uwagę tylko te klastry na których dostępne są wszystkie wymagane moduły.
#QCG module=nwchem/6.0
#QCG module=namd
monitor
- monitor - dyrektywa umożliwiająca zdefiniowanie skryptu, który zostanie uruchomiony przed uruchomieniem właściwego zadania i zabity po zakończeniu zadania. Funkcjonalność ta umożliwia w prosty sposób zaimplementowanie monitoringu aplikacji. Uruchomiony skrypt może cyklicznie wyszukiwać w wyniku aplikacji zadanych wzorców i przesyłać je w dowony sposób do użytkownika.
#QCG monitor=monitor-script.sh
name
- name - dyrektywa określająca nazwę zadania. Nazwa zadania pojawi się jako końcówka identyfikatora zadania.
#QCG name=nobel-experiment
native
- native - dyrektywa umożliwiająca przekazanie do systemu kolejkowego specyficznych dla niego wymagań zasobowych. Wymagania takie są specyficzne do systemu kolejkowego i powinny być używane z dyrektywami „host” i w przemyślany przez użytkownika sposób.
Przykład dla PBSa oznaczający dane zadanie jako wznawialne.
(-r y|n Declares whether the job is rerunable.)
nodes
- nodes - dyrektywa pozwalająca zdefiniować na ilu węzłach i rdzeniach w ramach węzła ma być uruchomione zadanie. Opcjonalnie można podać ile procesów ma być uruchomione na węzłach. Domyślnie, jeżeli nie zostanie podane inaczej, liczna procesów równa jest liczbie rdzeni przydzielonych w ramach węzła. Składnia liczna_węzłów:liczba_rdzeni_na_węźleliczba_procesów.
#QCG nodes=10:5:1
#QCG nodes=12:12
not-after
- not-after - dyrektywa umożliwiająca zdefiniowanie, że zadanie ma być wykonane „nie później niż”. Argumentem dyrektywy jest data z opcjonalnym czasem. Dyrektywa wymusza użycie mechanizmu rezerwacji zasobów z wyprzedzeniem. Nie może być użyta równocześnie z dyrektywą „reservation”, wymaga podania dyrektywy „walltime”.
#QCG not-after=2012.08.25
#QCG walltime=PT2H
#QCG not-after=2012.08.25 13:20
#QCG walltime=PT2H
not-before
- not-before - dyrektywa umożliwiająca zdefiniowanie, że zadanie ma być wykonane „nie wcześniej niż”. Argumentem dyrektywy jest data z opcjonalnym czasem. Dyrektywa wymusza użycie mechanizmu rezerwacji zasobów z wyprzedzeniem. Nie może być użyta równocześnie z dyrektywą „reservation”. W przypadku braku dyrektywy przyjmuje się, że zadanie może być uruchomione „od razu”. Dyrektywa wymaga dyrektywy „walltime”.
#QCG not-before=2012.07.25
#QCG walltime=PT2H
#QCG not-before=2012.07.25 15:20
#QCG walltime=PT2H
note
- note - krótka informacja o zadaniu.
#QCG note=moje pierwsze zadanie QCG
notify
- notify - dyrektywa umożliwiająca podanie protokołu i adresu docelowego dla powiadomień o stanie zadania. Możliwe jest wysyłanie powiadomień mailem i xmpp (dawniej Jabber).
#QCG notify=mailto:piontek@man.poznan.pl
#QCG notify=xmpp:tomasz.piontek@gmail.com
W przypadku checi otrzymywania powiadomień protokołem xmpp konieczne jest dodanie do kontaktów nadawcy: qcg-notification@plgrid.pl
output
- output - lokalizacja gdzie ma być przegrane standardowe wyjście zadnia (stdout). Jeśli nie jest to lokalizacja gsiftp zakłada się, że jest ustalana względem katalogu, z którego zlecono zadanie.
#QCG output=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/outputs/${JOB_ID}.output
#QCG output=output.txt
persistent
- persistent - dyrektywa określająca że po zakończeniu zadania system ma pozostawić katalog roboczy, w którym wykonywane było zadanie.
postprocess
- postprocess - dyrektywa umożliwiająca wykonanie polecenia/skryptu po zakończeniu się właściwego zadania. Wartością dyrektywy może być polecenie lub ścieżka do pliku, który ma być wykonany.
#QCG postprocess=tar cvf wynik.tar *
#QCG postprocess=postprocess-script.sh
preprocess
- preprocess - dyrektywa umożliwiająca wykonanie polecenia/skryptu przed uruchomieniem właściwego zadania. Wartością dyrektywy może być polecenie lub ścieżka do pliku, który ma być wykonany.
#QCG preprocess=mkdir outputs
#QCG preprocess=preprocess-script.sh
procs
- procs - liczba rdzeni obliczeniowych, na których ma być wykonane zadanie. (Stosowane dla zadań MPI.)
properties
- properties - dyrektywa definiująca właściwości węzłów na których ma być uruchomione zadanie.
#QCG properties=mpi,ib,lustre
queue
- queue - wybrana kolejka systemu kolejkowego.
reservation
- reservation - dyrektywa umożliwiająca podanie lokalnego identyfikatora rezerwacji w ramach której ma być wykonane zadanie. Użycie tej dyrektywy wymaga jednoznacznego podania hosta na którym jest założona podana rezerwacja.
#QCG host=reef.man.poznan.pl
#QCG reservation=piontek.0
stage-in-dir
- stage-in-dir - dyrektywa kopiowania katalogu wejściowego. Funkcjonalność i składnia analogiczna jak dla dyrektywy „stage-in-file” tyle, że kopiowany jest katalog.
#QCG stage-in-dir=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/inputs -> inputs
#QCG stage-in-dir=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/inputs
#QCG stage-in-dir=input_dir -> inputs
#QCG stage-in-dir=input_dir
#QCG stage-in-dir=. -> .
#QCG stage-in-dir=.
#QCG stage-in-dir=. -> input
stage-in-file
- stage-in-file - dyrektywa kopiowania pliku wejściowego. Składnia „lokalizacja_źródłowa → nazwa_docelowa_pliku”. Lokalizacja źródłowa może być lokalizacją gsiftp lub ścieżką do pliku. W tym drugim przypadku zakłada się, że jest ustalana względem katalogu, z którego zlecono zadanie.
W przypadku braku drugiego parametru plik kopiowany jest pod nazwę źródlową.
#QCG stage-in-file=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/inputs/input.txt -> input.txt
#QCG stage-in-file=gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/inputs/input.txt
#QCG stage-in-file=input_file.txt -> input.txt
#QCG stage-in-file=input_file.txt
stage-out-dir
- stage-out-dir - dyrektywa kopiowania katalogu wyjściowego. Funkcjonalność i składnia analogiczna jak dla dyrektywy „stage-out-file” tyle, że kopiowany jest katalog.
#QCG stage-out-dir=results -> gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/results/${JOB_ID}
#QCG stage-out-dir=results -> gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/results/${JOB_ID}
#QCG stage-out-dir=results -> result
#QCG stage-out-dir=results
#QCG stage-out-dir=. -> .
#QCG stage-out-dir=.
#QCG stage-out-dir=. -> output
stage-out-file
- stage-out-file - dyrektywa kopiowania pliku wyjściowego. Składnia „nazwa_pliku_źródłowego → lokalizacja docelowa pliku”. Lokalizacja docelowa może być lokalizacją gsiftp lub ścieżką do pliku. W tym drugim przypadku zakłada się, że jest ustalana względem katalogu, z którego zlecono zadanie. W przypadku braku drugiego parametry plik przegrywany jest pod nazwę źródłową.
#QCG stage-out-file=results.txt -> gsiftp://qcg.man.poznan.pl//home/plgrid/plgpiontek/reef/results/result.1
#QCG stage-out-file=results.txt
#QCG stage-out-file=result.txt -> ${JOB_ID}.result
#QCG stage-out-file=result.txt
use-reservation
- use-reservation - bezparametrowa dyrektywa umożliwiająca zdefiniowanie, ze dane zadanie ma być uruchomione z wykorzystaniem mechanizmu rezerwacji zasobów z wyprzedzeniem. Dyrektywa wymaga podania czasu wykonania zadania (dyrektywa #QCG walltime). Stosowanie tej dyrektywy pozwala „wymusić” rezerwacje, gdy nie były użyte dyrektywy „not-after”, „not-before”, „deadaline”. Dyrektywa wyklucza użycie równocześnie z dyrektywą „reservation”.
#QCG use-reservation
#QCG walltime=PT2H
walltime
- walltime - dyrektywa definiująca deklarowany przez użytkownika czas wykonania zadania w formacie PnYnMnDTnHnMnS, w formacie ISO 8601 gdzie:
- P - obowiązkowy znak rozpoczynający definicję okresu,
- nY - liczba lat,
- nM - liczba miesięcy,
- nD - liczba dni,
- T - separator czasu (musi być obecny, jeśli zdefiniowane są poniższe wartości)
- nH - liczba godzin,
- nM - liczba minut,
- nS - liczba sekund.
watch-output
- watch-output - dyrektywa umożliwiająca monitorowanie pliku wyjściowego aplikacji i przesyłanie powiadomień z informacją. Argumentem dyrektywy jest trójka parametrów oddzielonych przecinkami:
- adres na który ma być przesłane powiadomienie (wspieranymi protokołami są mail i xmpp - patrz dyrektywa notify)
- częstotliwość przesyłania powiadomień w sekundach,
- wyrażenie regularne, dla którego linia pliku wynikowego ma być przesłana w powiadomieniu, lub nazwa pliku którego wyjście ma być przesłane.
#QCG watch-output=mailto:piontek@man.poznan.pl,20,ENERGY
#QCG stage-in-file=nft_expr_file
#QCG watch-output=mailto:piontek@man.poznan.pl,30,ntf_expr_file
Zmienne opisu zadania
W opisie zadania możliwe jest użycie następujących zmiennych:
- HOSTNAME - nazwa hosta (klastra) na jakim uruchomione zostało zadanie,
- HOME - katalog domowy użytkownika,
- TASK_DIR - katalog roboczy zadania,
- JOB_ID - identyfikator eksperymentu,
- TASK_ID - identyfikator zadania,
- USER_DN - DN (Distinguished Name) użytkownika (identyfikator użytkownika widoczny w certyfikacie, w formacie PEM, np. /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek)
- PROCESS_GROUP - identyfikator grupy procesów.
Przykładowe opisy zadań
Uruchomienie na klastrze galera aplikacji „gaussian”.
#QCG queue=plgrid-long
#QCG name=etanal
#QCG note=etanal Gaussian
#QCG output=${JOB_ID}.output
#QCG error=${JOB_ID}.error
#QCG stage-in-file=etanal.gjf -> etanal.gjf
#QCG stage-out-file=wynik.tar -> ${JOB_ID}.tar
#QCG nodes=1:12
#QCG host=galera.task.gda.pl
#QCG persistent
#QCG walltime=P7D
#QCG notify=mailto:piontek@man.poznan.pl
#QCG memory=15360
#QCG preprocess=echo START
#QCG application=g09
#QCG argument=etanal.gjf
#QCG postprocess=tar cvf wynik.tar *
Eksperyment polegający na:
- przegraniu z katalogu, z którego wykonano polecenie qcg-sub podkatalogu inputs na klaster na docelowy klaster (reef).
- zleceniu do wykonania na klastrze reef w kolejce plgrid polecenia /bin/tar pakującego przegrany wczesnej katalog inputs do pliku output.tgz.
- przesłaniu pliku output.tgz do katalogu, z którego wykonano polecenie qcg-sub pod tę samą nazwę.
#!/bin/bash
#QCG queue=plgrid
#QCG persistent
#QCG host=reef.man.poznan.pl
#QCG output=output
#QCG error=error
#QCG stage-in-dir=inputs -> inputs
/bin/tar -czf output.tgz inputs/input.*
#QCG stage-out-file=output.tgz -> output.tgz
Uruchomienie aplikacji NAMD
#QCG note=NAMD apoa1
#QCG name=ex_1
#QCG host=hydra.icm.edu.pl
#QCG walltime=PT10M
#QCG queue=plgrid
#QCG nodes=1:12:12
#QCG persistent
#QCG output=apoa1.output
#QCG error=apoa1.error
#QCG application=NAMD
#QCG argument=apoa1/apoa1.namd
#QCG stage-in-file=apoa1.zip
#QCG preprocess=unzip apoa1.zip
#QCG stage-out-dir=. -> results
#QCG notify=xmpp:tomasz.piontek@plgrid.pl
#QCG watch-output=mailto:tp@mail,20,ENERGY