Korzystanie z systemu kolejkującego SGE

Z Uniwersyteckie Centrum Informatyczne

Klaster pracuje obecnie pod kontrolą systemu kolejkującego Sun Grid Engine (SGE). W Laboratorium zainstalowana jest wersja 5.3. Jest to wersja bezpłatna - stąd pewne jej ograniczenia.

SGE, przydzielając zasoby użytkownikom, kieruje się inną polityką niż PBS. W przypadku PBSa użytkownik musiał podać nazwę kolejki dla zadania. W przypadku korzystania z SGE użytkownik podaje tylko potrzebne zasoby dla zadania (jak czas procesora, ilość pamięci...) - a system sam decyduje, w jakiej kolejce zadanie zostanie umieszczone. Dodatkowo kolejki są "lokalne" - czyli na każdym węźle znajduje się oddzielna kolejka. Ponieważ nasze komputery w klastrze to maszyny dwuprocesorowe, każda kolejka ma dwa sloty - a więc może wykonywać dwa zadania. Wszystkie węzły są 64-bitowe.

Do dyspozycji użytkowników jest:
-15 kolejek dwuslotowych na węzłach (nazwy od node1.q do node15.q);
-kolejka jednoslotowa na węźle 16 (node16.qz limitami czasu dla zadań: 1h CPU, 1:30 h czasu rzeczywistego.
Kolejka na węźle 16 przeznaczona jest do zadań krótkich bądź testowych. Zadania uruchamiane poza kontorlą systemu kolejkującego będą usuwane.

Zadania równoległe mogą korzystać z trzech środowisk równoległych:
normal - przeznaczonego dla zadań dwuprocesorowych na pojedynczych węzłach;
large - dla zadań potrzebujących więcej niż 2 procesory (max. 8) - z parzystą liczbą procesorów;
mpi - dla zadań równoległych korzystających z MPI (max. 8 procesorów).

Wysłanie zadanie do systemu kolejkującego odbywa się za pomocą komendy qsub. Składnia polecenia jest następująca:

>$ qsub skypt_sge
gdzie skrypt_sge jest nazwą pliku zawierającego polecenia sterujące dla SGE. Przykładowe skrypty tego typu znajdują się w katalogu /scratch/example/SGE.

Dostosowanie skryptów PBSa dla SGE

Zmiany, jakich należy dokonać w skryptach PBSa, są niewielkie. Najważniejsze z nich:

PBS SGE
Nazwa zadania #PBS -N test #$ -N test
Przekierowanie outputów #PBS -o example.log -j y #$ -o example.log -j y
Powiadomienie pocztą o zadaniu #PBS -m ae> #$ -m ae
Zasoby dla zadania #PBS -l pcput=2:00:00 #$ -l h_cpu=2:0:0
Zasoby wieloprocesorowe #PBS -l nodes=3:ppn=2 #$ -pe large 6
Katalog domowy zadania $PBS_O_WORKDIR $SGE_O_WORKDIR
Katalog tymczasowy zadania nie zdefiniowany $TMPDIR

Katalog tymczasowy jest zakładany i usuwany przez SGE. Użytkownik nie musi już się o to troszczyć. W przypadku przerwania wykonywanego zadania katalog tymczasowy również jest usuwany automatycznie.
Jeśli chcemy, aby plik zawierający standardowe wyjście programu znalazł się w katalogu, z którego zadanie zostało uruchomione, należy w skrypcie startowym dodać linijkę:

#$ -cwd


Najważniejsze polecenia SGE:
qsub wysyłające zadanie do kolejki;
qdel usuwające zadanie z kolejki;
qstat wyświetlające stan zadań w kolejkach.
Opis wszystkich tych poleceń dostępny jest przez pomoc systemową man.


Uwaga
Ponieważ na węzłach 9 i 16 znajdują się kolejki dla krótkich zadań (na node9 z limitem 4h CPU, na node16 z limitem 1h CPU), zadania potrzebujące więcej muszą poinformować o swoich oczekiwaniach system kolejkujący, przez umieszczenie w skrypcie linii:

#$ -l h_cpu=100:0:0
W tym przypadku system przeznaczy dla zadania 100h czasu procesora (format hh:mm:ss). W przypadku braku takiej deklaracji zadanie może zostać umieszczone na serwerze - i po godzinie zostanie automatycznie usunięte. Przewidując czas wykonywania zadania, zwłaszcza w przypadku długich zadań, lepiej oczekiwany czas zbytnio przeszacować (np. 10x). W przypadku zadań równoległych nie trzeba podawać przewidywanego czasu obliczeń, ponieważ kolejka serwera nie należy do środowisk równoległych.


Wskazówki dla osób używających programu Gaussian
Program ten skompilowany jest w wersji równoległej. Ważne jest więc, aby naszemu zadaniu zostały przydzielone dwa procesory (sloty). Służy do tego kolejka normal, zaś w skrypcie sterującym dla SGE trzeba umieścić polecenie:

#$ -pe normal 2
Jeżeli zadanie Gaussiana jest zadaniem krótkim (testowym) i ma zostać wykonane w kolejce na węźle testowym (node16), wówczas nie należy deklarować środowiska równoległego.


Wskazówki dla osób używających MPI
Dla zadań równoległych pracujących pod kontrolą MPI przewidziana jest kolejka mpi. Jeśli zadanie potrzebuje np. 5 procesorów, w skrypcie dla SGE umieszczamy polecenie:

#$ -pe mpi 5
W katalogu $TMPDIR powstanie plik machines z listą węzłów przydzielonych do zadania. Ponieważ SGE zakłada katalog tylko na pierwszym węźle, zadania korzystające z MPI muszą mieć katalog tymczasowy na serwerze na partycji /scratch.
Przykładowy skrypt znajduje się w katalogu /scratch/example/SGE/mpi_example.


Wskazówki dla osób używających NAMDa
Dla zadań równoległych pracujących pod kontrolą NAMDa przewidziana jest kolejka large. Kolejka ta zakłada parzystą ilość procesorów do przydzielenia. Jeśli zadanie potrzebuje np. 6 procesorów, w skrypcie dla SGE umieszczamy polecenie:

#$ -pe large 6
W katalogu $TMPDIR powstanie plik nodefile z listą węzłów przydzielonych do zadania. Ponieważ, podobnie jak w przypadku MPI, katalog zakładany jest tylko na pierwszym węźle, obliczenia pod kontrolą NAMDa trzeba prowadzić w katalogu /scratch na serwerze.
Natomiast w skrypcie kontrolującym pracę NAMDa nie trzeba już martwić się o stworzenie pliku `nodelist` z listą wezłów przydzielonych do zadania. Taki plik tworzony jest automatycznie na pierwszym węźle - i wystarczy go skopiować do katalogu $SGE_O_WORKDIR poleceniem:
cp -a $TMPDIR/nodelist $SGE_O_WORKDIR

Kompilacja
Kompilacja może odbywać się na węźle 16 (node16). Na maszynę tę można się zalogować z serwera pe2600. Dostępne na niej są kompilatory gnu (w wersji 3.x oraz 4.x) oraz kompilator fortrana 95 laheya (lf95) i portlanda (pgf). Kompilator laheya kompiluje jedynie w trybie 32-bitowym.