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

Calcul scientifique Python Discussion :

Comment est-ce possible de saturer la mémoire avec un dataset de taille inférieure à la mémoire?


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut Comment est-ce possible de saturer la mémoire avec un dataset de taille inférieure à la mémoire?
    Pour commencer j'utilise un notebook jupyter et voici comment j'importe mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %%time
    import pymongo
    from pymongo import MongoClient
    connection         = MongoClient()
    db                 = connection.adb
    games=list(db.Collection.find({}).limit(100000))
    ça prend Wall time: 54.7 s à être fait, tandis que la taille de l'objet games est de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    sys.getsizeof(games) ##879840 bytes, so 0.87984 MB
    L'objet games est une liste de dictionnaires puisqu'il est issue d'un tas de fichiers json. Notons que les 100 000 fichiers ici sont proches de ce que la collection comporte en entier: 143 403 fichiers.

    Maintenant concernant le code ci-dessous avec lequel je fais un dask.dataframe prend 9min 37s.

    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
    import dask.dataframe as dd
    import pandas as pd
     
    def fonction_df(game):
        try:
            df=pd.DataFrame(game, index=[game['_id']]*len(game['rank']))        
            return df
        except:
            print('problem with:{}'.format(game['_id']))
     
    dfs=list(map(lambda game: 
          fonction_df_dask(game),
          games)) ##list of dictionnaries where each one is a game
     
    df=delayed(dd.concat)(dfs,axis=0,interleave_partitions=True)
    Le type de df est dask.delayed.Delayed et sa taille vaut 160 bytes. D'ailleurs quelque soit le nombre de fichiers importé, 100 ou même 1000, indique toujours 160 bytes.

    Maintenant pour éviter une saturation de la mémoire je vais appliquer la méthode compute() sur df mais avec un échantillon encore plus réduit de 100 fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type(df.compute()) # donne un objet dask.dataframe.core.DataFrame.
    Sa taille se réduit encore par rapport à précédemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sys.getsizeof(df.compute())
    112 bytes.

    Mais un objet dask.dataframe.core.DataFrame n'est pas très utile à la visualisation des données, comme vous pouvez le voir ci-dessous:

    npartitions=471 _id A B ...
    1 object object object ...
    2 ... ... ... ...
    ... ... ... ... ...
    100 ... ... ... ...

    Dask Name: concat-indexed, 445568 tasks

    Pour avoir un dataframe utilisable pour jeter un oeil sur les données j'utilise . La taille des données pour les 100 fichiers passent à 3.42MB, et devient un objet pandas.core.frame.DataFrame tel que c'est dit dans la documentation de dask d'ailleurs. J'imagine donc qu'avec la totalité des fichiers 143 403 files on atteindrait environ 3.4GB et même un peu plus.

    Mais le soucis pour 100 fichiers c'est que ces 3.42MB lui prenne 43s à être executé avec df.compute().compute(). En tentant de passer à 1000 fichiers ça prenait trop de temps j'ai interrompu le kernel. Cette fois la taille dépend vraiment du nombre de fichiers importés.
    Pourtant en regardant mon gestionnaire de tâches j'ai 3085Mo de disponibles avant de lancer ces opérations.

    La taile de 3.42MB me semble ridicule par rapport à au 3Go disponibles et ça prend presque 1 minute. Pour 34.2MB ça prend un temps pas possible que j'ai même pas pu calculé. Comment est-ce possible?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Plusieurs choses:

    • sys.getsizeof retourne juste la taille d'un objet et non de ce qu'il contient.
    • Charger un fichier de 3/4Go en mémoire est une chose, demander à Pandas de structurer tout çà pour en faire un Dataframe en est une autre et çà va avoir des impacts sur la mémoire et la durée.
    • Utiliser au mieux les ressources de la machine pour obtenir des temps de réponses raisonnables dépend de la taille du problème à traiter.
      Par exemple, si on peut trier avec n'importe quel algorithme une liste de 10 éléments en un temps raisonnable....
      Par contre pour trier des dizaines de millions d'items impossibles à charger en mémoire car il faudrait faire travailler 50 CPU pour obtenir des temps de réponse acceptables... c'est pas avec les algo. de bases qu'on pourra s'en sortir.



    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    [*]sys.getsizeof retourne juste la taille d'un objet et non de ce qu'il contient.
    Ça j'ai vu, c'est pour ça que j'ai précisé la taille ET le type.

    Citation Envoyé par wiztricks Voir le message
    [*]Utiliser au mieux les ressources de la machine pour obtenir des temps de réponses raisonnables dépend de la taille du problème à traiter.
    Par exemple, si on peut trier avec n'importe quel algorithme une liste de 10 éléments en un temps raisonnable....
    Par contre pour trier des dizaines de millions d'items impossibles à charger en mémoire car il faudrait faire travailler 50 CPU pour obtenir des temps de réponse acceptables... c'est pas avec les algo. de bases qu'on pourra s'en sortir.
    - W
    Certes 10 c'est pas suffisant mais j'ai bien précisé que ça durait très longtemps même à 1000 pour une taille dérisoire. Pcq oui c'est une taille dérisoire pour du pandas, j'ai déjà chargé plus lourd que 1000 fichiers, beaucoup plus ça durait plusieurs dizaine de minutes, mais là je vous dit vraiment que c'est interminable et donc ça ne m'aide pas pcq ça n'explique pas que pour plus de fichiers dans pandas marche plus vite qu'en passant par dask.
    À la limite je m'attend plus à des pistes de solutions sur un forum de développeurs que des généralités comme Quora.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par AvySamaj Voir le message
    À la limite je m'attend plus à des pistes de solutions sur un forum de développeurs que des généralités comme Quora.
    Si vous voulez autre chose que des généralités, il faut déjà fournir de quoi reproduire le problème (et pas juste en causer).
    Et vous vous rendez bien compte que s'il faut charger 3/4Go de données en mémoire, pas grand monde prendra le temps de tout charger pour juste s'assurer que çà plante ou pas.
    Pour aller au delà, il va falloir regarder l'adéquation des ressources systèmes à ce que demande le processus qui tourne votre programme.
    Ce qui suppose d'avoir une petite idée sur comment elles sont gérées et savoir utiliser les outils qui permettent d'y regarder ce qu'il s'y passe... et cela dépend de l'environnement système.
    Et pour autant que les gens qui savent faire çà aient un peu de temps pour vous aider, c'est tellement prise de chou qu'il va falloir commencer à expliquer pourquoi vous êtes obligé de tout charger en mémoire en même temps et si tel est le cas, on va se pencher sur les performances de votre machine: si c'est une brouette ou que certains sous systèmes sont sous dimensionnés, ben çà ne fonctionnera pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous voulez autre chose que des généralités, il faut déjà fournir de quoi reproduire le problème (et pas juste en causer).
    Ca pourquoi pas mais je ne sais pas comment je pourrais vous passer les données de ma base mongo. A la limite on commençait par ça peut être, mais de toute façon j'ai pas l'impression que vous soyez venus dans l'intention d'aider vu votre discours depuis le début où vous me parlez de millions d'items alors que j'ai écris noir sur blanc qu'il y en avait 143 000. Pourquoi aller chercher dans les exagérations et de ce que j'ai pas dit? Pour pas faire avancer le schmilblick tout simplement.

    Citation Envoyé par wiztricks Voir le message
    Et vous vous rendez bien compte que s'il faut charger 3/4Go de données en mémoire, pas grand monde prendra le temps de tout charger pour juste s'assurer que çà plante ou pas.
    Pour aller au delà, il va falloir regarder l'adéquation des ressources systèmes à ce que demande le processus qui tourne votre programme.
    Là je crois qu'on parle vraiment pas de la même chose et que vous lisez pas en fait. J'ai précisé que pour des objets de quelques MB j'ai déjà des soucis alors que ma RAM dispo est elle de plus de 3Go.
    Oui toute la base chargée dans un objet pandas ferait 3.4GB, mais j'en suis même pas là dans le problème que j'expose à la fin.

    Citation Envoyé par wiztricks Voir le message
    Et pour autant que les gens qui savent faire çà aient un peu de temps pour vous aider, c'est tellement prise de chou qu'il va falloir commencer à expliquer pourquoi vous êtes obligé de tout charger en mémoire en même temps et si tel est le cas, on va se pencher sur les performances de votre machine: si c'est une brouette ou que certains sous systèmes sont sous dimensionnés, ben çà ne fonctionnera pas.
    Excusez moi votre grandeur de ne pas en savoir autant sur la gestion de mémoire et c'est pour ça que je pose des questions d'ailleurs, pcq si je savais déjà je ne demanderais même pas.
    Si votre propos c'est de me dire qu'ici c'est un microcosme où on ne parle qu'entre développeurs déjà bien expérimentés bah restez entre vous, ça m'embête mais je ferais avec. Je me demande même pourquoi vous venez réponde si d'avance ça vous embête autant. J'ai l'habitude de Stackoverflow, mais là pas de réponse, mais ça traite pas les gens comme des noobs quand ils ne connaissent pas la solution et quand ça les intéresse pas à la limite ils répondent pas pour dire "oh bah en fait votre problème il m’intéresse pas je voulais juste vous le dire". Quant à la brouette j'ignorais que les Thinkpad étaient des merdes sans nom, excusez du peu, c'est pas un avion de chasse mais c'est pas un ordi de merde non plus. Enfin quand vous aurez fini de faire des présupposés à la mord moi le nœud peut-être qu'on pourra avancer, mais pour le moment je vous sens pas prêt. Et dès fois que vous ne sauriez pas Dask est aussi prévu pour les ordinateurs qui n'ont pas une puissance phénoménale de 50CPU comme vous le disiez... 3GB c'est pas du big data non plus, si c'était en TB ouais ok, mais là on n'y est pas. Un peu de doc ça vous dit? Ah non c'est vrai vous avez pas le temps j'avais oublié.

    Bien à vous.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    J'essaie juste de vous sensibiliser sur ce qu'on appelle la complexité... i.e. les surprises qu'on a lorsqu'on multiplie la taille d'un problème d'un facteur 10, 100,... car les algorithmes ne sont pas linéaires et les ressources que pourra fournir un système limitée par un ou plusieurs goulots d'étranglements.

    Après côté résolution de problème, vous avez d'un côté un tas de causes probables (et les capacités de votre ordinateur en sont une)... et de l'autre des analyses (avec des outils et des compétences) qui vont permettre de les éliminer au fur et à mesure.

    Quant à la brouette j'ignorais que les Thinkpad étaient des merdes sans nom, excusez du peu, c'est pas un avion de chasse mais c'est pas un ordi de merde non plus.
    Ignorer l'hypothèse que votre machine puisse être sous-dimensionnée pour absorber la charge demandée, c'est juste réduire le champ d'investigations des causes possibles en disant "çà je ne veux pas l'entendre, donc pas la peine de perdre votre temps à essayer de le démontrer...".

    Ceci dit si vous utilisez mongodb et scat dans un même environnement système, c'est juste pour mettre au point des codes avec un jeu de données significatif mais réduit puis le déployer ensuite sur une architecture distribuée (plein de serveurs, de mémoire et de capacités de stockage) répondant à ces questions de limites côté ressources.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    J'essaie juste de vous sensibiliser sur ce qu'on appelle la complexité... i.e. les surprises qu'on a lorsqu'on multiplie la taille d'un problème d'un facteur 10, 100,... car les algorithmes ne sont pas linéaires et les ressources que pourra fournir un système limitée par un ou plusieurs goulots d'étranglements.
    Oui, ça me rapelle les fonctions de coût si je ne me trompe pas. Et je reconnais que ce n'est pas mon domaine bien que ça m'intéresse.

    Citation Envoyé par wiztricks Voir le message
    Après côté résolution de problème, vous avez d'un côté un tas de causes probables (et les capacités de votre ordinateur en sont une)... et de l'autre des analyses (avec des outils et des compétences) qui vont permettre de les éliminer au fur et à mesure.
    Ok dans ce cas je veux bien qu'on me demande les informations complémentaires à apporter et j'éditerais en fonction de ce qu'on me demande quitte a écrire dans le code un jeu de données simulées qui correspond à ce que j'ai réellement.

    Citation Envoyé par wiztricks Voir le message
    Ignorer l'hypothèse que votre machine puisse être sous-dimensionnée pour absorber la charge demandée.
    J'ai une machine qui n'est pas un tacos c'est tout ce que je veux dire. 8GB avec 4 coeurs virtuels c'est encore commun si vous voulez, j'avais d'ailleurs moi même changé la RAM pcq avec ses 4Go initiaux rien que de naviguer sur le net c'était une épreuve, et mon ordinateur malgré son âge est bien plus rapide et rame moins qu'un bon paquet des tout récent que j'ai eu en main. J'ai pas envie d'ignorer qu'il est peut être un problème, mais je vous dit que j'ai déjà chargé des choses plus lourde avec et il ne m'a pas fait ce coup là c'est tout. Donc spécifions ce que je dois dire de lui.

    Citation Envoyé par wiztricks Voir le message
    Ceci dit si vous utilisez mongodb et scat dans un même environnement système, c'est juste pour mettre au point des codes avec un jeu de données significatif mais réduit puis le déployer ensuite sur une architecture distribuée (plein de serveurs, de mémoire et de capacités de stockage) répondant à ces questions de limites côté ressources.
    Je ne suis pas sûr de comprendre exactement. Si par "plein de serveurs" vous me parlez de cluster, c'est pas le cas. C'est un projet perso, ça se mesure même pas Go dans ma base mongo pour le moment (tout en sachant que db.collection.stats() ne donne pas la vraie de taille de ce qu'on m'a dit, d'où le fait que j'ai regardé la vraie taille dans le notebook), j'ai juste pris mongo pcq ça convenait mieux au format de mes données que le genre base relationnelle. J'ai pas les moyens de me faire un cluster chez moi et on ne fait pas un cluster pour quelques Go de ce que je sais. Mais peut être parlez-vous de serveurs virtuels je ne sais pas.
    Et scat je ne sais pas ce que c'est du tout je vais me renseigner.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,

    Au peu que j'ai pu lire de la doc de dask, il manque un renseignement: comment as-tu configuré la gestion du compute ?
    Cordialement.

  9. #9
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Au peu que j'ai pu lire de la doc de dask, il manque un renseignement: comment as-tu configuré la gestion du compute ?
    Je n'ai pas fait de configuration sur la méthode compute(). Le code que j'ai donné c'est vraiment tout ce que j'ai fait avec la bibliothèque dask.

    Bien à vous.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Donc, tu es en "single machine" sur une configuration threads (selon le doc).

    Déjà, pour savoir si ce n'est pas une des threads qui bloque bêtement, est-ce que tu as essayé en configuration compute(scheduler='single-threaded') ?

    Relève aussi les temps, histoire de comparer avec le mode par défaut.

    soit dit en passant, si tu ne tournes que sur un seul coeur/1 thread cpu, la conf par défaut n'a aucune utilité, vaut mieux rester en single-threaded.

    Et dans le cas de plusieurs coeurs/thread cpu, on s'arrange pour avoir au plus autant de threads qu'il y a de coeur/threads cpu et voir 1/3 en moins en cas d'entrée sortie (au dela, il y aura de la latence lié à de l'attente de ressources coeur/thread/IO)
    Cordialement.

  11. #11
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Donc, tu es en "single machine" sur une configuration threads (selon le doc).
    Déjà, pour savoir si ce n'est pas une des threads qui bloque bêtement, est-ce que tu as essayé en configuration compute(scheduler='single-threaded') ?
    Alors, après avoir plancher là dessus, je dois rectifier des choses histoire que je sois claire dans la suite.
    Déjà il semblerait selon la doc que le code ci-dessous ne soit pas une bonne pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df=delayed(dd.concat)(dfs,axis=0,interleave_partitions=True)
    J'ai pu identifier qu'il n'était pas le soucis non plus donc pour le moment je vais le bannir.

    Ce que j'ai donc fait c'est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    df=dd.concat(dfs,axis=0,interleave_partitions=True)#Donc pas de dask.delayed on a directement un dask.dataframe
     
    %%time
    sys.getsizeof(df3.compute(scheduler="processes"))#dure 1min 36s, taille: 1.7MB
     
    %%time
    sys.getsizeof(df3.compute(scheduler="threads"))#dure 41.5 s, taille: 2.2MB
     
    %%time
    sys.getsizeof(df3.compute(scheduler="single-threaded"))#dure 38.6 s, taille 2.2MB
     
    %%time
    sys.getsizeof(df3.compute())#dure 41.3 s, taille 2.2MB
    A titre de comparaison, j'ai appliqué la fonction concat de pandas, et comme je vous le disais c'est plus rapide étonnement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %%time
    sys.getsizeof(pd.concat(dfs))#dure 493 ms, taille 2.2MB
    Je constate plusieurs choses:
    • scheduler="processes" est beaucoup plus long mais économise la mémoire. Que les autres valeurs de l'argument scheduler donne la même taille que pandas.DataFrame n'a rien d'étonnant vu ce que dit la documentation de dask à ce propos.

    • La valeur "single-threaded" est plus rapide que les autres. Je suis étonnée dans le sens que mon processeur est normalement un dual-core avec 4 coeurs virtuels. Dois-je comprendre que j'ai un coeur HS?

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par AvySamaj Voir le message
    La valeur "single-threaded" est plus rapide que les autres. Je suis étonnée dans le sens que mon processeur est normalement un dual-core avec 4 coeurs virtuels. Dois-je comprendre que j'ai un coeur HS?
    Normalement, sous Windows vous avez un Performance Monitor qui vous permet de voir l'utilisation de chaque cœur.
    Mais je serais curieux de savoir combien de disques durs vous avez sur votre machine.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Mais je serais curieux de savoir combien de disques durs vous avez sur votre machine.
    Ah oui? Et pourquoi? Vous pouvez m'expliquer svp?
    Vous avez réfléchi aux autres informations nécessaires comme je vous avais demandé autrement?

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par AvySamaj Voir le message
    Ah oui? Et pourquoi? Vous pouvez m'expliquer svp?
    Parce que vu les problèmes rencontrés (et les discussions de machine à café avec mes collègues), il semble probable que vous ayez tout vous fichiers sur le même disque dur. Si cela est confirmé, je vous exposerai brièvement la théorie qu'il y a dérrière.

    Citation Envoyé par AvySamaj Voir le message
    Vous avez réfléchi aux autres informations nécessaires comme je vous avais demandé autrement?
    Non: pas le temps.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    je vous exposerai brièvement la théorie qu'il y a dérrière.

    Non: pas le temps.

    - W
    Alors on en reparlera quand vous aurez le temps pcq là c'est carrément méprisant de venir pour me donner des leçons et me dire que vous avez pas le temps alors que je ne suis pas venu vous sonner c'est vous qui vous êtes invité tout seul. On rêve... Je vous le répète si vous n'avez pas le temps qu'est ce qui vous pousse à intervenir? Question rhétorique, vous pouvez vous économiser de répondre, je vous sais déjà bien occupé.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    La question sur les disques n'est pas anodine, c'est juste pour essayer de comprendre la latence I/O qui peut induire les différences entre dask et panda.

    Après pour l'explication du pourquoi le "single-threaded" est plus efficace que le "threads" ou "processes" est la suivante:

    Déjà, dans un premier temps, il faut savoir que le multi-threading en python n'utilise pas le multi-core et donc l'interêt de son utilisation se situe sur les taches qui font surtout de l'I/O.

    Le multi-processing est par nature multi-core dépendant de l'OS: ici, c'est l'OS qui gère puisque ce sont des processus à part entière qui sont créés, ce qui est aussi plus gourmand en mémoire puisque celle-ci n'est pas partagée.

    Après, ce qui est très couteux c'est la création d'un contexte pour un nouveau processus ainsi que pour un thread (mais beaucoup moins que le processus) : dans ton cas, c'est la principale cause qui fait que le mode "single-threaded" soit plus rapide que les autres modes.
    Cordialement.

  17. #17
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    La question sur les disques n'est pas anodine, c'est juste pour essayer de comprendre la latence I/O qui peut induire les différences entre dask et panda.

    Après pour l'explication du pourquoi le "single-threaded" est plus efficace que le "threads" ou "processes" est la suivante:

    Déjà, dans un premier temps, il faut savoir que le multi-threading en python n'utilise pas le multi-core et donc l'interêt de son utilisation se situe sur les taches qui font surtout de l'I/O.

    Le multi-processing est par nature multi-core dépendant de l'OS: ici, c'est l'OS qui gère puisque ce sont des processus à part entière qui sont créés, ce qui est aussi plus gourmand en mémoire puisque celle-ci n'est pas partagée.

    Après, ce qui est très couteux c'est la création d'un contexte pour un nouveau processus ainsi que pour un thread (mais beaucoup moins que le processus) : dans ton cas, c'est la principale cause qui fait que le mode "single-threaded" soit plus rapide que les autres modes.
    J'ai un seul disque dur vu que c'est un ordinateur portable. Je sais qu'il y a moyen de virer le lecteur CD pour y mettre un disque dur à la place histoire d'en avoir deux. J'ai une séparation virtuelle entre ma machine et son système, du type un lecteur Q: et un lecteur C:, mais windows et tout le reste des programmes sont sur le même, le C:.
    Donc si je comprends bien, vouloir faire de l'out-of-core avec un seul disque dur à sa disposition c'est impossible? Est-ce qu'un disque dur externe branché par USB peut pallier à celà? Et sinon quel genre de type de disque dur interne faudrait-il ajouté pour cela?

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par AvySamaj Voir le message
    Donc si je comprends bien, vouloir faire de l'out-of-core avec un seul disque dur à sa disposition c'est impossible?
    Si vous paralléliser vos accès disques, vous augmentez la demande en bande passante de ce côté là.
    Un disque fait ce qu'il peu pour y répondre mais si la demande dépasse 75% de ses capacités, vous avez un phénomène de file d'attente qui se crée: les temps de réponses ne sont plus linéaires.

    Ajouté à çà, le disque est partagé avec la mécanique de pagination de l'OS i.e. lorsque la demande mémoire augmente, on va écrire des pages mémoires sur disque pour libérer de la place. Et comme le disque est saturée, si l'OS rame tout rame.

    Je sais qu'il y a moyen de virer le lecteur CD pour y mettre un disque dur à la place histoire d'en avoir deux.
    C'est quelque chose à essayer.
    Ceci dit, entre le disque et la mémoire, il y a le contrôleur disque qui sur le matériel bas de gamme n'est pas forcément taillé pour que 2 disques doublent la capacité d'entrée sortie: vous risquez de ne déplacer la file d'attente disque que vers le contrôleur.
    Dans une configuration qui fait beaucoup d'entrées sorties, il est préférable d'avoir des contrôleurs séparés (et des disques SSD) --- mais c'est pas à la portée de toutes les bourses (plusieurs contrôleurs, c'est une autre architecture IO que ne le permet la carte mère qu'on met dans les portables).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Personnellement, les meilleurs perf que j'ai pu avoir en travaillant sur un seul disque tout en étant en multi-threading ou multi-processing, c'était d'avoir un seul thread ou process qui faisait la lecture et/ou l'écriture tandis que tous les autres threads ou processus faisaient les calculs.
    Faire de l'out-of-core est-ce une figure imposée ou juste pour un effet de mode ?
    Cordialement.

  20. #20
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Faire de l'out-of-core est-ce une figure imposée ou juste pour un effet de mode ?
    Figure imposée du fait que c'est un projet personnel, et que ça m'apprend d'ailleurs. J'ai appris cette chose dans un bouquin de data-science alors que je n'en voyais pas la trace dans les blogs, du moins c'est pas ce sur quoi ils se penchent d'emblée. L'effet de mode aujourd'hui c'est surtout payer des services clouds très cher il me semble.
    Quant à la carte mère j'ai pas idée de si c'est du bas de gamme, je sais juste que c'est du lenovo 7859CTO, c'est même pas spécifié dans les caractéristiques du produit avec motherboard qui ne s'y trouve pas.
    Donc si je suis votre raisonnement rien d'anormal à ce que scheduler="single-threaded" marche mieux que le reste? Bien que pour pandas il s'agisse d'un problème de disque dur?

Discussions similaires

  1. Erreur intermitente ! Comment est-ce possible ?
    Par shenzhu dans le forum Général Java
    Réponses: 6
    Dernier message: 17/05/2010, 20h18
  2. HashMap en multi-thread et NullPointerException ; comment est-ce possible ?
    Par sami44 dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 09/01/2008, 15h43
  3. Negociation, comment est ce possible?
    Par Jim_Nastiq dans le forum Paie
    Réponses: 11
    Dernier message: 31/07/2007, 16h03
  4. Comment est-ce possible ?
    Par Jibees dans le forum C
    Réponses: 25
    Dernier message: 05/09/2006, 11h08

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