[PYTHON] Redémarrez le serveur pendant le traitement Fabric

J'ai implémenté TensorFlow Stock Forecast Series, mais je l'ai codé sur un Mac et je l'ai codé sur un PC avec un GPU (TITAN X) rsync. Je cours après avoir synchronisé avec. Cependant, lorsque j'exécute un programme qui utilise le GPU environ 200 fois, la bibliothèque cuda (7.5) donne une erreur et tout échoue après. Quand j'ai eu une erreur là-bas, j'ai redémarré manuellement le serveur, mais j'ai utilisé Fabric pour le redémarrer automatiquement.

Tout d'abord, voici le code complet.

fabfile.py


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


# -Lors de la connexion avec ssh en ajoutant i.Les paramètres de chemin tels que cuda définis dans bashrc sont valides
env.shell = '/bin/bash -l -i -c'
#Adresse du serveur
env.hosts = ['10.0.1.17']
#Nom d'utilisateur de connexion (pas de mot de passe car il s'agit d'une authentification par clé privée)
env.user = 'akiraak'


#Accès avec ssh et exécution de commandes
def run_jp():
    #Déplacer vers le répertoire du projet
    with cd('~/project/'):
        #Activer les paramètres virtualenv
        with prefix('. ~/tensorflow-env/bin/activate'):
            #Exécution de la commande
            run('time python run_jp.py', warn_only=True)
            #Redémarrez le serveur (assurez-vous que le paramètre sudo sans mot de passe est activé)
            run('sudo reboot')


if __name__ == "__main__":
    #Répéter l'exécution de la commande et redémarrer sur le serveur
    while True:
        try:
            #Exécutez ssh
            execute(run_jp)
        except Exception as e:
            print(e)
        #Attendez un moment jusqu'à ce que le serveur redémarre
        time.sleep(60)

Fabric vous permet de vous connecter au serveur avec ssh et d'écrire l'exécution de la commande en code python.

Exécutez ce code depuis votre Mac pour contrôler le serveur.

run_jp () est une fonction qui exécute une commande après avoir accédé à ssh. Normalement, le processus est exécuté avec la commande suivante.

$ fab run_jp

Cette fois, je veux sélectionner "Exécuter le traitement" -> "Redémarrer le serveur" -> "Exécuter le traitement", donc au lieu d'utiliser la commande fab, exécutez le code python normalement.

$ python fabfile.py

Ici, run_jp () est exécuté et le processus d'attente de 60 secondes après le redémarrage est effectué.

if __name__ == "__main__":
    #Répéter l'exécution de la commande et redémarrer sur le serveur
    while True:
        try:
            #Exécutez ssh
            execute(run_jp)
        except Exception as e:
            print(e)
        #Attendez un moment jusqu'à ce que le serveur redémarre
        time.sleep(60)

Dans run_jp () qui effectue le traitement réel, déplacez-vous vers le répertoire où se trouve le code (~ / project /), activez le paramètre virtualenv (. ~ / Tensorflow-env / bin / activate), puis python run_jp J'utilise .py.

Dans python run_jp.py, plusieurs processus sont exécutés dans différents processus, mais comme mentionné ci-dessus, cuda donne une erreur au milieu, donc certains processus se terminent par un état d'échec. Alors enfin, faites sudo reboot. Après cela, revenez à ʻif name == "main": `, attendez un redémarrage avec sleep, puis exécutez à nouveau la même commande.

#Accès avec ssh et exécution de commandes
def run_jp():
    #Déplacer vers le répertoire du projet
    with cd('~/project/'):
        #Activer les paramètres virtualenv
        with prefix('. ~/tensorflow-env/bin/activate'):
            #Exécution de la commande
            run('time python run_jp.py', warn_only=True)
            #Redémarrez le serveur (assurez-vous que le paramètre sudo sans mot de passe est activé)
            run('sudo reboot')

Recommended Posts

Redémarrez le serveur pendant le traitement Fabric
À propos du comportement de la file d'attente pendant le traitement parallèle
python3 Mesurez la vitesse de traitement.
Essayez le serveur Taxii (1. Paramètres du serveur)
Lancez le serveur de notebook IPython