[python] Vérifier la consommation de mémoire des variables

Cet article est le 8ème jour du Furukawa Lab Advent_calendar. Cet article a été rédigé par un étudiant du Furukawa Lab dans le cadre de leur apprentissage. Le contenu peut être ambigu ou l'expression peut être légèrement différente.

introduction

En tant qu'axes de comparaison des algorithmes d'apprentissage automatique d'une même tâche, stabilité d'apprentissage (dépendance de la valeur initiale), explication possible, (précision dans l'apprentissage supervisé), précision, rappel ( Il y a aussi un indice appelé Recall)) Et il y a un "montant de calcul".

Il est difficile d'adopter un algorithme qui tend à augmenter la quantité de calcul pour qu'il ne rentre pas dans la mémoire en fonction de la situation (temps / ressource de calcul). (Ex: $ \ mathcal {O} (nombre de données ^ 3) $ une fois Le nombre de données d'entraînement doit être limité à 1 000 (1 000 $ ^ 3 = 10 milliards \ Fallingdotseq 10 Go $) au maximum.

En outre, même si le montant du calcul est faible, il peut ne pas être mis en œuvre dans ce calcul.

Cet article décrit comment vérifier la consommation de mémoire d'un programme python.

No package Puisque @shiracamus a spécifié comment connaître la taille de la mémoire sans rien importer, je l'ajouterai au texte.

import numpy as np
N = 1000
D = 3
X = np.random.randn(N,D)
X.__sizeof__()
# 24112

Extra: Comment vérifier la consommation de mémoire autre que les variables

X = [X]
X.__sizeof__()
# 48

def f():
  pass
f.__sizeof__()
# 112

class A():
  pass
A.__sizeof__()
#   File "<stdin>", line 1, in <module>
# TypeError: descriptor '__sizeof__' of 'object' object needs an argument
#Sys décrit plus tard.getsizeof()Est possible

sys

import sys
import numpy as np

N = 1000
D = 3
X = np.random.randn(N,D)
print(sys.getsizeof(X))
# 24112

Au fait, dans le cas du pytorch, il ne sera pas correctement amené à moins que .storage () ne soit ajouté après la variable (une perte)

import sys
import torch

N = 1000
D = 3
X = torch.randn(N,D)
print(sys.getsizeof(X))
# 72
print(sys.getsizeof(X.storage()))
# 12064

memory_profiler

Appeler sys.getsizeof pour chaque variable que vous voulez voir est fastidieux. Donc memory_profiler. Ce n'est pas un package standard, vous devez donc l'installer.

Au fait, le contenu de la méthode cible dans @profile ne s'arrête pas en mode débogage de pycharm (une perte)


from memory_profiler import profile
import numpy as np

@profile()
def test():
    N = 10000000
    D = 3
    X = np.random.randn(N, D)

test()
    

Puis dans la sortie


Line #    Mem usage    Increment   Line Contents
================================================
     5     62.3 MiB     62.3 MiB   @profile()
     6                             def test():
     7     62.3 MiB      0.0 MiB       N = 10000000
     8     62.3 MiB      0.0 MiB       D = 3
     9    291.2 MiB    228.9 MiB       X = np.random.randn(N, D)

Te donnera.

L'utilisation de la mémoire est totale et l'incrément est la quantité de mémoire ajoutée sur cette ligne. Il semble que je ne puisse pas trop lui faire confiance en fonction de l'implémentation, mais je l'utilise pour une confirmation légère.

Recommended Posts

[python] Vérifier la consommation de mémoire des variables
L'histoire de la manipulation des variables globales Python
le zen de Python
Code pour vérifier le fonctionnement de Python Matplot lib
Vers la retraite de Python2
À propos des fonctionnalités de Python
Le pouvoir des pandas: Python
Prise en compte des décorateurs Python du type qui passe des variables
Trouver le diamètre du graphique par recherche de priorité de largeur (mémoire Python)
L'histoire de Python et l'histoire de NaN
[Python] La pierre d'achoppement de l'importation
First Python 3 ~ Le début de la répétition ~
Existence du point de vue de Python
pyenv-changer la version python de virtualenv
[Python] Comprendre le potentiel_field_planning de Python Robotics
Revue des bases de Python (FizzBuzz)
Vérification de l'environnement de développement NAOqi Python
À propos de la liste de base des bases de Python
Apprenez les bases de Python ① Débutants élémentaires
Comment vérifier la taille de la mémoire d'une variable en Python
[Python] Variables
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Changer la longueur des chaînes csv Python
Vérifiez le comportement du destroyer en Python
[Python3] Comprendre les bases de Beautiful Soup
Apprenez les bases en touchant les variables python
Notes d'apprentissage depuis le début de Python 1
Vérifier l'existence du fichier avec python
À propos de l'environnement virtuel de Python version 3.7
[Python3] Réécrire l'objet code de la fonction
Je ne connaissais pas les bases de Python
Le résultat de l'installation de python sur Anaconda
Vérifiez le chemin du module importé Python
[python] Obtenir une liste de variables d'instance
[python] [meta] Le type de python est-il un type?
Principes de base pour exécuter NoxPlayer en Python
Pandas du débutant, par le débutant, pour le débutant [Python]
Le modèle de projet Python auquel je pense.
À la recherche du FizzBuzz le plus rapide en Python
Cours de base Python (à la fin de 15)
Définissez le nom du processus du programme Python
[Python] Récupère le code de caractère du fichier
L'histoire du traitement A du blackjack (python)
Apprenez intuitivement la refonte de Python np
Note Python: le rôle secret de Kamma
Notes d'apprentissage depuis le début de Python 2
Traduction japonaise: PEP 20 - Le Zen de Python
[Python3] Comprendre les bases des opérations sur les fichiers
Récupérer le contenu de git diff depuis python
Sortie du nombre de cœurs de processeur en Python
Essai du parseur d'emacs-org orgparse pour python
[python] Vérifier les éléments de la liste tous, tous
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Préparer l'environnement d'exécution de Python3 avec Docker