[Python] Überprüfen Sie den Speicherverbrauch von Variablen

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.

Einführung

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

[Python] Überprüfen Sie den Speicherverbrauch von Variablen
Die Geschichte der Manipulation globaler Python-Variablen
der Zen von Python
Code zum Überprüfen des Betriebs von Python Matplot lib
Auf dem Weg zum Ruhestand von Python2
Über die Funktionen von Python
Die Kraft der Pandas: Python
Berücksichtigung von Python-Dekoratoren des Typs, der Variablen übergibt
Ermitteln Sie den Durchmesser des Diagramms anhand der Suche nach Breitenpriorität (Python-Speicher).
Die Geschichte von Python und die Geschichte von NaN
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Überprüfung der Grundlagen von Python (FizzBuzz)
Überprüfen der NAOqi Python-Entwicklungsumgebung
Informationen zur Grundlagenliste der Python-Grundlagen
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
So überprüfen Sie die Speichergröße einer Variablen in Python
[Python] -Variablen
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Ändern Sie die Länge der Python-CSV-Zeichenfolgen
Überprüfen Sie das Verhalten des Zerstörers in Python
[Python3] Verstehe die Grundlagen von Beautiful Soup
Lernen Sie die Grundlagen, während Sie Python-Variablen berühren
Notizen vom Anfang von Python 1 lernen
Überprüfen Sie die Existenz der Datei mit Python
Informationen zur virtuellen Umgebung von Python Version 3.7
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Ich kannte die Grundlagen von Python nicht
Das Ergebnis der Installation von Python auf Anaconda
Überprüfen Sie den Pfad des importierten Python-Moduls
[Python] Ruft eine Liste der Instanzvariablen ab
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Die Python-Projektvorlage, an die ich denke.
Auf der Suche nach dem schnellsten FizzBuzz in Python
Python-Grundkurs (Ende 15)
Legen Sie den Prozessnamen des Python-Programms fest
[Python] Ruft den Zeichencode der Datei ab
Die Geschichte der Verarbeitung A von Blackjack (Python)
Lernen Sie intuitiv die Umformung von Python np
Python Hinweis: Die geheime Rolle von Kamma
Notizen vom Anfang von Python 2 lernen
Japanische Übersetzung: PEP 20 - Das Zen von Python
[Python3] Grundlegendes zu Dateivorgängen
Holen Sie sich den Inhalt von Git Diff aus Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
Test von emacs-org parser orgparse für Python
[Python] Checklistenelemente alle, alle
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor