[PYTHON] Starten Sie den Server während der Fabric-Verarbeitung neu

Ich habe TensorFlow Stock Forecast Series implementiert, aber ich habe es auf einem Mac und auf einem PC mit einer GPU (TITAN X) rsync codiert. Ich laufe nach der Synchronisierung mit. Wenn ich jedoch ein Programm ausführe, das die GPU ungefähr 200 Mal verwendet, gibt die cuda (7.5) -Bibliothek einen Fehler aus und alles danach schlägt fehl. Als ich dort eine Fehlermeldung erhielt, habe ich den Server manuell neu gestartet, aber Fabric verwendet, um ihn automatisch neu zu starten.

Hier ist zunächst der gesamte Code.

fabfile.py


import time
from fabric.api import run, cd, prefix, env
from fabric.tasks import execute


# -Wenn Sie sich mit ssh anmelden, indem Sie i hinzufügen.Pfadeinstellungen wie in bashrc festgelegte cuda sind gültig
env.shell = '/bin/bash -l -i -c'
#Serveradresse
env.hosts = ['10.0.1.17']
#Login-Benutzername (kein Passwort, da es sich um eine Authentifizierung mit privatem Schlüssel handelt)
env.user = 'akiraak'


#Zugriff mit ssh und Ausführung von Befehlen
def run_jp():
    #Wechseln Sie in das Projektverzeichnis
    with cd('~/project/'):
        #Aktivieren Sie die Einstellungen für virtualenv
        with prefix('. ~/tensorflow-env/bin/activate'):
            #Befehlsausführung
            run('time python run_jp.py', warn_only=True)
            #Starten Sie den Server neu (stellen Sie sicher, dass die Sudo-Einstellung ohne Kennwort aktiviert ist).
            run('sudo reboot')


if __name__ == "__main__":
    #Wiederholen Sie die Befehlsausführung und starten Sie den Server neu
    while True:
        try:
            #Führen Sie ssh aus
            execute(run_jp)
        except Exception as e:
            print(e)
        #Warten Sie eine Weile, bis der Server neu gestartet wird
        time.sleep(60)

Mit Fabric können Sie sich mit ssh beim Server anmelden und die Befehlsausführung in Python-Code schreiben.

Führen Sie diesen Code von Ihrem Mac aus, um den Server zu steuern.

run_jp () ist eine Funktion, die nach dem Zugriff auf ssh einen Befehl ausführt. Normalerweise wird der Prozess mit dem folgenden Befehl ausgeführt.

$ fab run_jp

Dieses Mal möchte ich "Verarbeitung ausführen" -> "Server neu starten" -> "Verarbeitung ausführen" auswählen. Führen Sie den Python-Code also normal aus, anstatt den Befehl fab zu verwenden.

$ python fabfile.py

Hier wird run_jp () ausgeführt und der Vorgang des Wartens von 60 Sekunden nach dem Neustart durchgeführt.

if __name__ == "__main__":
    #Wiederholen Sie die Befehlsausführung und starten Sie den Server neu
    while True:
        try:
            #Führen Sie ssh aus
            execute(run_jp)
        except Exception as e:
            print(e)
        #Warten Sie eine Weile, bis der Server neu gestartet wird
        time.sleep(60)

Wechseln Sie in "run_jp ()", das die eigentliche Verarbeitung ausführt, in das Verzeichnis, in dem sich der Code befindet (~ / project /), aktivieren Sie die Einstellung "virtualenv" (. ~ / Tensorflow-env / bin / enabled) und dann "python run_jp" Ich renne .py`.

In python run_jp.py werden mehrere Prozesse in verschiedenen Prozessen ausgeführt, aber wie oben erwähnt, gibt cuda einen Fehler in der Mitte aus, sodass einige Prozesse in einem fehlgeschlagenen Zustand enden. Also endlich "sudo reboot" machen. Gehen Sie dann zurück zu if __name__ ==" __main__ ":, warten Sie auf einen Neustart mit Schlaf und führen Sie dann denselben Befehl erneut aus.

#Zugriff mit ssh und Ausführung von Befehlen
def run_jp():
    #Wechseln Sie in das Projektverzeichnis
    with cd('~/project/'):
        #Aktivieren Sie die Einstellungen für virtualenv
        with prefix('. ~/tensorflow-env/bin/activate'):
            #Befehlsausführung
            run('time python run_jp.py', warn_only=True)
            #Starten Sie den Server neu (stellen Sie sicher, dass die Sudo-Einstellung ohne Kennwort aktiviert ist).
            run('sudo reboot')

Recommended Posts

Starten Sie den Server während der Fabric-Verarbeitung neu
Informationen zum Verhalten der Warteschlange während der Parallelverarbeitung
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Probieren Sie den Taxii-Server aus (1. Servereinstellungen)
Starten Sie den IPython-Notebook-Server