IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de soumission d'un job en parallèle sur qsub


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Par défaut Problème de soumission d'un job en parallèle sur qsub
    Bonjour,

    Je ne sais pas vraiment où poster cette question. J'ai cherché mais n'ai pas vraiment trouvé de place adaptée donc désolé si ce fil de discussion n'est pas au bon endroit

    Je vais vous exposer mon problème. J'ai un job en parallèle à soumettre à un centre de calcul (un code en fortran parallélisé avec du openMPI).
    Or pour le lancer le code en fortran, je lance un script python qui étudie un fichier (de maillage) et écrit dans un autre fichier les résultats de qu'il lit (python.res). Puis ce script python lance le code fortran en parallèle à la toute fin du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import os 
    ....
     
    os.system("mpirun -np {0} exe".format(nbSsDomains+1))
    où nbSsDomains a été crée par python à la lecture du premier fichier (celui de maillage).
    Jusqu'ici tout se passe bien.
    Mais lorsque les jobs se lancent en parallèle ils disent tous qu'il manque le fichier "python.res". En fait ce qu'il se passe (en tout cas j'ai l'impression) c'est que la dernière ligne du code python est lancée avant que python ne crée le fichier python.res. Pire encore, d'après mes tests, j'ai l'impression que le processeur qui gère ce script Python attend que tous les autres proc aient fini leur travail avant d'écrire quoi que ce soit. En effet je fais un "print" dans le script python et il ne s'affiche qu'après la fin du code fortran.

    Pour l'instant je suis donc obligé de m'assurer de bien crée le fichier python.res avant de lancer le job sur le serveur de calcul.
    Des idées pour s'affranchir de ceci ou bien du pourquoi du comment ?

    Voilà, j'espère avoir été clair. Et merci de votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si le fichier créé par Python est volumineux, il est parfois nécessaire de forcer l'écriture avec flush().

    Toutefois, les disques durs utilisent, eux aussi, un tampon et on ne peut les forcer à aller plus vite, dans ce cas on fait une temporisation.

    Cependant, tu dis que le fichier n'existe pas, or python crée le fichier dès l'ouverture en écriture donc c'est que ta commande mpirun est envoyée trop tôt.

    Il semble que la structure de ton code soit en cause.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Par défaut
    Bonjour,

    Merci pour ta réponse matinale VinsS. Le fichier crée par python n'est pas volumineux (une centaine d'octets tout au plus) donc ce n'est pas ça le problème.
    Je peux te montrer mon code python si tu veux. Mais je fais la commande mpirun à la toute fin. C'est peut être une histoire (qui me dépasse) de gestion de processeurs car je demande 21 proc sur mon mpirun mais je me demande qui gère le script python pour justement réaliser cette commande mpirun.

    Bonne journée !

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben oui, faudra montrer le code.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    # -*-coding:utf-8 -*
     
    import os
    import sys
    import numpy
     
     
    if len(sys.argv) > 1:
        filename = sys.argv[1]
     
    else:
     
        filename = raw_input("Entrer le nom du fichier mesh \n")
     
        # Si jamais filename n'est pas specifie on lui donne testpart.msh
        # Valeur par defaut pour gagner du temps sur les tests
        if filename  == "":
            filename = "testpart.msh"
     
     
     
     
    # Test de l'existence du fichier de maillage
    try:
        with open(filename): pass
    except IOError:
        print "*************************************************************"
        print "      ERREUR : le fichier spécifié n'existe pas              "
        print "*************************************************************"
        sys.exit(1)
     
     
     
    file = open(filename, "r")
     
    while 1:
        f = file.readline()
        if list(f) == ['$', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', '\n']:
            break
     
    size = int(file.readline())
    A = numpy.zeros(shape=(size,1))
     
    for i in range(size):
        f = file.readline()
        f = numpy.fromstring(f, dtype=int, sep=' ')
        A[i] = f[6]
     
    nbSsDomains = int(numpy.amax(A))
    print "*************************************************************"
    print "**                 INFOS PYTHON                              "
    print "**  Le fichier lu est : ", filename
    print "**  Le nombre de sous-domaines est :", nbSsDomains
    print "**  Ce nombre est stocké dans le fichier : " "python_res.txt"
    print "*************************************************************"
    print
    print
    print
     
    # Ecriture dans le fichier résultat lu par le code fortran
    resultats = open("python_res.txt", "w")
    resultats.write(filename)
    resultats.write('\n')
    resultats.write(str(nbSsDomains))
     
     
    resultats.close()
     
    file.close()
     
    # Lancer le programme : mpirun -np nbSsDomains+1 exe
    os.system("mpirun -np {0} exe".format(nbSsDomains+1))

    Voici
    Merci beaucoup.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Comment ton code fortran a connaissance de l'emplacement du fichier "python_res.txt"

    Avec ton code, le fichier est créé dans le dossier courant, celui où se trouve le script python.

    Si tu confirmes que le fichier "python_res.txt" est bien créé alors le problème est peut-être son emplacement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec soumission de Job
    Par ambre dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/07/2008, 12h52
  2. Plug-Board : problème de soumission
    Par Vlatiska dans le forum ASP.NET
    Réponses: 5
    Dernier message: 19/05/2008, 10h18
  3. Réponses: 3
    Dernier message: 18/02/2008, 11h56
  4. problème de soumission
    Par Llaur76 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 02/08/2007, 17h22
  5. Problème d'exécution d'un job Oracle
    Par KuBi4K dans le forum SQL
    Réponses: 3
    Dernier message: 01/06/2007, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo