Python und qsub

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Hm,

ich weiss grad nicht wie ich das lösen soll: ich habe ein Python-Skript was ein cpp-Programm aufruft, rund 20000 mal. Dabei wird eine Datei eingelesen, etwas berechnet und das Ergebnis als Zeile in eine Ergebnisdatei geschrieben, die dann 20000 Zeilen hat. Die anderen Jobs habe ich entweder als Shell-Skript geschrieben, das klappte aber die Shellskript-Sprache kann ich nicht so gut, dass ich das jetzige Vorhaben umsetzen könnte - da sind ein paar Prüfungen und Prozeduren drin, für mich zu kompliziert.

Eine andere Herangehensweise war von mir, dass ich mir die dann einzureichenden Shell-Skripte schon vorab erzeugen lasse und dann diese via qsub einreiche - das geht hier auch nicht, denn bei den wenigen 100 war das locker machbar, bei 20000 geht mir das aber auf den Zeiger. Vollautmatisch losschicken ist denke cih auch nicht machbar, denn ich habe nur eine begrenzte Zahl von Knoten zur Verfügung, sagen wir 20, wenn da plötzlich 500 in die Queue gesteckt werden, dann wird das vermutlich nicht klappen und mir werden einfach viele später rausgeräumt. Außerdem wundere ich mich ja ob das überhaupt hinhaut, wenn die Zieldatei für die Jobs ja die gleiche ist, wie das dann gedeichselt wird.

Eigentlich ist das eine einfaches Vorhaben: ich will einen Knoten, es soll genau ein Job eingereicht werden. Dieser Job hat dann eine for-Schleife mit den 20000 Programmstarts die nacheinander aufgerufen werden.

Wie macht man das? Wie würdet ihr das machen? Wo kann ich dazu was nachlesen? Danke vorab.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ehrlich gesagt habe ich trotz Deiner großen Ausführung nur Bahnhof verstanden!

Was bedeutet denn "cpp"-Programm aufrufen? Ist das ein lauffähiges Programm oder öffnest Du den Quellcode und willst irgend etwas mit dem machen?

Was ist "qsub"?
Eigentlich ist das eine einfaches Vorhaben: ich will einen Knoten, es soll genau ein Job eingereicht werden. Dieser Job hat dann eine for-Schleife mit den 20000 Programmstarts die nacheinander aufgerufen werden.
Was ist ein "Knoten"? Was ist ein "Job"?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Das sind Begriffe die auftauchen, wenn man auf Linux-Computerclustern rechnen lässt.
lunar

@Hyperion: Es geht hier offenbar um Cluster-Rechnen. Das Kommando "qsub" dient bei manchen (allen?) Cluster-Management-Systemen dazu, einen neuen Job an zentralen Kontrollknoten zu übermitteln, der dann die Ausführung dieses Jobs sowie die Verteilung auf Knoten steuert.

@Jochen1980: Aus Deiner Beschreibung werde ich ebenso wenig schlau wie Hyperion. Ich sehe Dein Problem nicht: Du möchtest einen Job ausführen, der dann seinerseits ein anderes Programm wiederholt mit bestimmten Parametern aufruft. Wieso tust Du das dann nicht einfach? Wo ist das konkrete Problem?
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

@Hyperion
Ich habe meine Antwort recht kurz gehalten, weil du via Google sofort auf die Begriffe kommst mit meiner Anmerkung 'Computercluster'. Außerdem habe ich davon selbst viel zu wenig Plan, dass ich das dir das kurz knapp und klar erklären könnte.

@lunar
Ich dachte ich kann mit qsub keine Python-Skripte als Job einreichen - wenn doch, dann ist mein Problem gelöst.

Ich teste das mal und dann schauen wir weiter ...
lunar

@Jochen1980: Was Du einreichen kannst, hängt von der Cluster-Engine, der Konfiguration derselben und der auf dem Cluster verfügbaren Software ab. Theoretisch ist Python kein Problem unter den Voraussetzungen, dass Python in passender Version auf dem Cluster vorhanden ist und die Cluster-Engine die Angabe des Interpreters (entweder mittels Shebang oder über einen Kommandozeilenparameter) ermöglicht. Ob es in Deinem Fall auch praktisch möglich ist, können wir gar nicht wissen, insofern wäre es durchaus sinnvoll gewesen, im ersten Beitrag ein wenig mehr Details als „Cluster-Rechnen“ zu erwähnen. Ansonsten besteht doch immer auch die Möglichkeit, Dich an den Help-Desk oder die Administratoren des Rechenzentrums zu wenden.

Ich verstehe allerdings nicht, warum das Job-Skript selbst unbedingt ein Python-Skript sein muss. Du wirst doch irgendwo Speicherplatz auf dem Cluster zur Verfügung haben, also kannst Du das Python-Skript doch einfach dorthin hochladen, und aus dem Job-Skript heraus aufrufen. Im Job-Skript stehen dann nur die Parameter der Cluster-Engine sowie der Aufruf des Python-Skripts.
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Ja das war dumm, ich rufe das Haupt-C++-Programm ja auch über ein Shell-Skript auf, Python 2 läuft auch auf dem Cluster. Ich muss nur das Shell-Skript mit den Cluster-Anmerkungen das python-Skript aufrufen lassen und das Python Skript ruft dann das C++-Programm auf. ... Gleich mal schauen.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Miniurlaubsbedingt den Thread erst jetzt gesehen ...

Also, mal als Nachtrag: "qsub" kann uns keine ausreichende Antwort geben, denn da fehlt Info. Und um die sollte Dich Dein Admin reicher machen: Ein gutes Queuingsystem erlaubt auch Finetuning: Priorität der Jobs, Walltime, Startzeit, etc.. Da kann man doch scriptend eingreifen und die 2e5 Jobs so einspeisen, dass Sie nicht alle mit gleicher Startzeit (sofort!) den Scheduler nervös machen.

Im Übrigen finde ich 2e5 Jobs schon sehr viel: Ein Job sollte beträchtlich länger (mindestens 'ne Minute) laufen, als der Overhead, den er verursacht. Ist das der Fall?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

CM hat geschrieben:2e5
Da hast du aber wohl eine Null zuviel genommen. ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ach, Du, so eine Größenordnung mehr oder weniger ... wer wird denn so kleinlich sein? ;-)

Aber Du hast recht: Diese Zahl sollte einen Scheduler noch nicht "nervös machen".
Antworten