HTCondor

HTCondor brukes til å spre jobber på maskiner. På Ifi kjører alle slike jobber med lavere prioritet enn vanlige bruker-jobber ("nice"-verdi 19).

Hensikten er at hverken konsoll-brukere eller ssh-brukere skal bli plaget av jobber som kjøres. Bruk av mus/tastatur og last sjekkes og vil eventuelt føre til midlertidig stans av HTCondor-styrte jobber. De fortsetter automatisk dersom forholdene ligger til rette for det, eller de flyttes automatisk til en annen maskin.

De fleste Linux-maskiner for bachelor-studenter kan kjøre HTCondor-styrte jobber. Totalt er om lag 200 CPU-kjerner disponible.

Innhold

Lisens-betingelser

Se fullstendige lisens-betingelser.

Hva slags jobber

HTCondor kan brukes til å kjøre de fleste typer beregnings-jobber som ikke krever aktiv kommunikasjon med en bruker. Man sender programmet til HTCondor, eventuelt sammen med data- og kommandofiler (f.eks. tastatur-input), og får resultatet levert som datafiler.

For programmer som kan linkes på nytt, f.eks. de man selv har skrevet i C eller C++, kan HTCondor automatisk lagre jobbens status periodisk til disk (vanligvis hver tredje time). Dette kalles "checkpointing". Hvis maskinen stanser, kan HTCondor sette jobben i gang igjen på en annen maskin, fra sist lagrede status. Slik blir tapet av beregningstid begrenset. Dette er mulig fordi man linker inn HTCondor-biblioteker.

Mange program-pakker gir ikke brukeren mulighet til å linke med HTCondor-biblioteker, f.eks. MATLAB. Da må man selv ta hånd om mellomlagring av resultater for å redusere tap av beregningstid ved en eventuell maskinstans. Dette reduserer i noen grad nytten av HTCondor, men evnen til å utnytte ledige CPU-sykluser i et stort nett av maksiner og automatisk omstart ved maskin-havari, er også verdifulle egenskaper. Det er også mulig å bruke MATLAB compiler og linke med HTCondor-bibliotekene.

Tilgjengelige HTCondor-maskiner

For å finne ut om maskinen man er logget inn på er meldt inn i HTCondor, gir man kommandoen

  pgrep -l condor

i et terminal-vindu. Dersom resultatet ikke er tomt, betyr det at HTCondor kjører på maskinen.

Submit-maskiner

For å finne ut hvilke maskiner som er submit-maskiner, brukes kommandoen

condor_status -sched

som for tiden gir myrkondor og svartkondor.

Bare disse maskinene kan brukes til å sende jobber til HTCondor med kommandoen condor_submit. På myrkondor og svartkondor gir kommandoen

pgrep -l condor en liste over hvilke demoner som kjører, f.eks.

17234 condor_master
910032 condor_procd
910035 condor_schedd
22510 condor_shared_p

 

hvilket betyr at fire HTCondor-demoner kjører på maskinen. condor_master styrer de andre demonene. condor_schedd sender jobber til HTCondor.

I tillegg kan det være et antall condor_shadow, en for hver jobb som kjører på en regneressurs.

Sentral-maskin

For å finne ut hvilken maskin som er sentral-maskin, brukes kommandoen

condor_status -col

som for tiden gir skogkondor.

På skogkondor gir kommandoen pgrep -l condor

3091418 condor_master
3091435 condor_procd
338540 condor_shared_p
3091439 condor_collecto
3091508 condor_negotiat

condor_collector samler inn informasjon fra maskinene, condor_negotiator forhandler, på vegne av brukeren, med maskiner for å finne maskiner som kan tilfredsstille de behovene brukeren oppgir. 

Regneressurser

De maskinene som brukes til å utføre jobbene har demonene condor_master, condor_startd og condor_shared_p, men ikke condor_schedd, condor_collector eller condor_negotiator.

På en maskin som er med i HTCondor, kan man gi kommandoen

  condor_status

for å få en liste over alle maskiner som kan kjøre HTCondor-jobber. Unix-kommandoen "man condor_status" gir mer informasjon.

Start av jobber

