Dieser Artikel ist der 8. Tag von Furukawa Lab Advent_calendar. Dieser Artikel wurde von einem Studenten des Furukawa Lab als Teil seines Lernens geschrieben. Der Inhalt kann mehrdeutig sein oder der Ausdruck kann leicht abweichen.
Als Achsen für den Vergleich von Algorithmen für maschinelles Lernen derselben Aufgabe, Lernstabilität (Abhängigkeit vom Anfangswert), ob dies erklärt werden kann (Genauigkeit beim überwachten Lernen), Präzision, Rückruf ( Es gibt auch einen Index namens Recall)) und es gibt einen "Berechnungsbetrag".
Es ist schwierig, einen Algorithmus zu verwenden, der dazu neigt, den Rechenaufwand so zu erhöhen, dass er je nach Situation (Zeit / Berechnungsressource) nicht in den Speicher passt. (Beispiel: $ \ mathcal {O} (Anzahl der Daten ^ 3) $ einmal Die Anzahl der Trainingsdaten muss auf höchstens 1000 ($ 1000 ^ 3 = 10 Milliarden \ fallenddotseq 10GB $) begrenzt sein.
Auch wenn der Rechenaufwand gering ist, kann er in dieser Berechnung möglicherweise nicht implementiert werden.
Dieser Artikel beschreibt, wie Sie den Speicherverbrauch eines Python-Programms überprüfen.
No package Da @shiracamus angegeben hat, wie die Speichergröße ermittelt werden soll, ohne etwas zu importieren, werde ich sie dem Text hinzufügen.
import numpy as np
N = 1000
D = 3
X = np.random.randn(N,D)
X.__sizeof__()
# 24112
Extra: So überprüfen Sie den Speicherverbrauch außer Variablen
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 später beschrieben.getsizeof()Ist möglich
sys
import sys
import numpy as np
N = 1000
D = 3
X = np.random.randn(N,D)
print(sys.getsizeof(X))
# 24112
Übrigens, im Fall von Pytorch wird es nicht richtig gebracht, es sei denn, .storage () wird nach der Variablen hinzugefügt (ein Verlust)
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
Das Aufrufen von sys.getsizeof für jede Variable, die Sie sehen möchten, ist mühsam. Also memory_profiler. Es ist kein Standardpaket, daher müssen Sie es installieren.
Übrigens hört der Inhalt der Zielmethode in @profile im Debug-Modus von pycharm nicht auf (ein Verlust)
from memory_profiler import profile
import numpy as np
@profile()
def test():
N = 10000000
D = 3
X = np.random.randn(N, D)
test()
Dann in der Ausgabe
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)
Werde dir geben.
Die Mem-Nutzung ist Total und Increment ist die in dieser Zeile hinzugefügte Speichermenge. Es scheint, dass ich ihm je nach Implementierung nicht sehr vertrauen kann, aber ich benutze dies zur leichten Bestätigung.
Recommended Posts