2016-10-12 3 views
1

Ich versuche Gnu parallel GNU parallel (Version 20160922) zu verwenden, um eine große Anzahl von Protein Docking-Jobs (mit UCSF Dock 6.7) zu starten. Ich laufe auf einem Hochleistungs-Cluster mit mehreren Dutzend Knoten mit jeweils 28-40 Kernen. Das System führt CentOS 7.1.1503 aus und verwendet das Drehmoment für die Auftragsverwaltung.gnu parallel einen Job pro Prozessor

Ich versuche, jede Konfigurationsdatei in dock.n.d an die ausführbare Dock-Datei zu senden, eine pro Kern im Cluster. Hier ist meine PBS-Datei:

#PBS -l walltime=01:00:00 
#PBS -N pardock 
#PBS -l nodes=1:ppn=28 
#PBS -j oe 
#PBS -o /home/path/to/pardock.log 

cd $PBS_O_WORKDIR 
cat $PBS_NODEFILE temp.txt 
#f=$(pwd) 
ls dock.in.d/*.in | parallel -j 300 --sshloginfile $PBS_NODEFILE "/path/to/local/bin/dock6 -i {} -o {}.out" 

Dies funktioniert gut auf einem einzelnen Knoten wie oben beschrieben. Aber wenn ich Skalierung auf bis zu etwa 300 Prozessoren (mit -l procs=300) accross mehrere Knoten beginne ich diese Fehler zu erhalten:

parallel: Warning: ssh to node026 only allows for 99 simultaneous logins. 
parallel: Warning: You may raise this by changing /etc/ssh/sshd_config:MaxStartups and MaxSessions on node026. 

Was ich nicht verstehe ist, warum gibt es so viele Anmeldungen. Jeder Knoten hat nur 28-40 Kerne, so würde ich, wie in $ PBS_NODEFILE angegeben, erwarten, dass es nur 28-40 SSH-Logins zu irgendeinem Zeitpunkt auf diesen Knoten gibt.

Verstehen oder missbrauche ich hier etwas? Bitte geben Sie an, welche anderen Informationen ich zur Verfügung stellen kann oder in welche Richtung ich gehen soll, damit dies funktioniert.

UPDATE

Also mein Problem, das oben war die Kombination von -j 300 und die Verwendung von $PBS_NODEFILE, die für jeden Kern auf jedem Knoten einen separaten Eintrag hat. Also in diesem Fall scheint es, ich sollte -j 1 verwenden. Aber dann scheinen alle Jobs auf einem einzigen Knoten zu laufen.

Also meine Frage bleibt, wie man Gnu parallel zum Ausgleich der Jobs zwischen den Knoten, die Verwendung aller Kerne, aber nicht eine übermäßige Anzahl von SSH-Logins aufgrund mehrerer Aufträge pro Kern erstellen.

Vielen Dank!

Antwort

1

Sie bitten GNU Parallel, die Anzahl der Kerne zu ignorieren und 300 Jobs auf jedem Server auszuführen. stattdessen

Versuche:

ls dock.in.d/*.in | parallel --sshloginfile $PBS_NODEFILE /path/to/local/bin/dock6 -i {} -o {}.out 

Dies zu --jobs 100% ausfällt, die auf allen Maschinen ein Job pro Kern.

Wenn Sie nicht berechtigt sind alle Kerne auf den Maschinen zu verwenden, können Sie in prepend X/ die Wirte in --sshloginfile X als die Anzahl der Kerne zu zwingen:

28/server1.example.com 
20/server2.example.com 
16/server3.example.net 

Dieses GNU Parallel zwingen wird, überspringen die Erkennung von Kernen, und stattdessen 28, 20 und 16 verwenden. In Kombination mit -j 100% können Sie steuern, wie viele Jobs auf den verschiedenen Servern gestartet werden sollen.

+0

Ich habe dies versucht, und parallel scheint nicht zwischen Kernen auf der Maschine und Kernen zu unterscheiden, die ME auf der Maschine zugeordnet sind. Wenn ich zum Beispiel 20 Kerne auf einem 28-Kern-Knoten anfordere, sehe ich weit über 20 dock6-Jobs. (nähert sich der Gesamtzahl der Kerne auf dem Knoten). Ist es eine Art zu sagen, dass man parallel zum Kernlimit bleiben soll (zum Beispiel, wie durch die Anzahl der Einträge dargestellt wird, die jeder Knoten in $ PBS_NODEFILE hat)? Oder ist das Undokumentiertes Verhalten (tm) oder Benutzerfehler (tm)? – Eric

Verwandte Themen