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.
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