Memory Error bei Lagerhausgröße von 3x2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Memory Error bei Lagerhausgröße von 3x2
Wie in der letzten Vorlesung besprochen, sollte die Transition-Probability Matrix das Format AxSxS haben.
Bei der gegeben Anzahl an States (24576) und 6 Actions erscheint ein Memory Error wenn ich versuche diese Matrix mit Nullen zu initialisieren.

zum reproduzieren:

import numpy as np
t_matrix = np.zeros((6,24576,24576))

getestet unter:
Betriebssystem: Ubunutu 18.04
RAM: 16 GB (12 GB free)
Prozessor: I7 4XXX

sowie:
Google Colab

Habe ich nun die Aufgabe falsch verstanden (z.B. keine 6 Actions) oder initialisiere ich die Matrix falsch? Da das Format durch das PyMdbToolSet vorgegeben ist, fällt mir keine Lösung ein das Problem zu umgehen.

Hat jemand sonst noch das Problem?

@ Prof. Riehle und Jan Marvin Wickert:
Falls hier kein Fehler meinerseits vorliegt, wäre es möglich einfach mit einer 2x2 Matrix die Aufgabe zu bearbeiten?

Viele Grüße,

1 „Gefällt mir“

Ich laufe in genau das gleiche Problem rein.


ich bin noch nicht soweit aber probiert doch mal 6 2D sparse matrizen in ein numpy array zu stecken.
beim codebeispiel von letzter woche werden die die transition matrizen auch einzeln fuer jede action definiert und dann in ein gemeinsames numpy array geschrieben.

1 „Gefällt mir“

Das mit sparse Matrizen ist sicherlich die Musterlösung, da sie deutlich weniger Speicher brauchen. Ich hab jedoch einfach die Precision im Datentyp des numpy arrays runtergeschraubt.

import numpy as np
trans_prob = np.zeros((6,24657,24576),dtype=np.float16)

Standardmäßig ist double precision bei numpy vorgesehen (float64). Ich denke jedoch, dass in dieser Aufgabe auch half precision ausreichend ist. Die fehlenden Nachkommastellen sind nicht so relevant.

Ich hab das mal jetzt durchlaufen lassen mit half precision. Man braucht ca. 10 GB RAM. Somit sollte google colab(12 GB) auf jeden Fall passen. Zumindest hat es bei mir gereicht.


Das funktioniert bei mir trotzdem nicht, bekomme selbst auf google colab einen “your session crashed after using all available RAM” Error.


Hallo zusammen. Genau das ist das Problem bzw. die Lösung! Wenn ihr direkt die Matrix mit 6, 24576, 24576 erstellt, kann es zu einem Memory Error kommen. Bitte daher nur eine Matrix mit 24576, 24576 erstellen und danach die Matrix zusammenfügen. Habe dies mit GoogleColab ausprobiert und es wird kein Fehler mehr ausgegeben!

Mit folgenden Code könnt ihr die Gesamtmatrix erstellen:

import numpy as np
trans_prob_all = []
for i in range(6):
  trans_prob = np.zeros((24576, 24576),dtype=np.float16)
  trans_prob_all.append(trans_prob)
print(trans_prob_all)
1 „Gefällt mir“

Hat sich erledigt, hab wohl was falsch verstanden :slight_smile:


Bei mir rechnet es die Trans_prob (einzelnen Matrizen) ohne probleme aus. Das dauer so ca. 5 Minuten pro Matrix.
Append ist auch kein Problem. Nur sobald ich versuche trans_prob_all in ein numpy array umzuwandeln oder zu speichern kommt

Bei 2x2 gibt es kein Problem.
Ich habe genau den code der angegeben war verwendet.

import numpy as np
trans_prob_all = []
for i in range(6):
  trans_prob = np.zeros((24576, 24576),dtype=np.float16)
  trans_prob_all.append(trans_prob)


trans_prob_all=np.array(trans_prob_mat_all)
np.save('trans_prob_mat_all_1.npy', trans_prob_mat_all)

python listen sind intern nur pointer so viel ich weiss deswegen gibt es da kein memory problem.
ich hab die 6 matrizen einzeln abgespeichert und schreib sie dann wenn ich sie lad in eine gemeinsame liste.
damit hab ich auf google colab keine probleme


Meine Erfahrung war, dass es auf den verwendeten Algorithmus ankommt, ob ich damit ein 3x2 Problem auf meinem Rechner bearbeiten kann (hat ca. 12GB RAM frei). PolicyIteration z.B. sorgt sofort für einen MemoryError, während RelativeValueIteration ganz gut zurecht kommt (mein Eindruck ist, dass bei RelativeValueIteration v.a. der Garbage Collector für den Sägezahn-artigen Verlauf der RAM-Auslastung verantwortlich ist). Die T.P.M. ist als eine Liste von sparse matrices angelegt.


ok also normal valueiteration funktioniert bei mir auf google colab auch