|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bonjour, je commence à faire la récolte d'information au sujet du parallélisme sous SAS.
En effet dans ma boîte SAS est implanté sur plusieurs serveurs et (à l'instar de revolutionR pour ceux qui connaissent) je cherche à adapter ma macro assez lourde en terme de traitement de manière à pouvoir lancer certaines étapes en parallèle sur les différents serveurs disponibles. J'ai lu à la va vite sur je ne sais plus quel site que désormais celà était possible aussi je souhaitais vous demander si vous connaissez certains site ou ouvrage disponible sur le net permettant d'en savoir plus, voir fournissant les modifications à faire sur la syntaxe d'un macro-pogramme SAS de base. Par la même occasion, si certains ont déjà procédé à ce type de manipulation, leur demander si c'est accessible ou réservé à des gens beaucoup plus experts. En vous remerciant d'avance pour votre intérêt à mon topic. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
http://www.sas.com/offices/europe/fr...ss_CONNECT.pdf
La parallélisation nécessite la modification de ton programme!!!
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Merci bahraoui
|
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Géraldine CADE DESCHAMPSSupport Clients SAS (France et Europe) Inscription : février 2010 Messages : 62 ![]() |
Bonjour,
En effet le parallélisme est possible grâce à MP Connect : on désigne soit-même la machine sur laquelle telle partie du code va s'exécuter. Maintenant, si l'on a une architecture de type OMA avec l'ordonnanceur LSF, on peut aller plus loin avec le Grid : http://support.sas.com/rnd/scalability/grid/ On va désigner plusieurs machines potentielles, sur lesquelles tournent un service LSF. Quand on lance le programme, LSF va déterminer la/les machines les plus disponibles pour exécuter le programme. En amont le programme est construit pour une soumission en MP Connect. C'est LSF qui va gérer l'exécution en parallèle sur plusieurs machines. Géraldine Cade-Deschamps Support Clients SAS. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bonjour, je reviens à la charge au sujet du parallélisme sous SAS étant donné que j'ai enfin 2-3 jours à pouvoir m'y consacrer!
Contexte: De nombreux marqueurs que je cherche à combiner entre eux (toutes les combinaisons possibles en fait <- encore une fois: merci Olivier!) et l'application de méthodes comme la régression logistique ou l'analyse discriminante sur toutes ces combinaisons. Ca (grâce à Sam, Brice et Olivier! mici mici mici mici!!!) je l'ai en macro grâce à une boucle DO qui parcours toutes les combinaisons existantes. Objectif: Estimer plusieurs combinaisons en même temps grâce au parallélisme. Déjà j'ignore si ce type de parallélisme peut être fait sous SAS, la doc "améliorer sa productivité grâce aux traitements parallèles: SAS Multi-Process CONNECT" ne semble pas décrire ce cas mais plutot le traitement de table tout cours. La doc sur "Introduction to SAS Grid Computing" semble plus approprié à ma problématique (j'avoue avoir juste parcouru à la va-vite mais ce soir je vais y jeter un oeil plus assidu). Ensuite j'ai d'assez bonnes notions sur le principe du parallélisme étant donné que j'en bouffe depuis pas mal de jours avec RevolutionR. En résumé mes questions de débutant seraient: est-ce que le type de parallélisation qui m'intéresse est faisable sous SAS? sachant que finalement il faudrait (pour commencer) juste l'appliquer sur une boucle DO, est-ce que c'est relativement facil à ceci prés que la table des résultats finaux qui se construit itération par itération devra être conçu et mis à jour autrement? Merci pour vos précédentes réponses et votre intérêt à mon topic. |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : septembre 2009 Messages : 60 ![]() |
Hello,
Oui, pourvu que tu puisses faire du sas/connect avec chacun de tes serveurs, tu peux effectuer à chaque incrément d'une boucle, lancer une session MP Connect distincte sur un de tes serveurs et donc paralléliser l'exécution global de ton traitement. Il faut juste gérer que chacune de tes sessions MP Connect est indépendante des autres et va générer un bout de data, qu'il faudra sans doute rassembler en un seul morceau une fois que toutes les sessions MP Connect auront abouti. De mémoire, cela se gère avec des macro variables qui permettent de connaître l'état de chaque session connect. |
|
|
00
|
|
|
#7 | ||
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Merci pour ton intérêt à mon topic et ta réponse wise2!
Finalement je me fais la main avec la première doc qu'on m'a conseillé: "améliorer sa productivité grâce aux traitements parallèles: SAS Multi-Process CONNECT" Et j'ai déjà un souci sur l'exemple qu'on peut trouver page 16: Code :
|
||
|
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Inscription : septembre 2009 Messages : 60 ![]() |
Oui dans sascmd, il faut indiquer la ligne de commande qui permet de lancer une nouvelle session SAS fille.
Si ton administrateur sas est un pro, il aura déjà renseigné cette option au démarrage de ta session. par exemple : Code :
OPTIONS SASCMD="%sysget(SASEXE)/sas -CONFIG /applications/sas/cfg/sasv9.cfg"; Code :
waitfor _all_ ; pour indiquer d'attendre la fin de toutes les sessions MP Connect. |
||
|
|
00
|
|
|
#9 | ||
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bonjour Wise2, je viens de voir mon admin et de tester tes syntaxes (merci sincérement pour ton intérêt à mon problème, je gagne un temps fou grace à toi!) et j'ai un souci, voici mon code:
Code :
sur l'interface d'EG... quelquechose qui va pas dans mes liens? ou la mise en évidence qu'il faut que mon admin active quelque chose pour que ça puisse marcher? Une autre question que je voulais te poser, comment sait-on quand ça marche? est-ce que par exemple j'aurais dans ma barre de tache deux processus SAS en cours d'execution ou bien la réussite de la manipulation se voit uniquement sur la log? |
||
|
|
00
|
|
|
#10 | ||
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bon autant pour moi, apparamment ça roule bien vue qu'en diminuant la taille de la boucle DO ça tourne, néanmoins j'ai le message d'erreur suivant:
Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre du Club
![]() Inscription : septembre 2009 Messages : 60 ![]() |
Hello,
Le MEMSIZE=0 génére un warning mais à priori pas une erreur. Donc même s'il ne faut pas exécuter un programme avec MEMSIZE=0, il y a un autre problème. Je ne peux pas tester de mon côté (je n'ai pas de SAS/Connect !), mais si tu indiques options sascmd= ... tu n'as plus besoin de mettre sascmd="sas" dans le rsubmit. je tenterai bien quelque chose comme ça : Code :
Pour vérifier et suivre l'exécution des tes process MP Connect, tu peux si tu as accès te connecter en ssh sur le serveur et vérifier les process avec un ps -ef | grep sas. Ou encore écrire la log de chaque session MP dans un fichier séparé (LOG="/tmp/task2.log"). Il faut vérifier que tu as bien un accès en écriture sur /tmp. |
||
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Salut Wise2 et encore merci de ton intérêt! j'ai testé ta syntaxe et j'ai un souci à cause du lien généré pour le libname workpere, seulement ça vient surement d'un manque de droit, j'attends donc de croiser mon admin pour lui en parler, si je l'enlève on dirait que ça tourne mais logiquement il ne stocke pas les tables dans un libname et doc ne peut pas les récupérer à la fin pour les merger.
Dés que j'ai vue mon admin et tester avec ses modifs je te tiens au courant. |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : septembre 2009 Messages : 60 ![]() |
Salut,
Pour contourner le problème avec workpere, tu peux utiliser une librairie permanente que tu allouera sur la session mere et toutes les sessions filles car sinon effectivement quand une session fille se termine, elle vide sa work et donc toutes les tables temporaires sont perdues. |
|
|
00
|
|
|
#14 | ||||||
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bonjour, je remonte ce topic car j'ai continué à creuser de mon coté et j'ai enfin pu faire tourner l'exemple avec la syntaxe de base disponible dans la doc et la page que j'avais cité.
Maintenant j'aimerais complexifier le machin: Code :
Seulement je n'arrive pas à identifier mes nouveaux problèmes: Code :
Code :
J'ai un peu de mal à comprendre en fait... enfin si je comprends que de paralléliser comme ça ça semble ne pas marcher, mais en passant par cette syntaxe de parallélisation (pour le moment c'est la seule que j'arrive à faire marcher) est-il possible de rectifier pour que mon objectif soit remplit? En remerciant (d'avance) les personnes qui se sont intéressées et s'intéressent encore à mon problème. |
||||||
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
C'est pas dû au fait qu'il te manque des % ?
|
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Je suis consternant... ceci dit dans l'exemple de la doc ils y étaient pas non plus et ça marchait |
|
|
00
|
|
|
#17 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Autant pour moi, ça ne marche toujours pas malgré le rajout des % ... j'ai les même erreurs.
|
|
|
00
|
|
|
#18 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
regarde l'opton mprint et mfile, cela génère en clair le code macro, peut-être verras-tu pourquoi cela plante
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#19 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Rajoutes au tout début de ton programme, tu veux les valeurs de chaque macro-variables dans l'output
|
|
|
00
|
|
|
#20 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
En lisant ton code en diagonale, je me dis surtout que ta macro-variable LOOP n'existe que dans la session SAS mère et pas dans les sessions filles. Il faudrait la transmettre avec un %SYSLPUT je pense.
Idem pour les options recommandées par Brice et Stéphane : il faudrait aussi les ajouter dans les RSUBMIT pour qu'elles fassent aussi effet dans les sessions filles. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com