For å starte jobber, bruker man ssh til å logge seg inn på myrkondor.ifi.uio.no eller svartkondor.ifi.uio.no (linux-maskin med 64-bit redhat enterprise linux release 7.3)

  1. Lag eventuelle nødvendige filer med tastatur-kommandoer for programmer som trenger dette.
  2. Det må lages en fil som gir HTCondor nok informasjon til å kunne kjøre jobben. En slik fil kalles en "submit"-fil. Navnet kan gjerne slutte med ".cmd".

    Blant annet må filen inneholde en kommando som angir det "univers"-et HTCondor skal bruke, "standard", "vanilla" eller "java". Java-programmer må kjøre i "java"-universet. Andre programmer som man ikke selv kan linke, f.eks. MATLAB, må kjøre i HTCondors "vanilla"-univers. Programmer som man selv kan linke, bør kjøre i HTCondors "standard"-univers, slik at man kan dra nytte av automatisk "checkpointing".

    Universet angis slik

      universe = vanilla
    

    En "submit"-fil kan inneholde flere kommandoer, som f.eks. gir navn på filer som skal brukes i stedet for stdin, stdout og stderr, hvor mange ganger programmet skal kjøres (med forskjellig inngangs-data for hver kjøring), hvilke krav programmet stiller til maskinene det skal kjøres på (f.eks. maskin-arkitektur, minimum minne, raskest maskin etc.) og hvem som skal motta e-post med informasjon om jobben.

    Se lenger ned for eksempler. Unix-kommandoen "man condor_submit" gir mer informasjon om innholdet av en "submit"-fil.

  3. Hvis jobben skal kjøres i "standard" univers, må programmet linkes med HTCondor-bibliotekene som håndterer "checkpointing". Til dette brukes kommandoen condor_compile. For de vanligste link-kommandoer setter man ganske enkelt ordet condor_compile foran på kommando-linjen. Det gjøres også dersom kompilering og linking skjer i ett trinn. condor_compile kan bl.a. brukes sammen med cc, CC, gcc, g++, ld (linkeren).

    Unix-kommandoen "man condor_compile" gir mer informasjon om kompilering og linking med HTCondors biblioteker.

  4. Send ("submit") jobben til HTCondor. Til dette brukes kommandoen condor_submit,
      condor_submit "submit-fil"
    

Minimalistisk "submit"-fil

# Bruk din egen epost-adresse for notify_user, f.eks:
notify_user    = brukernavn@ifi.uio.no
# I hvilke tilfeller ønsker du epost fra Condor (Always, Complete, Error, Never)
# Unngå Never.
notification   = Error

executable     = foo                                                    
log            = foo.log                                                    
queue

Programmet ved navn "foo" vil bli kjørt i "standard" univers (fordi universet ikke er spesifisert), og logg-filen "foo.log" vil inneholde informasjon om kjøringen. Jobben vil bli kjørt på samme maskin-arkitektur som maskinen man gir condor_submit-kommandoen til (med forbehold om at programmets binærkode passer for denne maskin-typen). Vi bruker kun 64-bits linux-maskiner med intel-kompatibel hardware i HTCondor på Ifi.

Dersom man ikke skal bruke "standard" univers, må universet spesifiseres med kommandoen "universe".

"submit"-fil for enkel MATLAB-jobb

NB! MATLAB-lisenser er en begrenset ressurs. En sikker metode for å bli upopulær er å starte mange HTCondor-jobber som igjen starter MATLAB og dermed legger beslag på flere lisenser.

For å unngå å bruke mange MATLAB-lisenser kan man bruke MATLAB Compiler til å generere C-kode for frittstående programmer. Kjøring av disse krever ikke MATLAB-lisens. Se MATLAB-dokumentasjon for mer om dette. Man kan da også få til "checkpointing".

En "submit"-fil for kjøring av en enkelt MATLAB-jobb kan se slik ut

# Use your own email-address for notify_user, e.g.:
notify_user    = brukernavn@ifi.uio.no

# Only receive e-mail in case of job error.
notification = Error

# Program to run.
executable = /usr/bin/matlab

# Universe without checkpointing for non-linkable job
universe   = vanilla

# Import user environment variables at the time of submission to Condor
getenv     = True

# stdin, i.e. keyboard input to MATLAB. Script, not function.
input      = keyboard_input_script.m

# stdout, i.e. screen output from MATLAB.
output     = matlab_screen_output.txt

# stderr. However, MATLAB prints error messages to screen, i.e. to stdout,
# so leave stderr at default value of /dev/null.
#error      = matlab_errors.txt

# log-file for Condor activity
log        = condor.log

# Choice of directory to start executable from (i.e. Condor does
# cd to initialdir prior to starting executable)
initialdir = $ENV(HOME)/matlab

# Arguments to pass to the executable.
# start_function can be m-file script or m-file function which must be on
# the MATLAB path. Substitute "start_function" with your own choice.
arguments  = -nodisplay -nojvm -r start_function

queue

"submit"-fil for Java-jobb

Dette viser et eksempel der filene referert av output og error havner i mappen gitt av initialdir. Java-programmet angis med full sti til klassen som inneholder "main". Programmet bruker dessuten andre klasser fra myJar.jar. Standard input hentes fra filen h.txt i en spesifisert mappe.

Første argument i arguments må inneholde navnet på klassen som inneholder "main". Navnet må angis slik at java-kommandoen er i stand til å finne det. I eksemplet er navnet gitt med full pakke-kvalifisering.

Legg merke til at executable angir start-klassen med endelsen class, dvs. filen, mens arguments angir klassenavnet.

CLASSPATH vil inneholde filene angitt av jar-files i tillegg til elementer som Condor trenger for å finne sine hjelpe-klasser.

# Use your own email-address for notify_user, e.g.:
notify_user    = brukernavn@ifi.uio.no
notification   = Error

executable = $ENV(HOME)/src/java/mypackage/ClassName.class
universe = java

initialdir = $ENV(HOME)/project
input = $ENV(HOME)/data/h.txt
output = submit.out
error = submit.err
jar_files = $ENV(HOME)/myJar.jar
arguments = mypackage.ClassName arg0 arg1 arg2
log = project.log
queue

"submit"-fil for multiple kjøringer

Ved å bruke kommandoen

queue 100

vil programmet kjøres 100 ganger. Hver kjøring blir tilordnet et prosess-nummer, fra null. Dette gir muligheten til f.eks. å gi forskjellige data-filer til hver kjøring

input = file.$(Process)

Andre kommandoer kan også bruke makroen Process på denne måten.

En "submit"-fil kan inneholde flere "queue"-kommandoer. Prosess-nummeret økes videre for hver "queue"-kommando (starter ikke fra null). Alle prosesser som startes av en "submit"-fil blir tilordnet et felles "cluster"-nummer som også kan refereres i en "submit"-fil, med makroen Cluster.

Overvåking av jobb

Følgende kommandoer kan være nyttige til å overvåke/administrere jobber. Bruk "man kommando" for mer informasjon om kommandoene.

condor_status
Sjekk status og aktivitet på maskiner.
condor_q
Se på køen av jobber. Opsjonen -global viser køen for alle submit-maskinene. Opsjonene -analyze og -better-analyze kan gi informasjon om hvorfor en jobb ikke blir startet.
condor_history
Sjekk data om jobber som ble ferdig eller fjernet.
condor_rm
Fjern jobb fra kø.

Problemer

Ved kjøring av Java-programmer på Linux-maskiner har HTCondor problemer med å anslå hvor stort minne jobben trenger. HTCondor krever i standard oppsettet at en maskin som skal kjøre en jobb må ha et minne som er stort nok til at hele jobben får plass (uten å ty til diskbruk). Problemet inntreffer særlig med programmer som bruker mange tråder. Estimatet blir da for stort. Dersom jobben blir suspendert, kan det være at den aldri vil starte igjen fordi ingen maskiner har nok minne til å tilfredsstille jobbens krav.

Løsningen er at man i "submit"-filen gir en requirements-kommando som spesifiserer kravet til minne. Da vil HTCondor sløyfe kravet nevnt i forrige avsnitt. Hvis man spesifiserer et minnekrav som er lavere enn størrelsen på jobben, kan det føre til ineffektiv kjøring. Kravet kan f.eks. angis slik, dersom jobben trenger 512 MB minne,

requirements = Memory > 512

Hvis man har flere krav til maskinen, må alt legges inn i samme requirements-kommando, f.eks.

requirements = Memory > 512 && ((Arch == "INTEL" && OpSys == "LINUX"))

 

Publisert 2. mars 2011 20:09 - Sist endret 15. feb. 2017 11:22