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')