es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas de memoria con matrices grandes de tamaño N

Tengo que crear N matrices grandes, de tamaño M x M, con M = 100’000, en un clúster. Puedo crearlas una por una. Por lo general, primero definiría un tensor:

mat_all = torch.zeros((N,M,M))

Y luego llenaría mat_all de la siguiente manera:

for i in range(N):
    tmp = create_matrix(M,M)
    mat_all[i,:,:] = tmp

donde la función create_matrix crea una matriz cuadrada de tamaño M.

Mi problema es: si hago eso, tengo problemas de memoria al crear el tensor grande mat_all con torch.ones. No tengo estos problemas cuando creo las matrices una por una con create_matrix.

Me preguntaba si hay alguna manera de tener un tensor como mat_all que maneje N matrices MxM, pero sin tener problemas de memoria.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para evitar problemas de memoria al crear un tensor grande con N matrices de tamaño M x M es utilizar una función generadora. En lugar de asignar memoria de antemano para mat_all, la función generadora puede crear una matriz a la vez y devolverla al programa principal, que luego puede insertarla en el tensor. De esta manera, solo se almacena en memoria una matriz a la vez en lugar de todas las N matrices.

    Aquí tienes un ejemplo de implementación:

    def generador_matrices(N, M):
        for i in range(N):
            yield crear_matriz(M, M)
    
    mat_all = torch.zeros((N, M, M))
    
    for i, matriz in enumerate(generador_matrices(N, M)):
        mat_all[i, :, :] = matriz
    

    En esta implementación, la función generador_matrices utiliza la palabra clave yield para devolver una matriz a la vez, en lugar de devolver una lista o tensor con todas las matrices de una vez. El bucle for luego itera sobre la función generadora e inserta cada matriz en mat_all una a la vez.

    Este enfoque te permite crear todas las N matrices de tamaño M x M sin tener problemas de memoria, ya que solo se almacena en memoria una matriz a la vez.

Comments are closed.