[Python] - Partager puissance calcul python en réseau

Résolu/Fermé
Shayajs Messages postés 4 Date d'inscription mardi 23 août 2022 Statut Membre Dernière intervention 23 août 2022 - 23 août 2022 à 02:47
Shayajs Messages postés 4 Date d'inscription mardi 23 août 2022 Statut Membre Dernière intervention 23 août 2022 - 23 août 2022 à 13:37

Bonjour,

Je me suis récemment intéressé au partage de puissance de calcul dans le cadre de simulations très gourmandes en ressources et un bon topic qui commence un peu à dater m'a beaucoup aidé à mieux comprendre entre deux ordinateurs (tournant sous Linux dans mon cas) : https://forums.commentcamarche.net/forum/affich-7503085-utiliser-la-puissance-d-un-2eme-pc-via-reseau#20

Je précise que j'ai chez moi une petite myriade d'ordinateurs avec pour certains un système Linux et d'autres Windows (tous assez "récent" pour avoir des composant compatibles) exemple du PCI Express 16x cependant, certains ordinateur tournent sous Intel alors que certains tournent sous AMD. 

Les simulations sont réalisées sur Python à cause, ou plus tôt, parce que les API proposées sont très intuitives, peu énergivores et inter-systèmes (donc reprendre un travail ou le continuer du PC Linux à la maison et le PC Windows à l'université).

Cependant, même mon ordinateur peine à me sortir des résultats dans un temps correct. Je dois attendre entre plusieurs heures et parfois plusieurs jours pour exploiter les données.

J'ai déjà tenté de réaliser un pseudo partage de ressource mais le temps de calcul était identique s'il n'était pas plus long, il attendait une réponse pour pouvoir continuer de travailler même sous plusieurs Threads, Threads que j'aimerais partager avec les autres PC.

Je me tourne vers vous pour savoir donc s'il était possible de distribuer certaines taches aux ordinateurs connectées en réseau sous Python de préférence, ou si malheureusement cela était impossible, comment pourrais-je réaliser cela avec des logiciels tiers ?

Et si cela n'est pas encore possible, quelle sont les ressources à regarder si je devais réaliser moi même toute la procédure sur Python ?

Merci énormément d'avance de vos réponses ! Même des liens vers des articles, je suis preneurs !

Windows / Chrome 104.0.0.0

A voir également:

3 réponses

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 23 août 2022 à 11:30

Bonjour,

Ça dépend de ce que tu veux faire et du programme, car :

  • Pour "déplacer un programme" d'un ordinateur à un autre, il faut sauver son état et le reprendre sur l'autre machine (voir cette discussion) ;
  • Pour partager un programme, il faut définir des tâches indépendantes que tu pourras éventuellement répartir sur plusieurs threads vue de les réunir (cf n'importe quel tutoriel sur la parallélisation ;
  • Tu peux imaginer concevoir ton programme de sorte à ce que plusieurs serveurs (les machines qui vont faire les calculs) puisse recevoir de la part d'un client des tâches à réaliser. Charge à ton programme (côté client) de recoller les morceaux une fois les calculs terminés.

Il existe aussi des solutions qui évitent de se poser ce genre de question : travailler sur une architecture comme https://colab.research.google.com/ 

Après, vus les temps de calculs que tu annonces, il faut aussi se demander dans quelle mesure les calculs que tu tentes de faire sont raisonnables (voir complexité algorithmique du programme exécuté + taille de l'instance). Parfois le problème est en lui-même difficile, parfois le problème n'est pas difficile mais l'algorithme utilisé pour le résoudre est mal conçu et coûte beaucoup plus cher que ce qu'il devrait coûter.

Prenons deux exemples :

  1. Le problème du calcul de plus court chemin dans un graphe : une manière naïve de résoudre ce problème consiste à énumérer les chemins et sélectionner le plus court. Mais le nombre de chemin à énuméré croit exponentiellement avec la taille du graphe. Cependant, le problème est dit facile, car en exploitant les propriétés du problèmes, on peut le résoudre en temps polynomial (voir par exemple  l'algorithme de Dijkstra). Dit autrement le problème est facile (car il se résout en temps polynomial), mais si l'algorithme est mal conçu, le coût de ce dernier peut être exponentiel.
  2. Le problème de coloration d'un graphe est NP-difficile, ce qui signifie que le problème est "compliqué" et qu'à moins que P=NP, tu ne peux pas trouver d'algorithme polynomial et donc que le problème ne pourra pas être résolu avec un algorithme polynomial. Si en soi, un machine est tout à fait possible de résoudre ce problème pour une "petite" instance, cela risque d'être beaucoup trop coûteux en temps de calcul pour une "grande" instance.

Bonne chance

1
Shayajs Messages postés 4 Date d'inscription mardi 23 août 2022 Statut Membre Dernière intervention 23 août 2022
23 août 2022 à 12:44

Merci mille fois, je vois un peu mieux le problème et les solutions possibles ! Je garde précieusement les liens que tu m'as envoyé et je vais prendre la semaine pour réfléchir correctement sur tout les points que tu as abordé mais ce sont vraiment des sujet très passionnant !

Merci du temps que tu m'as accordé, je saurais l'utiliser à bon escients !

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
23 août 2022 à 12:09

bonjour,

Plutôt que de voir cela comme un partage de puissance de calcul, il est préférable de voir cela comme une distribution de tâches.

Si tu peux découper le travail en tâches indépendantes, chaque ordinateur disponible peut effectuer une tâche, et renvoyer le résultat.

Ton défi, c'est donc de trouver une façon de découper ton problème en de multiples taches indépendantes.
 

1
Shayajs Messages postés 4 Date d'inscription mardi 23 août 2022 Statut Membre Dernière intervention 23 août 2022
23 août 2022 à 12:46

Je note ! Je réfléchirais sous cette forme dorénavant. Merci pour ton temps ! 

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
23 août 2022 à 13:08

Les threads Python ne travaillent pas simultanément.  Regarde plutôt multiprocessing.

Dans les clouds, tu peux louer une machine à multiples processeurs, qui te permettra sans doute d'exécuter rapidement ton programme adapté au multiprocessing.

1
Shayajs Messages postés 4 Date d'inscription mardi 23 août 2022 Statut Membre Dernière intervention 23 août 2022
23 août 2022 à 13:37

D'accord, intéressant, je vais jeter un oeil à ton lien ! Merci

0